Revision: 201033 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:21:33 +0300
branchRCL_3
changeset 25 7333d7932ef7
parent 24 5cc91383ab1e
child 26 8b7f4e561641
Revision: 201033 Kit: 201035
appinstall.pro
appinstall_plat/appmngr2runtimeapi/src/appmngr2infobase.cpp
appinstall_plat/appmngr2runtimeapi/src/appmngr2infoiterator.cpp
appinstall_plat/appmngr2runtimeapi/src/appmngr2packageinfo.cpp
appinstall_plat/group/bld.inf
appinstall_plat/sifui_api/bwins/sifuiu.def
appinstall_plat/sifui_api/eabi/sifuiu.def
appinstall_plat/sifui_api/group/bld.inf
appinstall_plat/sifui_api/group/sifui.mmp
appinstall_plat/sifui_api/inc/sifui.h
appinstall_plat/sifui_api/inc/sifuiappinfo.h
appinstall_plat/sifui_api/inc/sifuicertificateinfo.h
appinstall_plat/sifui_api/inc/sifuidefs.h
appinstall_plat/sifui_api/inc/sifuierrorinfo.h
appinstall_plat/sifui_api/inc/sifuierrorinfo.inl
appinstall_plat/sifui_api/inc/sifuiinstallindicatordefinitions.h
appinstall_plat/sifui_api/inc/sifuiprivate.h
appinstall_plat/sifui_api/rom/sifui.iby
appinstall_plat/sifui_api/src/sifui.cpp
appinstall_plat/sifui_api/src/sifuiappinfo.cpp
appinstall_plat/sifui_api/src/sifuicertificateinfo.cpp
appinstall_plat/sifui_api/src/sifuierrorinfo.cpp
appinstall_plat/sifui_api/src/sifuiprivate.cpp
appinstall_plat/sifui_api/tsrc/bwins/sifuitestu.def
appinstall_plat/sifui_api/tsrc/data/mmc/test_x509_cert.cer
appinstall_plat/sifui_api/tsrc/eabi/sifuitestu.def
appinstall_plat/sifui_api/tsrc/group/bld.inf
appinstall_plat/sifui_api/tsrc/group/ctc_compile_tests.bat
appinstall_plat/sifui_api/tsrc/group/ctc_instrument_code.bat
appinstall_plat/sifui_api/tsrc/group/ctc_process_results.bat
appinstall_plat/sifui_api/tsrc/group/ctc_remove_instrumentation.bat
appinstall_plat/sifui_api/tsrc/group/ctc_run_tests.bat
appinstall_plat/sifui_api/tsrc/group/sifuitest.mmp
appinstall_plat/sifui_api/tsrc/group/sifuitest.pkg
appinstall_plat/sifui_api/tsrc/group/sifuitest_nrm.mmp
appinstall_plat/sifui_api/tsrc/inc/sifuitest.h
appinstall_plat/sifui_api/tsrc/inc/sifuitestcleanuputils.h
appinstall_plat/sifui_api/tsrc/init/sifuitest.ini
appinstall_plat/sifui_api/tsrc/run_module_tests.bat
appinstall_plat/sifui_api/tsrc/src/sifuitest.cpp
appinstall_plat/sifui_api/tsrc/src/sifuitestcases.cpp
appinstall_plat/sw_installer_cr_keys/tsrc/swinstsettingschanger/main.cpp
appinstall_plat/sw_installer_cr_keys/tsrc/swinstsettingschanger/swinstsettingschanger.cpp
appinstall_plat/sw_installer_cr_keys/tsrc/swinstsettingschanger/swinstsettingschanger.h
appinstall_plat/sw_installer_cr_keys/tsrc/swinstsettingschanger/swinstsettingschanger.iby
appinstall_plat/sw_installer_cr_keys/tsrc/swinstsettingschanger/swinstsettingschanger.pro
appinstaller/AppMngr2/GSSettingsPlugin/data/appmngr2gssettingspluginrsc.rss
appinstaller/AppMngr2/GSSettingsPlugin/src/appmngr2gssettingsplugin.cpp
appinstaller/AppMngr2/Sisx/group/appmngr2sisxruntime.mmp
appinstaller/AppMngr2/Sisx/inc/appmngr2sisxappinfo.h
appinstaller/AppMngr2/Sisx/src/appmngr2sisxappinfo.cpp
appinstaller/AppMngr2/Widget/inc/appmngr2widgetappinfo.h
appinstaller/AppMngr2/Widget/inc/appmngr2widgetruntime.h
appinstaller/AppMngr2/Widget/src/appmngr2widgetappinfo.cpp
appinstaller/AppMngr2/Widget/src/appmngr2widgetruntime.cpp
appinstaller/AppMngr2/group/appmngr2.mmp
appinstaller/AppMngr2/help/data/xhtml.zip
appinstaller/AppMngr2/help/inc/am.hlp.hrh
appinstaller/AppMngr2/inc/appmngr2appui.h
appinstaller/AppMngr2/inc/appmngr2exittimer.h
appinstaller/AppMngr2/inc/appmngr2listview.h
appinstaller/AppMngr2/inc/appmngr2model.h
appinstaller/AppMngr2/loc/appmngr2.loc
appinstaller/AppMngr2/src/appmngr2appui.cpp
appinstaller/AppMngr2/src/appmngr2exittimer.cpp
appinstaller/AppMngr2/src/appmngr2listcontainer.cpp
appinstaller/AppMngr2/src/appmngr2listview.cpp
appinstaller/AppMngr2/src/appmngr2model.cpp
appinstaller/AppinstUi/Daemon/Inc/DialogWrapper.h
appinstaller/AppinstUi/Daemon/Inc/SilentLauncher.h
appinstaller/AppinstUi/Daemon/Inc/daemonbehaviour.h
appinstaller/AppinstUi/Daemon/Inc/daemoninstaller.h
appinstaller/AppinstUi/Daemon/Inc/silentuninstaller.h
appinstaller/AppinstUi/Daemon/Inc/uninstaller.h
appinstaller/AppinstUi/Daemon/Src/DialogWrapper.cpp
appinstaller/AppinstUi/Daemon/Src/SilentLauncher.cpp
appinstaller/AppinstUi/Daemon/Src/daemon.cpp
appinstaller/AppinstUi/Daemon/Src/daemonbehaviour.cpp
appinstaller/AppinstUi/Daemon/Src/daemoninstaller.cpp
appinstaller/AppinstUi/Daemon/Src/dialogwatcher.cpp
appinstaller/AppinstUi/Daemon/Src/drivewatcher.cpp
appinstaller/AppinstUi/Daemon/Src/installationFailedAppsCache.cpp
appinstaller/AppinstUi/Daemon/Src/main.cpp
appinstaller/AppinstUi/Daemon/Src/previouslyInstalledAppsCache.cpp
appinstaller/AppinstUi/Daemon/Src/programstatus.cpp
appinstaller/AppinstUi/Daemon/Src/silentuninstaller.cpp
appinstaller/AppinstUi/Daemon/Src/uninstaller.cpp
appinstaller/AppinstUi/Daemon/Src/versionRevisor.cpp
appinstaller/AppinstUi/Plugin/CommonUI/Data/SWInstCommonUI.rss
appinstaller/AppinstUi/Plugin/CommonUI/Src/CUICertificateDetailsDialog.cpp
appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDetailsDialog.cpp
appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDialogs.cpp
appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDriveUtils.cpp
appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIProgressDialog.cpp
appinstaller/AppinstUi/Plugin/SisxUI/Src/SisxUIHandler.cpp
appinstaller/AppinstUi/Server/Data/SWInstSvrUI_reg.rss
appinstaller/AppinstUi/appinstui.pro
appinstaller/AppinstUi/group/SWInstCommonUI.mmp
appinstaller/AppinstUi/group/bld.inf
appinstaller/AppinstUi/group/daemon.mmp
appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidevicedialogplugin.h
appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialog.h
appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogcertificatedetails.h
appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogcertificateinfo.h
appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogcontentwidget.h
appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogdefinitions.h
appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialoggrantcapabilities.h
appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialoggrantcapabilitiescontent.h
appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogselectlanguage.h
appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogtitlewidget.h
appinstaller/AppinstUi/sifuidevicedialogplugin/rom/sifuidevicedialogplugin.iby
appinstaller/AppinstUi/sifuidevicedialogplugin/rom/sifuidevicedialogplugin_resources.iby
appinstaller/AppinstUi/sifuidevicedialogplugin/sifuidevicedialogplugin.pro
appinstaller/AppinstUi/sifuidevicedialogplugin/sifuidevicedialogplugin.qcrml
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidevicedialogplugin.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialog.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcertificatedetails.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcertificateinfo.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcontentwidget.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialoggrantcapabilities.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialoggrantcapabilitiescontent.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogselectlanguage.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogselectlanguage_symbian.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogselectoptions_symbian.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogtitlewidget.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogtitlewidget_symbian.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/tsrc/tsrc.pro
appinstaller/AppinstUi/sifuidevicedialogplugin/tsrc/ut_sifuidevicedialog/ut_sifuidevicedialog.cpp
appinstaller/AppinstUi/sifuidevicedialogplugin/tsrc/ut_sifuidevicedialog/ut_sifuidevicedialog.h
appinstaller/AppinstUi/sifuidevicedialogplugin/tsrc/ut_sifuidevicedialog/ut_sifuidevicedialog.pro
appinstaller/AppinstUi/sifuiinstallindicatorplugin/inc/sifuiinstallindicator.h
appinstaller/AppinstUi/sifuiinstallindicatorplugin/inc/sifuiinstallindicatorparams.h
appinstaller/AppinstUi/sifuiinstallindicatorplugin/inc/sifuiinstallindicatorplugin.h
appinstaller/AppinstUi/sifuiinstallindicatorplugin/rom/sifuiinstallindicatorplugin.iby
appinstaller/AppinstUi/sifuiinstallindicatorplugin/sifuiinstallindicatorplugin.pro
appinstaller/AppinstUi/sifuiinstallindicatorplugin/sifuiinstallindicatorplugin.qcrml
appinstaller/AppinstUi/sifuiinstallindicatorplugin/src/sifuiinstallindicator.cpp
appinstaller/AppinstUi/sifuiinstallindicatorplugin/src/sifuiinstallindicatorplugin.cpp
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_compile_tests.bat
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_instrument_code.bat
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_remove_instrumentation.bat
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_run_tests.bat
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/mt_sifuiinstallindicator.cpp
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/mt_sifuiinstallindicator.h
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/mt_sifuiinstallindicator.pro
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/run_module_tests.bat
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.cpp
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.h
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.pro
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindimain.cpp
appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/tsrc.pro
appinstaller/AppinstUi/sisxsifplugin/data/20022FC1.rss
appinstaller/AppinstUi/sisxsifplugin/group/bld.inf
appinstaller/AppinstUi/sisxsifplugin/group/sisxsifplugin.mmp
appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifcleanuputils.h
appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifplugin.h
appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifplugin.pan
appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginactiveimpl.h
appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginerrorhandler.h
appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginerrors.h
appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifplugininstallparams.h
appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginuihandler.h
appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginuihandlerbase.h
appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginuihandlersilent.h
appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifuiselectioncache.h
appinstaller/AppinstUi/sisxsifplugin/rom/sisxsifplugin.iby
appinstaller/AppinstUi/sisxsifplugin/src/sisxsifplugin.cpp
appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginactiveimpl.cpp
appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginerrorhandler.cpp
appinstaller/AppinstUi/sisxsifplugin/src/sisxsifplugininstallparams.cpp
appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginmain.cpp
appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginuihandler.cpp
appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginuihandlerbase.cpp
appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginuihandlersilent.cpp
appinstaller/AppinstUi/sisxsifplugin/src/sisxsifuiselectioncache.cpp
appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner.cpp
appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner.h
appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner_symbian.cpp
appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner_symbian.h
appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/main.cpp
appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.cpp
appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.h
appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.iby
appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.pkg
appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.pro
appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/inc/sisxsilentinstallindicator.h
appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/inc/sisxsilentinstallindicatorplugin.h
appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/rom/sisxsilentinstallindicatorplugin.iby
appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/sisxsilentinstallindicatorplugin.pro
appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/src/sisxsilentinstallindicator.cpp
appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/src/sisxsilentinstallindicatorplugin.cpp
appinstaller/AppinstUi/startuplistupdater/group/bld.inf
appinstaller/AppinstUi/startuplistupdater/group/startuplistupdater.mmp
appinstaller/AppinstUi/startuplistupdater/inc/cleanupresetanddestroy.h
appinstaller/AppinstUi/startuplistupdater/inc/startuplistupdater.h
appinstaller/AppinstUi/startuplistupdater/rom/startuplistupdater.iby
appinstaller/AppinstUi/startuplistupdater/src/main.cpp
appinstaller/AppinstUi/startuplistupdater/src/startuplistupdater.cpp
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/bwins/mt_startuplistupdateru.def
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/conf/mt_startuplistupdater.cfg
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_compile_tests.bat
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_instrument_code.bat
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_remove_instrumentation.bat
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_run_tests.bat
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data/mmc/teststartlist.sisx
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data/mmc/teststartlist_winscw.sisx
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data/mmc/teststartlistembedded.sisx
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data/mmc/teststartlistembedded_winscw.sisx
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/bld.inf
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/doall.bat
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist.cpp
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist.h
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist.mmp
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist.pkg
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist.rss
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist_winscw.pkg
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/bld.inf
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/datafile.txt
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/doall.bat
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.cpp
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.h
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.mmp
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.pkg
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.rss
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded_main.pkg
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded_main_winscw.pkg
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded_winscw.pkg
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/eabi/mt_startuplistupdateru.def
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/bld.inf
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/mt_startuplistupdater.mmp
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/mt_startuplistupdater.pkg
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/mt_startuplistupdater_nrm.mmp
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/inc/cleanupresetanddestroy.h
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/inc/mt_startuplistupdater.h
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/init/TestFramework.ini
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/rom/mt_startuplistupdater.iby
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/src/mt_startuplistupdater.cpp
appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/src/mt_startuplistupdaterblocks.cpp
appinstaller/AppinstUi/startuplistupdater/tsrc/run_module_tests.bat
appinstaller/AppinstUi/startuplistupdater/tsrc/testslulauncher/main.cpp
appinstaller/AppinstUi/startuplistupdater/tsrc/testslulauncher/testslulauncher.cpp
appinstaller/AppinstUi/startuplistupdater/tsrc/testslulauncher/testslulauncher.h
appinstaller/AppinstUi/startuplistupdater/tsrc/testslulauncher/testslulauncher.pro
appinstaller/appinstaller.pro
appinstaller/group/bld.inf
iaupdate/IAD/api/bwins/iaupdateapiu.def
iaupdate/IAD/api/client/inc/iaupdateclient.h
iaupdate/IAD/api/client/inc/iaupdatemanager.h
iaupdate/IAD/api/client/src/iaupdateclient.cpp
iaupdate/IAD/api/client/src/iaupdatemanager.cpp
iaupdate/IAD/api/eabi/iaupdateapiu.def
iaupdate/IAD/api/group/bld.inf
iaupdate/IAD/api/group/iaupdateapi.mmp
iaupdate/IAD/api/iaupdateapi.pro
iaupdate/IAD/backgroundchecker/group/bld.inf
iaupdate/IAD/backgroundchecker/group/iaupdatebg.mmp
iaupdate/IAD/backgroundchecker/inc/iaupdatebgcheckermode.h
iaupdate/IAD/backgroundchecker/inc/iaupdatebgconst.h
iaupdate/IAD/backgroundchecker/inc/iaupdatebgfirsttimehandler.h
iaupdate/IAD/backgroundchecker/inc/iaupdatebginternalfilehandler.h
iaupdate/IAD/backgroundchecker/inc/iaupdatebgnotifyhandler.h
iaupdate/IAD/backgroundchecker/inc/iaupdatebgrefreshtimer.h
iaupdate/IAD/backgroundchecker/inc/iaupdatebgremindertimer.h
iaupdate/IAD/backgroundchecker/inc/iaupdatebgsoftnotification.h
iaupdate/IAD/backgroundchecker/src/iaupdatbgnotifyhandler.cpp
iaupdate/IAD/backgroundchecker/src/iaupdatebgfirsttimehandler.cpp
iaupdate/IAD/backgroundchecker/src/iaupdatebginternalfilehandler.cpp
iaupdate/IAD/backgroundchecker/src/iaupdatebgmain.cpp
iaupdate/IAD/backgroundchecker/src/iaupdatebgrefreshtimer.cpp
iaupdate/IAD/backgroundchecker/src/iaupdatebgremindertimer.cpp
iaupdate/IAD/backgroundchecker/src/iaupdatebgsoftnotification.cpp
iaupdate/IAD/bgcindicatorplugin/bgcindicatorplugin.pro
iaupdate/IAD/bgcindicatorplugin/inc/bgcindicator.h
iaupdate/IAD/bgcindicatorplugin/inc/bgcindicatorplugin.h
iaupdate/IAD/bgcindicatorplugin/rom/bgcindicatorplugin.iby
iaupdate/IAD/bgcindicatorplugin/src/bgcindicator.cpp
iaupdate/IAD/bgcindicatorplugin/src/bgcindicatorplugin.cpp
iaupdate/IAD/bwins/iaupdateapiu.def
iaupdate/IAD/configurator/group/iadctrldcmoadapter.mmp
iaupdate/IAD/configurator/src/iadctrldcmoadapter.cpp
iaupdate/IAD/eabi/iaupdateapiu.def
iaupdate/IAD/engine/controller/inc/iaupdatenodeimpl.h
iaupdate/IAD/engine/controller/src/iaupdateinstalloperation.cpp
iaupdate/IAD/engine/controller/src/iaupdatenodeimpl.cpp
iaupdate/IAD/engine/controller/src/iaupdateutils.cpp
iaupdate/IAD/engine/group/iaupdateengine.mmp
iaupdate/IAD/engine/inc/iaupdatenode.h
iaupdate/IAD/engine/inc/iaupdateutils.h
iaupdate/IAD/firmwareupdate/group/iaupdatefwupdate.mmp
iaupdate/IAD/firmwareupdate/inc/iaupdatefwfotamodel.h
iaupdate/IAD/firmwareupdate/inc/iaupdatefwsynchandler.h
iaupdate/IAD/firmwareupdate/src/iaupdatefwfotamodel.cpp
iaupdate/IAD/firmwareupdate/src/iaupdatefwsynchandler.cpp
iaupdate/IAD/firmwareupdate/src/iaupdatefwsyncutil.cpp
iaupdate/IAD/firmwareupdate/src/iaupdatefwupdatehandler.cpp
iaupdate/IAD/group/bld.inf
iaupdate/IAD/launcher/group/bld.inf
iaupdate/IAD/launcher/group/iaupdatelauncher.mmp
iaupdate/IAD/launcher/group/iaupdatelauncher.rss
iaupdate/IAD/launcher/group/iaupdatelauncher_reg.rss
iaupdate/IAD/launcher/iaupdatelauncher.pro
iaupdate/IAD/launcher/inc/iaupdatelauncherapplication.h
iaupdate/IAD/launcher/inc/iaupdatelauncherappui.h
iaupdate/IAD/launcher/inc/iaupdatelauncherclient.h
iaupdate/IAD/launcher/inc/iaupdatelauncherdocument.h
iaupdate/IAD/launcher/inc/iaupdatelaunchermanager.h
iaupdate/IAD/launcher/src/iaupdatelauncher.cpp
iaupdate/IAD/launcher/src/iaupdatelauncherapplication.cpp
iaupdate/IAD/launcher/src/iaupdatelauncherappui.cpp
iaupdate/IAD/launcher/src/iaupdatelauncherclient.cpp
iaupdate/IAD/launcher/src/iaupdatelauncherdocument.cpp
iaupdate/IAD/launcher/src/iaupdatelaunchermain.cpp
iaupdate/IAD/launcher/src/iaupdatelaunchermanager.cpp
iaupdate/IAD/loc/iaupdate.loc
iaupdate/IAD/tools/bwins/iaupdatetoolsu.def
iaupdate/IAD/tools/eabi/iaupdatetoolsu.def
iaupdate/IAD/tools/group/bld.inf
iaupdate/IAD/tools/group/iaupdatetools.mmp
iaupdate/IAD/tools/inc/iaupdatetools.h
iaupdate/IAD/tools/src/iaupdatetools.cpp
iaupdate/IAD/ui/group/2000F85A.txt
iaupdate/IAD/ui/group/backup_registration.xml
iaupdate/IAD/ui/group/bld.inf
iaupdate/IAD/ui/group/iaupdate.mmp
iaupdate/IAD/ui/group/iaupdate.rss
iaupdate/IAD/ui/group/iaupdate_reg.rss
iaupdate/IAD/ui/iaupdate.pro
iaupdate/IAD/ui/iaupdate.qrc
iaupdate/IAD/ui/iaupdate_mainview.docml
iaupdate/IAD/ui/inc/iaupdate.hrh
iaupdate/IAD/ui/inc/iaupdateaccesspointhandler.h
iaupdate/IAD/ui/inc/iaupdateagreement.h
iaupdate/IAD/ui/inc/iaupdateapplication.h
iaupdate/IAD/ui/inc/iaupdateappui.h
iaupdate/IAD/ui/inc/iaupdateautomaticcheck.h
iaupdate/IAD/ui/inc/iaupdatecontainerobserver.h
iaupdate/IAD/ui/inc/iaupdatedeputils.h
iaupdate/IAD/ui/inc/iaupdatedetailsdialog.h
iaupdate/IAD/ui/inc/iaupdatedialogobserver.h
iaupdate/IAD/ui/inc/iaupdatedialogutil.h
iaupdate/IAD/ui/inc/iaupdatedocument.h
iaupdate/IAD/ui/inc/iaupdateengine.h
iaupdate/IAD/ui/inc/iaupdatefirsttimedatefile.h
iaupdate/IAD/ui/inc/iaupdatefirsttimeinfo.h
iaupdate/IAD/ui/inc/iaupdatefwdetailsdialog.h
iaupdate/IAD/ui/inc/iaupdatehistorycontainer.h
iaupdate/IAD/ui/inc/iaupdatehistoryview.h
iaupdate/IAD/ui/inc/iaupdatemaincontainer.h
iaupdate/IAD/ui/inc/iaupdatemainview.h
iaupdate/IAD/ui/inc/iaupdatemainwindow.h
iaupdate/IAD/ui/inc/iaupdatenavipanehandler.h
iaupdate/IAD/ui/inc/iaupdatenodefilter.h
iaupdate/IAD/ui/inc/iaupdateprogressdialog.h
iaupdate/IAD/ui/inc/iaupdaterefreshhandler.h
iaupdate/IAD/ui/inc/iaupdateresultsdialog.h
iaupdate/IAD/ui/inc/iaupdateserver.h
iaupdate/IAD/ui/inc/iaupdateserviceprovider.h
iaupdate/IAD/ui/inc/iaupdatesession.h
iaupdate/IAD/ui/inc/iaupdatesettingdialog.h
iaupdate/IAD/ui/inc/iaupdatestatusdialog.h
iaupdate/IAD/ui/inc/iaupdatestatuspanehandler.h
iaupdate/IAD/ui/inc/iaupdatetools.h
iaupdate/IAD/ui/inc/iaupdateuicontroller.h
iaupdate/IAD/ui/inc/iaupdateuicontrollerobserver.h
iaupdate/IAD/ui/inc/iaupdatewaitdialog.h
iaupdate/IAD/ui/inc/iaupdatewaitdialogobserver.h
iaupdate/IAD/ui/service_conf.xml
iaupdate/IAD/ui/src/iaupdateaccesspointhandler.cpp
iaupdate/IAD/ui/src/iaupdateagreement.cpp
iaupdate/IAD/ui/src/iaupdateapplication.cpp
iaupdate/IAD/ui/src/iaupdateappui.cpp
iaupdate/IAD/ui/src/iaupdateautomaticcheck.cpp
iaupdate/IAD/ui/src/iaupdatedeputils.cpp
iaupdate/IAD/ui/src/iaupdatedetailsdialog.cpp
iaupdate/IAD/ui/src/iaupdatedialogutil.cpp
iaupdate/IAD/ui/src/iaupdatedocument.cpp
iaupdate/IAD/ui/src/iaupdateengine.cpp
iaupdate/IAD/ui/src/iaupdatefirsttimedatefile.cpp
iaupdate/IAD/ui/src/iaupdatefirsttimeinfo.cpp
iaupdate/IAD/ui/src/iaupdatefwdetailsdialog.cpp
iaupdate/IAD/ui/src/iaupdatehistorycontainer.cpp
iaupdate/IAD/ui/src/iaupdatehistoryview.cpp
iaupdate/IAD/ui/src/iaupdatemain.cpp
iaupdate/IAD/ui/src/iaupdatemaincontainer.cpp
iaupdate/IAD/ui/src/iaupdatemainview.cpp
iaupdate/IAD/ui/src/iaupdatemainwindow.cpp
iaupdate/IAD/ui/src/iaupdatenavipanehandler.cpp
iaupdate/IAD/ui/src/iaupdatenodefilter.cpp
iaupdate/IAD/ui/src/iaupdateprogressdialog.cpp
iaupdate/IAD/ui/src/iaupdatequeryhistory.cpp
iaupdate/IAD/ui/src/iaupdateresultsdialog.cpp
iaupdate/IAD/ui/src/iaupdateroaminghandler.cpp
iaupdate/IAD/ui/src/iaupdateserver.cpp
iaupdate/IAD/ui/src/iaupdateserviceprovider.cpp
iaupdate/IAD/ui/src/iaupdatesession.cpp
iaupdate/IAD/ui/src/iaupdatesettingdialog.cpp
iaupdate/IAD/ui/src/iaupdatestatusdialog.cpp
iaupdate/IAD/ui/src/iaupdatestatuspanehandler.cpp
iaupdate/IAD/ui/src/iaupdatetools.cpp
iaupdate/IAD/ui/src/iaupdateuicontroller.cpp
iaupdate/IAD/ui/src/iaupdatewaitdialog.cpp
iaupdate/IAD/updater/group/iaupdater.mmp
iaupdate/IAD/updater/inc/iaupdaterdialog.h
iaupdate/IAD/updater/inc/iaupdatersilentlauncher.h
iaupdate/IAD/updater/sis/Rd.cer
iaupdate/IAD/updater/sis/Rd.pem
iaupdate/IAD/updater/sis/iaupdater.bat
iaupdate/IAD/updater/sis/iaupdater.pkg
iaupdate/IAD/updater/sis/iaupdater_debug.bat
iaupdate/IAD/updater/sis/iaupdater_debug.pkg
iaupdate/IAD/updater/src/iaupdaterdialog.cpp
iaupdate/IAD/updater/src/iaupdatermngr.cpp
iaupdate/IAD/updater/src/iaupdatersilentlauncher.cpp
iaupdate/group/backup_registration.xml
iaupdate/group/bld.inf
iaupdate/iaupdate.pro
iaupdate/rom/iaupdate.iby
iaupdate/rom/iaupdate_stub.SIS
iaupdate/rom/iaupdate_stub.pkg
iaupdate/rom/iaupdateresources.iby
iaupdateapi_stub/conf/iaupdate.confml
iaupdateapi_stub/conf/iaupdate_2000F85A.crml
iaupdateapi_stub/group/bld.inf
iaupdateapi_stub/group/iaupdateapi.mmp
iaupdateapi_stub/group/iaupdateapi_stub.mmp
iaupdateapi_stub/rom/iaupdateapi.iby
installationservices/refsoftwareappmgr/group/appmanager.mmp
installationservices/refsoftwareappmgr/group/bld.inf
installationservices/refsoftwareappmgr/group/security_referenceapplicationmanager.history.xml
installationservices/refsoftwareappmgr/group/security_referenceapplicationmanager.mrp
installationservices/refsoftwareappmgr/source/appmanager.cpp
installationservices/refsoftwareappmgr/source/command.cpp
installationservices/refsoftwareappmgr/source/command.h
installationservices/refswinstallationplugin/group/bld.inf
installationservices/refswinstallationplugin/group/security_sifrefplugin.mrp
installationservices/refswinstallationplugin/group/sifrefinstallerserver.mmp
installationservices/refswinstallationplugin/group/sifrefpkgrec.mmp
installationservices/refswinstallationplugin/group/sifrefplugin.mmp
installationservices/refswinstallationplugin/inc/sifrefbinpkgextractor.h
installationservices/refswinstallationplugin/inc/sifrefinstaller.iby
installationservices/refswinstallationplugin/inc/sifrefinstallerclient.h
installationservices/refswinstallationplugin/inc/sifrefinstallerclientserver.h
installationservices/refswinstallationplugin/inc/sifrefinstallertask.h
installationservices/refswinstallationplugin/inc/sifrefpkgparser.h
installationservices/refswinstallationplugin/inc/sifrefpkgrec.h
installationservices/refswinstallationplugin/inc/sifrefplugin.h
installationservices/refswinstallationplugin/inc/sifrefuihandler.h
installationservices/refswinstallationplugin/inc/tsifrefinstaller.iby
installationservices/refswinstallationplugin/sample/base.sifrefpkg
installationservices/refswinstallationplugin/sample/invalid.sifrefpkg
installationservices/refswinstallationplugin/sample/makebinpkg.pl
installationservices/refswinstallationplugin/sample/upgrade.sifrefpkg
installationservices/refswinstallationplugin/source/1028634f.rss
installationservices/refswinstallationplugin/source/10286351.rss
installationservices/refswinstallationplugin/source/sifrefbinpkgextractor.cpp
installationservices/refswinstallationplugin/source/sifrefinstallerclient.cpp
installationservices/refswinstallationplugin/source/sifrefinstallerserver.cpp
installationservices/refswinstallationplugin/source/sifrefinstallertask.cpp
installationservices/refswinstallationplugin/source/sifrefpkgparser.cpp
installationservices/refswinstallationplugin/source/sifrefpkgrec.cpp
installationservices/refswinstallationplugin/source/sifrefplugin.cpp
installationservices/refswinstallationplugin/source/sifrefuihandler.cpp
installationservices/refswinstallationplugin/test/scripts/data/base2.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/base3.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/fileinusetest.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/invalid10.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/invalid11.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/invalid12.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/invalid2.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/invalid3.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/invalid4.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/invalid5.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/invalid6.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/invalid7.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/invalid8.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/data/invalid9.sifrefpkg
installationservices/refswinstallationplugin/test/scripts/tsifrefinstaller.ini
installationservices/refswinstallationplugin/test/scripts/tsifrefinstaller.script
installationservices/swcomponentregistry/bwins/scrclientu.def
installationservices/swcomponentregistry/bwins/scrdatabaseu.def
installationservices/swcomponentregistry/bwins/scrhelperclientu.def
installationservices/swcomponentregistry/eabi/scrclientu.def
installationservices/swcomponentregistry/eabi/scrdatabaseu.def
installationservices/swcomponentregistry/eabi/scrhelperclientu.def
installationservices/swcomponentregistry/group/bld.inf
installationservices/swcomponentregistry/group/scrclient.mmp
installationservices/swcomponentregistry/group/scrdatabase.mmp
installationservices/swcomponentregistry/group/scrserver.mmp
installationservices/swcomponentregistry/group/security_softwarecomponentregistry.history.xml
installationservices/swcomponentregistry/group/security_softwarecomponentregistry.mrp
installationservices/swcomponentregistry/inc/appregentries.h
installationservices/swcomponentregistry/inc/appreginfo.h
installationservices/swcomponentregistry/inc/scr.h
installationservices/swcomponentregistry/inc/scr.iby
installationservices/swcomponentregistry/inc/scrcommon.h
installationservices/swcomponentregistry/inc/scrcommon.inl
installationservices/swcomponentregistry/inc/screntries.h
installationservices/swcomponentregistry/inc/screntries_internal.h
installationservices/swcomponentregistry/inc/screntries_platform.h
installationservices/swcomponentregistry/inc/tscr.iby
installationservices/swcomponentregistry/inc_private/scr_internal.h
installationservices/swcomponentregistry/inc_private/scrclient.inl
installationservices/swcomponentregistry/inc_private/scrdatabase.h
installationservices/swcomponentregistry/inc_private/scrdbschema.sql
installationservices/swcomponentregistry/inc_private/scrrepository.h
installationservices/swcomponentregistry/inc_private/scrrequestimpl.h
installationservices/swcomponentregistry/inc_private/scrserver.h
installationservices/swcomponentregistry/inc_private/scrsubsession.h
installationservices/swcomponentregistry/scrhelper/group/scrhelperclient.mmp
installationservices/swcomponentregistry/scrhelper/group/scrhelperserver.mmp
installationservices/swcomponentregistry/scrhelper/inc/scrhelperclient.h
installationservices/swcomponentregistry/scrhelper/inc/scrhelpercommon.h
installationservices/swcomponentregistry/scrhelper/inc/scrhelpercommon.inl
installationservices/swcomponentregistry/scrhelper/inc/scrhelperserver.h
installationservices/swcomponentregistry/scrhelper/source/scrhelperclient.cpp
installationservices/swcomponentregistry/scrhelper/source/scrhelperserver.cpp
installationservices/swcomponentregistry/scrhelper/source/scrhelperstartup.cpp
installationservices/swcomponentregistry/source/client/appregentries.cpp
installationservices/swcomponentregistry/source/client/appreginfo.cpp
installationservices/swcomponentregistry/source/client/scrclient.cpp
installationservices/swcomponentregistry/source/client/scrclientsubsessions.cpp
installationservices/swcomponentregistry/source/client/screntries.cpp
installationservices/swcomponentregistry/source/database/scrdatabase.cpp
installationservices/swcomponentregistry/source/server/scrrepository.cpp
installationservices/swcomponentregistry/source/server/scrrequestimpl.cpp
installationservices/swcomponentregistry/source/server/scrserver.cpp
installationservices/swcomponentregistry/source/server/scrsession.cpp
installationservices/swcomponentregistry/source/server/scrsubsession.cpp
installationservices/swcomponentregistry/source/server/startup.cpp
installationservices/swcomponentregistry/test/group/tscr.mmp
installationservices/swcomponentregistry/test/group/tscraccessor.mmp
installationservices/swcomponentregistry/test/group/tscrapparc.mmp
installationservices/swcomponentregistry/test/group/tscrdatalayer.mmp
installationservices/swcomponentregistry/test/testdb/create_db.xml
installationservices/swcomponentregistry/test/testdb/modifydb.sql
installationservices/swcomponentregistry/test/testdb/scr.db
installationservices/swcomponentregistry/test/testdb/scrdbschema.sql
installationservices/swcomponentregistry/test/testdb/update_db.dtd
installationservices/swcomponentregistry/test/testdb/update_db_production.xml
installationservices/swcomponentregistry/test/testdb/update_db_test.xml
installationservices/swcomponentregistry/test/tscr/inc/appmanagersteps.h
installationservices/swcomponentregistry/test/tscr/inc/appreginfosteps.h
installationservices/swcomponentregistry/test/tscr/inc/componentmanagementsteps.h
installationservices/swcomponentregistry/test/tscr/inc/componentquerysteps.h
installationservices/swcomponentregistry/test/tscr/inc/deletescrdbstep.h
installationservices/swcomponentregistry/test/tscr/inc/installloghistorysteps.h
installationservices/swcomponentregistry/test/tscr/inc/pluginmanagementsteps.h
installationservices/swcomponentregistry/test/tscr/inc/sifsteps.h
installationservices/swcomponentregistry/test/tscr/inc/subsessionsteps.h
installationservices/swcomponentregistry/test/tscr/inc/transactionmanagementsteps.h
installationservices/swcomponentregistry/test/tscr/inc/tscrdefs.h
installationservices/swcomponentregistry/test/tscr/inc/tscrserver.h
installationservices/swcomponentregistry/test/tscr/inc/tscrstep.h
installationservices/swcomponentregistry/test/tscr/scripts/data/scr-differentbuildnumber.db
installationservices/swcomponentregistry/test/tscr/scripts/data/scr-multiapp.db
installationservices/swcomponentregistry/test/tscr/scripts/data/scr-newermajordbversion.db
installationservices/swcomponentregistry/test/tscr/scripts/data/scr-newerminordbversion.db
installationservices/swcomponentregistry/test/tscr/scripts/data/scr-nodefaultvalues.db
installationservices/swcomponentregistry/test/tscr/scripts/data/scr-noentriesinversiontable.db
installationservices/swcomponentregistry/test/tscr/scripts/data/scr-noversiontable.db
installationservices/swcomponentregistry/test/tscr/scripts/data/scr-oldermajordbversion.db
installationservices/swcomponentregistry/test/tscr/scripts/data/scr-olderminordbversion.db
installationservices/swcomponentregistry/test/tscr/scripts/data/scr_large.db
installationservices/swcomponentregistry/test/tscr/scripts/data/scr_medium.db
installationservices/swcomponentregistry/test/tscr/scripts/data/scr_small.db
installationservices/swcomponentregistry/test/tscr/scripts/performance_log_parser.pl
installationservices/swcomponentregistry/test/tscr/scripts/tscr.ini
installationservices/swcomponentregistry/test/tscr/scripts/tscr.script
installationservices/swcomponentregistry/test/tscr/scripts/tscr_api.script
installationservices/swcomponentregistry/test/tscr/scripts/tscr_app_performance_cases.script
installationservices/swcomponentregistry/test/tscr/scripts/tscr_appreginfo.ini
installationservices/swcomponentregistry/test/tscr/scripts/tscr_appreginfo.script
installationservices/swcomponentregistry/test/tscr/scripts/tscr_oom.script
installationservices/swcomponentregistry/test/tscr/scripts/tscr_performance.ini
installationservices/swcomponentregistry/test/tscr/scripts/tscr_performance.script
installationservices/swcomponentregistry/test/tscr/scripts/tscr_performance_cases.script
installationservices/swcomponentregistry/test/tscr/scripts/tscr_versioning.script
installationservices/swcomponentregistry/test/tscr/scripts/tscrapparc.script
installationservices/swcomponentregistry/test/tscr/source/appmanagersteps.cpp
installationservices/swcomponentregistry/test/tscr/source/appreginfosteps.cpp
installationservices/swcomponentregistry/test/tscr/source/componentmanagementsteps.cpp
installationservices/swcomponentregistry/test/tscr/source/componentquerysteps.cpp
installationservices/swcomponentregistry/test/tscr/source/deletescrdbstep.cpp
installationservices/swcomponentregistry/test/tscr/source/installloghistorysteps.cpp
installationservices/swcomponentregistry/test/tscr/source/pluginmanagementsteps.cpp
installationservices/swcomponentregistry/test/tscr/source/sifsteps.cpp
installationservices/swcomponentregistry/test/tscr/source/subsessionsteps.cpp
installationservices/swcomponentregistry/test/tscr/source/transactionmanagementsteps.cpp
installationservices/swcomponentregistry/test/tscr/source/tscrserver.cpp
installationservices/swcomponentregistry/test/tscr/source/tscrstep.cpp
installationservices/swcomponentregistry/test/tscraccessor/inc/tscraccessor_client.h
installationservices/swcomponentregistry/test/tscraccessor/inc/tscraccessor_common.h
installationservices/swcomponentregistry/test/tscraccessor/inc/tscraccessor_server_session.h
installationservices/swcomponentregistry/test/tscraccessor/source/tscraccessor_client.cpp
installationservices/swcomponentregistry/test/tscraccessor/source/tscraccessor_server_session.cpp
installationservices/swcomponentregistry/test/tscraccessor/source/tscraccessor_startup.cpp
installationservices/swcomponentregistry/test/tscrapparc/inc/appreginfoapparcsteps.h
installationservices/swcomponentregistry/test/tscrapparc/inc/tscrapparcserver.h
installationservices/swcomponentregistry/test/tscrapparc/source/appreginfoapparcsteps.cpp
installationservices/swcomponentregistry/test/tscrapparc/source/tscrapparcserver.cpp
installationservices/swcomponentregistry/test/tscrdatalayer/inc/datalayersteps.h
installationservices/swcomponentregistry/test/tscrdatalayer/inc/tscrdatalayerserver.h
installationservices/swcomponentregistry/test/tscrdatalayer/scripts/data/nondb.db
installationservices/swcomponentregistry/test/tscrdatalayer/scripts/tscr_datalayer.script
installationservices/swcomponentregistry/test/tscrdatalayer/scripts/tscr_datalayer_oom.ini
installationservices/swcomponentregistry/test/tscrdatalayer/scripts/tscr_datalayer_oom.script
installationservices/swcomponentregistry/test/tscrdatalayer/source/datalayersteps.cpp
installationservices/swcomponentregistry/test/tscrdatalayer/source/tscrdatalayer.cpp
installationservices/swi/bwins/apprscparseru.def
installationservices/swi/bwins/planU.DEF
installationservices/swi/bwins/plan_legacyU.def
installationservices/swi/bwins/sislauncherclientU.DEF
installationservices/swi/bwins/sisregistryclient_v2U.def
installationservices/swi/bwins/sisregistryclient_v2_legacyU.def
installationservices/swi/bwins/swtypereginfou.def
installationservices/swi/bwins/uissclientU.DEF
installationservices/swi/bwins/uissclient_legacyu.def
installationservices/swi/eabi/apprscparseru.def
installationservices/swi/eabi/planU.DEF
installationservices/swi/eabi/plan_legacyU.def
installationservices/swi/eabi/sislauncherclientU.DEF
installationservices/swi/eabi/sisregistryclient_v2U.def
installationservices/swi/eabi/sisregistryclient_v2_legacyU.def
installationservices/swi/eabi/swtypereginfou.def
installationservices/swi/eabi/uissclientU.DEF
installationservices/swi/eabi/uissclient_legacyu.def
installationservices/swi/group/apprscparser.mmp
installationservices/swi/group/bld.inf
installationservices/swi/group/daemon.mmp
installationservices/swi/group/export/group/bld.inf
installationservices/swi/group/installserver.mmp
installationservices/swi/group/plan.mmp
installationservices/swi/group/sislauncherclient.mmp
installationservices/swi/group/sislauncherserver.mmh
installationservices/swi/group/sisregistryclient.mmp
installationservices/swi/group/sisregistryserver.mmp
installationservices/swi/group/sisregistryserver_legacy.mmp
installationservices/swi/group/swisidchecker.mmp
installationservices/swi/group/swtypereginfo.mmp
installationservices/swi/inc/integrityservices.h
installationservices/swi/inc/progressbar.h
installationservices/swi/inc/scrhelperutil.h
installationservices/swi/inc/secutils.h
installationservices/swi/inc/sislauncherclient.h
installationservices/swi/inc/sisregistry_5.3.txt
installationservices/swi/inc/sisregistry_5.4.txt
installationservices/swi/inc/sisregistrywritablesession.h
installationservices/swi/inc/swi.iby
installationservices/swi/inc/swi/ipcutil.h
installationservices/swi/inc/swi/nativecomponentinfo.h
installationservices/swi/inc/swi/siscontroller.h
installationservices/swi/inc/swi/sisregistrysession.h
installationservices/swi/inc/swi/sisuihandler.h
installationservices/swi/inc/swi/swispubsubdefs.h
installationservices/swi/inc/swi/swtypereginfo.h
installationservices/swi/inc/swi_ncp.iby
installationservices/swi/inc/swicenrep.h
installationservices/swi/inc/swidaemon.iby
installationservices/swi/inc/switextshell.iby
installationservices/swi/inc/tswi.iby
installationservices/swi/inc/tswitextshell.iby
installationservices/swi/source/apprscparser/apprscparser.cpp
installationservices/swi/source/apprscparser/apprscparser.h
installationservices/swi/source/backuprestore/backupsession.cpp
installationservices/swi/source/certstoretobin/AppGen.pm
installationservices/swi/source/certstoretobin/Util.pm
installationservices/swi/source/daemon/daemon.cpp
installationservices/swi/source/daemon/daemon.h
installationservices/swi/source/daemon/daemonbehaviour.cpp
installationservices/swi/source/daemon/daemonbehaviour.h
installationservices/swi/source/daemon/daemoninstaller.cpp
installationservices/swi/source/daemon/daemoninstaller.h
installationservices/swi/source/daemon/drivewatcher.cpp
installationservices/swi/source/daemon/drivewatcher.h
installationservices/swi/source/daemon/main.cpp
installationservices/swi/source/integrityservices/integrityservices.cpp
installationservices/swi/source/integrityservices/operationfunctions.cpp
installationservices/swi/source/integrityservices/operationfunctions.h
installationservices/swi/source/plan/plan.cpp
installationservices/swi/source/plan/plan.h
installationservices/swi/source/securitymanager/securitymanager.cpp
installationservices/swi/source/sisfile/siscontroller.cpp
installationservices/swi/source/sisfile/swtypereginfo.cpp
installationservices/swi/source/sishelper/sishelper.cpp
installationservices/swi/source/sishelper/sishelperclient.cpp
installationservices/swi/source/sishelper/uissclienthandler.cpp
installationservices/swi/source/sishelper/uissclienthandler.h
installationservices/swi/source/sislauncher/client/sislauncherclient.cpp
installationservices/swi/source/sislauncher/common/sislauncherclientserver.h
installationservices/swi/source/sislauncher/server/sislauncherserver.cpp
installationservices/swi/source/sislauncher/server/sislauncherserver.h
installationservices/swi/source/sislauncher/server/sislaunchersession.cpp
installationservices/swi/source/sislauncher/server/sislaunchersession.h
installationservices/swi/source/sislauncher/server/swtypereginfoparser.cpp
installationservices/swi/source/sislauncher/server/swtypereginfoparser.h
installationservices/swi/source/sisregistry/client/sisregistryentry.cpp
installationservices/swi/source/sisregistry/client/sisregistrysession.cpp
installationservices/swi/source/sisregistry/client/sisregistrywritablesession.cpp
installationservices/swi/source/sisregistry/common/sisregistryclientserver.h
installationservices/swi/source/sisregistry/server/scrhelperutil.cpp
installationservices/swi/source/sisregistry/server/siscontrollerverifier.cpp
installationservices/swi/source/sisregistry/server/sisregistryserver.cpp
installationservices/swi/source/sisregistry/server/sisregistryserver.h
installationservices/swi/source/sisregistry/server/sisregistryserverconst.h
installationservices/swi/source/sisregistry/server/sisregistryserversession.cpp
installationservices/swi/source/sisregistry/server/sisregistryserversession.h
installationservices/swi/source/sisregistry/server/sisregistryutil.cpp
installationservices/swi/source/sisregistry/server/sisregistryutil.h
installationservices/swi/source/sisregistry/server/sisrevocationmanager.cpp
installationservices/swi/source/sisregistry/server_legacy/siscontrollerverifier.cpp
installationservices/swi/source/sisregistry/server_legacy/sisregistrycache.cpp
installationservices/swi/source/sisregistry/server_legacy/sisregistrycache.h
installationservices/swi/source/sisregistry/server_legacy/sisregistryserver.cpp
installationservices/swi/source/sisregistry/server_legacy/sisregistryserverconst.h
installationservices/swi/source/sisregistry/server_legacy/sisregistryserversession.cpp
installationservices/swi/source/sisregistry/server_legacy/sisregistryserversession.h
installationservices/swi/source/sisregistry/server_legacy/sisregistryutil.cpp
installationservices/swi/source/sisregistry/server_legacy/sisregistryutil.h
installationservices/swi/source/swis/server/adornedutilities.cpp
installationservices/swi/source/swis/server/appregextractor.cpp
installationservices/swi/source/swis/server/appregextractor.h
installationservices/swi/source/swis/server/installationplanner.cpp
installationservices/swi/source/swis/server/installationplanner.h
installationservices/swi/source/swis/server/installationprocessor.cpp
installationservices/swi/source/swis/server/installationprocessor.h
installationservices/swi/source/swis/server/installmachine.cpp
installationservices/swi/source/swis/server/installserver.cpp
installationservices/swi/source/swis/server/installserver.h
installationservices/swi/source/swis/server/installswtypehelper.cpp
installationservices/swi/source/swis/server/installswtypehelper.h
installationservices/swi/source/swis/server/planner.cpp
installationservices/swi/source/swis/server/planner.h
installationservices/swi/source/swis/server/processor.cpp
installationservices/swi/source/swis/server/processor.h
installationservices/swi/source/swis/server/restorecontroller.cpp
installationservices/swi/source/swis/server/restoremachine.cpp
installationservices/swi/source/swis/server/restoreprocessor.cpp
installationservices/swi/source/swis/server/restoreprocessor.h
installationservices/swi/source/swis/server/sidcache.cpp
installationservices/swi/source/swis/server/siscontentprovider.cpp
installationservices/swi/source/swis/server/statemachine.cpp
installationservices/swi/source/swis/server/statemachine.h
installationservices/swi/source/swis/server/uninstallationplanner.cpp
installationservices/swi/source/swis/server/uninstallationplanner.h
installationservices/swi/source/swis/server/uninstallationprocessor.cpp
installationservices/swi/source/swis/server/uninstallationprocessor.h
installationservices/swi/source/swis/server/uninstallmachine.cpp
installationservices/swi/source/swis/server/uninstallmachine.h
installationservices/swi/source/uiss/client/nativecomponentinfo.cpp
installationservices/swi/source/uiss/client/sisuihandler.cpp
installationservices/swi/source/upsswiobsplugin/source/10283725.rss
installationservices/swi/test/eabi/swicaptests_usifU.def
installationservices/swi/test/swicaptests/registrycaptest.cpp
installationservices/swi/test/swicaptests/registrycaptest.h
installationservices/swi/test/swicaptests/scripts/swicaptests.ini
installationservices/swi/test/swicaptests/scripts/swicaptests.script
installationservices/swi/test/swicaptests/swicaptests.cpp
installationservices/swi/test/swicaptests/swicaptests.mmp
installationservices/swi/test/swicaptests/swilaunchercaptest.cpp
installationservices/swi/test/swicaptests/swilaunchercaptest.h
installationservices/swi/test/tautosigning/tautosigning.ini
installationservices/swi/test/tautosigning/tautosigning.script
installationservices/swi/test/tbackuprestore/scripts/batchfiles/tbackuprestore_post.bat
installationservices/swi/test/tbackuprestore/scripts/batchfiles/tbackuprestore_pre.bat
installationservices/swi/test/tbackuprestore/scripts/ini
installationservices/swi/test/tbackuprestore/scripts/ini_armv5
installationservices/swi/test/tbackuprestore/scripts/tbackuprestore.script
installationservices/swi/test/tbackuprestore/scripts/tbackuprestore_armv5.script
installationservices/swi/test/tdaemon/dummyswidaemon_armv5.exe
installationservices/swi/test/tdaemon/dummyswidaemon_winscw.exe
installationservices/swi/test/tdaemon/scripts/tdaemon.ini
installationservices/swi/test/tdaemon/scripts/tdaemon.script
installationservices/swi/test/tdaemon/scripts/tdaemon_winscw.script
installationservices/swi/test/tdaemon/steps/daemonstep.cpp
installationservices/swi/test/tdaemon/steps/daemonstep.h
installationservices/swi/test/tdaemon/tdaemon.cpp
installationservices/swi/test/testexes/bld.inf
installationservices/swi/test/testexes/interpretsis_testcase/01/01-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase/01/icon24.BMP
installationservices/swi/test/testexes/interpretsis_testcase/03/03-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase/03/icon24.BMP
installationservices/swi/test/testexes/interpretsis_testcase/04/04-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase/04/icon24.BMP
installationservices/swi/test/testexes/interpretsis_testcase/24/24-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase/24/icon24.BMP
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase.h
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase.hrh
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_01.mmp
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_01.rss
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_01_reg.rss
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_02.mmp
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_02.rss
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_02_reg.rss
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_03.mmp
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_03.rss
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_03_reg.rss
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_04.mmp
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_04.rss
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_04_reg.rss
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_AppUi.cpp
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_AppView.cpp
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_Application.cpp
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_Document.cpp
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_Main.cpp
installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_dup_reg.rss
installationservices/swi/test/testexes/interpretsis_testcase_05/01/01-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_05/03/03-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_05/interpretsis_testcase_05.mmp
installationservices/swi/test/testexes/interpretsis_testcase_05/interpretsis_testcase_05.rss
installationservices/swi/test/testexes/interpretsis_testcase_05/interpretsis_testcase_05_reg.rss
installationservices/swi/test/testexes/interpretsis_testcase_06/01/01-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_06/03/03-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_06/interpretsis_testcase_06.mmp
installationservices/swi/test/testexes/interpretsis_testcase_06/interpretsis_testcase_06.rss
installationservices/swi/test/testexes/interpretsis_testcase_06/interpretsis_testcase_06_reg.rss
installationservices/swi/test/testexes/interpretsis_testcase_07/01/01-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_07/03/03-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_07/interpretsis_testcase_07.mmp
installationservices/swi/test/testexes/interpretsis_testcase_07/interpretsis_testcase_07.rss
installationservices/swi/test/testexes/interpretsis_testcase_07/interpretsis_testcase_07_reg.rss
installationservices/swi/test/testexes/interpretsis_testcase_08/01/01-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_08/03/03-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_08/interpretsis_testcase_08.mmp
installationservices/swi/test/testexes/interpretsis_testcase_08/interpretsis_testcase_08.rss
installationservices/swi/test/testexes/interpretsis_testcase_08/interpretsis_testcase_08_reg.rss
installationservices/swi/test/testexes/interpretsis_testcase_09/01/01-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_09/03/03-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_09/interpretsis_testcase_09.mmp
installationservices/swi/test/testexes/interpretsis_testcase_09/interpretsis_testcase_09.rss
installationservices/swi/test/testexes/interpretsis_testcase_09/interpretsis_testcase_09_reg.rss
installationservices/swi/test/testexes/interpretsis_testcase_10/01/01-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_10/03/03-strings.rls
installationservices/swi/test/testexes/interpretsis_testcase_10/interpretsis_testcase_10.mmp
installationservices/swi/test/testexes/interpretsis_testcase_10/interpretsis_testcase_10.rss
installationservices/swi/test/testexes/interpretsis_testcase_10/interpretsis_testcase_10_reg.rss
installationservices/swi/test/testexes/packages/int_nr_option_04.pkg
installationservices/swi/test/testexes/packages/int_nr_option_05.pkg
installationservices/swi/test/testexes/packages/nonremovableupgrade.pkg
installationservices/swi/test/testexes/packages/sp_int_nr_option_04.pkg
installationservices/swi/test/testexes/packages/sp_int_nr_option_06.pkg
installationservices/swi/test/testexes/packages/swiappregintegration01.pkg
installationservices/swi/test/testexes/packages/swiappregintegration03_opaque.pkg
installationservices/swi/test/testexes/packages/swiappregintegration04_noappfile.pkg
installationservices/swi/test/testexes/packages/swiappregintegration04_noappuid.pkg
installationservices/swi/test/testexes/packages/swiappregintegration04_wronguid2.pkg
installationservices/swi/test/testexes/packages/swiappregintegration_base01.pkg
installationservices/swi/test/testexes/packages/swiappregintegration_base01_pu.pkg
installationservices/swi/test/testexes/packages/swiappregintegration_base01_sp.pkg
installationservices/swi/test/testexes/packages/swiappregintegration_base02.pkg
installationservices/swi/test/testexes/packages/swiappregintegration_base02_ru.pkg
installationservices/swi/test/testexes/packages/swiappregintegration_multipleapp_performance.pkg
installationservices/swi/test/testexes/packages/swiappregintegration_twoapps_performance.pkg
installationservices/swi/test/testexes/packages/test_appreg_entries_armv5.pkg
installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase.pkg
installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_05.pkg
installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_06.pkg
installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_07.pkg
installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_08.pkg
installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_09.pkg
installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_10.pkg
installationservices/swi/test/testexes/prepareexes.pl
installationservices/swi/test/testexes/swtypereginfo_invalid1.xml
installationservices/swi/test/testexes/swtypereginfo_invalid2.xml
installationservices/swi/test/testexes/swtypereginfo_invalid3.xml
installationservices/swi/test/testexes/swtypereginfo_invalid4.xml
installationservices/swi/test/testexes/swtypereginfo_invalid5.xml
installationservices/swi/test/testexes/swtypereginfo_native_invalid1.xml
installationservices/swi/test/testexes/swtypereginfo_valid1.xml
installationservices/swi/test/testexes/swtypereginfo_valid1_invalidupgrade.xml
installationservices/swi/test/testexes/swtypereginfo_valid2.xml
installationservices/swi/test/testexes/swtypereginfo_valid3.xml
installationservices/swi/test/testexes/tswiappregintegration/base01/01-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/base01/02-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/base01/03-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/base01/04-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/base01/rsc-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/base01/swiappregintegration_base01_loc.rss
installationservices/swi/test/testexes/tswiappregintegration/base01/swiappregintegration_base01_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/base02/01-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/base02/02-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/base02/03-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/base02/04-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/base02/rsc-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/base02/swiappregintegration_base02_loc.rss
installationservices/swi/test/testexes/tswiappregintegration/base02/swiappregintegration_base02_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/bld.inf
installationservices/swi/test/testexes/tswiappregintegration/case01/01-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case01/03-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case01/24-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case01/rsc-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case01/swiappregintegration01_loc.rss
installationservices/swi/test/testexes/tswiappregintegration/case01/swiappregintegration01_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/case02/01-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case02/rsc-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case02/swiappregintegration02_loc.rss
installationservices/swi/test/testexes/tswiappregintegration/case02/swiappregintegration02_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/case03/01-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case03/24-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case03/rsc-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case03/swiappregintegration03_loc.RSS
installationservices/swi/test/testexes/tswiappregintegration/case03/swiappregintegration03_reg.RSS
installationservices/swi/test/testexes/tswiappregintegration/case04/swiappregintegration04_loc.rss
installationservices/swi/test/testexes/tswiappregintegration/case04/swiappregintegration04_noappfile_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/case04/swiappregintegration04_noappuid_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/case04/swiappregintegration04_wronguid2_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/case05/01-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case05/02-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case05/03-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case05/04-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case05/rsc-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case05/swiappregintegration_case05_loc.rss
installationservices/swi/test/testexes/tswiappregintegration/case05/swiappregintegration_case05_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/case05/swiappregintegration_case05_su_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/case06/01-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case06/02-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case06/03-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case06/04-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case06/rsc-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case06/swiappregintegration_case06_loc.rss
installationservices/swi/test/testexes/tswiappregintegration/case06/swiappregintegration_case06_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/case07/01-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case07/02-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case07/03-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case07/04-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case07/rsc-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case07/swiappregintegration_case07_loc.rss
installationservices/swi/test/testexes/tswiappregintegration/case07/swiappregintegration_case07_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/case12/01-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case12/rsc-strings.rls
installationservices/swi/test/testexes/tswiappregintegration/case12/swiappregintegration12_loc.rss
installationservices/swi/test/testexes/tswiappregintegration/case12/swiappregintegration12_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/fotaupdateUDA1_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/fotaupdateUDA2_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/fotaupdateapp1_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/fotaupdateapp2_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/fotaupdatestubapp1_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/fotaupdatestubapp2_reg.rss
installationservices/swi/test/testexes/tswiappregintegration/icon3m.bmp
installationservices/swi/test/testexes/tswiappregintegration/swiappregintegration.cpp
installationservices/swi/test/testexes/tswiappregintegration/swiappregintegration.h
installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration01.mmp
installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration02.mmp
installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration03.mmp
installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration04.mmp
installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration05.mmp
installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration06.mmp
installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration07.mmp
installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration12.mmp
installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration_base01.mmp
installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration_base02.mmp
installationservices/swi/test/trevocation/makeAllInteg.bat
installationservices/swi/test/trevocation/pkgInteg/armv5/signingtest.pkg
installationservices/swi/test/trevocation/pkgInteg/winscw/signingtest.pkg
installationservices/swi/test/trevocation/scripts/tRevocation.ini
installationservices/swi/test/trevocation/scripts/trevocationocsp_emulator.script
installationservices/swi/test/trevocation/scripts/trevocationocsp_emulator_post.bat
installationservices/swi/test/trevocation/scripts/trevocationocsp_emulator_pre.bat
installationservices/swi/test/trevocation/signFiles.bat
installationservices/swi/test/trevocation/sisInteg/armv5/allsignedrev.sis
installationservices/swi/test/trevocation/sisInteg/armv5/allsignedval.sis
installationservices/swi/test/trevocation/sisInteg/armv5/certifiedsignedrev.sis
installationservices/swi/test/trevocation/sisInteg/armv5/certifiedsignedval.sis
installationservices/swi/test/trevocation/sisInteg/armv5/certifiedsignedverisignrev.sis
installationservices/swi/test/trevocation/sisInteg/armv5/certifiedsignedverisignval.sis
installationservices/swi/test/trevocation/sisInteg/armv5/expresssignedrev.sis
installationservices/swi/test/trevocation/sisInteg/armv5/expresssignedval.sis
installationservices/swi/test/trevocation/sisInteg/armv5/selfsignedrev.sis
installationservices/swi/test/trevocation/sisInteg/armv5/selfsignedval.sis
installationservices/swi/test/trevocation/sisInteg/winscw/allsignedrev.sis
installationservices/swi/test/trevocation/sisInteg/winscw/allsignedval.sis
installationservices/swi/test/trevocation/sisInteg/winscw/certifiedsignedrev.sis
installationservices/swi/test/trevocation/sisInteg/winscw/certifiedsignedval.sis
installationservices/swi/test/trevocation/sisInteg/winscw/certifiedsignedverisignrev.sis
installationservices/swi/test/trevocation/sisInteg/winscw/certifiedsignedverisignval.sis
installationservices/swi/test/trevocation/sisInteg/winscw/expresssignedrev.sis
installationservices/swi/test/trevocation/sisInteg/winscw/expresssignedval.sis
installationservices/swi/test/trevocation/sisInteg/winscw/selfsignedrev.sis
installationservices/swi/test/trevocation/sisInteg/winscw/selfsignedval.sis
installationservices/swi/test/trevocation/swicertstore.dat
installationservices/swi/test/tsisfile/data/embedselfsign.pkg
installationservices/swi/test/tsisfile/data/filebapu.pkg
installationservices/swi/test/tsisfile/data/files/2-2selfsigneddata.pkg
installationservices/swi/test/tsisfile/data/makeall.bat
installationservices/swi/test/tsisfile/data/signedsis/Howto generate certificate chains.txt
installationservices/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/How to create root certficate.txt
installationservices/swi/test/tsisfile/data/signedsis/sucert/How to create root certficate.txt
installationservices/swi/test/tsisfile/data/signedsis/symbiantestallcapabilitiesca/How to create root certficate.txt
installationservices/swi/test/tsisfile/steps/basestep.cpp
installationservices/swi/test/tsishelper/tsishelperserver.mmp
installationservices/swi/test/tsisregistrytest/Scripts/batchfiles/tsisregistrytest_tcb_post.bat
installationservices/swi/test/tsisregistrytest/Scripts/batchfiles/tsisregistrytest_tcb_pre.bat
installationservices/swi/test/tsisregistrytest/Scripts/data/addappregdata.sis
installationservices/swi/test/tsisregistrytest/Scripts/removeregistrytestdata.script
installationservices/swi/test/tsisregistrytest/Scripts/tsisregistrytest.ini
installationservices/swi/test/tsisregistrytest/Scripts/tsisregistrytest.script
installationservices/swi/test/tsisregistrytest/Scripts/tsisregistrytest_tcb.script
installationservices/swi/test/tsisregistrytest/sessionstep.cpp
installationservices/swi/test/tsisregistrytest/sessionstep.h
installationservices/swi/test/tsisregistrytest/tsisregistrytest.cpp
installationservices/swi/test/tsisregistrytest/tsisregistrytest.mmp
installationservices/swi/test/tsisregistrytest/tsisregistryteststep.h
installationservices/swi/test/tsisregistrytest_legacy/Scripts/tsisregistrytest.script
installationservices/swi/test/tsisregistrytest_legacy/sessionstep.cpp
installationservices/swi/test/tsisregistrytest_legacy/sessionstep.h
installationservices/swi/test/tsisregistrytest_legacy/tsisregistrytest.cpp
installationservices/swi/test/tsisregistrytest_legacy/tsisregistrytest.mmp
installationservices/swi/test/tsisregistrytest_legacy/tsisregistryteststep.h
installationservices/swi/test/tswiobserver/refswiobsplugin/group/refswiobsplugin.mmp
installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate1_post.bat
installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate1_pre.bat
installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate2_post.bat
installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate2_pre.bat
installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/tswiappregintegration_post.bat
installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/tswiappregintegration_pre.bat
installationservices/swi/test/tuiscriptadaptors/scripts/fotaupdatestubapp1.sis
installationservices/swi/test/tuiscriptadaptors/scripts/fotaupdatestubapp2.sis
installationservices/swi/test/tuiscriptadaptors/scripts/nonusiftuiscriptadaptors.script
installationservices/swi/test/tuiscriptadaptors/scripts/swiappregintegration_base01_stub.sis
installationservices/swi/test/tuiscriptadaptors/scripts/testdevicelanguages.script
installationservices/swi/test/tuiscriptadaptors/scripts/testfotaupdate.ini
installationservices/swi/test/tuiscriptadaptors/scripts/testfotaupdate1.script
installationservices/swi/test/tuiscriptadaptors/scripts/testfotaupdate2.script
installationservices/swi/test/tuiscriptadaptors/scripts/testpreinstalled.script
installationservices/swi/test/tuiscriptadaptors/scripts/tpropagation.ini
installationservices/swi/test/tuiscriptadaptors/scripts/tpropagation_arm.script
installationservices/swi/test/tuiscriptadaptors/scripts/tswiappregintegration.ini
installationservices/swi/test/tuiscriptadaptors/scripts/tswiappregintegration.script
installationservices/swi/test/tuiscriptadaptors/scripts/tswiappregintegration_stub.script
installationservices/swi/test/tuiscriptadaptors/scripts/tswidaemonstub.script
installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors.script
installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.ini
installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.script
installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors_winscw.script
installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_client.cpp
installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_client.h
installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_common.h
installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_server_session.cpp
installationservices/swi/test/tuiscriptadaptors/swifileutilitysteps.cpp
installationservices/swi/test/tuiscriptadaptors/swifileutilitysteps.h
installationservices/swi/test/tuiscriptadaptors/tswisasyncstep.cpp
installationservices/swi/test/tuiscriptadaptors/tswisasyncstep.h
installationservices/swi/test/tuiscriptadaptors/tswisserver.cpp
installationservices/swi/test/tuiscriptadaptors/tswisstep.cpp
installationservices/swi/test/tuiscriptadaptors/tswisstep.h
installationservices/swiconfig/conf/appinstallconfig.confml
installationservices/swiconfig/conf/appinstallconfig_2002cff6.crml
installationservices/swiconfig/group/bld.inf
installationservices/swiconfig/swi/2002cff6.txt
installationservices/swiconfig/swi/swiconfig.iby
installationservices/swiconfig/swi/swipolicy.ini
installationservices/swiconfig/usif/scr/10285bc0.txt
installationservices/swiconfig/usif/scr/scr.db
installationservices/swiconfig/usif/scr/update_db_production.xml
installationservices/swiconfig/usif/siflauncher/siflauncher_reg.rss
installationservices/swidevicetools/source/swicertstoretool/CSWICertStoreTool.cpp
installationservices/swinstallationfw/bwins/sifnotificationu.def
installationservices/swinstallationfw/bwins/siftransportu.def
installationservices/swinstallationfw/bwins/sifu.def
installationservices/swinstallationfw/bwins/sifutilsu.def
installationservices/swinstallationfw/common/inc/usifcommon.h
installationservices/swinstallationfw/common/inc/usiferror.h
installationservices/swinstallationfw/common/inc/usiflog.h
installationservices/swinstallationfw/eabi/sifnotificationu.def
installationservices/swinstallationfw/eabi/siftransportu.def
installationservices/swinstallationfw/eabi/sifu.def
installationservices/swinstallationfw/eabi/sifutilsu.def
installationservices/swinstallationfw/engineering/Doxyfile.cfg
installationservices/swinstallationfw/engineering/builddox.bat
installationservices/swinstallationfw/engineering/readme.txt
installationservices/swinstallationfw/examples/refnativeplugin/group/refnativeplugin.mmp
installationservices/swinstallationfw/examples/refnativeplugin/source/10285BC3.rss
installationservices/swinstallationfw/examples/refnativeplugin/source/refnativeplugin.cpp
installationservices/swinstallationfw/examples/refnativeplugin/source/refnativeplugin.h
installationservices/swinstallationfw/group/bld.inf
installationservices/swinstallationfw/group/security_softwareinstallframework.history.xml
installationservices/swinstallationfw/group/security_softwareinstallframework.mrp
installationservices/swinstallationfw/group/sif.mmp
installationservices/swinstallationfw/group/siflauncher.mmp
installationservices/swinstallationfw/group/sifnotification.mmp
installationservices/swinstallationfw/group/sifserver.mmp
installationservices/swinstallationfw/group/siftransport.mmp
installationservices/swinstallationfw/group/sifutils.mmp
installationservices/swinstallationfw/inc/sif.h
installationservices/swinstallationfw/inc/sif.iby
installationservices/swinstallationfw/inc/sifcommon.h
installationservices/swinstallationfw/inc/sifnotification.h
installationservices/swinstallationfw/inc/sifplugin.h
installationservices/swinstallationfw/inc/sifservercommon.h
installationservices/swinstallationfw/inc/sifservertask.h
installationservices/swinstallationfw/inc/siftransportclient.h
installationservices/swinstallationfw/inc/siftransportcommon.h
installationservices/swinstallationfw/inc/siftransportserver.h
installationservices/swinstallationfw/inc/siftransportserverstartup.h
installationservices/swinstallationfw/inc/siftransporttask.h
installationservices/swinstallationfw/inc/sifutils.h
installationservices/swinstallationfw/inc/tsif.iby
installationservices/swinstallationfw/inc_private/sifcommon_internal.h
installationservices/swinstallationfw/inc_private/sifnotification_internal.h
installationservices/swinstallationfw/source/sif.cpp
installationservices/swinstallationfw/source/sifcommon.cpp
installationservices/swinstallationfw/source/siflauncher.cpp
installationservices/swinstallationfw/source/sifnotification.cpp
installationservices/swinstallationfw/source/sifnotifierdata.cpp
installationservices/swinstallationfw/source/sifserverstartup.cpp
installationservices/swinstallationfw/source/sifservertask.cpp
installationservices/swinstallationfw/source/siftransportclient.cpp
installationservices/swinstallationfw/source/siftransportrequest.cpp
installationservices/swinstallationfw/source/siftransportserver.cpp
installationservices/swinstallationfw/source/siftransportsession.cpp
installationservices/swinstallationfw/source/siftransporttask.cpp
installationservices/swinstallationfw/source/sifutils.cpp
installationservices/swinstallationfw/test/group/cleansiflauncher.bat
installationservices/swinstallationfw/test/group/cleansiflauncher.makefile
installationservices/swinstallationfw/test/group/tsiflauncher.mmp
installationservices/swinstallationfw/test/plugins/nonnativeplugin/group/testnonnativeplugin.mmp
installationservices/swinstallationfw/test/plugins/nonnativeplugin/group/testnonnativeplugin2.mmp
installationservices/swinstallationfw/test/plugins/nonnativeplugin/source/10285BD1.rss
installationservices/swinstallationfw/test/plugins/nonnativeplugin/source/102866EE.rss
installationservices/swinstallationfw/test/plugins/nonnativeplugin/source/testnonnativeplugin.cpp
installationservices/swinstallationfw/test/plugins/nonnativeplugin/source/testnonnativeplugin.h
installationservices/swinstallationfw/test/scripts/data/noninstallable.gif
installationservices/swinstallationfw/test/scripts/data/test.nonnativepackage.txt
installationservices/swinstallationfw/test/scripts/data/test.overflow.txt
installationservices/swinstallationfw/test/scripts/tsif.ini
installationservices/swinstallationfw/test/scripts/tsif.script
installationservices/swinstallationfw/test/scripts/tsifoom.script
installationservices/swinstallationfw/test/securitytests/bwins/usifsecuritytests-tcbu.def
installationservices/swinstallationfw/test/securitytests/bwins/usifsecuritytestsu.def
installationservices/swinstallationfw/test/securitytests/eabi/usifsecuritytests-tcbu.def
installationservices/swinstallationfw/test/securitytests/eabi/usifsecuritytestsu.def
installationservices/swinstallationfw/test/securitytests/group/usifsecuritytests-tcb.mmp
installationservices/swinstallationfw/test/securitytests/group/usifsecuritytests.mmp
installationservices/swinstallationfw/test/securitytests/inc/scrallfiles.h
installationservices/swinstallationfw/test/securitytests/inc/scrapparccomponentspecific.h
installationservices/swinstallationfw/test/securitytests/inc/scrcomponentspecific.h
installationservices/swinstallationfw/test/securitytests/inc/scrfilepathprotection.h
installationservices/swinstallationfw/test/securitytests/inc/scrnonrestricted.h
installationservices/swinstallationfw/test/securitytests/inc/scrpluginmanagement.h
installationservices/swinstallationfw/test/securitytests/inc/scrreaduserdata.h
installationservices/swinstallationfw/test/securitytests/inc/scrwritedevicedata.h
installationservices/swinstallationfw/test/securitytests/inc/sifsecuritycontext.h
installationservices/swinstallationfw/test/securitytests/inc/stsfilepathprotection.h
installationservices/swinstallationfw/test/securitytests/inc/stsrollbackalltest.h
installationservices/swinstallationfw/test/securitytests/scripts/usifsecuritytests.ini
installationservices/swinstallationfw/test/securitytests/scripts/usifsecuritytests.script
installationservices/swinstallationfw/test/securitytests/source/scrallfiles.cpp
installationservices/swinstallationfw/test/securitytests/source/scrapparccomponentspecific.cpp
installationservices/swinstallationfw/test/securitytests/source/scrcomponentspecific.cpp
installationservices/swinstallationfw/test/securitytests/source/scrfilepathprotection.cpp
installationservices/swinstallationfw/test/securitytests/source/scrnonrestricted.cpp
installationservices/swinstallationfw/test/securitytests/source/scrpluginmanagement.cpp
installationservices/swinstallationfw/test/securitytests/source/scrreaduserdata.cpp
installationservices/swinstallationfw/test/securitytests/source/scrwritedevicedata.cpp
installationservices/swinstallationfw/test/securitytests/source/sifsecuritycontext.cpp
installationservices/swinstallationfw/test/securitytests/source/stsfilepathprotection.cpp
installationservices/swinstallationfw/test/securitytests/source/stsrollbackalltest.cpp
installationservices/swinstallationfw/test/securitytests/source/usifsecuritytests-tcb.cpp
installationservices/swinstallationfw/test/securitytests/source/usifsecuritytests.cpp
installationservices/swinstallationfw/test/siflauncherconfig/siflauncher_loc.rls
installationservices/swinstallationfw/test/siflauncherconfig/siflauncher_loc.rss
installationservices/swinstallationfw/test/siflauncherconfig/siflauncher_reg.rss
installationservices/swinstallationfw/test/tusif/group/createleesisfiles.pl
installationservices/swinstallationfw/test/tusif/group/createrefbinfiles.pl
installationservices/swinstallationfw/test/tusif/group/createsisfiles.bat
installationservices/swinstallationfw/test/tusif/group/sifgetcompapparcinfotest.mmp
installationservices/swinstallationfw/test/tusif/group/sifgetcompapparcinfotestmultilang.mmp
installationservices/swinstallationfw/test/tusif/group/sifgetcompinfotest1.mmp
installationservices/swinstallationfw/test/tusif/group/sifintegrationtestbasepackage.mmp
installationservices/swinstallationfw/test/tusif/group/sifintegrationtestupgradepackage.mmp
installationservices/swinstallationfw/test/tusif/group/sifintegsufficientusercaps.mmp
installationservices/swinstallationfw/test/tusif/group/sifintegusercapsbasepackage.mmp
installationservices/swinstallationfw/test/tusif/group/siftest.makefile
installationservices/swinstallationfw/test/tusif/group/siftestintegrationlockfile.mmp
installationservices/swinstallationfw/test/tusif/group/tsif.mmp
installationservices/swinstallationfw/test/tusif/group/tsifpkgrec.mmp
installationservices/swinstallationfw/test/tusif/scripts/data/Corrupt_reg.rsc
installationservices/swinstallationfw/test/tusif/scripts/data/dummy.txt
installationservices/swinstallationfw/test/tusif/scripts/data/dummyAugmentation.txt
installationservices/swinstallationfw/test/tusif/scripts/data/dummyUpgrade.txt
installationservices/swinstallationfw/test/tusif/scripts/data/embeddedbasewithusercapsexe.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/embeddedinnerbase1.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/embeddedinnerbase11.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/embeddedinnerbase2.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/embeddedinnerwithupgrade.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/embeddedinnerwithupgradeouterasbasewithdrivedialog.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/embeddingbasewithexe.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/embeddingbasewithtextandinnerwithexe.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/embeddingouterbase.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/emptynameandvendor.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifcomponentinfointegpu.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifcomponentinfointegration.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifcomponentinfointegsp.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotest.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotest_CorruptRsc.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotest_nolocale.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestembedded_innerwithdifficon.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestmultiapp.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestmultiapp_OneAppWithNonApparcRsc.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestmultifiles.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestmultifiles_largeandsmallextn.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestmultilang.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestnonapparcpath.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestnonapparcrsc.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompinfotest1.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestbase.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestbasewithdrivedialog.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestextensionindifferentcase.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestinvalidupgrade.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestmultiplefiles.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestnocaps.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestupgrade.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestupgradewithdrivedialog.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestwithonlydll.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifintegsufficientusercaps.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifintegusercapsbase.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifselfsignedwithprotecteduid.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifswtypebase.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/sifswtypeupgrade.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case05.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case05_SU.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_base.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_pu.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_sa.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_sp1.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_sp2.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_sp3.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case08_sa1.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case08_sa2.pkg
installationservices/swinstallationfw/test/tusif/scripts/data/swtype.dtd
installationservices/swinstallationfw/test/tusif/scripts/data/swtypereginfo.xml
installationservices/swinstallationfw/test/tusif/scripts/data/test.siftestpkg
installationservices/swinstallationfw/test/tusif/scripts/tnotifier.ini
installationservices/swinstallationfw/test/tusif/scripts/tnotifier.script
installationservices/swinstallationfw/test/tusif/scripts/tsif_appuidgen.ini
installationservices/swinstallationfw/test/tusif/scripts/tsif_appuidgen.script
installationservices/swinstallationfw/test/tusif/scripts/tsifintegration.ini
installationservices/swinstallationfw/test/tusif/scripts/tsifintegration.script
installationservices/swinstallationfw/test/tusif/scripts/tsifswtypeintegration.ini
installationservices/swinstallationfw/test/tusif/scripts/tsifswtypeintegration.script
installationservices/swinstallationfw/test/tusif/source/01/01-strings.rls
installationservices/swinstallationfw/test/tusif/source/03/03-strings.rls
installationservices/swinstallationfw/test/tusif/source/04/04-strings.rls
installationservices/swinstallationfw/test/tusif/source/102866F0.rss
installationservices/swinstallationfw/test/tusif/source/24/24-strings.rls
installationservices/swinstallationfw/test/tusif/source/icon3M.BMP
installationservices/swinstallationfw/test/tusif/source/rsc/rsc-strings.rls
installationservices/swinstallationfw/test/tusif/source/sifgetcompapparcinfotest_loc.rss
installationservices/swinstallationfw/test/tusif/source/sifgetcompapparcinfotest_reg.rss
installationservices/swinstallationfw/test/tusif/source/sifgetcompapparcinfotestmultilang_loc.rss
installationservices/swinstallationfw/test/tusif/source/sifgetcompapparcinfotestmultilang_reg.rss
installationservices/swinstallationfw/test/tusif/source/sifgetcompinfotest1_loc.rss
installationservices/swinstallationfw/test/tusif/source/sifgetcompinfotest1_reg.rss
installationservices/swinstallationfw/test/tusif/source/sifintegrationtestbasepackage.cpp
installationservices/swinstallationfw/test/tusif/source/sifintegrationtestpackage.h
installationservices/swinstallationfw/test/tusif/source/sifintegrationtestupgradepackage.cpp
installationservices/swinstallationfw/test/tusif/source/sifintegsufficientusercaps.cpp
installationservices/swinstallationfw/test/tusif/source/sifintegusercapsbasepackage.cpp
installationservices/swinstallationfw/test/tusif/source/testexes/siftestintegrationlockfile.cpp
installationservices/swinstallationfw/test/tusif/source/tsifcommonunitteststep.cpp
installationservices/swinstallationfw/test/tusif/source/tsifcommonunitteststep.h
installationservices/swinstallationfw/test/tusif/source/tsifcommonverificationstep.cpp
installationservices/swinstallationfw/test/tusif/source/tsifcommonverificationstep.h
installationservices/swinstallationfw/test/tusif/source/tsifgenericbrowserinstallstep.cpp
installationservices/swinstallationfw/test/tusif/source/tsifgenericbrowserinstallstep.h
installationservices/swinstallationfw/test/tusif/source/tsifnotifierteststep.cpp
installationservices/swinstallationfw/test/tusif/source/tsifnotifierteststep.h
installationservices/swinstallationfw/test/tusif/source/tsifoperationstep.cpp
installationservices/swinstallationfw/test/tusif/source/tsifoperationstep.h
installationservices/swinstallationfw/test/tusif/source/tsifpkgrec.cpp
installationservices/swinstallationfw/test/tusif/source/tsifpkgrec.h
installationservices/swinstallationfw/test/tusif/source/tsifsuitedefs.h
installationservices/swinstallationfw/test/tusif/source/tsifsuiteserver.cpp
installationservices/swinstallationfw/test/tusif/source/tsifsuiteserver.h
installationservices/swinstallationfw/test/tusif/source/tsifsuitestepbase.cpp
installationservices/swinstallationfw/test/tusif/source/tsifsuitestepbase.h
installationservices/switestfw/inc_private/captestframeworkserver.h
installationservices/switestfw/inc_private/captestframeworkstep.h
installationservices/switestfw/inc_private/tsecurityutils.h
installationservices/switestfw/inc_private/tsecurityutilsserver.h
installationservices/switestfw/scripts/tsecurityutils.ini
installationservices/switestfw/scripts/tsecurityutils.script
installationservices/switestfw/test/autotesting/apr_bld.inf
installationservices/switestfw/test/autotesting/hosts
installationservices/switestfw/test/autotesting/runswiromtests_9.5.bat
installationservices/switestfw/test/autotesting/runswiromtests_9.6.bat
installationservices/switestfw/test/autotesting/runusiftests.bat
installationservices/switestfw/test/autotesting/testMakesis.pl
installationservices/switestfw/test/autotesting/test_spec_apr_9.5.txt
installationservices/switestfw/testcertificates/group/bld.inf
installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/first.der
installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/root5ca.der
installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/second.der
installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/sucert.der
installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbian-test-chain-rsa.der
installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbian-test-dsa.der
installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbian-test-expired-rsa.der
installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbian-test-rsa.der
installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbian-test-tcb-rsa.der
installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbiantestrootcadiffserial.der
installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbiantestrsaca.der
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsis/certs/default.cer
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsis/certs/signing.cer
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatah004/cert-gen.cer
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatah004/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatah004/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai001/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai001/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai002/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai002/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai003/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai003/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj001/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj001/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj002/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj002/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj003/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj003/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj004/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj004/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj005/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj005/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj006/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj006/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj007/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj007/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj008/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj008/good-r5.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tsignsis/kanji_cer.cer
installationservices/switestfw/testcertificates/swi/sistools/test/tsignsis/signingdata/emptylinescert.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tsignsis/signingdata/emptylinescert.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tsignsis/signingdata/good-r5.key.pem
installationservices/switestfw/testcertificates/swi/sistools/test/tsignsis/signingdata/good-r5.pem
installationservices/switestfw/testcertificates/swi/test/tautosigning/createsis/cert-gen.cer
installationservices/switestfw/testcertificates/swi/test/tautosigning/createsis/cert.cer
installationservices/switestfw/testcertificates/swi/test/tautosigning/data/Root5RSA.cer
installationservices/switestfw/testcertificates/swi/test/tautosigning/data/TestCARSA.cer
installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/certs/01.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/certs/revoked_user_caps.cert.der
installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/certs/revoked_user_caps.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/certs/revoked_user_caps.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/certs/revoked_user_caps.req.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/private/ca.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/private/ca.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/01_loader_capabilities_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/01_loader_capabilities_user_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/02_protected_vid_mismatch_bad_single_vid.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/02_protected_vid_mismatch_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/03_protected_vid_match_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/03_protected_vid_match_single_vid1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/04_protpuid_constr_sid_mismatch_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/04_protpuid_constr_sid_mismatch_single_sid1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/05_protpuid_nonconstr_sid_match_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/05_protpuid_nonconstr_sid_match_unconstrained.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/06_nonprotpuid_constr_sid_match_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/06_nonprotpuid_constr_sid_match_single_sid1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_01_bad_single_dev.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_01_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_01_single_dev1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_02_bad_single_sid.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_02_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_02_single_sid1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_03_bad_single_vid.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_03_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_03_single_vid1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_04_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_04_empty_caps.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_04_user_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_05_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_05_chain_1.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_05_empty_devs.1.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_05_multi_dev.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_06_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_06_chain_1.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_06_empty_sids.1.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_06_multi_sid.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_07_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_07_chain_1.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_07_empty_vids.1.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_07_multi_vid.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_08_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_08_chain_1.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_08_system_caps.1.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_08_user_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_01_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_01_system_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_02_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_02_single_dev1.0.3.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_02_single_sid1.0.2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_02_single_vid1.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_02_user_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_03_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_03_multi_vid.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_03_single_sid1.0.2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_03_user_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_01_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_01_corrupt_dev.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_02_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_02_corrupt_sid.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_03_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_03_corrupt_vid.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_04_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_04_corrupt_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/devcertwarn_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/devcertwarn_system_caps.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/devcertwarn_unconstrained.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/devcertwarn_unconstrained.0.2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_01_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_01_single_dev1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_02_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_02_single_sid1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_03_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_03_single_vid1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_04_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_04_user_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_05_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_05_system_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_06_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_06_chain_1.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_06_single_dev1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_06_user_caps.1.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_07_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_07_comb1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_08_all_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_08_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_08_system_caps.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_09_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_09_single_sid1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_10_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_10_single_vid1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_11_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_11_single_sid1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_11_single_vid1.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_12_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_12_user_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_13_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_13_system_caps.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_13_unconstrained.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_13_unconstrained.0.2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_01_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_01_empty_devs.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_02_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_02_empty_sids.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_03_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_03_empty_sids.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_04_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_04_empty_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_05_bad_single_dev.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_05_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_06_bad_single_sid.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_06_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_07_bad_single_vid.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_07_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_08_all_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_08_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_08_system_caps.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_09_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_09_user_caps.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_10_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_10_unconstrained.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_10_unconstrained.0.2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_10_user_caps.0.1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/ocsp_02_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/ocsp_02_single_sid1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/ocsp_03_chain_0.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/ocsp_03_comb1.0.0.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/01_loader_capabilities_user_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/02_protected_vid_mismatch_bad_single_vid.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/03_protected_vid_match_single_vid1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/04_protpuid_constr_sid_mismatch_single_sid1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/05_protpuid_nonconstr_sid_match_unconstrained.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/06_nonprotpuid_constr_sid_match_single_sid1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_01_bad_single_dev.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_01_single_dev1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_02_bad_single_sid.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_02_single_sid1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_03_bad_single_vid.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_03_single_vid1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_04_empty_caps.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_04_user_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_05_empty_devs.1.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_05_multi_dev.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_06_empty_sids.1.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_06_multi_sid.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_07_empty_vids.1.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_07_multi_vid.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_08_system_caps.1.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_08_user_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_01_system_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_02_single_dev1.0.3.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_02_single_sid1.0.2.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_02_single_vid1.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_02_user_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_03_multi_vid.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_03_single_sid1.0.2.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_03_user_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/corrupt_01_corrupt_dev.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/corrupt_02_corrupt_sid.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/corrupt_03_corrupt_vid.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/corrupt_04_corrupt_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/devcertwarn_system_caps.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/devcertwarn_unconstrained.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/devcertwarn_unconstrained.0.2.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_01_single_dev1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_02_single_sid1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_03_single_vid1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_04_user_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_05_system_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_06_single_dev1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_06_user_caps.1.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_07_comb1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_08_all_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_08_system_caps.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_09_single_sid1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_10_single_vid1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_11_single_sid1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_11_single_vid1.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_12_user_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_13_system_caps.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_13_unconstrained.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_13_unconstrained.0.2.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_01_empty_devs.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_02_empty_sids.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_03_empty_sids.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_04_empty_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_05_bad_single_dev.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_06_bad_single_sid.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_07_bad_single_vid.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_08_all_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_08_system_caps.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_09_user_caps.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_10_unconstrained.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_10_unconstrained.0.2.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_10_user_caps.0.1.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/ocsp_02_single_sid1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/ocsp_03_comb1.0.0.key.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/ocsp/revoked_user_caps.cert.pem
installationservices/switestfw/testcertificates/swi/test/tdevcerts/ocsp/revoked_user_caps.key.pem
installationservices/switestfw/testcertificates/swi/test/testexes/certs/default.cer
installationservices/switestfw/testcertificates/swi/test/testexes/certs/signing.cer
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/01.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/02.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev1.cert.der
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev1.cert.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev1.key.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev1.req.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev2.cert.der
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev2.cert.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev2.key.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev2.req.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/private/ca.key.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/private/ca.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/01.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/02.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev1.cert.der
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev1.cert.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev1.key.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev1.req.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev2.cert.der
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev2.cert.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev2.key.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev2.req.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/private/ca.key.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/private/ca.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev3/SymbianTestRootCARSATRev/private/ca.key.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev3/SymbianTestRootCARSATRev/private/ca.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/01.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/02.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev1.cert.der
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev1.cert.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev1.key.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev1.req.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev2.cert.der
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev2.cert.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev2.key.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev2.req.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/01.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/02.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev1.cert.der
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev1.cert.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev1.key.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev1.req.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev2.cert.der
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev2.cert.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev2.key.pem
installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev2.req.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/badcert.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/default.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/dsacert1.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/dsacert1.der
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/dsacert2.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/dsacert2.der
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/mycert.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/rsacert1.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/rsacert1.der
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/rsacert2.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/rsacert2.der
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/CertificatesNotInStore/ebook_key.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/CertificatesNotInStore/pool_key.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/CertificatesNotInStore/selfsigned_cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/CertificatesNotInStore/selfsigned_key.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/ca.key.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/ca.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len1/chain_dsa_len1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len1/dsaparam.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len1/first.dsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len2/chain_dsa_len2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len2/dsaparam.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len2/second.dsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len3/chain_dsa_len3.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len3/dsaparam.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len3/third.dsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len1/chain_rsa_len1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len1/first.rsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len2/chain_rsa_len2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len2/second.rsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len3/chain_rsa_len3.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len3/third.rsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/ca.key.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/ca.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len1/chain_dsa_len1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len1/dsaparam.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len1/first.dsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len2/chain_dsa_len2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len2/dsaparam.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len2/second.dsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len3/chain_dsa_len3.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len3/dsaparam.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len3/third.dsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len1/chain_rsa_len1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len1/first.rsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len2/chain_rsa_len2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len2/second.rsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len3/chain_rsa_len3.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len3/third.rsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/dsaparam.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cacert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cakey.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/careq.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cert_chain_rsa_len1/chain_rsa_len1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cert_chain_rsa_len1/first.rsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cert_chain_rsa_len2/chain_rsa_len2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cert_chain_rsa_len2/second.rsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/ca.key.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/ca.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len1/chain_dsa_len1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len1/dsaparam.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len1/first.dsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len2/chain_dsa_len2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len2/dsaparam.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len2/second.dsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len3/chain_dsa_len3.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len3/dsaparam.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len3/third.dsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len1/chain_rsa_len1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len1/first.rsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len2/chain_rsa_len2.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len2/second.rsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len3/chain_rsa_len3.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len3/third.rsa.cer
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/dsaparam.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootExpiredCARSA/cacert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootExpiredCARSA/cakey.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootExpiredCARSA/careq.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootTCBCARSA/cacert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootTCBCARSA/cakey.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootTCBCARSA/careq.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/alternativesigningoid_eku.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/certificatereq.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/ekuprivatekey.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/no_eku.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/serverauth_eku.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/standardsigningoid_eku.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/sucert/sucert.der
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/sucert/sucert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/sucert/sucertkey.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestallcapabilitiesca/cakey.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestallcapabilitiesca/careq.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestallcapabilitiesca/symbiantestallcapabilitiesca.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestrootcanotinstore/cacert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestrootcanotinstore/cakey.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestrootcanotinstore/careq.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestrootcanotinstore/cert_chain_rsa_len1/chain_rsa_len1.cert.pem
installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestrootcanotinstore/cert_chain_rsa_len1/first.rsa.cer
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/capabilities/cacert.der
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/capabilities/cakey.pem
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/capabilities/careq.pem
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/chain/cacert.der
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/chain/cacert.pem
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/chain/cakey.pem
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/chain/intermediate/cacert.der
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/chain/intermediate/cakey.pem
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/expired/cacert.der
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/mandatory/cacert.der
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/mandatory/cakey.pem
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/mandatory/careq.pem
installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/renewed/cacert.der
installationservices/switestfw/testcertificates/usif/root5ca.pem
installationservices/switestfw/testcertificates/usif/root5ca_key.pem
installationservices/swtransactionservices/bwins/stsclientu.def
installationservices/swtransactionservices/eabi/stsclientu.def
installationservices/swtransactionservices/group/bld.inf
installationservices/swtransactionservices/group/security_softwaretransactionservices.history.xml
installationservices/swtransactionservices/group/security_softwaretransactionservices.mrp
installationservices/swtransactionservices/group/stsclient.mmp
installationservices/swtransactionservices/group/stsserver.mmp
installationservices/swtransactionservices/inc/sts.h
installationservices/swtransactionservices/inc/sts.iby
installationservices/swtransactionservices/inc/stsdefs.h
installationservices/swtransactionservices/inc/stsrecovery.h
installationservices/swtransactionservices/inc/tsts.iby
installationservices/swtransactionservices/inc_private/integrityservices.h
installationservices/swtransactionservices/inc_private/integrityservicesevent.h
installationservices/swtransactionservices/inc_private/integritytree.h
installationservices/swtransactionservices/inc_private/journal.h
installationservices/swtransactionservices/inc_private/journalfile.h
installationservices/swtransactionservices/inc_private/operationfunctions.h
installationservices/swtransactionservices/inc_private/stscommon.h
installationservices/swtransactionservices/inc_private/stsserver.h
installationservices/swtransactionservices/inc_private/stsserversession.h
installationservices/swtransactionservices/inc_private/transactionwrapper.h
installationservices/swtransactionservices/source/client/sts.cpp
installationservices/swtransactionservices/source/client/stsrecovery.cpp
installationservices/swtransactionservices/source/server/integrityservices.cpp
installationservices/swtransactionservices/source/server/integritytree.cpp
installationservices/swtransactionservices/source/server/journal.cpp
installationservices/swtransactionservices/source/server/journalfile.cpp
installationservices/swtransactionservices/source/server/operationfunctions.cpp
installationservices/swtransactionservices/source/server/startup.cpp
installationservices/swtransactionservices/source/server/stsserver.cpp
installationservices/swtransactionservices/source/server/stsserversession.cpp
installationservices/swtransactionservices/source/server/transactionwrapper.cpp
installationservices/swtransactionservices/test/group/tsts.mmp
installationservices/swtransactionservices/test/group/tstsrollbackall.mmp
installationservices/swtransactionservices/test/inc/tststestsuiteserver.h
installationservices/swtransactionservices/test/inc/tststestsuiteserverrollbackall.h
installationservices/swtransactionservices/test/inc/tststestsuitestep.h
installationservices/swtransactionservices/test/inc/tststestsuitestepcommon.h
installationservices/swtransactionservices/test/inc/tststestsuitesteprollbackall.h
installationservices/swtransactionservices/test/scripts/batchfiles/tsts_bootuptimerecovery.bat
installationservices/swtransactionservices/test/scripts/data/rollbackall/sec-sts-rollbackall-0002/b6da9d45.drv
installationservices/swtransactionservices/test/scripts/data/rollbackall/sec-sts-rollbackall-0002/b6da9d45.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8.drv
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8/0.bak
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8/1.bak
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/e_drive/61f7bbf8.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/e_drive/61f7bbf8/0.bak
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/e_drive/61f7bbf8/1.bak
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3.drv
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3/0.bak
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3/1.bak
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/e_drive/b06c42f3.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/e_drive/b06c42f3/0.bak
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/e_drive/b06c42f3/1.bak
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase3/c_drive/bd596810.drv
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase3/c_drive/bd596810.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase3/e_drive/bd596810.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase4/c_drive/cb94c9f0.drv
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase4/c_drive/cb94c9f0.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase4/e_drive/cb94c9f0.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase5/c_drive/b630b6f0.drv
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase5/c_drive/b630b6f0.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase5/e_drive/b630b6f0.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase6/c_drive/be3d42f0.drv
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase6/c_drive/be3d42f0.log
installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase6/e_drive/be3d42f0.log
installationservices/swtransactionservices/test/scripts/data/tstsdummy.txt
installationservices/swtransactionservices/test/scripts/tsts.ini
installationservices/swtransactionservices/test/scripts/tsts.script
installationservices/swtransactionservices/test/scripts/tsts_bootuptimerecovery.script
installationservices/swtransactionservices/test/scripts/tsts_rollbackall.script
installationservices/swtransactionservices/test/source/tststestsuiteserver.cpp
installationservices/swtransactionservices/test/source/tststestsuiteserverrollbackall.cpp
installationservices/swtransactionservices/test/source/tststestsuitestep.cpp
installationservices/swtransactionservices/test/source/tststestsuitesteprollbackall.cpp
installationservices/swtransactionservices/test/tintegrityservices/bwins/tstsintegrityservicesclientu.def
installationservices/swtransactionservices/test/tintegrityservices/eabi/tstsintegrityservicesclientu.def
installationservices/swtransactionservices/test/tintegrityservices/group/tstsintegrityservicesclient.mmp
installationservices/swtransactionservices/test/tintegrityservices/group/tstsintegrityservicesserver.mmp
installationservices/swtransactionservices/test/tintegrityservices/inc/tintegrityservicesclientserver.h
installationservices/swtransactionservices/test/tintegrityservices/inc/tintegrityservicescommon.h
installationservices/swtransactionservices/test/tintegrityservices/inc/tintegrityservicesserver.h
installationservices/swtransactionservices/test/tintegrityservices/inc/tintegrityservicesstep.h
installationservices/swtransactionservices/test/tintegrityservices/scripts/data/unittests/testjournal.log
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailAddingNewFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailAddingTempFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailBackupFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailDeletingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailInstallComplete.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailNone.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailTempFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailAddingNewFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailAddingTempFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailBackupFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailDeletingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailInstallComplete.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailNone.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailTempFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/oom.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v1/EFailDeletingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v1/EFailNewFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v1/EFailNone.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v1/EFailOldFilesRestored.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v1/EFailTempFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v2/EFailDeletingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v2/EFailNewFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v2/EFailNone.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v2/EFailOldFilesRestored.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v2/EFailTempFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailDeletingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailNewFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailNone.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailOldFilesRestored.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailRestoringFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailTempFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailDeletingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailNewFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailNone.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailOldFilesRestored.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailRestoringFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailTempFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailDeletingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailNewFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailNone.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailOldFilesRestored.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailRestoringFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailTempFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/tintegrityservices.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/tintegrityservices.script
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailBackupFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailDeletingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailInstallComplete.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailNone.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailRemovingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailTempFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailBackupFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailDeletingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailInstallComplete.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailNone.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailRemovingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailTempFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailAddingNewFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailAddingTempFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailBackupFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailDeletingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailInstallComplete.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailNone.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailRemovingFile.ini
installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailTempFilesRemoved.ini
installationservices/swtransactionservices/test/tintegrityservices/source/e32main.cpp
installationservices/swtransactionservices/test/tintegrityservices/source/tintegrityservicesclientserver.cpp
installationservices/swtransactionservices/test/tintegrityservices/source/tintegrityservicesserver.cpp
installationservices/swtransactionservices/test/tintegrityservices/source/tintegrityservicesstep.cpp
layers.sysdef.xml
ncdengine/debuglogger/group/catalogslogger.mmp
ncdengine/debuglogger/obex/inc/btservicesearcher.h
ncdengine/debuglogger/obex/src/btservicesearcher.cpp
ncdengine/debuglogger/obex/src/objectexchangeclient.cpp
ncdengine/engine/accesspointmanager/inc/catalogsaccesspointmanagerimpl.h
ncdengine/engine/accesspointmanager/inc/catalogsaccesspointmap.h
ncdengine/engine/accesspointmanager/inc/catalogsaccesspointsettings.h
ncdengine/engine/accesspointmanager/src/catalogsaccesspointmanagerimpl.cpp
ncdengine/engine/accesspointmanager/src/catalogsaccesspointsettings.cpp
ncdengine/engine/engine.pri
ncdengine/engine/engine.pro
ncdengine/engine/group/bld.inf
ncdengine/engine/group/catalogsdebug.mmp
ncdengine/engine/group/catalogsengine.mmp
ncdengine/engine/group/catalogsproxy.mmp
ncdengine/engine/group/catalogsserver.mmp
ncdengine/engine/group/catalogsundertaker.mmp
ncdengine/engine/group/config.xml
ncdengine/engine/group/ncddevicemgmt.mmp
ncdengine/engine/group/ncdutils.mmp
ncdengine/engine/inc/catalogsclientserverserver.h
ncdengine/engine/src/catalogsclientserverserver.cpp
ncdengine/engine/transport/inc/catalogshttpdownload.h
ncdengine/engine/transport/inc/catalogshttpdownloadmanagerimpl.h
ncdengine/engine/transport/inc/catalogshttpsessionmanager.h
ncdengine/engine/transport/inc/catalogshttpsessionmanagerimpl.h
ncdengine/engine/transport/inc/catalogshttptypes.h
ncdengine/engine/transport/src/catalogshttpdownload.cpp
ncdengine/engine/transport/src/catalogshttpdownloadmanagerimpl.cpp
ncdengine/engine/transport/src/catalogshttpsessionmanagerimpl.cpp
ncdengine/engine/transport/src/catalogshttptransactionmanagerimpl.cpp
ncdengine/group/altair-engine-stub.SIS
ncdengine/group/bld.inf
ncdengine/inc/ncdnodeinstall.h
ncdengine/ncdengine.pro
ncdengine/provider/client/inc/ncdnodeinstallproxy.h
ncdengine/provider/client/inc/ncdoperationmanagerproxy.h
ncdengine/provider/client/inc/ncdsilentinstalloperationproxy.h
ncdengine/provider/client/src/ncdnodeinstallproxy.cpp
ncdengine/provider/client/src/ncdoperationmanagerproxy.cpp
ncdengine/provider/client/src/ncdsilentinstalloperationproxy.cpp
ncdengine/provider/deviceinteraction/inc/ncddeviceserviceimpl.h
ncdengine/provider/deviceinteraction/inc/ncdinstallationservice.h
ncdengine/provider/deviceinteraction/inc/ncdinstallationserviceimpl.h
ncdengine/provider/deviceinteraction/inc/ncdsilentinstallactiveobserver.h
ncdengine/provider/deviceinteraction/inc/ncdwidgetregistrydata.h
ncdengine/provider/deviceinteraction/src/ncddeviceserviceimpl.cpp
ncdengine/provider/deviceinteraction/src/ncdinstallationserviceimpl.cpp
ncdengine/provider/deviceinteraction/src/ncdsilentinstallactiveobserver.cpp
ncdengine/provider/protocol/inc/ncdxmlheaders.h
ncdengine/provider/server/src/ncdloadnodeoperationimpl.cpp
ncdengine/provider/server/src/ncdloadrootnodeoperationimpl.cpp
ncdengine/provider/server/src/ncdsearchoperationimpl.cpp
ncdengine/rom/altair-engine-stub.pkg
ncdengine/rom/altair-engine-stub.sis
ncdengine/rom/make_romstub.bat
package_definition.xml
package_definition_v2.xml
package_map.xml
secureswitools/makekeys/group/bld.inf
secureswitools/makekeys/group/makekeys.mmp
secureswitools/makekeys/src/MAKEKEYS.CPP
secureswitools/makekeys/src/MAKEKEYS.H
secureswitools/swianalysistoolkit/group/apply_tools2_variants.xml
secureswitools/swianalysistoolkit/group/bld.inf
secureswitools/swianalysistoolkit/group/dumpchainvaliditytool.mmp
secureswitools/swianalysistoolkit/group/dumpinstallfilestatustool.mmp
secureswitools/swianalysistoolkit/group/dumpswicertstoretool.mmp
secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/common/certificatechain.cpp
secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/dumpinstallfilestatustool.cpp
secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/options.cpp
secureswitools/swianalysistoolkit/source/common/streamreader.cpp
secureswitools/swianalysistoolkit/source/common/symbiantypes.h
secureswitools/swianalysistoolkit/source/common/utf8/utf8.h
secureswitools/swianalysistoolkit/source/common/utf8_wrapper.h
secureswitools/swianalysistoolkit/source/dumpswicertstoretool/pfsdump.cpp
secureswitools/swianalysistoolkit/source/dumpswicertstoretool/swicertstoremetadata.cpp
secureswitools/swisistools/group/bld.inf
secureswitools/swisistools/group/dbmanager.mmp
secureswitools/swisistools/group/interpretsis.mmp
secureswitools/swisistools/group/interpretsislib.mmp
secureswitools/swisistools/group/scrtool.mmp
secureswitools/swisistools/source/common/util.cpp
secureswitools/swisistools/source/common/util.h
secureswitools/swisistools/source/dbmanager/dblayer.cpp
secureswitools/swisistools/source/dbmanager/dblayer.h
secureswitools/swisistools/source/dbmanager/dbprocessor.cpp
secureswitools/swisistools/source/dbmanager/dbprocessor.h
secureswitools/swisistools/source/dbmanager/sqlite/sqlite-3.6.1.so
secureswitools/swisistools/source/dumpsislib/dumpsis.cpp
secureswitools/swisistools/source/interpretsis/commandparser.cpp
secureswitools/swisistools/source/interpretsis/main.cpp
secureswitools/swisistools/source/interpretsislib/dbconstants.cpp
secureswitools/swisistools/source/interpretsislib/dbconstants.h
secureswitools/swisistools/source/interpretsislib/dbhelper.cpp
secureswitools/swisistools/source/interpretsislib/dbhelper.h
secureswitools/swisistools/source/interpretsislib/deserialiser.h
secureswitools/swisistools/source/interpretsislib/errors.h
secureswitools/swisistools/source/interpretsislib/expressionevaluator.cpp
secureswitools/swisistools/source/interpretsislib/filedescription.cpp
secureswitools/swisistools/source/interpretsislib/filedescription.h
secureswitools/swisistools/source/interpretsislib/installer.cpp
secureswitools/swisistools/source/interpretsislib/installer.h
secureswitools/swisistools/source/interpretsislib/interpretsis.cpp
secureswitools/swisistools/source/interpretsislib/interpretsis.h
secureswitools/swisistools/source/interpretsislib/is_utils.cpp
secureswitools/swisistools/source/interpretsislib/parameterlist.cpp
secureswitools/swisistools/source/interpretsislib/parameterlist.h
secureswitools/swisistools/source/interpretsislib/serialiser.h
secureswitools/swisistools/source/interpretsislib/sisfile.cpp
secureswitools/swisistools/source/interpretsislib/sisregistry.cpp
secureswitools/swisistools/source/interpretsislib/sisregistry.h
secureswitools/swisistools/source/interpretsislib/sisregistryobject.cpp
secureswitools/swisistools/source/interpretsislib/utils_win32.cpp
secureswitools/swisistools/source/interpretsislib/xmlgenerator.cpp
secureswitools/swisistools/source/interpretsislib/xmlgenerator.h
secureswitools/swisistools/source/makesis/makesis.cpp
secureswitools/swisistools/source/makesis/makesis.h
secureswitools/swisistools/source/makesislib/packageparser.h
secureswitools/swisistools/source/rscparser/apaid.cpp
secureswitools/swisistools/source/rscparser/apaid.h
secureswitools/swisistools/source/rscparser/aplappinforeader.cpp
secureswitools/swisistools/source/rscparser/aplappinforeader.h
secureswitools/swisistools/source/rscparser/aplapplistitem.cpp
secureswitools/swisistools/source/rscparser/aplapplistitem.h
secureswitools/swisistools/source/rscparser/apmstd.cpp
secureswitools/swisistools/source/rscparser/apmstd.h
secureswitools/swisistools/source/rscparser/apsecutils.cpp
secureswitools/swisistools/source/rscparser/apsecutils.h
secureswitools/swisistools/source/rscparser/barsc2.cpp
secureswitools/swisistools/source/rscparser/barsc2.h
secureswitools/swisistools/source/rscparser/barscimpl.cpp
secureswitools/swisistools/source/rscparser/barscimpl.h
secureswitools/swisistools/source/rscparser/barsread2.cpp
secureswitools/swisistools/source/rscparser/barsread2.h
secureswitools/swisistools/source/rscparser/barsreadimpl.cpp
secureswitools/swisistools/source/rscparser/barsreadimpl.h
secureswitools/swisistools/source/rscparser/commontypes.cpp
secureswitools/swisistools/source/rscparser/commontypes.h
secureswitools/swisistools/source/rscparser/dictionarycompression.cpp
secureswitools/swisistools/source/rscparser/dictionarycompression.h
secureswitools/swisistools/source/rscparser/dirparse.cpp
secureswitools/swisistools/source/rscparser/dirparse.h
secureswitools/swisistools/source/rscparser/parse.cpp
secureswitools/swisistools/source/rscparser/parse.h
secureswitools/swisistools/source/rscparser/uidtype.cpp
secureswitools/swisistools/source/rscparser/uidtype.h
secureswitools/swisistools/source/scrtool/data/create_db.xml
secureswitools/swisistools/source/scrtool/data/preprovision.dtd
secureswitools/swisistools/source/scrtool/main.cpp
secureswitools/swisistools/source/scrtool/options.cpp
secureswitools/swisistools/source/sisxlibrary/siscapabilities.cpp
secureswitools/swisistools/source/sisxlibrary/siscontents.cpp
secureswitools/swisistools/source/sisxlibrary/sisstring.cpp
secureswitools/swisistools/source/sisxlibrary/utility.cpp
secureswitools/swisistools/source/sisxlibrary/utility_interface.h
secureswitools/swisistools/source/sisxlibrary/utility_linux.cpp
secureswitools/swisistools/source/sisxlibrary/utility_windows.cpp
secureswitools/swisistools/source/sisxlibrary/utils.cpp
secureswitools/swisistools/source/xmlparser/xerces/lib/libxerces_linux.a
secureswitools/swisistools/source/xmlparser/xmlparser.cpp
secureswitools/swisistools/source/xmlparser/xmlparser.h
secureswitools/swisistools/test/tdumpsis/testdumpsis.pl
secureswitools/swisistools/test/testmakesis/largelanguagecodes.pkg
secureswitools/swisistools/test/tinterpretsisinteg/api-inst-preq1835-interpretsis-08_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-01_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-02_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-03_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-04_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-05_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-06_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-07_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-08_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/data/Hello_sis.sis
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq183501.mbm
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq183503.mbm
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq183504.mbm
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq183524.mbm
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_01.r01
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_01.r03
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_01.r04
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_01.r24
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_01_reg.rsc
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_02.r03
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_02_reg.rsc
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_stub.sis
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase01.mbm
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase03.mbm
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase04.mbm
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase24.mbm
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_01.r01
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_01.r03
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_01.r04
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_01.r24
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_01_reg.rsc
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_02.r03
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_02_reg.rsc
secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_stub.sis
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp.CPP
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp.mmp
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp01.rls
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp02.rls
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp03.rls
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp2_loc.rss
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp2_reg.rss
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp_loc.rss
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp_reg.rss
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstappnoappfile_reg.rss
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstappnouid2_reg.rss
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstappnouid3_reg.rss
secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstappsc.rls
secureswitools/swisistools/test/tinterpretsisinteg/int_defaultvaluetest_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-01_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/interpretsism001a_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/makesism001a_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/parameters_file/preq1835-interpretsis-07.txt
secureswitools/swisistools/test/tinterpretsisinteg/parameters_file/testcase-interpretsis-07.txt
secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-01.script
secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-02.script
secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-03.script
secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-04.script
secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-05.script
secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-06.script
secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-08.script
secureswitools/swisistools/test/tinterpretsisinteg/scripts/ini.ini
secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_defaultvaluetest.script
secureswitools/swisistools/test/tinterpretsisinteg/testcase-interpretsis-01/argumentfile.ini
secureswitools/swisistools/test/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_05.ini
secureswitools/swisistools/test/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_10.ini
secureswitools/swisistools/test/tinterpretsisinteg/testelseifdata/file0
secureswitools/swisistools/test/tinterpretsisinteg/testelseifdata/testelseif.pkg
secureswitools/swisistools/test/tinterpretsisinteg/testinterpretsis.bat
secureswitools/swisistools/test/tinterpretsisinteg/testinterpretsis_db.bat
secureswitools/swisistools/test/tinterpretsisinteg/testlistdb.xml
secureswitools/swisistools/test/tscrtool/data/create_db.xml
secureswitools/swisistools/test/tscrtool/data/preprovision.dtd
secureswitools/swisistools/test/tscrtool/data/preprovision_appregattribmissing.xml
secureswitools/swisistools/test/tscrtool/data/preprovision_appreginfo.xml
secureswitools/swisistools/test/tscrtool/data/preprovision_invalid_appproperty.xml
secureswitools/swisistools/test/tscrtool/data/preprovision_noappattrib.xml
secureswitools/swisistools/test/tscrtool/data/preprovision_nocaptioniconinfo.xml
secureswitools/swisistools/test/tscrtool/data/preprovision_nullappfile.xml
secureswitools/swisistools/test/tscrtool/data/preprovision_nullappuid.xml
secureswitools/swisistools/test/tscrtool/data/update_db.dtd
secureswitools/swisistools/test/tscrtool/data/update_db_end_tag_missing.xml
secureswitools/swisistools/test/tscrtool/data/update_db_test.xml
secureswitools/swisistools/test/tscrtool/data/update_db_unicode.xml
secureswitools/swisistools/test/tscrtool/tscrtool.ini
sysdef_1_4_0.dtd
sysdef_1_5_1.dtd
tsrc/group/bld.inf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += appinstaller/appinstaller.pro \
+           iaupdate/iaupdate.pro \
+           ncdengine/ncdengine.pro
+
--- a/appinstall_plat/appmngr2runtimeapi/src/appmngr2infobase.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstall_plat/appmngr2runtimeapi/src/appmngr2infobase.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -19,7 +19,7 @@
 #include "appmngr2infobase.h"           // CAppMngr2InfoBase
 #include "appmngr2runtime.h"            // CAppMngr2Runtime
 #include "appmngr2common.hrh"           // Default icon indexes
-#include <appmngr2.rsg>                 // Resource IDs
+//#include <appmngr2.rsg>                 // Resource IDs
 #include <AknUtils.h>                   // DisplayTextLanguageSpecificNumberConversion
 #include <StringLoader.h>               // StringLoader
 #include <barsread.h>                   // TResourceReader
@@ -165,17 +165,26 @@
     if( aSizeInBytes <= KMegaByte )
         {
         TInt kiloBytes = DivideAndReturnRoundedInt( aSizeInBytes, KKiloByte );
-        dispString = StringLoader::LoadLC( R_SWINS_UNIT_KILOBYTE, kiloBytes );
+        // Temporary fix until appmngr2pluginapi is removed
+        // dispString = StringLoader::LoadLC( R_SWINS_UNIT_KILOBYTE, kiloBytes );
+        _LIT( KKiloByte, "%N kB" );
+        dispString = KKiloByte().AllocLC();
         }
     else if( aSizeInBytes <= KGigaByte )
         {
         TInt megaBytes = DivideAndReturnRoundedInt( aSizeInBytes, KMegaByte );
-        dispString = StringLoader::LoadLC( R_SWINS_UNIT_MEGABYTE, megaBytes );
+        // Temporary fix until appmngr2pluginapi is removed
+        // dispString = StringLoader::LoadLC( R_SWINS_UNIT_MEGABYTE, megaBytes );
+        _LIT( KMegaByte, "%N MB" );
+        dispString = KMegaByte().AllocLC();
         }
     else // aSizeInBytes > KGigaByte
         {
         TInt gigaBytes = DivideAndReturnRoundedInt( aSizeInBytes, KGigaByte );
-        dispString = StringLoader::LoadLC( R_SWINS_UNIT_GIGABYTE, gigaBytes );
+        // Temporary fix until appmngr2pluginapi is removed
+        // dispString = StringLoader::LoadLC( R_SWINS_UNIT_GIGABYTE, gigaBytes );
+        _LIT( KGigaByte, "%N GB" );
+        dispString = KGigaByte().AllocLC();
         }
     
     TPtr ptr = dispString->Des();
--- a/appinstall_plat/appmngr2runtimeapi/src/appmngr2infoiterator.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstall_plat/appmngr2runtimeapi/src/appmngr2infoiterator.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -20,7 +20,6 @@
 #include "appmngr2infobase.h"           // CAppMngr2InfoBase
 #include <badesca.h>                    // CDesC8Array
 #include <StringLoader.h>               // StringLoader
-#include <appmngr2.rsg>                 // Resource IDs
 #include <SWInstCommonUI.rsg>           // Resource IDs
 
 const TInt KGranularity = 8;
--- a/appinstall_plat/appmngr2runtimeapi/src/appmngr2packageinfo.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstall_plat/appmngr2runtimeapi/src/appmngr2packageinfo.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -19,7 +19,7 @@
 #include "appmngr2packageinfo.h"
 #include <StringLoader.h>               // StringLoader
 #include <AknQueryDialog.h>             // CAknQueryDialog
-#include <appmngr2.rsg>                 // Resource IDs
+//#include <appmngr2.rsg>                 // Resource IDs
 
 
 // ======== MEMBER FUNCTIONS ========
@@ -56,12 +56,16 @@
 //
 EXPORT_C TBool CAppMngr2PackageInfo::ShowDeleteConfirmationQueryL()
     {
+    /* Temporary fix until appmngr2pluginapi is removed
+
     HBufC* deleteQuery = StringLoader::LoadLC( R_AM_DELETEQUERY, Name() );
-    
+
     CAknQueryDialog* dlg = CAknQueryDialog::NewL( CAknQueryDialog::EConfirmationTone );
     TBool okToDelete = dlg->ExecuteLD( R_APPMNGR2_YES_NO_CONFIRMATION_QUERY, *deleteQuery );
     CleanupStack::PopAndDestroy( deleteQuery );
 
     return okToDelete;
+    */
+    return ETrue;
     }
 
--- a/appinstall_plat/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstall_plat/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -25,4 +25,5 @@
 #include "../sw_installer_ui_plugin_api/group/bld.inf"
 #include "../sw_installer_cr_keys/group/bld.inf"
 #include "../sw_installer_ps_keys/group/bld.inf"
-#include "../appmngr2runtimeapi/group/bld.inf"
+#include "../sifui_api/group/bld.inf"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/bwins/sifuiu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,35 @@
+EXPORTS
+	?ExternalizeL@CSifUiAppInfo@@QBEXAAVRWriteStream@@@Z @ 1 NONAME ; void CSifUiAppInfo::ExternalizeL(class RWriteStream &) const
+	?IncreaseProgressBarValueL@CSifUi@@QAEXH@Z @ 2 NONAME ; void CSifUi::IncreaseProgressBarValueL(int)
+	?NewL@CSifUiAppInfo@@SAPAV1@ABV1@@Z @ 3 NONAME ; class CSifUiAppInfo * CSifUiAppInfo::NewL(class CSifUiAppInfo const &)
+	?Version@CSifUiAppInfo@@QBEABVTVersion@@XZ @ 4 NONAME ; class TVersion const & CSifUiAppInfo::Version(void) const
+	?ShowSelectOptionsL@CSifUi@@QAEHABVMDesC16Array@@AAV?$RArray@H@@@Z @ 5 NONAME ; int CSifUi::ShowSelectOptionsL(class MDesC16Array const &, class RArray<int> &)
+	?SetCertificateInfoL@CSifUi@@QAEXABV?$RPointerArray@VCSifUiCertificateInfo@@@@@Z @ 6 NONAME ; void CSifUi::SetCertificateInfoL(class RPointerArray<class CSifUiCertificateInfo> const &)
+	?Size@CSifUiAppInfo@@QBEHXZ @ 7 NONAME ; int CSifUiAppInfo::Size(void) const
+	?ShowGrantCapabilitiesL@CSifUi@@QAEHABVTCapabilitySet@@@Z @ 8 NONAME ; int CSifUi::ShowGrantCapabilitiesL(class TCapabilitySet const &)
+	?ShowProgressL@CSifUi@@QAEXABVCSifUiAppInfo@@HW4TInstallingPhase@1@@Z @ 9 NONAME ; void CSifUi::ShowProgressL(class CSifUiAppInfo const &, int, enum CSifUi::TInstallingPhase)
+	?SetButtonVisible@CSifUi@@QAEXW4TOptionalButton@1@H@Z @ 10 NONAME ; void CSifUi::SetButtonVisible(enum CSifUi::TOptionalButton, int)
+	?ShowMultiSelectionL@CSifUi@@QAEHABVTDesC16@@ABVMDesC16Array@@AAV?$RArray@H@@@Z @ 11 NONAME ; int CSifUi::ShowMultiSelectionL(class TDesC16 const &, class MDesC16Array const &, class RArray<int> &)
+	?SelectedDrive@CSifUi@@QAEHAAH@Z @ 12 NONAME ; int CSifUi::SelectedDrive(int &)
+	?NewL@CSifUiAppInfo@@SAPAV1@ABVTDesC16@@0ABVTVersion@@HPBVCApaMaskedBitmap@@@Z @ 13 NONAME ; class CSifUiAppInfo * CSifUiAppInfo::NewL(class TDesC16 const &, class TDesC16 const &, class TVersion const &, int, class CApaMaskedBitmap const *)
+	?NewL@CSifUiCertificateInfo@@SAPAV1@AAVCCertificateInfo@Swi@@@Z @ 14 NONAME ; class CSifUiCertificateInfo * CSifUiCertificateInfo::NewL(class Swi::CCertificateInfo &)
+	?ShowCompleteL@CSifUi@@QAEXXZ @ 15 NONAME ; void CSifUi::ShowCompleteL(void)
+	?ShowConfirmationL@CSifUi@@QAEHABVCSifUiAppInfo@@@Z @ 16 NONAME ; int CSifUi::ShowConfirmationL(class CSifUiAppInfo const &)
+	?Bitmaps@CSifUiAppInfo@@QBEPBVCApaMaskedBitmap@@XZ @ 17 NONAME ; class CApaMaskedBitmap const * CSifUiAppInfo::Bitmaps(void) const
+	?NewLC@CSifUiCertificateInfo@@SAPAV1@AAVCCertificateInfo@Swi@@@Z @ 18 NONAME ; class CSifUiCertificateInfo * CSifUiCertificateInfo::NewLC(class Swi::CCertificateInfo &)
+	?IsCancelled@CSifUi@@QAEHXZ @ 19 NONAME ; int CSifUi::IsCancelled(void)
+	?ExternalizeL@CSifUiCertificateInfo@@QBEXAAVRWriteStream@@@Z @ 20 NONAME ; void CSifUiCertificateInfo::ExternalizeL(class RWriteStream &) const
+	?ShowFailedL@CSifUi@@QAEXHABVTDesC16@@0@Z @ 21 NONAME ; void CSifUi::ShowFailedL(int, class TDesC16 const &, class TDesC16 const &)
+	?Name@CSifUiAppInfo@@QBEABVTDesC16@@XZ @ 22 NONAME ; class TDesC16 const & CSifUiAppInfo::Name(void) const
+	?NewL@CSifUi@@SAPAV1@XZ @ 23 NONAME ; class CSifUi * CSifUi::NewL(void)
+	?NewLC@CSifUiErrorInfo@@SAPAV1@W4TErrorCategory@Usif@@HHABVTDesC16@@1@Z @ 24 NONAME ; class CSifUiErrorInfo * CSifUiErrorInfo::NewLC(enum Usif::TErrorCategory, int, int, class TDesC16 const &, class TDesC16 const &)
+	?ShowSelectLanguageL@CSifUi@@QAEHABV?$RArray@W4TLanguage@@@@@Z @ 25 NONAME ; int CSifUi::ShowSelectLanguageL(class RArray<enum TLanguage> const &)
+	?NewL@CSifUiErrorInfo@@SAPAV1@W4TErrorCategory@Usif@@HHABVTDesC16@@1@Z @ 26 NONAME ; class CSifUiErrorInfo * CSifUiErrorInfo::NewL(enum Usif::TErrorCategory, int, int, class TDesC16 const &, class TDesC16 const &)
+	?NewLC@CSifUiAppInfo@@SAPAV1@ABVTDesC16@@0ABVTVersion@@HPBVCApaMaskedBitmap@@@Z @ 27 NONAME ; class CSifUiAppInfo * CSifUiAppInfo::NewLC(class TDesC16 const &, class TDesC16 const &, class TVersion const &, int, class CApaMaskedBitmap const *)
+	?SetMemorySelectionL@CSifUi@@QAEXABV?$RArray@H@@@Z @ 28 NONAME ; void CSifUi::SetMemorySelectionL(class RArray<int> const &)
+	?Vendor@CSifUiAppInfo@@QBEABVTDesC16@@XZ @ 29 NONAME ; class TDesC16 const & CSifUiAppInfo::Vendor(void) const
+	?ShowPreparingL@CSifUi@@QAEXXZ @ 30 NONAME ; void CSifUi::ShowPreparingL(void)
+	?ShowSingleSelectionL@CSifUi@@QAEHABVTDesC16@@ABVMDesC16Array@@AAH@Z @ 31 NONAME ; int CSifUi::ShowSingleSelectionL(class TDesC16 const &, class MDesC16Array const &, int &)
+	?ShowFailedL@CSifUi@@QAEXABVCSifUiErrorInfo@@@Z @ 32 NONAME ; void CSifUi::ShowFailedL(class CSifUiErrorInfo const &)
+	?NewLC@CSifUi@@SAPAV1@XZ @ 33 NONAME ; class CSifUi * CSifUi::NewLC(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/eabi/sifuiu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+EXPORTS
+	_ZN13CSifUiAppInfo4NewLERK7TDesC16S2_RK8TVersioniPK16CApaMaskedBitmap @ 1 NONAME
+	_ZN13CSifUiAppInfo4NewLERKS_ @ 2 NONAME
+	_ZN13CSifUiAppInfo5NewLCERK7TDesC16S2_RK8TVersioniPK16CApaMaskedBitmap @ 3 NONAME
+	_ZN15CSifUiErrorInfo4NewLEN4Usif14TErrorCategoryEiiRK7TDesC16S4_ @ 4 NONAME
+	_ZN15CSifUiErrorInfo5NewLCEN4Usif14TErrorCategoryEiiRK7TDesC16S4_ @ 5 NONAME
+	_ZN21CSifUiCertificateInfo4NewLERN3Swi16CCertificateInfoE @ 6 NONAME
+	_ZN21CSifUiCertificateInfo5NewLCERN3Swi16CCertificateInfoE @ 7 NONAME
+	_ZN6CSifUi11IsCancelledEv @ 8 NONAME
+	_ZN6CSifUi11ShowFailedLERK15CSifUiErrorInfo @ 9 NONAME
+	_ZN6CSifUi11ShowFailedLEiRK7TDesC16S2_ @ 10 NONAME
+	_ZN6CSifUi13SelectedDriveERi @ 11 NONAME
+	_ZN6CSifUi13ShowCompleteLEv @ 12 NONAME
+	_ZN6CSifUi13ShowProgressLERK13CSifUiAppInfoiNS_16TInstallingPhaseE @ 13 NONAME
+	_ZN6CSifUi14ShowPreparingLEv @ 14 NONAME
+	_ZN6CSifUi16SetButtonVisibleENS_15TOptionalButtonEi @ 15 NONAME
+	_ZN6CSifUi17ShowConfirmationLERK13CSifUiAppInfo @ 16 NONAME
+	_ZN6CSifUi18ShowSelectOptionsLERK12MDesC16ArrayR6RArrayIiE @ 17 NONAME
+	_ZN6CSifUi19SetCertificateInfoLERK13RPointerArrayI21CSifUiCertificateInfoE @ 18 NONAME
+	_ZN6CSifUi19SetMemorySelectionLERK6RArrayIiE @ 19 NONAME
+	_ZN6CSifUi19ShowMultiSelectionLERK7TDesC16RK12MDesC16ArrayR6RArrayIiE @ 20 NONAME
+	_ZN6CSifUi19ShowSelectLanguageLERK6RArrayI9TLanguageE @ 21 NONAME
+	_ZN6CSifUi20ShowSingleSelectionLERK7TDesC16RK12MDesC16ArrayRi @ 22 NONAME
+	_ZN6CSifUi22ShowGrantCapabilitiesLERK14TCapabilitySet @ 23 NONAME
+	_ZN6CSifUi25IncreaseProgressBarValueLEi @ 24 NONAME
+	_ZN6CSifUi4NewLEv @ 25 NONAME
+	_ZN6CSifUi5NewLCEv @ 26 NONAME
+	_ZNK13CSifUiAppInfo12ExternalizeLER12RWriteStream @ 27 NONAME
+	_ZNK13CSifUiAppInfo4NameEv @ 28 NONAME
+	_ZNK13CSifUiAppInfo4SizeEv @ 29 NONAME
+	_ZNK13CSifUiAppInfo6VendorEv @ 30 NONAME
+	_ZNK13CSifUiAppInfo7BitmapsEv @ 31 NONAME
+	_ZNK13CSifUiAppInfo7VersionEv @ 32 NONAME
+	_ZNK21CSifUiCertificateInfo12ExternalizeLER12RWriteStream @ 33 NONAME
+	_ZTI13CSifUiAppInfo @ 34 NONAME
+	_ZTI13CSifUiPrivate @ 35 NONAME
+	_ZTI15CSifUiErrorInfo @ 36 NONAME
+	_ZTI21CSifUiCertificateInfo @ 37 NONAME
+	_ZTI6CSifUi @ 38 NONAME
+	_ZTV13CSifUiAppInfo @ 39 NONAME
+	_ZTV13CSifUiPrivate @ 40 NONAME
+	_ZTV15CSifUiErrorInfo @ 41 NONAME
+	_ZTV21CSifUiCertificateInfo @ 42 NONAME
+	_ZTV6CSifUi @ 43 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Build information file for Client-side DLL for SIF-plugin UI
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../inc/sifui.h                  MW_LAYER_PLATFORM_EXPORT_PATH( sifui.h )
+../inc/sifuiappinfo.h           MW_LAYER_PLATFORM_EXPORT_PATH( sifuiappinfo.h )
+../inc/sifuicertificateinfo.h   MW_LAYER_PLATFORM_EXPORT_PATH( sifuicertificateinfo.h )
+../inc/sifuierrorinfo.h         MW_LAYER_PLATFORM_EXPORT_PATH( sifuierrorinfo.h )
+../inc/sifuierrorinfo.inl       MW_LAYER_PLATFORM_EXPORT_PATH( sifuierrorinfo.inl )
+../inc/sifuiinstallindicatordefinitions.h MW_LAYER_PLATFORM_EXPORT_PATH( sifuiinstallindicatordefinitions.h )
+../rom/sifui.iby                CORE_MW_LAYER_IBY_EXPORT_PATH( sifui.iby )
+
+PRJ_MMPFILES
+sifui.mmp
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/group/sifui.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project specification for SifUiCli. This component
+*               provides UI interface for SIF plugins.
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+TARGET          sifui.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x20022FC2
+
+CAPABILITY      CAP_GENERAL_DLL DRM
+VENDORID        VID_DEFAULT
+
+SOURCEPATH      ../src
+SOURCE          sifui.cpp
+SOURCE          sifuiprivate.cpp
+SOURCE          sifuicertificateinfo.cpp
+SOURCE          sifuiappinfo.cpp
+SOURCE          sifuierrorinfo.cpp
+
+USERINCLUDE     ../inc
+MW_LAYER_SYSTEMINCLUDE
+
+LIBRARY         euser.lib       // User
+LIBRARY         HbCore.lib      // CHbDeviceDialog
+LIBRARY         HbWidgets.lib   // CHbDeviceNotificationDialogSymbian 
+LIBRARY         apgrfx.lib      // CApaMaskedBitmap
+LIBRARY         fbscli.lib      // CFbsBitmap
+LIBRARY         bafl.lib        // CDesC16ArrayFlat
+LIBRARY         efsrv.lib       // RFs
+LIBRARY         estor.lib       // RBufWriteStream
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/inc/sifui.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,290 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CSifUi API can be used to implement UI dialogs for
+*               SIF (Software Install Framework) plugins.
+*/
+
+
+/**************************************************************
+ *                                                            *
+ *   WARNING - WORK-IN-PROGRESS - THIS API MAY STILL CHANGE   *
+ *                                                            *
+ **************************************************************/
+
+#ifndef C_SIFUI_H
+#define C_SIFUI_H
+
+#include <e32base.h>                            // CBase
+#include <bamdesca.h>                           // MDesCArray
+
+class CSifUiPrivate;
+class CApaMaskedBitmap;
+class CSifUiCertificateInfo;
+class CSifUiAppInfo;
+class CSifUiErrorInfo;
+
+namespace Swi {
+    class CAppInfo;
+    class CCertificateInfo;
+}
+
+
+/**
+ * CSifUi provides UI dialogs for SW installation. UI dialogs are
+ * global and they can be used in a non-UI code (like SIF plugins).
+ * SW install device dialog plugin implements the UI dialogs.
+ *
+ * @lib sifui.lib
+ * @since 10.1
+ */
+class CSifUi : public CBase
+    {
+    public:     // constructor and destructor
+        /**
+         * Creates new CSifUi object and pushes it into cleanup stack.
+         * @returns CSifUi* -- new CSifUi object
+         */
+        IMPORT_C static CSifUi* NewLC();
+
+        /**
+         * Creates new CSifUi object.
+         * @returns CSifUi* -- new CSifUi object
+         */
+        IMPORT_C static CSifUi* NewL();
+
+        /**
+         * Destructor.
+         */
+        ~CSifUi();
+
+    public:     // new functions
+
+        //=================================================
+        // Preparing note method
+        //=================================================
+
+        /**
+         * Displays installation dialog with "Preparing" text and indefinite progress bar.
+         * No buttons are available. Use ShowConfirmationL() method to update the dialog
+         * content to the installation confirmation query.
+         */
+        IMPORT_C void ShowPreparingL();
+
+
+        //=================================================
+        // Install confirmation query methods
+        //=================================================
+
+        /**
+         * Defines memory selection alternatives for the ShowConfirmationL() installation
+         * confirmation query. Use SelectedDrive() method to get the selected drive number
+         * after ShowConfirmationL() call.
+         * @param aDriveNumbers - options for memory selection
+         */
+        IMPORT_C void SetMemorySelectionL( const RArray<TInt>& aDriveNumbers );
+
+        /**
+         * Defines certificate details for the ShowConfirmationL() installation
+         * confirmation query. If certificates are not set, then application is
+         * untrusted.
+         * @param aCertificates - certificate details
+         */
+        IMPORT_C void SetCertificateInfoL(
+                const RPointerArray<CSifUiCertificateInfo>& aCertificates );
+
+        /**
+         * Displays installation confirmation query and waits for user response.
+         * Returns ETrue if the user accepted the query. The next ShowProgressL() call
+         * changes the dialog content to installation progress note. And finally,
+         * ShowCompleteL() or ShowFailedL() call changes the dialog content to the
+         * complete or error note.
+         * If preparing installation note needs to be displayed before confirmation query,
+         * then call ShowPreparingL() before any other functions.
+         * If the installation confirmation query should contain memory selection option,
+         * then set the selectable drives with SetMemorySelectionL() first. User selected
+         * drive can be retrieved with SelectedDrive() after ShowConfirmationL() returns.
+         * If the installation confirmation query should contain certificate details, then
+         * set the certificate details using SetCertificateInfoL() first.
+         * @param aAppInfo - application information (name, size, version, vendor, icon)
+         * @return TBools - ETrue if the user accepted the query, EFalse otherwise
+         */
+        IMPORT_C TBool ShowConfirmationL( const CSifUiAppInfo& aAppInfo );
+
+        /**
+         * Gets the selected drive where new component should be installed.
+         * Use RFs::DriveToChar() to convert the drive number to drive letter.
+         * @param aDriveNumber - selected drive number
+         * @return TInt - KErrNone if successful, otherwise Symbian error code
+         */
+        IMPORT_C TInt SelectedDrive( TInt& aDriveNumber );
+
+
+        //=================================================
+        // Progress note methods
+        //=================================================
+
+        /**
+         * Installing phases in progress notes. Indicated in progress note title text.
+         */
+        enum TInstallingPhase {
+            EInstalling,
+            EDownloading,
+            ECheckingCerts
+        };
+
+        /**
+         * Displays installation progress note. Changes confirmation query content
+         * to progress note. If the progress note is already displayed, then updates
+         * the dialog content. Use IncreaseProgressBarValueL() method to increase the
+         * progress bar value.
+         * Dialog remains on the screen after progress bar shows full 100% value.
+         * Use ShowCompleteL() or ShowFailedL() methods to show the result.
+         * @param aAppInfo - application information (name, size, version, vendor, icon)
+         * @param aProgressBarFinalValue - final value of the progress bar
+         * @param aPhase - defines new title text for the progress note dialog
+         */
+        IMPORT_C void ShowProgressL( const CSifUiAppInfo& aAppInfo, TInt aProgressBarFinalValue,
+                TInstallingPhase aPhase = EInstalling );
+
+        /**
+         * Updates the progress bar value displayed in progress note. Initially progress bar
+         * shows 0%. Each aIncrement increases the value displayed in progress bar. When all
+         * increments reach the final value defined in ShowProgressNoteL() method, then the
+         * progress bar shows full 100%. Caller should check using IsCancelled() method if
+         * the user has cancelled the progress note before updating the progress bar value.
+         * @param aIncrement - progress bar value increment
+         */
+        IMPORT_C void IncreaseProgressBarValueL( TInt aIncrement );
+
+        /**
+         * Returns ETrue if the user has cancelled the progress dialog.
+         * @return TBool - ETrue if the progress dialog has been cancelled
+         */
+        IMPORT_C TBool IsCancelled();
+
+
+        //=================================================
+        // Final complete and error notes
+        //=================================================
+
+        /**
+         * Displays installation complete note and waits for the user to close it.
+         * Installation complete note contains "Show" button to show installed
+         * applications in application library. Use SetButtonVisible() method to
+         * hide the "Show" button when necessary.
+         */
+        IMPORT_C void ShowCompleteL();
+
+        /**
+         * Displays installation error note and waits for user to close it.
+         * Installation error note contains "Details" button to show the detailed
+         * error message (when available). Also SetButtonVisible() method can be
+         * used to hide the "Details" button if necessary.
+         * @param aErrorCategory - error category
+         * @param aErrorMessage - localized error message to be displayed
+         * @param aErrorDetails - localized error message details (if any)
+         * @param aErrorCode - error code
+         * @param aErrorCode - error code
+         */
+        IMPORT_C void ShowFailedL( const CSifUiErrorInfo& aErrorInfo );
+
+
+        //=================================================
+        // Buttons in progress/complete/error notes
+        //=================================================
+
+        /**
+         * Toolbar buttons in progress and complete notes that can be disabled/hidden.
+         */
+        enum TOptionalButton
+            {
+            EHideProgressButton,        // "Hide" button in progress note
+            ECancelProgressButton,      // "Cancel" button in progress note
+            EShowInAppLibButton,        // "Show" button in complete note
+            EErrorDetailsButton         // "Details" button in error note
+            };
+
+        /**
+         * Hides or shows optional toolbar buttons from installation progress note
+         * or installation complete note. All optional buttos are visible by default.
+         * Buttons visibility becomes effective in the next ShowProgressL(),
+         * ShowCompleteL(), or IncreseProgressBarValueL() method calls.
+         * @param aButton - button which visibility is changed
+         * @param aIsVisible - EFalse if button needs to be hidden
+         */
+        IMPORT_C void SetButtonVisible( TOptionalButton aButton, TBool aIsVisible );
+
+
+        //=================================================
+        // Other query dialogs
+        //=================================================
+
+        /**
+         * Displays dialog requesting capabilities for the application being installed
+         * and waits for user response. Returns ETrue if the user granted the capabilities.
+         * Other dialogs (like progress note) are not affected.
+         * @param aCapabilities - requested user capabilities
+         * @return TBool - ETrue if the user granted the capabilities, EFalse otherwise
+         */
+        IMPORT_C TBool ShowGrantCapabilitiesL( const TCapabilitySet& aCapabilities );
+
+        /**
+         * Displays pop-up language selection dialog with radio-buttons, and
+         * waits for user response. Other displayed installation dialogs (like
+         * progress note) are not affected. Returns integer that is the index
+         * of the selected language in given langauge array, or error code.
+         * Return value is KErrCancel if the user cancelled the query.
+         * @param aLanguages - array of selectable languages
+         * @return The selected item index to aLangauges array, or error code.
+         */
+        IMPORT_C TInt ShowSelectLanguageL( const RArray<TLanguage>& aLanguages );
+
+        /**
+         * Displays multi-selection pop-up dialog with checkboxes, and waits
+         * for user response. Other displayed installation dialogs (like progress
+         * note) are not affected. Returns ETrue if the user made the selection,
+         * EFalse if the user cancelled the query. Selected indices are returned
+         * in aSelectedIndexes array.
+         * @param aSelectableItems - array of selectable items displayed
+         * @param aSelectedIndexes - returns the selected item indices
+         * @return TBool - ETrue if the user accepted the query, EFalse otherwise
+         */
+        IMPORT_C TBool ShowSelectOptionsL( const MDesCArray& aSelectableItems,
+                RArray<TInt>& aSelectedIndexes );
+
+
+        //=================================================
+        // DEPRECATED METHODS
+        //=================================================
+
+        // DEPRECATED, WILL BE REMOVED, DO NOT USE
+        IMPORT_C void ShowFailedL( TInt aErrorCode, const TDesC& aErrorMessage,
+            const TDesC& aErrorDetails = KNullDesC );
+        IMPORT_C TBool ShowSingleSelectionL( const TDesC& aTitle,
+            const MDesCArray& aSelectableItems, TInt& aSelectedIndex );
+        IMPORT_C TBool ShowMultiSelectionL( const TDesC& aTitle,
+            const MDesCArray& aSelectableItems, RArray<TInt>& aSelectedIndexes );
+
+
+    private:    // new functions
+        CSifUi();
+        void ConstructL();
+
+    private:    // data
+        CSifUiPrivate* iPrivate;
+    };
+
+
+#endif  // C_SIFUI_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/inc/sifuiappinfo.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CSifUiAppInfo for application details
+*
+*/
+
+#ifndef C_SIFUIAPPINFO_H
+#define C_SIFUIAPPINFO_H
+
+#include <e32base.h>                            // CBase
+
+class RWriteStream;
+class CApaMaskedBitmap;
+
+
+/**
+ * CSifUiAppInfo transfers application details from a SIF plugin
+ * to UI process in device dialog server. See also Swi::CAppInfo.
+ *
+ * @lib sifui.lib
+ * @since 10.1
+ */
+class CSifUiAppInfo : public CBase
+    {
+    public:     // constructors and destructor
+        /**
+         * Creates new CSifUiAppInfo object and pushes it to cleanup stack.
+         * Does not take the ownership of aAppIcon parameter.
+         * @param aAppName - application name
+         * @param aAppVendor - vendor name
+         * @param aAppVersion - application version
+         * @param aAppSize - application size in bytes
+         * @param aAppIcon - application icon (or NULL if no icon)
+         * @returns CSifUiAppInfo* -- new CSifUiAppInfo object
+         */
+        IMPORT_C static CSifUiAppInfo* NewLC( const TDesC& aAppName,
+                const TDesC& aAppVendor, const TVersion& aAppVersion, TInt aAppSize,
+                const CApaMaskedBitmap* aAppIcon );
+
+        /**
+         * Creates new CSifUiAppInfo object.
+         * Does not take the ownership of aAppIcon parameter.
+         * @param aAppName - application name
+         * @param aAppVendor - vendor name
+         * @param aAppVersion - application version
+         * @param aAppSize - application size in bytes
+         * @param aAppIcon - application icon (or NULL if no icon)
+         * @returns CSifUiAppInfo* -- new CSifUiAppInfo object
+         */
+        IMPORT_C static CSifUiAppInfo* NewL( const TDesC& aAppName,
+                const TDesC& aAppVendor, const TVersion& aAppVersion, TInt aAppSize,
+                const CApaMaskedBitmap* aAppIcon );
+
+        /**
+         * Creates new CSifUiAppInfo object by copying existing object.
+         * @param aAppInfo - application info to copy
+         * @returns CSifUiAppInfo* -- new CSifUiAppInfo object
+         */
+        IMPORT_C static CSifUiAppInfo* NewL( const CSifUiAppInfo& aAppInfo );
+
+        /**
+         * Destructor.
+         */
+        ~CSifUiAppInfo();
+
+    public:     // new functions
+
+        /**
+         * Application name.
+         * @returns TDesC - application name
+         */
+        IMPORT_C const TDesC& Name() const;
+
+        /**
+         * Application vendor.
+         * @returns TDesC - vendor name
+         */
+        IMPORT_C const TDesC& Vendor() const;
+
+        /**
+         * Application version.
+         * @returns TVersion - application version
+         */
+        IMPORT_C const TVersion& Version() const;
+
+        /**
+         * Application size.
+         * @returns TInt - application size
+         */
+        IMPORT_C TInt Size() const;
+
+        /**
+         * Application icon and mask bitmaps. Does not transfer ownership.
+         * @returns CApaMaskedBitmap - icon and mask bitmaps, NULL if no bitmaps
+         */
+        IMPORT_C const CApaMaskedBitmap* Bitmaps() const;
+
+        /**
+         * Externalizes this object to the specified write stream.
+         * @param aStream   Stream to which the contents is written.
+         */
+        IMPORT_C void ExternalizeL( RWriteStream& aStream ) const;
+
+    private:    // new functions
+        CSifUiAppInfo();
+        void ConstructL( const TDesC& aAppName, const TDesC& aAppVendor,
+                const TVersion& aAppVersion, TInt aAppSize,
+                const CApaMaskedBitmap* aAppIcon );
+        void ConstructL( const CSifUiAppInfo& aAppInfo );
+
+    private:    // data
+        HBufC* iAppName;
+        HBufC* iAppVendor;
+        TVersion iAppVersion;
+        TInt iAppSize;
+        CApaMaskedBitmap* iAppIcon;
+    };
+
+#endif  // C_SIFUIAPPINFO_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/inc/sifuicertificateinfo.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CSifUiCertificateInfo for certificate details
+*
+*/
+
+#ifndef C_SIFUICERTIFICATEINFO_H
+#define C_SIFUICERTIFICATEINFO_H
+
+#include <e32base.h>                            // CBase
+
+namespace Swi {
+    class CCertificateInfo;
+}
+class RWriteStream;
+
+
+/**
+ * CSifUiCertificateInfo transfers certificate details from a SIF plugin
+ * to UI process in device dialog server. See also Swi::CCertificateInfo.
+ *
+ * @lib sifui.lib
+ * @since 10.1
+ */
+class CSifUiCertificateInfo : public CBase
+    {
+    public:     // constructors and destructor
+        /**
+         * Creates new CSifUiCertificateInfo object and pushes it to cleanup stack.
+         * @returns CSifUiCertificateInfo* -- new CSifUiCertificateInfo object
+         */
+        IMPORT_C static CSifUiCertificateInfo* NewLC( Swi::CCertificateInfo& aCertInfo );
+
+        /**
+         * Creates new CSifUiCertificateInfo object.
+         * @returns CSifUiCertificateInfo* -- new CSifUiCertificateInfo object
+         */
+        IMPORT_C static CSifUiCertificateInfo* NewL( Swi::CCertificateInfo& aCertInfo );
+
+        /**
+         * Destructor.
+         */
+        ~CSifUiCertificateInfo();
+
+    public:     // new functions
+        /**
+         * Externalizes this object to the specified write stream.
+         * @param aStream   Stream to which the contents is written.
+         */
+        IMPORT_C void ExternalizeL( RWriteStream& aStream ) const;
+
+    private:    // new functions
+        CSifUiCertificateInfo();
+        void ConstructL( Swi::CCertificateInfo& aCertInfo );
+        const TDesC& SubjectName() const;
+        const TDesC& IssuerName() const;
+        const TDesC8& Fingerprint() const;
+        const TDesC8& SerialNumber() const;
+
+    private:    // data
+        HBufC* iSubjectName;
+        HBufC* iIssuerName;
+        HBufC8* iFingerprint;
+        HBufC8* iSerialNumber;
+        TDateTime iValidFrom;
+        TDateTime iValidTo;
+    };
+
+#endif  // C_SIFUICERTIFICATEINFO_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/inc/sifuidefs.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Variant map key names for CSifUi API and SW install
+*               notification dialog plugin.
+*/
+
+#ifndef SIFUIDEFS_H
+#define SIFUIDEFS_H
+
+// SifUi plugin literal and variant map key names defined as _LIT macros.
+// Note that _LIT macros defined in this file must match to the definitions
+// in sifuidevicedialogdefinitions.h and sifuiinstallindicatorparams.h files.
+// Symbian code needs descriptor constants, as Qt code uses QString constants.
+
+_LIT( KSifUiDeviceDialog, "com.nokia.sifui/1.0" );
+
+enum TSifUiDeviceDialogType
+    {
+    ESifUiConfirmationQuery = 1,
+    ESifUiProgressNote = 2,
+    ESifUiCompleteNote = 3,
+    ESifUiErrorNote = 4
+    };
+
+enum TSifUiDeviceDialogReturnValue
+    {
+    ESifUiContinue = 0,
+    ESifUiCancel = 1,
+    ESifUiIndicator = 3
+    };
+
+// Variant map keys for dialog type and title (common to all dialog types)
+_LIT( KSifUiDialogType, "type" );                   // enum TSifUiDeviceDialogType
+
+// Variant map keys for device dialog return values
+_LIT( KSifUiQueryReturnValue, "ret" );              // enum TSifUiDeviceDialogReturnValue
+_LIT( KSifUiSelectedMemory, "drv" );                // drive letter
+
+// Variant map keys for "confirmation query" dialog parameters
+_LIT( KSifUiApplicationName, "app" );               // descriptor
+_LIT( KSifUiApplicationIconHandle, "icon" );        // integer, bitmap handle
+_LIT( KSifUiApplicationIconMaskHandle, "mask" );    // integer, bitmap handle
+_LIT( KSifUiApplicationVersion, "ver" );            // descriptor
+_LIT( KSifUiApplicationSize, "size" );              // integer
+_LIT( KSifUiApplicationDetails, "details" );        // descriptor array
+_LIT( KSifUiMemorySelection, "mem" );               // descriptor (comma separated drive letters)
+_LIT( KSifUiCertificates, "cert" );                 // binary (CSifUiCertificateInfo)
+
+// Variant map keys for "progress note" dialog parameters
+_LIT( KSifUiProgressNoteText, "txt" );              // string
+_LIT( KSifUiProgressNoteFinalValue, "fin" );        // integer
+_LIT( KSifUiProgressNoteValue, "val" );             // integer
+_LIT( KSifUiProgressNotePhase, "phase" );           // enum CSifUi::TInstallingPhase
+
+// Variant map keys for "progress note" and "installation complete note" buttons
+_LIT( KSifUiProgressNoteIsHideButtonHidden, "hidebtn" );        // boolean
+_LIT( KSifUiProgressNoteIsCancelButtonHidden, "cancelbtn" );    // boolean
+_LIT( KSifUiCompleteNoteIsShowButtonHidden, "showbtn" );        // boolean
+_LIT( KSifUiErrorNoteIsDetailsButtonHidden, "errdtlbtn" );      // boolean
+
+// Variant map keys for "error" dialog parameters
+_LIT( KSifUiErrorCategory, "errcat" );              // enum Usif::TErrorCategory
+_LIT( KSifUiErrorCode, "errcode" );                 // integer
+_LIT( KSifUiErrorCodeExtended, "errext" );          // integer
+_LIT( KSifUiErrorMessage, "errmsg" );               // string
+_LIT( KSifUiErrorDetails, "errdet" );               // string
+
+// Variant map keys for "grant capabilities" dialog parameters
+_LIT( KSifUiGrantCapabilities, "grcap" );           // binary (TCapabilitySet)
+
+// Variant map keys for "select language" dialog parameters
+_LIT( KSifUiSelectableLanguages, "lang" );          // binary (TPckg< RArray<TLanguage> >)
+_LIT( KSifUiSelectedLanguageIndex, "langind" );     // integer
+
+// Variant map keys for "select options" dialog parameters
+_LIT( KSifUiSelectableOptions, "opts" );            // descriptor array
+_LIT( KSifUiSelectedOptions, "optsind" );           // binary (TPckg< RArray<TInt> >)
+
+#endif  // SIFUIDEFS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/inc/sifuierrorinfo.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CSifUiErrorInfo for installation error details
+*
+*/
+
+#ifndef C_SIFUIERRORINFO_H
+#define C_SIFUIERRORINFO_H
+
+#include <e32base.h>                            // CBase
+#include <usif/usiferror.h>                     // Usif::TErrorCategory
+
+
+/**
+ * CSifUiErrorInfo is a container class for installation error details.
+ *
+ * @lib sifui.lib
+ * @since 10.1
+ */
+class CSifUiErrorInfo : public CBase
+    {
+    public:     // constructors and destructor
+        /**
+         * Creates new CSifUiErrorInfo object and pushes it to cleanup stack.
+         * @param aErrorCategory - error category
+         * @param aErrorCode - error code
+         * @param aExtendedErrorCode - extended error code
+         * @param aErrorMessage - error message
+         * @param aErrorMessageDetails - detailed error message
+         * @returns CSifUiErrorInfo* -- new CSifUiErrorInfo object
+         */
+        IMPORT_C static CSifUiErrorInfo* NewLC( Usif::TErrorCategory aErrorCategory,
+                TInt aErrorCode, TInt aExtendedErrorCode,
+                const TDesC& aErrorMessage, const TDesC& aErrorMessageDetails );
+
+        /**
+         * Creates new CSifUiErrorInfo object.
+         * @param aErrorCategory - error category
+         * @param aErrorCode - error code
+         * @param aExtendedErrorCode - extended error code
+         * @param aErrorMessage - error message
+         * @param aErrorMessageDetails - detailed error message
+         * @returns CSifUiErrorInfo* -- new CSifUiErrorInfo object
+         */
+        IMPORT_C static CSifUiErrorInfo* NewL( Usif::TErrorCategory aErrorCategory,
+                TInt aErrorCode, TInt aExtendedErrorCode,
+                const TDesC& aErrorMessage, const TDesC& aErrorMessageDetails );
+
+        /**
+         * Destructor.
+         */
+        ~CSifUiErrorInfo();
+
+    public:     // new functions
+
+        /**
+         * Error category.
+         * @returns Usif::TErrorCategory - error category
+         */
+        inline Usif::TErrorCategory ErrorCategory() const;
+
+        /**
+         * Error code.
+         * @returns TInt - error code
+         */
+        inline TInt ErrorCode() const;
+
+        /**
+         * Extended error code.
+         * @returns TInt - extended error code
+         */
+        inline TInt ExtendedErrorCode() const;
+
+        /**
+         * Error message.
+         * @returns const TDesC& - error message
+         */
+        inline const TDesC& ErrorMessage() const;
+
+        /**
+         * Error message details.
+         * @returns const TDesC& - additional error message details
+         */
+        inline const TDesC& ErrorMessageDetails() const;
+
+    private:    // new functions
+        CSifUiErrorInfo();
+        void ConstructL( Usif::TErrorCategory aErrorCategory,
+                TInt aErrorCode, TInt aExtendedErrorCode,
+                const TDesC& aErrorMessage, const TDesC& aErrorMessageDetails );
+
+    private:    // data
+        Usif::TErrorCategory iErrorCategory;
+        TInt iErrorCode;
+        TInt iExtendedErrorCode;
+        HBufC* iErrorMessage;
+        HBufC* iErrorMessageDetails;
+    };
+
+
+#include "sifuierrorinfo.inl"
+
+#endif  // C_SIFUIERRORINFO_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/inc/sifuierrorinfo.inl	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CSifUiErrorInfo for installation error details
+*
+*/
+
+// ---------------------------------------------------------------------------
+// CSifUiErrorInfo::ErrorCategory()
+// ---------------------------------------------------------------------------
+//
+inline Usif::TErrorCategory CSifUiErrorInfo::ErrorCategory() const
+    {
+    return iErrorCategory;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiErrorInfo::ErrorCode()
+// ---------------------------------------------------------------------------
+//
+inline TInt CSifUiErrorInfo::ErrorCode() const
+    {
+    return iErrorCode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiErrorInfo::ExtendedErrorCode()
+// ---------------------------------------------------------------------------
+//
+inline TInt CSifUiErrorInfo::ExtendedErrorCode() const
+    {
+    return iExtendedErrorCode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiErrorInfo::ErrorMessage()
+// ---------------------------------------------------------------------------
+//
+inline const TDesC& CSifUiErrorInfo::ErrorMessage() const
+    {
+    if( iErrorMessage )
+        {
+        return *iErrorMessage;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiErrorInfo::ErrorMessageDetails()
+// ---------------------------------------------------------------------------
+//
+inline const TDesC& CSifUiErrorInfo::ErrorMessageDetails() const
+    {
+    if( iErrorMessageDetails )
+        {
+        return *iErrorMessageDetails;
+        }
+    return KNullDesC;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/inc/sifuiinstallindicatordefinitions.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Variant map key names for SW install progress notifications
+*               in status menu (universal indicator plugin).
+*/
+
+#ifndef SIFUIINSTALLINDICATORDEFINITIONS_H
+#define SIFUIINSTALLINDICATORDEFINITIONS_H
+
+// Indicator type string for CHbIndicatorSymbian::Activate():
+_LIT( KSifUiInstallIndicatorType, "com.nokia.sifui.indi/1.0" );
+
+// Parameter names for variant map:
+_LIT( KSifUiInstallIndicatorAppName, "name" );      // string
+_LIT( KSifUiInstallIndicatorPhase, "phase" );       // int CSifUi::TInstallingPhase
+_LIT( KSifUiInstallIndicatorProgress, "prog" );     // int (0..100), shown as percentage
+
+// CHbIndicatorSymbian::Activate() takes one CHbSymbianVariant parameter. Use
+// CHbSymbianVariant::EVariantMap type and the above parameter names to pass
+// application name, installing phase, and progress bar value to notification
+// dialog. Usually it is necessary to pass all these details when opening the
+// notification dialog. Later, notification dialog details can be updated by
+// calling CHbIndicatorSymbian::Activate() again. If only application name
+// should be updated, then also CHbSymbianVariant::EDes type can be used.
+// And if only progress bar value should be updated, then also
+// CHbSymbianVariant::EInt type can be used.
+
+#endif  // SIFUIINSTALLINDICATORDEFINITIONS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/inc/sifuiprivate.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Private implementation part of the CSifUi API.
+*/
+
+
+#ifndef C_SIFUIPRIVATE_H
+#define C_SIFUIPRIVATE_H
+
+#include <e32base.h>                            // CActive
+#include <hb/hbcore/hbdevicedialogsymbian.h>    // MHbDeviceDialogObserver
+#include <hb/hbcore/hbindicatorsymbian.h>       // MHbIndicatorSymbianObserver
+#include <bamdesca.h>                           // MDesCArray
+#include <sifui.h>                              // CSifUi::TOptionalButtons
+#include <sifuidefs.h>                          // TSifUiDeviceDialogType
+
+class CHbSymbianVariantMap;
+class CHbSymbianVariant;
+class CActiveSchedulerWait;
+
+namespace Swi {
+    class CAppInfo;
+    class CCertificateInfo;
+}
+
+/**
+ * Private part of the SIF UI API.
+ * Only CSifUi class should use CSifUiPrivate class.
+ */
+class CSifUiPrivate : public CActive, public MHbDeviceDialogObserver,
+        public MHbIndicatorSymbianObserver
+    {
+    public:     // constructor and destructor
+        static CSifUiPrivate* NewL();
+        ~CSifUiPrivate();
+
+    public:     // new functions
+        void ShowPreparingL();
+        void SetMemorySelectionL( const RArray<TInt>& aDriveNumbers );
+        void SetCertificateInfoL( const RPointerArray<CSifUiCertificateInfo>& aCertificates );
+        TBool ShowConfirmationL( const CSifUiAppInfo& aAppInfo );
+        TInt SelectedDrive( TInt& aDriveNumber );
+        void ShowProgressL( const CSifUiAppInfo& aAppInfo, TInt aProgressBarFinalValue,
+                CSifUi::TInstallingPhase aPhase );
+        void IncreaseProgressBarValueL( TInt aIncrement );
+        TBool IsCancelled();
+        void ShowCompleteL();
+        void ShowFailedL( const CSifUiErrorInfo& aErrorInfo );
+        void SetButtonVisible( CSifUi::TOptionalButton aButton, TBool aIsVisible );
+        TBool ShowGrantCapabilitiesL( const TCapabilitySet& aCapabilities );
+        TInt ShowSelectLanguageL( const RArray<TLanguage>& aLanguages );
+        TBool ShowSelectOptionsL( const MDesCArray& aSelectableItems,
+                RArray<TInt>& aSelectedIndexes );
+
+    protected:  // from CActive
+        void DoCancel();
+        void RunL();
+
+    private:    // from MHbDeviceDialogObserver
+        void DataReceived( CHbSymbianVariantMap& aData );
+        void DeviceDialogClosed( TInt aCompletionCode );
+
+    private:    // from MHbIndicatorSymbianObserver
+        void IndicatorUserActivated( const TDesC& aType, CHbSymbianVariantMap& aData );
+
+    private:    // new functions
+        CSifUiPrivate();
+        void ConstructL();
+        void ClearParams();
+        CHbSymbianVariantMap* VariantMapL();
+        void ChangeNoteTypeL( TInt aType );
+        void AddParamL( const TDesC& aKey, TInt aValue );
+        void AddParamL( const TDesC& aKey, const TDesC& aValue );
+        void AddParamListL( const TDesC& aKey, const MDesCArray& aList );
+        void AddParamBinaryL( const TDesC& aKey, const CBufBase& aBinary );
+        void AddParamPckgL( const TDesC& aKey, const TDesC8& aPckg );
+        void AddParamsAppInfoL( const CSifUiAppInfo& aAppInfo );
+        void AddParamsCertificatesL();
+        void AddParamsHiddenButtonsL();
+        void ResendAllInstallationDetailsL();
+        void ActivateInstallIndicatorL();
+        void UpdateInstallIndicatorProgressL();
+        void CloseInstallIndicator();
+        TBool IsIndicatorActive();
+        void ShowInstallIndicatorCompleteL( TInt aErrorCode );
+        void UpdateDialogAndWaitForResponseL();
+        void UpdateDialogOrIndicatorWithoutWaitingL();
+        void CompleteDialogOrIndicatorAndWaitForResponseL( TInt aErrorCode );
+        void DisplayDeviceDialogL();
+        void WaitForResponseL();
+        void WaitedResponseReceived( TInt aCompletionCode );
+
+    private:    // data
+        CHbDeviceDialogSymbian* iDeviceDialog;
+        CHbIndicatorSymbian* iIndicator;
+        CHbSymbianVariantMap* iVariantMap;
+        CActiveSchedulerWait* iWait;
+        TBool iIsDisplayingDialog;
+        TBool iIsFirstTimeToDisplay;
+        TInt iWaitCompletionCode;
+        TInt iDialogReturnValue;
+        TSifUiDeviceDialogType iDialogType;
+        CSifUiAppInfo* iAppInfo;
+        CBufBase* iCertificateBuffer;
+        HBufC* iSelectableDrives;
+        TBool iSelectedDriveSet;
+        TChar iSelectedDrive;
+        TInt iProgressBarFinalValue;
+        TInt iProgressBarCurrentValue;
+        CSifUi::TInstallingPhase iInstallingPhase;
+        TBool iNoHideProgressButton;
+        TBool iNoCancelProgressButton;
+        TBool iNoShowInAppLibButton;
+        TBool iNoErrorDetailsButton;
+        TInt iSelectedLanguage;
+        RArray<TInt> iSelectedOptions;
+    };
+
+
+#endif  // C_SIFUIPRIVATE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/rom/sifui.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ROM image files for SIF UI DLL.
+*
+*/
+
+#ifndef SIFUI_IBY
+#define SIFUI_IBY
+
+file=ABI_DIR\BUILD_DIR\sifui.dll    SHARED_LIB_DIR\sifui.dll
+
+#endif  // SIFUI_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/src/sifui.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,239 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CSifUi class.
+*
+*/
+
+#include "sifui.h"                              // CSifUi
+#include "sifuiprivate.h"                       // CSifUiPrivate
+#include "sifuierrorinfo.h"                     // CSifUiErrorInfo
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSifUi::NewLC()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUi* CSifUi::NewLC()
+    {
+    CSifUi* self = new( ELeave ) CSifUi();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::NewL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUi* CSifUi::NewL()
+    {
+    CSifUi* self = CSifUi::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::~CSifUi()
+// ---------------------------------------------------------------------------
+//
+CSifUi::~CSifUi()
+    {
+    delete iPrivate;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowPreparingL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::ShowPreparingL()
+    {
+    iPrivate->ShowPreparingL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::SetMemorySelectionL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::SetMemorySelectionL( const RArray<TInt>& aDriveNumbers )
+    {
+    iPrivate->SetMemorySelectionL( aDriveNumbers );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::SetCertificateInfoL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::SetCertificateInfoL(
+        const RPointerArray<CSifUiCertificateInfo>& aCertificates )
+    {
+    iPrivate->SetCertificateInfoL( aCertificates );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowConfirmationL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CSifUi::ShowConfirmationL( const CSifUiAppInfo& aAppInfo )
+    {
+    return iPrivate->ShowConfirmationL( aAppInfo );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::SelectedDrive()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CSifUi::SelectedDrive( TInt& aDriveNumber )
+    {
+    return iPrivate->SelectedDrive( aDriveNumber );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowProgressL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::ShowProgressL( const CSifUiAppInfo& aAppInfo,
+        TInt aProgressBarFinalValue, TInstallingPhase aPhase )
+    {
+    iPrivate->ShowProgressL( aAppInfo, aProgressBarFinalValue, aPhase );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::IncreaseProgressBarValueL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::IncreaseProgressBarValueL( TInt aNewValue )
+    {
+    iPrivate->IncreaseProgressBarValueL( aNewValue );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::IsCancelled()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CSifUi::IsCancelled()
+    {
+    return iPrivate->IsCancelled();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowCompleteL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::ShowCompleteL()
+    {
+    iPrivate->ShowCompleteL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowFailedL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::ShowFailedL( const CSifUiErrorInfo& aErrorInfo )
+    {
+    iPrivate->ShowFailedL( aErrorInfo );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::SetButtonVisible()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::SetButtonVisible( TOptionalButton aButton, TBool aIsVisible )
+    {
+    iPrivate->SetButtonVisible( aButton, aIsVisible );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowGrantCapabilitiesL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CSifUi::ShowGrantCapabilitiesL( const TCapabilitySet& aCapabilities )
+    {
+    return iPrivate->ShowGrantCapabilitiesL( aCapabilities );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowSelectLanguageL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CSifUi::ShowSelectLanguageL( const RArray<TLanguage>& aLanguages )
+    {
+    return iPrivate->ShowSelectLanguageL( aLanguages );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowSelectOptionsL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CSifUi::ShowSelectOptionsL( const MDesCArray& aSelectableItems,
+        RArray<TInt>& aSelectedIndexes )
+    {
+    return iPrivate->ShowSelectOptionsL( aSelectableItems, aSelectedIndexes );
+    }
+
+
+// ---------------------------------------------------------------------------
+// DEPRECATED: CSifUi::ShowFailedL()
+// ---------------------------------------------------------------------------
+//
+// TODO: This function is deprecated, remove it completely.
+EXPORT_C void CSifUi::ShowFailedL( TInt /*aErrorCode*/, const TDesC& /*aErrorMessage*/,
+        const TDesC& /*aErrorDetails*/ )
+    {
+    User::Invariant();
+    }
+
+// ---------------------------------------------------------------------------
+// DEPRECATED: CSifUi::ShowSingleSelectionL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CSifUi::ShowSingleSelectionL( const TDesC& /*aTitle*/,
+            const MDesCArray& /*aSelectableItems*/, TInt& /*aSelectedIndex*/ )
+    {
+    User::Invariant();
+    return EFalse;  // for compiler
+    }
+
+// ---------------------------------------------------------------------------
+// DEPRECATED: CSifUi::ShowMultiSelectionL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CSifUi::ShowMultiSelectionL( const TDesC& /*aTitle*/,
+            const MDesCArray& /*aSelectableItems*/, RArray<TInt>& /*aSelectedIndexes*/ )
+    {
+    User::Invariant();
+    return EFalse;  // for compiler
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSifUi::CSifUi()
+// ---------------------------------------------------------------------------
+//
+CSifUi::CSifUi()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::ConstructL()
+    {
+    iPrivate = CSifUiPrivate::NewL();
+    }
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/src/sifuiappinfo.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,201 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CSifUiAppInfo for application details
+*
+*/
+
+#include "sifuiappinfo.h"           // CSifUiAppInfo
+#include <s32strm.h>                // RWriteStream
+#include <apgicnfl.h>               // CApaMaskedBitmap
+
+
+// in sifuicertificateinfo.cpp:
+void WriteBufToStreamL( RWriteStream& aStream, const TDesC& aBuffer );
+
+
+// ======== LOCAL FUNCTIONS ========
+
+void WriteVersionToStreamL( RWriteStream& aStream, const TVersion& aVersion )
+    {
+    TPckg<TVersion> buffer( aVersion );
+    aStream.WriteL( buffer );
+    }
+
+void WriteBitmapsToStreamL( RWriteStream& /*aStream*/, const CApaMaskedBitmap* /*aIcon*/ )
+    {
+    // TODO: implement
+    }
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::NewLC()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiAppInfo* CSifUiAppInfo::NewLC( const TDesC& aAppName,
+        const TDesC& aAppVendor, const TVersion& aAppVersion, TInt aAppSize,
+        const CApaMaskedBitmap* aAppIcon )
+    {
+    CSifUiAppInfo* self = new ( ELeave ) CSifUiAppInfo;
+    CleanupStack::PushL( self );
+    self->ConstructL( aAppName, aAppVendor, aAppVersion, aAppSize, aAppIcon );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::NewL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiAppInfo* CSifUiAppInfo::NewL( const TDesC& aAppName,
+        const TDesC& aAppVendor, const TVersion& aAppVersion, TInt aAppSize,
+        const CApaMaskedBitmap* aAppIcon )
+    {
+    CSifUiAppInfo* self = CSifUiAppInfo::NewLC( aAppName, aAppVendor,
+            aAppVersion, aAppSize, aAppIcon );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::NewL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiAppInfo* CSifUiAppInfo::NewL( const CSifUiAppInfo& aAppInfo )
+    {
+    CSifUiAppInfo* self = new ( ELeave ) CSifUiAppInfo;
+    CleanupStack::PushL( self );
+    self->ConstructL( aAppInfo );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::~CSifUiAppInfo()
+// ---------------------------------------------------------------------------
+//
+CSifUiAppInfo::~CSifUiAppInfo()
+    {
+    delete iAppName;
+    delete iAppVendor;
+    delete iAppIcon;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::Name()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CSifUiAppInfo::Name() const
+    {
+    if( iAppName )
+        {
+        return *iAppName;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::Vendor()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CSifUiAppInfo::Vendor() const
+    {
+    if( iAppVendor )
+        {
+        return *iAppVendor;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::Version()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TVersion& CSifUiAppInfo::Version() const
+    {
+    return iAppVersion;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::Size()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CSifUiAppInfo::Size() const
+    {
+    return iAppSize;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::Bitmaps()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const CApaMaskedBitmap* CSifUiAppInfo::Bitmaps() const
+    {
+    return iAppIcon;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::ExternalizeL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUiAppInfo::ExternalizeL( RWriteStream& aStream ) const
+    {
+    WriteBufToStreamL( aStream, *iAppName );
+    WriteBufToStreamL( aStream, *iAppVendor );
+    WriteVersionToStreamL( aStream, iAppVersion );
+    aStream.WriteInt32L( iAppSize );
+    WriteBitmapsToStreamL( aStream, iAppIcon );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::CSifUiAppInfo()
+// ---------------------------------------------------------------------------
+//
+CSifUiAppInfo::CSifUiAppInfo()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiAppInfo::ConstructL( const TDesC& aAppName, const TDesC& aAppVendor,
+        const TVersion& aAppVersion, TInt aAppSize, const CApaMaskedBitmap* aAppIcon )
+    {
+    iAppName = aAppName.AllocL();
+    iAppVendor = aAppVendor.AllocL();
+    iAppVersion = aAppVersion;
+    iAppSize = aAppSize;
+    if( aAppIcon )
+        {
+        iAppIcon = CApaMaskedBitmap::NewL( aAppIcon );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiAppInfo::ConstructL( const CSifUiAppInfo& aAppInfo )
+    {
+    iAppName = aAppInfo.Name().AllocL();
+    iAppVendor = aAppInfo.Vendor().AllocL();
+    iAppVersion = aAppInfo.iAppVersion;
+    iAppSize = aAppInfo.iAppSize;
+    if( aAppInfo.iAppIcon )
+        {
+        iAppIcon = CApaMaskedBitmap::NewL( aAppInfo.iAppIcon );
+        }
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/src/sifuicertificateinfo.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CSifUiCertificateInfo for certificate details.
+*
+*/
+
+#include "sifuicertificateinfo.h"               // CSifUiCertificateInfo
+#include <swi/msisuihandlers.h>                 // Swi::CCertificateInfo
+
+
+// ======== LOCAL FUNCTIONS ========
+
+void WriteBufToStreamL( RWriteStream& aStream, const TDesC& aBuffer )
+    {
+    aStream.WriteInt32L( aBuffer.Length() );
+    aStream.WriteL( aBuffer );
+    }
+
+void WriteBufToStreamL( RWriteStream& aStream, const TDesC8& aBuffer )
+    {
+    aStream.WriteInt32L( aBuffer.Length() );
+    aStream.WriteL( aBuffer );
+    }
+
+void WriteDateTimeToStreamL( RWriteStream& aStream, const TDateTime& aDateTime )
+    {
+    TPckg<TDateTime> buffer( aDateTime );
+    aStream.WriteL( buffer );
+    }
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::NewLC()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiCertificateInfo* CSifUiCertificateInfo::NewLC(
+        Swi::CCertificateInfo& aCertInfo )
+    {
+    CSifUiCertificateInfo* self = new( ELeave ) CSifUiCertificateInfo();
+    CleanupStack::PushL( self );
+    self->ConstructL( aCertInfo );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::NewL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiCertificateInfo* CSifUiCertificateInfo::NewL(
+        Swi::CCertificateInfo& aCertInfo )
+    {
+    CSifUiCertificateInfo* self = CSifUiCertificateInfo::NewLC( aCertInfo );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::~CSifUiCertificateInfo()
+// ---------------------------------------------------------------------------
+//
+CSifUiCertificateInfo::~CSifUiCertificateInfo()
+    {
+    delete iSubjectName;
+    delete iIssuerName;
+    delete iFingerprint;
+    delete iSerialNumber;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::ExternalizeL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUiCertificateInfo::ExternalizeL( RWriteStream& aStream ) const
+    {
+    WriteBufToStreamL( aStream, SubjectName() );
+    WriteBufToStreamL( aStream, IssuerName() );
+    WriteBufToStreamL( aStream, Fingerprint() );
+    WriteBufToStreamL( aStream, SerialNumber() );
+    WriteDateTimeToStreamL( aStream, iValidFrom );
+    WriteDateTimeToStreamL( aStream, iValidTo );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::CSifUiCertificateInfo()
+// ---------------------------------------------------------------------------
+//
+CSifUiCertificateInfo::CSifUiCertificateInfo()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiCertificateInfo::ConstructL(
+        Swi::CCertificateInfo& aCertInfo )
+    {
+    iSubjectName = aCertInfo.SubjectName().AllocL();
+    iIssuerName = aCertInfo.IssuerName().AllocL();
+    iFingerprint = aCertInfo.Fingerprint().AllocL();
+    iSerialNumber = aCertInfo.SerialNumber().AllocL();
+    iValidFrom = aCertInfo.ValidFrom();
+    iValidTo = aCertInfo.ValidTo();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::SubjectName()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CSifUiCertificateInfo::SubjectName() const
+    {
+    if( iSubjectName )
+        {
+        return *iSubjectName;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::IssuerName()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CSifUiCertificateInfo::IssuerName() const
+    {
+    if( iIssuerName )
+        {
+        return *iIssuerName;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::Fingerprint()
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CSifUiCertificateInfo::Fingerprint() const
+    {
+    if( iFingerprint )
+        {
+        return *iFingerprint;
+        }
+    return KNullDesC8;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::SerialNumber()
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CSifUiCertificateInfo::SerialNumber() const
+    {
+    if( iSerialNumber )
+        {
+        return *iSerialNumber;
+        }
+    return KNullDesC8;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/src/sifuierrorinfo.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CSifUiErrorInfo for installation error details
+*
+*/
+
+#include "sifuierrorinfo.h"         // CSifUiErrorInfo
+
+
+// ---------------------------------------------------------------------------
+// CSifUiErrorInfo::NewLC()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiErrorInfo* CSifUiErrorInfo::NewLC( Usif::TErrorCategory aErrorCategory,
+        TInt aErrorCode, TInt aExtendedErrorCode, const TDesC& aErrorMessage,
+        const TDesC& aErrorMessageDetails )
+    {
+    CSifUiErrorInfo* self = new (ELeave) CSifUiErrorInfo;
+    CleanupStack::PushL( self );
+    self->ConstructL( aErrorCategory, aErrorCode, aExtendedErrorCode,
+            aErrorMessage, aErrorMessageDetails );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiErrorInfo::NewL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiErrorInfo* CSifUiErrorInfo::NewL( Usif::TErrorCategory aErrorCategory,
+        TInt aErrorCode, TInt aExtendedErrorCode, const TDesC& aErrorMessage,
+        const TDesC& aErrorMessageDetails )
+    {
+    CSifUiErrorInfo* self = CSifUiErrorInfo::NewLC( aErrorCategory, aErrorCode,
+            aExtendedErrorCode, aErrorMessage, aErrorMessageDetails );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiErrorInfo::~CSifUiErrorInfo()
+// ---------------------------------------------------------------------------
+//
+CSifUiErrorInfo::~CSifUiErrorInfo()
+    {
+    delete iErrorMessage;
+    delete iErrorMessageDetails;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiErrorInfo::CSifUiErrorInfo()
+// ---------------------------------------------------------------------------
+//
+CSifUiErrorInfo::CSifUiErrorInfo()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiErrorInfo::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiErrorInfo::ConstructL( Usif::TErrorCategory aErrorCategory,
+        TInt aErrorCode, TInt aExtendedErrorCode, const TDesC& aErrorMessage,
+        const TDesC& aErrorMessageDetails )
+    {
+    iErrorCategory = aErrorCategory;
+    iErrorCode = aErrorCode;
+    iExtendedErrorCode = aExtendedErrorCode;
+    iErrorMessage = aErrorMessage.AllocL();
+    iErrorMessageDetails = aErrorMessageDetails.AllocL();
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/src/sifuiprivate.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,949 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CSifUiPrivate class.
+*
+*/
+
+#include "sifuiprivate.h"                       // CSifUiPrivate
+#include "sifuicertificateinfo.h"               // CSifUiCertificateInfo
+#include "sifuiappinfo.h"                       // CSifUiAppInfo
+#include "sifuierrorinfo.h"                     // CSifUiErrorInfo
+#include "sifuiinstallindicatordefinitions.h"   // indicator type label and parameter names
+#include <hb/hbcore/hbsymbianvariant.h>         // CHbSymbianVariantMap
+#include <hb/hbwidgets/hbdevicenotificationdialogsymbian.h> // CHbDeviceNotificationDialogSymbian
+#include <apgicnfl.h>                           // CApaMaskedBitmap
+#include <s32mem.h>                             // RDesReadStream
+#include <e32property.h>                        // RProperty
+
+const TInt KDriveLettersLen = 32;
+const TInt KBufferGranularity = 1024;
+const TInt KProgFull = 100;                     // 100%
+
+const TUid KInstallIndicatorCategory = { 0x20022FC5 };
+const TUint KInstallIndicatorStatus = 0x2002E690;
+
+_LIT( KSifUiDefaultApplicationIcon, "qtg_large_application" );
+
+// TODO: replace with proper logging
+#ifdef _DEBUG
+#define FLOG(x)         RDebug::Print(x);
+#define FLOG_1(x,y)     RDebug::Print(x, y);
+#define FLOG_2(x,y,z)   RDebug::Print(x, y, z);
+#define FLOG_3(x,y,z,v) RDebug::Print(x, y, z, v);
+#else
+#define FLOG(x)
+#define FLOG_1(x,y)
+#define FLOG_2(x,y,z)
+#define FLOG_3(x,y,z,v)
+#endif
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::NewL()
+// ---------------------------------------------------------------------------
+//
+CSifUiPrivate* CSifUiPrivate::NewL()
+    {
+    FLOG( _L("CSifUiPrivate::NewL") );
+
+    CSifUiPrivate* self = new( ELeave ) CSifUiPrivate();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::~CSifUiPrivate()
+// ---------------------------------------------------------------------------
+//
+CSifUiPrivate::~CSifUiPrivate()
+    {
+    FLOG( _L("CSifUiPrivate::~CSifUiPrivate") );
+
+    Cancel();
+    delete iWait;
+    delete iDeviceDialog;
+    delete iVariantMap;
+    delete iIndicator;
+    delete iAppInfo;
+    delete iSelectableDrives;
+    delete iCertificateBuffer;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ShowPreparingL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ShowPreparingL()
+    {
+    // TODO: implement
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::SetMemorySelectionL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::SetMemorySelectionL( const RArray<TInt>& aDriveNumbers )
+    {
+    FLOG( _L("CSifUiPrivate::SetMemorySelectionL") );
+
+    if( iSelectableDrives )
+        {
+        delete iSelectableDrives;
+        iSelectableDrives = NULL;
+        }
+
+    TInt driveCount = aDriveNumbers.Count();
+    if( driveCount > 0 )
+        {
+        const TChar KComma = ',';
+        TBuf<KDriveLettersLen> driveList;
+        for( TInt index = 0; index < driveCount; ++index )
+            {
+            TChar driveLetter;
+            TInt err = RFs::DriveToChar( aDriveNumbers[ index ], driveLetter );
+            FLOG_3( _L("CSifUiPrivate::SetMemorySelectionL, index %d, drive %d, err %d"),
+                    index, aDriveNumbers[ index ], err );
+            if( !err )
+                {
+                driveList.Append( driveLetter );
+                driveList.Append( KComma );
+                }
+            }
+        iSelectableDrives = driveList.AllocL();
+        }
+    FLOG_1( _L("CSifUiPrivate::SetMemorySelectionL, iSelectableDrives=%S"), iSelectableDrives );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::SetCertificateInfoL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::SetCertificateInfoL(
+        const RPointerArray<CSifUiCertificateInfo>& aCertificates )
+    {
+    FLOG( _L("CSifUiPrivate::SetCertificateInfoL") );
+
+    if( iCertificateBuffer )
+        {
+        delete iCertificateBuffer;
+        iCertificateBuffer = NULL;
+        }
+    if( aCertificates.Count() )
+        {
+        iCertificateBuffer = CBufFlat::NewL( KBufferGranularity );
+        RBufWriteStream writeStream( *iCertificateBuffer );
+        CleanupClosePushL( writeStream );
+
+        TInt32 count = aCertificates.Count();
+        writeStream.WriteInt32L( count );
+        for( TInt index = 0; index < count; ++index )
+           {
+           aCertificates[ index ]->ExternalizeL( writeStream );
+           }
+
+        CleanupStack::PopAndDestroy( &writeStream );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ShowConfirmationL()
+// ---------------------------------------------------------------------------
+//
+TBool CSifUiPrivate::ShowConfirmationL( const CSifUiAppInfo& aAppInfo )
+    {
+    FLOG( _L("CSifUiPrivate::ShowConfirmationL") );
+
+    ChangeNoteTypeL( ESifUiConfirmationQuery );
+
+    AddParamsAppInfoL( aAppInfo );
+    if( iSelectableDrives )
+        {
+        AddParamL( KSifUiMemorySelection, *iSelectableDrives );
+        }
+    AddParamsCertificatesL();
+
+    UpdateDialogAndWaitForResponseL();
+    return( iDialogReturnValue == KErrNone );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::SelectedDrive()
+// ---------------------------------------------------------------------------
+//
+TInt CSifUiPrivate::SelectedDrive( TInt& aDriveNumber )
+    {
+    FLOG( _L("CSifUiPrivate::SelectedDrive") );
+
+    if( iSelectedDriveSet )
+        {
+        TInt err = RFs::CharToDrive( iSelectedDrive, aDriveNumber );
+        FLOG_2( _L("CSifUiPrivate::SelectedDrive, aDriveNumber=%d, err=%d"), aDriveNumber, err );
+        return err;
+        }
+    FLOG( _L("CSifUiPrivate::SelectedDrive, KErrNotFound") );
+    return KErrNotFound;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ShowProgressL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ShowProgressL( const CSifUiAppInfo& aAppInfo,
+        TInt aProgressBarFinalValue, CSifUi::TInstallingPhase aPhase )
+    {
+    FLOG( _L("CSifUiPrivate::ShowProgressL") );
+
+    ChangeNoteTypeL( ESifUiProgressNote );
+
+    AddParamsAppInfoL( aAppInfo );
+    AddParamL( KSifUiProgressNoteFinalValue, aProgressBarFinalValue );
+    iProgressBarFinalValue = aProgressBarFinalValue;
+    AddParamL( KSifUiProgressNotePhase, aPhase );
+    iInstallingPhase = aPhase;
+    AddParamsHiddenButtonsL();
+
+    UpdateDialogOrIndicatorWithoutWaitingL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::IncreaseProgressBarValueL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::IncreaseProgressBarValueL( TInt aNewValue )
+    {
+    FLOG_1( _L("CSifUiPrivate::IncreaseProgressBarValueL, aNewValue=%d"), aNewValue );
+
+    ChangeNoteTypeL( ESifUiProgressNote );
+
+    AddParamL( KSifUiProgressNoteValue, aNewValue );
+    iProgressBarCurrentValue += aNewValue;
+    AddParamsHiddenButtonsL();
+
+    UpdateDialogOrIndicatorWithoutWaitingL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::IsCancelled()
+// ---------------------------------------------------------------------------
+//
+TBool CSifUiPrivate::IsCancelled()
+    {
+    return( iDialogReturnValue == KErrCancel );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ShowCompleteL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ShowCompleteL()
+    {
+    FLOG( _L("CSifUiPrivate::ShowCompleteL") );
+
+    ChangeNoteTypeL( ESifUiCompleteNote );
+
+    AddParamsHiddenButtonsL();
+
+    CompleteDialogOrIndicatorAndWaitForResponseL( KErrNone );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ShowFailedL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ShowFailedL( const CSifUiErrorInfo& aErrorInfo )
+    {
+    FLOG_1( _L("CSifUiPrivate::ShowFailedL, aErrorCode=%d"), aErrorInfo.ErrorCode() );
+
+    ChangeNoteTypeL( ESifUiErrorNote );
+
+    AddParamL( KSifUiErrorCategory, aErrorInfo.ErrorCategory() );
+    AddParamL( KSifUiErrorCode, aErrorInfo.ErrorCode() );
+    AddParamL( KSifUiErrorCodeExtended, aErrorInfo.ExtendedErrorCode() );
+    AddParamL( KSifUiErrorMessage, aErrorInfo.ErrorMessage() );
+    AddParamL( KSifUiErrorDetails, aErrorInfo.ErrorMessageDetails() );
+    AddParamsHiddenButtonsL();
+
+    CompleteDialogOrIndicatorAndWaitForResponseL( aErrorInfo.ErrorCode() );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::SetButtonVisible()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::SetButtonVisible( CSifUi::TOptionalButton aButton, TBool aIsVisible )
+    {
+    FLOG( _L("CSifUiPrivate::SetButtonVisible") );
+
+    switch( aButton )
+        {
+        case CSifUi::EHideProgressButton:
+            iNoHideProgressButton = !aIsVisible;
+            break;
+        case CSifUi::ECancelProgressButton:
+            iNoCancelProgressButton = !aIsVisible;
+            break;
+        case CSifUi::EShowInAppLibButton:
+            iNoShowInAppLibButton = !aIsVisible;
+            break;
+        case CSifUi::EErrorDetailsButton:
+            iNoErrorDetailsButton = !aIsVisible;
+            break;
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ShowGrantCapabilitiesL()
+// ---------------------------------------------------------------------------
+//
+TBool CSifUiPrivate::ShowGrantCapabilitiesL( const TCapabilitySet& aCapabilities )
+    {
+    TPckg<TCapabilitySet> capabilitySetPckg( aCapabilities );
+    AddParamPckgL( KSifUiGrantCapabilities, capabilitySetPckg );
+    UpdateDialogAndWaitForResponseL();
+    return( iDialogReturnValue == KErrNone );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ShowSelectLanguageL()
+// ---------------------------------------------------------------------------
+//
+TInt CSifUiPrivate::ShowSelectLanguageL( const RArray<TLanguage>& aLanguages )
+    {
+    CBufFlat* buffer = CBufFlat::NewL( KBufferGranularity );
+    CleanupStack::PushL( buffer );
+
+    RBufWriteStream writeStream( *buffer );
+    CleanupClosePushL( writeStream );
+    TPckg< const RArray<TLanguage> > languagesPckg( aLanguages );
+    writeStream.WriteL( languagesPckg );
+    writeStream.CommitL();
+    CleanupStack::PopAndDestroy( &writeStream );
+
+    AddParamBinaryL( KSifUiSelectableLanguages, *buffer );
+    CleanupStack::PopAndDestroy( buffer );
+    UpdateDialogAndWaitForResponseL();
+    if( iDialogReturnValue == KErrNone )
+        {
+        return iSelectedLanguage;
+        }
+    return iDialogReturnValue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ShowSelectOptionsL()
+// ---------------------------------------------------------------------------
+//
+TBool CSifUiPrivate::ShowSelectOptionsL( const MDesCArray& aSelectableItems,
+        RArray<TInt>& aSelectedIndexes )
+    {
+    AddParamListL( KSifUiSelectableOptions, aSelectableItems );
+    iSelectedOptions.Reset();
+    UpdateDialogAndWaitForResponseL();
+    if( iSelectedOptions.Count() )
+        {
+        aSelectedIndexes = iSelectedOptions;
+        }
+    return( iDialogReturnValue == KErrNone );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::DoCancel()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::DoCancel()
+    {
+    FLOG( _L("CSifUiPrivate::DoCancel") );
+    if( iDeviceDialog )
+        {
+        iDeviceDialog->Cancel();        // Closes the device dialog.
+        }
+
+    // Cancelled device dialog does not call DeviceDialogClosed() hence have
+    // to complete the request now. CActive::Cancel() waits until the request
+    // is completed.
+    TRequestStatus* status( &iStatus );
+    User::RequestComplete( status, KErrCancel );
+
+    // Normally User::RequestComplete() invokes RunL(), but not now, because
+    // the object is not active any more (after it has been cancelled). Hence,
+    // have to stop CActiveSchedulerWait too.
+    iWaitCompletionCode = KErrCancel;
+    if( iWait && iWait->IsStarted() )
+        {
+        iWait->AsyncStop();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::RunL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::RunL()
+    {
+    FLOG_1( _L("CSifUiPrivate::RunL, iStatus.Int()=%d"), iStatus.Int() );
+
+    if( iWait && iWait->IsStarted() )
+        {
+        iWait->AsyncStop();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::DataReceived()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::DataReceived( CHbSymbianVariantMap& aData )
+    {
+    FLOG( _L("CSifUiPrivate::DataReceived") );
+
+    const CHbSymbianVariant* selectedDriveVariant = aData.Get( KSifUiSelectedMemory );
+    if( selectedDriveVariant )
+        {
+        iSelectedDrive = *( selectedDriveVariant->Value<TChar>() );
+        iSelectedDriveSet = ETrue;
+        FLOG_1( _L("CSifUiPrivate::DataReceived, iSelectedDrive=%d"), (TUint)iSelectedDrive );
+        }
+
+    const CHbSymbianVariant* selectedLangVariant = aData.Get( KSifUiSelectedLanguageIndex );
+    if( selectedLangVariant )
+        {
+        iSelectedLanguage = *( selectedLangVariant->Value<TInt>() );
+        FLOG_1( _L("CSifUiPrivate::DataReceived, iSelectedLanguage=%d"), iSelectedLanguage );
+        }
+
+    const CHbSymbianVariant* selectedOptsVariant = aData.Get( KSifUiSelectedOptions );
+    if( selectedOptsVariant )
+        {
+        const TDesC8 *dataPtr = reinterpret_cast< const TDesC8* >( selectedOptsVariant->Data() );
+        RMemReadStream readStream( selectedOptsVariant->Data(), dataPtr->Size() );
+        CleanupClosePushL( readStream );
+        TPckg< RArray<TInt> > selectedOptionsPckg( iSelectedOptions );
+        readStream.ReadL( selectedOptionsPckg );
+        CleanupStack::PopAndDestroy( &readStream );
+        FLOG_1( _L("CSifUiPrivate::DataReceived, iSelectedOptions.Count()=%d"),
+            iSelectedOptions.Count() );
+        }
+
+    const CHbSymbianVariant* variant = aData.Get( KSifUiQueryReturnValue );
+    if( variant )
+        {
+        TInt* value = variant->Value<TInt>();
+        if( value )
+            {
+            TSifUiDeviceDialogReturnValue returnValue =
+                    static_cast<TSifUiDeviceDialogReturnValue>( *value );
+            switch( returnValue )
+                {
+                case ESifUiContinue:
+                    iDialogReturnValue = KErrNone;
+                    WaitedResponseReceived( KErrNone );
+                    break;
+                case ESifUiCancel:
+                    iDialogReturnValue = KErrCancel;
+                    WaitedResponseReceived( KErrNone );
+                    break;
+                case ESifUiIndicator:
+                    ActivateInstallIndicatorL();
+                    break;
+                default:
+                    __ASSERT_DEBUG( EFalse, User::Invariant() );
+                    break;
+                }
+            }
+        else
+            {
+            __ASSERT_DEBUG( EFalse, User::Invariant() );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::DeviceDialogClosed()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::DeviceDialogClosed( TInt aCompletionCode )
+    {
+    FLOG_1( _L("CSifUiPrivate::DeviceDialogClosed, aCompletionCode=%d"), aCompletionCode );
+
+    iIsDisplayingDialog = EFalse;
+    WaitedResponseReceived( aCompletionCode );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::IndicatorUserActivated()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::IndicatorUserActivated( const TDesC& aType,
+        CHbSymbianVariantMap& /*aData*/ )
+    {
+    FLOG( _L("CSifUiPrivate::IndicatorUserActivated") );
+
+    if( aType == KSifUiInstallIndicatorType )
+        {
+        CloseInstallIndicator();
+        iIsFirstTimeToDisplay = ETrue;
+        TRAP_IGNORE( DisplayDeviceDialogL() );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::CSifUiPrivate()
+// ---------------------------------------------------------------------------
+//
+CSifUiPrivate::CSifUiPrivate() : CActive( CActive::EPriorityStandard ),
+        iIsFirstTimeToDisplay( ETrue )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ConstructL()
+    {
+    iWait = new( ELeave ) CActiveSchedulerWait;
+    // iDeviceDialog is created later, in the first call of DisplayDeviceDialogL()
+    // iIndicator is also created later, in the first call of ActivateInstallIndicator()
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ClearParams()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ClearParams()
+    {
+    if( iVariantMap )
+        {
+        delete iVariantMap;
+        iVariantMap = NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::VariantMapL()
+// ---------------------------------------------------------------------------
+//
+CHbSymbianVariantMap* CSifUiPrivate::VariantMapL()
+    {
+    if( !iVariantMap )
+        {
+        iVariantMap = CHbSymbianVariantMap::NewL();
+        }
+    return iVariantMap;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ChangeNoteTypeL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ChangeNoteTypeL( TInt aType )
+    {
+    ClearParams();
+    AddParamL( KSifUiDialogType, aType );
+    iDialogType = static_cast< TSifUiDeviceDialogType >( aType );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::AddParamL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::AddParamL( const TDesC& aKey, TInt aValue )
+    {
+    CHbSymbianVariant* variant = NULL;
+    variant = CHbSymbianVariant::NewL( &aValue, CHbSymbianVariant::EInt );
+    User::LeaveIfError( VariantMapL()->Add( aKey, variant ) );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::AddParamL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::AddParamL( const TDesC& aKey, const TDesC& aValue )
+    {
+    CHbSymbianVariant* variant = NULL;
+    variant = CHbSymbianVariant::NewL( &aValue, CHbSymbianVariant::EDes );
+    User::LeaveIfError( VariantMapL()->Add( aKey, variant ) );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::AddParamListL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::AddParamListL( const TDesC& aKey, const MDesCArray& aList )
+    {
+    CHbSymbianVariant* variant = NULL;
+    variant = CHbSymbianVariant::NewL( &aList, CHbSymbianVariant::EDesArray );
+    User::LeaveIfError( VariantMapL()->Add( aKey, variant ) );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::AddParamBinaryL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::AddParamBinaryL( const TDesC& aKey, const CBufBase& aBinary )
+    {
+    CHbSymbianVariant* variant = NULL;
+    const TPtrC8 ptr( const_cast<CBufBase&>( aBinary ).Ptr( 0 ).Ptr(), aBinary.Size() );
+    variant = CHbSymbianVariant::NewL( &ptr, CHbSymbianVariant::EBinary );
+    CleanupStack::PushL( variant );
+    User::LeaveIfError( VariantMapL()->Add( aKey, variant ) );
+    CleanupStack::Pop( variant );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::AddParamPckgL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::AddParamPckgL( const TDesC& aKey, const TDesC8& aPckg )
+    {
+    CHbSymbianVariant* variant = NULL;
+    variant = CHbSymbianVariant::NewL( &aPckg, CHbSymbianVariant::EBinary );
+    User::LeaveIfError( VariantMapL()->Add( aKey, variant ) );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::AddParamsAppInfoL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::AddParamsAppInfoL( const CSifUiAppInfo& aAppInfo )
+    {
+    AddParamL( KSifUiApplicationName, aAppInfo.Name() );
+    const TVersion& version( aAppInfo.Version() );
+    if( version.iMajor || version.iMinor )
+        {
+        TVersionName versionName;
+        versionName.AppendNum( version.iMajor );
+        versionName.Append( TChar('.') );
+        versionName.AppendNum( version.iMinor );
+        AddParamL( KSifUiApplicationVersion, versionName );
+        }
+    if( aAppInfo.Vendor().Length() )
+        {
+        AddParamL( KSifUiApplicationDetails, aAppInfo.Vendor() );
+        }
+    if( aAppInfo.Size() > 0 )
+        {
+        AddParamL( KSifUiApplicationSize, aAppInfo.Size() );
+        }
+    // TODO: icons missing, could use binary transfer as in certificates
+
+    if( iAppInfo != &aAppInfo )
+        {
+        if( iAppInfo )
+            {
+            delete iAppInfo;
+            iAppInfo = NULL;
+            }
+        iAppInfo = CSifUiAppInfo::NewL( aAppInfo );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::AddParamsCertificatesL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::AddParamsCertificatesL()
+    {
+    if( iCertificateBuffer )
+        {
+        AddParamBinaryL( KSifUiCertificates, *iCertificateBuffer );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::AddParamsHiddenButtonsL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::AddParamsHiddenButtonsL()
+    {
+    CHbSymbianVariant* variant = NULL;
+    if( iNoHideProgressButton )
+        {
+        variant = CHbSymbianVariant::NewL( &iNoHideProgressButton, CHbSymbianVariant::EBool );
+        TInt err = VariantMapL()->Add( KSifUiProgressNoteIsHideButtonHidden, variant );
+        User::LeaveIfError( err );
+        }
+    if( iNoCancelProgressButton )
+        {
+        variant = CHbSymbianVariant::NewL( &iNoCancelProgressButton, CHbSymbianVariant::EBool );
+        TInt err = VariantMapL()->Add( KSifUiProgressNoteIsCancelButtonHidden, variant );
+        User::LeaveIfError( err );
+        }
+    if( iNoShowInAppLibButton )
+        {
+        variant = CHbSymbianVariant::NewL( &iNoShowInAppLibButton, CHbSymbianVariant::EBool );
+        TInt err = VariantMapL()->Add( KSifUiCompleteNoteIsShowButtonHidden, variant );
+        User::LeaveIfError( err );
+        }
+    if( iNoErrorDetailsButton )
+        {
+        variant = CHbSymbianVariant::NewL( &iNoErrorDetailsButton, CHbSymbianVariant::EBool );
+        TInt err = VariantMapL()->Add( KSifUiErrorNoteIsDetailsButtonHidden, variant );
+        User::LeaveIfError( err );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ResendAllInstallationDetailsL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ResendAllInstallationDetailsL()
+    {
+    AddParamL( KSifUiDialogType, iDialogType );
+    if( iAppInfo )
+        {
+        AddParamsAppInfoL( *iAppInfo );
+        }
+    AddParamsCertificatesL();
+    if( iProgressBarFinalValue )
+        {
+        AddParamL( KSifUiProgressNoteFinalValue, iProgressBarFinalValue );
+        }
+    if( iProgressBarCurrentValue )
+        {
+        AddParamL( KSifUiProgressNoteValue, iProgressBarCurrentValue );
+        }
+    AddParamL( KSifUiProgressNotePhase, iInstallingPhase );
+    AddParamsHiddenButtonsL();
+    // TODO: AddParamsIconL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ActivateInstallIndicatorL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ActivateInstallIndicatorL()
+    {
+    if( !iIndicator )
+        {
+        iIndicator = CHbIndicatorSymbian::NewL();
+        iIndicator->SetObserver( this );
+        }
+
+    UpdateInstallIndicatorProgressL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::UpdateInstallIndicatorProgressL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::UpdateInstallIndicatorProgressL()
+    {
+    CHbSymbianVariantMap* parameters = CHbSymbianVariantMap::NewL();
+    CleanupStack::PushL( parameters );
+
+    CHbSymbianVariant* param = NULL;
+
+    if( iAppInfo && iAppInfo->Name().Length() )
+        {
+        TPtrC appName = iAppInfo->Name();
+        param = CHbSymbianVariant::NewL( &appName, CHbSymbianVariant::EDes );
+        parameters->Add( KSifUiInstallIndicatorAppName, param );
+        }
+    if( iInstallingPhase )
+        {
+        param = CHbSymbianVariant::NewL( &iInstallingPhase, CHbSymbianVariant::EInt );
+        parameters->Add( KSifUiInstallIndicatorPhase, param );
+        }
+    if( iProgressBarFinalValue )
+        {
+        TInt progressPercent = KProgFull * iProgressBarCurrentValue / iProgressBarFinalValue;
+        param = CHbSymbianVariant::NewL( &progressPercent, CHbSymbianVariant::EInt );
+        parameters->Add( KSifUiInstallIndicatorProgress, param );
+        }
+
+    // TODO: should both install indicator and device dialog use the same variant map?
+
+    param = CHbSymbianVariant::NewL( parameters, CHbSymbianVariant::EVariantMap );
+    CleanupStack::Pop( parameters );
+    CleanupStack::PushL( param );
+    iIndicator->Activate( KSifUiInstallIndicatorType, param );
+    CleanupStack::PopAndDestroy( param );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::CloseInstallIndicator()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::CloseInstallIndicator()
+    {
+    if( iIndicator )
+        {
+        iIndicator->Deactivate( KSifUiInstallIndicatorType );
+        delete iIndicator;
+        iIndicator = NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::IsIndicatorActive()
+// ---------------------------------------------------------------------------
+//
+TBool CSifUiPrivate::IsIndicatorActive()
+    {
+    TBool isActive = EFalse;
+
+    if( iIndicator )
+        {
+        TInt value = 0;
+        TInt err = RProperty::Get( KInstallIndicatorCategory, KInstallIndicatorStatus,
+            value );
+        if( !err )
+            {
+            isActive = ( value > 0 );
+            }
+        }
+
+    return isActive;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ShowInstallIndicatorCompleteL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ShowInstallIndicatorCompleteL( TInt aErrorCode )
+    {
+    CHbDeviceNotificationDialogSymbian* completeNote =
+            CHbDeviceNotificationDialogSymbian::NewL();
+    CleanupStack::PushL( completeNote );
+    completeNote->SetIconNameL( KSifUiDefaultApplicationIcon );
+    if( aErrorCode == KErrNone )
+        {
+        // TODO: use HbTextResolverSymbian to get localized text
+        _LIT( KInstalled, "Installed" );
+        completeNote->SetTitleL( KInstalled );
+        }
+    else
+        {
+        // TODO: use HbTextResolverSymbian to get localized text
+        _LIT( KInstallationFailed, "Installation failed" );
+        completeNote->SetTitleL( KInstallationFailed );
+        }
+    completeNote->ShowL();
+    CleanupStack::PopAndDestroy( completeNote );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::UpdateDialogAndWaitForResponseL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::UpdateDialogAndWaitForResponseL()
+    {
+    CloseInstallIndicator();
+    DisplayDeviceDialogL();
+    WaitForResponseL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::UpdateDialogOrIndicatorWithoutWaitingL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::UpdateDialogOrIndicatorWithoutWaitingL()
+    {
+    if( IsIndicatorActive() )
+        {
+        UpdateInstallIndicatorProgressL();
+        }
+    else
+        {
+        DisplayDeviceDialogL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::CompleteDialogOrIndicatorAndWaitForResponseL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::CompleteDialogOrIndicatorAndWaitForResponseL( TInt aErrorCode )
+    {
+    if( !IsCancelled() )
+        {
+        if( IsIndicatorActive() )
+            {
+            UpdateInstallIndicatorProgressL();
+            ShowInstallIndicatorCompleteL( aErrorCode );
+            CloseInstallIndicator();
+            }
+        else
+            {
+            DisplayDeviceDialogL();
+            WaitForResponseL();
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::DisplayDeviceDialogL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::DisplayDeviceDialogL()
+    {
+    if( iDeviceDialog && iIsDisplayingDialog )
+        {
+        User::LeaveIfError( iDeviceDialog->Update( *VariantMapL() ) );
+        }
+    else
+        {
+        if( !iDeviceDialog )
+            {
+            iDeviceDialog = CHbDeviceDialogSymbian::NewL();
+            }
+        if( !iIsFirstTimeToDisplay )
+            {
+            ResendAllInstallationDetailsL();
+            }
+        User::LeaveIfError( iDeviceDialog->Show( KSifUiDeviceDialog, *VariantMapL(), this ) );
+        iIsDisplayingDialog = ETrue;
+        }
+    iIsFirstTimeToDisplay = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::WaitForResponseL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::WaitForResponseL()
+    {
+    iWaitCompletionCode = KErrInUse;    // changed in WaitedResponseReceived() or in DoCancel()
+    iDialogReturnValue = KErrUnknown;   // changed in DataReceived()
+    if( !IsActive() && iWait && !iWait->IsStarted() )
+        {
+        iStatus = KRequestPending;
+        SetActive();
+        iWait->Start();
+        }
+    User::LeaveIfError( iWaitCompletionCode );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::WaitedResponseReceived()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::WaitedResponseReceived( TInt aCompletionCode )
+    {
+    if( IsActive() )
+        {
+        iWaitCompletionCode = aCompletionCode;
+        TRequestStatus* status( &iStatus );
+        User::RequestComplete( status, KErrNone );
+        }
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/bwins/sifuitestu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,4 @@
+EXPORTS
+	?LibEntryL@@YAPAVCTestModuleBase@@XZ @ 1 NONAME ; class CTestModuleBase * LibEntryL(void)
+	?SetRequirements@@YAHAAPAVCTestModuleParam@@AAK@Z @ 2 NONAME ; int SetRequirements(class CTestModuleParam * &, unsigned long &)
+
Binary file appinstall_plat/sifui_api/tsrc/data/mmc/test_x509_cert.cer has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/eabi/sifuitestu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,4 @@
+EXPORTS
+	_Z9LibEntryLv @ 1 NONAME
+	_Z15SetRequirementsRP16CTestModuleParamRm @ 2 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  SifUi API test code
+*
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../init/sifuitest.ini           /epoc32/winscw/c/testframework/TestFramework.ini
+../data/mmc/test_x509_cert.cer  /epoc32/winscw/c/testing/data/test_x509_cert.cer
+../init/sifuitest.ini           /epoc32/data/z/system/data/TestFramework.ini
+
+// Note: data files may need to be copied manually from ../data/mmc to memory card e:/testing/data/
+// See sifuitest.pkg file for details (i.e. which files needs to be installed to run the tests).
+
+PRJ_TESTMMPFILES
+sifuitest.mmp
+
+PRJ_MMPFILES
+sifuitest_nrm.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/ctc_compile_tests.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Compiling module tests
+echo.
+echo ----------------------------------------------------------------------
+echo.
+call sbs reallyclean
+call sbs
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/ctc_instrument_code.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Instrumenting code (armv5 urel and winscw udeb, function coverage)
+echo.
+echo ----------------------------------------------------------------------
+echo.
+pushd ..\..\group
+if exist MON.sym del MON.sym
+if exist MON.dat del MON.dat
+if exist profile.txt del profile.txt
+call sbs reallyclean
+call ctcwrap -i f -2comp -C "EXCLUDE+*.UID.CPP" sbs -c armv5_urel
+call ctcwrap -i f -2comp -C "EXCLUDE+*.UID.CPP" sbs -c winscw_udeb
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/ctc_process_results.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,28 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Processing test results
+echo.
+echo ----------------------------------------------------------------------
+echo.
+pushd ..\..\group
+call ctcpost MON.sym MON.dat -p profile.txt
+call ctc2html -i profile.txt
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/ctc_remove_instrumentation.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,28 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Removing instrumentation
+echo.
+echo ----------------------------------------------------------------------
+echo.
+pushd ..\..\group
+call sbs reallyclean
+call sbs
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/ctc_run_tests.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Running module tests
+echo.
+echo ----------------------------------------------------------------------
+echo.
+echo Note that closing dialogs automatically is not implemented yet.
+echo.
+call \epoc32\release\winscw\udeb\ATSInterface.exe -testmodule sifuitest
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/sifuitest.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:  SifUi API test code
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET          sifuitest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E7
+
+VENDORID        VID_DEFAULT
+CAPABILITY      ALL -TCB
+
+USERINCLUDE     ../inc 
+MW_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH      ../src
+SOURCE          sifuitest.cpp
+SOURCE          sifuitestcases.cpp
+
+LIBRARY         euser.lib                           // Base
+LIBRARY         efsrv.lib                           // File server
+LIBRARY         ws32.lib                            // Window server
+LIBRARY         bafl.lib                            // CDesC16ArrayFlat
+LIBRARY         stiftestinterface.lib               // STIF Framework
+LIBRARY         stiftestengine.lib                  // STIF Framework
+LIBRARY         sifui.lib                           // CSifUi
+LIBRARY         estor.lib                           // RBufWriteStream
+LIBRARY         uissclient.lib                      // Swi::CCertificateInfo
+LIBRARY         x509.lib                            // CX509Certificate
+LIBRARY         apgrfx.lib                          // RApaLsSession 
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/sifuitest.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+; 
+; Description:  SifUi API test code installation file
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"STIF"},(0x101FB3E7),1,1,0,TYPE=SA
+
+; Series60 product id for S60 3.0 and 5.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Install files
+"\epoc32\release\armv5\udeb\sifuitest.dll"-"c:\sys\bin\sifuitest.dll"
+"..\init\sifuitestscripter.ini"-"c:\TestFramework\sifuitestscripter.ini"
+"..\data\mmc\test_x509_cert.cer"-"e:\testing\data\test_x509_cert.cer"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/sifuitest_nrm.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:  SifUi API test code
+*
+*/
+
+// Same MMP file is used both in normal and in test builds
+#include "sifuitest.mmp"
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/inc/sifuitest.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,221 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: STIF hardcoded module declaration
+*
+*/
+
+#ifndef SIFUITEST_H
+#define SIFUITEST_H
+
+#include <StifTestModule.h>             // CTestModuleBase
+#include <StifLogger.h>                 // CStifLogger
+#include <w32std.h>                     // TKeyEvent
+
+
+// Definitions defined in STIF test module template
+#define TEST_MODULE_VERSION_MAJOR 0
+#define TEST_MODULE_VERSION_MINOR 0
+#define TEST_MODULE_VERSION_BUILD 0
+
+_LIT( KSifUiTestLogPath, "\\logs\\testframework\\SifUiTest\\" );
+_LIT( KSifUiTestLogFile, "SifUiTest.txt" );
+_LIT( KSifUiTestLogFileWithTitle, "SifUiTest_[%S].txt" );
+
+#define GETPTR &
+#define ENTRY(str,func) {_S(str), GETPTR func,0,0,0}
+#define FUNCENTRY(func) {_S(#func), GETPTR func,0,0,0}
+#define OOM_ENTRY(str,func,a,b,c) {_S(str), GETPTR func,a,b,c}
+#define OOM_FUNCENTRY(func,a,b,c) {_S(#func), GETPTR func,a,b,c}
+
+class CX509Certificate;
+class CSifUiTest;
+class CSifUi;
+
+// Pointer to test function (that does the actual testing) type definition
+typedef TInt (CSifUiTest::* TestFunction)(TTestResult&);
+
+// Structure containing test case name and pointer to test function
+class TCaseInfo
+    {
+    public:
+        TPtrC           iCaseName;
+        TestFunction    iMethod;
+        TBool           iIsOOMTest;
+        TInt            iFirstMemoryAllocation;
+        TInt            iLastMemoryAllocation;
+
+    TCaseInfo( const TDesC& aDes ) : iCaseName( aDes )
+        {
+        };
+    };
+
+
+
+/**
+ *  SifUiTest class.
+ *
+ */
+NONSHARABLE_CLASS(CSifUiTest) : public CTestModuleBase
+    {
+    public:     // constructors and destructor
+        static CSifUiTest* NewL();
+        ~CSifUiTest();
+
+    public:     // from CTestModuleBase
+        /**
+        * InitL is used to initialize the test module.
+        * @param aIniFile Initialization file for the test module (optional)
+        * @param aFirstTime Flag is true when InitL is executed for first
+        *   created instance of CSifUiTest.
+        * @return Symbian OS error code
+        */
+        TInt InitL( TFileName& aIniFile, TBool aFirstTime );
+
+        /**
+        * GetTestCasesL is used to inquiry test cases.
+        * @param aTestCaseFile Test case file (optional)
+        * @param aTestCases  Array of TestCases returned to test framework
+        * @return Symbian OS error code
+        */
+        TInt GetTestCasesL( const TFileName& aTestCaseFile,
+                            RPointerArray<TTestCaseInfo>& aTestCases );
+
+        /**
+        * RunTestCaseL is used to run an individual test case.
+        * @param aCaseNumber Test case number
+        * @param aTestCaseFile Test case file (optional)
+        * @param aResult Test case result returned to test framework (PASS/FAIL)
+        * @return Symbian OS error code (test case execution error, which is
+        *   not reported in aResult parameter as test case failure).
+        */
+        TInt RunTestCaseL( const TInt aCaseNumber,
+                           const TFileName& aTestCaseFile,
+                           TTestResult& aResult );
+
+        /**
+         * Method used to log version of test module
+         */
+        void SendTestModuleVersion();
+
+    private:
+        CSifUiTest();
+        void ConstructL();
+
+        /**
+        * Function returning test case name and pointer to test case function.
+        * @param aCaseNumber test case number
+        * @return TCaseInfo
+        */
+        const TCaseInfo Case ( const TInt aCaseNumber ) const;
+
+        /**
+         * Helper function that returns aErrorCode as string.
+         * @param aErrorCode - Symbian OS error code
+         * @return name of the error code
+         */
+        TPtrC ErrorCodeString( TInt aErrorCode ) const;
+
+        /**
+         * Helper function that sets aReturnCode result to aResult.
+         * @param aResult - test case result to be set
+         * @param aReturnCode - Symbian OS error code
+         */
+        void SetResult( TTestResult& aResult, const TInt aReturnCode ) const;
+
+        /**
+         * Helper function that sends key event after given time delay.
+         * Note that this function returns immediately, but it still sends
+         * the key event after given delay.
+         * @param aDelay - time to wait in microseconds
+         * @param aKey - key event to send
+         */
+        void AsyncWaitAndSendKeyEventL( TTimeIntervalMicroSeconds32 aDelay,
+                const TKeyEvent& aKeyEvent ) const;
+
+        /**
+         * Helper function to create Swi::CCertificateInfo objects.
+         */
+        CX509Certificate* ReadCertificateL( const TDesC& aFileName );
+
+
+        // --- TEST CASE FUNCTIONS ---
+
+        /**
+         * Creates CSifUi objects in very low-memory until create succeeds.
+         * @param aResult - test case result (PASS/FAIL)
+         * @return Symbian OS error code (other than test result)
+         */
+        TInt CreateLowMemTest( TTestResult& aResult );
+
+        /**
+         * Run drive selection test case.
+         * @param aResult - test case result (PASS/FAIL)
+         * @return Symbian OS error code (other than test result)
+         */
+        TInt MemorySelectionTest( TTestResult& aResult );
+
+        /**
+         * Helper function for MemorySelectionTest()
+         */
+        void DoMemorySelectionTestL( TTestResult& aResult );
+
+        /**
+         * Run certificate info test case.
+         * @param aResult - test case result (PASS/FAIL)
+         * @return Symbian OS error code (other than test result)
+         */
+        TInt CertificateInfoTest( TTestResult& aResult );
+
+        /**
+         * Helper function for CertificateInfoTest()
+         */
+        void DoCertificateInfoTestL( TTestResult& aResult );
+
+        /**
+         * Run application info test case.
+         * @param aResult - test case result (PASS/FAIL)
+         * @return Symbian OS error code (other than test result)
+         */
+        TInt AppInfoTest( TTestResult& aResult );
+
+        /**
+         * Helper function for AppInfoTest()
+         */
+        void DoAppInfoTestL( TTestResult& aResult );
+        
+        /**
+         * Run progress dialogs test case.
+         * @param aResult - test case result (PASS/FAIL)
+         * @return Symbian OS error code (other than test result)
+         */
+        TInt ProgressDialogsTest( TTestResult& aResult );
+
+        /**
+         * Helper function for ProgressDialogsTest()
+         */
+        void DoProgressDialogsTestL( TTestResult& aResult );
+
+    private:        // data
+        TestFunction iMethod;
+        CStifLogger* iLog;
+        CStifLogger* iStdLog;
+        CStifLogger* iTCLog;
+        TBool iAddTestCaseTitleToLogName;
+        TBool iVersionLogged;
+        RFs iFs;
+        CActiveScheduler* iScheduler;
+    };
+
+#endif      // SIFUITEST_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/inc/sifuitestcleanuputils.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Defines CleanupResetAndDestroyPushL
+*
+*/
+
+
+#ifndef SIFUITESTCLEANUPUTILS_H
+#define SIFUITESTCLEANUPUTILS_H
+
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL( T& aRef );
+private:
+    static void ResetAndDestroy( TAny *aPtr );
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef );
+
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL( T& aRef )
+    {
+    CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) );
+    }
+
+template <class T>
+void CleanupResetAndDestroy<T>::ResetAndDestroy( TAny *aPtr )
+    {
+    if( aPtr )
+        {
+        static_cast<T*>( aPtr )->ResetAndDestroy();
+        }
+    }
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef )
+    {
+    CleanupResetAndDestroy<T>::PushL( aRef );
+    }
+
+#endif // SIFUITESTCLEANUPUTILS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/init/sifuitest.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description: SifUi STIF tests initialization file
+#
+#
+
+[Engine_Defaults]
+TestReportMode= FullReport
+CreateTestReport= YES
+TestReportFilePath= C:\LOGS\TestFramework\
+TestReportFileName= TestReport
+TestReportFormat= TXT
+TestReportOutput= FILE
+TestReportFileCreationMode= OVERWRITE
+DeviceResetDllName= StifResetForNokia.dll
+DisableMeasurement= stifmeasurementdisablenone
+Timeout= 0
+UITestingSupport= YES
+SeparateProcesses= NO
+[End_Defaults]
+
+[New_Module]
+ModuleName= sifuitest
+[End_Module]
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/run_module_tests.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,24 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+pushd group
+call ctc_instrument_code.bat
+call ctc_compile_tests.bat
+call ctc_run_tests.bat
+call ctc_process_results.bat
+call ctc_remove_instrumentation.bat
+popd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/src/sifuitest.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,366 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains Hardcoded module implementation.
+*
+*/
+
+
+#include <Stiftestinterface.h>
+#include <SettingServerClient.h>
+#include <sifui.h>                      // CSifUi
+#include "SifUiTest.h"
+
+const TInt KTestStackSize = 0x8000;     // 32K stack
+const TInt KTestMinHeap = 0x4000;       // 16K heap min
+const TInt KTestMaxHeap = 0x200000;     // 2M heap max
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::NewL()
+// -----------------------------------------------------------------------------
+//
+CSifUiTest* CSifUiTest::NewL()
+    {
+    CSifUiTest* self = new (ELeave) CSifUiTest;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::~CSifUiTest()
+// -----------------------------------------------------------------------------
+//
+CSifUiTest::~CSifUiTest()
+    {
+    iLog = NULL;
+    delete iStdLog;
+    delete iTCLog;
+    iFs.Close();
+
+    if( iScheduler )
+        {
+        CActiveScheduler::Install( NULL );
+        delete iScheduler;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::InitL()
+// -----------------------------------------------------------------------------
+//
+TInt CSifUiTest::InitL( TFileName& /*aIniFile*/, TBool /*aFirstTime*/ )
+    {
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::GetTestCasesL()
+// -----------------------------------------------------------------------------
+//
+TInt CSifUiTest::GetTestCasesL( const TFileName& /*aConfig*/,
+        RPointerArray<TTestCaseInfo>& aTestCases )
+    {
+    for( TInt index = 0; Case( index ).iMethod != NULL; ++index )
+        {
+        TTestCaseInfo* newCase = new( ELeave ) TTestCaseInfo();
+        CleanupStack::PushL( newCase );
+        newCase->iCaseNumber = index;
+        newCase->iTitle.Copy( Case(index).iCaseName );
+        aTestCases.AppendL( newCase );
+        CleanupStack::Pop( newCase );
+        }
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::RunTestCaseL
+// -----------------------------------------------------------------------------
+//
+TInt CSifUiTest::RunTestCaseL( const TInt aCaseNumber,
+        const TFileName& /*aConfig*/, TTestResult& aResult )
+    {
+    if( !iVersionLogged )
+        {
+        SendTestModuleVersion();
+        iVersionLogged = ETrue;
+        }
+
+    TInt returnValue = KErrNone;
+
+    TCaseInfo caseInfo = Case ( aCaseNumber );
+    if( caseInfo.iMethod != NULL )
+        {
+        _LIT( KLogStartTC, "Starting testcase [%S]" );
+        iLog->Log( KLogStartTC, &caseInfo.iCaseName );
+
+        // Switch to use test case (TC) logger if necessary
+        if( iAddTestCaseTitleToLogName )
+            {
+            if( iTCLog )
+                {
+                delete iTCLog;
+                iTCLog = NULL;
+                }
+
+            TName title;
+            TestModuleIf().GetTestCaseTitleL( title );
+            TFileName logFileName;
+            logFileName.Format( KSifUiTestLogFileWithTitle, &title );
+            iTCLog = CStifLogger::NewL( KSifUiTestLogPath, logFileName );
+            iLog = iTCLog;
+            }
+
+        // Run test case
+        iMethod = caseInfo.iMethod;
+        TRAPD( err, returnValue  = ( this->*iMethod )( aResult ) );
+
+        // Restore standard log and close test case logger
+        if( iAddTestCaseTitleToLogName )
+            {
+            iLog = iStdLog;
+            delete iTCLog;
+            iTCLog = NULL;
+            }
+
+        // Leave if the case execution failed
+        User::LeaveIfError( err );
+        }
+    else
+        {
+        returnValue = KErrNotFound;
+        }
+
+    // Return case execution status (not the result of the case execution)
+    return returnValue;
+    }
+
+//-----------------------------------------------------------------------------
+// CSifUiTest::SendTestModuleVersion
+//-----------------------------------------------------------------------------
+//
+void CSifUiTest::SendTestModuleVersion()
+    {
+    TVersion moduleVersion;
+    moduleVersion.iMajor = TEST_MODULE_VERSION_MAJOR;
+    moduleVersion.iMinor = TEST_MODULE_VERSION_MINOR;
+    moduleVersion.iBuild = TEST_MODULE_VERSION_BUILD;
+
+    TFileName moduleName;
+    moduleName = _L("SifUiTest.dll");
+
+    TBool newVersionOfMethod = ETrue;
+    TestModuleIf().SendTestModuleVersion( moduleVersion, moduleName, newVersionOfMethod );
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::CSifUiTest()
+// -----------------------------------------------------------------------------
+//
+CSifUiTest::CSifUiTest()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CSifUiTest::ConstructL()
+    {
+    User::LeaveIfError( iFs.Connect() );
+
+    RSettingServer settingsServer;
+    User::LeaveIfError( settingsServer.Connect() );
+    CleanupClosePushL( settingsServer );
+
+    TLoggerSettings loggerSettings;
+    User::LeaveIfError( settingsServer.GetLoggerSettings( loggerSettings ) );
+
+    CleanupStack::PopAndDestroy( &settingsServer );
+
+    iAddTestCaseTitleToLogName = loggerSettings.iAddTestCaseTitle;
+    iStdLog = CStifLogger::NewL( KSifUiTestLogPath, KSifUiTestLogFile );
+    iLog = iStdLog;
+
+    _LIT( KLogStart, "SifUiTest starts" );
+    iLog->Log( KLogStart );
+
+    iVersionLogged = EFalse;
+
+    if( !CActiveScheduler::Current() )
+        {
+        iScheduler = new( ELeave ) CActiveScheduler;
+        CActiveScheduler::Install( iScheduler );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::ErrorCodeString()
+// -----------------------------------------------------------------------------
+//
+TPtrC CSifUiTest::ErrorCodeString( TInt aErrorCode ) const
+    {
+    switch( aErrorCode )
+        {
+        case KErrNone:
+            return _L("KErrNone");
+        case KErrNotFound:
+            return _L("KErrNotFound");
+        case KErrGeneral:
+            return _L("KErrGeneral");
+        case KErrCancel:
+            return _L("KErrCancel");
+        case KErrNoMemory:
+            return _L("KErrNoMemory");
+        case KErrNotSupported:
+            return _L("KErrNotSupported");
+        case KErrArgument:
+            return _L("KErrArgument");
+        case KErrTotalLossOfPrecision:
+            return _L("KErrTotalLossOfPrecision");
+        case KErrBadHandle:
+            return _L("KErrBadHandle");
+        case KErrOverflow:
+            return _L("KErrOverflow");
+        case KErrUnderflow:
+            return _L("KErrUnderflow");
+        case KErrAlreadyExists:
+            return _L("KErrAlreadyExists");
+        case KErrPathNotFound:
+            return _L("KErrPathNotFound");
+        case KErrDied:
+            return _L("KErrDied");
+        case KErrInUse:
+            return _L("KErrInUse");
+        case KErrServerTerminated:
+            return _L("KErrServerTerminated");
+        case KErrServerBusy:
+            return _L("KErrServerBusy");
+        case KErrCompletion:
+            return _L("KErrCompletion");
+        case KErrNotReady:
+            return _L("KErrNotReady");
+        case KErrUnknown:
+            return _L("KErrUnknown");
+        case KErrCorrupt:
+            return _L("KErrCorrupt");
+        case KErrAccessDenied:
+            return _L("KErrAccessDenied");
+        case KErrLocked:
+            return _L("KErrLocked");
+        case KErrWrite:
+            return _L("KErrWrite");
+        case KErrDisMounted:
+            return _L("KErrDisMounted");
+        case KErrEof:
+            return _L("KErrEof");
+        case KErrDiskFull:
+            return _L("KErrDiskFull");
+        case KErrBadDriver:
+            return _L("KErrBadDriver");
+        case KErrBadName:
+            return _L("KErrBadName");
+        case KErrCommsLineFail:
+            return _L("KErrCommsLineFail");
+        case KErrCommsFrame:
+            return _L("KErrCommsFrame");
+        case KErrCommsOverrun:
+            return _L("KErrCommsOverrun");
+        case KErrCommsParity:
+            return _L("KErrCommsParity");
+        case KErrTimedOut:
+            return _L("KErrTimedOut");
+        case KErrCouldNotConnect:
+            return _L("KErrCouldNotConnect");
+        case KErrCouldNotDisconnect:
+            return _L("KErrCouldNotDisconnect");
+        case KErrDisconnected:
+            return _L("KErrDisconnected");
+        case KErrBadLibraryEntryPoint:
+            return _L("KErrBadLibraryEntryPoint");
+        case KErrBadDescriptor:
+            return _L("KErrBadDescriptor");
+        case KErrAbort:
+            return _L("KErrAbort");
+        case KErrTooBig:
+            return _L("KErrTooBig");
+        case KErrDivideByZero:
+            return _L("KErrDivideByZero");
+        case KErrBadPower:
+            return _L("KErrBadPower");
+        case KErrDirFull:
+            return _L("KErrDirFull");
+        case KErrHardwareNotAvailable:
+            return _L("KErrHardwareNotAvailable");
+        case KErrSessionClosed:
+            return _L("KErrSessionClosed");
+        case KErrPermissionDenied:
+            return _L("KErrPermissionDenied");
+        case KErrExtensionNotSupported:
+            return _L("KErrExtensionNotSupported");
+        case KErrCommsBreak:
+            return _L("KErrCommsBreak");
+        case KErrNoSecureTime:
+            return _L("KErrNoSecureTime");
+        }
+    return _L("UNKNOWN ERROR CODE");
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::SetResult()
+// -----------------------------------------------------------------------------
+//
+void CSifUiTest::SetResult( TTestResult& aResult, const TInt aReturnCode ) const
+    {
+    aResult.SetResult( aReturnCode, ErrorCodeString( aReturnCode ) );
+    }
+
+
+// ==== OTHER EXPORTED FUNCTIONS ====
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CTestModuleBase* LibEntryL()
+    {
+    return CSifUiTest::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+// SetRequirements handles test module parameters
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt SetRequirements( CTestModuleParam*& aTestModuleParam,
+        TUint32& aParameterValid )
+    {
+    aParameterValid = KStifTestModuleParameterChanged;
+
+    CTestModuleParamVer01* param = NULL;
+    TRAPD( error, param = CTestModuleParamVer01::NewL() );
+    if( !error )
+        {
+        param->iTestThreadStackSize = KTestStackSize;
+        param->iTestThreadMinHeap = KTestMinHeap;
+        param->iTestThreadMaxHeap = KTestMaxHeap;
+        aTestModuleParam = param;
+        }
+
+    return error;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/src/sifuitestcases.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,641 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains hardcoded module implementation.
+*
+*/
+
+#include <badesca.h>                    // CDesCArray, StifUnitMacros.h needs this
+#include <StifUnitMacros.h>             // STIF_ASSERT_NULL, STIF_ASSERT_NOT_NULL
+#include <sifui.h>                      // CSifUi
+#include <sifuiappinfo.h>               // CSifUiAppInfo
+#include <sifuicertificateinfo.h>       // CSifUiCertificateInfo
+#include <s32file.h>                    // RFileReadStream
+#include <s32mem.h>                     // RDesReadStream
+#include <apgcli.h>                     // RApaLsSession
+#include <swi/msisuihandlers.h>         // Swi::CCertificateInfo
+#include "sifuitest.h"                  // CSifUiTest
+#include "sifuitestcleanuputils.h"      // CleanupResetAndDestroyPushL
+
+_LIT( KX509TestCertFile, "\\testing\\data\\test_x509_cert.cer" );
+
+_LIT( KEnter, "Enter" );
+_LIT( KStepFormat, "Step %d" );
+_LIT( KExit, "Exit" );
+
+const TInt KBufferGranularity = 1024;
+
+
+// Internal structure containing test case name and pointer to test function
+class TCaseInfoInternal
+    {
+    public:
+        const TText*    iCaseName;
+        TestFunction    iMethod;
+        TBool           iIsOOMTest;
+        TInt            iFirstMemoryAllocation;
+        TInt            iLastMemoryAllocation;
+    };
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::Case
+// Returns a test case by number.
+//
+// This function contains an array of all available test cases
+// i.e pair of case name and test function. If case specified by parameter
+// aCaseNumber is found from array, then that item is returned.
+// -----------------------------------------------------------------------------
+//
+const TCaseInfo CSifUiTest::Case ( const TInt aCaseNumber ) const
+     {
+    /**
+    * When adding new test cases, implement new test case function and add new
+    * line to KCases array specifing the name of the case and the function.
+    *
+    * ENTRY macro takes two parameters: test case name and test case
+    * function name.
+    *
+    * FUNCENTRY macro takes only test case function name as a parameter and
+    * uses that as a test case name and test case function name.
+    *
+    */
+
+    static TCaseInfoInternal const KCases[] =
+        {
+        ENTRY( "CreateLowMemTest", CSifUiTest::CreateLowMemTest ),
+        ENTRY( "MemorySelectionTest", CSifUiTest::MemorySelectionTest ),
+        ENTRY( "CertificateInfoTest", CSifUiTest::CertificateInfoTest ),
+        ENTRY( "AppInfoTest", CSifUiTest::AppInfoTest ),
+        ENTRY( "ProgressDialogsTest", CSifUiTest::ProgressDialogsTest )
+        };
+
+    if( (TUint) aCaseNumber >= sizeof( KCases ) / sizeof( TCaseInfoInternal ) )
+        {
+        TCaseInfo emptyObject( KNullDesC );
+        emptyObject.iMethod = NULL;
+        emptyObject.iIsOOMTest = EFalse;
+        emptyObject.iFirstMemoryAllocation = 0;
+        emptyObject.iLastMemoryAllocation = 0;
+        return emptyObject;
+        }
+
+    TPtrC caseName( static_cast<const TUint16*>( KCases[ aCaseNumber ].iCaseName ) );
+    TCaseInfo caseInfo( caseName );
+    caseInfo.iMethod = KCases[ aCaseNumber ].iMethod;
+    caseInfo.iIsOOMTest = KCases[ aCaseNumber ].iIsOOMTest;
+    caseInfo.iFirstMemoryAllocation = KCases[ aCaseNumber ].iFirstMemoryAllocation;
+    caseInfo.iLastMemoryAllocation = KCases[ aCaseNumber ].iLastMemoryAllocation;
+    return caseInfo;
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::ReadCertificateL()
+// -----------------------------------------------------------------------------
+//
+CX509Certificate* CSifUiTest::ReadCertificateL( const TDesC& aFileName )
+    {
+    TFindFile findFile( iFs );
+    User::LeaveIfError( findFile.FindByDir( aFileName, KNullDesC ) );
+
+    RFile file;
+    User::LeaveIfError( file.Open( iFs, findFile.File(), EFileRead ) );
+    CleanupClosePushL( file );
+
+    TInt fileSize = 0;
+    User::LeaveIfError( file.Size( fileSize ) );
+
+    HBufC8* buffer = HBufC8::NewLC( fileSize );
+    TPtr8 ptr( buffer->Des() );
+    User::LeaveIfError( file.Read( ptr ) );
+
+    CX509Certificate* x509cert = CX509Certificate::NewL( *buffer );
+
+    CleanupStack::PopAndDestroy( buffer );
+    CleanupStack::PopAndDestroy( &file );
+    return x509cert;
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::CreateTest()
+// -----------------------------------------------------------------------------
+//
+TInt CSifUiTest::CreateLowMemTest( TTestResult& aResult )
+    {
+    _LIT( KTestName, "CreateLowMemTest" );
+    TestModuleIf().Printf( 0, KTestName, KEnter );
+
+    TInt count = 0;
+    TInt error = KErrNoMemory;
+    CSifUi* sifUi = NULL;
+    while( error == KErrNoMemory )
+        {
+        User::__DbgSetAllocFail( EFalse, RHeap::EDeterministic, ++count );
+        TRAP( error, sifUi = CSifUi::NewL() );
+        User::__DbgSetAllocFail( EFalse, RHeap::ENone, count );
+        if( !error )
+            {
+            delete sifUi;
+            sifUi = NULL;
+            }
+        }
+    TestModuleIf().Printf( 1, KTestName, _L("count %d, last error %d"), count, error );
+    SetResult( aResult, error );
+
+    TestModuleIf().Printf( 0, KTestName, KExit );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::MemorySelectionTest()
+// -----------------------------------------------------------------------------
+//
+TInt CSifUiTest::MemorySelectionTest( TTestResult& aResult )
+    {
+    TRAPD( result, DoMemorySelectionTestL( aResult ) );
+    SetResult( aResult, result );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::DoMemorySelectionTestL()
+// -----------------------------------------------------------------------------
+//
+void CSifUiTest::DoMemorySelectionTestL( TTestResult& aResult )
+    {
+    _LIT( KTestName, "MemorySelectionTest" );
+    TestModuleIf().Printf( 0, KTestName, KEnter );
+
+    enum TTestSteps
+        {
+        EFirstStep,
+        EGetSelectedWhenNotSet,
+        ESetNoDrivesStep,
+        ESetThreeDriveStep,
+        ESetOneDriveStep,
+        EGetSelectedWhenSetButNotAskedStep,
+        ELastStep,
+        EAllDone
+        };
+
+    CSifUi* sifUi = NULL;
+    RArray<TInt> driveNumbers;
+    CleanupClosePushL( driveNumbers );
+    TInt drive = 0;
+    TInt errorCode = KErrNone;
+
+    TInt error = KErrNone;
+    for( TInt step = EFirstStep; step < EAllDone && !error; ++step )
+        {
+        TestModuleIf().Printf( 1, KTestName, KStepFormat, step );
+        switch( step )
+            {
+            case EFirstStep:
+                STIF_ASSERT_NULL( sifUi );
+                TRAP( error, sifUi = CSifUi::NewL() );
+                if( !error )
+                    {
+                    CleanupStack::PushL( sifUi );
+                    }
+                break;
+
+            case EGetSelectedWhenNotSet:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                TRAP( error, errorCode = sifUi->SelectedDrive( drive ) );
+                if( error == KErrNone && errorCode == KErrNotFound )
+                    {
+                    error = KErrNone;
+                    }
+                else
+                    {
+                    error = KErrGeneral;
+                    }
+                break;
+
+            case ESetNoDrivesStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                TRAP( error, sifUi->SetMemorySelectionL( driveNumbers ) );
+                break;
+
+            case ESetThreeDriveStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                driveNumbers.Append( EDriveC );
+                driveNumbers.Append( EDriveE );
+                driveNumbers.Append( EDriveF );
+                TRAP( error, sifUi->SetMemorySelectionL( driveNumbers ) );
+                break;
+
+            case ESetOneDriveStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                driveNumbers.Append( EDriveC );
+                TRAP( error, sifUi->SetMemorySelectionL( driveNumbers ) );
+                break;
+
+            case EGetSelectedWhenSetButNotAskedStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                TRAP( error, errorCode = sifUi->SelectedDrive( drive ) );
+                if( error == KErrNone && errorCode == KErrNotFound )
+                    {
+                    error = KErrNone;
+                    }
+                else
+                    {
+                    error = KErrGeneral;
+                    }
+                break;
+
+            case ELastStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CleanupStack::PopAndDestroy( sifUi );
+                sifUi = NULL;
+                break;
+
+            default:
+                User::Leave( KErrGeneral );
+                break;
+            }
+        }
+    User::LeaveIfError( error );
+
+    CleanupStack::PopAndDestroy( &driveNumbers );
+    TestModuleIf().Printf( 0, KTestName, KExit );
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::CertificateInfoTest()
+// -----------------------------------------------------------------------------
+//
+TInt CSifUiTest::CertificateInfoTest( TTestResult& aResult )
+    {
+    TRAPD( result, DoCertificateInfoTestL( aResult ) );
+    SetResult( aResult, result );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::DoCertificateInfoTestL()
+// -----------------------------------------------------------------------------
+//
+void CSifUiTest::DoCertificateInfoTestL( TTestResult& aResult )
+    {
+    _LIT( KTestName, "CertificateInfoTest" );
+    TestModuleIf().Printf( 0, KTestName, KEnter );
+
+    enum TTestSteps
+        {
+        EFirstStep,
+        ESetNoCertificates,
+        EReadAndSetCertificate,
+        ELastStep,
+        EAllDone
+        };
+
+    CSifUi* sifUi = NULL;
+    RPointerArray<CSifUiCertificateInfo> certificates;
+    CleanupResetAndDestroyPushL( certificates );
+
+    TInt error = KErrNone;
+    for( TInt step = EFirstStep; step < EAllDone && !error; ++step )
+        {
+        TestModuleIf().Printf( 1, KTestName, KStepFormat, step );
+        switch( step )
+            {
+            case EFirstStep:
+                STIF_ASSERT_NULL( sifUi );
+                TRAP( error, sifUi = CSifUi::NewL() );
+                if( !error )
+                    {
+                    CleanupStack::PushL( sifUi );
+                    }
+                break;
+
+            case ESetNoCertificates:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                TRAP( error, sifUi->SetCertificateInfoL( certificates ) );
+                break;
+
+            case EReadAndSetCertificate:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CX509Certificate* x509cert = ReadCertificateL( KX509TestCertFile );
+                CleanupStack::PushL( x509cert );
+
+                Swi::CCertificateInfo* swiCert = Swi::CCertificateInfo::NewLC( *x509cert );
+                CSifUiCertificateInfo* testCert = CSifUiCertificateInfo::NewLC( *swiCert );
+
+                CBufBase* buf = CBufFlat::NewL( KBufferGranularity );
+                CleanupStack::PushL( buf );
+                RBufWriteStream writeStream( *buf );
+                CleanupClosePushL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() == 0 );
+                testCert->ExternalizeL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() > 0 );
+                CleanupStack::PopAndDestroy( 2, buf );      // writeStream, buf
+
+                CleanupStack::PopAndDestroy( testCert );
+                testCert = NULL;
+
+                testCert = CSifUiCertificateInfo::NewL( *swiCert );
+                CleanupStack::PushL( testCert );
+                certificates.AppendL( testCert );
+                CleanupStack::Pop( testCert );
+                TRAP( error, sifUi->SetCertificateInfoL( certificates ) );
+
+                CleanupStack::PopAndDestroy( 2, x509cert );     // swiCert, x509cert
+                }
+                break;
+
+            case ELastStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CleanupStack::PopAndDestroy( sifUi );
+                sifUi = NULL;
+                break;
+
+            default:
+                User::Leave( KErrGeneral );
+                break;
+            }
+        }
+    User::LeaveIfError( error );
+
+    CleanupStack::PopAndDestroy( &certificates );
+    TestModuleIf().Printf( 0, KTestName, KExit );
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::AppInfoTest()
+// -----------------------------------------------------------------------------
+//
+TInt CSifUiTest::AppInfoTest( TTestResult& aResult )
+    {
+    TRAPD( result, DoAppInfoTestL( aResult ) );
+    SetResult( aResult, result );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::DoAppInfoTestL()
+// -----------------------------------------------------------------------------
+//
+void CSifUiTest::DoAppInfoTestL( TTestResult& aResult )
+    {
+    _LIT( KTestName, "AppInfoTest" );
+    TestModuleIf().Printf( 0, KTestName, KEnter );
+
+    enum TTestSteps
+        {
+        EFirstStep,
+        EAppInfoTests,
+        EAppInfoIconTest,
+        EShowConfirmation,
+        EShowError,
+        ELastStep,
+        EAllDone
+        };
+
+    CSifUi* sifUi = NULL;
+
+    _LIT( KAppName, "TestApplication" );
+    _LIT( KAppVendor, "TestSupplier" );
+    const TVersion KAppVersion( 1, 2, 3 );
+    const TInt KAppSize = 0x1234;
+
+    TInt error = KErrNone;
+    for( TInt step = EFirstStep; step < EAllDone && !error; ++step )
+        {
+        TestModuleIf().Printf( 1, KTestName, KStepFormat, step );
+        switch( step )
+            {
+            case EFirstStep:
+                STIF_ASSERT_NULL( sifUi );
+                TRAP( error, sifUi = CSifUi::NewL() );
+                if( !error )
+                    {
+                    CleanupStack::PushL( sifUi );
+                    }
+                break;
+
+            case EAppInfoTests:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CSifUiAppInfo* appInfo = NULL;
+                appInfo = CSifUiAppInfo::NewLC( KAppName, KAppVendor, KAppVersion, KAppSize, NULL );
+
+                STIF_ASSERT_TRUE( appInfo->Name().Compare( KAppName ) == 0 );
+                STIF_ASSERT_TRUE( appInfo->Vendor().Compare( KAppVendor ) == 0 );
+
+                STIF_ASSERT_TRUE( appInfo->Version().iMajor == KAppVersion.iMajor );
+                STIF_ASSERT_TRUE( appInfo->Version().iMinor == KAppVersion.iMinor );
+                STIF_ASSERT_TRUE( appInfo->Version().iBuild == KAppVersion.iBuild );
+
+                STIF_ASSERT_TRUE( appInfo->Size() == KAppSize );
+                STIF_ASSERT_TRUE( appInfo->Bitmaps() == NULL );
+
+                CBufBase* buf = CBufFlat::NewL( KBufferGranularity );
+                CleanupStack::PushL( buf );
+                RBufWriteStream writeStream( *buf );
+                CleanupClosePushL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() == 0 );
+                appInfo->ExternalizeL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() > 0 );
+                CleanupStack::PopAndDestroy( &writeStream );
+                CleanupStack::PopAndDestroy( buf );
+
+                CleanupStack::PopAndDestroy( appInfo );
+                }
+                break;
+
+            case EAppInfoIconTest:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CSifUiAppInfo* appInfo = NULL;
+
+                // TODO: proper icon test needed
+                CApaMaskedBitmap* appBitmap = NULL;
+                appInfo = CSifUiAppInfo::NewLC( KAppName, KAppVendor, KAppVersion, KAppSize, appBitmap );
+
+                CBufBase* buf = CBufFlat::NewL( KBufferGranularity );
+                CleanupStack::PushL( buf );
+                RBufWriteStream writeStream( *buf );
+                CleanupClosePushL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() == 0 );
+                appInfo->ExternalizeL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() > 0 );
+                CleanupStack::PopAndDestroy( &writeStream );
+                CleanupStack::PopAndDestroy( buf );
+
+                CleanupStack::PopAndDestroy( appInfo );
+                }
+                break;
+
+            case EShowConfirmation:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CSifUiAppInfo* appInfo = NULL;
+                appInfo = CSifUiAppInfo::NewL( KAppName, KAppVendor, KAppVersion, KAppSize, NULL );
+                CleanupStack::PushL( appInfo );
+
+                CBufBase* buf = CBufFlat::NewL( KBufferGranularity );
+                CleanupStack::PushL( buf );
+                RBufWriteStream writeStream( *buf );
+                CleanupClosePushL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() == 0 );
+                appInfo->ExternalizeL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() > 0 );
+                CleanupStack::PopAndDestroy( &writeStream );
+                CleanupStack::PopAndDestroy( buf );
+
+                TBool result = EFalse;
+                // TODO: how to close opened dialog automatically?
+                TRAP( error, result = sifUi->ShowConfirmationL( *appInfo ) );
+                if( result )
+                    {
+                    _LIT( KAccepted, "Accepted" );
+                    TestModuleIf().Printf( 1, KTestName, KAccepted );
+                    }
+                else
+                    {
+                    _LIT( KCancelled, "Cancelled" );
+                    TestModuleIf().Printf( 1, KTestName, KCancelled );
+                    }
+                CleanupStack::PopAndDestroy( appInfo );
+                }
+                break;
+
+            case EShowError:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                _LIT( KErrorMessage, "Test error" );
+                _LIT( KErrorDetails, "Test error details" );
+                // TODO: how to close opened dialog automatically?
+                TRAP( error, sifUi->ShowFailedL( KErrNotFound, KErrorMessage, KErrorDetails ) );
+                }
+                break;
+
+            case ELastStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CleanupStack::PopAndDestroy( sifUi );
+                sifUi = NULL;
+                break;
+
+            default:
+                User::Leave( KErrGeneral );
+                break;
+            }
+        }
+    User::LeaveIfError( error );
+
+    TestModuleIf().Printf( 0, KTestName, KExit );
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::ProgressDialogsTest()
+// -----------------------------------------------------------------------------
+//
+TInt CSifUiTest::ProgressDialogsTest( TTestResult& aResult )
+    {
+    TRAPD( result, DoProgressDialogsTestL( aResult ) );
+    SetResult( aResult, result );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::DoProgressDialogsTestL()
+// -----------------------------------------------------------------------------
+//
+void CSifUiTest::DoProgressDialogsTestL( TTestResult& aResult )
+    {
+    _LIT( KTestName, "ProgressDlgsTest" );
+    TestModuleIf().Printf( 0, KTestName, KEnter );
+
+    enum TTestSteps
+        {
+        EFirstStep,
+        EShowProgress,
+        EUpdateProgress,
+        EShowComplete,
+        ELastStep,
+        EAllDone
+        };
+
+    CSifUi* sifUi = NULL;
+
+    _LIT( KAppName, "NoitaCilppa" );
+    _LIT( KAppVendor, "Rodnev" );
+    const TVersion KAppVersion( 3, 2, 1 );
+    const TInt KAppSize = 0x4321;
+
+    const TInt KMaxProgress = 150;
+    const TInt KUpdateStarts = -10;
+    const TInt KUpdateEnds = KMaxProgress + 10;
+    const TInt KUpdateStep = 4;
+
+    TInt error = KErrNone;
+    for( TInt step = EFirstStep; step < EAllDone && !error; ++step )
+        {
+        TestModuleIf().Printf( 1, KTestName, KStepFormat, step );
+        switch( step )
+            {
+            case EFirstStep:
+                STIF_ASSERT_NULL( sifUi );
+                TRAP( error, sifUi = CSifUi::NewL() );
+                if( !error )
+                    {
+                    CleanupStack::PushL( sifUi );
+                    }
+                break;
+
+            case EShowProgress:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CSifUiAppInfo* appInfo = NULL;
+                appInfo = CSifUiAppInfo::NewL( KAppName, KAppVendor, KAppVersion, KAppSize, NULL );
+                CleanupStack::PushL( appInfo );
+                TRAP( error, sifUi->ShowProgressL( *appInfo, KMaxProgress ) );
+                CleanupStack::PopAndDestroy( appInfo );
+                }
+                break;
+
+            case EUpdateProgress:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                for( TInt i = KUpdateStarts; i < KUpdateEnds; i += KUpdateStep )
+                    {
+                    TRAP( error, sifUi->IncreaseProgressBarValueL( KUpdateStep ) );
+                    }
+                }
+                break;
+
+            case EShowComplete:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                TRAP( error, sifUi->ShowCompleteL() );
+                break;
+
+            case ELastStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CleanupStack::PopAndDestroy( sifUi );
+                sifUi = NULL;
+                break;
+
+            default:
+                User::Leave( KErrGeneral );
+                break;
+            }
+        }
+    User::LeaveIfError( error );
+
+    TestModuleIf().Printf( 0, KTestName, KExit );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sw_installer_cr_keys/tsrc/swinstsettingschanger/main.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  SW installation settings changer application.
+*
+*/
+
+#include "swinstsettingschanger.h"
+
+int main(int argc, char *argv[])
+{
+    SwInstSettingsChanger app(argc, argv);
+    return app.exec();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sw_installer_cr_keys/tsrc/swinstsettingschanger/swinstsettingschanger.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  SW installation settings changer application.
+*
+*/
+
+#include "swinstsettingschanger.h"
+#include <hbmainwindow.h>
+#include <hbview.h>
+#include <QGraphicsLinearLayout>
+#include <hbcombobox.h>
+#include <hbtextedit.h>
+#include <hbcheckbox.h>
+#include <hbpushbutton.h>
+#include <centralrepository.h>
+#include <SWInstallerInternalCRKeys.h>
+
+
+SwInstSettingsChanger::SwInstSettingsChanger(int& argc, char* argv[]) : HbApplication(argc, argv),
+    mMainWindow(0), mMainView(0), mOcspProcedure(0), mDefaultUrl(0), mAllowUntrusted(0)
+{
+    mMainWindow = new HbMainWindow();
+    mMainView = new HbView();
+    mMainView->setTitle(tr("SWInstSettings"));
+
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    HbPushButton *readButton = new HbPushButton("Read");
+    connect(readButton, SIGNAL(clicked()), this, SLOT(handleRead()));
+    layout->addItem(readButton);
+
+    HbPushButton *saveButton = new HbPushButton("Save");
+    connect(saveButton, SIGNAL(clicked()), this, SLOT(handleSave()));
+    layout->addItem(saveButton);
+
+    mOcspProcedure = new HbComboBox;
+    mOcspProcedure->setEditable(false);
+    QStringList ocspProcedureList;
+    ocspProcedureList << "Off" << "On" << "Must";
+    mOcspProcedure->setItems(ocspProcedureList);
+    layout->addItem(mOcspProcedure);
+
+    mDefaultUrl = new HbTextEdit;
+    layout->addItem(mDefaultUrl);
+
+    mAllowUntrusted = new HbCheckBox;
+    mAllowUntrusted->setText(tr("KSWInstallerAllowUntrusted"));
+    layout->addItem(mAllowUntrusted);
+
+    HbPushButton *closeButton = new HbPushButton("Close");
+    connect(closeButton, SIGNAL(clicked()), qApp, SLOT(quit()));
+    layout->addItem(closeButton);
+
+    mMainView->setLayout(layout);
+    mMainWindow->addView(mMainView);
+    mMainWindow->show();
+
+    handleRead();
+}
+
+SwInstSettingsChanger::~SwInstSettingsChanger()
+{
+    delete mMainView;
+    delete mMainWindow;
+}
+
+void SwInstSettingsChanger::handleRead()
+{
+    QT_TRAP_THROWING( DoHandleReadL() );
+}
+
+void SwInstSettingsChanger::handleSave()
+{
+    QT_TRAP_THROWING( DoHandleSaveL() );
+}
+
+void SwInstSettingsChanger::DoHandleReadL()
+{
+    CRepository* repository = CRepository::NewL( KCRUidSWInstallerSettings );
+    CleanupStack::PushL( repository );
+
+    TInt ocspProcedure = 0;
+    User::LeaveIfError( repository->Get( KSWInstallerOcspProcedure, ocspProcedure ) );
+    mOcspProcedure->setCurrentIndex( ocspProcedure );
+
+    HBufC* ocspUrlBuf = HBufC::NewLC( NCentralRepositoryConstants::KMaxUnicodeStringLength );
+    TPtr ocspUrl( ocspUrlBuf->Des() );
+    User::LeaveIfError( repository->Get( KSWInstallerOcspDefaultURL, ocspUrl ) );
+    QString defaultUrl = QString::fromUtf16(ocspUrl.Ptr(), ocspUrl.Length());
+    mDefaultUrl->setPlainText( defaultUrl );
+    CleanupStack::PopAndDestroy( ocspUrlBuf );
+
+    TInt allowUntrusted = 0;
+    User::LeaveIfError( repository->Get( KSWInstallerAllowUntrusted, allowUntrusted ) );
+    mAllowUntrusted->setChecked( allowUntrusted );
+
+    CleanupStack::PopAndDestroy( repository );
+}
+
+void SwInstSettingsChanger::DoHandleSaveL()
+{
+    CRepository* repository = CRepository::NewL( KCRUidSWInstallerSettings );
+    CleanupStack::PushL( repository );
+
+    TInt ocspProcedure = mOcspProcedure->currentIndex();
+    User::LeaveIfError( repository->Set( KSWInstallerOcspProcedure, ocspProcedure ) );
+
+    HBufC* ocspUrlBuf = HBufC::NewLC( NCentralRepositoryConstants::KMaxUnicodeStringLength );
+    TPtr ocspUrl( ocspUrlBuf->Des() );
+    QString string = mDefaultUrl->toPlainText();
+    TPtrC ptr( reinterpret_cast<const TText*>( string.constData() ) );
+    ocspUrl.Copy( ptr );
+    User::LeaveIfError( repository->Set( KSWInstallerOcspDefaultURL, ocspUrl ) );
+    CleanupStack::PopAndDestroy( ocspUrlBuf );
+
+    TInt allowUntrusted = mAllowUntrusted->isChecked();
+    User::LeaveIfError( repository->Set( KSWInstallerAllowUntrusted, allowUntrusted ) );
+
+    CleanupStack::PopAndDestroy( repository );
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sw_installer_cr_keys/tsrc/swinstsettingschanger/swinstsettingschanger.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  SW installation settings changer application.
+*
+*/
+
+#ifndef SWINSTSETTINGSCHANGER_H
+#define SWINSTSETTINGSCHANGER_H
+
+#include <hbapplication.h>
+
+class HbMainWindow;
+class HbView;
+class HbComboBox;
+class HbTextEdit;
+class HbCheckBox;
+
+
+class SwInstSettingsChanger : public HbApplication
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    SwInstSettingsChanger(int& argc, char* argv[]);
+    ~SwInstSettingsChanger();
+
+private slots:  // new functions
+    void handleRead();
+    void handleSave();
+
+private:    // new functions
+    void DoHandleReadL();
+    void DoHandleSaveL();
+
+private:    // data
+    HbMainWindow *mMainWindow;
+    HbView       *mMainView;
+    HbComboBox   *mOcspProcedure;
+    HbTextEdit   *mDefaultUrl;
+    HbCheckBox   *mAllowUntrusted;
+};
+
+#endif  // SWINSTSETTINGSCHANGER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sw_installer_cr_keys/tsrc/swinstsettingschanger/swinstsettingschanger.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  SW installation settings changer application.
+*
+*/
+
+#ifndef __SWINSTSETTINGSCHANGER_IBY__
+#define __SWINSTSETTINGSCHANGER_IBY__
+
+file=ABI_DIR/BUILD_DIR/swinstsettingschanger.exe SHARED_LIB_DIR/swinstsettingschanger.exe
+HB_UPGRADABLE_APP_REG_RSC( swinstsettingschanger )
+
+#endif  // __SWINSTSETTINGSCHANGER_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sw_installer_cr_keys/tsrc/swinstsettingschanger/swinstsettingschanger.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description:  SW installation settings changer application.
+#
+
+TEMPLATE = app
+TARGET = swinstsettingschanger
+CONFIG += hb
+DEPENDPATH += .
+INCLUDEPATH += .
+LIBS += -lcentralrepository
+
+HEADERS += swinstsettingschanger.h
+SOURCES += main.cpp swinstsettingschanger.cpp
+
+symbian {
+    TARGET.CAPABILITY = CAP_APPLICATION
+}
+
+BLD_INF_RULES.prj_exports += \
+  "$${LITERAL_HASH}include <platform_paths.hrh>" \
+  "swinstsettingschanger.iby CORE_APP_LAYER_IBY_EXPORT_PATH(swinstsettingschanger.iby)"
--- a/appinstaller/AppMngr2/GSSettingsPlugin/data/appmngr2gssettingspluginrsc.rss	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/GSSettingsPlugin/data/appmngr2gssettingspluginrsc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -64,7 +64,7 @@
             {
             command = EAppMngr2CmdChange;
             txt = qtn_options_change;
-            flags = EEikMenuItemAction;
+            flags = EEikMenuItemSpecific;
             },
         MENU_ITEM
             {
@@ -231,6 +231,6 @@
 
 RESOURCE TBUF r_am_set_ocsp_none
     {
-    buf = qtn_am_set_ocsp_url_none;
+    buf = qtn_selec_sett_val_field_none;
     } 
 
--- a/appinstaller/AppMngr2/GSSettingsPlugin/src/appmngr2gssettingsplugin.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/GSSettingsPlugin/src/appmngr2gssettingsplugin.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2003-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -364,11 +364,17 @@
 
         if( aSettingIndex == EAppMngr2SettingSwInstall )
             {
-            // Install software - toggle 'Signed only' and 'All'
-            TBool allowUntrusted = EFalse;
-            repDB->Get( KSWInstallerAllowUntrusted, allowUntrusted );
-            allowUntrusted = !allowUntrusted;
-            SetPermissionL( aSettingIndex, allowUntrusted, urlText );
+            // Install software
+            itemArray = iCoeEnv->ReadDesC16ArrayResourceL(
+                    R_APPMNGR2_ALLOW_UNTRUSTED_VALUE_ARRAY );
+            repDB->Get( KSWInstallerAllowUntrusted, newIndex );
+            if( newIndex )
+                {
+                newIndex = 1;
+                }
+            dlg = new ( ELeave ) CAknRadioButtonSettingPage(
+                    R_APPMNGR2_SET_PAGE_ALLOW_UNTRUSTED,
+                    newIndex, itemArray );
             }
         else
             {
@@ -383,7 +389,7 @@
         CleanupStack::PopAndDestroy( repDB );
         CleanupStack::PushL( itemArray );
 
-        if( dlg && dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
+        if( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
             {
             SetPermissionL( aSettingIndex, newIndex, urlText );
             }
--- a/appinstaller/AppMngr2/Sisx/group/appmngr2sisxruntime.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/Sisx/group/appmngr2sisxruntime.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -60,8 +60,6 @@
 LIBRARY                 avkon.lib                   // AknTextUtils
 LIBRARY                 x509.lib                    // CX509Certificate
 LIBRARY                 egul.lib                    // CGulIcon
-LIBRARY                 drmhelper.lib               // DRM Helper
-LIBRARY                 drmutility.lib              // DRM Utility
 
 DEBUGLIBRARY            flogger.lib                 // RFileLogger
 
--- a/appinstaller/AppMngr2/Sisx/inc/appmngr2sisxappinfo.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/Sisx/inc/appmngr2sisxappinfo.h	Tue Aug 31 15:21:33 2010 +0300
@@ -24,7 +24,6 @@
 #include <SWInstApi.h>                  // SwiUI::RSWInstLauncher
 #include <CUIDetailsDialog.h>           // SwiUI::CommonUI::CCUICertificateInfo
 #include <f32file.h>                    // TDriveUnit
-#include <swi/sisregistrysession.h>     // RSisRegistrySession
 
 
 class CAppMngr2SisxAppInfo : public CAppMngr2AppInfo
@@ -56,7 +55,6 @@
     void ShowDetailsL();
     void ReadCertificatesL();
     void HandleUninstallL( TRequestStatus& aStatus );
-    void CheckDRMContentL();
     
 private:    // data
     TUid iAppUid;
@@ -75,8 +73,6 @@
     RPointerArray<SwiUI::CommonUI::CCUICertificateInfo> iCertificates;
     TBool iCertsRead;
     TInt iCommandId;
-    TBool iRegSessionOpen;
-    Swi::RSisRegistrySession iSisRegSession;
     };
 
 #endif // C_APPMNGR2SISXAPPINFO_H
--- a/appinstaller/AppMngr2/Sisx/src/appmngr2sisxappinfo.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/Sisx/src/appmngr2sisxappinfo.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2003-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2003-2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -28,8 +28,6 @@
 #include <appmngr2debugutils.h>         // FLOG macros
 #include <x509cert.h>                   // CX509Certificate
 #include <swi/sisregistrypackage.h>     // CSisRegistryPackage
-#include <DRMHelper.h>
-#include <drmutility.h>
 
 
 // ======== MEMBER FUNCTIONS ========
@@ -62,11 +60,6 @@
     delete iDetails;
     delete iVendor;
     iCertificates.ResetAndDestroy();
-    
-    if ( iRegSessionOpen )
-        {
-        iSisRegSession.Close();
-        }
     }
 
 // ---------------------------------------------------------------------------
@@ -242,14 +235,13 @@
     {
     FLOG( "CAppMngr2SisxAppInfo::ConstructL()" );
     CAppMngr2AppInfo::ConstructL();     // base construct
-
+    
     iAppUid = aEntry.UidL();
     FLOG( "CAppMngr2SisxAppInfo::ConstructL, iAppUid = 0x%08x", iAppUid.iUid );
     iName = aEntry.PackageNameL();
     FLOG( "CAppMngr2SisxAppInfo::ConstructL, iName = %S", iName );
     iDetails = SizeStringWithUnitsL( aEntry.SizeL() );
-    FLOG( "CAppMngr2SisxAppInfo::ConstructL, aEntry.SizeL() = %Ld, iDetails = %S",
-            aEntry.SizeL(), iDetails );
+    FLOG( "CAppMngr2SisxAppInfo::ConstructL, iDetails = %S", iDetails );
 
     TUint drivesMask = aEntry.InstalledDrivesL();
     if( drivesMask )
@@ -271,7 +263,7 @@
 
     iVersion = aEntry.VersionL();
     iVendor = aEntry.LocalizedVendorNameL();
-
+    
     iIsAugmentation = aEntry.IsAugmentationL();
     if( iIsAugmentation )
         {
@@ -280,17 +272,37 @@
         delete pkg;
         }
 
-    Swi::TSisPackageTrust trustLevel = aEntry.TrustL();
+    Swi::TSisPackageTrust trustLevel = aEntry.TrustL();  
     if( trustLevel >= Swi::ESisPackageCertificateChainValidatedToTrustAnchor )
         {
         iIsTrusted = ETrue;
-        }   
-    
-    iRegSessionOpen = EFalse;    
-    // iProtectedFile is allocated only in ShowDetails function.
-    iProtectedFile = NULL;                                                                         
-         
-    
+        }
+
+    // If installed SIS package is DRM protected, find the protected file and
+    // save it's full name in iProtectedFile member variable for later use.
+    // Full name of the protected file is needed in ShowDetailsL() function
+    // to show the licence information.
+    RPointerArray<HBufC> files;
+    TRAPD( err, aEntry.FilesL( files ) );
+    if( err == KErrNone )
+        {
+        CleanupResetAndDestroyPushL( files );
+        for( TInt fileIndex = 0; fileIndex < files.Count() && !iIsDRMProtected; fileIndex++ )
+            {
+            HBufC* fileName = files[ fileIndex ];
+            iIsDRMProtected = TAppMngr2DRMUtils::IsDRMProtected( *fileName );
+            if( iIsDRMProtected )
+                {
+                FLOG( "CAppMngr2SisxAppInfo::ConstructL, protected file %S", fileName );
+                iProtectedFile = fileName;  // takes ownership
+                files.Remove( fileIndex );
+                iIsRightsObjectMissingOrExpired = 
+                    TAppMngr2DRMUtils::IsDRMRightsObjectExpiredOrMissingL( *fileName ); 
+                }
+            }
+        CleanupStack::PopAndDestroy( &files );
+        }
+
     FLOG( "CAppMngr2SisxAppInfo::ConstructL, loc=%d, aug=%d, trust=%d, drm=%d, RO=%d",
             iLocation, iIsAugmentation, iIsTrusted, iIsDRMProtected,
             iIsRightsObjectMissingOrExpired );
@@ -304,43 +316,21 @@
     {
     FLOG( "CAppMngr2SisxAppInfo::ShowDetailsL()" );
     TRAP_IGNORE( ReadCertificatesL() );
-
-    CAppMngr2SisxInfoIterator* iterator = 
-            CAppMngr2SisxInfoIterator::NewL( *this,
-                                             EAppMngr2StatusInstalled );
+    
+    CAppMngr2SisxInfoIterator* iterator = CAppMngr2SisxInfoIterator::NewL( *this,
+            EAppMngr2StatusInstalled );
     CleanupStack::PushL( iterator );
     
-    // Let's check if installed SIS package is DRM protected.
-    // This check has been in constructor but it takes long time to check all 
-    // files for all installed packages so overall delay in UI is too long. 
-    // So we have move the DRM check into here.   
-    CheckDRMContentL();
-    
-
+    SwiUI::CommonUI::CCUIDetailsDialog* details = SwiUI::CommonUI::CCUIDetailsDialog::NewL();
     FLOG( "CAppMngr2SisxAppInfo::ShowDetailsL, isDRM %d, noRightsObj %d, CertCount %d",
             iIsDRMProtected, iIsRightsObjectMissingOrExpired, iCertificates.Count() );
-
-    RFile fileHandle;
-    TInt fileOpenError = KErrNone;
+    
     if( iIsDRMProtected && !iIsRightsObjectMissingOrExpired )
         {
-        if ( iProtectedFile )
-            {
-            FLOG( "ShowDetailsL, iProtecteFile %S", iProtectedFile );
-            fileOpenError = fileHandle.Open( iFs, 
-                                            *iProtectedFile, 
-                                            EFileShareReadersOnly | EFileRead );
-            FLOG( "ShowDetailsL, fileOpenError %d", fileOpenError );
-            if( !fileOpenError )
-                {
-                CleanupClosePushL( fileHandle );
-                }
-            }
-        }
-
-    SwiUI::CommonUI::CCUIDetailsDialog* details = SwiUI::CommonUI::CCUIDetailsDialog::NewL();
-    if( iIsDRMProtected && !iIsRightsObjectMissingOrExpired && !fileOpenError )
-        {
+        RFile fileHandle;
+        TInt err = fileHandle.Open( iFs, *iProtectedFile, EFileShareReadersOnly | EFileRead );
+        CleanupClosePushL( fileHandle );
+        
         if( iCertificates.Count() )
             {
             details->ExecuteLD( *iterator, iCertificates, fileHandle );
@@ -349,6 +339,8 @@
             {
             details->ExecuteLD( *iterator, fileHandle );
             }
+
+        CleanupStack::PopAndDestroy( &fileHandle );
         }
     else
         {
@@ -361,11 +353,7 @@
             details->ExecuteLD( *iterator );
             }
         }
-
-    if( iIsDRMProtected && !iIsRightsObjectMissingOrExpired && !fileOpenError )
-        {
-        CleanupStack::PopAndDestroy( &fileHandle );
-        }
+    
     CleanupStack::PopAndDestroy( iterator );
     }
 
@@ -378,7 +366,7 @@
     if( !iCertsRead )
         {
         FLOG_PERF_STATIC_BEGIN( SisxAppInfo_ReadCerts );
-
+        
         Swi::RSisRegistrySession regSession;
         CleanupClosePushL( regSession );
         User::LeaveIfError( regSession.Connect() );
@@ -412,7 +400,7 @@
         CleanupStack::PopAndDestroy( &entry );
         CleanupStack::PopAndDestroy( &regSession );
         iCertsRead = ETrue;
-
+        
         FLOG_PERF_STATIC_END( SisxAppInfo_ReadCerts )
         }
     }
@@ -436,14 +424,14 @@
         {
         User::Leave( KErrInUse );
         }
-
+    
     if( iIsAugmentation )
         {
         FLOG( "CAppMngr2SisxAppInfo::HandleUninstallL, is augmentation" );
         SwiUI::TOpUninstallIndexParam params;
         params.iUid = iAppUid;
         params.iIndex = iAugmentationIndex;
-
+        
         SwiUI::TOpUninstallIndexParamPckg pckg( params );
         if( iSWInstLauncherCustomUninstallParams )
             {
@@ -465,142 +453,3 @@
         }
     }
 
-// ---------------------------------------------------------------------------
-// CAppMngr2SisxAppInfo::CheckDRMContentL()
-// ---------------------------------------------------------------------------
-//
-void CAppMngr2SisxAppInfo::CheckDRMContentL()
-    {
-    FLOG( "CAppMngr2SisxAppInfo::CheckDRMContentL");
-    TInt err = KErrNone;
-        
-    if ( !iRegSessionOpen )
-        {
-        err = iSisRegSession.Connect(); 
-        FLOG( "CheckDRMContentL, iSisRegSession.Connect err %d", err );
-        if ( err )
-            {
-            iRegSessionOpen = EFalse;
-            }
-        else
-            {
-            iRegSessionOpen = ETrue;
-            }        
-        }
-    
-    FLOG( "CheckDRMContentL, iRegSessionOpen = %d", err );
-    
-    if ( iRegSessionOpen )
-        {               
-        Swi::RSisRegistryEntry entry;                                     
-        err = entry.Open( iSisRegSession, iAppUid );
-        FLOG( "CheckDRMContentL, entry.Open err = %d", err );
-        
-        if ( !err )
-            {
-            CleanupClosePushL( entry );
-            
-            RPointerArray<HBufC> files;         
-            TRAP( err, entry.FilesL( files ) );
-            FLOG( "CheckDRMContentL, entry.FilesL err = %d", err );
-                                     
-            if( !err )
-                {
-                CleanupResetAndDestroyPushL( files );
-                
-                // Use DRMUtility for DRM check. Utility class is much faster
-                // then IsDRMProtected function.        
-                DRM::CDrmUtility* utility = DRM::CDrmUtility::NewLC();
-                                             
-                for ( TInt index = 0; index < files.Count(); index++ )
-                    {   
-                    RFile fileHandle;
-                    TInt error = fileHandle.Open( iFs, 
-                                                  *files[ index ], 
-                                                  EFileRead );
-                    FLOG( "CheckDRMContentL, File open error %d", error );
-                               
-                    if ( error == KErrNone )
-                        {                
-                        CleanupClosePushL( fileHandle );                
-                        err = KErrNone;
-                        // We need to tarp this function since it may leave with
-                        // some files which do not have enough data. If ConstrucL 
-                        // leaves package is not shown in UI.
-                        TRAP( err, iIsDRMProtected = 
-                                utility->IsProtectedL( fileHandle ) );
-                   
-                        if ( err )
-                            {
-                            // If we have leave let's handle this as not DRM 
-                            // procteded.
-                            iIsDRMProtected = EFalse;
-                            FLOG("CheckDRMContentL, IsProtectedL err %d",err);
-                            }
-                        
-                        CleanupStack::PopAndDestroy( &fileHandle ); 
-                        
-                        if ( iIsDRMProtected )
-                            { 
-                            FLOG("CheckDRMContentL: File is DRM protected");
-                        
-                            HBufC* fileName = files[ index ];                              
-                            // Let's alloc this only when DRM package is found.
-                            // KMaxFileName (256) sould be enoug for all 
-                            // file names.
-                            if ( iProtectedFile == NULL )
-                                {
-                                iProtectedFile = HBufC::NewL( KMaxFileName );    
-                                }
-                            // Let's copy filename to member because we dont know
-                            // for sure that pointer to sis registry entry is valid
-                            // after entry delete.
-                            if ( iProtectedFile )    
-                                {
-                                TPtr ptr = iProtectedFile->Des();
-                                ptr.Copy( *fileName );                                
-                                }  
-                            FLOG( "CheckDRMContentL: iProtecteFile %S", 
-                                    iProtectedFile );
-                            
-                            files.Remove( index );                    
-                            
-                            CDRMHelper* helper = CDRMHelper::NewLC();                    
-                            CDRMHelperRightsConstraints* playconst = NULL;
-                            CDRMHelperRightsConstraints* dispconst = NULL;
-                            CDRMHelperRightsConstraints* execconst = NULL;
-                            CDRMHelperRightsConstraints* printconst = NULL;            
-                            TBool sendingallowed = EFalse;
-                                            
-                            FLOG( "CheckDRMContentL: GetRightsDetailsL" );
-                            error = KErrNone;
-                            TRAP( error, helper->GetRightsDetailsL( 
-                                               *fileName, 
-                                               ContentAccess::EView, 
-                                               iIsRightsObjectMissingOrExpired, 
-                                               sendingallowed, 
-                                               playconst, 
-                                               dispconst, 
-                                               execconst, 
-                                               printconst ) );                     
-                            FLOG( "GetRightsDetailsL TRAP err = %d", error );
-                            FLOG( "iIsRightsObjectMissingOrExpired = %d", 
-                                    iIsRightsObjectMissingOrExpired );                            
-                            delete playconst;
-                            delete dispconst;
-                            delete execconst;
-                            delete printconst;                            
-                            CleanupStack::PopAndDestroy( helper );                                                                                      
-                            }
-                        }
-                    }                
-                CleanupStack::PopAndDestroy( utility );
-                CleanupStack::PopAndDestroy( &files );
-                }
-            CleanupStack::PopAndDestroy( &entry );
-            }                
-        }           
-    }
-
-// EOF
-
--- a/appinstaller/AppMngr2/Widget/inc/appmngr2widgetappinfo.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/Widget/inc/appmngr2widgetappinfo.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -47,13 +47,12 @@
 
 private:    // new functions
     void ShowDetailsL();
-
+    
 private:    // data
     TUid iWidgetUid;
     HBufC* iName;
     HBufC* iDetails;
     SwiUI::RSWInstLauncher* iSWInstLauncher;
-    HBufC8* iMimeType;
     };
 
 #endif // C_APPMNGR2WIDGETAPPINFO_H
--- a/appinstaller/AppMngr2/Widget/inc/appmngr2widgetruntime.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/Widget/inc/appmngr2widgetruntime.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -20,7 +20,7 @@
 #define C_APPMNGR2WIDGETRUNTIME_H
 
 #include <appmngr2runtime.h>            // CAppMngr2Runtime
-#include <widgetregistryclient.h>       // RWidgetRegistryClientSession
+#include <WidgetRegistryClient.h>       // RWidgetRegistryClientSession 
 
 class CAppMngr2PackageInfo;
 class CAknIconArray;
@@ -28,8 +28,7 @@
 const TInt KAppMngr2WidgetUidValue = 0x20016BFA;
 const TUid KAppMngr2WidgetUid = { KAppMngr2WidgetUidValue };
 
-_LIT8( KDataTypeWgzWidget, "application/x-nokia-widget" );
-_LIT8( KDataTypeWgtWidget, "application/widget" );
+_LIT8( KDataTypeWidget, "application/x-nokia-widget" );
 
 
 class CAppMngr2WidgetRuntime : public CAppMngr2Runtime
@@ -38,7 +37,7 @@
     static CAppMngr2WidgetRuntime* NewL( MAppMngr2RuntimeObserver& aObserver );
     ~CAppMngr2WidgetRuntime();
 
-public:     // from CAppMngr2Runtime
+public:     // new CAppMngr2Runtime
     void LoadIconsL( CAknIconArray& aIconArray );
     void GetSupportedDataTypesL( CDataTypeArray& aDataTypeArray );
     void GetInstallationFilesL( RPointerArray<CAppMngr2PackageInfo>& aPackageInfos,
@@ -49,9 +48,6 @@
                 RFs& aFsSession, TRequestStatus& aStatus );
     void CancelGetInstalledApps();
 
-public:     // new functions
-    HBufC8* GetMimeTypeL( const TUid& aWidgetUid );
-
 private:    // new functions
     CAppMngr2WidgetRuntime( MAppMngr2RuntimeObserver& aObserver );
     void ConstructL();
--- a/appinstaller/AppMngr2/Widget/src/appmngr2widgetappinfo.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/Widget/src/appmngr2widgetappinfo.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -20,7 +20,7 @@
 #include "appmngr2widgetruntime.h"      // KAppMngr2WidgetUid
 #include "appmngr2widgetinfoiterator.h" // CAppMngr2WidgetInfoIterator
 #include "appmngr2widget.hrh"           // Widget command IDs
-#include <widgetregistrydata.h>         // CWidgetInfo
+#include <WidgetRegistryData.h>         // CWidgetInfo
 #include <appmngr2driveutils.h>         // TAppMngr2DriveUtils
 
 
@@ -49,7 +49,6 @@
     CancelCommand();
     delete iName;
     delete iDetails;
-    delete iMimeType;
     }
 
 // ---------------------------------------------------------------------------
@@ -117,7 +116,7 @@
                 CleanupStack::Pop( swInstLauncher );
                 iSWInstLauncher = swInstLauncher;
                 }
-            iSWInstLauncher->Uninstall( aStatus, iWidgetUid, *iMimeType );
+            iSWInstLauncher->Uninstall( aStatus, iWidgetUid, KDataTypeWidget );
             return;     // async operation started
 
         default:
@@ -178,16 +177,13 @@
 void CAppMngr2WidgetAppInfo::ConstructL( const CWidgetInfo& aWidget )
     {
     CAppMngr2AppInfo::ConstructL();
-
+    
     iWidgetUid = aWidget.iUid;
     iName = aWidget.iBundleName->AllocL();
     iDetails = SizeStringWithUnitsL( aWidget.iFileSize );
 
     iLocationDrive = TDriveUnit( *aWidget.iDriveName );
     iLocation = TAppMngr2DriveUtils::LocationFromDriveL( iLocationDrive, iFs );
-
-    CAppMngr2WidgetRuntime& runtime( static_cast<CAppMngr2WidgetRuntime&>( Runtime() ) );
-    iMimeType = runtime.GetMimeTypeL( iWidgetUid );
     }
 
 // ---------------------------------------------------------------------------
--- a/appinstaller/AppMngr2/Widget/src/appmngr2widgetruntime.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/Widget/src/appmngr2widgetruntime.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -64,7 +64,7 @@
     {
     MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
     HBufC* iconFilePath = NULL;
-
+    
     iconFilePath = FullBitmapFileNameLC( KAppMngr2WidgetIconFileNameMif );
 
     // Icon 0: Widget application icon, qgn_menu_am_widget
@@ -86,10 +86,8 @@
 void CAppMngr2WidgetRuntime::GetSupportedDataTypesL(
         CDataTypeArray& aDataTypeArray )
     {
-    TDataType wgzWidget( KDataTypeWgzWidget );
-    aDataTypeArray.AppendL( wgzWidget );
-    TDataType wgtWidget( KDataTypeWgtWidget );
-    aDataTypeArray.AppendL( wgtWidget );
+    TDataType zipFile( KDataTypeWidget );
+    aDataTypeArray.AppendL( zipFile );
     }
 
 // ---------------------------------------------------------------------------
@@ -147,14 +145,14 @@
                 *( widgetInfoArray[ index ] ), aFsSession ) );
         if( err == KErrNone )
             {
-            CleanupStack::PushL( appObj );
+            CleanupStack::PushL( appObj ); 
             aApps.Append( appObj );
             CleanupStack::Pop( appObj );
             }
         }
-
+    
     CleanupStack::PopAndDestroy( &widgetInfoArray );
-
+    
     TRequestStatus* status = &aStatus;
     User::RequestComplete( status, KErrNone );
     }
@@ -168,30 +166,11 @@
     }
 
 // ---------------------------------------------------------------------------
-// CAppMngr2WidgetRuntime::GetMimeTypeL()
-// ---------------------------------------------------------------------------
-//
-HBufC8* CAppMngr2WidgetRuntime::GetMimeTypeL( const TUid& aWidgetUid )
-    {
-    CWidgetPropertyValue* prop = iWidgetRegistry.GetWidgetPropertyValueL( aWidgetUid, EMimeType );
-    CleanupStack::PushL( prop );
-
-    const TPtrC valuePtr( *prop );
-    HBufC8* retStr = HBufC8::NewLC( valuePtr.Length() );
-    TPtr8 retPtr( retStr->Des() );
-    retPtr.Copy( valuePtr );
-    CleanupStack::Pop( retStr );
-
-    CleanupStack::PopAndDestroy( prop );
-    return retStr;
-    }
-
-// ---------------------------------------------------------------------------
 // CAppMngr2WidgetRuntime::CAppMngr2WidgetRuntime()
 // ---------------------------------------------------------------------------
 //
 CAppMngr2WidgetRuntime::CAppMngr2WidgetRuntime( MAppMngr2RuntimeObserver& aObserver )
-        : CAppMngr2Runtime( aObserver )
+        : CAppMngr2Runtime( aObserver ) 
     {
     }
 
--- a/appinstaller/AppMngr2/group/appmngr2.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/group/appmngr2.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2003-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -20,7 +20,6 @@
 #include <data_caging_paths.hrh>
 
 TARGET              appmngr2.exe
-EPOCHEAPSIZE        0x1000 0x200000     // min 4kB (default), max 2MB (2*default)
 EPOCSTACKSIZE       0x5000
 TARGETTYPE          exe
 UID                 0x100039CE 0x101F8512
@@ -53,7 +52,6 @@
 SOURCE              appmngr2logpopuplist.cpp
 SOURCE              appmngr2logdatabase.cpp
 SOURCE              appmngr2logdatabaseentry.cpp
-SOURCE              appmngr2exittimer.cpp
 
 START RESOURCE      ../data/appmngr2.rss
 HEADER
@@ -93,7 +91,6 @@
 LIBRARY             appmngr2pluginapi.lib           // AppMngr2 Runtime API
 LIBRARY             ecom.lib                        // ECom
 LIBRARY             caf.lib                         // Content Access Framework
-LIBRARY             aknnotify.lib					// GlobalNote
 
 DEBUGLIBRARY        flogger.lib                     // RFileLogger
 
Binary file appinstaller/AppMngr2/help/data/xhtml.zip has changed
--- a/appinstaller/AppMngr2/help/inc/am.hlp.hrh	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/help/inc/am.hlp.hrh	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -10,8 +10,8 @@
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
-* 
-* Description:
+*
+* Description: 
 *
 */
 	
--- a/appinstaller/AppMngr2/inc/appmngr2appui.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/inc/appmngr2appui.h	Tue Aug 31 15:21:33 2010 +0300
@@ -24,7 +24,6 @@
 
 class CAppMngr2Model;
 class CIdle;
-class CAppMngr2ExitTimer;
 
 
 class CAppMngr2AppUi : public CAknViewAppUi, public MAppMngr2ModelObserver
@@ -44,10 +43,9 @@
     
 private:    // new functions
     static TInt DelayedConstructL( TAny* aSelf );
-    void CancelNoteL();
     
 private:    // from CAknViewAppUi
-    void HandleCommandL( TInt aCommand );    
+    void HandleCommandL( TInt aCommand );
 
 private:    // data
     CAppMngr2Model* iModel;
@@ -60,9 +58,6 @@
         EAllDone
         } iDelayedConstructionStep;
     TBool iConstructInstallationFilesFirst;
-    CAppMngr2ExitTimer* iExitTimer;
-           
-    TInt iNoteId;
     };
 
 #endif  // C_APPMNGR2APPUI_H
--- a/appinstaller/AppMngr2/inc/appmngr2exittimer.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Declares UI class for application
-*
-*/
-
-#ifndef C_APPMNGR2EXITTIMER_H
-#define C_APPMNGR2EXITTIMER_H
-
-#include <e32base.h>
-
-class CAppMngr2AppUi;
-
-class CAppMngr2ExitTimer : public CTimer
-    {
-    public:  // Constructors and destructor
-     
-        /**
-        * Two-phased constructor.
-        */
-        IMPORT_C static CAppMngr2ExitTimer* NewL( CAppMngr2AppUi* aAppUi );
-
-        /**
-        * Destructor.
-        */
-        IMPORT_C virtual ~CAppMngr2ExitTimer();
-
-    public: // New functions
-
-        /**
-        * Starts timer for Exit process.
-        * @since 9.2
-        */
-        IMPORT_C void StartExitTimer();        
-       
-    protected: // Functions from base classes
-
-        /**
-        * From CPeriodic, Called when timer has triggered.
-        * Calls Exit for the AppMngr.
-        * @since 9.2
-        */
-        void RunL();
-
-        /**
-        * From CActive, Handles a leave occurring in the request 
-        * completion event handler RunL().
-        * @since 9.2
-        */        
-        TInt RunError( TInt aError );    
-      
-    private:
-
-        /**
-        * C++ default constructor.       
-        */
-        CAppMngr2ExitTimer( CAppMngr2AppUi* aAppUi );
-
-        /**
-        * 2nd phase constructor.
-        */
-        void ConstructL();
-                        
-    private:
-
-        CAppMngr2AppUi* iAppUi;                
-    };
-
-#endif /* APPMNGR2EXITTIMER_H_ */
--- a/appinstaller/AppMngr2/inc/appmngr2listview.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/inc/appmngr2listview.h	Tue Aug 31 15:21:33 2010 +0300
@@ -26,6 +26,7 @@
 class CAppMngr2InfoBase;
 class CAknTitlePane;
 class CAknWaitDialog;
+class CAknInfoPopupNoteController;
 
 
 class CAppMngr2ListView : public CAknView
@@ -69,6 +70,7 @@
 
 private:    // data
     TInt iMiddleSoftkeyCommandId;
+    CAknInfoPopupNoteController* iInfoPopup;
     TBool iMaintainFocus;
     };
 
--- a/appinstaller/AppMngr2/inc/appmngr2model.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/inc/appmngr2model.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -52,16 +52,15 @@
 
 public:     // new functions
     TInt AppInfoCount() const;
-    CAppMngr2AppInfo& AppInfo( TInt aIndex ) const;
+    CAppMngr2AppInfo& AppInfo( TInt aIndex ) const; 
     TInt PackageInfoCount() const;
-    CAppMngr2PackageInfo& PackageInfo( TInt aIndex ) const;
+    CAppMngr2PackageInfo& PackageInfo( TInt aIndex ) const; 
     void LoadIconsL( CAknIconArray& aIconArray );
     void GetIconIndexesL( TUid aUid, TInt& aIconIndexBase, TInt& aIconIndexMax ) const;
     void HandleCommandL( CAppMngr2InfoBase& aInfo, TInt aCommand );
     void StartFetchingInstallationFilesL();
     void StartFetchingInstalledAppsL();
-    TBool IsUninstall();
-
+    
 protected:  // from CActive
     void DoCancel();
     void RunL();
@@ -69,7 +68,7 @@
 public:     // from MAppMngr2RuntimeObserver
     void RefreshInstalledApps();
     void RefreshInstallationFiles();
-
+    
 public:     // from MAppMngr2ScannerObserver
     void ScanningResultL( RPointerArray<CAppMngr2RecognizedFile>& aResult );
     void ScanningComplete();
@@ -88,7 +87,7 @@
 
 public:     // from MAppMngr2InfoArrayObserver
     void ArrayContentChanged( CAppMngr2InfoArray* aArray, TInt aMoreRefreshesExpected );
-
+    
 private:    // new functions
     CAppMngr2Model( RFs& aFsSession, MAppMngr2ModelObserver& aObserver );
     void ConstructL();
@@ -111,9 +110,7 @@
     CAppMngr2InfoBase* iActiveItem; // not owned
     TInt iActiveCommand;
     TBool iClosing;
-    TBool iFetchingInstallationFiles;
-    TBool iFetchingInstalledApps;
-
+    
     FLOG_PERF_DEFINE( FetchInstallationFiles )
     FLOG_PERF_DEFINE( FetchInstalledApps )
     };
--- a/appinstaller/AppMngr2/loc/appmngr2.loc	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/loc/appmngr2.loc	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2003-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2003-2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -237,8 +237,3 @@
 // r: 5.1
 #define qtn_swins_lsh2_untrusted "Untrusted"
 
-// d: Setting field value for OCSP URL when there is no data.
-// l: set_value_pane_t1
-// r: 9.2
-#define qtn_am_set_ocsp_url_none "None"
-
--- a/appinstaller/AppMngr2/src/appmngr2appui.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/src/appmngr2appui.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -22,8 +22,6 @@
 #include "appmngr2installedview.h"      // CAppMngr2InstalledView
 #include "appmngr2packagesview.h"       // CAppMngr2PackagesView
 #include "appmngr2.hrh"                 // Command IDs
-#include "appmngr2exittimer.h"          // Exit Timer
-
 #include <appmngr2runtime.h>            // CAppMngr2Runtime
 #include <appmngr2driveutils.h>         // TAppMngr2DriveUtils
 #include <appmngr2debugutils.h>         // FLOG macros
@@ -32,11 +30,6 @@
 #include <featmgr.h>                    // FeatureManager
 #include <e32property.h>                // RProperty
 #include <hlplch.h>                     // HlpLauncher
-#include <StringLoader.h>               // StringLoader
-#include <appmngr2.rsg>                 // Resource IDs
-#include <AknGlobalNote.h>              // WaitNote
-#include <avkon.rsg>
-
 
 _LIT( KSWInstCommonUIResourceFileName, "SWInstCommonUI.rsc" );
 
@@ -56,25 +49,16 @@
     wsSession.ComputeMode( RWsSession::EPriorityControlDisabled );
 
     FeatureManager::InitializeLibL();
-
+    
     TFileName* fullName = TAppMngr2DriveUtils::NearestResourceFileLC(
             KSWInstCommonUIResourceFileName, iEikonEnv->FsSession() );
     FLOG( "CAppMngr2AppUi::ConstructL, opening %S", fullName );
     iResourceFileOffset = iEikonEnv->AddResourceFileL( *fullName );
     CleanupStack::PopAndDestroy( fullName );
 
-    // Let's start global wait note so user can see that 
-    // App. Mngr is scanning memory.
-    HBufC* string = StringLoader::LoadLC( R_QTN_AM_SCANNING_MEMORY );  
-    CAknGlobalNote* note = CAknGlobalNote::NewLC();
-    note->SetSoftkeys( R_AVKON_SOFTKEYS_EMPTY );    
-    FLOG( "CAppMngr2AppUi::ConstructL: ShowNoteL EAknGlobalWaitNote " );
-    iNoteId = note->ShowNoteL( EAknGlobalWaitNote, *string );
-    CleanupStack::PopAndDestroy( 2, string );
-                
     FLOG( "CAppMngr2AppUi::ConstructL, creting model" );
     iModel = CAppMngr2Model::NewL( iEikonEnv->FsSession(), *this );
-
+   
     FLOG( "CAppMngr2AppUi::ConstructL, creting views" );
     CAppMngr2InstalledView* installedView = CAppMngr2InstalledView::NewL();
     AddViewL( installedView );  // takes ownership
@@ -108,13 +92,10 @@
         {
         ActivateLocalViewL( KInstalledViewId );
         }
-
+    
     FLOG( "CAppMngr2AppUi::ConstructL, starting delayed construct" );
     iIdle = CIdle::NewL( CActive::EPriorityStandard );
     iIdle->Start( TCallBack( &CAppMngr2AppUi::DelayedConstructL, this ) );
-    
-    FLOG( "CAppMngr2AppUi::ConstructL, iExitTimer = NULL" );
-    iExitTimer = NULL;    
     }
 
 // ---------------------------------------------------------------------------
@@ -124,23 +105,13 @@
 CAppMngr2AppUi::~CAppMngr2AppUi()
     {
     FLOG( "CAppMngr2AppUi::~CAppMngr2AppUi" );
-    
-    if( iNoteId )
-        {
-        // If appmngr is closed for some reason let's make sure 
-        // the note is closed.
-        TRAP_IGNORE( CancelNoteL() );
-        }
-    
     delete iIdle;
     delete iModel;
-    
     if( iResourceFileOffset > 0 )
         {
         iEikonEnv->DeleteResourceFile( iResourceFileOffset );
         }
-    FeatureManager::UnInitializeLib();    
-    delete iExitTimer;   
+    FeatureManager::UnInitializeLib();
     }
 
 // ---------------------------------------------------------------------------
@@ -163,9 +134,6 @@
         {
         CAppMngr2ListView* view = static_cast<CAppMngr2ListView*>( iView );
         TRAP_IGNORE( view->RefreshL( aMoreRefreshesExpected ) );
-        
-        // Let's close global wait note since memory scanning is ready.      
-        TRAP_IGNORE( CancelNoteL() );
         }
     }
 
@@ -180,9 +148,6 @@
         {
         CAppMngr2ListView* view = static_cast<CAppMngr2ListView*>( iView );
         TRAP_IGNORE( view->RefreshL( aMoreRefreshesExpected ) );
-        
-        // Let's close global wait note since memory scanning is ready. 
-        TRAP_IGNORE( CancelNoteL() );
         }
     }
 
@@ -215,20 +180,35 @@
         CAppMngr2AppUi* self = static_cast<CAppMngr2AppUi*>( aSelf );
         FLOG( "CAppMngr2AppUi::DelayedConstructL, step %d",
                 self->iDelayedConstructionStep );
-
-        // Only necessary part of the model is constructed. AppMngr2 runs
-        // as embedded application in Control panel. It is started either
-        // to display installed applications, or installation files.
-        if( self->iConstructInstallationFilesFirst )
+        switch( self->iDelayedConstructionStep )
             {
-            self->iModel->StartFetchingInstallationFilesL();
+            case EFirstStep:
+                if( self->iConstructInstallationFilesFirst )
+                    {
+                    self->iModel->StartFetchingInstallationFilesL();
+                    }
+                else
+                    {
+                    self->iModel->StartFetchingInstalledAppsL();
+                    }
+                self->iDelayedConstructionStep = ESecondStep;
+                return ETrue; // call DelayedConstruct again
+
+            case ESecondStep:
+                if( self->iConstructInstallationFilesFirst )
+                    {
+                    self->iModel->StartFetchingInstalledAppsL();
+                    }
+                else
+                    {
+                    self->iModel->StartFetchingInstallationFilesL();
+                    }
+                self->iDelayedConstructionStep = EAllDone;
+                break;
+                
+            default:
+                break;
             }
-        else
-            {
-            self->iModel->StartFetchingInstalledAppsL();
-            }
-
-        self->iDelayedConstructionStep = EAllDone;
         }
     return EFalse; // all done
     }
@@ -243,28 +223,6 @@
     switch ( aCommand )
         {
         case EEikCmdExit:
-            if ( iModel->IsUninstall() && iModel->IsActive() )
-                {
-                // In case we have uninstall process ongoing we need to
-                // start delay timer for Exit. This is because in some cases 
-                // like VPN plug-in the GS is closed and app.mngr exit may come 
-                // just when SWInstLauncer is completing req. in RunL (long 
-                // running task). CActive do not return from Cancel and 
-                // AppMngr2Model's destructor jams.                             
-                if ( !iExitTimer )
-                    {
-                    // If there is not exit timer already let's make one.                    
-                    iExitTimer = CAppMngr2ExitTimer::NewL( this );                       
-                    iExitTimer->StartExitTimer();                    
-                    } 
-                }
-            else
-                {
-                // if we do not have uninstall request let's do Exit now.
-                Exit();
-                }
-            break;
-            
         case EAknCmdExit:
         case EAknSoftkeyExit:
             Exit();
@@ -284,20 +242,3 @@
         }
     }
 
-// ---------------------------------------------------------------------------
-// CAppMngr2AppUi::CancelNoteL()
-// ---------------------------------------------------------------------------
-//
-void CAppMngr2AppUi::CancelNoteL()
-    {
-    FLOG( "CAppMngr2AppUi::CancelNoteL: iNoteId = %d", iNoteId );
-     if ( iNoteId )
-         {         
-         CAknGlobalNote* note = CAknGlobalNote::NewLC();
-         FLOG( "CAppMngr2AppUi::CancelNoteL: note->CancelNoteL" );
-         note->CancelNoteL( iNoteId );         
-         CleanupStack::PopAndDestroy();       
-         iNoteId = 0;
-         }        
-    }
-
--- a/appinstaller/AppMngr2/src/appmngr2exittimer.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-/*
-*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the implementation of CAppMngr2ExitTimer
-*                class member functions.
-*
-*/
-
-
-// INCLUDE FILES
-
-#include <appmngr2runtime.h>            // FLOG macros
-#include <appmngr2debugutils.h>         // FLOG macros
-#include "appmngr2exittimer.h"
-#include "appmngr2appui.h"              // CAppMngr2AppUi
-
-const TInt KAppMngr2ExitDelayInterval = 1000000; // 1,0 sec
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CAppMngr2ExitTimer::CAppMngr2ExitTimer
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CAppMngr2ExitTimer::CAppMngr2ExitTimer( CAppMngr2AppUi* aAppUi )
-    : CTimer( CActive::EPriorityHigh ),
-    iAppUi( aAppUi )
-    {
-    FLOG( "CAppMngr2ExitTimer::CAppMngr2ExitTimer" );
-    CActiveScheduler::Add( this );    
-    }
-
-// -----------------------------------------------------------------------------
-// CAppMngr2ExitTimer::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CAppMngr2ExitTimer::ConstructL()
-    {    
-    CTimer::ConstructL();      
-    }
-
-// -----------------------------------------------------------------------------
-// CAppMngr2ExitTimer::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CAppMngr2ExitTimer* CAppMngr2ExitTimer::NewL( CAppMngr2AppUi* aAppUi )
-    {
-    CAppMngr2ExitTimer* self = new( ELeave ) CAppMngr2ExitTimer( aAppUi );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;    
-    }
-
-// -----------------------------------------------------------------------------
-// CAppMngr2ExitTimer::Destructor
-// 
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CAppMngr2ExitTimer::~CAppMngr2ExitTimer()
-    {
-    FLOG( "CAppMngr2ExitTimer::~CAppMngr2ExitTimer" );
-    CTimer::Cancel();    
-    }
-
-// -----------------------------------------------------------------------------
-// CAppMngr2ExitTimer::StartExitTimer
-// 
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CAppMngr2ExitTimer::StartExitTimer()
-    {
-    FLOG( "CAppMngr2ExitTimer::StartExitTimer" );
-    FLOG( "CAppMngr2ExitTimer After = %d", KAppMngr2ExitDelayInterval );
-    TTimeIntervalMicroSeconds32 timeout( KAppMngr2ExitDelayInterval );    
-    After( timeout );
-    FLOG( "CAppMngr2ExitTimer::StartExitTimer END" );
-    }
-
-// -----------------------------------------------------------------------------
-// CAppMngr2ExitTimer::RunL
-//
-// -----------------------------------------------------------------------------
-//    
-void CAppMngr2ExitTimer::RunL()
-    {
-    FLOG( "CAppMngr2ExitTimer::RunL START" );
-    // Exit will leave but this is handled in RunError function.    
-    FLOG( "CAppMngr2ExitTimer::RunL: iAppUi->Exit()" );
-    iAppUi->Exit();       
-    FLOG( "CAppMngr2ExitTimer::RunL END" );
-    }
-
-// -----------------------------------------------------------------------------
-// CAppMngr2ExitTimer::RunError
-// 
-// -----------------------------------------------------------------------------
-// 
-TInt CAppMngr2ExitTimer::RunError( TInt aError )
-    {
-    // RunL will leave with the error -1003 KLeaveExit and RunError
-    // needs to return this error to CActiveScheduler which will then
-    // make exit leave in CBaActiveScheduler::Error function.
-    FLOG( "CAppMngr2ExitTimer::RunError error = %d", aError );     
-    return aError;    
-    }
-
-//  End of File  
--- a/appinstaller/AppMngr2/src/appmngr2listcontainer.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/src/appmngr2listcontainer.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -64,7 +64,7 @@
 TKeyResponse CAppMngr2ListContainer::OfferKeyEventL(
         const TKeyEvent& aKeyEvent, TEventCode aType )
     {
-    TKeyResponse response = iListBox->OfferKeyEventL( aKeyEvent, aType );
+    TKeyResponse response = iListBox->OfferKeyEventL( aKeyEvent, aType ); 
     if( aKeyEvent.iCode == EKeyUpArrow || aKeyEvent.iCode == EKeyDownArrow )
         {
         iView.UpdateMiddleSoftkeyCommandL();
@@ -178,9 +178,8 @@
 void CAppMngr2ListContainer::RefreshL( TBool aPreserveSelectedItem,
         TBool& aSelectedItemChanged, TInt aMoreRefreshesExpected )
     {
-    FLOG( "CAppMngr2ListContainer::RefreshL( %d %d %d ) begin",
-            aPreserveSelectedItem, aSelectedItemChanged, aMoreRefreshesExpected );
-
+    FLOG( "CAppMngr2ListContainer::RefreshL( %d )", aPreserveSelectedItem );
+    
     // Record the item text of the current item if selection must be preserved in
     // the current item. The item text is used to identify the item later, so that
     // it can be selected again.
@@ -196,7 +195,7 @@
     CreateItemArrayL();                         // resets the item array
     PopulateItemArrayL();                       // fills in new items
     iListBox->HandleItemAdditionL();            // re-calculates size and scrollbar
-
+    
     // If selection must be preserved, search the item in new item array
     // and select it again. Make sure to delete itemText if it was allocated.
     TBool currentItemSet = EFalse;
@@ -213,7 +212,7 @@
             }
         CleanupStack::PopAndDestroy( itemText );
         }
-
+    
     // If item is not found (it may have been deleted), then tell to the
     // caller that the selected item was changed and select another item
     // from the same row number than the previously selected item.
@@ -233,8 +232,6 @@
             iListBox->SetCurrentItemIndex( currentItemIndex );
             }
         }
-
-    FLOG( "CAppMngr2ListContainer::RefreshL() end" );
     }
 
 // ---------------------------------------------------------------------------
@@ -249,19 +246,19 @@
     iListBox->SetContainerWindowL( *this );
     iListBox->ConstructL( this, EAknListBoxSelectionList );
     iListBox->SetListBoxObserver( this );
-
+    
     // Dont display default "(no data)" empty text
     iListBox->View()->SetListEmptyTextL( KNullDesC );
 
     LoadIconsL();
     CreateItemArrayL();
     PopulateItemArrayL();
-
+    
     iListBox->CreateScrollBarFrameL();
     iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
             CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
     iListBox->SetRect( aRect.Size() );
-
+    
     // Enable marquee effect
     iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
     }
@@ -314,10 +311,10 @@
 void CAppMngr2ListContainer::PopulateItemArrayL()
     {
     FLOG( "CAppMngr2ListContainer::PopulateItemArrayL()" );
-
+    
     CArrayPtr<CGulIcon>* iconArray = iListBox->ItemDrawer()->ColumnData()->IconArray();
     DeleteItemSpecificIcons( *iconArray );
-
+    
     TInt count = ItemCount();
     for( TInt index = 0; index < count; index++ )
         {
@@ -332,10 +329,10 @@
         TInt iconIndexMax;
         Model().GetIconIndexesL( appInfo.Runtime().RuntimeUid(),
                 iconIndexBase, iconIndexMax );
-
+        
         // Get list icon index from plugin
         TInt iconIndex = appInfo.IconIndex();
-
+        
         // Convert index into the range of 0 .. (icons - 1)
         if( iconIndex == EAppMngr2UseSpecificIcon )
             {
@@ -369,7 +366,7 @@
                 iconIndex = EAppMngr2IconIndex_QgnPropUnknown;
                 }
             }
-        // Sanity check - index must be in range, otherwise list panics
+        // Sanity check - index must be in range, otherwise list panics 
         if( iconIndex < 0 || iconIndex >= iconArray->Count() )
             {
             iconIndex = EAppMngr2IconIndex_QgnPropUnknown;
@@ -377,7 +374,7 @@
 
         // Get indicator icon index from plugin
         TInt indIconIndex = appInfo.IndicatorIconIndex();
-
+        
         // Convert indicator icon index into the range of 0 .. (icons-1) or
         // leave special value EAppMngr2NoIndicatorIcon in it
         if( indIconIndex == EAppMngr2UseSpecificIcon )
--- a/appinstaller/AppMngr2/src/appmngr2listview.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/src/appmngr2listview.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -36,6 +36,7 @@
 #include <eikmenup.h>                   // CEikMenuPaneItem
 #include <akntitle.h>                   // CAknTitlePane
 #include <StringLoader.h>               // StringLoader
+#include <AknInfoPopupNoteController.h> // CAknInfoPopupNoteController
 #include <appmngr2.rsg>                 // Resource IDs
 
 const TUid KStatusPaneUid = { EEikStatusPaneUidTitle };
@@ -44,29 +45,30 @@
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------------------------
-// CAppMngr2ListView::ConstructL()
+// CAppMngr2ListView::ConstructL() 
 // ---------------------------------------------------------------------------
 //
 void CAppMngr2ListView::ConstructL( TInt aResourceId )
     {
     FLOG( "CAppMngr2ListView::ConstructL( 0x%08x )", aResourceId );
-
+    
     BaseConstructL( aResourceId );
     }
 
 // ---------------------------------------------------------------------------
-// CAppMngr2ListView::~CAppMngr2ListView()
+// CAppMngr2ListView::~CAppMngr2ListView() 
 // ---------------------------------------------------------------------------
 //
 CAppMngr2ListView::~CAppMngr2ListView()
     {
     FLOG( "CAppMngr2ListView::~CAppMngr2ListView" );
-
+    
     if( iContainer )
         {
         AppUi()->RemoveFromViewStack( *this, iContainer );
         delete iContainer;
         }
+    delete iInfoPopup;
     }
 
 // ---------------------------------------------------------------------------
@@ -77,8 +79,6 @@
     {
     if( iContainer )
         {
-        FLOG( "CAppMngr2ListView::RefreshL( %d ) begin", aMoreRefreshesExpected );
-
         TBool selectedItemChanged = EFalse;
         iContainer->RefreshL( iMaintainFocus, selectedItemChanged, aMoreRefreshesExpected );
         if( selectedItemChanged )
@@ -87,8 +87,14 @@
             StopDisplayingMenuBar();
             iMaintainFocus = EFalse;
             }
-            
-        FLOG( "CAppMngr2ListView::RefreshL() end" );
+
+        // Close progress note used in application startup
+        if( iInfoPopup && !aMoreRefreshesExpected )
+            {
+            iInfoPopup->HideInfoPopupNote();
+            delete iInfoPopup;
+            iInfoPopup = NULL;
+            }
         }
     }
 
@@ -99,7 +105,7 @@
 void CAppMngr2ListView::UpdateMiddleSoftkeyCommandL()
     {
     FLOG_PERF_STATIC_BEGIN( UpdateMiddleSoftkeyCommandL );
-
+    
     if( iContainer && !iContainer->IsListEmpty() )
         {
         // add item-specific MSK if the current item has one
@@ -127,7 +133,7 @@
             }
         SetDefaultMiddleSoftkeyCommandL();
         }
-
+    
     FLOG_PERF_STATIC_END( UpdateMiddleSoftkeyCommandL )
     }
 
@@ -159,7 +165,7 @@
 void CAppMngr2ListView::HandleCommandL( TInt aCommand )
     {
     FLOG( "CAppMngr2ListView::HandleCommandL( %d )", aCommand );
-
+    
     switch( aCommand )
         {
         case EAknSoftkeyBack:
@@ -195,12 +201,12 @@
     if( aResourceId == R_APPMNGR2_INSTALLED_MENU
             || aResourceId == R_APPMNGR2_PACKAGES_MENU )
         {
-        if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+        if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) 
             {
             aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
             }
 
-        // Keep the currently selected item focused in forthcoming list refreshes.
+        // Keep the currently selected item focused in forthcoming list refreshes. 
         iMaintainFocus = ETrue;
         }
     }
@@ -213,11 +219,11 @@
         TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/ )
     {
     FLOG( "CAppMngr2ListView::DoActivateL, id 0x%08x", Id().iUid );
-
+    
     CAknTitlePane* titlePane = NULL;
     titlePane = static_cast<CAknTitlePane*>( StatusPane()->ControlL( KStatusPaneUid ) );
     SetTitleL( *titlePane );
-
+    
     if( iContainer == NULL )
         {
         iContainer = CreateContainerL();
@@ -227,7 +233,16 @@
         }
     UpdateMiddleSoftkeyCommandL();
 
-    // Note Infopopup is removed and replaced with wait dialog.         
+    if( iInfoPopup == NULL )
+        {
+        iInfoPopup = CAknInfoPopupNoteController::NewL();
+        iInfoPopup->SetTimePopupInView( 0 );
+        iInfoPopup->HideWhenAppFaded( EFalse );
+        HBufC* noteText = StringLoader::LoadLC( R_QTN_AM_SCANNING_MEMORY );
+        iInfoPopup->SetTextL( *noteText );
+        CleanupStack::PopAndDestroy( noteText );
+        iInfoPopup->ShowInfoPopupNote();
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -237,13 +252,18 @@
 void CAppMngr2ListView::DoDeactivate()
     {
     FLOG( "CAppMngr2ListView::DoDeactivate, id 0x%08x", Id().iUid );
-
+    
     if( iContainer )
         {
         AppUi()->RemoveFromViewStack( *this, iContainer );
         delete iContainer;
         iContainer = NULL;
         }
+    if( iInfoPopup )
+        {
+        delete iInfoPopup;
+        iInfoPopup = NULL;
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -265,12 +285,12 @@
     if( aMenuPane )
         {
         FLOG_PERF_STATIC_BEGIN( AddDynamicMenuItemsL );
-
+        
         TInt position = 0;
         if( aMenuPane->MenuItemExists( EAppMngr2PlaceForPluginSpecificCmds, position ) )
             {
             aMenuPane->DeleteMenuItem( EAppMngr2PlaceForPluginSpecificCmds );
-
+    
             RPointerArray<CEikMenuPaneItem::SData> menuItems;
             CleanupResetAndDestroyPushL( menuItems );
 
@@ -287,7 +307,7 @@
 
             CleanupStack::PopAndDestroy( &menuItems );
             }
-
+        
         FLOG_PERF_STATIC_END( AddDynamicMenuItemsL )
         }
     }
@@ -308,7 +328,7 @@
                     iMiddleSoftkeyCommandId );
             }
         HBufC* middleSoftkeyLabel = StringLoader::LoadLC( aResourceId );
-        cba->AddCommandToStackL( CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+        cba->AddCommandToStackL( CEikButtonGroupContainer::EMiddleSoftkeyPosition, 
                 aCommandId, *middleSoftkeyLabel );
         CleanupStack::PopAndDestroy( middleSoftkeyLabel );
         iMiddleSoftkeyCommandId = aCommandId;
--- a/appinstaller/AppMngr2/src/appmngr2model.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppMngr2/src/appmngr2model.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -133,7 +133,7 @@
 // CAppMngr2Model::PackageInfo()
 // ---------------------------------------------------------------------------
 //
-CAppMngr2PackageInfo& CAppMngr2Model::PackageInfo( TInt aIndex ) const
+CAppMngr2PackageInfo& CAppMngr2Model::PackageInfo( TInt aIndex ) const 
     {
     return *( reinterpret_cast< CAppMngr2PackageInfo* >( iInstallationFiles->At( aIndex ) ) );
     }
@@ -145,7 +145,7 @@
 void CAppMngr2Model::LoadIconsL( CAknIconArray& aIconArray )
     {
     LoadDefaultIconsL( aIconArray );
-
+    
     TInt pluginCount = iPlugins.Count();
     for( TInt index = 0; index < pluginCount; index++ )
         {
@@ -179,7 +179,7 @@
 void CAppMngr2Model::HandleCommandL( CAppMngr2InfoBase& aInfo, TInt aCommand )
     {
     FLOG( "CAppMngr2Model::HandleCommandL( %d ), IsActive() = %d", aCommand, IsActive() );
-
+    
     if( !IsActive() )
         {
         // About to start plugin specific command. Note that when the command completes
@@ -204,7 +204,7 @@
         iActiveItem = &aInfo;
         iActiveCommand = aCommand;
         FLOG( "CAppMngr2Model::HandleCommandL, iActiveItem = 0x%08x '%S'",
-                iActiveItem, &( iActiveItem->Name() ) );
+                iActiveItem, &( iActiveItem->Name() ) ); 
         TRAPD( err, iActiveItem->HandleCommandL( aCommand, iStatus ) );
         FLOG( "CAppMngr2Model::HandleCommandL, command started, err = %d", err );
         SetActive();
@@ -226,22 +226,17 @@
 //
 void CAppMngr2Model::StartFetchingInstallationFilesL()
     {
-    FLOG( "CAppMngr2Model::StartFetchingInstallationFilesL, fetching %d",
-            iFetchingInstallationFiles );
-    if( !iFetchingInstallationFiles )
-        {
-        FLOG_PERF_START( FetchInstallationFiles )
-        iFetchingInstallationFiles = ETrue;
+    FLOG( "CAppMngr2Model::StartFetchingInstallationFilesL" );
+    FLOG_PERF_START( FetchInstallationFiles )
+    
+    // Installation files cache must be enabled until scanner has completed.
+    // This ensures that scanner has time to call GetInstallationFilesL() for
+    // each plugin and for each directory before the first call completes.
+    // If the first call completes before scanner has made all these requets,
+    // cache will be turned off and partial results are displayed.
+    iInstallationFiles->IncrementCacheUseStartingNewRoundL();
 
-        // Installation files cache must be enabled until scanner has completed.
-        // This ensures that scanner has time to call GetInstallationFilesL() for
-        // each plugin and for each directory before the first call completes.
-        // If the first call completes before scanner has made all these requets,
-        // cache will be turned off and partial results are displayed.
-        iInstallationFiles->IncrementCacheUseStartingNewRoundL();
-
-        iScanner->StartScanningL();
-        }
+    iScanner->StartScanningL();
     }
 
 // ---------------------------------------------------------------------------
@@ -250,59 +245,39 @@
 //
 void CAppMngr2Model::StartFetchingInstalledAppsL()
     {
-    FLOG( "CAppMngr2Model::StartFetchingInstalledAppsL, fetching %d",
-            iFetchingInstalledApps );
-    if( !iFetchingInstalledApps )
-        {
-        FLOG_PERF_START( FetchInstalledApps )
-        iFetchingInstalledApps = ETrue;
-
-        // Additional cache increment to ensure that iInstalledApps cache is
-        // used until GetInstalledAppsL() function is called for each plugin.
-        // Without this, the fastest plugin might get it's list complete before
-        // other IncrementCacheUseL() calls and iInstalledApps would display
-        // partial list.
-        iInstalledApps->IncrementCacheUseStartingNewRoundL();
-
-        TInt pluginCount = iPlugins.Count();
-        for( TInt pluginIndex = 0; pluginIndex < pluginCount; pluginIndex++ )
-            {
-            CAppMngr2AppInfoMaker* appInfoMaker = CAppMngr2AppInfoMaker::NewLC(
-                    iPlugins[ pluginIndex ]->Runtime(), *this, iFs );
+    FLOG( "CAppMngr2Model::StartFetchingInstalledAppsL" );
+    FLOG_PERF_START( FetchInstalledApps )
 
-            TRAPD( err, appInfoMaker->StartGettingInstalledAppsL() );
-            FLOG( "CAppMngr2Model::StartFetchingInstalledAppsL, plugin 0x%08x, err = %d",
-                    iPlugins[ pluginIndex ]->Runtime().RuntimeUid().iUid, err );
-            if( err == KErrNone )
-                {
-                iInfoMakers.AppendL( appInfoMaker );
-                CleanupStack::Pop( appInfoMaker );
-                iInstalledApps->IncrementCacheUseL();
-                }
-            else
-                {
-                CleanupStack::PopAndDestroy( appInfoMaker );
-                }
+    // Additional cache increment to ensure that iInstalledApps cache is
+    // used until GetInstalledAppsL() function is called for each plugin.
+    // Without this, the fastest plugin might get it's list complete before
+    // other IncrementCacheUseL() calls and iInstalledApps would display
+    // partial list.
+    iInstalledApps->IncrementCacheUseStartingNewRoundL();
+    
+    TInt pluginCount = iPlugins.Count();
+    for( TInt pluginIndex = 0; pluginIndex < pluginCount; pluginIndex++ )
+        {
+        CAppMngr2AppInfoMaker* appInfoMaker = CAppMngr2AppInfoMaker::NewLC(
+                iPlugins[ pluginIndex ]->Runtime(), *this, iFs );
+        
+        TRAPD( err, appInfoMaker->StartGettingInstalledAppsL() );
+        FLOG( "CAppMngr2Model::StartFetchingInstalledAppsL, plugin 0x%08x, err = %d",
+                iPlugins[ pluginIndex ]->Runtime().RuntimeUid().iUid, err );
+        if( err == KErrNone )
+            {
+            iInfoMakers.AppendL( appInfoMaker );
+            CleanupStack::Pop( appInfoMaker );
+            iInstalledApps->IncrementCacheUseL();
             }
+        else
+            {
+            CleanupStack::PopAndDestroy( appInfoMaker );
+            }
+        }
 
-        // All GetInstalledAppsL() requests have been issued
-        iInstalledApps->DecrementCacheUse();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CAppMngr2Model::IsUninstall()
-// ---------------------------------------------------------------------------
-//
-TBool CAppMngr2Model::IsUninstall()
-    {       
-    if ( iActiveCommand == EAppMngr2CmdUninstall )
-        {
-        FLOG( "CAppMngr2Model::IsUninstall: ETrue" );
-        return ETrue;
-        }   
-    FLOG( "CAppMngr2Model::IsUninstall: EFalse" );
-    return EFalse;    
+    // All GetInstalledAppsL() requests have been issued
+    iInstalledApps->DecrementCacheUse();
     }
 
 // ---------------------------------------------------------------------------
@@ -312,7 +287,7 @@
 void CAppMngr2Model::DoCancel()
     {
     FLOG( "CAppMngr2Model::DoCancel, iActiveItem = 0x%08x", iActiveItem );
-
+    
     if( iActiveItem )
         {
         iActiveItem->CancelCommand();
@@ -349,7 +324,7 @@
 
         // Leave on error. This displays error note (if error notes are enabled).
         User::LeaveIfError( err );
-
+        
         // If the command is EAppMngr2CmdUninstall or EAppMngr2CmdRemove, and it
         // completed without errors, then we remove the current item immediatelty
         // from the displayed list. Otherwise it may take quite long time until
@@ -380,7 +355,7 @@
 void CAppMngr2Model::RefreshInstalledApps()
     {
     FLOG( "CAppMngr2Model::RefreshInstalledApps" );
-
+    
     TRAP_IGNORE( StartFetchingInstalledAppsL() );
     }
 
@@ -402,7 +377,7 @@
 void CAppMngr2Model::ScanningResultL( RPointerArray<CAppMngr2RecognizedFile>& aResult )
     {
     FLOG( "CAppMngr2Model::ScanningResultL, begin: aResult.Count() = %d", aResult.Count() );
-
+    
     // Split recognition result array into smaller (plugin specific) arrays. Plugin
     // specific arrays are maintained by CAppMngr2PackageInfoMaker objects, so one
     // CAppMngr2PackageInfoMaker object is needed for each plugin that has recognized
@@ -449,7 +424,7 @@
 void CAppMngr2Model::ScanningComplete()
     {
     FLOG( "CAppMngr2Model::ScanningComplete" );
-
+    
     iInstallationFiles->DecrementCacheUse();
     }
 
@@ -460,7 +435,7 @@
 void CAppMngr2Model::DirectoryChangedL( const TDesC& /*aChangedDir*/ )
     {
     FLOG( "CAppMngr2Model::DirectoryChangedL" );
-
+    
     // This might be improved by scanning the changed directory only. Model
     // could record which items are got from which directory, so that it could
     // remove those items that were created from the changed directory and
@@ -476,7 +451,7 @@
 void CAppMngr2Model::HandleAppListEvent( TInt /*aEvent*/ )
     {
     FLOG( "CAppMngr2Model::HandleAppListEvent" );
-
+    
     TRAP_IGNORE( StartFetchingInstalledAppsL() );
     }
 
@@ -489,7 +464,7 @@
     {
     FLOG( "CAppMngr2Model::NewAppsCreatedL, plugin 0x%08x: packageCount = %d",
             aMaker.RuntimeUid().iUid, aAppInfos.Count() );
-
+    
     iInstalledApps->AddItemsInOrderL( aAppInfos );
     iInstalledApps->DecrementCacheUse();
     CloseInfoMaker( aMaker );
@@ -508,7 +483,7 @@
     {
     FLOG( "CAppMngr2Model::ErrorInCreatingAppsL, plugin 0x%08x: error = %d",
             aMaker.RuntimeUid().iUid, aError );
-
+    
     iInstalledApps->DecrementCacheUse();
     CloseInfoMaker( aMaker );
     }
@@ -522,7 +497,7 @@
     {
     FLOG( "CAppMngr2Model::NewPackagesCreatedL, plugin 0x%08x: packageCount = %d",
             aMaker.RuntimeUid().iUid, aPackageInfos.Count() );
-
+    
     iInstallationFiles->AddItemsInOrderL( aPackageInfos );
     iInstallationFiles->DecrementCacheUse();
     CloseInfoMaker( aMaker );
@@ -541,7 +516,7 @@
     {
     FLOG( "CAppMngr2Model::ErrorInCreatingPackagesL, plugin 0x%08x: error = %d",
             aMaker.RuntimeUid().iUid, aError );
-
+    
     iInstallationFiles->DecrementCacheUse();
     CloseInfoMaker( aMaker );
     }
@@ -553,28 +528,17 @@
 void CAppMngr2Model::ArrayContentChanged( CAppMngr2InfoArray* aArray,
         TInt aMoreRefreshesExpected )
     {
-    FLOG( "CAppMngr2Model::ArrayContentChanged, more = %d", aMoreRefreshesExpected );
     if( aArray == iInstalledApps )
         {
         FLOG_PERF_STOP( FetchInstalledApps )
         FLOG_PERF_PRINT( FetchInstalledApps )
         iObs.InstalledAppsChanged( aMoreRefreshesExpected );
-        if( !aMoreRefreshesExpected )
-            {
-            FLOG( "CAppMngr2Model::ArrayContentChanged: StartFetchingInstalledAppsL done" );
-            iFetchingInstalledApps = EFalse;
-            }
         }
     if( aArray == iInstallationFiles )
         {
         FLOG_PERF_STOP( FetchInstallationFiles )
         FLOG_PERF_PRINT( FetchInstallationFiles )
         iObs.InstallationFilesChanged( aMoreRefreshesExpected );
-        if( !aMoreRefreshesExpected )
-            {
-            FLOG( "CAppMngr2Model::ArrayContentChanged: StartFetchingInstallationFilesL done" );
-            iFetchingInstallationFiles = EFalse;
-            }
         }
     }
 
@@ -599,7 +563,7 @@
 
     iInstalledApps = CAppMngr2AppInfoArray::NewL( *this );
     iInstallationFiles = CAppMngr2PackageInfoArray::NewL( *this );
-
+    
     FLOG_PERF_STATIC_BEGIN( LoadPluginsL )
     LoadPluginsL();
     FLOG_PERF_STATIC_END( LoadPluginsL )
@@ -621,13 +585,13 @@
 void CAppMngr2Model::LoadDefaultIconsL( CAknIconArray& aIconArray )
     {
     FLOG( "CAppMngr2Model::LoadDefaultIconsL" );
-
+    
     MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
     HBufC* bitmapFile = TAppMngr2DriveUtils::FullBitmapFileNameLC( KAppMngr2BitmapFile, iFs );
     CFbsBitmap* bitmap = NULL;
     CFbsBitmap* mask = NULL;
     CGulIcon* icon = NULL;
-
+    
     // Note that icons can be graphically-skinned (icon graphic defined in theme)
     // or color-skinned (icon colors change depending on background color defined
     // in theme). Normal icons are graphically-skinned and indicator icons are
@@ -637,9 +601,9 @@
 
     // Icon 0: EAppMngr2IconIndex_QgnIndiAmInstMmcAdd
     // Indicator icon for items stored/installed in memory card
-    AknsUtils::CreateColorIconLC( skinInstance,
+    AknsUtils::CreateColorIconLC( skinInstance, 
             KAknsIIDQgnIndiMmcAdd, KAknsIIDQsnIconColors, EAknsCIQsnIconColorsCG13,
-            bitmap, mask, *bitmapFile,
+            bitmap, mask, *bitmapFile, 
             EMbmAppmngr2Qgn_indi_mmc_add,
             EMbmAppmngr2Qgn_indi_mmc_add_mask,
             KRgbBlack );
@@ -652,9 +616,9 @@
 
     // Icon 1: EAppMngr2IconIndex_QgnIndiFmgrMsAdd
     // Indicator icon for items stored/installed in mass memory
-    AknsUtils::CreateColorIconLC( skinInstance,
+    AknsUtils::CreateColorIconLC( skinInstance, 
             KAknsIIDQgnIndiFmgrMsAdd, KAknsIIDQsnIconColors, EAknsCIQsnIconColorsCG13,
-            bitmap, mask, *bitmapFile,
+            bitmap, mask, *bitmapFile, 
             EMbmAppmngr2Qgn_indi_fmgr_ms_add,
             EMbmAppmngr2Qgn_indi_fmgr_ms_add_mask,
             KRgbBlack );
@@ -669,14 +633,14 @@
     // List icon for items that are not known
     icon = AknsUtils::CreateGulIconL( skinInstance,
             KAknsIIDQgnPropUnknown, *bitmapFile,
-            EMbmAppmngr2Qgn_prop_unknown,
+            EMbmAppmngr2Qgn_prop_unknown, 
             EMbmAppmngr2Qgn_prop_unknown_mask );
     CleanupStack::PushL( icon );
     aIconArray.AppendL( icon );
     CleanupStack::Pop( icon );
 
     CleanupStack::PopAndDestroy( bitmapFile );
-
+    
     // Additionally some unknown indicator icon could be defined.
     // Now, if some plugin gives incorrect index fox indicator icon,
     // then no indicator icon is displayed.
@@ -689,7 +653,7 @@
 void CAppMngr2Model::LoadPluginsL()
     {
     FLOG( "CAppMngr2Model::LoadPluginsL" );
-
+    
     RImplInfoPtrArray implInfoArray;
     CleanupResetAndDestroyPushL( implInfoArray  );
     REComSession::ListImplementationsL( KAppMngr2PluginInterface, implInfoArray );
@@ -783,7 +747,7 @@
             }
         CleanupStack::PopAndDestroy( &dirsToScan );
         }
-
+    
     // KSWInstallerPackageFolder directory if defined in CenRep
     CRepository* cenrep = CRepository::NewLC( KCRUidSWInstallerLV );
     err = cenrep->Get( KSWInstallerPackageFolder, path );
@@ -816,7 +780,7 @@
                                 {
                                 TFileName fullPath;
                                 fullPath.Format( KDriveSpec, static_cast<TUint>( driveLetter ) );
-                                fullPath.Append( path );
+                                fullPath.Append( path ); 
                                 iScanner->AddDirectoryL( fullPath );
                                 }
                             }
@@ -845,7 +809,7 @@
 void CAppMngr2Model::FetchDataTypesL()
     {
     FLOG( "CAppMngr2Model::FetchDataTypesL" );
-
+    
     TInt pluginCount = iPlugins.Count();
     for( TInt pluginIndex = 0; pluginIndex < pluginCount; pluginIndex++ )
         {
@@ -863,7 +827,7 @@
     const CAppMngr2InfoMaker* makerToClose = &aMaker;
     for( TInt index = iInfoMakers.Count() - 1; index >= 0; index-- )
         {
-        CAppMngr2InfoMaker* maker = iInfoMakers[ index ];
+        CAppMngr2InfoMaker* maker = iInfoMakers[ index ]; 
         if( maker == makerToClose )
             {
             iInfoMakers.Remove( index );
--- a/appinstaller/AppinstUi/Daemon/Inc/DialogWrapper.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Inc/DialogWrapper.h	Tue Aug 31 15:21:33 2010 +0300
@@ -22,12 +22,20 @@
 //  INCLUDES
 #include <e32base.h>
 #include <f32file.h>
-#include <barsc.h>
 #include "dialogwatcher.h"
 
+class CHbDeviceProgressDialogSymbian;
+class CHbDeviceNotificationDialogSymbian;
+class CHbIndicatorSymbian;
+
 namespace Swi
 {
+// Define uninstaller mode for universal indicator.
+const TInt KSWIDaemonUninstallerMode = -1; 
+// Define installer mode for universal indicator.
+const TInt KSWIDaemonInstallerMode = 0;
 
+class CDialogTimer;
 /**
 * This class wraps functions for showing some global dialogs.
 * 
@@ -70,7 +78,7 @@
         * Cancel global waiting note (after installing).
         * @since 3.0
         */
-        void CancelWaitingNoteL();
+        void CancelWaitingNote();
         
         /**
          * Sets dialog control flag.
@@ -84,6 +92,40 @@
           * @since 3.2         
           */              
         void ShowWaitingNoteForUninstallerL();
+        
+        /**
+         * Cancel global waiting note (after installing).
+         * @since 10.1
+         */        
+        void CancelWaitingNoteForUninstaller();
+ 
+        /**
+         * Show universal indicator for install or uninstall process.
+         * @since 10.1          
+         */ 
+        void ActivateIndicatorL( TReal aProcessValue );
+        
+        /**
+         * Set mode for universal indicator plugin. 
+         * @since 10.1 
+         * @parm aMode Flag for switchig to uninstaller mode. By default
+         * plugin works as installer mode.       
+         */        
+        void SetModeToIndicatorL( TInt aMode );
+        
+        /**
+         * Close universal indicator for install or uninstall process.
+         * @since 10.1         
+         */        
+        void CancelIndicatorL();
+ 
+//TODO: remove, it seems that this is no needed after wk18.        
+        /**
+         * Check system state. This is needed to know, can Daemon show UI
+         * dialogs.
+         * @since 10.1         
+         */       
+        //void CheckSystemState();
 
     private:
 
@@ -106,12 +148,89 @@
         HBufC* ReadResourceLC( TInt aResourceId );        
 
     private: //  Data
-
-        RResourceFile iResourceFile;        
+          
         RFs& iFs;        
         TInt iNoteId;  
         TInt iDisableAllNotes;
         CDialogWatcher* iWatcher;
+        
+        TBool iIsProgressDialog; // Defines that dialog is constructed.  
+        CHbDeviceProgressDialogSymbian* iHbProgressDialog;
+        TBool iIsUninstallerProgressDialog; // Defines that dialog is constructed.                   
+        CHbDeviceProgressDialogSymbian* iHbProgressDialogForUninstaller;
+        TBool iIsIndicator; // Defines that indicator is constructed.
+        CHbIndicatorSymbian* iHbIndicator;  // Univeral indicator.
+        CDialogTimer* iTimer;   // Timer for closing procress dialog.
+        // Defines that dialog has used the time interval and can not be shown.
+        TBool iTimeOffDisableProgress;         
+    };
+
+/**
+* Helper class for closing the progress dialogs shown by 
+* the DialogWrapper class.
+* 
+* @since 10.1 
+*/
+class CDialogTimer : public CActive
+    {
+    public:
+    
+        /**
+        * Destructor.
+        */
+        virtual ~CDialogTimer();
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CDialogTimer* NewL( CDialogWrapper* aDialog );
+        
+        /**
+         * Function sets time interva for progress dialog.
+         * After this time interval the progress dialog is closed.
+         * @param aRefresTime Time in microseconds.
+         */          
+         void StartDialogTimer( TUint32 aRefreshTime );
+        
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CDialogTimer();
+
+        /**
+        * 2nd phase constructor. 
+        * @param 
+        */
+        void ConstructL( CDialogWrapper* aDialog );
+        
+        /**
+         * Function sets time.
+         * @param aRefresTime Time in microseconds.
+         */          
+         void TimerSet( TUint32 aRefreshTime );
+      
+        /**
+        * 
+        */        
+        void RunL();
+
+        /**
+        * Cancel timer.
+        */        
+        void DoCancel();
+        
+        /**
+        * Handles a leave occurring in the request completion 
+        * event handler RunL.
+        */             
+        TInt RunError( TInt aError );
+
+    private:
+
+        RTimer          iRTimer;     // Timer.   
+        CDialogWrapper* iDialog;     // Dialog class.                     
     };
 }
 
--- a/appinstaller/AppinstUi/Daemon/Inc/SilentLauncher.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Inc/SilentLauncher.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -23,6 +23,8 @@
 #include <e32base.h>
 #include <f32file.h>
 #include <SWInstApi.h>
+#include <usif/sif/sif.h>
+#include <usif/sif/sifcommon.h>
 
 namespace Swi
 {
@@ -54,7 +56,17 @@
         * @param aFile - Name of the file to install
         * @param aStatus - Request status
         */
-        void InstallL( const TDesC& aFile, TRequestStatus& aStatus );
+       // void InstallL( const TDesC& aFile, TRequestStatus& aStatus );
+ 
+        /**
+        * Perform installation with file handle.
+        * @since 10.1
+        * @param aFileHandle - Handle of the file to be installed 
+        * @param aStatus - Request status
+        */
+        void InstallL( RFile& aFileHandle, 
+                       const TDesC& aFile, 
+                       TRequestStatus& aStatus );
 
         /**
         * Cancel the current installation.
@@ -73,15 +85,22 @@
         * 2nd phase constructor.
         */
         void ConstructL();
+                  
 
     private: //  Data
-            
-        SwiUI::RSWInstSilentLauncher iLauncher;    
-        SwiUI::TInstallOptions iOptions;
-        SwiUI::TInstallOptionsPckg iOptionsPckg;   
-
-        RFs& iFs;        
-        TBool iConnected;
+        
+        // SW installer framework
+        Usif::RSoftwareInstall iSWInstallerFW;
+        // Install parameters
+        Usif::COpaqueNamedParams* iSifOptions;
+        // Result parameters like error codes.
+        Usif::COpaqueNamedParams* iSifResults;
+        // File server
+        RFs& iFs;
+        // Defines if we have connected to SWI server.
+        TBool iConnected;   
+        
+        HBufC* iDrive;
     };
 }
 
--- a/appinstaller/AppinstUi/Daemon/Inc/daemonbehaviour.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Inc/daemonbehaviour.h	Tue Aug 31 15:21:33 2010 +0300
@@ -20,6 +20,8 @@
 
 #include <e32base.h>
 #include <f32file.h>
+#include <usif/scr/scr.h>
+#include <usif/scr/screntries.h>
 
 #include "daemon.h"
 #include "daemoninstaller.h"
@@ -116,8 +118,16 @@
      @param aDirectory The directory to search for PreInstalled Files   
      */
     void ProcessPreinstalledFilesL(TInt aDrive, const TDesC& aDirectory);
-
-          
+    
+    
+    void UpdateComponentStatusL( TChangeType aChangeType, TInt aDrive );
+    
+    void UpdateStatusL( Usif::RSoftwareComponentRegistry& iScrServer,
+                        Usif::TComponentId componentId,
+                        TChangeType aChangeType,
+                        TInt aTargetDrive,
+                        RArray<TApaAppUpdateInfo>& iAppInfoArray );
+    
 private:
     
     RFs iFs;        
@@ -128,13 +138,10 @@
     // Has MediaProcessingStart already been called?
     TBool iStartNotified;
     TInt iDrive;
-  
-#ifdef RD_MULTIPLE_DRIVE 
     // Contains inserted drives.
-    RArray<TInt> iDriveArray;
-#endif   
+    RArray<TInt> iDriveArray;   
     // General program status. Note this do not affect to plug-in.
-    TInt iGeneralProcessStatus; //For uninstaller
+    TInt iGeneralProcessStatus; //For uninstaller   
     };
 
 } // namespace Swi
--- a/appinstaller/AppinstUi/Daemon/Inc/daemoninstaller.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Inc/daemoninstaller.h	Tue Aug 31 15:21:33 2010 +0300
@@ -176,7 +176,13 @@
         /**
         * Indicates if this package is valid.
         */
-        TBool IsValidPackageL( const TDesC& aPackageName );      
+        TBool IsValidPackageL(); 
+        
+        /**
+         * Calculate precent value for universal indicator.
+         * This precent value show how many packages has been installed.
+         */      
+        void CalcPercentValue();
         	          
 	
     private:
@@ -212,6 +218,11 @@
         CProgramStatus* iProgramStatus;   
         // For plugin support
         TBool iUpdateCache;
+        // File handle for USIF.
+        RFile iSisFileHandle;
+        TBool iFileOpen;
+        //CDialogTimer* iDialogTimer; 
+        TReal32 iPercentValue;
     };		
 }
 
--- a/appinstaller/AppinstUi/Daemon/Inc/silentuninstaller.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Inc/silentuninstaller.h	Tue Aug 31 15:21:33 2010 +0300
@@ -23,6 +23,10 @@
 #include <e32base.h>
 #include <f32file.h>
 #include <SWInstApi.h>
+#include <usif/sif/sif.h>
+#include <usif/sif/sifcommon.h>
+
+#include "sisregistrysession.h"
 
 namespace Swi
 {
@@ -58,7 +62,7 @@
         void UninstallL(         
                 TUid& aUid, 
                 TRequestStatus& aReqStatus, 
-                TDesC8& aMIME  );
+                TDesC& aMIME  );
 
         /**
          * Cancel the current installation.        
@@ -81,12 +85,14 @@
 
     private: //  Data
         
-        // Silent uninstaller
-        SwiUI::RSWInstSilentLauncher iLauncher;
-        // Uninstall options
-        SwiUI::TUninstallOptions iOptions;
-        // Uninstall options package
-        SwiUI::TUninstallOptionsPckg iOptionsPckg;
+        // SW installer framework
+        Usif::RSoftwareInstall iSWInstallerFW;
+        // Install parameters
+        Usif::COpaqueNamedParams* iSifOptions;
+        // Result parameters like error codes.
+        Usif::COpaqueNamedParams* iSifResults;
+        // SisRegister for native install packages.
+        RSisRegistrySession iRegistrySession;
         // File server
         RFs& iFs;
         // Defines need of connection to install server.
--- a/appinstaller/AppinstUi/Daemon/Inc/uninstaller.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Inc/uninstaller.h	Tue Aug 31 15:21:33 2010 +0300
@@ -137,6 +137,12 @@
          * @since 3.2 
          */       
         void ExitUninstaller();
+        
+        /**
+          * Calculate precent value for universal indicator.
+          * This precent value show how many packages has been uninstalled.
+          */              
+        void CalcPercentValue();
                                              
     private:
                 
@@ -163,7 +169,9 @@
         // Uninstaller dialog.        
         CDialogWrapper* iDialogs;
         // Descriptor for mime type.
-        HBufC8* iMime;                 
+        HBufC* iMime;  
+        // Percent value for universal indicator.
+        TReal iPercentValue;
     };      
 
 } //namespace Swi
--- a/appinstaller/AppinstUi/Daemon/Src/DialogWrapper.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/DialogWrapper.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -18,18 +18,26 @@
 
 
 // INCLUDE FILES
-#include <AknGlobalNote.h>
-#include <avkon.rsg>
-#include <bautils.h>
-#include <data_caging_path_literals.hrh> 
-#include <swidaemon.rsg>
-
+#include <hb/hbwidgets/hbdeviceprogressdialogsymbian.h>
+#include <hb/hbwidgets/hbdevicenotificationdialogsymbian.h>
+#include <hb/hbcore/hbindicatorsymbian.h>
+#include <hb/hbcore/hbsymbianvariant.h>
+//#include <ssm/ssmstateawaresession.h> // For system state
+//#include <ssm/ssmstate.h>
+//#include <ssm/ssmdomaindefs.h> // KUIFrameworkDomain
 #include "DialogWrapper.h"
 #include "SWInstDebug.h"
 
-_LIT( KDaemonResourceFile, "swidaemon.rsc" );
+using namespace Swi;
 
-using namespace Swi;
+// Time interval for progress dialog.
+const TUint KDialogTimeOut = 5000000;
+// Indicator type
+_LIT( KIndicatorTypeSWIDaemon, 
+        "com.nokia.sisxsilentinstall.indicatorplugin/1.0" );
+
+//TODO: remove when HB dialogs do not crash in HW/WINS
+//#define _SWIDAEMON_DISABLE_NOTES_
 
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -51,23 +59,17 @@
 //
 void CDialogWrapper::ConstructL()
     {
-    // Get resource file path
-    TFileName fileName;
-    fileName.Copy( TParsePtrC( RProcess().FileName() ).Drive() );
-    fileName.Append( KDC_RESOURCE_FILES_DIR );
-    fileName.Append( KDaemonResourceFile );
-    
-    // Get language of resource file        
-    BaflUtils::NearestLanguageFile( iFs, fileName );
-
-    // Open resource file
-    iResourceFile.OpenL( iFs, fileName );
-    iResourceFile.ConfirmSignatureL();
-  
+    iIsProgressDialog = EFalse;
+    iHbProgressDialog = NULL;
+    iIsUninstallerProgressDialog = EFalse;
+    iHbProgressDialogForUninstaller = NULL;
+    iIsIndicator = EFalse;
+    iHbIndicator = NULL;                        
     // By default Daemon will show all notes.
-    iDisableAllNotes = EFalse;
+    iDisableAllNotes = EFalse;    
+    iTimeOffDisableProgress = EFalse;    
     // Create watcher AO for PS Key.
-    iWatcher = CDialogWatcher::NewL( this );   
+    iWatcher = CDialogWatcher::NewL( this );              
     // Get current PS Key 
     TInt err = iWatcher->GetPSKeyForUI( iDisableAllNotes );
     if ( err )
@@ -76,7 +78,9 @@
         iDisableAllNotes = ETrue;
         }
     // Start AO
-    iWatcher->StartWatcher();
+    iWatcher->StartWatcher();    
+    // Create dialog timer for progress dialog.
+    iTimer = CDialogTimer::NewL( this );
     }
 
 // -----------------------------------------------------------------------------
@@ -92,16 +96,42 @@
     CleanupStack::Pop( self );
     return self;    
     }
-    
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::~CDialogWrapper
 // Destructor
+// -----------------------------------------------------------------------------
+//    
 CDialogWrapper::~CDialogWrapper()
     {
-    iResourceFile.Close();
+    FLOG( _L("Daemon: CDialogWrapper::~CDialogWrapper") );
+    delete iTimer;
+    
+    // If installer's RunL leaves make sure that dialogs are closed.
+    if ( iIsProgressDialog && iHbProgressDialog )
+            {
+            iHbProgressDialog->Close();
+            }    
+    delete iHbProgressDialog;
+    
+    // If uninstaller's RunL leaves make sure that dialogs are closed.
+    if ( iIsUninstallerProgressDialog && iHbProgressDialogForUninstaller )
+            {
+            iHbProgressDialogForUninstaller->Close();
+            }    
+    delete iHbProgressDialogForUninstaller;
+    
+    if ( iIsIndicator && iHbIndicator )
+            {             
+            iHbIndicator->Deactivate( KIndicatorTypeSWIDaemon );                                     
+            }
+    delete iHbIndicator;
+    
     if ( iWatcher )
         {
-        iWatcher->StopWatcher();
-        delete iWatcher;
-        }
+        iWatcher->StopWatcher();        
+        }       
+    delete iWatcher;
     }
 
 // -----------------------------------------------------------------------------
@@ -111,17 +141,38 @@
 // -----------------------------------------------------------------------------
 // 
 void CDialogWrapper::ShowUntrustedResultL()
-    {  
+    {
+    FLOG( _L("Daemon: CDialogWrapper::ShowUntrustedResultL") );
+        
+#ifdef _SWIDAEMON_DISABLE_NOTES_
+    FLOG( _L("Daemon: CDialogWrapper: iDisableAllNotes = ETrue") );
+    iDisableAllNotes = ETrue;
+#endif                
+    
     // Let watcher to know that waiting note is canceled.
-    iWatcher->CancelNoteRequest();
-    
-    if ( iDisableAllNotes == EFalse )
+    iWatcher->CancelNoteRequest();            
+        
+    // Inform watcher that we have request to show note. 
+    iWatcher->CancelNoteRequest(); 
+            
+    if ( !iDisableAllNotes  )
         {    
-        HBufC* string = ReadResourceLC( R_DAEMON_UNTRUSTED_FOUND );    
-        CAknGlobalNote* note = CAknGlobalNote::NewLC();
-        note->ShowNoteL( EAknGlobalInformationNote, *string );   
-        CleanupStack::PopAndDestroy( 2, string ); 
-        }
+        CHbDeviceNotificationDialogSymbian* notificationDialog = 
+                CHbDeviceNotificationDialogSymbian::NewL( NULL );
+        
+        CleanupStack::PushL( notificationDialog );
+        
+//TODO get string from log file.  
+        _LIT( KTempIconText,"note_info");
+        _LIT( KTempTextTitle,"SW Silent Installer" );
+        _LIT( KTempTextForErrorMessage,"Untrusted software was found." ); 
+                                         
+        notificationDialog->NotificationL( KTempIconText, 
+                                           KTempTextTitle , 
+                                           KTempTextForErrorMessage );
+                    
+        CleanupStack::PopAndDestroy( notificationDialog );        
+        }   
     }
 
 // -----------------------------------------------------------------------------
@@ -132,15 +183,33 @@
 // 
 void CDialogWrapper::ShowErrorResultL()
     { 
-    // Let watcher to know that waiting note is canceled.
-    iWatcher->CancelNoteRequest();   
+    FLOG( _L("Daemon: CDialogWrapper::ShowErrorResultL") );
+    
+#ifdef _SWIDAEMON_DISABLE_NOTES_
+    FLOG( _L("Daemon: CDialogWrapper: iDisableAllNotes = ETrue") );
+    iDisableAllNotes = ETrue;
+#endif  
     
-    if ( iDisableAllNotes == EFalse )
-        {
-        HBufC* string = ReadResourceLC( R_DAEMON_INSTALLATION_ERROR );    
-        CAknGlobalNote* note = CAknGlobalNote::NewLC();
-        note->ShowNoteL( EAknGlobalInformationNote, *string );   
-        CleanupStack::PopAndDestroy( 2, string );  
+    // Inform watcher that we have request to show note. 
+    iWatcher->CancelNoteRequest();   
+            
+    if ( !iDisableAllNotes )
+        {    
+        CHbDeviceNotificationDialogSymbian* notificationDialog = 
+                CHbDeviceNotificationDialogSymbian::NewL( NULL );
+        
+        CleanupStack::PushL( notificationDialog );
+        
+//TODO get string from log file.  
+        _LIT( KTempIconText,"note_info");
+        _LIT( KTempTextTitle,"SW Silent Installer" );
+        _LIT( KTempTextForErrorMessage,"Installation was not completed." ); 
+                                        
+        notificationDialog->NotificationL( KTempIconText, 
+                                           KTempTextTitle , 
+                                           KTempTextForErrorMessage );
+               
+        CleanupStack::PopAndDestroy( notificationDialog ); 
         }
     }
 
@@ -152,15 +221,33 @@
 // 
 void CDialogWrapper::ShowWaitingNoteL()
 	{
-    if ( iDisableAllNotes == EFalse )
-        {
-        if ( iNoteId == 0 )
-            {
-            HBufC* string = ReadResourceLC( R_DAEMON_INSTALLING );   
-            CAknGlobalNote* note = CAknGlobalNote::NewLC();
-            note->SetSoftkeys( R_AVKON_SOFTKEYS_EMPTY );
-            iNoteId = note->ShowNoteL( EAknGlobalWaitNote, *string );
-            CleanupStack::PopAndDestroy( 2, string );
+    FLOG( _L("Daemon: CDialogWrapper::ShowWaitingNoteL") );
+           
+#ifdef _SWIDAEMON_DISABLE_NOTES_
+    FLOG( _L("Daemon: CDialogWrapper: iDisableAllNotes = ETrue") );
+    iDisableAllNotes = ETrue;
+#endif
+    
+    FLOG_1( _L("Daemon: iDisableAllNotes: %d"), iDisableAllNotes );
+    FLOG_1( _L("Daemon: iIsProgressDialog: %d"), iIsProgressDialog );
+    FLOG_1( _L("Daemon: iTimeOffDisableProgress: %d"), iTimeOffDisableProgress );
+            
+    if ( !iDisableAllNotes )
+        {          
+        if ( !iIsProgressDialog && !iTimeOffDisableProgress )
+            {    
+            iHbProgressDialog = CHbDeviceProgressDialogSymbian::NewL( 
+                                   CHbDeviceProgressDialogSymbian::EWaitDialog, 
+                                   NULL );
+            iIsProgressDialog = ETrue;
+                       
+            _LIT( KTempTextForProgressDialog,"Installing" );
+            
+            iHbProgressDialog->SetTextL( KTempTextForProgressDialog ); 
+            FLOG( _L("Daemon: ShowWaitingNoteL: ShowL") );
+            iHbProgressDialog->ShowL();            
+            FLOG( _L("Daemon: ShowWaitingNoteL: StartDialogTimer") );
+            iTimer->StartDialogTimer( KDialogTimeOut );
             }
         }
     else if ( iDisableAllNotes )
@@ -177,32 +264,35 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 // 
-void CDialogWrapper::CancelWaitingNoteL()
-	{
-	if ( iNoteId )
+void CDialogWrapper::CancelWaitingNote()
+	{ 
+    FLOG( _L("Daemon: CDialogWrapper::CancelWaitingNoteL") );
+    
+	if ( iIsProgressDialog )
 		{
-		CAknGlobalNote* note = CAknGlobalNote::NewLC();
-		note->CancelNoteL( iNoteId );
-		iNoteId = 0;
-		CleanupStack::PopAndDestroy();
+		iHbProgressDialog->Close();
+		delete iHbProgressDialog;
+		//Make sure not to delete twice in destructor.
+		iHbProgressDialog = NULL;
+		iIsProgressDialog = EFalse;
+		
+		iTimeOffDisableProgress = ETrue;
 		}
+		
     // Let watcher to know that waiting note is canceled.
 	iWatcher->CancelNoteRequest();
  	}
-// CDialogWrapper::LoadResourceLC
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::LoadResourceLC  
 // Read resource string.
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 // 
-HBufC* CDialogWrapper::ReadResourceLC( TInt aResourceId )
+HBufC* CDialogWrapper::ReadResourceLC( TInt /*aResourceId*/ )
     {
-    TResourceReader reader;
-    HBufC8* buff = iResourceFile.AllocReadLC( aResourceId );    
-    reader.SetBuffer( buff );
-    HBufC* text = reader.ReadHBufCL();
-    CleanupStack::PopAndDestroy( buff );
-    CleanupStack::PushL( text );
-    return text;
+    //TODO: All resoureces nees to be rewriten for device dialogs (QT)    
+    return NULL;
     }
 
 // -----------------------------------------------------------------------------
@@ -222,15 +312,33 @@
 // 
 void CDialogWrapper::ShowWaitingNoteForUninstallerL()
     {
-    if ( iDisableAllNotes == EFalse )
+    FLOG( _L("Daemon: CDialogWrapper::ShowWaitingNoteForUninstallerL") );
+    
+#ifdef _SWIDAEMON_DISABLE_NOTES_
+    FLOG( _L("Daemon: CDialogWrapper: iDisableAllNotes = ETrue") );
+    iDisableAllNotes = ETrue;
+#endif
+    
+    FLOG_1( _L("Daemon: iDisableAllNotes: %d"), iDisableAllNotes );
+    FLOG_1( _L("Daemon: iIsProgressDialog: %d"), iIsProgressDialog );
+    FLOG_1( _L("Daemon: iTimeOffDisableProgress: %d"), iTimeOffDisableProgress );
+              
+    if ( !iDisableAllNotes )
         {
-        if ( iNoteId == 0 )
-            {
-            HBufC* string = ReadResourceLC( R_UNINSTALLER_INSTALL );   
-            CAknGlobalNote* note = CAknGlobalNote::NewLC();
-            note->SetSoftkeys( R_AVKON_SOFTKEYS_EMPTY );
-            iNoteId = note->ShowNoteL( EAknGlobalWaitNote, *string );
-            CleanupStack::PopAndDestroy( 2, string );
+        if ( !iIsUninstallerProgressDialog && !iTimeOffDisableProgress )
+            {    
+            iHbProgressDialogForUninstaller = 
+                    CHbDeviceProgressDialogSymbian::NewL( 
+                                   CHbDeviceProgressDialogSymbian::EWaitDialog, 
+                                   NULL );
+            iIsUninstallerProgressDialog = ETrue;
+    //TODO get string from log file.            
+            _LIT( KTempTextForProgressDialog,"Uninstalling" );            
+            iHbProgressDialogForUninstaller->SetTextL( KTempTextForProgressDialog ); 
+            FLOG( _L("Daemon: ShowWaitingNoteForUninstallerL: ShowL") );
+            iHbProgressDialogForUninstaller->ShowL();
+            FLOG( _L("Daemon: ShowWaitingNoteForUninstallerL: StartDialogTimer") );
+            iTimer->StartDialogTimer( KDialogTimeOut );
             }
         }
     else if ( iDisableAllNotes )
@@ -240,4 +348,275 @@
         iWatcher->RequestToDisplayNote();
         }
     }
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::CancelWaitingNoteL  
+// Cancel global waiting note after installing.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+// 
+void CDialogWrapper::CancelWaitingNoteForUninstaller()
+    { 
+    FLOG( _L("Daemon: CDialogWrapper::CancelWaitingNoteForUninstallerL") );
+    
+    if ( iIsUninstallerProgressDialog )
+        {
+        iHbProgressDialogForUninstaller->Close();
+        delete iHbProgressDialogForUninstaller;
+        //Make sure not to delete twice in destructor.
+        iHbProgressDialogForUninstaller = NULL; 
+        iIsUninstallerProgressDialog = EFalse;
+        
+        iTimeOffDisableProgress = ETrue;
+        }
+        
+    // Let watcher to know that waiting note is canceled.
+    iWatcher->CancelNoteRequest();
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::ActivateIndicatorL()  
+// 
+// -----------------------------------------------------------------------------
+// 
+void CDialogWrapper::ActivateIndicatorL( TReal aProcessValue )
+    {  
+    FLOG( _L("Daemon: CDialogWrapper::ActivateIndicatorL") );
+                  
+    if ( !iIsIndicator )
+        {
+        FLOG( _L("Daemon: CHbIndicatorSymbian::NewL") );
+        iHbIndicator = CHbIndicatorSymbian::NewL();
+        iIsIndicator = ETrue;             
+        }
+    
+    TInt value = static_cast<TInt>( aProcessValue );
+    FLOG_1( _L("Daemon: ActivateIndicatorL: precent value: %d"), value );
+          
+    CHbSymbianVariant* hbParam = CHbSymbianVariant::NewL( 
+                                                 &value,
+                                                 CHbSymbianVariant::EInt );    
+    CleanupStack::PushL( hbParam );
+    
+    FLOG( _L("Daemon: ActivateIndicatorL: Activate") );
+    iHbIndicator->Activate( KIndicatorTypeSWIDaemon, hbParam );
+    
+    CleanupStack::PopAndDestroy( hbParam );         
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::SetModeToIndicatorL()  
+// 
+// -----------------------------------------------------------------------------
+// 
+void CDialogWrapper::SetModeToIndicatorL( TInt aMode )
+    {  
+    FLOG_1( _L("Daemon: CDialogWrapper::SetModeToIndicatorL: aMode: %d"),
+            aMode );
+                  
+    if ( !iIsIndicator )
+        {
+        FLOG( _L("Daemon: CHbIndicatorSymbian::NewL") );
+        iHbIndicator = CHbIndicatorSymbian::NewL();
+        iIsIndicator = ETrue;        
+        }
+    // Set mode.
+    TReal mode = aMode;    
+    CHbSymbianVariant* hbParam = CHbSymbianVariant::NewL( 
+                                                 &mode,
+                                                 CHbSymbianVariant::EReal );    
+    CleanupStack::PushL( hbParam );    
+    FLOG( _L("Daemon: SetModeToIndicatorL: Activate") );
+    iHbIndicator->Activate( KIndicatorTypeSWIDaemon, hbParam );
+    
+    CleanupStack::PopAndDestroy( hbParam );         
+    }
+
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::CancelIndicatorL  
+// 
+// -----------------------------------------------------------------------------
+// 
+void CDialogWrapper::CancelIndicatorL()
+    {
+    FLOG( _L("Daemon: CDialogWrapper::CancelIndicatorL") );
+    
+    if ( iIsIndicator )
+        { 
+        FLOG( _L("Daemon: CancelIndicatorL: Deactivate") );
+        iHbIndicator->Deactivate( KIndicatorTypeSWIDaemon );              
+        delete iHbIndicator;
+        iHbIndicator = NULL; //Make sure not to delete twice in destructor.
+        iIsIndicator = EFalse;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::CheckSystemState()  
+// 
+// -----------------------------------------------------------------------------
+// 
+/*
+void CDialogWrapper::CheckSystemState()
+    {
+    FLOG( _L("Daemon: CDialogWrapper::CheckSystemState TEST") );
+
+    // We need to check this only if system is not ready to show 
+    // dialogs e.g. UI is not up.
+    if ( !iSystemReadyToShowDialogs )
+        {    
+        RSsmStateAwareSession systemStateSession;
+         
+        TInt err = systemStateSession.Connect( KUIFrameworkDomain3 );
+        FLOG_1( _L("Daemon: systemStateSession.Connect err = %d"), err ); 
+        
+        if ( err == KErrNone )
+            {
+            TSsmState currentState = systemStateSession.State();
+            systemStateSession.Close();
+            
+            FLOG_1( _L("Daemon: System main state = %d"), currentState.MainState() ); 
+            FLOG_1( _L("Daemon: System sub state = %d"), currentState.SubState() ); 
+            
+            
+            if ( currentState.MainState() == ESsmNormal )
+                {
+                iSystemReadyToShowDialogs = ETrue;            
+                }
+            else
+                {
+                iSystemReadyToShowDialogs = EFalse;            
+                }
+            }
+        else
+            {
+            iSystemReadyToShowDialogs = EFalse;
+            }
+        }
+    FLOG_1( _L("Daemon: iSystemReadyToShowDialogs = %d"), 
+            iSystemReadyToShowDialogs );      
+    }
+*/
+
+//-------------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::CDialogTimer()
+//
+// -----------------------------------------------------------------------------
+//
+CDialogTimer::CDialogTimer() : CActive( EPriorityNormal )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::~CDialogTimer()
+//
+// -----------------------------------------------------------------------------
+//
+CDialogTimer::~CDialogTimer()
+    {
+    FLOG( _L("Daemon: CDialogTimer::~CDialogTimer") );
+    // Cancel the outstanding request. Calls the active object’s
+    // DoCancel function if request is outstanding.
+    Cancel();
+    // Delete RTimer
+    iRTimer.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::NewL()
+//
+// -----------------------------------------------------------------------------
+//
+CDialogTimer* CDialogTimer::NewL( CDialogWrapper* aDialog )
+    {
+    CDialogTimer* activeTimer = new (ELeave) CDialogTimer();
+    CleanupStack::PushL( activeTimer );
+    activeTimer->ConstructL( aDialog );
+    CleanupStack::Pop();
+    return activeTimer;
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::ConstructL()
+//
+// -----------------------------------------------------------------------------
+//
+void CDialogTimer::ConstructL( CDialogWrapper* aDialog )
+    {  
+    if ( aDialog == NULL )
+        {
+        User::Leave( KErrArgument );
+        }  
+    iDialog = aDialog;
+    CActiveScheduler::Add( this );                 
+    iRTimer.CreateLocal();                                     
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::StartDialogTimer()
+//
+// -----------------------------------------------------------------------------
+//
+void CDialogTimer::StartDialogTimer( TUint32 aRefreshTime )
+    {
+    FLOG( _L("Daemon: CDialogTimer::StartDialogTimer") );
+    // Check first that we do not have request outstanding.
+    if ( !IsActive() )
+        {
+        // Set time interval for dialog.
+        TimerSet( aRefreshTime );     
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::TimerSet()
+//
+// -----------------------------------------------------------------------------
+//
+void CDialogTimer::TimerSet( TUint32 aRefreshTime )
+    {  
+    FLOG_1( _L("Daemon: CDialogTimer::TimerSet time: %d"), aRefreshTime );
+    // Set timer interval.    
+    iRTimer.After( iStatus, aRefreshTime );               
+    // Set active. Start wait for timer.
+    SetActive();
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::RunL()
+//
+// -----------------------------------------------------------------------------
+//
+void CDialogTimer::RunL()
+    {
+    FLOG( _L("Daemon: CDialogTimer::RunL: Cancel waiting note") );
+    iDialog->CancelWaitingNote();
+    iDialog->CancelWaitingNoteForUninstaller();
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::DoCancel()
+//
+// -----------------------------------------------------------------------------
+//
+void CDialogTimer::DoCancel()
+    {
+    // Cancel outstanding request for a timer event.
+    iRTimer.Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::RunError()
+//
+// -----------------------------------------------------------------------------
+//
+TInt CDialogTimer::RunError( TInt aError )
+    {                        
+    return aError;       
+    }
+
+
 //  End of File  
--- a/appinstaller/AppinstUi/Daemon/Src/SilentLauncher.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/SilentLauncher.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -44,14 +44,51 @@
 //
 void CSilentLauncher::ConstructL()
     {
-    iOptions.iUpgrade = SwiUI::EPolicyNotAllowed;
-    iOptions.iOCSP = SwiUI::EPolicyNotAllowed;
-#ifndef RD_MULTIPLE_DRIVE 
-    iOptions.iDrive = 'E';
-#endif       
-    iOptions.iUntrusted = SwiUI::EPolicyNotAllowed; 
-    iOptions.iCapabilities = SwiUI::EPolicyNotAllowed;    
-    iOptionsPckg = iOptions;    
+    iConnected = EFalse;
+    
+    iSifOptions = Usif::COpaqueNamedParams::NewL();
+    iSifResults = Usif::COpaqueNamedParams::NewL();
+    
+    // Set needed parameters for silent install.
+    FLOG( _L("Daemon: CSilentLauncher::ConstructL: InstallSilently") );
+    iSifOptions->AddIntL( Usif::KSifInParam_InstallSilently, ETrue );
+
+    iSifOptions->AddIntL( Usif::KSifInParam_PerformOCSP, EFalse );   
+    // Note if upgrade is allowed, see NeedsInstallingL function.
+    iSifOptions->AddIntL( Usif::KSifInParam_AllowUpgrade, EFalse );
+    iSifOptions->AddIntL( Usif::KSifInParam_AllowUntrusted, EFalse );
+    iSifOptions->AddIntL( Usif::KSifInParam_GrantCapabilities, EFalse ); 
+    // Defined for the install.
+    iSifOptions->AddIntL( Usif::KSifInParam_InstallOptionalItems, ETrue );          
+    iSifOptions->AddIntL( Usif::KSifInParam_IgnoreOCSPWarnings, ETrue );            
+    iSifOptions->AddIntL( Usif::KSifInParam_AllowAppShutdown, ETrue );
+    iSifOptions->AddIntL( Usif::KSifInParam_AllowDownload, ETrue );
+    iSifOptions->AddIntL( Usif::KSifInParam_AllowOverwrite, ETrue );
+    iSifOptions->AddIntL( Usif::KSifInParam_AllowOverwrite, ETrue );
+    
+// TODO: is this defined in USIF?    
+    //iSifOptions->AddIntL( Usif::KSifInParam_Languages, NULL );
+// TODO: Not supported anymore after wk18, do we have some other param for this.
+    //iSifOptions->AddIntL( Usif::KSifInParam_DisplayPackageInfo, ETrue );
+    
+// TODO: remove old params.
+    /*
+    // Old swinstdefs.inl defines for install.   
+    iUpgrade( EPolicyAllowed ),
+    iOptionalItems( EPolicyAllowed ),
+    iOCSP( EPolicyAllowed ),    
+    iIgnoreOCSPWarnings( EPolicyAllowed ),
+    iUntrusted( EPolicyNotAllowed ),
+    iPackageInfo( EPolicyAllowed ),
+    iCapabilities( EPolicyAllowed ),
+    iKillApp( EPolicyAllowed ),
+    iDownload( EPolicyAllowed ),
+    iOverwrite( EPolicyAllowed ),
+    iDrive( 'C' ),
+    iLang( ELangNone ),
+    iUsePhoneLang( ETrue ),
+    iUpgradeData( EPolicyAllowed )
+    */        
     }
 
 // -----------------------------------------------------------------------------
@@ -67,38 +104,64 @@
     CleanupStack::Pop( self );
     return self;    
     }
-    
-// Destructor
+
+// -----------------------------------------------------------------------------
+// CSilentLauncher::~CSilentLauncher()
+// Destructor.
+// -----------------------------------------------------------------------------
+//    
 CSilentLauncher::~CSilentLauncher()
-    {
-    iLauncher.Close();
+    {   
+    delete iSifOptions;
+    delete iSifResults;
+    
+    if ( iConnected )
+        {
+        iSWInstallerFW.Close();
+        }
+    
+    delete iDrive;
     }
 
+
 // -----------------------------------------------------------------------------
 // CSilentLauncher::InstallL
-// Perform installation.
-// (other items were commented in a header).
+// Perform installation with file handle.
 // -----------------------------------------------------------------------------
 //
-void CSilentLauncher::InstallL( const TDesC& aFile, TRequestStatus& aStatus )
+void CSilentLauncher::InstallL( RFile& aFileHandle, 
+                                const TDesC& aFile, 
+                                TRequestStatus& aStatus )
     {
+    FLOG( _L("Daemon: CSilentLauncher::InstallL (aFileHandle) START") );
+    
     if ( !iConnected )
-        {
-        FLOG( _L("Daemon: Connect to installer server") );    
-        User::LeaveIfError( iLauncher.Connect() );    
-        FLOG( _L("Daemon: Connected to installer server") );
-        iConnected = ETrue;            
-        }
+         {
+         FLOG( _L("Daemon: Connect to sif installer server") );    
+         User::LeaveIfError( iSWInstallerFW.Connect() );             
+         iConnected = ETrue;            
+         }
         
-#ifdef RD_MULTIPLE_DRIVE 
-    FLOG( _L("Daemon: InstallL: Set drive for install") );   
-    // Set drive for installer.          
-    iOptions.iDrive = aFile[0];
-#endif                
-
-    // Launch the installation
+    // Set drive for installer.
+//    delete iDrive  
+//    iDrive = NULL;
+//    iDrive = HBufC::NewLC( 8 );
+//    TPtr drivePtr = iDrive->Des();
+//     
+//    TInt driveNumber = 0;
+//    TDriveInfo driveInfo;
+//    aFileHandle.Drive( driveNumber, driveInfo );
+// TODO: how is this used? Is this drive letter?      
+//    iSifOptions->AddStringL( Usif::KSifInParam_Drive , *drive );
+                                 
     FLOG( _L("Daemon: Launch install") );
-    iLauncher.SilentInstall( aStatus, aFile, iOptionsPckg );
+    iSWInstallerFW.Install( aFileHandle, 
+                           *iSifOptions, 
+                           *iSifResults,
+                           aStatus,
+                           ETrue );
+    
+    FLOG( _L("Daemon: CSilentLauncher::InstallL (aFileHandle) END") );       
     }
        
 // -----------------------------------------------------------------------------
@@ -109,8 +172,8 @@
 // 
 void CSilentLauncher::Cancel()
     {
-    FLOG( _L("Daemon: Install cancel requested") );        
-    iLauncher.CancelAsyncRequest( SwiUI::ERequestSilentInstall );   
+    FLOG( _L("Daemon: Cancel Install operation") );            
+    iSWInstallerFW.CancelOperation();
     }
 
 //  End of File  
--- a/appinstaller/AppinstUi/Daemon/Src/daemon.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/daemon.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -19,12 +19,24 @@
 #include "drivewatcher.h"
 #include "SWInstDebug.h"
 #include "securitypolicy.h"
-#include "sisregistrysession.h"
+
+//#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+#include <e32property.h>
+#include <connect/sbdefs.h>
+#include "../../../../installationservices/swtransactionservices/inc/stsrecovery.h"
+#include "swiobserverclient.h"
+//#else
+//#include "sisregistrysession.h"
+//#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 namespace Swi
 {
 // CDaemon
 
+// -----------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------
+//     
 /*static*/ CDaemon* CDaemon::NewL(MDaemonBehaviour& aBehaviour)
     {
     CDaemon* self=NewLC(aBehaviour);
@@ -32,6 +44,10 @@
     return self;
     }
 
+// -----------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------
+//     
 /*static*/ CDaemon* CDaemon::NewLC(MDaemonBehaviour& aBehaviour)
     {
     CDaemon* self=new(ELeave) CDaemon(aBehaviour);
@@ -39,7 +55,11 @@
     self->ConstructL();
     return self;
     }
-  
+
+// -----------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------
+//       
 CDaemon::~CDaemon()
     { 
     iPolicyLockFile.Close();
@@ -48,11 +68,19 @@
     iFs.Close();
     }
 
+// -----------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------
+//     
 CDaemon::CDaemon(MDaemonBehaviour& aBehaviour)
     : iBehaviour(aBehaviour)
     {
     }
 
+// -----------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------
+//     
 void CDaemon::ConstructL()
     {
     User::LeaveIfError(iFs.Connect());
@@ -64,6 +92,10 @@
     StartWatchersL();
     }
 
+// -----------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------
+//     
 void CDaemon::StartWatchersL()
     {
     FLOG( _L("Daemon: Start watchers") );        
@@ -152,6 +184,10 @@
     } // StartWatchersL()
 
 
+// -----------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------
+//     
 void CDaemon::LockSensitiveFiles()
     {
     TInt err = iPolicyLockFile.Open( 
@@ -162,6 +198,41 @@
     FLOG_1( _L("Daemon: Policy file lock error = %d."), err );  
     }
 
+//#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
+// -----------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------
+//     
+void CDaemon::StartRecoveryL()
+    {
+    FLOG( _L("Daemon: StartRecoveryL: Check to see if a recovery is needed.") );
+
+    // Check to see if a backup is in progress...
+    TInt backup = 0;
+    User::LeaveIfError( RProperty::Get( KUidSystemCategory, conn::KUidBackupRestoreKey,backup ) );
+
+    // if no backup or restore is in progress...
+    if( backup == conn::EBURUnset || ( backup == ( conn::EBURNormal | conn::ENoBackup ) ) )
+        {
+        // no recovery attempt is made during backup/restore as recovery may seriously affect
+        // the file system, which might impact backup/restore, recovery will be made at next bootup
+        Usif::RStsRecoverySession stsRecoverySession;
+        // A recovery failure should not affect Daemon start up.
+        TRAPD( err, stsRecoverySession.RollbackAllPendingL() );
+        if( err != KErrNone )
+            {
+            FLOG_1( _L("CDaemon::StartRecoveryL() - STS server failed to recover transactions. Error code: %d"), err );
+            }
+        // Start SWI Observer so that it can process the log files left from the previous session.
+        RSwiObserverSession swiObserver;
+        swiObserver.ProcessLogsL( iFs );
+        swiObserver.Close();
+        }
+    }
+
+/*
+//#else
   
 void CDaemon::StartRecoveryL()
     { 
@@ -178,4 +249,7 @@
     FLOG( _L("Daemon: StartRecoveryL: Recovery check finished.") ); 
     } // StartRecoveryL()
 
+#endif  // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+*/
+
 } // namespace Swi
--- a/appinstaller/AppinstUi/Daemon/Src/daemonbehaviour.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/daemonbehaviour.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -15,6 +15,12 @@
 *
 */
 
+#include <usif/scr/scr.h>
+#include <usif/scr/scrcommon.h>
+#include <usif/scr/screntries.h>
+#include <apgcli.h>    // RApaSession
+#include <apgupdate.h> // TApaAppUpdateInfo
+
 #include "daemonbehaviour.h"
 #include "swispubsubdefs.h"
 #include "recsisx.h"
@@ -22,275 +28,512 @@
 #include "SWInstDebug.h"
 #include "sisregistryentry.h"
 
+using namespace Swi;
 
-namespace Swi
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::NewL
+// -----------------------------------------------------------------------
+//    
+CDaemonBehaviour* CDaemonBehaviour::NewL( CProgramStatus& aMainStatus )
     {
+    CDaemonBehaviour* self = NewLC( aMainStatus );
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::NewLC
+// -----------------------------------------------------------------------
+//
+CDaemonBehaviour* CDaemonBehaviour::NewLC( CProgramStatus& aMainStatus )
+    {
+    CDaemonBehaviour* self = new (ELeave) CDaemonBehaviour;
+    CleanupStack::PushL(self);
+    self->ConstructL( aMainStatus );
+    return self;  
+    }
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::ConstructL
+// -----------------------------------------------------------------------
+//        
+void CDaemonBehaviour::ConstructL( CProgramStatus& aMainStatus )
+    {
+    User::LeaveIfError(iFs.Connect());
+    User::LeaveIfError(iFs.ShareProtected());
+    
     // For uninstaller
-    CDaemonBehaviour* CDaemonBehaviour::NewL( CProgramStatus& aMainStatus )
-        {
-        CDaemonBehaviour* self = NewLC( aMainStatus );
-        CleanupStack::Pop(self);
-        return self;
-        }
-  
-    CDaemonBehaviour* CDaemonBehaviour::NewLC( CProgramStatus& aMainStatus )
-        {
-        CDaemonBehaviour* self = new (ELeave) CDaemonBehaviour;
-        CleanupStack::PushL(self);
-        self->ConstructL( aMainStatus );
-        return self;  
-        }
-    
-    void CDaemonBehaviour::ConstructL( CProgramStatus& aMainStatus )
+    iSisInstaller = CSisInstaller::NewL( this, aMainStatus );
+    // Create plugin
+    TRAP_IGNORE( iSwiDaemonPlugin = CSwiDaemonPlugin::NewL() );   
+    }
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::~CDaemonBehaviour
+// -----------------------------------------------------------------------
+//      
+CDaemonBehaviour::~CDaemonBehaviour()
+    {
+    if ( iSwiDaemonPlugin )
         {
-        User::LeaveIfError(iFs.Connect());
-        User::LeaveIfError(iFs.ShareProtected());
-        
-        // For uninstaller
-        iSisInstaller = CSisInstaller::NewL( this, aMainStatus );
-        // Create plugin
-        TRAP_IGNORE( iSwiDaemonPlugin = CSwiDaemonPlugin::NewL() );   
-        }
-  
-    CDaemonBehaviour::~CDaemonBehaviour()
+        delete iSwiDaemonPlugin;
+        REComSession::FinalClose();
+        }   
+    delete iSisInstaller;
+    iSisInstaller = NULL;
+    iFs.Close();                
+    iDriveArray.Close();        
+    }
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::StartupL
+// -----------------------------------------------------------------------
+//         
+TBool CDaemonBehaviour::StartupL()
+    {
+    // Return state of Startup
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::MediaChangeL
+// -----------------------------------------------------------------------
+//     
+void CDaemonBehaviour::MediaChangeL(TInt aDrive, TChangeType aChangeType)
+    {
+    FLOG_1( _L("Daemon: MediaChangeL: Media change %d"), aDrive );
+    RSisRegistryWritableSession registrySession;
+    
+    User::LeaveIfError( registrySession.Connect() );
+    CleanupClosePushL( registrySession );
+    
+    
+    if ( aChangeType==EMediaInserted )
         {
-        if ( iSwiDaemonPlugin )
+        FLOG( _L("Daemon: MediaChangeL: Media inserted") ); 
+        TInt err = KErrNone;
+        // Notify SCR and AppArc for media change.
+        TRAP( err, UpdateComponentStatusL( aChangeType, aDrive ) );
+        FLOG_1( _L("Daemon: UpdateComponentStatusL err = %d"), err );
+
+        // We need call sis registry since this call will
+        // activate sis registry to clean uninstalled components
+        // from inserted media.
+        registrySession.AddDriveL( aDrive );
+                                                
+        // Scan directory on the card and run pre-installed through SWIS
+        FLOG( _L("Daemon: MediaChangeL: Process preinstalled files") );
+        ProcessPreinstalledFilesL( aDrive );  
+        FLOG_1( _L("Daemon: MediaChangeL: StartInstalling drive: %d"), aDrive );
+        iSisInstaller->StartInstallingL();
+                      
+        // Add inserted media drive to drive array.                     
+        if ( iDriveArray.Find(aDrive) == KErrNotFound )
+            {                
+            iDriveArray.AppendL(aDrive); 
+            }           
+        }
+    else if (aChangeType==EMediaRemoved)
+        {
+        FLOG( _L("Daemon: MediaChangeL: Media removed") );       
+        TInt err = KErrNone;           
+        // Notify SCR and AppArc for media change.
+        TRAP( err, UpdateComponentStatusL( aChangeType, aDrive ) );
+        FLOG_1( _L("Daemon: UpdateComponentStatusL err = %d"), err );
+ 
+        // Get Installer state.                   
+        TBool installerRunning = iSisInstaller->IsInstalling();
+        FLOG_1( _L("Daemon: MediaChangeL: IsInstalling = %d"), installerRunning );
+        
+        FLOG( _L("Daemon: MediaChangeL: Cancel install process") );
+        // Cancel all requests for install
+        iSisInstaller->Cancel();                       
+    
+        // Notify plugin
+        if( iSwiDaemonPlugin )
             {
-            delete iSwiDaemonPlugin;
-            REComSession::FinalClose();
-            }   
-        delete iSisInstaller;
-        iSisInstaller = NULL;
-        iFs.Close();  
+            TInt index = iDriveArray.Find(aDrive);
+            iSwiDaemonPlugin->MediaRemoved(index);
+            }
+    
+        // Get index of removed drive from array
+        TInt index = iDriveArray.Find(aDrive);
+    
+        if ( index > KErrNotFound )
+            {
+            iDriveArray.Remove(index); 
+            iDriveArray.Compress();   
+            }
                 
-#ifdef RD_MULTIPLE_DRIVE    
-        iDriveArray.Close();
-#endif        
+        // Continue installing from other drives if needed.
+        if ( installerRunning )
+            {
+            FLOG( _L("Daemon: MediaChangeL: Continue installing other drives") );
+            // Get count of inserted drives.
+            TInt count = iDriveArray.Count();
+            FLOG_1( _L("Daemon: Drive count = %d"), count );        
+            if ( count )            
+                {
+                // Find packages for other drives.
+                for(index = 0; index < count; index++ )
+                    {                   
+                    ProcessPreinstalledFilesL(iDriveArray[index]);                                        
+                    }
+                // Start installing.
+                FLOG( _L("Daemon: MediaChangeL: StartInstallingL") );
+                iSisInstaller->StartInstallingL();
+                }                
+            }                      
         }
     
-    // from MDaemonBehaviour
-    TBool CDaemonBehaviour::StartupL()
-        {
-        // Return state of Startup
-        return ETrue;
-        }
+    CleanupStack::PopAndDestroy(&registrySession);
+    }
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::ProcessPreinstalledFilesL
+// -----------------------------------------------------------------------
+//          
+void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive)
+    {
+    FLOG_1( _L("Daemon: ProcessPreinstalledFilesL: Drive index: %d"), 
+            aDrive );
+     _LIT( KDaemonPrivatePath,":\\private\\10202dce\\" );
+    
+    // For uninstaller
+    // Set on installing mode.
+    iGeneralProcessStatus = EStateInstalling; 
+    FLOG_1( _L("[CDaemonBehaviour] iGeneralProcessStatus = %d"), 
+    iGeneralProcessStatus );
+    
+    ProcessPreinstalledFilesL(aDrive, KDaemonPrivatePath);
+    iStartNotified = EFalse;
+    iDrive = aDrive;    
+    FLOG( _L("Daemon: ProcessPreInstalledFilesL END") );
+    }
 
-    void CDaemonBehaviour::MediaChangeL(TInt aDrive, TChangeType aChangeType)
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::ProcessPreinstalledFilesL
+// -----------------------------------------------------------------------
+//        
+void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive, const TDesC& aDirectory)
+    {    
+    TPath preInstalledPath;
+    TChar drive;
+    RFs::DriveToChar(aDrive, drive);
+    preInstalledPath.Append(drive);
+    preInstalledPath.Append(aDirectory);
+    
+    FLOG_1( _L("Daemon: ProcessPreInstalledFilesL Getting dir %S"), &preInstalledPath );
+    CDir* dir = NULL;
+    TInt err = iFs.GetDir( preInstalledPath, KEntryAttNormal, ESortNone, dir ); 
+    if ( err != KErrNone && err != KErrPathNotFound )
         {
-        FLOG_1( _L("Daemon: Media change %d"), aDrive );
-        RSisRegistryWritableSession registrySession;
-        
-        User::LeaveIfError(registrySession.Connect());
-        CleanupClosePushL(registrySession);
-        
-        if (aChangeType==EMediaInserted)
+        FLOG_1( _L("Daemon: ProcessPreInstalledFilesL GetDir with error %d"), err );
+        User::Leave(err);
+        }
+    if(dir)
+        {
+        // dir will only exist if GetDir succeeded
+        CleanupStack::PushL(dir);
+        for(TInt i = 0; i < dir->Count(); i++)
             {
-            FLOG( _L("Daemon: Media inserted") );  
-            FLOG( _L("Daemon: Media change: Update sis registry") );            
-            // notify IAR
-            // Error ou1cimx1#212652
-            // Note SWI Daemon needs to notify sis registry from
-            // media change. Otherwice registry is not updated
-            // and e.g. IsPresentL function will give false results.
-            // Note also that this function should be called before
-            // ProcessPreinstalledFilesL in SWI Daemon.            
-            registrySession.AddDriveL(aDrive);
-                                                
-            // Scan directory on the card and run pre-installed through SWIS
-            FLOG( _L("Daemon: Media change: Process preinstalled files") );
-            ProcessPreinstalledFilesL(aDrive);            
-        
-#ifdef RD_MULTIPLE_DRIVE   
-            // Add inserted media drive to drive array.                     
-            if ( iDriveArray.Find(aDrive) == KErrNotFound )
-                {                
-                iDriveArray.AppendL(aDrive); 
-                }      
-#endif      
+            const TEntry &entry = (*dir)[i];
+            if(!entry.IsDir())
+                {
+                TFileName fileName(preInstalledPath);
+                fileName.Append(entry.iName);                
+                // Add files to sis installer.
+                iSisInstaller->AddFileToInstallL(fileName);
+                }
             }
-        else if (aChangeType==EMediaRemoved)
-            {
-            FLOG( _L("Daemon: Media removed") ); 
-        
-#ifdef RD_MULTIPLE_DRIVE     
-            // Get Installer state.                   
-            TBool installerRunning = iSisInstaller->IsInstalling();                        
-#endif 
-        
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK                                           
-            // notify IAR
-            // Note SWI Daemon need to notify sis registry from
-            // media change.            
-            registrySession.RemoveDriveL(aDrive);
-#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-        
-            // Cancel all requests for install
-            iSisInstaller->Cancel();
-        
-#ifdef RD_MULTIPLE_DRIVE
-            // Notify plugin
-            if(iSwiDaemonPlugin)
-                {
-                TInt index = iDriveArray.Find(aDrive);
-                iSwiDaemonPlugin->MediaRemoved(index);
-                }
-#else
-            // Notify plugin
-            if(iSwiDaemonPlugin)
-                {
-                iSwiDaemonPlugin->MediaRemoved(aDrive);
-                }
-#endif //RD_MULTIPLE_DRIVE            
+        CleanupStack::PopAndDestroy(dir);
+        }
+    }
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::GetProcessStatus
+// -----------------------------------------------------------------------
+//     
+TInt& CDaemonBehaviour::GetProcessStatus()
+    {
+    return iGeneralProcessStatus;
+    }
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::SetProcessStatus
+// -----------------------------------------------------------------------
+//     
+void CDaemonBehaviour::SetProcessStatus( TInt aStatus )
+    {
+    iGeneralProcessStatus = aStatus;
+    }     
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::DoNotifyMediaProcessingComplete
+// -----------------------------------------------------------------------
+//      
+void CDaemonBehaviour::DoNotifyMediaProcessingComplete()
+    {
+    if ( iSwiDaemonPlugin && iStartNotified )
+        {
+        iSwiDaemonPlugin->MediaProcessingComplete();
+        }
+    }
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::IsPlugin
+// -----------------------------------------------------------------------
+//         
+// For plugin support
+TBool CDaemonBehaviour::IsPlugin()
+    {        
+    if ( iSwiDaemonPlugin )
+        {
+        return ETrue;
+        }        
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::NotifyPlugin
+// -----------------------------------------------------------------------
+//        
+// For plugin support
+void CDaemonBehaviour::NotifyPlugin()
+    {
+    FLOG( _L("Daemon: NotifyPlugin"));
+    if ( !iStartNotified )
+        {
+        FLOG_1( _L("Daemon: MediaProcessingStart for drive = %d"), iDrive );
+        iSwiDaemonPlugin->MediaProcessingStart( iDrive );
+        iStartNotified = ETrue;
+        }    
+    }
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::RequestPluginInstall
+// -----------------------------------------------------------------------
+//         
+void CDaemonBehaviour::RequestPluginInstall( TDesC& aSisFile )
+    {
+    // Note We will open file in here but that is only because
+    // plug-in interface has been designed this way. Original
+    // Symbian SWI daemon did use RApaLsSession for installing
+    // and thus RFile was open already. 
+    // Since current SWI Daemon does use SWI API it doesn't 
+    // open files and thus we need to open the file in here.        
+    FLOG( _L("Daemon: RequestPluginInstall "));
+            
+    RFile file;
+    User::LeaveIfError( file.Open( 
+            iFs, aSisFile, EFileRead | EFileShareReadersOnly ) );
+    CleanupClosePushL( file );
+    
+    iSwiDaemonPlugin->RequestInstall( file );
+    
+    // close file, original SWI Daemon do not leave file open.
+    CleanupStack::PopAndDestroy( &file ); 
+    }
+ 
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::UpdateComponentStatusL
+// -----------------------------------------------------------------------
+//         
+void CDaemonBehaviour::UpdateComponentStatusL( TChangeType aChangeType, 
+                                               TInt aDrive )
+    {
+    FLOG( _L("Daemon: UpdateComponentStatus") ); 
+            
+    Usif::RSoftwareComponentRegistry scrServer;       
+    User::LeaveIfError( scrServer.Connect() );
+    CleanupClosePushL( scrServer );
+            
+    // Filter all other component types except sisx.
+    Usif::CComponentFilter* filter = Usif::CComponentFilter::NewLC();        
+    filter->SetSoftwareTypeL( Usif::KSoftwareTypeNative );
         
-#ifdef RD_MULTIPLE_DRIVE
-            // Get index of removed drive from array
-            TInt index = iDriveArray.Find(aDrive);
-        
-            if ( index > KErrNotFound )
-                {
-                iDriveArray.Remove(index); 
-                iDriveArray.Compress();   
-                }
+    RArray<Usif::TComponentId> componentIdList;
+    CleanupClosePushL( componentIdList );
+    
+    // Get list of all native (sisx) installed packages. 
+    scrServer.GetComponentIdsL( componentIdList, filter  );
+    FLOG_1( _L("Daemon: componentIdList count: %d"),componentIdList.Count() ); 
+   
+    if ( componentIdList.Count() )
+        {
+        RArray<TApaAppUpdateInfo> appInfoArray;         
+        CleanupClosePushL( appInfoArray );
+        FLOG_1( _L("Daemon: target drive: %d"), aDrive );
+                              
+#ifdef _DEBUG
+        TChar targetDrive;
+        iFs.DriveToChar( aDrive, targetDrive );
+        HBufC* tarceBuf = HBufC::NewL( 16 );
+        TPtr bufPtr = tarceBuf->Des();
+        bufPtr.Append( targetDrive );
+        FLOG_1( _L("Daemon: target drive: %S"), &bufPtr ); 
+        delete tarceBuf;
+#endif         
+    
+        FLOG( _L("Daemon: Check all SCR native components") ); 
+        // Check all components in SCR. If media is removed/inserted
+        // change status flag in SCR and in AppArc.
+        for ( TInt index=0; index < componentIdList.Count(); index++ )
+            {  
+            Usif::TComponentId componentId( componentIdList[index] );
+            FLOG_1( _L("Daemon: componentId: %d"), componentId ); 
         
-            // Continue installing from other drives if needed.
-            if ( installerRunning )
-                {                                     
-                // Get count of inserted drives.
-                TInt count = iDriveArray.Count();
-                        
-                if ( count )            
-                    {                             
-                    for(index = 0; index < count; index++ )
-                        {                                        
-                        ProcessPreinstalledFilesL(iDriveArray[index]);
-                        iSisInstaller->StartInstallingL();                
-                        }
-                    }                
-                }           
-#endif            
-            }
-        
-        CleanupStack::PopAndDestroy(&registrySession);
-        }
-      
-    void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive)
-        {
-        _LIT(KDaemonPrivatePath,":\\private\\10202dce\\");
+            // Check that package is not in ROM. If package is in rom
+            // it can not be removed/not present.
+            TBool inRom = scrServer.IsComponentOnReadOnlyDriveL( componentId );
+            FLOG_1( _L("Daemon: IsComponentOnReadOnlyDriveL: %d"), inRom ); 
+            
+            if ( !inRom )
+                {              
+                UpdateStatusL( scrServer, 
+                               componentId, 
+                               aChangeType,
+                               aDrive,
+                               appInfoArray );
+                }                            
+            } // for loop
         
-#ifndef RD_MULTIPLE_DRIVE
-        iSisInstaller->Cancel();
-#endif      
-        // For uninstaller
-        // Set on installing mode.
-        iGeneralProcessStatus = EStateInstalling; 
-        FLOG_1( _L("[CDaemonBehaviour] iGeneralProcessStatus = %d"), 
-        iGeneralProcessStatus );
-        
-        ProcessPreinstalledFilesL(aDrive, KDaemonPrivatePath);
-        iStartNotified = EFalse;
-        iDrive = aDrive;    
-        iSisInstaller->StartInstallingL();
-        }
+        FLOG_1( _L("Daemon: appInfoArray.Count = %d"), appInfoArray.Count() );         
+        // Check do we have updated some application info.
+        if ( appInfoArray.Count() )
+            {             
+            // Update AppArc list after we have all application 
+            // uids/status in array. 
+            FLOG( _L("Daemon: Update AppArc") );
+            RApaLsSession appArcSession;
+            TInt err = appArcSession.Connect();
+            FLOG_1( _L("Daemon: appArcSession.Connect err = %d"), err ); 
+            if ( !err )
+                {
+                CleanupClosePushL( appArcSession );            
+                FLOG( _L("Daemon: UpdateAppListL") ); 
+                appArcSession.UpdateAppListL( appInfoArray );            
+                CleanupStack::PopAndDestroy(); // appArcSession                 
+                }
+            }
+        CleanupStack::PopAndDestroy( &appInfoArray );
+        } // if componentList.Count()
+             
+    CleanupStack::PopAndDestroy( &componentIdList ); //componentIDList.Close();
+    CleanupStack::PopAndDestroy( filter ); 
+    CleanupStack::PopAndDestroy( &scrServer );  
+    FLOG( _L("Daemon: UpdateComponentStatus END") ); 
+    } 
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::UpdateStatusL
+// -----------------------------------------------------------------------
+//    
+void CDaemonBehaviour::UpdateStatusL( 
+    Usif::RSoftwareComponentRegistry& aScrServer,
+    Usif::TComponentId aComponentId,
+    TChangeType aChangeType,
+    TInt aTargetDrive,
+    RArray<TApaAppUpdateInfo>& aAppInfoArray )     
+    {
+    FLOG( _L("Daemon: CDaemonBehaviour::UpdateStatusL start") ); 
     
-    void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive, const TDesC& aDirectory)
-        {
-        FLOG( _L("Daemon: ProcessPreInstalledFilesL") );
-        TPath preInstalledPath;
-        TChar drive;
-        RFs::DriveToChar(aDrive, drive);
-        preInstalledPath.Append(drive);
-        preInstalledPath.Append(aDirectory);
+    Usif::CComponentEntry* entry = Usif::CComponentEntry::NewL();
+    CleanupStack::PushL( entry );
         
-        FLOG_1( _L("Daemon: ProcessPreInstalledFilesL Getting dir %S"), &preInstalledPath );
-        CDir* dir = NULL;
-        TInt err = iFs.GetDir(preInstalledPath, KEntryAttNormal, ESortNone, dir); 
-        if (err != KErrNone && err != KErrPathNotFound)
-            {
-            FLOG_1( _L("Daemon: ProcessPreInstalledFilesL GetDir with error %d"), err );
-            User::Leave(err);
-            }
-        if(dir)
-            {
-            // dir will only exist if GetDir succeeded
-            CleanupStack::PushL(dir);
-            for(TInt i = 0; i < dir->Count(); i++)
-                {
-                const TEntry &entry = (*dir)[i];
-                if(!entry.IsDir())
+    TInt err = KErrNone;
+    TRAP( err, aScrServer.GetComponentL( aComponentId, 
+                                         *entry, 
+                                         Usif::KUnspecifiedLocale ) );    
+    FLOG_1( _L("Daemon: GetComponentL TRAP err = %d"), err );
+    
+    // If we get error let's not stop the loop.
+    if ( !err )
+        { 
+        TBool isInTargetDrive = EFalse;
+        // Get all component drives.
+        TDriveList driveList;                
+        driveList = entry->InstalledDrives();           
+
+        FLOG( _L("Daemon: Check all drives for this component") ); 
+        // Go through all drives which have files for this component.
+        for ( TInt i = 0; i < KMaxDrives; i++ )
+            {                
+            if ( driveList[i] != 0 )
+                {                                           
+                FLOG_1( _L("Daemon: Found drive: %d"), i ); 
+                
+                if ( aTargetDrive == i )
                     {
-                    TFileName fileName(preInstalledPath);
-                    fileName.Append(entry.iName);
-                    iSisInstaller->AddFileToInstallL(fileName);
+                    // Ok we have files in this target drive.
+                    isInTargetDrive = ETrue;
+                    FLOG( _L("Daemon: Component has files in target drive") ); 
                     }
                 }
-            CleanupStack::PopAndDestroy(dir);
-            }
-        }
-
-    // For uninstaller
-    TInt& CDaemonBehaviour::GetProcessStatus()
-        {
-        return iGeneralProcessStatus;
-        }
-
-    // For uninstaller
-    void CDaemonBehaviour::SetProcessStatus( TInt aStatus )
-        {
-        iGeneralProcessStatus = aStatus;
-        }     
-  
-    // For plugin support
-    void CDaemonBehaviour::DoNotifyMediaProcessingComplete()
-        {
-        if ( iSwiDaemonPlugin && iStartNotified )
+            } // for
+                            
+        // Check if component or part of it is in the media.
+        if ( isInTargetDrive )
             {
-            iSwiDaemonPlugin->MediaProcessingComplete();
-            }
-        }
-    
-    // For plugin support
-    TBool CDaemonBehaviour::IsPlugin()
-        {        
-        if ( iSwiDaemonPlugin )
-            {
-            return ETrue;
-            }        
-        return EFalse;
-        }
+            // We need to update applications status to AppArc when
+            // there is some media change. AppArc needs application
+            // UID (not package UID) so we need to get all app. UIDs
+            // from the package and set them to present or not present.
+            
+            FLOG( _L("Daemon: Create application status for AppArc") );
+            FLOG( _L("Daemon: Get applications UIDs from SCR") );
+            RArray<TUid> appUidArray;
+            CleanupClosePushL( appUidArray );
+             
+            TRAP( err, aScrServer.GetAppUidsForComponentL( aComponentId, appUidArray ) );
+            FLOG_1( _L("Daemon: GetAppUidsForComponentL TRAP err = %d"), err );                        
+            FLOG_1( _L("Daemon: UID array count = %d"), appUidArray.Count() );
+            
+            for (TInt index = 0; index < appUidArray.Count(); index++)
+                {
+                FLOG_1( _L("Daemon: Add app UID = 0x%x"), 
+                 appUidArray[index].iUid );                
+                
+                TApaAppUpdateInfo appInfo;
+                appInfo.iAppUid = appUidArray[index]; 
+                
+                if ( aChangeType == EMediaInserted  )
+                    {
+                    appInfo.iAction = TApaAppUpdateInfo::EAppPresent;
+                    FLOG( _L("Daemon: Set app = EAppPresent") );
+                    }
+                else
+                    {
+                    appInfo.iAction = TApaAppUpdateInfo::EAppNotPresent;
+                    FLOG( _L("Daemon: Set app = EAppNotPresent") );
+                    }
+                
+                aAppInfoArray.Append( appInfo );   
+                }                           
+            CleanupStack::PopAndDestroy(&appUidArray);
+// Set do not work, it will leave.
+/*            
+            FLOG( _L("Daemon: Set component status to SCR") );
+            // Update component flag to SCR. 
+            if ( aChangeType == EMediaInserted )
+                {  
+                FLOG( _L("Daemon: Set component present = TRUE") );                                  
+                TRAP( err, aScrServer.SetIsComponentPresentL( aComponentId, ETrue ) );                                                                            
+                }
+            else if ( aChangeType==EMediaRemoved )
+                {
+                FLOG( _L("Daemon: Set component present = FALSE") );                              
+                TRAP( err, aScrServer.SetIsComponentPresentL( aComponentId, EFalse ) );                                                                               
+                }            
+            FLOG_1( _L("Daemon: SetIsComponentPresentL TRAP err = %d"), err );
+*/                                                          
+            }   // if isInTargetDrive        
+        }   // if err
     
-    // For plugin support
-    void CDaemonBehaviour::NotifyPlugin()
-        {
-        FLOG( _L("Daemon: NotifyPlugin"));
-        if ( !iStartNotified )
-            {
-            FLOG_1( _L("Daemon: MediaProcessingStart for drive = %d"), iDrive );
-            iSwiDaemonPlugin->MediaProcessingStart( iDrive );
-            iStartNotified = ETrue;
-            }    
-        }
+    CleanupStack::PopAndDestroy( entry );
+    entry = NULL;
     
-    // For plugin support
-    void CDaemonBehaviour::RequestPluginInstall( TDesC& aSisFile )
-        {
-        // Note We will open file in here but that is only because
-        // plug-in interface has been designed this way. Original
-        // Symbian SWI daemon did use RApaLsSession for installing
-        // and thus RFile was open already. 
-        // Since current SWI Daemon does use SWI API it doesn't 
-        // open files and thus we need to open the file in here.        
-        FLOG( _L("Daemon: RequestPluginInstall "));
-                
-        RFile file;
-        User::LeaveIfError( file.Open( 
-                iFs, aSisFile, EFileRead | EFileShareReadersOnly ) );
-        CleanupClosePushL( file );
-        
-        iSwiDaemonPlugin->RequestInstall( file );
-        
-        // close file, original SWI Daemon do not leave file open.
-        CleanupStack::PopAndDestroy( &file ); 
-        }
-                                        
-    } // namespace Swi
+    FLOG( _L("Daemon: CDaemonBehaviour::UpdateStatusL end") ); 
+    }
+
 //EOF
--- a/appinstaller/AppinstUi/Daemon/Src/daemoninstaller.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/daemoninstaller.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,7 +15,6 @@
 *
 */
 
-
 #include "daemoninstaller.h"
 #include "DialogWrapper.h"
 #include "swispubsubdefs.h"
@@ -43,12 +42,15 @@
 
 const static TInt KInstallRetryWaitTime = 10000000; // 10 secs
 // For uninstaller
-const static TInt KWaitUninstallerTime = 1000000; // 1 secs  
+const static TInt KWaitUninstallerTime = 1000000; // 1 secs 
 
 _LIT(KMCSisInstaller,"Daemon-Installer"); // Minor-Component name
 
+
+// -----------------------------------------------------------------------
 // Two phased construction
-
+// -----------------------------------------------------------------------
+// 
 CSisInstaller* CSisInstaller::NewL(    
    MDaemonInstallBehaviour* aDaemonBehaviour, 
    CProgramStatus& aMainStatus)
@@ -60,8 +62,10 @@
     return self;
     }
 	
+// -----------------------------------------------------------------------
 // Install Request constructor
-	
+// -----------------------------------------------------------------------
+//	
 CSisInstaller::CSisInstaller( MDaemonInstallBehaviour* aDaemonBehaviour ) 
     : CActive(CActive::EPriorityStandard),
     iDaemonBehaviour( aDaemonBehaviour ),
@@ -69,31 +73,40 @@
     iFileIndex(0),
     iInstallErr( KErrNone )
     {
-    CActiveScheduler::Add(this);
-#ifdef RD_MULTIPLE_DRIVE      
-    iInstallerState = EDSisInstallerStateIdle;
-#endif       
+    CActiveScheduler::Add(this);    
+    iInstallerState = EDSisInstallerStateIdle;       
     }
 	
-// Install Request destructor
-
+// -----------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------
+//
 CSisInstaller::~CSisInstaller()
     {
+    FLOG( _L("Daemon: CSisInstaller::~CSisInstaller") );
     Cancel();
     iTimer.Close();
     iFilesToInstall.ResetAndDestroy();
-    iFilesToInstall.Close();
+    iFilesToInstall.Close();    
     delete iInstallLauncher;
-    delete iDialogs;  
-    iFs.Close();
-    iApaSession.Close();    
+    delete iDialogs;      
     delete iPreviouslyInstalledAppsCache;
     delete iInstallationFailedAppsCache;  
-    delete iShutdownWatcher;  
+    delete iShutdownWatcher;
+    
+    if ( iFileOpen )
+        {
+        iSisFileHandle.Close();   
+        }    
+    
+    iFs.Close();
+    iApaSession.Close();        
     }
 	
+// -----------------------------------------------------------------------
 // 2nd phase construction
-
+// -----------------------------------------------------------------------
+//
 void CSisInstaller::ConstructL( CProgramStatus& aMainStatus )
     {
     User::LeaveIfError( iTimer.CreateLocal() );
@@ -104,16 +117,23 @@
     iPreviouslyInstalledAppsCache = CPreviouslyInstalledAppsCache::NewL();
     iInstallationFailedAppsCache = CInstallationFailedAppsCache::NewL();
     iShutdownWatcher = CShutdownWatcher::NewL( *this );
-    iShutdownWatcher->Start();
+    iShutdownWatcher->Start();        
+    iPercentValue = 0;
+    
     // For uninstaller
     // SisInstaller do not own this so do not delete.     
     iProgramStatus = &aMainStatus;  
-    iUpdateCache = ETrue;       
+    iUpdateCache = ETrue;    
+    iFileOpen = EFalse;    
+    iInstallLauncher = NULL;
     }
 		
+// -----------------------------------------------------------------------
+// CSisInstaller::AddFileToInstallL
 // Set the location of all sis files and the list of them
 // also take ownership of the pointers to memory
-		
+// -----------------------------------------------------------------------
+//		
 void CSisInstaller::AddFileToInstallL(const TDesC& aFileName)
     {
     HBufC* fileName = aFileName.AllocLC();
@@ -121,13 +141,17 @@
     CleanupStack::Pop( fileName );
     }
 	
+
+// -----------------------------------------------------------------------
+// CSisInstaller::StartInstallingL
 // Start the request to process the Sisx file
-
+// -----------------------------------------------------------------------
+//
 void CSisInstaller::StartInstallingL()
     {
     FLOG( _L("Daemon: StartInstallingL") );
 
-    if(!iFilesToInstall.Count())
+    if( !iFilesToInstall.Count() )
         {
         // For uninstaller
         // Check state, if installing change it to idle.
@@ -136,7 +160,7 @@
             FLOG( _L("Daemon: StartInstallingL: Set EStateIdle") );
             iProgramStatus->SetProgramStatusToIdle();
             }        
-        
+        FLOG( _L("Daemon: StartInstallingL: User::Leave(KErrAbort)") );
         User::Leave(KErrAbort);
         }
     
@@ -147,26 +171,37 @@
         {
         FLOG( _L("Daemon: StartInstallingL: Set EStateInstalling") );
         iProgramStatus->SetProgramStatus( EStateInstalling );
-        }         
-    FLOG_1( _L("[CSisInstaller] ConstructL iGeneralProcessStatus = %d"),
-            iGeneralProcessStatus );  
+        } 
+    
+    FLOG_1( _L("Daemon: iGeneralProcessStatus: %d"), iGeneralProcessStatus );     
+    FLOG_1( _L("Daemon: iInstallLauncher: 0x%x"),iInstallLauncher );  
         
-    if ( !iInstallLauncher )
+    if ( iInstallLauncher == NULL )
         {
-        iInstallLauncher = CSilentLauncher::NewL( iFs );
+        FLOG( _L("Daemon: Create iInstallLauncher") );
+        iInstallLauncher = CSilentLauncher::NewL( iFs );   
+        
+        // Update cache so we do not try to start install for
+        // components which are installed. This is done always
+        // when new install session is started (e.g. after mmc insert).
+        FLOG( _L("Daemon: StartInstallingL: Update installed cache") );
+        TRAP_IGNORE( iPreviouslyInstalledAppsCache->UpdateAllL() );
+        TRAP_IGNORE( iPreviouslyInstalledAppsCache->FlushToDiskL() );         
         }   
 
     if ( iState == EDSisInstallerStateIdle )
-        {
+        {                
         // Reset the error
-        iInstallErr = KErrNone;        
+        iInstallErr = KErrNone;           
         CompleteSelf();
         }
     }
     
-#ifdef RD_MULTIPLE_DRIVE 
+// -----------------------------------------------------------------------
+// CSisInstaller::IsInstalling
 // Returns state of Installer. 
-
+// -----------------------------------------------------------------------
+//
 TBool CSisInstaller::IsInstalling()
     {
     if ( iInstallerState == EDSisInstallerStateCompleted )
@@ -178,24 +213,33 @@
         return ETrue;
         }    
     }  
-#endif //RD_MULTIPLE_DRIVE       
-
+       
+// -----------------------------------------------------------------------
+// CSisInstaller::CompleteSelf
 // Complete the request manually
-		
+// -----------------------------------------------------------------------
+//		
 void CSisInstaller::CompleteSelf()
     {
+    FLOG( _L("Daemon: CSisInstaller::CompleteSelf") );
     if ( !IsActive() )
         {        
         TRequestStatus* status = &iStatus;
-        User::RequestComplete(status,KErrNone);
+        FLOG( _L("Daemon: CompleteSelf: RequestComplete") );
+        User::RequestComplete( status, KErrNone );
+        FLOG( _L("Daemon: CompleteSelf: SetActive") );
         SetActive();
         }    
     }
 
+// -----------------------------------------------------------------------
+// CSisInstaller::DoCancel
 // Cancel the active request
-
+// -----------------------------------------------------------------------
+//
 void CSisInstaller::DoCancel()
     {
+    FLOG( _L("Daemon: CSisInstaller::DoCancel") ); 
     iTimer.Cancel();
 
     iFileIndex = 0;
@@ -219,12 +263,16 @@
         }    
     }
 	
-// When the software installer has changed state
-// attemp to install a sisx file
-
+// -----------------------------------------------------------------------
+// CSisInstaller::RunL
+// When the software installer has changed state attemp to install a 
+// sisx file
+// -----------------------------------------------------------------------
+//
 void CSisInstaller::RunL()
-    {
-    FLOG_2( _L("Daemon: Installer RunL status:%d, state:%d"), iStatus.Int(), iState );                
+    {    
+    FLOG_1( _L("Daemon: Installer RunL status:%d"), iStatus.Int() );  
+    FLOG_1( _L("Daemon: Installer RunL state:%d"), iState );                
     
     // For uninstaller
     // Check that uninstaller is not running.
@@ -235,10 +283,8 @@
         TTimeIntervalMicroSeconds32 time( KWaitUninstallerTime );                        
         iTimer.After(iStatus,time);          
         // Set to idle, installer has not yet started.
-        iState = EDSisInstallerStateIdle;
- #ifdef RD_MULTIPLE_DRIVE                
-        iInstallerState = iState;
- #endif                                
+        iState = EDSisInstallerStateIdle;                
+        iInstallerState = iState;                                 
         SetActive();                                
         }    
     else
@@ -252,28 +298,41 @@
             // Reached when installation is completed
             case EDSisInstallerStateInstalling:
                 FLOG( _L("Daemon: RunL: EDSisInstallerStateInstalling") );
-                FLOG_1( _L("Daemon: Installation completed with %d"), iStatus.Int() );                    
-                // Installation is completed, check result
+                FLOG_1( _L("Daemon: Installation completed with %d"), 
+                        iStatus.Int() );                  
                 
+                // Installation is completed, check result                
                 if ( iStatus.Int() == SwiUI::KSWInstErrBusy )
                     {
                     FLOG( _L("Daemon: RunL: iStatus: KSWInstErrBusy") );
                     // User might be installing something, wait before retrying 
                     TTimeIntervalMicroSeconds32 time( KInstallRetryWaitTime );                        
                     iTimer.After(iStatus,time);
-                    iState = EDSisInstallerStateInstallerBusy;
-    #ifdef RD_MULTIPLE_DRIVE                
-                    iInstallerState = iState;
-    #endif                                
+                    iState = EDSisInstallerStateInstallerBusy;               
+                    iInstallerState = iState;                                  
                     SetActive();                        
                     break;                        
                     }                
-                else if ( (iStatus.Int() == SwiUI::KSWInstErrSecurityFailure && iInstallErr == KErrNone) ||
-                          (iStatus.Int() != KErrNone && iStatus.Int() != SwiUI::KSWInstErrSecurityFailure) )
+                else if ( (iStatus.Int() == SwiUI::KSWInstErrSecurityFailure && 
+                           iInstallErr == KErrNone) ||
+                          (iStatus.Int() != KErrNone && 
+                           iStatus.Int() != SwiUI::KSWInstErrSecurityFailure) )
                     {
-                    FLOG( _L("Daemon: RunL: iStatus: KSWInstErrSecurityFailure or error") );
+                    FLOG( _L("Daemon: RunL: iStatus: error of sec. failure") );
                     iInstallErr = iStatus.Int();                        
                     }
+                
+                // Close current sisx except if installer engine is busy.
+                // If installer is busy we will try again later.
+                if ( iStatus.Int() != SwiUI::KSWInstErrBusy )
+                    {
+                    if ( iFileOpen )
+                         {
+                         FLOG_1( _L("Daemon: RunL: Close File: %S"), &iSisFile );
+                         iSisFileHandle.Close();
+                         iFileOpen = EFalse;
+                         }    
+                    }
                     
                 // Catch all installation error from SwiUI and update cache.              
                 if ( iStatus.Int() != KErrNone )
@@ -282,10 +341,11 @@
                     if ( iCurrentPackageId != TUid::Uid( NULL ) )
                         {
                         FLOG( _L("Daemon: RunL: Add UID to cache.") );                    
-                        iInstallationFailedAppsCache->AddPackageUID( iCurrentPackageId ); 
+                        iInstallationFailedAppsCache->AddPackageUID( 
+                                iCurrentPackageId ); 
                         // Clear current UID                    
                         iCurrentPackageId = TUid::Null();                     
-                        }
+                        }                                                         
                     }  
                  else
                     {
@@ -293,7 +353,8 @@
                     if ( iCurrentPackageId != TUid::Uid( NULL ) )
                         {                
                         FLOG( _L("Daemon: RunL: Add UID to cache.") );
-                        iPreviouslyInstalledAppsCache->UpdateAddL( iCurrentPackageId );                        
+                        iPreviouslyInstalledAppsCache->UpdateAddL( 
+                                iCurrentPackageId );                        
                         // Clear current UID                    
                         iCurrentPackageId = TUid::Null(); 
                         }
@@ -303,11 +364,8 @@
                 if ( iFileIndex < iFilesToInstall.Count() )
                     {
                     // Kick of the next installation
-                    iState = EDSisInstallerStateIdle;
-    #ifdef RD_MULTIPLE_DRIVE                
-                    iInstallerState = iState;
-    #endif                
-                    
+                    iState = EDSisInstallerStateIdle;                  
+                    iInstallerState = iState;                                       
                     CompleteSelf();
                     }   
                 else
@@ -322,7 +380,17 @@
                 // Install a file
             case EDSisInstallerStateIdle:
                 {  
-                FLOG( _L("Daemon: RunL: EDSisInstallerStateIdle") );    
+                FLOG( _L("Daemon: RunL: EDSisInstallerStateIdle") );  
+                
+                // Make sure that current file is closed before we
+                // open new file handle.
+                if ( iFileOpen )
+                    {
+                    FLOG( _L("Daemon: RunL: StateIdle: CLOSE CURRENT FILE") );
+                    FLOG_1( _L("Daemon: RunL: Close File: %S"), &iSisFile );
+                    iSisFileHandle.Close();
+                    iFileOpen = EFalse;
+                    }    
                 
                 // Let's update installed apps cache so we do not give
                 // installed pacakges several time to plug-in. 
@@ -336,14 +404,36 @@
                     }
                 
                 if ( iFileIndex < iFilesToInstall.Count() )
-                    {             
+                    { 
+                    // Let's calc. values before index is updated.
+                    CalcPercentValue();
+                                                       
+                    // Get next sisx package from array.                 
                     iSisFile.Copy( *iFilesToInstall[iFileIndex] );
-                    ++iFileIndex;
-                               
-                    // No need to install if the package has been installed 
-                    // some time in the past
-                    if ( IsValidPackageL( iSisFile ) && NeedsInstallingL( iSisFile ) )
-                        { 
+                    ++iFileIndex;    
+                    
+                    FLOG_1( _L("Daemon: RunL: Open File: %S"), &iSisFile );
+                    TInt err = KErrNone;
+                    // Let's open the file in here bacause IsValidPackageL
+                    // needs to open the file anyway.
+                    err = iSisFileHandle.Open( 
+                                       iFs, 
+                                       iSisFile, 
+                                       EFileRead | EFileShareReadersOnly );                    
+                    
+                    if ( err )
+                        {
+                        FLOG_1( _L("Daemon: File open ERROR = %d"), err );
+                        iFileOpen = EFalse;                        
+                        } 
+                    else
+                        {
+                        iFileOpen = ETrue;                    
+                        }
+                    
+                    if ( iFileOpen && IsValidPackageL() && 
+                            NeedsInstallingL( iSisFile ) )
+                        {                                           
                         // If there is plugin for SWI Daemon then let's us it.
                         // Daemon will give all files to plug-in which will 
                         // handle installation. There is not feedback so SWI 
@@ -352,42 +442,48 @@
                             {
                             // Notify plug-in if not yet done.                                                                 
                             iDaemonBehaviour->NotifyPlugin();
-                            FLOG_1( _L("Daemon: Use plugin to install: %S"), &iSisFile );                             
-                            TRAP_IGNORE( iDaemonBehaviour->RequestPluginInstall( iSisFile ) );                                                                                  
+                            FLOG_1( _L("Daemon: Use plugin to install: %S"), 
+                                    &iSisFile );                             
+                            TRAP_IGNORE( iDaemonBehaviour->RequestPluginInstall( 
+                                    iSisFile ) );                                                                                  
                             
                             // Let's continue to give all packages to plug-in. 
-                            // Note that we do not have iStatus as this is not async. call 
-                            // so we can not use EDSisInstallerStateInstalling state.                             
-                            iState = EDSisInstallerStateIdle;                           
-        #ifdef RD_MULTIPLE_DRIVE                
+                            // Note that we do not have iStatus as this is not 
+                            // async. call so we can not use 
+                            // EDSisInstallerStateInstalling state.                             
+                            iState = EDSisInstallerStateIdle;                                                 
                             iInstallerState = iState;
-        #endif           
+                
                             // Plugin interface is not asyncronous. We need to 
                             // complete self to get all packages to plugin.                            
                             CompleteSelf(); 
                             }                            
                         else
-                            {                                                
-                            FLOG_1( _L("Daemon: Kick off the install for %S"), &iSisFile );
-                            iInstallLauncher->InstallL( iSisFile, iStatus );
-                            iDialogs->ShowWaitingNoteL(); 
-                            iState = EDSisInstallerStateInstalling;
-        #ifdef RD_MULTIPLE_DRIVE                
-                            iInstallerState = iState;
-        #endif                                            
-                            SetActive();
+                            {  
+                            // Start also the universal indicator.
+                            TRAP_IGNORE( iDialogs->ActivateIndicatorL( iPercentValue ) );
+                            // Start to show progress dialog. Dialog is shown 
+                            // only 3 sec. 
+                            TRAP_IGNORE( iDialogs->ShowWaitingNoteL() );    
+                                                        
+                            FLOG_1( _L("Daemon: Start install for %S"), &iSisFile );
+                                                                                                                                                                                                                                                   
+                            iInstallLauncher->InstallL( iSisFileHandle, 
+                                                        iSisFile, 
+                                                        iStatus );
+                                                        
+                            iState = EDSisInstallerStateInstalling;                       
+                            iInstallerState = iState;                                                   
+                            SetActive();                               
                             }
                         }               
                     else
                         {                  
-                        FLOG_1( _L("Daemon: No need to install %S"), &iSisFile );                                
-                        iState = EDSisInstallerStateIdle;
-    #ifdef RD_MULTIPLE_DRIVE                
-                        iInstallerState = iState;
-    #endif                    
+                        FLOG_1( _L("Daemon: NOT INSTALLING: %S"), &iSisFile );                                                 
+                        iState = EDSisInstallerStateIdle;                
+                        iInstallerState = iState;                   
                         // Clear current pkg UID                    
-                        iCurrentPackageId = TUid::Null();                                   
-                        
+                        iCurrentPackageId = TUid::Null();                                                           
                         CompleteSelf();                    
                         }                        
                     }
@@ -402,16 +498,55 @@
                 break;
                 
             case EDSisInstallerStateInstallerBusy:
+                {
                 // Try to install the file again
-                FLOG( _L("Daemon: RunL: EDSisInstallerStateInstallerBusy") );  
-                FLOG_1( _L("Daemon: Kick off the install for %S"), &iSisFile );
-                iInstallLauncher->InstallL( iSisFile, iStatus );
-                iState = EDSisInstallerStateInstalling;
-    #ifdef RD_MULTIPLE_DRIVE                
-                iInstallerState = iState;
-    #endif                
+                FLOG( _L("Daemon: RunL: EDSisInstallerStateInstallerBusy") ); 
+                                
+                // If file is not open, try to open it.
+                if ( !iFileOpen )
+                    {
+                    FLOG( _L("Daemon: RunL: Error file not open !") ); 
+                    FLOG_1( _L("Daemon: Open File: %S"), &iSisFile );
                 
-                SetActive(); 
+                    TInt err = iSisFileHandle.Open( 
+                                    iFs, 
+                                    iSisFile, 
+                                    EFileRead | EFileShareReadersOnly ); 
+                                                           
+                    if ( err )
+                         {
+                         FLOG_1( _L("Daemon: File open ERROR = %d"), err );
+                         iFileOpen = EFalse;
+                         }
+                    else
+                        {
+                        FLOG( _L("Daemon: RunL: File open") );                     
+                        iFileOpen = ETrue;                    
+                        }
+                    }
+                
+                if ( iFileOpen )
+                    {
+                    FLOG_1( _L("Daemon: Try install again for: %S"), &iSisFile );
+                    iInstallLauncher->InstallL( iSisFileHandle,
+                                                iSisFile, 
+                                                iStatus );                
+                
+                    iState = EDSisInstallerStateInstalling;                   
+                    iInstallerState = iState;                                   
+                    SetActive(); 
+                    }
+                else
+                    {
+                    // If we cannot open the sis file let's continue
+                    // and install rest of the packages.
+                    // We can try to install this next time in boot 
+                    // or when media is mounted.
+                    iState = EDSisInstallerStateIdle;                                                 
+                    iInstallerState = iState;  
+                    CompleteSelf(); 
+                    } 
+                }
                 break;                       
                 
                 // Active object in unknown state
@@ -420,18 +555,26 @@
                 break;
             }
         } // else for uninstaller
+    FLOG( _L("Daemon: RunL END") ); 
     }
 	
+// -----------------------------------------------------------------------
+// CSisInstaller::RunError
 // If RunL leaves then ignore errors
-
+// -----------------------------------------------------------------------
+//
 TInt CSisInstaller::RunError(TInt aError)
     {
-    FLOG_1( _L("Daemon: Installer RunL error %d"), aError );                
+    FLOG_1( _L("Daemon: Installer Run error %d"), aError );                
     TInt err( KErrNone );
     InstallationCompleted( aError );                
     return err;
     }	
-    
+
+// -----------------------------------------------------------------------
+// CSisInstaller::NotifyShuttingDown
+// -----------------------------------------------------------------------
+//    
 void CSisInstaller::NotifyShuttingDown()
     {
     // System is closing down, we need to stop installations and save
@@ -439,29 +582,47 @@
     // Application server receives EApaSystemEventShutdown event that
     // closes it down.
     Cancel();
-    }    	
+    }   
 
+// -----------------------------------------------------------------------
+// CSisInstaller::InstallationCompleted
+// -----------------------------------------------------------------------
+//
 void CSisInstaller::InstallationCompleted( TInt aResult )
     {
+    // Let's update universal indicator ones more.   
+    iDialogs->ActivateIndicatorL( 100 );
+    
     FLOG_1( _L("Daemon: InstallationCompleted with result = %d"), aResult );  
     iState = EDSisInstallerStateIdle;    
-    iInstallErr = KErrNone;    
+    iInstallErr = KErrNone;     
+    FLOG( _L("Daemon: InstallationCompleted: Delete iInstallLauncher") );
     delete iInstallLauncher;
     iInstallLauncher = NULL;
     // We need to update cache again in RunL if plug-in is loaded.
     // It may be that plug-in does install packages after cache is updated.
     iUpdateCache = ETrue;
     
-#ifdef RD_MULTIPLE_DRIVE 
     // If all files are installed set status to completed.
     if ( iFileIndex >= iFilesToInstall.Count() )
         {                
         iInstallerState = EDSisInstallerStateCompleted; 
         }
-#endif                          
-   
-    TRAP_IGNORE( iDialogs->CancelWaitingNoteL() );
     
+    // Make sure that current file is closed before exit.
+    // File may be open if this is called from RunError/DoCancel etc.
+    if ( iFileOpen )
+        {
+        FLOG( _L("Daemon: InstallationCompleted: File open - Close it !!!") );
+        iSisFileHandle.Close();
+        iFileOpen = EFalse;
+        }    
+    
+    // Make sure that progress note is closed.
+    TRAP_IGNORE( iDialogs->CancelWaitingNote() );
+    // Close the universal indicator. 
+    iDialogs->CancelIndicatorL();
+        
     if ( aResult != KErrNone && 
          iSisFile.Length() > 0 && 
          IsMediaPresent( TChar( iSisFile[0] ) ) )
@@ -476,12 +637,6 @@
             }    
         }
     
-    FLOG( _L("Daemon: InstallationCompleted: Update installed cache") );
-    // Update cache so we do not start to install those packages 
-    // which are installed by the user manyally. 
-    // NOTE! plugin will install stuff after this call.
-    TRAP_IGNORE(iPreviouslyInstalledAppsCache->UpdateAllL());
-    
     TRAP_IGNORE(iPreviouslyInstalledAppsCache->FlushToDiskL(););    
     TRAP_IGNORE(iInstallationFailedAppsCache->FlushToDiskL());   
     
@@ -499,12 +654,16 @@
           }       
     }  
 
+// -----------------------------------------------------------------------
+// CSisInstaller::NeedsInstallingL
 // Indicates if this package is installed or not.
-	
+// -----------------------------------------------------------------------
+//	
 TBool CSisInstaller::NeedsInstallingL( const TDesC& aPackageName )
     {
-    FLOG( _L("Daemon: NeedsInstallingL") ); 
-    TBool result( ETrue );
+    FLOG( _L("Daemon: CSisInstaller::NeedsInstallingL") ); 
+    //TBool result( ETrue );
+    TBool needsInstalling( ETrue );
     
     // Read the controller data from the package
     CFileSisDataProvider* fileProvider = CFileSisDataProvider::NewLC( iFs, aPackageName ); 
@@ -517,7 +676,6 @@
     CleanupStack::PushL( controller );                            
 
     // Code to read UID
-
 	CDesDataProvider* controllerProvider= CDesDataProvider::NewLC(*controller);
 	CController* controllerObject = NULL;
 	controllerObject = CController::NewL(*controllerProvider);
@@ -525,15 +683,30 @@
 
 	TUid packageId = controllerObject->Info().Uid().Uid();
 
-	CleanupStack::PopAndDestroy(controllerObject);
-	CleanupStack::PopAndDestroy(controllerProvider);
+	CleanupStack::PopAndDestroy( controllerObject );
+	CleanupStack::PopAndDestroy( controllerProvider );
 
-	FLOG_1( _L("Daemon: NeedsInstallingL: Is UID installed = 0x%x"), packageId.iUid );
-	result = !iPreviouslyInstalledAppsCache->HasBeenPreviouslyInstalled(packageId);
-	FLOG_1( _L("Daemon: NeedsInstallingL: Has been installed (cache) = %d"), !result ); 
+	// Check if sw is installed previously. 
+	// Note if UID is found sw will not be installed even if user 
+	// has uninstall it bacause cache is not updated from SCR.
+	FLOG_1( _L("Daemon: Is UID installed = 0x%x"), packageId.iUid );
+	needsInstalling = !iPreviouslyInstalledAppsCache->
+                            HasBeenPreviouslyInstalled(packageId);
+	FLOG_1( _L("Daemon: Has been installed (cache) = %d"), !needsInstalling );
 	
-	if (result)
-	    {
+	// No need to check rom stubs in here anymore. 
+	// Note 1: SWI Daemon policy has been that RU packages are not installed 
+	// from removable media.	
+	// Note 2: UpdateAllL will add all pkg uids in cache (PreviouslyInstalled),
+	// so rom upgrades are not installed since uid is found from the cache.
+	// Note 3: Install params do not allow RU to be installed. So SWI will
+	// reject RU (rom upgrade) package anyway.
+
+	/*	
+	// Note! this code has been wrong. No need to check stubs since
+	// policy do not allow RU updates and SWI will reject the install.
+	if ( !needsInstalling )
+        {
         RSisRegistrySession registry;
         User::LeaveIfError( registry.Connect() );  
         CleanupClosePushL( registry );  
@@ -548,32 +721,40 @@
             User::LeaveIfError( entry.Open( registry, packageId ) );
             CleanupClosePushL( entry ); 
             
-            result = entry.IsInRomL();
+            needsInstalling = entry.IsInRomL();
             
-            FLOG_1( _L("Daemon: NeedsInstallingL: Is in ROM = %d"), result );              
+            FLOG_1( _L("Daemon: NeedsInstallingL: Is in ROM = %d"), needsInstalling );              
             CleanupStack::PopAndDestroy( &entry );           
             }
         CleanupStack::PopAndDestroy( &registry ); 
-		}
-		
+        }
+	*/	
+	
     // Check that previous install attempt did not fail.		
-	if (result)
+	if ( needsInstalling )
 	    {
-	    result = !iInstallationFailedAppsCache->HasPreviousInstallationFailed( packageId );
-	    FLOG_1( _L("Daemon: NeedsInstallingL: Has failed (cache) = %d"), !result ); 
+	    needsInstalling = !iInstallationFailedAppsCache->
+	            HasPreviousInstallationFailed( packageId );
+	    FLOG_1( _L("Daemon: Has failed (cache) = %d"), !needsInstalling ); 
 	    }
 
     // Update pkg ID. ID is added to cache after installation.
-    if (result)
+    if ( needsInstalling )
         {        
         iCurrentPackageId = packageId;
         }
     
+    // fileProvider, content, controller
     CleanupStack::PopAndDestroy( 3 );
-        
-    return result;            
+    
+    FLOG_1( _L("Daemon: NeedsInstallingL = %d"), needsInstalling );    
+    return needsInstalling;            
     }  
 
+// -----------------------------------------------------------------------
+// CSisInstaller::IsMediaPresent
+// -----------------------------------------------------------------------
+//
 TBool CSisInstaller::IsMediaPresent( TChar aDrive )
     {
     TInt drive( 0 );
@@ -595,25 +776,71 @@
         }
     }
 
-TBool CSisInstaller::IsValidPackageL( const TDesC& aPackageName )
+// -----------------------------------------------------------------------
+// CSisInstaller::IsValidPackageL
+// -----------------------------------------------------------------------
+//
+TBool CSisInstaller::IsValidPackageL()
     {
-    TBool result( EFalse );
-  
-    RFile file;
+    TBool result( EFalse ); 
+    
+    if ( !iFileOpen )
+        {
+        FLOG( _L("Daemon: IsValidPackageL: ERROR FILE NOT OPEN") );
+        return result;
+        }
+    
     TUid appUid;
     TDataType dataType;
-    User::LeaveIfError( file.Open( iFs, aPackageName, EFileRead ) );        
-    iApaSession.AppForDocument( file, appUid, dataType );
-    file.Close();
+        
+    iApaSession.AppForDocument( iSisFileHandle, appUid, dataType );
     
     if ( dataType.Des8() == SwiUI::KSisxMimeType )
         {
         result = ETrue;
-        }
-
+        }           
+           
+    FLOG_1( _L("Daemon: IsValidPackageL = %d"), result );  
     return result;    
     }
-    
+ 
+// -----------------------------------------------------------------------
+// CSisInstaller::CalcPrecentValue
+// -----------------------------------------------------------------------
+//
+void CSisInstaller::CalcPercentValue()
+    {  
+    FLOG( _L("Daemon: CSisInstaller::CalcPercentValue") );
+    FLOG_1( _L("Daemon: iFileIndex = %d"), iFileIndex ); 
+    // Let's calculate indicator value for UI now.
+    TInt sisxFileCount = iFilesToInstall.Count();
+    FLOG_1( _L("Daemon: iFilesToInstall.Count = %d"), sisxFileCount ); 
+    iPercentValue = 0;
+
+    // Note! if iFileIndex is zero, no package is installed bacause
+    // installation process starts after this function.     
+    if ( iFileIndex && sisxFileCount )
+        {
+        // Let's calculate new precent value after some
+        // package is installed.     
+        if ( iFileIndex <= sisxFileCount )
+            {
+            TReal32 realFileIndex = iFileIndex;
+            TReal32 realFileCount = sisxFileCount;
+            iPercentValue = (realFileIndex/realFileCount)*100;                                   
+            }
+        else
+            {
+            // Most probably all is installed if index is bigger then
+            // filen count. Let's not show over 100% to user.
+            // This may happend after last package is processed since 
+            // index counter is updated before install starts.
+            iPercentValue = 100;
+            }
+        }           
+    FLOG_1( _L("Daemon: CalcPercentValue value = %d"), (TInt)iPercentValue );
+    }
+
 //EOF
 
 
--- a/appinstaller/AppinstUi/Daemon/Src/dialogwatcher.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/dialogwatcher.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -142,7 +142,8 @@
             {
             FLOG( _L("[CDialogWatcher] RunL: PSKey true -> Cancel notes ") ); 
             // If key is true, cancel all dialogs.
-            iDialogWrapper->CancelWaitingNoteL(); 
+            iDialogWrapper->CancelWaitingNote(); 
+            iDialogWrapper->CancelWaitingNoteForUninstaller();
             iDialogWrapper->SetUIFlag( psKey );
             // Issue new request.
             StartWatcher();
@@ -173,7 +174,8 @@
         FLOG( _L("[CDialogWatcher] RunL: Cancel notes") ); 
         // If we can not read the the PS Key, let's close dialogs, 
         // so we do not block the start applications.
-        iDialogWrapper->CancelWaitingNoteL(); 
+        iDialogWrapper->CancelWaitingNote(); 
+        iDialogWrapper->CancelWaitingNoteForUninstaller();
         iDialogWrapper->SetUIFlag( ETrue );
         // Issue new request.
         StartWatcher();
--- a/appinstaller/AppinstUi/Daemon/Src/drivewatcher.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/drivewatcher.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -19,64 +19,106 @@
 #include "drivewatcher.h"
 #include "SWInstDebug.h"
 
-namespace Swi
-{
+using namespace Swi;
+
 // CDriveWatcher
 _LIT(KNotificationDirectory,"mediachange\\");
 
-/*static*/ CDriveWatcher* CDriveWatcher::NewL(RFs& aFs, TInt aDrive, 
-												MDriveObserver& aObserver,
-							 					TInt aPriority)
+
+// -----------------------------------------------------------------------
+// CDriveWatcher::NewL
+// -----------------------------------------------------------------------
+//    
+/*static*/ 
+CDriveWatcher* CDriveWatcher::NewL( RFs& aFs, 
+                                    TInt aDrive, 
+                                    MDriveObserver& aObserver,
+                                    TInt aPriority )
 	{
-	CDriveWatcher* self=NewLC(aFs, aDrive, aObserver, aPriority);
+	CDriveWatcher* self = NewLC( aFs, aDrive, aObserver, aPriority );
 	CleanupStack::Pop(self);
 	return self;
 	}
-	
-/*static*/ CDriveWatcher* CDriveWatcher::NewLC(RFs& aFs, TInt aDrive, 
-												MDriveObserver& aObserver,
-							 					TInt aPriority)
+
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+// 
+/*static*/ 
+CDriveWatcher* CDriveWatcher::NewLC( RFs& aFs, 
+                                     TInt aDrive, 
+                                     MDriveObserver& aObserver,
+                                     TInt aPriority )
 	{
-	CDriveWatcher* self=new(ELeave) CDriveWatcher(aFs, aDrive, aObserver, aPriority);
-	CleanupStack::PushL(self);
+	CDriveWatcher* self = new(ELeave) CDriveWatcher( aFs, 
+	                                                 aDrive, 
+	                                                 aObserver, 
+	                                                 aPriority );
+	CleanupStack::PushL( self );
 	self->ConstructL();
 	return self;	
 	}
-	
+
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//
 CDriveWatcher::~CDriveWatcher()
 	{
 	Cancel();
 	}
 
-CDriveWatcher::CDriveWatcher(RFs& aFs, TInt aDrive, MDriveObserver& aObserver,
-							 TInt aPriority)
-	: CActive(aPriority), iFs(aFs), iDrive(aDrive), iObserver(aObserver)
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//
+CDriveWatcher::CDriveWatcher( RFs& aFs, 
+                              TInt aDrive, 
+                              MDriveObserver& aObserver,
+                              TInt aPriority )
+                              : CActive(aPriority), 
+                                iFs(aFs), 
+                                iDrive(aDrive), 
+                                iObserver(aObserver)
 	{
 	CActiveScheduler::Add(this);
 	}
 
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//
 void CDriveWatcher::ConstructL()
 	{
-	// Notify observer of media change since we're beginning from an unknown state
+	// Notify observer of media change since we're beginning 
+    // from an unknown state
 	NotifyMediaChange();
 	
 	// Start watching for changes
 	WaitForChangeL();
 	}
 
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//
 void CDriveWatcher::DoCancel()
 	{
 	iFs.NotifyChangeCancel(iStatus);
 	}
 
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//
 TBool CDriveWatcher::IsMediaPresentL()
 	{
-        FLOG_1( _L("Daemon: Checking media presence for drive %d"), iDrive );
+    FLOG_1( _L("Daemon: Checking media presence for drive %d"), iDrive );
         
 	TVolumeInfo volumeInfo;
-	TInt err=iFs.Volume(volumeInfo, iDrive);
+	TInt err = iFs.Volume( volumeInfo, iDrive );
 	
-	switch (err)
+	switch ( err )
 		{
 		case KErrNotReady: // No Media present
 			{
@@ -89,22 +131,33 @@
 			}
 		}
 
-	User::Leave(err);	
+	User::Leave( err );	
 	return ETrue;	// Will never get here.
 	}
 
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//
 void CDriveWatcher::NotifyMediaChange()
 	{
-        FLOG( _L("Daemon: NotifyMediaChange") );        
+    FLOG( _L("Daemon: NotifyMediaChange") );        
 	// Unsuccessful media change is not fatal, so handle here
-	TRAPD(err,iObserver.MediaChangeL(iDrive, IsMediaPresentL() ? MDriveObserver::EMediaInserted : MDriveObserver::EMediaRemoved));
+	TRAPD( err, iObserver.MediaChangeL( iDrive, 
+	                                    IsMediaPresentL() 
+	                                    ? MDriveObserver::EMediaInserted : 
+                                        MDriveObserver::EMediaRemoved));
 
 	if (err != KErrNone)
 		{
-                FLOG_1(_L("Daemon: MDriveObserver::MediaChangeL left while processing media notification %d"),err);
+        FLOG_1(_L("Daemon: MediaChangeL TRAP err = %d"), err );
 		}              
 	}
-	
+
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//	
 void CDriveWatcher::RunL()
 	{
 	NotifyMediaChange();
@@ -112,22 +165,29 @@
 	WaitForChangeL();
 	}
 
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//
 void CDriveWatcher::WaitForChangeL()
 	{
 	TChar drive;
-	User::LeaveIfError(iFs.DriveToChar(iDrive, drive));
+	User::LeaveIfError( iFs.DriveToChar( iDrive, drive ) );
 	TUint driveChar(drive); // Can't pass TChar to Format().
 	
 	TPath notificationPath;
 	TPath privatePath;
 	_LIT(KNotificationPathFormat,"%c:%S%S");
-	User::LeaveIfError(iFs.PrivatePath(privatePath));
+	User::LeaveIfError( iFs.PrivatePath( privatePath ) );
 
-	notificationPath.Format(KNotificationPathFormat, driveChar, &privatePath, &KNotificationDirectory);	
+	notificationPath.Format( KNotificationPathFormat, 
+	                         driveChar, 
+	                         &privatePath, 
+	                         &KNotificationDirectory );	
 	
-	iFs.NotifyChange(ENotifyEntry, iStatus, notificationPath);
+	iFs.NotifyChange( ENotifyEntry, iStatus, notificationPath );
 
 	SetActive();
 	}
 	
-}
+//EOF
--- a/appinstaller/AppinstUi/Daemon/Src/installationFailedAppsCache.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/installationFailedAppsCache.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -23,14 +23,13 @@
 #include "sisregistrysession.h"
 #include "sisregistryentry.h"
 #include "sisregistrypackage.h"
+#include "installationFailedAppsCache.h"
+#include "SWInstDebug.h"
 
 using namespace Swi;
 
-#include "installationFailedAppsCache.h"
-
 _LIT(KInstFaildeApps, "c:\\private\\10202DCE\\instFailedAppsCache.dat");
 
-#include "SWInstDebug.h"
 
 // ----------------------------
 // Borrowed from cleanuputils.h:-
@@ -75,6 +74,10 @@
 // End of code from swi/inc/cleanuputils.h
 
 
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//    
 CInstallationFailedAppsCache *CInstallationFailedAppsCache::NewL()
 	{
 	FLOG( _L("Daemon: CInstallationFailedAppsCache::NewL") ); 
@@ -86,26 +89,37 @@
 	return self;
 	}
 
-
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//   
 CInstallationFailedAppsCache::~CInstallationFailedAppsCache()
 	{
 	iUidsArray.Reset();
 	}
 
-
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//   
 void CInstallationFailedAppsCache::AddPackageUID( TUid aUid )
 	{
-	FLOG( _L("Daemon: CInstallationFailedAppsCache::AddPackageUID") );
+    FLOG( _L("Daemon: CInstallationFailedAppsCache::AddPackageUID") );
+    FLOG_1( _L("Daemon: AddPackageUID: Add UID = 0x%x"), aUid.iUid );
 	
 	(void)iUidsArray.InsertInSignedKeyOrder( aUid );
 	// New UID added to array. Let's write cache to disk.
 	iNewUID = ETrue;		
 	}
 
-
-TBool CInstallationFailedAppsCache::HasPreviousInstallationFailed( TUid aUid )
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//   
+TBool CInstallationFailedAppsCache::HasPreviousInstallationFailed( 
+        TUid aUid )
 	{
-	FLOG( _L("Daemon: CInstallationFailedAppsCache::HasPreviousInstallationFailed") );
+	FLOG( _L("Daemon: FailedAppsCache::HasPreviousInstallationFailed") );
 	
 	if ( iUidsArray.FindInSignedKeyOrder( aUid ) == KErrNotFound )
 		{
@@ -117,17 +131,25 @@
 	return ETrue;
 	}
 
-
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//   
 CInstallationFailedAppsCache::CInstallationFailedAppsCache()
 	{
 	}
 
-
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//   
 void CInstallationFailedAppsCache::ConstructL()
 	{
 	User::LeaveIfError( iFs.Connect() );
 	TInt drive = 0;
-    iFs.CharToDrive( TParsePtrC( PathInfo::PhoneMemoryRootPath() ).Drive()[0], drive );
+    iFs.CharToDrive( TParsePtrC( 
+            PathInfo::PhoneMemoryRootPath() ).Drive()[0], drive );
+    
     iFs.CreatePrivatePath( drive );
     
     iNewUID = EFalse;
@@ -136,7 +158,10 @@
 	TRAP_IGNORE( InitFromCacheFileL() );
 	}
 
-
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//   
 void CInstallationFailedAppsCache::InitFromCacheFileL()
 	{
 	FLOG( _L("Daemon: CInstallationFailedAppsCache::InitFromCacheFileL") );	
@@ -144,7 +169,9 @@
 	// Read in existing cache file.
 	RFile cacheFile;
 	
-	TInt err = cacheFile.Open( iFs, KInstFaildeApps, EFileStream|EFileRead );
+	TInt err = cacheFile.Open( iFs, 
+	                           KInstFaildeApps, 
+	                           EFileStream|EFileRead );
 	
 	if ( err != KErrNone )
 		{
@@ -174,7 +201,10 @@
 	CleanupStack::PopAndDestroy(&cacheFile);
     }
 
-
+// -----------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------
+//   
 void CInstallationFailedAppsCache::FlushToDiskL()
 	{
     FLOG( _L("Daemon: CInstallationFailedAppsCache::FlushToDiskL") );		
@@ -184,13 +214,17 @@
     	{
     	FLOG( _L("Daemon: Write cache to disk") );
     	RFile cacheFile;
-    	TInt err = cacheFile.Open( iFs, KInstFaildeApps, EFileStream|EFileWrite );
+    	TInt err = cacheFile.Open( iFs, 
+    	                           KInstFaildeApps, 
+    	                           EFileStream|EFileWrite );
     	
     	// If cache was not found, create cache file.
     	if ( err != KErrNone )
     		{
     		FLOG( _L("Daemon: Create cache file.") );
-    	    User::LeaveIfError( cacheFile.Create( iFs, KInstFaildeApps, EFileStream|EFileWrite ) );
+    	    User::LeaveIfError( cacheFile.Create( iFs, 
+    	                                          KInstFaildeApps, 
+    	                                          EFileStream|EFileWrite ) );
     		}
     	
     	CleanupClosePushL(cacheFile);
--- a/appinstaller/AppinstUi/Daemon/Src/main.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/main.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -43,7 +43,7 @@
     FLOG( _L("Daemon: Rename thread to SWI Daemon") );
     // Rename thread as SWI Daemon.
     User::RenameThread( KSWIDaemonInstaller );  
-  
+
     // For uninstaller
     // Set status to installing just to be sure that uninstaller 
     // do not run before installing in complete.
--- a/appinstaller/AppinstUi/Daemon/Src/previouslyInstalledAppsCache.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/previouslyInstalledAppsCache.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -18,6 +18,9 @@
 #include <f32file.h>
 #include <s32file.h>
 #include <pathinfo.h>
+#include <usif/scr/scr.h>
+#include <usif/scr/scrcommon.h>
+#include <usif/scr/screntries.h>
 
 #include "sisregistrysession.h"
 #include "sisregistryentry.h"
@@ -79,7 +82,10 @@
 // End of code from swi/inc/cleanuputils.h
 // ----------------------------
 
-
+// -----------------------------------------------------------------------
+// CPreviouslyInstalledAppsCache::NewL
+// -----------------------------------------------------------------------
+//  
 CPreviouslyInstalledAppsCache *CPreviouslyInstalledAppsCache::NewL()
 	{
 	CPreviouslyInstalledAppsCache *self = new(ELeave)CPreviouslyInstalledAppsCache;
@@ -89,122 +95,172 @@
 	return self;
 	}
 
+// -----------------------------------------------------------------------
+// CPreviouslyInstalledAppsCache::~CPreviouslyInstalledAppsCache
+// -----------------------------------------------------------------------
+//  
 CPreviouslyInstalledAppsCache::~CPreviouslyInstalledAppsCache()
 	{
 	iPrevPkgUids.Reset();
 	}
 
-
+// -----------------------------------------------------------------------
+// CPreviouslyInstalledAppsCache::UpdateAllL
+// -----------------------------------------------------------------------
+//  
 void CPreviouslyInstalledAppsCache::UpdateAllL()
 	{
+    FLOG( _L("Daemon: CPreviouslyInstalledAppsCache::UpdateAllL ") );
+    
 	RThread ourThread; // nb. Default constructor gives handle to current thread.
-	if(!ourThread.HasCapability(ECapabilityReadUserData, 0))
+	
+	if( !ourThread.HasCapability(ECapabilityReadUserData, 0) )
 		{
 		// Have not got ReadUserData - if we try and enumerate package
 		// UIDs the registry server will panic us!
 		User::Leave(KErrAccessDenied);
 		}
 	ourThread.Close();
-	
 
-	RSisRegistrySession registrySession;
-	User::LeaveIfError(registrySession.Connect());
-	CleanupClosePushL(registrySession);
-	
-	RPointerArray<CSisRegistryPackage> packages;
-	registrySession.InstalledPackagesL(packages);
-   	CleanupResetAndDestroy<RPointerArray<CSisRegistryPackage> >::PushL(packages);
-
-	for (TInt i=0; i< packages.Count(); ++i)
-		{
-		(void)iPrevPkgUids.InsertInSignedKeyOrder(packages[i]->Uid());
-		}
-	
-	CleanupStack::PopAndDestroy(&packages);
-	CleanupStack::PopAndDestroy(&registrySession);
+	// Let's use SisRegistry in this case since in SCR there is no
+	// simple way to retriev sisx pacakge UIDs in one call.
+    RSisRegistrySession registrySession;
+    User::LeaveIfError( registrySession.Connect() );
+    CleanupClosePushL( registrySession );
+    
+    RPointerArray<CSisRegistryPackage> packages;
+    registrySession.InstalledPackagesL( packages );
+    CleanupResetAndDestroy< 
+           RPointerArray<CSisRegistryPackage> >::PushL( packages );
+    
+    for ( TInt i = 0; i < packages.Count(); ++i )
+        {
+        (void)iPrevPkgUids.InsertInSignedKeyOrder( packages[i]->Uid() );
+        
+        FLOG_1( _L("Daemon: UpdateAllL: Add UID = 0x%x"), 
+                packages[i]->Uid().iUid );
+        }
+    
+    CleanupStack::PopAndDestroy( &packages );
+    CleanupStack::PopAndDestroy( &registrySession );
 	}
 
-void CPreviouslyInstalledAppsCache::UpdateAddL(TUid aUid)
+// -----------------------------------------------------------------------
+// CPreviouslyInstalledAppsCache::UpdateAddL
+// -----------------------------------------------------------------------
+//  
+void CPreviouslyInstalledAppsCache::UpdateAddL( TUid aUid )
 	{
-	RSisRegistrySession registrySession;
-	User::LeaveIfError(registrySession.Connect());
-	CleanupClosePushL(registrySession);
-	
-	RSisRegistryEntry registryEntry;
-	TInt err = registryEntry.Open(registrySession, aUid);
-	if( err == KErrNone )
-		{
-		registryEntry.Close();
-		(void)iPrevPkgUids.InsertInSignedKeyOrder(aUid);
-		}
-
-	FLOG_1( _L("Daemon: UpdateAddL: UID add error = %d"), err );
-	
-	CleanupStack::PopAndDestroy(&registrySession);
+    FLOG( _L("Daemon: CPreviouslyInstalledAppsCache::UpdateAddL ") );
+ 
+    // Let's use SisRegistry in this case since in SCR there is no
+    // simple way to open entry with given package UIDs.
+    RSisRegistrySession registrySession;
+    User::LeaveIfError( registrySession.Connect() );
+    CleanupClosePushL( registrySession );
+    
+    RSisRegistryEntry registryEntry;
+    TInt err = registryEntry.Open( registrySession, aUid );
+    
+    if( err == KErrNone )
+        {
+        // Ok close entry and add UID to cache.
+        registryEntry.Close();
+        (void)iPrevPkgUids.InsertInSignedKeyOrder( aUid );
+        FLOG_1( _L("Daemon: UpdateAddL: Add UID = 0x%x"), aUid.iUid );
+        }
+           
+    CleanupStack::PopAndDestroy( &registrySession );
 	}
 
-TBool CPreviouslyInstalledAppsCache::HasBeenPreviouslyInstalled(TUid aPackageUid) const
+// -----------------------------------------------------------------------
+// CPreviouslyInstalledAppsCache::HasBeenPreviouslyInstalled
+// -----------------------------------------------------------------------
+//  
+TBool CPreviouslyInstalledAppsCache::HasBeenPreviouslyInstalled( 
+    TUid aPackageUid ) const
 	{
-	if(iPrevPkgUids.FindInSignedKeyOrder(aPackageUid) == KErrNotFound)
+	if ( iPrevPkgUids.FindInSignedKeyOrder( aPackageUid ) == KErrNotFound )
 		{
 		return EFalse;
 		}
 	return ETrue;
 	}
 
+// -----------------------------------------------------------------------
+// CPreviouslyInstalledAppsCache::CPreviouslyInstalledAppsCache
+// -----------------------------------------------------------------------
+//  
 CPreviouslyInstalledAppsCache::CPreviouslyInstalledAppsCache()
 	{
 	}
 
+// -----------------------------------------------------------------------
+// CPreviouslyInstalledAppsCache::ConstructL
+// -----------------------------------------------------------------------
+//  
 void CPreviouslyInstalledAppsCache::ConstructL()
 	{
+    FLOG( _L("Daemon: CPreviouslyInstalledAppsCache::ConstructL ") );
 	User::LeaveIfError(iFs.Connect());
 	TInt drive = 0;
-    iFs.CharToDrive( TParsePtrC( PathInfo::PhoneMemoryRootPath() ).Drive()[0], drive );
+    iFs.CharToDrive( 
+            TParsePtrC( PathInfo::PhoneMemoryRootPath() ).Drive()[0], 
+            drive );
+    
     iFs.CreatePrivatePath( drive );
 
 	// Read cache file
 	TRAP_IGNORE(InitFromCacheFileL());
-		
-    TRAPD( err, UpdateAllL() );
-    if(err == KErrNone)
-        {
-        // If we managed to scan the registry, and update the cache, flush to disk.
-        TRAP_IGNORE(FlushToDiskL());
-        }	
+	
+//TODO: Test if this is really needed. Let's not do updateall 2 time in boot.		
+   // TRAPD( err, UpdateAllL() );
+   // if(err == KErrNone)
+   //     {        
+   //     TRAP_IGNORE(FlushToDiskL());
+   //     }	
 
 	}
 
-
+// -----------------------------------------------------------------------
+// CPreviouslyInstalledAppsCache::InitFromCacheFileL
+// -----------------------------------------------------------------------
+//  
 void CPreviouslyInstalledAppsCache::InitFromCacheFileL()
 	{
 	// Read in existing cache file.
 	RFile cacheFile;
-	TInt err = cacheFile.Open(iFs, KPreInstalledApps, EFileStream|EFileRead);
-	if(err != KErrNone)
+	TInt err = cacheFile.Open( iFs, 
+                               KPreInstalledApps, 
+                               EFileStream|EFileRead);
+	if ( err != KErrNone )
 		{
 			return; // No existing cache file to read.
 		}
-	CleanupClosePushL(cacheFile);
+	CleanupClosePushL( cacheFile );
 	
 	// Now read the cache
-	RFileReadStream cacheReadStream(cacheFile);
+	RFileReadStream cacheReadStream( cacheFile );
 	cacheReadStream.PushL();
 
 	iPrevPkgUids.Reset();
-	TInt32 count(cacheReadStream.ReadInt32L());
+	TInt32 count( cacheReadStream.ReadInt32L() );
 
-	for (TInt i = 0; i < count; i++)
+	for ( TInt i = 0; i < count; i++ )
 		{
 		TUid packageId;
 		packageId.iUid = cacheReadStream.ReadInt32L();
-		(void)iPrevPkgUids.InsertInSignedKeyOrder(packageId);
+		(void)iPrevPkgUids.InsertInSignedKeyOrder( packageId );
 		}	
 	
 	CleanupStack::PopAndDestroy(&cacheReadStream);
 	CleanupStack::PopAndDestroy(&cacheFile);
 }
 
+// -----------------------------------------------------------------------
+// CPreviouslyInstalledAppsCache::FlushToDiskL
+// -----------------------------------------------------------------------
+//  
 void CPreviouslyInstalledAppsCache::FlushToDiskL()
 	{
 	// Write to disk
--- a/appinstaller/AppinstUi/Daemon/Src/programstatus.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/programstatus.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -22,119 +22,119 @@
 #include "programstatus.h"
 #include "SWInstDebug.h"
 
-namespace Swi
+using namespace Swi;
+
+
+// -----------------------------------------------------------------------
+// Two-phased constructor
+// -----------------------------------------------------------------------
+//        
+CProgramStatus* CProgramStatus::NewL( TInt aProcessStatus )
     {
-    // -----------------------------------------------------------------------
-    // Two-phased constructor
-    // -----------------------------------------------------------------------
-    //        
-    CProgramStatus* CProgramStatus::NewL( TInt aProcessStatus )
-        {
-        CProgramStatus* self = NewLC( aProcessStatus );
-        CleanupStack::Pop( self );
-        return self;
-        }
-    
-    
-    // -----------------------------------------------------------------------
-    // Two-phased constructor
-    // -----------------------------------------------------------------------
-    //      
-    CProgramStatus* CProgramStatus::NewLC( TInt aProcessStatus )
-        {
-        CProgramStatus* self = new (ELeave) CProgramStatus;
-        CleanupStack::PushL( self );
-        self->ConstructL( aProcessStatus );
-        return self;    
-        }
-        
-    
-    // -----------------------------------------------------------------------
-    // 2nd phase constructor
-    // -----------------------------------------------------------------------
-    //      
-    void CProgramStatus::ConstructL( TInt aProcessStatus )
-        {                           
-        iGeneralProcessStatus = aProcessStatus;   
-        // Define PS keys for UI. 
-        DefinePSKeyForUI();
-        }
-    
+    CProgramStatus* self = NewLC( aProcessStatus );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------
+// Two-phased constructor
+// -----------------------------------------------------------------------
+//      
+CProgramStatus* CProgramStatus::NewLC( TInt aProcessStatus )
+    {
+    CProgramStatus* self = new (ELeave) CProgramStatus;
+    CleanupStack::PushL( self );
+    self->ConstructL( aProcessStatus );
+    return self;    
+    }
     
-    // -----------------------------------------------------------------------
-    // C++ destructor
-    // -----------------------------------------------------------------------
-    //      
-    CProgramStatus::~CProgramStatus()
-        {
-        }
- 
-    
-    // -----------------------------------------------------------------------
-    // Set program status.
-    // -----------------------------------------------------------------------
-    //      
-    void CProgramStatus::SetProgramStatus( TInt aProcessStatus )
-        {
-        iGeneralProcessStatus = aProcessStatus;
-        }
-    
+
+// -----------------------------------------------------------------------
+// 2nd phase constructor
+// -----------------------------------------------------------------------
+//      
+void CProgramStatus::ConstructL( TInt aProcessStatus )
+    {                           
+    iGeneralProcessStatus = aProcessStatus;   
+    // Define PS keys for UI. 
+    DefinePSKeyForUI();
+    }
+
+
+// -----------------------------------------------------------------------
+// C++ destructor
+// -----------------------------------------------------------------------
+//      
+CProgramStatus::~CProgramStatus()
+    {
+    }
+
+
+// -----------------------------------------------------------------------
+// Set program status.
+// -----------------------------------------------------------------------
+//      
+void CProgramStatus::SetProgramStatus( TInt aProcessStatus )
+    {
+    iGeneralProcessStatus = aProcessStatus;
+    }
+
+
+// -----------------------------------------------------------------------
+// Get program status.
+// -----------------------------------------------------------------------
+//      
+TInt CProgramStatus::GetProgramStatus()
+    {
+    return iGeneralProcessStatus;
+    }
+
+
+// -----------------------------------------------------------------------
+// Set program status to idle.
+// -----------------------------------------------------------------------
+//       
+void CProgramStatus::SetProgramStatusToIdle()
+    {
+    iGeneralProcessStatus = EStateIdle;
+    }
+
+// -----------------------------------------------------------------------
+// Define PS key for UI and set the key value. 
+// -----------------------------------------------------------------------
+//      
+void CProgramStatus::DefinePSKeyForUI()
+    {                
+    _LIT_SECURITY_POLICY_C1( KReadProtection, ECapability_None );
+    _LIT_SECURITY_POLICY_C1( KWriteProtection, ECapabilityWriteDeviceData );
     
-    // -----------------------------------------------------------------------
-    // Get program status.
-    // -----------------------------------------------------------------------
-    //      
-    TInt CProgramStatus::GetProgramStatus()
-        {
-        return iGeneralProcessStatus;
-        }
-    
+    // Define the property.
+    TInt err = RProperty::Define( 
+        KPSUidSWInstallerUiNotification, 
+        KSWInstallerDisableDaemonNotes, 
+        RProperty::EInt,
+        KReadProtection,
+        KWriteProtection );
     
-    // -----------------------------------------------------------------------
-    // Set program status to idle.
-    // -----------------------------------------------------------------------
-    //       
-    void CProgramStatus::SetProgramStatusToIdle()
-        {
-        iGeneralProcessStatus = EStateIdle;
-        }
-  
-    // -----------------------------------------------------------------------
-    // Define PS key for UI and set the key value. 
-    // -----------------------------------------------------------------------
-    //      
-    void CProgramStatus::DefinePSKeyForUI()
-        {                
-        _LIT_SECURITY_POLICY_C1( KReadProtection, ECapability_None );
-        _LIT_SECURITY_POLICY_C1( KWriteProtection, ECapabilityWriteDeviceData );
+    FLOG_1( _L("[CProgramStatus] RProperty::Define error = %d "), err );
+           
+    // If key is not set when Daemon starts, set value.
+    if ( err == KErrNone )
+        {  
+        // Key can be set to False at this point. Correct PS key will 
+        // be read in AO's RunL.
+        TInt keyValue = EFalse;
         
-        // Define the property.
-        TInt err = RProperty::Define( 
+        err = RProperty::Set( 
             KPSUidSWInstallerUiNotification, 
             KSWInstallerDisableDaemonNotes, 
-            RProperty::EInt,
-            KReadProtection,
-            KWriteProtection );
+            keyValue );
         
-        FLOG_1( _L("[CProgramStatus] RProperty::Define error = %d "), err );
-               
-        // If key is not set when Daemon starts, set value.
-        if ( err == KErrNone )
-            {  
-            // Key can be set to False at this point. Correct PS key will 
-            // be read in AO's RunL.
-            TInt keyValue = EFalse;
-            
-            err = RProperty::Set( 
-                KPSUidSWInstallerUiNotification, 
-                KSWInstallerDisableDaemonNotes, 
-                keyValue );
-            
-            FLOG_1( _L("[CProgramStatus] RProperty::Set error = %d "), err );
-            }                  
-        }
-    
-    } // namespace
+        FLOG_1( _L("[CProgramStatus] RProperty::Set error = %d "), err );
+        }                  
+    }
 
+  
 //EOF
     
--- a/appinstaller/AppinstUi/Daemon/Src/silentuninstaller.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/silentuninstaller.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -17,8 +17,9 @@
 
 // INCLUDE FILES
 #include "silentuninstaller.h"
+#include "SWInstDefs.h"
 #include "SWInstDebug.h"
-#include "SWInstDefs.h"
+
 
 using namespace Swi;
 
@@ -40,12 +41,13 @@
 //
 void CSilentUninstaller::ConstructL()
     {
-    // Silently kill the app. if needed.
-    FLOG(_L("[CSilentUninstaller] iKillApp = SwiUI::EPolicyAllowed;"));
-    iOptions.iKillApp = SwiUI::EPolicyAllowed; 
-    FLOG(_L("[CSilentUninstaller] iBreakDependency = SwiUI::EPolicyNotAllowed"));
-    iOptions.iBreakDependency = SwiUI::EPolicyNotAllowed;         
-    iOptionsPckg = iOptions;      
+    iConnected = EFalse;     
+    iSifOptions = Usif::COpaqueNamedParams::NewL();
+    iSifResults = Usif::COpaqueNamedParams::NewL();    
+    // Set parameters for silent uninstall.    
+    iSifOptions->AddIntL( Usif::KSifInParam_InstallSilently, ETrue );       
+    iSifOptions->AddIntL( Usif::KSifInParam_AllowAppShutdown, ETrue );    
+    iSifOptions->AddIntL( Usif::KSifInParam_AllowAppBreakDependency, EFalse );     
     }
 
 
@@ -70,7 +72,15 @@
 CSilentUninstaller::~CSilentUninstaller()
     {
     FLOG( _L("[CSilentUninstaller] ~CSilentUninstaller") );
-    iLauncher.Close();
+
+    delete iSifOptions;
+    delete iSifResults;
+    
+    if ( iConnected )
+        {
+        iSWInstallerFW.Close();
+        iRegistrySession.Close();
+        }    
     }
 
 
@@ -81,17 +91,35 @@
 void CSilentUninstaller::UninstallL( 
     TUid& aUid, 
     TRequestStatus& aReqStatus, 
-    TDesC8& aMIME )
+    TDesC& aMIME )
     {
+    FLOG_1( _L("Daemon: UninstallL: UID = 0x%x"), aUid.iUid );
+    
     if ( !iConnected )
-        {
-        FLOG( _L("[CSilentUninstaller] Connect to server") );
-        User::LeaveIfError( iLauncher.Connect() );
-        iConnected = ETrue;            
-        }                
+        {               
+        FLOG( _L("[CSilentUninstaller] Connect to sif installer server") );    
+        User::LeaveIfError( iSWInstallerFW.Connect() );                         
+        FLOG( _L("[CSilentUninstaller] Connect to SisRegistery") );      
+        User::LeaveIfError( iRegistrySession.Connect() );                   
+        iConnected = ETrue;   
+        }
+      
+    // Set MIME type.
+    iSifOptions->AddStringL( Usif::KSifInParam_MimeType, aMIME );  
+           
+    // Usif need the component ID, so we need to map the package UID to 
+    // component ID. To do this simple we need SisRegistry.           
+    Usif::TComponentId componentId;
+    componentId = iRegistrySession.GetComponentIdForUidL( aUid );
+    FLOG_1( _L("Daemon: UninstallL: ComponentId = %d"), componentId );
+                                   
     // Launch the installation
-    FLOG( _L("[CSilentUninstaller] Launch uninstall") );
-    iLauncher.SilentUninstall( aReqStatus, aUid, iOptionsPckg, aMIME );
+    FLOG( _L("[CSilentUninstaller] Launch uninstall") );                 
+    iSWInstallerFW.Uninstall( componentId, 
+                              *iSifOptions,
+                              *iSifResults, 
+                              aReqStatus,
+                              ETrue );
     }
   
 
@@ -101,8 +129,8 @@
 // 
 void CSilentUninstaller::Cancel()
     {
-    FLOG( _L("[CSilentUninstaller] Cancel silet uninstall") );     
-    iLauncher.CancelAsyncRequest( SwiUI::ERequestSilentUninstall );   
+    FLOG( _L("[CSilentUninstaller] Cancel silet uninstall") );              
+    iSWInstallerFW.CancelOperation(); 
     }
 
 //  End of File  
--- a/appinstaller/AppinstUi/Daemon/Src/uninstaller.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/uninstaller.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -34,6 +34,7 @@
 using namespace Swi;
 
 const static TInt KWaitTime = 3000000; // 2 secs
+const TInt KMimeTextLength = 64;
 
 // -----------------------------------------------------------------------
 // Two phased construction
@@ -114,9 +115,13 @@
     iFs.ShareProtected();
     iUidArrayIndex = 0;
     iSilentUninstaller = NULL;
-    iState = EUninstallerStateIdle;      
-    // Alloc descriptor for mime type sis/sisx
-    iMime = SwiUI::KSisxMimeType().AllocL();      
+    iState = EUninstallerStateIdle;   
+    
+    // Alloc descriptor for mime type sis/sisx    
+    iMime = HBufC::NewL( KMimeTextLength );
+    TPtr iMimePtr = iMime->Des();
+    iMimePtr.Copy( SwiUI::KSisxMimeType );
+         
     // Note this will create new instance for dialog class and
     // also new dialog watcher AO for uninstaller.
     // Since uninstaller is used rarely this is not big issue.
@@ -276,6 +281,20 @@
                      // Display installing note for user.
                      iDialogs->ShowWaitingNoteForUninstallerL(); 
                      
+                     if ( iUidArrayIndex == 0 )
+                         {
+                         // Set uninstall mode for universal indicator and
+                         // set percent value to 0%.
+                         iDialogs->SetModeToIndicatorL( KSWIDaemonUninstallerMode );
+                         }
+                     else
+                         {
+                         // Calculate current percent value to iPercentValue. 
+                         CalcPercentValue();
+                         // Activate new value to universal indicator.
+                         iDialogs->ActivateIndicatorL( iPercentValue );
+                         }
+                     
                      FLOG_1( _L("[SISUninstaller] Run uninstall index = %d"), 
                              iUidArrayIndex ); 
                      
@@ -342,6 +361,8 @@
 void CSisPkgUninstaller::UninstallationCompleted( TInt /*aResult*/ )
     {
     FLOG( _L("[SISUninstaller] UninstallationCompleted") );
+    // Update indicator value last time and show 100% to user.
+    iDialogs->ActivateIndicatorL( 100 );
     
     if ( EStateUninstalling == iProgramStatus->GetProgramStatus() )
          {   
@@ -353,7 +374,9 @@
     iState = EUninstallerStateIdle; 
           
     // Cancel waiting note.
-    TRAP_IGNORE( iDialogs->CancelWaitingNoteL() );       
+    TRAP_IGNORE( iDialogs->CancelWaitingNoteForUninstaller());
+    // Close indicator.
+    iDialogs->CancelIndicatorL();
     }  
 
 
@@ -369,4 +392,38 @@
     iRevisor->Exit();
     }
 
+// -----------------------------------------------------------------------
+// CSisInstaller::CalcPrecentValue
+// -----------------------------------------------------------------------
+//
+void CSisPkgUninstaller::CalcPercentValue()
+    {     
+    FLOG( _L("[SISUninstaller] CalcPercentValue") );
+    FLOG_1( _L("[SISUninstaller] iUidArrayIndex = %d"), iUidArrayIndex ); 
+    // Let's calculate indicator value for UI now.
+    TInt packageUidCount = iPkgUidArray.Count();
+    FLOG_1( _L("[SISUninstaller] pkg UID count = %d"), packageUidCount ); 
+    
+    iPercentValue = 0;
+
+    if ( iUidArrayIndex && packageUidCount )
+        {
+        // Let's calculate new precent value.     
+        if ( iUidArrayIndex <= packageUidCount )
+            {
+            TReal32 realArrayIndex = iUidArrayIndex;
+            TReal32 realPkgCount = packageUidCount;
+            iPercentValue = (realArrayIndex/realPkgCount)*100;                                   
+            }
+        else
+            {
+            // Most probably all is uninstalled if index is bigger then
+            // filen count. Let's not show over 100% to user.           
+            iPercentValue = 100;
+            }
+        }
+            
+    FLOG_1( _L("[SISUninstaller] percent value = %d"), (TInt)iPercentValue );
+    }
+
 //EOF
--- a/appinstaller/AppinstUi/Daemon/Src/versionRevisor.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/versionRevisor.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -110,6 +110,11 @@
         FLOG( _L("[VersionRev] StartProcessL start") );        
         TInt err = KErrNone;
         
+//#ifdef _DEBUG        
+//FLOG( _L("[VersionRev] FOR TESTING: STARTUP REASON = Firmwareupdate ! ! !") );          
+//iStartupReason = EFirmwareUpdate;
+//#endif
+
         // If firmware update is done, start scan process.
          if( iStartupReason == EFirmwareUpdate )
               {                             
--- a/appinstaller/AppinstUi/Plugin/CommonUI/Data/SWInstCommonUI.rss	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Data/SWInstCommonUI.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -23,8 +23,8 @@
 #include <avkon.rh>
 #include <avkon.mbg>
 #include <avkon.loc>
-#include <CommonDialogs.hrh> 
-#include <CommonDialogs.rh> 
+//#include <CommonDialogs.hrh> 
+//#include <CommonDialogs.rh> 
 
 #include <appinstui.loc>
 
@@ -237,11 +237,13 @@
 //    Defines a memory selection dialog
 //
 //------------------------------------------------------------------------------
+/*
 RESOURCE MEMORYSELECTIONDIALOG r_swcommon_memory_selection_dialog
     {
     softkey_1 = text_softkey_select;
     softkey_2 = text_softkey_cancel;
     }
+*/
 
 //------------------------------------------------------------------------------
 //
--- a/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUICertificateDetailsDialog.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUICertificateDetailsDialog.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -18,10 +18,10 @@
 
 
 // INCLUDE FILES
-#include <aknmessagequerydialog.h>
-#include <StringLoader.h>
+//#include <aknmessagequerydialog.h>
+//#include <StringLoader.h>
 #include <SWInstCommonUI.rsg>
-#include <AknUtils.h>
+//#include <AknUtils.h>
 #include <hash.h>                  
 
 #include "CUICertificateDetailsDialog.h"
@@ -88,6 +88,7 @@
                                                TInt aHeaderResourceId,
                                                const TDesC& aValue )
     {
+    /*
     HBufC* headerString = StringLoader::LoadLC( aHeaderResourceId );
     HBufC* newMessage;
     
@@ -119,7 +120,8 @@
     CleanupStack::PopAndDestroy( aMessage );  
   
     aMessage = newMessage;    
-    CleanupStack::PushL( aMessage );  
+    CleanupStack::PushL( aMessage );
+    */  
     }
 
 // -----------------------------------------------------------------------------
@@ -130,6 +132,7 @@
 //
 void CCUICertificateDetailsDialog::ExecuteLD( const CCUICertificateInfo& aCertInfo )
     {
+    /*
     CleanupStack::PushL( this );
     
     // Valid from
@@ -184,6 +187,7 @@
     dlg->RunLD();
 
     CleanupStack::PopAndDestroy( 7 );  // message, fingerprint_md, fingerprint, serial, validTo, validFrom
+    */
     }
 
 // -----------------------------------------------------------------------------
@@ -194,6 +198,7 @@
 //
 HBufC* CCUICertificateDetailsDialog::DateToStringLC( const TDateTime& aDate )
     {
+    /*
     // Create date descriptors.
     // We use Avkon date format string to format the date into correct format.
     HBufC* dateFormatString = StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO );
@@ -208,7 +213,9 @@
     TPtr ptr = tmp->Des();
     AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
 
-    return tmp;    
+    return tmp;   
+    */
+    return NULL;
     }
 
 // -----------------------------------------------------------------------------
--- a/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDetailsDialog.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDetailsDialog.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -18,16 +18,16 @@
 
 
 // INCLUDE FILES
-#include <aknmessagequerydialog.h>
-#include <aknlistquerydialog.h> // remove
-#include <StringLoader.h>
+//#include <aknmessagequerydialog.h>
+//#include <aknlistquerydialog.h> // remove
+//#include <StringLoader.h>
 #include <bautils.h>
 #include <eikenv.h>
 #include <data_caging_path_literals.hrh>
 #include <SWInstCommonUI.rsg>
 #include <pathinfo.h>
-#include <avkon.rsg>
-#include <drmuihandling.h>                  // DRM::CDrmUiHandling
+//#include <avkon.rsg>
+#include <DRMHelper.h>
 
 #include "CUIDetailsDialog.h"
 #include "CUICertificateDetailsDialog.h"
@@ -49,7 +49,7 @@
 // -----------------------------------------------------------------------------
 //
 CCUIDetailsDialog::CCUIDetailsDialog()
-    : iCbaResourceId( R_AVKON_SOFTKEYS_OK_EMPTY )
+//    : iCbaResourceId( R_AVKON_SOFTKEYS_OK_EMPTY )
     {
     }
 
@@ -233,7 +233,7 @@
 TInt CCUIDetailsDialog::ShowDialogL( MCUIInfoIterator& aIterator )
     {
     TInt result( 0 );
-
+/*
     CleanupStack::PushL( this );
 
     PopulateArrayL( aIterator );
@@ -279,7 +279,7 @@
     
     result = dlg->RunLD();
     CleanupStack::PopAndDestroy( 2 ); // message, this
-
+*/
     return result;    
     }
 
@@ -344,6 +344,7 @@
 //
 HBufC* CCUIDetailsDialog::GetMessageDescriptorLC()
     {
+    /*
     TInt size( 0 ); 
     TInt index( 0 );
 
@@ -380,8 +381,10 @@
     CleanupStack::Pop( message );
     CleanupStack::PopAndDestroy( 2, type );
     CleanupStack::PushL( message );    
-
-    return message;    
+   
+    return message;
+    */
+    return NULL;
     }
 
 // -----------------------------------------------------------------------------
@@ -392,6 +395,7 @@
 //
 void CCUIDetailsDialog::AddCertificatesLC( HBufC*& aMessage )
     {
+    /*
     HBufC* certHeading = StringLoader::LoadLC( R_SWCOMMON_DETAIL_CERTIFICATES );
     HBufC* certificateLink = LoadLinkLC( R_SWCOMMON_DETAIL_VALUE_VIEW_CERT );
     HBufC* newString = HBufC::NewL( certHeading->Length() + 
@@ -411,6 +415,7 @@
   
     aMessage = newString;
     CleanupStack::PushL( aMessage ); 
+    */
     }
 
 // -----------------------------------------------------------------------------
@@ -421,6 +426,7 @@
 //
 void CCUIDetailsDialog::AddDrmLC( HBufC*& aMessage )
     {
+    /*
     HBufC* drmHeading = StringLoader::LoadLC( R_SWCOMMON_DETAIL_DRM );
     HBufC* drmLink = LoadLinkLC( R_SWCOMMON_DETAIL_VALUE_VIEW_DRM );
     HBufC* newString = HBufC::NewL( drmHeading->Length() + 
@@ -440,6 +446,7 @@
   
     aMessage = newString;
     CleanupStack::PushL( aMessage ); 
+    */
     }
 
 // -----------------------------------------------------------------------------
@@ -478,6 +485,7 @@
 //
 void CCUIDetailsDialog::DoShowCertificatesL()
     {
+    /*
     if ( iCommonCertificates.Count() > 1 )
         {
         CDesCArrayFlat *itemArray = new( ELeave ) CDesCArrayFlat( 2 );
@@ -520,7 +528,8 @@
             CCUICertificateDetailsDialog::NewL();
                 
         certDlg->ExecuteLD( *( iCommonCertificates[0] ) );    
-        }    
+        }  
+    */      
     }
 
 // -----------------------------------------------------------------------------
@@ -531,9 +540,9 @@
 //
 void CCUIDetailsDialog::DoShowDrmL()
     {
-    DRM::CDrmUiHandling *drmUiHandler = DRM::CDrmUiHandling::NewLC();
-    drmUiHandler->ShowDetailsViewL( iFile );
-    CleanupStack::PopAndDestroy( drmUiHandler );
+    CDRMHelper* helper = CDRMHelper::NewLC( *iCoeEnv );
+    helper->LaunchDetailsViewEmbeddedL( iFile );   
+    CleanupStack::PopAndDestroy( helper );    
     }
 
 // -----------------------------------------------------------------------------
@@ -544,6 +553,7 @@
 //
 HBufC* CCUIDetailsDialog::LoadLinkLC( TInt aResourceId )
     {
+    /*
     HBufC* link = StringLoader::LoadLC( aResourceId );
     HBufC* tmp = link->ReAllocL( link->Length() + KLinkTagOpen().Length() + KLinkTagClose().Length() );
     
@@ -554,7 +564,9 @@
     link->Des().Insert(0, KLinkTagOpen);
     link->Des().Append( KLinkTagClose );   
 
-    return link;    
+    return link;   
+    */ 
+    return NULL;
     }
 
 //  End of File  
--- a/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDialogs.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDialogs.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -21,21 +21,21 @@
 #include <bautils.h>
 #include <eikenv.h>
 #include <StringLoader.h>
-#include <AknQueryDialog.h>
+//#include <AknQueryDialog.h> 
 #include <eikprogi.h>
-#include <aknnotewrappers.h>
+//#include <aknnotewrappers.h>
 #include <data_caging_path_literals.hrh>
 #include <SWInstCommonUI.rsg>
-#include <aknmessagequerydialog.h>
+//#include <aknmessagequerydialog.h>
 #include <hlplch.h>
-#include <csxhelp/am.hlp.hrh>
+//#include <csxhelp/am.hlp.hrh>
 #include <coehelp.h>
 #include <featmgr.h>
 #include <sysutil.h>
 #ifdef RD_MULTIPLE_DRIVE
 #include <driveinfo.h>
 #endif //RD_MULTIPLE_DRIVE
-#include <akninputblock.h>
+//#include <akninputblock.h>
  
 #include "CUIDialogs.h"
 #include "CUIDriveUtils.h"
@@ -80,8 +80,8 @@
     fileName.Append( KCUIResourceFileName );
     iResourceFileOffset = CUIUtils::LoadResourceFileL( fileName, iCoeEnv );    
 
-    iAbsorber = CAknInputBlock::NewLC();
-    CleanupStack::Pop( iAbsorber );
+//    iAbsorber = CAknInputBlock::NewLC();
+//    CleanupStack::Pop( iAbsorber );
     
     FeatureManager::InitializeLibL(); 
     }
@@ -112,7 +112,7 @@
         iCoeEnv->DeleteResourceFile( iResourceFileOffset );
         }
 
-    delete iAbsorber;
+//    delete iAbsorber;
 
     FeatureManager::UnInitializeLib();
     }
@@ -285,7 +285,7 @@
                                                     TInt aSoftkeyResourceId ) const
     {
     TBool response( EFalse );
-
+/*
     CAknQueryDialog* note = 
         CAknQueryDialog::NewL( CAknQueryDialog::EConfirmationTone );
 
@@ -297,7 +297,7 @@
         {
         response = ETrue;
         }   
-
+*/
     return response;    
     }
 
@@ -312,9 +312,10 @@
     const RArray<TDriveUnit>& aDriveUnits,
     const RArray<TInt64>& aDriveSpaces,
     TInt& aSelectionResult )
-    {   
+    {  
+    
     TInt result( KErrNone );
-
+/*
     // Sanity check
     if ( aSize <= 0 )
         {
@@ -439,7 +440,7 @@
         }    
     
     CleanupStack::PopAndDestroy( driveUtils );
-
+*/
     return result;
     }
 
@@ -450,9 +451,10 @@
 // -----------------------------------------------------------------------------
 //
 EXPORT_C TBool CCUIDialogs::ShowSecurityWarningDialogL()
-    {   
+    { 
+    
     TBool result( EFalse );
-    
+    /*
     // Load resources
     HBufC* text = StringLoader::LoadLC( R_SWCOMMON_SECURITY_WARNING );
     HBufC* linkText = NULL;
@@ -490,7 +492,7 @@
         }    
     
     CleanupStack::PopAndDestroy( 3, text ); // message, linkText, text
-
+     */
     return result;    
     }
  
@@ -515,8 +517,10 @@
 //
 EXPORT_C void CCUIDialogs::ShowErrorNoteL( const TDesC& aErrorText ) const
     {
+    /*
     CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue );
     note->ExecuteLD( aErrorText );
+    */
     }
 
 // -----------------------------------------------------------------------------
@@ -597,6 +601,7 @@
                                         TInt& aIndexOfAppToBeStarted ) const
            
     {
+    /*
     aIndexOfAppToBeStarted = KErrNotFound;
     
     // Prepare for showing the installation complete query
@@ -675,7 +680,9 @@
     	aIndexOfAppToBeStarted = KErrNotFound;	
     	}    
 
-    return appIsStarted;	
+    return appIsStarted;
+    */
+    return EFalse;
     }   
     
 // -----------------------------------------------------------------------------
@@ -689,6 +696,7 @@
                                 const MDesCArray& aApplicationArray,
                                 TInt aSoftkeyResourceId ) const
 	{
+    /*
     HBufC* appList = HBufC::NewLC( 0 ); 
     TInt count = aApplicationArray.MdcaCount();   
     for ( TInt i = 0; i < count; i++ )
@@ -731,6 +739,8 @@
         }
     CleanupStack::PopAndDestroy( message );
     return response; 
+    */
+    return EFalse;
 	}                                
                                      
 
@@ -772,7 +782,7 @@
 //
 TInt CCUIDialogs::ShowSecurityWarningHelp( TAny* aPtr )
     {
-    TRAP_IGNORE( reinterpret_cast<CCUIDialogs*>(aPtr)->LaunchHelpL( KAM_HLP_INSTALL_UNTRUSTED ) );    
+    //TRAP_IGNORE( reinterpret_cast<CCUIDialogs*>(aPtr)->LaunchHelpL( KAM_HLP_INSTALL_UNTRUSTED ) );    
 
     return KErrNone;    
     }
--- a/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDriveUtils.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDriveUtils.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -22,13 +22,13 @@
 #include <pathinfo.h>
 #include <data_caging_path_literals.hrh>
 #include <SWInstCommonUI.rsg>
-#include <AknCommonDialogs.h>
-#include <CAknMemorySelectionDialog.h>
+//#include <AknCommonDialogs.h> // Removed since CR 548
+//#include <CAknMemorySelectionDialog.h> // Removed since CR 548
 #ifdef RD_MULTIPLE_DRIVE 
-#include <CAknMemorySelectionDialogMultiDrive.h>
-#include <AknCommonDialogsDynMem.h>
+//#include <CAknMemorySelectionDialogMultiDrive.h> // Removed since CR 548
+//#include <AknCommonDialogsDynMem.h> // Removed since CR 548
 #else
-#include <CAknMemorySelectionDialog.h>
+//#include <CAknMemorySelectionDialog.h> // Removed since CR 548
 #endif //RD_MULTIPLE_DRIVE
 
 #include "CUIDriveUtils.h"
@@ -119,9 +119,12 @@
 // -----------------------------------------------------------------------------
 //
 TBool CCUIDriveUtils::ShowSelectionDialogL( TInt& aSelectedDrive )
-    {       
+    {  
+
     TBool result( EFalse );
     
+    // Removed since CR 548   
+/*    
     aSelectedDrive = 0;    
 
 #ifdef RD_MULTIPLE_DRIVE           
@@ -230,7 +233,7 @@
 
 #endif  //RD_MULTIPLE_DRIVE  
     CleanupStack::PopAndDestroy( 2 ); // header, memoryDialog
- 
+*/ 
     return result;    
     }    
 
--- a/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIProgressDialog.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIProgressDialog.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -40,11 +40,13 @@
 // Destructor
 CCUIProgressDialog::~CCUIProgressDialog()
     {
+    
     if (iSelfPtr) 
         {
         *iSelfPtr = NULL;
         iSelfPtr = NULL;
         }
+    
     }
 
 // ---------------------------------------------------------------------------
--- a/appinstaller/AppinstUi/Plugin/SisxUI/Src/SisxUIHandler.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Plugin/SisxUI/Src/SisxUIHandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -28,7 +28,7 @@
 #include <SWInstCommonUI.rsg>
 #include <SWInstDefs.h>
 #include <featmgr.h>
-#include <csxhelp/am.hlp.hrh>
+//#include <csxhelp/am.hlp.hrh>
 #include <swi/sisinstallerrors.h>
 #include <AknUtils.h>
 #include <eikfrlb.h> //for the marquee effect
@@ -478,9 +478,7 @@
     // than the currently installed old version (i.e. when downgrading). See
     // also User::QueryVersionSupported() although it has bit different meaning.
     TBool downgrading = ( newVersion.iMajor < oldVersion.iMajor ||
-            ( newVersion.iMajor == oldVersion.iMajor && newVersion.iMinor < oldVersion.iMinor ) ||
-            ( newVersion.iMajor == oldVersion.iMajor && newVersion.iMinor == oldVersion.iMinor &&
-                newVersion.iBuild < oldVersion.iBuild ) );
+            ( newVersion.iMajor == oldVersion.iMajor && newVersion.iMinor < oldVersion.iMinor ) );
     if( !downgrading )
         {
         iShowingDialog = EFalse;
@@ -1839,9 +1837,9 @@
 //
 TInt CSisxUIHandler::ShowCapabilitiesHelp( TAny* aPtr )
     {
-    TRAP_IGNORE( 
-        reinterpret_cast<CSisxUIHandler*>(aPtr)->iCommonDialogs->LaunchHelpL( KAM_HLP_INSTALL_CAPAB )    
-        );    
+    //TRAP_IGNORE( 
+    //    reinterpret_cast<CSisxUIHandler*>(aPtr)->iCommonDialogs->LaunchHelpL( KAM_HLP_INSTALL_CAPAB )    
+    //    );    
 
     return KErrNone;    
     }
--- a/appinstaller/AppinstUi/Server/Data/SWInstSvrUI_reg.rss	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/Server/Data/SWInstSvrUI_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -35,17 +35,17 @@
 
     datatype_list= 
         {
-        DATATYPE { priority=EDataTypePrioritySystem; type="x-epoc/x-sisx-app"; },
-        DATATYPE { priority=EDataTypePrioritySystem; type="application/vnd.symbian.install"; },
-        DATATYPE { priority=EDataTypePrioritySystem; type="x-epoc/x-app268436505"; },  /* x-epoc/x-app + Decimal value of 0x10000049 (UID3 of legacy sis files) */
-        DATATYPE { priority=EDataTypePrioritySystem; type="text/vnd.sun.j2me.app-descriptor"; },
-        DATATYPE { priority=EDataTypePrioritySystem; type="application/java-archive"; },
-        DATATYPE { priority=EDataTypePrioritySystem; type="application/x-java-archive"; },
-        DATATYPE { priority=EDataTypePrioritySystem; type="application/java"; },
-        DATATYPE { priority=EDataTypePrioritySystem; type="application/x-pip"; }
+        DATATYPE { priority=EDataTypePriorityLow; type="x-epoc/x-sisx-app"; },
+        DATATYPE { priority=EDataTypePriorityLow; type="application/vnd.symbian.install"; },
+        DATATYPE { priority=EDataTypePriorityLow; type="x-epoc/x-app268436505"; },  /* x-epoc/x-app + Decimal value of 0x10000049 (UID3 of legacy sis files) */
+        DATATYPE { priority=EDataTypePriorityLow; type="text/vnd.sun.j2me.app-descriptor"; },
+        DATATYPE { priority=EDataTypePriorityLow; type="application/java-archive"; },
+        DATATYPE { priority=EDataTypePriorityLow; type="application/x-java-archive"; },
+        DATATYPE { priority=EDataTypePriorityLow; type="application/java"; },
+        DATATYPE { priority=EDataTypePriorityLow; type="application/x-pip"; }
 #ifdef __WEB_WIDGETS
-        , DATATYPE { priority=EDataTypePrioritySystem; type="application/x-nokia-widget"; }
-        , DATATYPE { priority=EDataTypePrioritySystem; type="application/widget"; }
+        , DATATYPE { priority=EDataTypePriorityLow; type="application/x-nokia-widget"; }
+        , DATATYPE { priority=EDataTypePriorityLow; type="application/widget"; }
 #endif
         };  
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/appinstui.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description:  Software install UI
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += sifuidevicedialogplugin/sifuidevicedialogplugin.pro \
+    sifuiinstallindicatorplugin/sifuiinstallindicatorplugin.pro \
+    sisxsilentinstallindicatorplugin/sisxsilentinstallindicatorplugin.pro
+
--- a/appinstaller/AppinstUi/group/SWInstCommonUI.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/group/SWInstCommonUI.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -67,14 +67,14 @@
 LIBRARY         eikdlg.lib 
 LIBRARY         eikctl.lib
 LIBRARY         platformenv.lib
-LIBRARY         commondialogs.lib
+//LIBRARY         commondialogs.lib  // Removed since CR 548
 LIBRARY         efsrv.lib
 LIBRARY         X509CertNameParser.lib
 LIBRARY         x509.lib
 LIBRARY         crypto.lib
 LIBRARY         hlplch.lib
 LIBRARY         featmgr.lib
-LIBRARY         DRMUiHandling.lib
+LIBRARY         DRMHelper.lib
 LIBRARY         sysutil.lib
 LIBRARY         egul.lib
 LIBRARY         hash.lib
--- a/appinstaller/AppinstUi/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -81,6 +81,9 @@
 // Daemon
 daemon.mmp 
 
-//  End of File
+// SISX SIF plugin
+#include "../sisxsifplugin/group/bld.inf"
 
+// Startup list updater
+#include "../startuplistupdater/group/bld.inf"
 
--- a/appinstaller/AppinstUi/group/daemon.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/AppinstUi/group/daemon.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -21,9 +21,7 @@
 
 MACRO __DATA_CAGING__
 
-CAPABILITY    TrustedUI ReadUserData AllFiles WriteDeviceData
-// AllFiles needed because uninstaller have to search sys\bin folder.
-// WriteDeviceData for PS keys.
+CAPABILITY 		TrustedUI ReadUserData AllFiles WriteDeviceData ReadDeviceData  
  
 TARGET         swidaemon.exe
 TARGETTYPE     exe
@@ -71,8 +69,6 @@
 LIBRARY        apparc.lib
 LIBRARY        sisregistryclient.lib
 LIBRARY        swinstcli.lib
-LIBRARY        aknnotify.lib
-LIBRARY        bafl.lib            // Resource access
 LIBRARY        swidataprovider.lib
 LIBRARY        sisxfile.lib
 LIBRARY        estor.lib
@@ -80,6 +76,12 @@
 LIBRARY        platformenv.lib
 LIBRARY        sysutil.lib         // For Uninstaller
 LIBRARY        ecom.lib            // For Plug-in support
+LIBRARY        stsclient.lib
+LIBRARY        swiobserverclient.lib
+LIBRARY        sif.lib               // USIF SW Installer FW
+LIBRARY        scrclient.lib
+LIBRARY        hbwidgets.lib         // For Symbian Device Dialogs
+LIBRARY        hbcore.lib	    // For HbIndicatorSymbian
 
 DEBUGLIBRARY   flogger.lib
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidevicedialogplugin.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Software install framework (SIF) device dialog plugin.
+*
+*/
+
+#ifndef SIFUIDEVICEDIALOGPLUGIN_H
+#define SIFUIDEVICEDIALOGPLUGIN_H
+
+#include <hbdevicedialogplugin.h>       // HbDeviceDialogPlugin
+
+
+/**
+ * SIF UI device dialog plugin.
+ * Implements device dialog plugin for UI dialogs that can be used
+ * in software install framwork (SIF) plugins.
+ */
+class SifUiDeviceDialogPlugin : public HbDeviceDialogPlugin
+{
+    Q_OBJECT
+
+public:
+    SifUiDeviceDialogPlugin();
+    ~SifUiDeviceDialogPlugin();
+
+public:     // from HbDeviceDialogPlugin
+    bool accessAllowed(const QString &deviceDialogType, const QVariantMap &parameters,
+            const QVariantMap &securityInfo) const;
+    HbDeviceDialogInterface *createDeviceDialog(const QString &deviceDialogType,
+            const QVariantMap &parameters);
+    bool deviceDialogInfo(const QString &deviceDialogType, const QVariantMap &parameters,
+            DeviceDialogInfo *info) const;
+    QStringList deviceDialogTypes() const;
+    PluginFlags pluginFlags() const;
+    int error() const;
+
+private:
+    Q_DISABLE_COPY(SifUiDeviceDialogPlugin)
+
+    int mError;
+};
+
+#endif // SIFUIDEVICEDIALOGPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialog.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Device dialog plugin for SIF UI dialogs.
+*
+*/
+
+#ifndef SIFUIDIALOG_H
+#define SIFUIDIALOG_H
+
+#include <hbdialog.h>                   // HbDialog
+#include <hbdevicedialoginterface.h>    // HbDeviceDialogInterface
+#include "sifuidialogdefinitions.h"     // enum SifUiDeviceDialogType
+#include <qmobilityglobal.h>            // QTM namespace macros
+
+class HbTranslator;
+class SifUiDialogTitleWidget;
+class SifUiDialogContentWidget;
+class HbIndicator;
+
+QTM_BEGIN_NAMESPACE
+class QValueSpaceSubscriber;
+QTM_END_NAMESPACE
+
+
+/**
+ * SW Install notification widget class.
+ */
+class SifUiDialog : public HbDialog, public HbDeviceDialogInterface
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    SifUiDialog(const QVariantMap &parameters);
+    virtual ~SifUiDialog();
+
+public:     // new functions
+    static SifUiDeviceDialogType dialogType(const QVariantMap &parameters);
+
+public:     // from HbDeviceDialogInterface
+    bool setDeviceDialogParameters(const QVariantMap &parameters);
+    int deviceDialogError() const;
+    void closeDeviceDialog(bool byClient);
+    HbDialog *deviceDialogWidget() const;
+
+signals:
+    void deviceDialogClosed();
+    void deviceDialogData(const QVariantMap &data);
+
+protected:  // from HbPopup (via HbDialog)
+    void hideEvent(QHideEvent *event);
+    void showEvent(QShowEvent *event);
+
+private:    // new functions
+    bool isInstallIndicatorActive();
+    bool constructDialog(const QVariantMap &parameters);
+    bool updateFromParameters(const QVariantMap &parameters);
+    void updateButtons(const QVariantMap &parameters);
+    void prepareForErrorDetails(const QVariantMap &parameters);
+    bool displayAdditionalQuery(const QVariantMap &parameters);
+    bool displayGrantCapabilitiesQuery(const QVariantMap &parameters);
+    bool displaySelectLanguageQuery(const QVariantMap &parameters);
+    bool displaySelectOptionsQuery(const QVariantMap &parameters);
+    void sendResult(SifUiDeviceDialogReturnValue value);
+
+private slots:
+    void handleInstallAccepted();
+    void handleInstallCancelled();
+    void handleMemorySelectionChanged(const QChar &driveLetter);
+    void handleHidePressed();
+    void handleShowInstalled();
+    void handleErrorDetails();
+    void handleCapabilitiesGranted();
+    void handleAdditionalDialogClosed();
+    void handleLanguageSelected(int index);
+    void handleOptionsDialogClosed(int code);
+
+private:
+    Q_DISABLE_COPY(SifUiDialog)
+
+    HbTranslator *mCommonTranslator;
+    HbTranslator *mSifUITranslator;
+    int mLastDialogError;
+    bool mShowEventReceived;
+    SifUiDeviceDialogType mDialogType;
+    SifUiDialogTitleWidget *mTitle;
+    SifUiDialogContentWidget *mContent;
+    QString mErrorDetails;
+    int mErrorCode;
+    int mExtendedErrorCode;
+    HbAction *mPrimaryAction;
+    HbAction *mSecondaryAction;
+    QVariantMap mResultMap;
+    HbIndicator *mIndicator;
+
+    QTM_PREPEND_NAMESPACE(QValueSpaceSubscriber) *mSubscriber;
+};
+
+#endif // SIFUIDIALOG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogcertificatedetails.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Certificate details dialog in SifUi
+*
+*/
+
+#ifndef SIFUIDIALOGCERTIFICATEDETAILS_H
+#define SIFUIDIALOGCERTIFICATEDETAILS_H
+
+#include <hbdialog.h>                   // HbDialog
+
+class SifUiDialogCertificateInfo;
+
+
+/**
+ * SifUi certificate details dialog. Implements selection list and
+ * certificate details dialogs. Selection list is shown first if there
+ * are more than one certificate to be displayed.
+ */
+class SifUiDialogCertificateDetails : public HbDialog
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    SifUiDialogCertificateDetails(const QList<SifUiDialogCertificateInfo*> &certificates);
+    virtual ~SifUiDialogCertificateDetails();
+
+public:     // new functions
+    void showDetails();
+
+private:    // new functions
+    QString certificateDetails(const SifUiDialogCertificateInfo& certificate);
+    void showList();
+
+private slots:
+    void certificateSelected();
+    void showCertificate(int index);
+
+private:    // data
+    const QList<SifUiDialogCertificateInfo*> &mCertificates;
+};
+
+#endif // SIFUIDIALOGCERTIFICATEDETAILS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogcertificateinfo.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Certificate info class for SIF UI device dialog plugin.
+*
+*/
+
+#ifndef SIFUIDIALOGCERTIFICATEINFO_H
+#define SIFUIDIALOGCERTIFICATEINFO_H
+
+#include <QDateTime>
+
+/**
+ * Certificate info class for SifUi device dialogs.
+ * This class corresponds to Symbian-side CSifUiCertificateInfo class.
+ */
+class SifUiDialogCertificateInfo
+{
+public:     // constructor and destructor
+    SifUiDialogCertificateInfo(const QString &subject, const QString &issuer,
+        const QByteArray &fingerprint, const QByteArray &serialNumber,
+        const QDateTime &validFrom, const QDateTime &validTo);
+    virtual ~SifUiDialogCertificateInfo();
+
+public:     // new functions
+    const QString subjectName() const;
+    const QString issuerName() const;
+    const QByteArray fingerprint() const;
+    const QString formattedFingerprint() const;
+    const QByteArray serialNumber() const;
+    const QString formattedSerialNumber() const;
+    const QDateTime validFrom() const;
+    const QDateTime validTo() const;
+
+private:
+    QString mSubjectName;
+    QString mIssuerName;
+    QByteArray mFingerprint;
+    QByteArray mSerialNumber;
+    QDateTime mValidFrom;
+    QDateTime mValidTo;
+};
+
+#endif // SIFUIDIALOGCERTIFICATEINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogcontentwidget.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: SIF UI dialog content widget.
+*
+*/
+
+#ifndef SIFUIDIALOGCONTENTWIDGET_H
+#define SIFUIDIALOGCONTENTWIDGET_H
+
+#include <hbwidget.h>
+#include <sifuidialogdefinitions.h>
+#include <qmobilityglobal.h>            // QTM namespace macros
+
+class HbLabel;
+class QGraphicsLinearLayout;
+class HbStackedWidget;
+class HbComboBox;
+class HbProgressBar;
+class CFbsBitmap;
+
+QTM_BEGIN_NAMESPACE
+class QValueSpacePublisher;
+class QValueSpaceSubscriber;
+QTM_END_NAMESPACE
+
+
+class SifUiDialogContentWidget : public HbWidget
+{
+    Q_OBJECT
+
+public:
+    SifUiDialogContentWidget(QGraphicsItem *parent=0, Qt::WindowFlags flags=0);
+    virtual ~SifUiDialogContentWidget();
+
+    void constructFromParameters(const QVariantMap &parameters);
+    void updateFromParameters(const QVariantMap &parameters);
+    void changeType(SifUiDeviceDialogType type);
+    QString applicationName() const;
+
+signals:
+    void memorySelectionChanged(const QChar &driveLetter);
+
+private slots:
+	void handleMemorySelectionChange(int selectedIndex);
+
+private:
+    Q_DISABLE_COPY(SifUiDialogContentWidget)
+    QString applicationName(const QVariantMap &parameters);
+    QString applicationSize(const QVariantMap &parameters);
+    void removeDetails();
+    void addDetails(const QStringList &detailList);
+    void addDetail(const QString &detailText);
+    void createAppName(const QString &appName);
+    void updateAppIcon(const QVariantMap &parameters);
+    void updateAppSize(const QVariantMap &parameters);
+    bool updateMemorySelection(const QVariantMap &parameters);
+    bool updateProgressBar(const QVariantMap &parameters);
+    bool updateErrorText(const QVariantMap &parameters);
+    void saveSelectedDriveAsDefault(const QChar& drive);
+    QChar readDefaultSelectedDrive();
+
+private:    // data
+    HbLabel *mAppIcon;
+    HbLabel *mAppName;
+    HbLabel *mAppSize;
+    QGraphicsLinearLayout *mMainLayout;
+    QGraphicsLinearLayout *mAppDetailsLayout;
+    HbStackedWidget *mStackedWidget;
+    HbComboBox *mMemorySelection;
+    QStringList mDriveLetterList;
+    HbProgressBar *mProgressBar;
+    HbLabel *mErrorText;
+    CFbsBitmap *mBitmap;
+    CFbsBitmap *mMask;
+    QTM_PREPEND_NAMESPACE(QValueSpacePublisher) *mPublisher;
+    QTM_PREPEND_NAMESPACE(QValueSpaceSubscriber) *mSubscriber;
+};
+
+#endif // SIFUIDIALOGCONTENTWIDGET_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogdefinitions.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definitions for SIF UI device dialog plugin.
+*
+*/
+
+#ifndef SIFUIDIALOGDEFINITIONS_H
+#define SIFUIDIALOGDEFINITIONS_H
+
+enum SifUiDeviceDialogType
+    {
+    SifUiUnspecifiedDialog = 0,
+    SifUiConfirmationQuery = 1,
+    SifUiProgressNote = 2,
+    SifUiCompleteNote = 3,
+    SifUiErrorNote = 4
+    };
+
+enum SifUiInstallingPhase
+    {
+    SifUiInstalling = 0,
+    SifUiDownloading = 1,
+    SifUiCheckingCerts = 2
+    };
+
+enum SifUiDeviceDialogReturnValue
+    {
+    SifUiContinue = 0,
+    SifUiCancel = 1,
+    SifUiIndicator = 3
+    };
+
+// Variant map keys for dialog type and title (common to all dialog types)
+const QString KSifUiDialogType = "type";                // enum SifUiDeviceDialogType
+const QString KSifUiDialogTitle = "title";              // string
+
+// Variant map keys for device dialog return values
+const QString KSifUiQueryReturnValue = "ret";           // enum SifUiDeviceDialogReturnValue
+const QString KSifUiSelectedMemory = "drv";             // drive letter
+
+// Variant map keys for "confirmation query" dialog parameters
+const QString KSifUiApplicationName = "app";            // string
+const QString KSifUiApplicationIconHandle = "icon";     // integer, bitmap handle
+const QString KSifUiApplicationIconMaskHandle = "mask"; // integer, bitmap handle
+const QString KSifUiApplicationVersion = "ver";         // string
+const QString KSifUiApplicationSize = "size";           // integer
+const QString KSifUiApplicationDetails = "details";     // string list
+const QString KSifUiMemorySelection = "mem";            // string (comma separated drive letters)
+const QString KSifUiCertificates = "cert";              // binary
+
+// Variant map keys for "progress note" dialog parameters
+const QString KSifUiProgressNoteText = "txt";           // string
+const QString KSifUiProgressNoteFinalValue = "fin";     // integer
+const QString KSifUiProgressNoteValue = "val";          // integer
+const QString KSifUiProgressNotePhase = "phase";        // enum SifUiInstallingPhase
+
+// Variant map keys for "progress note" and "installation complete note" buttons
+const QString KSifUiProgressNoteIsHideButtonHidden = "hidebtn";     // boolean
+const QString KSifUiProgressNoteIsCancelButtonHidden = "cancelbtn"; // boolean
+const QString KSifUiCompleteNoteIsShowButtonHidden = "showbtn";     // boolean
+const QString KSifUiErrorNoteIsDetailsButtonHidden = "errdtlbtn";   // boolean
+
+// Variant map keys for "error" dialog parameters
+const QString KSifUiErrorCategory = "errcat";           // enum Usif::TErrorCategory
+const QString KSifUiErrorCode = "errcode";              // integer
+const QString KSifUiErrorCodeExtended = "errext";       // integer
+const QString KSifUiErrorMessage = "errmsg";            // string
+const QString KSifUiErrorDetails = "errdet";            // string
+
+// Variant map keys for "grant capabilities" dialog parameters
+const QString KSifUiGrantCapabilities = "grcap";        // binary (TCapabilitySet)
+
+// Variant map keys for "select language" dialog parameters
+const QString KSifUiSelectableLanguages = "lang";       // binary (TPckg< RArray<TLanguage> >)
+const QString KSifUiSelectedLanguageIndex = "langind";  // integer
+
+// Variant map keys for "select options" dialog parameters
+const QString KSifUiSelectableOptions = "opts";         // descriptor array
+const QString KSifUiSelectedOptions = "optsind";        // binary (TPckg< RArray<TInt> >)
+
+#endif // SIFUIDIALOGDEFINITIONS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialoggrantcapabilities.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Grant capabilities dialog in SifUi
+*
+*/
+
+#ifndef SIFUIDIALOGGRANTCAPABILITIES_H
+#define SIFUIDIALOGGRANTCAPABILITIES_H
+
+#include <HbDialog>
+
+
+/**
+ * SifUi dialog requesting the user to grant capabilities
+ * for the application being installed.
+ */
+class SifUiDialogGrantCapabilities : public HbDialog
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    SifUiDialogGrantCapabilities(const QString &applicationName,
+        const QVariant &capabilities, QGraphicsItem *parent = 0);
+    virtual ~SifUiDialogGrantCapabilities();
+
+signals:
+    void accepted();
+    void rejected();
+
+private slots:
+    void handleAccepted();
+    void handleRejected();
+};
+
+#endif // SIFUIDIALOGGRANTCAPABILITIES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialoggrantcapabilitiescontent.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Content widget for grant capabilities dialog in SifUi
+*
+*/
+
+#ifndef SIFUIDIALOGGRANTCAPABILITIESCONTENT_H
+#define SIFUIDIALOGGRANTCAPABILITIESCONTENT_H
+
+#include <HbWidget>
+
+
+/**
+ * Content widget for SifUiDialogGrantCapabilities dialog.
+ */
+class SifUiDialogGrantCapabilitiesContent : public HbWidget
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    SifUiDialogGrantCapabilitiesContent(const QString &applicationName,
+        const QVariant &capabilities, QGraphicsItem *parent = 0);
+    virtual ~SifUiDialogGrantCapabilitiesContent();
+
+signals:
+    void accepted();
+    void rejected();
+
+private slots:
+    void viewDetails();
+
+private:    // new functions
+    void setCapabilities(const QVariant &capabilities);
+#ifdef Q_OS_SYMBIAN
+    void setCapabilitiesSymbianL( const TDesC8 &aBuf );
+    QString capabilityName( const TCapability aCapability );
+#endif // Q_OS_SYMBIAN
+
+private:    // data
+    QStringList mCapabilities;
+    bool mIsCapabilitiesValid;
+};
+
+#endif // SIFUIDIALOGGRANTCAPABILITIESCONTENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogselectlanguage.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Language selection dialog in SifUi
+*
+*/
+
+#ifndef SIFUIDIALOGSELECTLANGUAGE_H
+#define SIFUIDIALOGSELECTLANGUAGE_H
+
+#include <HbDialog>
+
+class HbRadioButtonList;
+
+
+/**
+ * SifUi dialog requesting the user to select language. This
+ * dialog is displayed only if the languages in the sis-file
+ * do not match the languages that are supported by the mobile
+ * phone.
+ */
+class SifUiDialogSelectLanguage : public HbDialog
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    SifUiDialogSelectLanguage(const QVariant &languages, QGraphicsItem *parent = 0);
+    ~SifUiDialogSelectLanguage();
+
+signals:
+    void languageSelected(int index);
+    void languageSelectionCancelled();
+
+public:     // new functions
+    int selectedLanguageIndex() const;
+
+private:    // new functions
+    QStringList languageNames(const QVariant &languages);
+
+private slots:
+    void handleAccepted();
+    void handleRejected();
+
+private:    // data
+    HbRadioButtonList *mRadioButtonList;
+    HbAction *mOkAction;
+};
+
+#endif // SIFUIDIALOGSELECTLANGUAGE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogtitlewidget.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: SIF UI dialog title widget.
+*
+*/
+
+#ifndef SIFUIDIALOGTITLEWIDGET_H
+#define SIFUIDIALOGTITLEWIDGET_H
+
+#include <hbwidget.h>
+#include "sifuidialogdefinitions.h"         // SifUiDeviceDialogType, SifUiDeviceDialogMode
+#include "sifuidialogcertificateinfo.h"     // SifUiDialogCertificateInfo
+
+class QGraphicsLinearLayout;
+class HbLabel;
+class HbPushButton;
+class SifUiDialogCertificateDetails;
+
+
+class SifUiDialogTitleWidget : public HbWidget
+{
+    Q_OBJECT
+
+public:
+    SifUiDialogTitleWidget(QGraphicsItem *parent=0, Qt::WindowFlags flags=0);
+    virtual ~SifUiDialogTitleWidget();
+
+    void constructFromParameters(const QVariantMap &parameters);
+    void updateFromParameters(const QVariantMap &parameters);
+
+private:
+    Q_DISABLE_COPY(SifUiDialogTitleWidget)
+    QString defaultTitle(SifUiDeviceDialogType type, SifUiInstallingPhase phase);
+    void updateTitle(const QVariantMap &parameters);
+    void updateCertificates(const QVariantMap &parameters);
+    QList<SifUiDialogCertificateInfo*> *getCertificates(QByteArray array);
+
+private slots:
+    void certificatesClicked();
+
+private:    // data
+    QGraphicsLinearLayout *mLayout;
+    HbLabel *mTitle;
+    HbPushButton *mCertButton;
+    QList<SifUiDialogCertificateInfo*> *mCertificates;
+    SifUiDialogCertificateDetails *mDetailsDialog;
+};
+
+#endif // SIFUIDIALOGTITLEWIDGET_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/rom/sifuidevicedialogplugin.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ROM image files for SW install notification dialog plugin.
+*
+*/
+
+#ifndef SIFUIDEVICEDIALOGPLUGIN_IBY
+#define SIFUIDEVICEDIALOGPLUGIN_IBY
+
+file=ABI_DIR\UREL\sifuidevicedialogplugin.dll SHARED_LIB_DIR\sifuidevicedialogplugin.dll UNPAGED
+data=DATAZ_\pluginstub\sifuidevicedialogplugin.qtplugin \resource\plugins\devicedialogs\sifuidevicedialogplugin.qtplugin
+data=DATAZ_\resource\qt\crml\sifuidevicedialogplugin.qcrml \resource\qt\crml\sifuidevicedialogplugin.qcrml
+
+#endif  // SIFUIDEVICEDIALOGPLUGIN_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/rom/sifuidevicedialogplugin_resources.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ROM image files for SW install notification dialog plugin.
+*
+*/
+
+#ifndef SIFUIDEVICEDIALOGPLUGIN_RESOURCES_IBY
+#define SIFUIDEVICEDIALOGPLUGIN_RESOURCES_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+data=DATAZ_/QT_TRANSLATIONS_DIR/sifuidevicedialogplugin.qm QT_TRANSLATIONS_DIR/sifuidevicedialogplugin.qm
+
+#endif  // SIFUIDEVICEDIALOGPLUGIN_RESOURCES_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/sifuidevicedialogplugin.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,85 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Software Install Framework (SIF) device dialogs plugin.
+#
+
+TEMPLATE = lib
+TARGET = sifuidevicedialogplugin
+CONFIG += hb plugin
+TRANSLATIONS = sifuidevicedialogplugin.ts
+
+INCLUDEPATH += .
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+INCLUDEPATH += ../sifuiinstallindicatorplugin/inc
+DEPENDPATH += .
+
+LIBS += -lQtPublishSubscribe -lQtSystemInfo
+
+HEADERS += inc/sifuidevicedialogplugin.h \
+    inc/sifuidialogdefinitions.h \
+    inc/sifuidialog.h \
+    inc/sifuidialogtitlewidget.h \
+    inc/sifuidialogcontentwidget.h \
+    inc/sifuidialogcertificateinfo.h \
+    inc/sifuidialogcertificatedetails.h \
+    inc/sifuidialoggrantcapabilities.h \
+    inc/sifuidialoggrantcapabilitiescontent.h \
+    inc/sifuidialogselectlanguage.h
+
+SOURCES += src/sifuidevicedialogplugin.cpp \
+    src/sifuidialog.cpp \
+    src/sifuidialogtitlewidget.cpp \
+    src/sifuidialogcontentwidget.cpp \
+    src/sifuidialogcertificateinfo.cpp \
+    src/sifuidialogcertificatedetails.cpp \
+    src/sifuidialoggrantcapabilities.cpp \
+    src/sifuidialoggrantcapabilitiescontent.cpp \
+    src/sifuidialogselectlanguage.cpp
+
+symbian: {
+    TARGET.EPOCALLOWDLLDATA = 1
+    TARGET.CAPABILITY = CAP_GENERAL_DLL
+    TARGET.UID3 = 0x2002C3AC
+
+    SOURCES += src/sifuidialogtitlewidget_symbian.cpp \
+        src/sifuidialogselectlanguage_symbian.cpp \
+        src/sifuidialogselectoptions_symbian.cpp
+
+    pluginstub.sources = sifuidevicedialogplugin.dll
+    pluginstub.path = /resource/plugins/devicedialogs
+    DEPLOYMENT += pluginstub
+
+    crmlFiles.sources = sifuidevicedialogplugin.qcrml
+    crmlFiles.path = /resource/qt/crml
+    DEPLOYMENT += crmlFiles
+
+    LIBS += -lfbscli -lPlatformEnv -lestor
+}
+
+BLD_INF_RULES.prj_exports += \
+    "$${LITERAL_HASH}include <platform_paths.hrh>" \
+    "qmakepluginstubs/sifuidevicedialogplugin.qtplugin /epoc32/data/z/pluginstub/sifuidevicedialogplugin.qtplugin" \
+    "inc/sifuidialogdefinitions.h MW_LAYER_PLATFORM_EXPORT_PATH(sifuidialogdefinitions.h)" \
+    "rom/sifuidevicedialogplugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(sifuidevicedialogplugin.iby)" \
+    "rom/sifuidevicedialogplugin_resources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(sifuidevicedialogplugin_resources.iby)"
+
+LIBS += -lxqservice
+
+tests {
+    test.depends = sub-src
+    test.commands += cd tsrc && $(MAKE) test
+    autotest.depends = sub-src
+    autotest.commands += cd tsrc && $(MAKE) autotest
+    QMAKE_EXTRA_TARGETS += test autotest
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/sifuidevicedialogplugin.qcrml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<repository target="RProperty" uidValue="0x20022FC5">
+    <key ref="/KCRUIDSifUiDefaults/KCRUIDSifUiDefaultDrive" int="0x2002C3AC"/>
+</repository>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidevicedialogplugin.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,141 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Software install framework (SIF) device dialog plugin.
+*
+*/
+
+#include "sifuidevicedialogplugin.h"
+#include "sifuidialogdefinitions.h"
+#include "sifuidialog.h"
+
+// This plugin implements one device dialog, SIF UI device dialog.
+static const char* KSifUiDeviceDialog = "com.nokia.sifui/1.0";
+static const struct {
+    const char *mTypeString;
+} dialogInfos[] = {
+    {KSifUiDeviceDialog}
+};
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDeviceDialogPlugin::SifUiDeviceDialogPlugin()
+// ----------------------------------------------------------------------------
+//
+SifUiDeviceDialogPlugin::SifUiDeviceDialogPlugin() : mError(KErrNone)
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDeviceDialogPlugin::~SifUiDeviceDialogPlugin()
+// ----------------------------------------------------------------------------
+//
+SifUiDeviceDialogPlugin::~SifUiDeviceDialogPlugin()
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDeviceDialogPlugin::accessAllowed()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDeviceDialogPlugin::accessAllowed(const QString &deviceDialogType,
+    const QVariantMap &parameters, const QVariantMap &securityInfo) const
+{
+    Q_UNUSED(deviceDialogType)
+    Q_UNUSED(parameters)
+    Q_UNUSED(securityInfo)
+
+    // All clients are allowed to use.
+    // TODO: should access be limited to certain clients?
+    return true;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDeviceDialogPlugin::createDeviceDialog()
+// ----------------------------------------------------------------------------
+//
+HbDeviceDialogInterface *SifUiDeviceDialogPlugin::createDeviceDialog(
+    const QString &deviceDialogType, const QVariantMap &parameters)
+{
+    //  Create device dialog widget
+    Q_UNUSED(deviceDialogType)
+
+    SifUiDialog *deviceDialog = new SifUiDialog(parameters);
+    mError = deviceDialog->deviceDialogError();
+    if (mError != KErrNone) {
+        delete deviceDialog;
+        deviceDialog = 0;
+    }
+
+    return deviceDialog;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDeviceDialogPlugin::deviceDialogInfo()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDeviceDialogPlugin::deviceDialogInfo( const QString &deviceDialogType,
+        const QVariantMap &parameters, DeviceDialogInfo *info) const
+{
+    // Return device dialog flags
+    Q_UNUSED(deviceDialogType);
+    Q_UNUSED(parameters);
+
+    info->group = GenericDeviceDialogGroup;
+    info->flags = NoDeviceDialogFlags;
+    info->priority = DefaultPriority;
+
+    return true;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDeviceDialogPlugin::deviceDialogTypes()
+// ----------------------------------------------------------------------------
+//
+QStringList SifUiDeviceDialogPlugin::deviceDialogTypes() const
+{
+    // Return device dialog types this plugin implements
+
+    QStringList types;
+    const int numTypes = sizeof(dialogInfos) / sizeof(dialogInfos[0]);
+    for(int i = 0; i < numTypes; ++i) {
+        types.append(dialogInfos[i].mTypeString);
+    }
+
+    return types;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDeviceDialogPlugin::pluginFlags()
+// ----------------------------------------------------------------------------
+//
+HbDeviceDialogPlugin::PluginFlags SifUiDeviceDialogPlugin::pluginFlags() const
+{
+    // Return plugin flags
+    return NoPluginFlags;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDeviceDialogPlugin::error()
+// ----------------------------------------------------------------------------
+//
+int SifUiDeviceDialogPlugin::error() const
+{
+    // Return last error
+    return mError;
+}
+
+Q_EXPORT_PLUGIN2(SifUiDeviceDialogPlugin,SifUiDeviceDialogPlugin)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialog.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,559 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Software install notification plugin class.
+*
+*/
+
+#include "sifuidialog.h"                    // SifUiDialog
+#include "sifuidialogtitlewidget.h"         // SifUiDialogTitleWidget
+#include "sifuidialogcontentwidget.h"       // SifUiDialogContentWidget
+#include "sifuidialoggrantcapabilities.h"   // SifUiDialogGrantCapabilities
+#include "sifuidialogselectlanguage.h"      // SifUiDialogSelectLanguage
+#include "sifuiinstallindicatorparams.h"    // KSifUiInstallIndicatorType
+#include <QFile>
+#include <HbLabel>
+#include <HbAction>
+#include <HbIndicator>
+#include <HbTranslator>
+#include <HbMessageBox>
+#include <HbSelectionDialog>
+#include <QValueSpaceSubscriber>
+#include <xqappmgr.h>                       // XQApplicationManager
+
+QTM_USE_NAMESPACE
+
+const QString KTranslationsPath = "/resource/qt/translations/";
+const QString KSifUiTranslationsFile = "sifuidevicedialogplugin";
+const QString KCommonTranslationsFile = "common";
+const QString KSwiErrorsFile = "c:\\temp\\swierrors.txt";
+const QString KSwiErrorFormat = " (%1)";
+
+#ifdef Q_OS_SYMBIAN
+QByteArray ConvertOptionalComponentIndexesL( const QList<QVariant> &aIndexes );
+#endif // Q_OS_SYMBIAN
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// convertOptionalComponentIndexes()
+// ----------------------------------------------------------------------------
+//
+QVariant convertOptionalComponentIndexes(const QList<QVariant> &selections)
+{
+#ifdef Q_OS_SYMBIAN
+    QByteArray byteArray;
+    QT_TRAP_THROWING( byteArray = ConvertOptionalComponentIndexesL( selections ) );
+    return QVariant( byteArray );
+#else
+    return QVariant();
+#endif
+}
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::SifUiDialog()
+// ----------------------------------------------------------------------------
+//
+SifUiDialog::SifUiDialog(const QVariantMap &parameters) : HbDialog(),
+    mCommonTranslator(0), mSifUITranslator(0), mLastDialogError(KErrNone),
+    mShowEventReceived(false), mDialogType(SifUiUnspecifiedDialog),
+    mTitle(0), mContent(0), mErrorDetails(), mErrorCode(KErrNone),
+    mExtendedErrorCode(KErrNone), mPrimaryAction(0), mSecondaryAction(0),
+    mResultMap(), mIndicator(0), mSubscriber(0)
+{
+    mCommonTranslator = new HbTranslator(KTranslationsPath, KCommonTranslationsFile);
+    mSifUITranslator = new HbTranslator(KTranslationsPath, KSifUiTranslationsFile);
+    constructDialog(parameters);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::~SifUiDialog()
+// ----------------------------------------------------------------------------
+//
+SifUiDialog::~SifUiDialog()
+{
+    delete mSubscriber;
+    delete mPrimaryAction;
+    delete mSecondaryAction;
+    delete mSifUITranslator;
+    delete mCommonTranslator;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::dialogType()
+// ----------------------------------------------------------------------------
+//
+SifUiDeviceDialogType SifUiDialog::dialogType(const QVariantMap &parameters)
+{
+    SifUiDeviceDialogType type = SifUiUnspecifiedDialog;
+    if (parameters.contains(KSifUiDialogType)) {
+        type = static_cast<SifUiDeviceDialogType>(parameters.value(KSifUiDialogType).toInt());
+        Q_ASSERT(type == SifUiConfirmationQuery || type == SifUiProgressNote ||
+            type == SifUiCompleteNote || type == SifUiErrorNote);
+    }
+    return type;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::setDeviceDialogParameters()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialog::setDeviceDialogParameters(const QVariantMap &parameters)
+{
+    setVisible(!isInstallIndicatorActive());
+    return updateFromParameters(parameters);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::deviceDialogError()
+// ----------------------------------------------------------------------------
+//
+int SifUiDialog::deviceDialogError() const
+{
+    return mLastDialogError;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::closeDeviceDialog()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::closeDeviceDialog(bool byClient)
+{
+    Q_UNUSED(byClient);
+    close();
+
+    // If show event has been received, close is signalled from hide event.
+    // If not, hide event does not come and close is signalled from here.
+    if (!mShowEventReceived) {
+        emit deviceDialogClosed();
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::deviceDialogWidget()
+// ----------------------------------------------------------------------------
+//
+HbDialog *SifUiDialog::deviceDialogWidget() const
+{
+    return const_cast<SifUiDialog*>(this);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::hideEvent()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::hideEvent(QHideEvent *event)
+{
+    HbDialog::hideEvent(event);
+    emit deviceDialogClosed();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::showEvent()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::showEvent(QShowEvent *event)
+{
+    HbDialog::showEvent(event);
+    mShowEventReceived = true;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::isInstallIndicatorActive()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialog::isInstallIndicatorActive()
+{
+    bool isActive = false;
+    if (!mSubscriber) {
+        mSubscriber = new QTM_PREPEND_NAMESPACE(QValueSpaceSubscriber(
+            KSifUiInstallIndicatorStatusPath));
+    }
+    QVariant variant = mSubscriber->value();
+    bool valueOk = false;
+    int intValue = variant.toInt(&valueOk);
+    if (valueOk && intValue) {
+        isActive = true;
+    }
+    return isActive;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::constructDialog()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialog::constructDialog(const QVariantMap &parameters)
+    {
+    setTimeout(HbPopup::NoTimeout);
+    setDismissPolicy(HbPopup::NoDismiss);
+    setModal(true);
+
+    mDialogType = dialogType(parameters);
+
+    Q_ASSERT(mTitle == 0);
+    mTitle = new SifUiDialogTitleWidget(this);
+    mTitle->constructFromParameters(parameters);
+    setHeadingWidget(mTitle);
+
+    Q_ASSERT(mContent == 0);
+    mContent = new SifUiDialogContentWidget(this);
+    connect(mContent, SIGNAL(memorySelectionChanged(const QChar &)),
+            this, SLOT(handleMemorySelectionChanged(const QChar &)));
+    mContent->constructFromParameters(parameters);
+    setContentWidget(mContent);
+
+    updateButtons(parameters);
+
+    return true;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::updateFromParameters()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialog::updateFromParameters(const QVariantMap &parameters)
+{
+    SifUiDeviceDialogType prevDialogType = mDialogType;
+    if (!displayAdditionalQuery(parameters)) {
+        mDialogType = dialogType(parameters);
+        if (mTitle)
+            {
+            mTitle->updateFromParameters(parameters);
+            }
+        if (mContent)
+            {
+            mContent->updateFromParameters(parameters);
+            }
+        if (prevDialogType != mDialogType) {
+            updateButtons(parameters);
+        }
+        prepareForErrorDetails(parameters);
+    }
+    return true;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::updateButtons()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::updateButtons(const QVariantMap &parameters)
+{
+    if (mPrimaryAction) {
+        removeAction(mPrimaryAction);
+        delete mPrimaryAction;
+        mPrimaryAction = 0;
+    }
+    switch (mDialogType) {
+        case SifUiConfirmationQuery:
+            //: Accepts the SW install confirmation query and starts installation.
+            mPrimaryAction = new HbAction(hbTrId("txt_common_button_ok"));
+            addAction(mPrimaryAction);
+            disconnect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(close()));
+            connect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(handleInstallAccepted()));
+            break;
+        case SifUiProgressNote:
+            if (!parameters.contains(KSifUiProgressNoteIsHideButtonHidden)) {
+                //: Hides the progress dialog. Progress note moves into universal indicator.
+                mPrimaryAction = new HbAction(hbTrId("txt_common_button_hide"));
+                addAction(mPrimaryAction);
+                disconnect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(close()));
+                connect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(handleHidePressed()));
+            }
+            break;
+        case SifUiCompleteNote:
+            if (!parameters.contains(KSifUiCompleteNoteIsShowButtonHidden)) {
+                //: Opens Application Library to view the installed application.
+                mPrimaryAction = new HbAction(hbTrId("txt_installer_button_show"));
+                addAction(mPrimaryAction);
+                disconnect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(close()));
+                connect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(handleShowInstalled()));
+            }
+            break;
+        case SifUiErrorNote:
+            if (!parameters.contains(KSifUiErrorNoteIsDetailsButtonHidden)) {
+                //: Shows a dialog with further info about the failure (i.e. why installation failed).
+                mPrimaryAction = new HbAction(hbTrId("txt_installer_button_details"));
+                addAction(mPrimaryAction);
+                disconnect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(close()));
+                connect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(handleErrorDetails()));
+            }
+            break;
+        default:
+            break;
+    }
+
+    if (mSecondaryAction) {
+        removeAction(mSecondaryAction);
+        delete mSecondaryAction;
+        mSecondaryAction = 0;
+    }
+    switch (mDialogType) {
+        case SifUiConfirmationQuery:
+        case SifUiProgressNote:
+            if (!parameters.contains(KSifUiProgressNoteIsCancelButtonHidden)) {
+                //: Cancels the SW install confirmation query and closes the dialog.
+                mSecondaryAction = new HbAction(hbTrId("txt_common_button_cancel"));
+                addAction(mSecondaryAction);
+                disconnect(mSecondaryAction, SIGNAL(triggered()), this, SLOT(close()));
+                connect(mSecondaryAction, SIGNAL(triggered()),
+                    this, SLOT(handleInstallCancelled()));
+            }
+            break;
+        case SifUiCompleteNote:
+        case SifUiErrorNote:
+            //: Closes the dialog. Control returns back to where the installation was started.
+            mSecondaryAction = new HbAction(hbTrId("txt_common_button_close"));
+            addAction(mSecondaryAction);
+            break;
+        default:
+            break;
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::prepareForErrorDetails()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::prepareForErrorDetails(const QVariantMap &parameters)
+{
+    if (parameters.contains(KSifUiErrorDetails)) {
+        mErrorDetails = parameters.value(KSifUiErrorDetails).toString();
+    }
+    if (parameters.contains(KSifUiErrorCode)) {
+        bool ok = false;
+        int errorCode = parameters.value(KSifUiErrorCode).toInt(&ok);
+        if (ok) {
+            mErrorCode = errorCode;
+        }
+    }
+    if (parameters.contains(KSifUiErrorCodeExtended)) {
+        bool ok = false;
+        int errorCode = parameters.value(KSifUiErrorCodeExtended).toInt(&ok);
+        if (ok) {
+            mExtendedErrorCode = errorCode;
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::displayAdditionalQuery()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialog::displayAdditionalQuery(const QVariantMap &parameters)
+{
+    if (displayGrantCapabilitiesQuery(parameters) ||
+        displaySelectLanguageQuery(parameters) ||
+        displaySelectOptionsQuery(parameters)) {
+        return true;
+    }
+    return false;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::displayGrantCapabilitiesQuery()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialog::displayGrantCapabilitiesQuery(const QVariantMap &parameters)
+{
+    if (parameters.contains(KSifUiGrantCapabilities)) {
+        SifUiDialogGrantCapabilities *dlg = new SifUiDialogGrantCapabilities(
+            mContent->applicationName(), parameters.value(KSifUiGrantCapabilities));
+        dlg->setAttribute(Qt::WA_DeleteOnClose, true);
+        connect(dlg, SIGNAL(accepted()), this, SLOT(handleCapabilitiesGranted()));
+        connect(dlg, SIGNAL(rejected()), this, SLOT(handleAdditionalDialogClosed()));
+        dlg->open();
+        return true;
+    }
+    return false;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::displaySelectLanguageQuery()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialog::displaySelectLanguageQuery(const QVariantMap &parameters)
+{
+    if (parameters.contains(KSifUiSelectableLanguages)) {
+        SifUiDialogSelectLanguage *dlg = new SifUiDialogSelectLanguage(
+                parameters.value(KSifUiSelectableLanguages));
+        dlg->setAttribute(Qt::WA_DeleteOnClose, true);
+        connect(dlg, SIGNAL(languageSelected(int)),
+            this, SLOT(handleLanguageSelected(int)));
+        connect(dlg, SIGNAL(languageSelectionCancelled()),
+            this, SLOT(handleAdditionalDialogClosed()));
+        dlg->open();
+        return true;
+    }
+    return false;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::displaySelectOptionsQuery()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialog::displaySelectOptionsQuery(const QVariantMap &parameters)
+{
+    if (parameters.contains(KSifUiSelectableOptions)) {
+        HbSelectionDialog *dlg = new HbSelectionDialog;
+        dlg->setAttribute(Qt::WA_DeleteOnClose, true);
+
+        // TODO: localized UI string needed
+        HbLabel *title = new HbLabel("Items to install:");
+        dlg->setHeadingWidget(title);
+
+        dlg->setStringItems(parameters.value(KSifUiSelectableOptions).toStringList());
+        dlg->setSelectionMode(HbAbstractItemView::MultiSelection);
+
+        dlg->open(this, SLOT(handleOptionsDialogClosed(int)));
+        return true;
+    }
+    return false;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::sendResult()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::sendResult(SifUiDeviceDialogReturnValue value)
+{
+    mResultMap[KSifUiQueryReturnValue] = QVariant(value);
+    emit deviceDialogData(mResultMap);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleInstallAccepted()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleInstallAccepted()
+{
+    mContent->changeType(SifUiProgressNote);
+    sendResult(SifUiContinue);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleInstallCancelled()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleInstallCancelled()
+{
+    sendResult(SifUiCancel);
+    close();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleMemorySelectionChanged()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleMemorySelectionChanged(const QChar &driveLetter)
+{
+    mResultMap[KSifUiSelectedMemory] = QVariant(driveLetter);
+    emit deviceDialogData(mResultMap);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleHidePressed()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleHidePressed()
+{
+    sendResult(SifUiIndicator);
+    hide();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleShowInstalled()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleShowInstalled()
+{
+    QUrl openRecentView("appto://20022F35?activityname=AppLibRecentView");
+
+    XQApplicationManager applicationManager;
+    XQAiwRequest *request = applicationManager.create(openRecentView);
+    if (request) {
+        bool result = request->send();
+        if (result) {
+            closeDeviceDialog(false);
+        } // else error silently ignored
+        delete request;
+    }
+
+    close();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleErrorDetails()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleErrorDetails()
+{
+    QString messageText = mErrorDetails;
+
+    if (QFile::exists(KSwiErrorsFile)) {
+        messageText.append(KSwiErrorFormat.arg(mErrorCode));
+        if (mExtendedErrorCode) {
+            messageText.append(KSwiErrorFormat.arg(mExtendedErrorCode));
+        }
+    }
+
+    HbMessageBox::warning(messageText);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleCapabilitiesGranted()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleCapabilitiesGranted()
+{
+    sendResult(SifUiContinue);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleAdditionalDialogClosed()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleAdditionalDialogClosed()
+{
+    sendResult(SifUiCancel);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleLanguageSelected()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleLanguageSelected(int index)
+{
+    mResultMap[KSifUiSelectedLanguageIndex] = QVariant(index);
+    sendResult(SifUiContinue);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleOptionsDialogClosed()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleOptionsDialogClosed(int code)
+{
+    if (code == HbDialog::Accepted) {
+        HbSelectionDialog *dlg = reinterpret_cast<HbSelectionDialog*>(sender());
+        QList<QVariant> selections = dlg->selectedItems();
+        mResultMap[KSifUiSelectedOptions] = convertOptionalComponentIndexes(selections);
+        sendResult(SifUiContinue);
+    } else {
+        sendResult(SifUiCancel);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcertificatedetails.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Certificate details dialog in SifUi
+*
+*/
+
+#include "sifuidialogcertificatedetails.h"      // SifUiCertificateDetails
+#include "sifuidialogcertificateinfo.h"         // SifUiDialogCertificateInfo
+#include <hblabel.h>                            // HbLabel
+#include <hbtextedit.h>                         // HbTextEdit
+#include <hbscrollbar.h>                        // HbScrollBar
+#include <hblistwidget.h>                       // HbListWidget
+#include <hblistwidgetitem.h>                   // HbListWidgetItem
+#include <hbaction.h>                           // HbAction
+#include <QTextStream>
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::SifUiDialogCertificateDetails()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogCertificateDetails::SifUiDialogCertificateDetails(
+    const QList<SifUiDialogCertificateInfo*> &certificates) : HbDialog(),
+    mCertificates(certificates)
+{
+    setDismissPolicy(HbPopup::NoDismiss);
+    setTimeout(HbPopup::NoTimeout);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::showDetails()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogCertificateDetails::showDetails()
+{
+    int count = mCertificates.count();
+    Q_ASSERT(count != 0);
+    if (count == 1) {
+        showCertificate(0);
+    } else {
+        showList();
+    }
+    open();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::~SifUiDialogCertificateDetails()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogCertificateDetails::~SifUiDialogCertificateDetails()
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::certificateDetails()
+// ----------------------------------------------------------------------------
+//
+QString SifUiDialogCertificateDetails::certificateDetails(
+    const SifUiDialogCertificateInfo& certificate)
+{
+    // TODO: change to properly localizable string
+    QString details;
+    QTextStream stream(&details);
+    stream << tr("Issuer:\n")
+        << certificate.issuerName()
+        << endl << endl;
+    stream << tr("Subject:\n")
+        << certificate.subjectName()
+        << endl << endl;
+    stream << tr("Valid from:\n")
+        << certificate.validFrom().toString()
+        << endl << endl;
+    stream << tr("Valid until:\n")
+        << certificate.validTo().toString()
+        << endl << endl;
+    stream << tr("Serial number:\n")
+        << certificate.formattedSerialNumber()
+        << endl << endl;
+    stream << tr("Fingerprint (SHA1):\n")
+        << certificate.formattedFingerprint()
+        << endl;
+    return details;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::showList()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogCertificateDetails::showList()
+{
+    int count = mCertificates.count();
+    Q_ASSERT(count > 1);
+
+    // TODO: localisation
+    HbLabel *title = new HbLabel(tr("Select certificate"));
+    setHeadingWidget(title);
+
+    HbListWidget *listWidget = new HbListWidget;
+    for (int index = 0; index < count; ++index ) {
+        HbListWidgetItem *item = new HbListWidgetItem();
+        item->setData(QVariant(mCertificates.at(index)->subjectName()));
+        listWidget->addItem(item);
+    }
+    listWidget->setScrollDirections(Qt::Vertical);
+    listWidget->setFrictionEnabled(true);
+    listWidget->setScrollingStyle(HbScrollArea::PanWithFollowOn);
+    listWidget->verticalScrollBar()->setInteractive(true);
+    connect(listWidget, SIGNAL(activated(HbListWidgetItem*)),
+        this, SLOT(certificateSelected()));
+    setContentWidget(listWidget);
+
+    addAction(new HbAction(hbTrId("txt_common_button_close"), this));
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::certificateSelected()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogCertificateDetails::certificateSelected()
+{
+    QGraphicsWidget *content = contentWidget();
+    if (content->type() == Hb::ItemType_ListView) {
+        HbListWidget *listWidget = reinterpret_cast<HbListWidget*>(content);
+        int index = listWidget->currentRow();
+        if (index >= 0 && index < mCertificates.count()) {
+            showCertificate(index);
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::showCertificate()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogCertificateDetails::showCertificate(int index)
+{
+    // TODO: localisation
+    HbLabel *title = new HbLabel(tr("Certificate details"));
+    setHeadingWidget(title);
+
+    HbTextEdit *textEdit = new HbTextEdit;
+    Q_ASSERT(index >= 0 && index < mCertificates.count());
+    QString details = certificateDetails(*mCertificates[index]);
+    textEdit->setPlainText(details);
+    textEdit->setReadOnly(true);
+    textEdit->setCursorVisibility(Hb::TextCursorHidden);
+    // TODO: how to display scroll bar and not to show blue border(focus)?
+    setContentWidget(textEdit);
+
+    //: Closes the dialog. Control returns back to where the installation was started.
+    addAction(new HbAction(hbTrId("txt_common_button_close"), this));
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcertificateinfo.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Certificate info class for SIF UI device dialog plugin.
+*
+*/
+
+#include "sifuidialogcertificateinfo.h"
+
+const char *KHexNumberFormatSimple = "%X";
+const char *KHexNumberFormatTwoDigitsWithLeadingZeroes = "%02X";
+const int KCharsPerBlock = 2;
+const char KBlockSeparator = ' ';
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::SifUiDialogCertificateInfo()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogCertificateInfo::SifUiDialogCertificateInfo(const QString &subject,
+    const QString &issuer, const QByteArray &fingerprint, const QByteArray &serialNumber,
+    const QDateTime &validFrom, const QDateTime &validTo) :
+    mSubjectName(subject), mIssuerName(issuer), mFingerprint(fingerprint),
+    mSerialNumber(serialNumber), mValidFrom(validFrom), mValidTo(validTo)
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::~SifUiDialogCertificateInfo()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogCertificateInfo::~SifUiDialogCertificateInfo()
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::subjectName()
+// ----------------------------------------------------------------------------
+//
+const QString SifUiDialogCertificateInfo::subjectName() const
+{
+    return mSubjectName;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::issuerName()
+// ----------------------------------------------------------------------------
+//
+const QString SifUiDialogCertificateInfo::issuerName() const
+{
+    return mIssuerName;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::fingerprint()
+// ----------------------------------------------------------------------------
+//
+const QByteArray SifUiDialogCertificateInfo::fingerprint() const
+{
+    return mFingerprint;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::formattedFingerprint()
+// ----------------------------------------------------------------------------
+//
+const QString SifUiDialogCertificateInfo::formattedFingerprint() const
+{
+    QString formatted;
+
+    QString number;
+    int blockIndex = 0;
+    int count = mFingerprint.count();
+    for (int index = 0; index < count; ++index) {
+        if (blockIndex == KCharsPerBlock) {
+            formatted.append(KBlockSeparator);
+            blockIndex = 0;
+        }
+        number.sprintf(KHexNumberFormatTwoDigitsWithLeadingZeroes,
+            static_cast<unsigned char>(mFingerprint.at(index)));
+        formatted.append(number);
+        ++blockIndex;
+    }
+
+    return formatted;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::serialNumber()
+// ----------------------------------------------------------------------------
+//
+const QByteArray SifUiDialogCertificateInfo::serialNumber() const
+{
+    return mSerialNumber;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::formattedSerialNumber()
+// ----------------------------------------------------------------------------
+//
+const QString SifUiDialogCertificateInfo::formattedSerialNumber() const
+{
+    QString formatted;
+
+    QString number;
+    int count = mSerialNumber.count();
+    for (int index = 0; index < count; ++index) {
+        number.sprintf(KHexNumberFormatSimple,
+            static_cast<unsigned char>(mSerialNumber.at(index)));
+        formatted.append(number);
+    }
+
+    return formatted;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::validFrom()
+// ----------------------------------------------------------------------------
+//
+const QDateTime SifUiDialogCertificateInfo::validFrom() const
+{
+    return mValidFrom;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::validTo()
+// ----------------------------------------------------------------------------
+//
+const QDateTime SifUiDialogCertificateInfo::validTo() const
+{
+    return mValidTo;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcontentwidget.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,677 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Software install notification content widget.
+*
+*/
+
+#include "sifuidialogcontentwidget.h"
+#include <QGraphicsLinearLayout>
+#include <hbstackedwidget.h>
+#include <hblabel.h>
+#include <hbpushbutton.h>
+#include <hbcombobox.h>
+#include <hbprogressbar.h>
+#include <QPixmap>
+#include <qsysteminfo.h>                    // QSystemStorageInfo
+#include <qvaluespacepublisher.h>           // QValueSpacePublisher
+#include <qvaluespacesubscriber.h>          // QValueSpaceSubscriber
+#if defined(Q_OS_SYMBIAN)
+#include <driveinfo.h>                      // DriveInfo
+#include <fbs.h>                            // CFbsBitmap
+#endif  // Q_OS_SYMBIAN
+
+QTM_USE_NAMESPACE
+
+const char KSifUiDefaultApplicationIcon[] = "qtg_large_application";
+const char KSifUiErrorIcon[] = "qtg_large_warning";
+
+const int KSifUiKilo = 1024;
+const int KSifUiMega = 1024*1024;
+
+const int KAppNameIndex = 0;
+const int KAppSizeIndex = 1;
+
+enum TSifUiDriveName {
+    EPhoneMemory,
+    EMassStorage,
+    EMemoryCard,
+    EOtherDrive
+};
+
+const char KInitialDefaultDrive = 'C';
+
+// Path and value name for QValueSpacePublisher/QValueSpaceSubscriber.
+const QString KSifUiCenRepPath = "/KCRUIDSifUiDefaults";
+const QString KSifUiCenRepDefaultDrive = "KCRUIDSifUiDefaultDrive";
+
+// TODO: replace with proper logging
+#ifdef _DEBUG
+#define FLOG1(x)        qDebug() << (x)
+#define FLOG2(x,y)      qDebug() << (x) << (y)
+#define FLOG3(x,y,z)    qDebug() << (x) << (y) << (z)
+#else
+#define FLOG1(x)
+#define FLOG2(x,y)
+#define FLOG3(x,y,z)
+#endif
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// fbsBitmap()
+// ----------------------------------------------------------------------------
+//
+CFbsBitmap *fbsBitmap(int handle)
+{
+    CFbsBitmap *bitmap = 0;
+#if defined(Q_OS_SYMBIAN)
+    bitmap = new CFbsBitmap;
+    if (bitmap) {
+        if (!bitmap->Duplicate(handle)) {
+            delete bitmap;
+            bitmap = 0;
+        }
+    }
+#endif // Q_OS_SYMBIAN
+    return bitmap;
+}
+
+// ----------------------------------------------------------------------------
+// driveName()
+// ----------------------------------------------------------------------------
+//
+TSifUiDriveName driveName(const QChar& volume)
+{
+#if defined(Q_OS_SYMBIAN)
+    int err = 0;
+    TChar drive;
+    err = DriveInfo::GetDefaultDrive(DriveInfo::EDefaultPhoneMemory, drive);
+    if (!err && volume.toAscii() == drive) {
+        return EPhoneMemory;
+    }
+    err = DriveInfo::GetDefaultDrive(DriveInfo::EDefaultMassStorage, drive);
+    if (!err && volume.toAscii() == drive) {
+        return EMassStorage;
+    }
+    err = DriveInfo::GetDefaultDrive(DriveInfo::EDefaultRemovableMassStorage, drive);
+    if (!err && volume.toAscii() == drive) {
+        return EMemoryCard;
+    }
+#endif  // Q_OS_SYMBIAN
+    return EOtherDrive;
+}
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::SifUiDialogContentWidget()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogContentWidget::SifUiDialogContentWidget(QGraphicsItem *parent,
+        Qt::WindowFlags flags) : HbWidget(parent, flags),
+        mAppIcon(0), mAppName(0), mAppSize(0),
+        mMainLayout(0), mAppDetailsLayout(0), mStackedWidget(0),
+        mMemorySelection(0), mProgressBar(0), mErrorText(0),
+        mBitmap(0), mMask(0), mPublisher(0), mSubscriber(0)
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::~SifUiDialogContentWidget()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogContentWidget::~SifUiDialogContentWidget()
+{
+    delete mBitmap;
+    delete mMask;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::constructFromParameters()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::constructFromParameters(const QVariantMap &parameters)
+{
+    FLOG1("SifUiDialogContentWidget::constructFromParameters");
+
+    Q_ASSERT(mMainLayout == 0);
+    mMainLayout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    // Application icon
+    QGraphicsLinearLayout *iconAndAppLayout = new QGraphicsLinearLayout(Qt::Horizontal);
+    Q_ASSERT(mAppIcon == 0);
+    mAppIcon = new HbLabel;
+    updateAppIcon(parameters);
+    iconAndAppLayout->addItem(mAppIcon);
+
+    // Application name and version
+    Q_ASSERT(mAppDetailsLayout == 0);
+    mAppDetailsLayout = new QGraphicsLinearLayout(Qt::Vertical);
+    createAppName(applicationName(parameters));
+    mAppDetailsLayout->addItem(mAppName);
+
+    // Application size
+    Q_ASSERT(mAppSize == 0);
+    updateAppSize(parameters);
+
+    // Other application details
+    if (parameters.contains(KSifUiApplicationDetails)) {
+        addDetails(parameters.value(KSifUiApplicationDetails).toStringList());
+    }
+    iconAndAppLayout->addItem(mAppDetailsLayout);
+    mMainLayout->addItem(iconAndAppLayout);
+
+    // Memory selection, progress bar, and error text within a stacked widget
+    Q_ASSERT(mStackedWidget == 0);
+    mStackedWidget = new HbStackedWidget;
+
+    Q_ASSERT(mMemorySelection == 0);
+    mMemorySelection = new HbComboBox;
+    mStackedWidget->addWidget(mMemorySelection);
+
+    Q_ASSERT(mProgressBar == 0);
+    mProgressBar = new HbProgressBar;
+    mProgressBar->setRange(0,0);    // busy indicator by default
+    mStackedWidget->addWidget(mProgressBar);
+
+    Q_ASSERT(mErrorText == 0);
+    mErrorText = new HbLabel;
+    mStackedWidget->addWidget(mErrorText);
+
+    mMainLayout->addItem(mStackedWidget);
+    if (!updateErrorText(parameters) &&
+        !updateProgressBar(parameters) &&
+        !updateMemorySelection(parameters)) {
+        mStackedWidget->hide();
+    }
+
+    setLayout(mMainLayout);
+    }
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateFromParameters()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::updateFromParameters(const QVariantMap &parameters)
+{
+    FLOG1("SifUiDialogContentWidget::updateFromParameters");
+
+    // Application icon
+    updateAppIcon(parameters);
+
+    // Application name and version
+    if (parameters.contains(KSifUiApplicationName)) {
+        QString appNameStr = applicationName(parameters);
+        if (mAppName) {
+            if (mAppName->plainText() != appNameStr) {
+                mAppName->setPlainText(appNameStr);
+            }
+        } else {
+            createAppName(appNameStr);
+            mAppDetailsLayout->insertItem(KAppNameIndex, mAppName);
+        }
+    }
+
+    // Application size
+    updateAppSize(parameters);
+
+    // Other application details
+    if (parameters.contains(KSifUiApplicationDetails)) {
+        removeDetails();
+        addDetails(parameters.value(KSifUiApplicationDetails).toStringList());
+    }
+
+    // Stacked widgets: memory selection, progress bar and error text
+    if (updateErrorText(parameters) ||
+        updateProgressBar(parameters) ||
+        updateMemorySelection(parameters)) {
+        if (!mStackedWidget->isVisible()) {
+            mStackedWidget->show();
+        }
+    } else {
+        if (mStackedWidget->isVisible()) {
+            mStackedWidget->hide();
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::changeType()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::changeType(SifUiDeviceDialogType type)
+{
+    FLOG2("SifUiDialogContentWidget::changeType", type);
+
+    switch (type) {
+        case SifUiConfirmationQuery:
+            mStackedWidget->setCurrentWidget(mMemorySelection);
+            break;
+        case SifUiProgressNote:
+            mStackedWidget->setCurrentWidget(mProgressBar);
+            break;
+        case SifUiCompleteNote:
+            break;
+        case SifUiErrorNote:
+            mStackedWidget->setCurrentWidget(mErrorText);
+            break;
+        default:
+            break;
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::applicationName()
+// ----------------------------------------------------------------------------
+//
+QString SifUiDialogContentWidget::applicationName() const
+{
+    if (mAppName) {
+        return mAppName->plainText();
+    }
+    return QString();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::handleMemorySelectionChange()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::handleMemorySelectionChange(int selectedIndex)
+{
+    FLOG2("SifUiDialogContentWidget::handleMemorySelectionChange", selectedIndex);
+
+    QChar selectedDrive = mDriveLetterList[selectedIndex][0];
+    saveSelectedDriveAsDefault( selectedDrive );
+    emit memorySelectionChanged( selectedDrive );
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::applicationName()
+// ----------------------------------------------------------------------------
+//
+QString SifUiDialogContentWidget::applicationName(const QVariantMap &parameters)
+{
+    QString appName = "";
+    if (parameters.contains(KSifUiApplicationName)) {
+        QString nameParam = parameters.value(KSifUiApplicationName).toString();
+        if (parameters.contains(KSifUiApplicationVersion)) {
+            QString versionParam = parameters.value(KSifUiApplicationVersion).toString();
+            //: Custom layout ID parent. Template for application name and version in SW install
+            //: confirmation query. %1 is the application name and %2 is the version number.
+            //: Version number consist of major, minor, and build numbers.
+            //: For example: "Chess (v 1.01(123))".
+            // TODO: use hbTrId when arg() starts to work with limited length arguments like "%[99]1"
+            //appName = hbTrId("txt_installer_list_appname_version").arg(nameParam, versionParam);
+            appName = QString("%1 (v %2)").arg(nameParam, versionParam);
+        } else {
+            appName = nameParam;
+        }
+    }
+    return appName;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::applicationSize()
+// ----------------------------------------------------------------------------
+//
+QString SifUiDialogContentWidget::applicationSize(const QVariantMap &parameters)
+{
+    QString appSize = "";
+    if (parameters.contains(KSifUiApplicationSize)) {
+        bool ok = false;
+        uint size = parameters.value(KSifUiApplicationSize).toUInt(&ok);
+        if (ok) {
+            if (size > KSifUiMega) {
+                //: Application size in SW install confirmation query, %1 is in megabytes
+                appSize = hbTrId("txt_installer_list_appsize_mb").arg(size/KSifUiMega);
+            } else if(size > KSifUiKilo) {
+                //: Application size in SW install confirmation query, %1 is in kilobytes
+                appSize = hbTrId("txt_installer_list_appsize_kb").arg(size/KSifUiKilo);
+            } else {
+                //: Application size in SW install confirmation query, %1 is in bytes
+                appSize = hbTrId("txt_installer_list_appsize_b").arg(size);
+            }
+        }
+    }
+    return appSize;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::removeDetails()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::removeDetails()
+{
+    int firstDetailsItemIndex = ( mAppName ? 1 : 0 ) + ( mAppSize ? 1 : 0 );
+    QGraphicsLayoutItem *item = 0;
+    for (int i = 0; i < mAppDetailsLayout->count(); ++i) {
+        if (i >= firstDetailsItemIndex) {
+            item = mAppDetailsLayout->itemAt(i);
+            mAppDetailsLayout->removeAt(i);
+            delete item;
+            item = 0;
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::addDetails()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::addDetails(const QStringList &detailList)
+{
+    QStringListIterator detailsIter(detailList);
+    while (detailsIter.hasNext())
+        {
+        addDetail(detailsIter.next());
+        }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::addDetail()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::addDetail(const QString &detailText)
+{
+    Q_ASSERT(mAppDetailsLayout != 0);
+    HbLabel *detailItem = new HbLabel(detailText);
+    detailItem->setTextWrapping(Hb::TextWordWrap);
+    detailItem->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
+    mAppDetailsLayout->addItem(detailItem);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::createAppName()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::createAppName(const QString &appName)
+{
+    Q_ASSERT(mAppName == 0);
+    mAppName = new HbLabel(appName);
+    mAppName->setTextWrapping(Hb::TextWordWrap);
+    mAppName->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateAppIcon()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::updateAppIcon(const QVariantMap &parameters)
+{
+    Q_ASSERT(mAppIcon != 0);
+
+    // TODO: proper icon handling
+    if (parameters.contains(KSifUiDialogType) &&
+        (parameters.value(KSifUiDialogType).toInt() == SifUiErrorNote)) {
+        mAppIcon->setIcon(HbIcon(KSifUiErrorIcon));
+    } else if (parameters.contains(KSifUiApplicationIconHandle) &&
+        parameters.contains(KSifUiApplicationIconMaskHandle)) {
+        int iconHandle = parameters.value(KSifUiApplicationIconHandle).toInt();
+        int maskHandle = parameters.value(KSifUiApplicationIconMaskHandle).toInt();
+        QPixmap pixmap;
+        delete mBitmap;
+        mBitmap = fbsBitmap(iconHandle);
+        delete mMask;
+        mMask = fbsBitmap(maskHandle);
+        if (mBitmap && mMask) {
+            pixmap = QPixmap::fromSymbianCFbsBitmap(mBitmap);
+            pixmap.setAlphaChannel(QPixmap::fromSymbianCFbsBitmap(mMask));
+        }
+        mAppIcon->setIcon(HbIcon(pixmap));
+    } else {
+        if (mAppIcon->icon().isNull()) {
+            mAppIcon->setIcon(HbIcon(KSifUiDefaultApplicationIcon));
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateAppSize()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::updateAppSize(const QVariantMap &parameters)
+{
+    if (parameters.contains(KSifUiApplicationSize)) {
+        QString appSizeStr = applicationSize(parameters);
+        if (appSizeStr.length() > 0) {
+            if (mAppSize) {
+                if (mAppSize->plainText() != appSizeStr) {
+                    mAppSize->setPlainText(appSizeStr);
+                }
+            } else {
+                HbLabel *appSize = new HbLabel(appSizeStr);
+                appSize->setTextWrapping(Hb::TextWordWrap);
+                appSize->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
+                mAppDetailsLayout->insertItem(KAppSizeIndex, appSize);
+                mAppSize = appSize;
+            }
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateMemorySelection()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialogContentWidget::updateMemorySelection(const QVariantMap &parameters)
+{
+    if (parameters.contains(KSifUiMemorySelection)) {
+        QString drives = parameters.value(KSifUiMemorySelection).toString();
+        mDriveLetterList = drives.split(",");
+
+        QChar defaultDrive = readDefaultSelectedDrive();
+        int defaultDriveIndex = 0;
+
+        QStringList driveList;
+        QSystemStorageInfo info;
+        QStringList volumeList = info.logicalDrives();
+        foreach (QString volume, volumeList) {
+            if (mDriveLetterList.contains(volume)) {
+                qlonglong size = info.availableDiskSpace(volume);
+
+                QChar driveLetter(volume[0]);
+                switch (driveName(driveLetter)) {
+                case EPhoneMemory:
+                    if (size > KSifUiMega) {
+                        //: Drive name for internal phone memory with megabytes of free space.
+                        //: %1 is replaced with drive letter (usually 'C')
+                        //: %2 is replaced with available free space (in megabytes, MB)
+                        //TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_device_memory_mb")
+                        //    .arg(volume).arg(size/KSifUiMega));
+                        driveList.append(tr("%1: Phone mem. (%L2 MB)"
+                            ).arg(volume).arg(size/KSifUiMega));
+                    } else {
+                        //: Drive name for internal phone memory with kilobytes of free space.
+                        //: %1 is replaced with drive letter (usually 'C')
+                        //: %2 is replaced with available free space (in kilobytes, kB)
+                        //TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_device_memory_kb")
+                        //    .arg(volume).arg(size/KSifUiKilo));
+                        driveList.append(tr("%1: Phone mem. (%L2 kB)"
+                            ).arg(volume).arg(size/KSifUiKilo));
+                    }
+                    break;
+
+                case EMassStorage:
+                    if (size > KSifUiMega) {
+                        //: Drive name for mass storage with megabytes of free space.
+                        //: %1 is replaced with drive letter (usually 'E')
+                        //: %2 is replaced with available free space (in megabytes, MB)
+                        // TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_mass_storage_mb")
+                        //    .arg(volume).arg(size/KSifUiMega));
+                        driveList.append(tr("%1: Mass.mem (%L2 MB)"
+                            ).arg(volume).arg(size/KSifUiMega));
+                    } else {
+                        //: Drive name for mass storage with kilobytes of free space.
+                        //: %1 is replaced with drive letter (usually 'E')
+                        //: %2 is replaced with available free space (in kilobytes, kB)
+                        // TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_mass_storage_kb")
+                        //    .arg(volume).arg(size/KSifUiKilo));
+                        driveList.append(tr("%1: Mass.mem (%L2 kB)"
+                            ).arg(volume).arg(size/KSifUiKilo));
+                    }
+                    break;
+
+                case EMemoryCard:
+                    if (size > KSifUiMega) {
+                        //: Drive name for memory card with megabytes of free space.
+                        //: %1 is replaced with drive letter (usually 'F')
+                        //: %2 is replaced with available free space (in megabytes, MB)
+                        // TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_memory_card_mb")
+                        //    .arg(volume).arg(size/KSifUiMega));
+                        driveList.append(tr("%1: Mem.card (%L2 MB)"
+                            ).arg(volume).arg(size/KSifUiMega));
+                    } else {
+                        //: Drive name for memory card with kilobytes of free space.
+                        //: %1 is replaced with drive letter (usually 'F')
+                        //: %2 is replaced with available free space (in kilobytes, kB)
+                        // TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_memory_card_kb")
+                        //    .arg(volume).arg(size/KSifUiKilo));
+                        driveList.append(tr("%1: Mem.card (%L2 kB)"
+                            ).arg(volume).arg(size/KSifUiKilo));
+                    }
+                    break;
+
+                case EOtherDrive:
+                default:
+                    if (size > KSifUiMega) {
+                        //: Generic drive name for other removable drives, like
+                        //: USB memories attached via USB OTG adapter.
+                        // TODO: proper localisation needed
+                        driveList.append(tr("%1: Drive (%L2 MB)"
+                            ).arg(volume).arg(size/KSifUiMega));
+                    } else {
+                        //: Generic drive name for other removable drives, like
+                        //: USB memories attached via USB OTG adapter.
+                        // TODO: proper localisation needed
+                        driveList.append(tr("%1: Drive (%L2 kB)"
+                            ).arg(volume).arg(size/KSifUiKilo));
+                    }
+                    break;
+                }
+
+                if (driveLetter == defaultDrive) {
+                    defaultDriveIndex = driveList.count() - 1;
+                }
+            }
+        }
+
+        disconnect(mMemorySelection, SIGNAL(currentIndexChanged(int)),
+            this, SLOT(handleMemorySelectionChange(int)));
+        mMemorySelection->setItems(driveList);
+        if (defaultDriveIndex) {
+            FLOG2("SifUiDialogContentWidget::updateMemorySelection, setCurrentIndex",
+                defaultDriveIndex);
+            mMemorySelection->setCurrentIndex(defaultDriveIndex);
+        }
+        connect(mMemorySelection, SIGNAL(currentIndexChanged(int)),
+            this, SLOT(handleMemorySelectionChange(int)));
+        mStackedWidget->setCurrentWidget(mMemorySelection);
+
+        return true;
+    }
+    return false;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateProgressBar()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialogContentWidget::updateProgressBar(const QVariantMap &parameters)
+{
+    bool progressBarChanged = false;
+    if (parameters.contains(KSifUiProgressNoteFinalValue)) {
+        mProgressBar->setMaximum(parameters.value(KSifUiProgressNoteFinalValue).toInt());
+        progressBarChanged = true;
+    }
+    if (parameters.contains(KSifUiProgressNoteValue)) {
+        int newValue = mProgressBar->progressValue();
+        bool ok = false;
+        newValue += parameters.value(KSifUiProgressNoteValue).toInt(&ok);
+        if (ok) {
+            mProgressBar->setProgressValue(newValue);
+            progressBarChanged = true;
+        }
+    }
+    if (progressBarChanged) {
+        mStackedWidget->setCurrentWidget(mProgressBar);
+    }
+    return progressBarChanged;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateErrorText()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialogContentWidget::updateErrorText(const QVariantMap &parameters)
+{
+    // TODO: move default error messages (category based) here
+    if (parameters.contains(KSifUiErrorMessage)) {
+        QString errorText = parameters.value(KSifUiErrorMessage).toString();
+        mErrorText->setPlainText(errorText);
+        mStackedWidget->setCurrentWidget(mErrorText);
+        return true;
+    }
+    return false;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::saveSelectedDriveAsDefault()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::saveSelectedDriveAsDefault(const QChar& drive)
+{
+    if (drive != readDefaultSelectedDrive()) {
+        if (!mPublisher) {
+            mPublisher = new QValueSpacePublisher(KSifUiCenRepPath, this);
+        }
+        FLOG2("SifUiDialogContentWidget::saveSelectedDriveAsDefault", drive);
+        // QValueSpacePublisher supports integer and byte array types in Symbian
+        int asciiValue = drive.toAscii();
+        mPublisher->setValue(KSifUiCenRepDefaultDrive, asciiValue);
+        mPublisher->sync();
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::readDefaultSelectedDrive()
+// ----------------------------------------------------------------------------
+//
+QChar SifUiDialogContentWidget::readDefaultSelectedDrive()
+{
+    QChar selectedDrive = KInitialDefaultDrive;
+
+    if (!mSubscriber) {
+        mSubscriber = new QValueSpaceSubscriber(KSifUiCenRepPath, this);
+    }
+    QVariant variant = mSubscriber->value(KSifUiCenRepDefaultDrive);
+    if (variant.isValid() && !variant.isNull()) {
+        bool ok = false;
+        int asciiValue = variant.toInt(&ok);
+        if (ok) {
+            selectedDrive = QChar(asciiValue);
+        }
+    }
+
+    FLOG2("SifUiDialogContentWidget::readDefaultSelectedDrive", selectedDrive);
+    return selectedDrive;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialoggrantcapabilities.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Grant capabilities dialog in SifUi
+*
+*/
+
+#include "sifuidialoggrantcapabilities.h"   // SifUiDialogGrantCapabilities
+#include "sifuidialoggrantcapabilitiescontent.h" // SifUiDialogGrantCapabilitiesContent
+#include <HbLabel>
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilities::SifUiDialogGrantCapabilities()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogGrantCapabilities::SifUiDialogGrantCapabilities(const QString& applicationName,
+    const QVariant &capabilities, QGraphicsItem *parent) : HbDialog(parent)
+{
+    setTimeout(HbPopup::NoTimeout);
+    setDismissPolicy(HbPopup::NoDismiss);
+    setModal(true);
+
+    // TODO: localized UI string needed
+    //HbLabel *title = new HbLabel(hbTrId("txt_permissions_needed"));
+    HbLabel *title = new HbLabel(QString("Permissions needed"));
+    setHeadingWidget(title);
+
+    SifUiDialogGrantCapabilitiesContent *content =
+        new SifUiDialogGrantCapabilitiesContent(applicationName, capabilities);
+    connect(content, SIGNAL(accepted()), this, SLOT(handleAccepted()));
+    connect(content, SIGNAL(rejected()), this, SLOT(handleRejected()));
+    setContentWidget(content);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilities::~SifUiDialogGrantCapabilities()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogGrantCapabilities::~SifUiDialogGrantCapabilities()
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilities::handleAccepted()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogGrantCapabilities::handleAccepted()
+{
+    emit accepted();
+    close();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilities::handleRejected()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogGrantCapabilities::handleRejected()
+{
+    emit rejected();
+    close();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialoggrantcapabilitiescontent.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,239 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Grant capabilities dialog in SifUi
+*
+*/
+
+#include "sifuidialoggrantcapabilitiescontent.h" // SifUiDialogGrantCapabilitiesContent
+#include <QGraphicsLinearLayout>
+#include <HbLabel>
+#include <HbPushButton>
+#include <HbScrollArea>
+#include <HbAction>
+#include <HbDialog>
+
+const QString KDetailsTextHtmlBeginList = "<html>%1<ul>";
+const QString KDetailsTextHtmlListItem = "<li>%1</li>";
+const QString KDetailsTextHtmlEndList = "</ul></html>";
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::~SifUiDialogGrantCapabilitiesContent()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogGrantCapabilitiesContent::SifUiDialogGrantCapabilitiesContent(
+    const QString& applicationName, const QVariant &capabilities, QGraphicsItem *parent)
+    : HbWidget(parent), mCapabilities(), mIsCapabilitiesValid(false)
+{
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    HbLabel *label = new HbLabel();
+    //TODO: localized UI string needed
+    //label->setPlainText(hbTrId("txt_").arg(applicationName));
+    label->setPlainText(tr("Application \"%1\" uses capabilities it is not signed for.")
+        .arg(applicationName));
+    label->setTextWrapping(Hb::TextWordWrap);
+    layout->addItem(label);
+    layout->addStretch();
+
+    //TODO: localized UI string needed
+    //HbPushButton *details = new HbPushButton(hbTrId("txt_"));
+    HbPushButton *details = new HbPushButton(tr("View details"));
+    connect(details, SIGNAL(clicked()), this, SLOT(viewDetails()));
+    layout->addItem(details);
+    layout->addStretch();
+
+    HbPushButton *accept = new HbPushButton;
+    //TODO: localized UI string needed
+    //accept->setText(hbTrId("txt_"));
+    accept->setText(tr("I trust the app"));
+    //TODO: localized UI string needed
+    //accept->setAdditionalText(hbTrId("txt_"));
+    accept->setAdditionalText(tr("Grant all permissions"));
+    connect(accept, SIGNAL(clicked()), this, SIGNAL(accepted()));
+    layout->addItem(accept);
+
+    HbPushButton *deny = new HbPushButton;
+    //TODO: localized UI string needed
+    //deny->setText(hbTrId("txt_"));
+    deny->setText(tr("I do not trust"));
+    //TODO: localized UI string needed
+    //deny->setAdditionalText(hbTrId("txt_"));
+    deny->setAdditionalText(tr("Cancel installation"));
+    connect(deny, SIGNAL(clicked()), this, SIGNAL(rejected()));
+    layout->addItem(deny);
+
+    setLayout(layout);
+    setCapabilities(capabilities);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::~SifUiDialogGrantCapabilitiesContent()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogGrantCapabilitiesContent::~SifUiDialogGrantCapabilitiesContent()
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::viewDetails()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogGrantCapabilitiesContent::viewDetails()
+{
+    HbDialog *detailsDialog= new HbDialog();
+    detailsDialog->setAttribute(Qt::WA_DeleteOnClose, true);
+    detailsDialog->setTimeout(HbPopup::NoTimeout);
+    detailsDialog->setDismissPolicy(HbDialog::NoDismiss);
+    detailsDialog->setModal(true);
+
+    // TODO: localised UI string needed
+    QString detailsTitle = tr("Permission details");
+    detailsDialog->setHeadingWidget(new HbLabel(detailsTitle));
+
+    HbScrollArea *scrollArea = new HbScrollArea(this);
+
+    // TODO: localized UI string needed
+    QString detailsText = KDetailsTextHtmlBeginList.arg("The application has requested permissions to:");
+    QStringListIterator capaIter(mCapabilities);
+    while (capaIter.hasNext()) {
+        detailsText.append(KDetailsTextHtmlListItem.arg(capaIter.next()));
+    }
+    detailsText.append(KDetailsTextHtmlEndList);
+
+    HbLabel *detailsTextLabel = new HbLabel;
+    detailsTextLabel->setHtml(detailsText);
+    detailsTextLabel->setTextWrapping(Hb::TextWordWrap);
+
+    scrollArea->setContentWidget(detailsTextLabel);
+    scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded);
+    detailsDialog->setContentWidget(scrollArea);
+
+    HbAction *closeAction = new HbAction(hbTrId("txt_common_button_ok"));
+    detailsDialog->addAction(closeAction);
+
+    detailsDialog->show();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::setCapabilities()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogGrantCapabilitiesContent::setCapabilities(const QVariant &capabilities)
+{
+    QByteArray byteArray = capabilities.toByteArray();
+
+#ifdef Q_OS_SYMBIAN
+    const TPtrC8 ptr(reinterpret_cast<const TText8*>(byteArray.constData()), byteArray.length());
+    QT_TRAP_THROWING(setCapabilitiesSymbianL(ptr));
+#endif  // Q_OS_SYMBIAN
+
+    if (!mIsCapabilitiesValid) {
+        emit rejected();
+    }
+}
+
+#ifdef Q_OS_SYMBIAN
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::setCapabilitiesSymbianL()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogGrantCapabilitiesContent::setCapabilitiesSymbianL( const TDesC8& aBuf )
+{
+    const TPckgC<TCapabilitySet>& capabilitySetPckg( reinterpret_cast< const TPckgC<TCapabilitySet>& >( aBuf ) );
+    const TCapabilitySet& capabilitySet( capabilitySetPckg() );
+
+    mIsCapabilitiesValid = true;
+    for( TInt i = 0; i < ECapability_HardLimit && mIsCapabilitiesValid; i++ ) {
+        const TCapability capability( static_cast<TCapability>(i) );
+        if( capabilitySet.HasCapability(capability) ) {
+            QT_TRYCATCH_LEAVING( mCapabilities.append(capabilityName(capability)) );
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::capabilityName()
+// ----------------------------------------------------------------------------
+//
+QString SifUiDialogGrantCapabilitiesContent::capabilityName( const TCapability aCapability )
+{
+    QString name;
+
+    switch( aCapability ) {
+    case ECapabilityPowerMgmt:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilityPowerMgmt");
+        break;
+    case ECapabilityReadDeviceData:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilityReadDeviceData");
+        break;
+    case ECapabilityWriteDeviceData:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilityWriteDeviceData");
+        break;
+    case ECapabilityTrustedUI:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilityTrustedUI");
+        break;
+    case ECapabilityProtServ:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilityProtServ");
+        break;
+    case ECapabilitySwEvent:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilitySwEvent");
+        break;
+    case ECapabilityNetworkServices:
+        // TODO: localized UI string needed
+        name = tr("Make network connections or phone calls");
+        break;
+    case ECapabilityLocalServices:
+        // TODO: localized UI string needed
+        name = tr("Connect using local connectivity");
+        break;
+    case ECapabilityReadUserData:
+        // TODO: localized UI string needed
+        name = tr("Read user's personal data");
+        break;
+    case ECapabilityWriteUserData:
+        // TODO: localized UI string needed
+        name = tr("Modify user's personal data");
+        break;
+    case ECapabilityLocation:
+        // TODO: localized UI string needed
+        name = tr("Access the location information");
+        break;
+    case ECapabilitySurroundingsDD:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilitySurroundingsDD");
+        break;
+    case ECapabilityUserEnvironment:
+        // TODO: localized UI string needed
+        name = tr("Access user environment");
+        break;
+
+    // Other capabilities are not user-grantable
+    default:
+        mIsCapabilitiesValid = false;
+        break;
+    }
+
+    return name;
+}
+#endif  // Q_OS_SYMBIAN
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogselectlanguage.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Language selection dialog in SifUi
+*
+*/
+
+#include "sifuidialogselectlanguage.h"  // SifUiDialogSelectLanguage
+#include <HbLabel>
+#include <HbRadioButtonList>
+#include <HbAction>
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogSelectLanguage::SifUiDialogSelectLanguage()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogSelectLanguage::SifUiDialogSelectLanguage(const QVariant &languages,
+        QGraphicsItem *parent) : HbDialog(parent), mRadioButtonList(0), mOkAction(0)
+{
+    setTimeout(HbPopup::NoTimeout);
+    setDismissPolicy(HbPopup::NoDismiss);
+    setModal(true);
+
+    HbLabel *title = new HbLabel(hbTrId("txt_installer_title_select_language"));
+    setHeadingWidget(title);
+
+    Q_ASSERT( mRadioButtonList == 0 );
+    mRadioButtonList = new HbRadioButtonList(this);
+    mRadioButtonList->setItems(languageNames(languages));
+    setContentWidget(mRadioButtonList);
+
+    HbAction *okAction = new HbAction(QString(hbTrId("txt_common_button_ok")), this);
+    disconnect(okAction, SIGNAL(triggered()), this, SLOT(close()));
+    connect(okAction, SIGNAL(triggered()), this, SLOT(handleAccepted()));
+    addAction(okAction);
+
+    HbAction *cancelAction = new HbAction(QString(hbTrId("txt_common_button_cancel")), this);
+    disconnect(cancelAction, SIGNAL(triggered()), this, SLOT(close()));
+    connect(cancelAction, SIGNAL(triggered()), this, SLOT(handleRejected()));
+    addAction(cancelAction);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogSelectLanguage::~SifUiDialogSelectLanguage()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogSelectLanguage::~SifUiDialogSelectLanguage()
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogSelectLanguage::selectedLanguageIndex()
+// ----------------------------------------------------------------------------
+//
+int SifUiDialogSelectLanguage::selectedLanguageIndex() const
+{
+    if (mRadioButtonList) {
+        return mRadioButtonList->selected();
+    }
+    return -1;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogSelectLanguage::handleAccepted()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogSelectLanguage::handleAccepted()
+{
+    int index = selectedLanguageIndex();
+    emit languageSelected(index);
+    close();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogSelectLanguage::handleRejected()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogSelectLanguage::handleRejected()
+{
+    emit languageSelectionCancelled();
+    close();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogselectlanguage_symbian.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Symbian-specific part of the language selection dialog in SifUi
+*
+*/
+
+#include "sifuidialogselectlanguage.h"  // SifUiDialogSelectLanguage
+#include <languages.hrh>                // S60 language definitions
+#include <hb/hbcore/hblocaleutil.h>     // HbLocaleUtil
+#include <s32mem.h>                     // RMemReadStream
+
+//
+// String array to convert Symbian TLanguage enums to ISO 639-1 language codes.
+//
+struct SLangString
+    {
+    TInt iId;
+    const TText8* iCode;
+    };
+
+const TInt KLangCodeLength = 2;
+const SLangString KLangStrings[] =
+    {
+    { ELangEnglish,                 _S8( "en" ) },
+    { ELangFrench,                  _S8( "fr" ) },
+    { ELangGerman,                  _S8( "de" ) },
+    { ELangSpanish,                 _S8( "es" ) },
+    { ELangItalian,                 _S8( "it" ) },
+    { ELangSwedish,                 _S8( "sv" ) },
+    { ELangDanish,                  _S8( "da" ) },
+    { ELangNorwegian,               _S8( "no" ) },
+    { ELangFinnish,                 _S8( "fi" ) },
+    { ELangAmerican,                _S8( "en" ) },
+    { ELangSwissFrench,             _S8( "fr" ) },
+    { ELangSwissGerman,             _S8( "de" ) },
+    { ELangPortuguese,              _S8( "pt" ) },
+    { ELangTurkish,                 _S8( "tr" ) },
+    { ELangIcelandic,               _S8( "is" ) },
+    { ELangRussian,                 _S8( "ru" ) },
+    { ELangHungarian,               _S8( "hu" ) },
+    { ELangDutch,                   _S8( "nl" ) },
+    { ELangBelgianFlemish,          _S8( "nl" ) },
+    { ELangAustralian,              _S8( "en" ) },
+    { ELangBelgianFrench,           _S8( "fr" ) },
+    { ELangAustrian,                _S8( "de" ) },
+    { ELangNewZealand,              _S8( "en" ) },
+    { ELangInternationalFrench,     _S8( "fr" ) },
+    { ELangCzech,                   _S8( "cs" ) },
+    { ELangSlovak,                  _S8( "sk" ) },
+    { ELangPolish,                  _S8( "pl" ) },
+    { ELangSlovenian,               _S8( "sl" ) },
+    { ELangTaiwanChinese,           _S8( "zh" ) },
+    { ELangHongKongChinese,         _S8( "zh" ) },
+    { ELangPrcChinese,              _S8( "zh" ) },
+    { ELangJapanese,                _S8( "ja" ) },
+    { ELangThai,                    _S8( "th" ) },
+    { ELangAfrikaans,               _S8( "af" ) },
+    { ELangAlbanian,                _S8( "sq" ) },
+    { ELangAmharic,                 _S8( "am" ) },
+    { ELangArabic,                  _S8( "ar" ) },
+    { ELangArmenian,                _S8( "hy" ) },
+    { ELangTagalog,                 _S8( "tl" ) },
+    { ELangBelarussian,             _S8( "be" ) },
+    { ELangBengali,                 _S8( "bn" ) },
+    { ELangBulgarian,               _S8( "bg" ) },
+    { ELangBurmese,                 _S8( "my" ) },
+    { ELangCatalan,                 _S8( "ca" ) },
+    { ELangCroatian,                _S8( "hr" ) },
+    { ELangCanadianEnglish,         _S8( "en" ) },
+    { ELangInternationalEnglish,    _S8( "en" ) },
+    { ELangSouthAfricanEnglish,     _S8( "en" ) },
+    { ELangEstonian,                _S8( "et" ) },
+    { ELangFarsi,                   _S8( "fa" ) },
+    { ELangCanadianFrench,          _S8( "fr" ) },
+    { ELangScotsGaelic,             _S8( "gd" ) },
+    { ELangGeorgian,                _S8( "ka" ) },
+    { ELangGreek,                   _S8( "el" ) },
+    { ELangCyprusGreek,             _S8( "el" ) },
+    { ELangGujarati,                _S8( "gu" ) },
+    { ELangHebrew,                  _S8( "he" ) },
+    { ELangHindi,                   _S8( "hi" ) },
+    { ELangIndonesian,              _S8( "id" ) },
+    { ELangIrish,                   _S8( "ga" ) },
+    { ELangSwissItalian,            _S8( "it" ) },
+    { ELangKannada,                 _S8( "kn" ) },
+    { ELangKazakh,                  _S8( "kk" ) },
+    { ELangKhmer,                   _S8( "km" ) },
+    { ELangKorean,                  _S8( "ko" ) },
+    { ELangLao,                     _S8( "lo" ) },
+    { ELangLatvian,                 _S8( "lv" ) },
+    { ELangLithuanian,              _S8( "lt" ) },
+    { ELangMacedonian,              _S8( "mk" ) },
+    { ELangMalay,                   _S8( "ms" ) },
+    { ELangMalayalam,               _S8( "ml" ) },
+    { ELangMarathi,                 _S8( "mr" ) },
+    { ELangMoldavian,               _S8( "mo" ) },
+    { ELangMongolian,               _S8( "mn" ) },
+    { ELangNorwegianNynorsk,        _S8( "nn" ) },
+    { ELangBrazilianPortuguese,     _S8( "pt" ) },
+    { ELangPunjabi,                 _S8( "pa" ) },
+    { ELangRomanian,                _S8( "ro" ) },
+    { ELangSerbian,                 _S8( "sr" ) },
+    { ELangSinhalese,               _S8( "si" ) },
+    { ELangSomali,                  _S8( "so" ) },
+    { ELangInternationalSpanish,    _S8( "es" ) },
+    { ELangLatinAmericanSpanish,    _S8( "es" ) },
+    { ELangSwahili,                 _S8( "sw" ) },
+    { ELangFinlandSwedish,          _S8( "sv" ) },
+    { ELangReserved1,               _S8( "en" ) },
+    { ELangTamil,                   _S8( "ta" ) },
+    { ELangTelugu,                  _S8( "te" ) },
+    { ELangTibetan,                 _S8( "bo" ) },
+    { ELangTigrinya,                _S8( "ti" ) },
+    { ELangCyprusTurkish,           _S8( "tr" ) },
+    { ELangTurkmen,                 _S8( "tk" ) },
+    { ELangUkrainian,               _S8( "uk" ) },
+    { ELangUrdu,                    _S8( "ur" ) },
+    { ELangReserved2,               _S8( "en" ) },
+    { ELangVietnamese,              _S8( "vi" ) },
+    { ELangWelsh,                   _S8( "cy" ) },
+    { ELangZulu,                    _S8( "zu" ) },
+    { KLangTaiwanEnglish,           _S8( "en" ) },
+    { KLangHongKongEnglish,         _S8( "en" ) },
+    { KLangPrcEnglish,              _S8( "en" ) },
+    { KLangJapaneseEnglish,         _S8( "en" ) },
+    { KLangThaiEnglish,             _S8( "en" ) }
+    };
+
+#define KNUMLANGSTRINGS ( sizeof( KLangStrings ) / sizeof( SLangString ) )
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// LanguageCode()
+// ----------------------------------------------------------------------------
+//
+QString LanguageCode( const TLanguage aLanguage )
+{
+    for( TInt index = 0; index < KNUMLANGSTRINGS; ++index )
+        {
+        SLangString lang = KLangStrings[ index ];
+        if( lang.iId == aLanguage )
+            {
+            return QString::fromAscii( reinterpret_cast<const char*>( lang.iCode ),
+                KLangCodeLength );
+            }
+        }
+    return QString("");
+}
+
+// ----------------------------------------------------------------------------
+// LanguageName()
+// ----------------------------------------------------------------------------
+//
+QString LanguageName( const TLanguage aLanguage )
+{
+    QString langCode = LanguageCode( aLanguage );
+    if( langCode.isEmpty() ) {
+        return hbTrId("txt_installer_list_unknown_language");
+    }
+    QString langName = HbLocaleUtil::localisedLanguageName( langCode );
+    if( langName.isEmpty() ) {
+        return hbTrId("txt_installer_list_unknown_language");
+    }
+    return langName;
+}
+
+// ----------------------------------------------------------------------------
+// LanguageNamesL()
+// ----------------------------------------------------------------------------
+//
+QStringList LanguageNamesL( const TDesC8& aBuf )
+{
+    RMemReadStream readStream( aBuf.Ptr(), aBuf.Size() );
+    CleanupClosePushL( readStream );
+    RArray<TLanguage> langArray;
+    TPckg< RArray<TLanguage> > langArrayPckg( langArray );
+    readStream.ReadL( langArrayPckg );
+    CleanupStack::PopAndDestroy( &readStream );
+
+    QStringList langNames;
+    for( TInt index = 0; index < langArray.Count(); index++ ) {
+        QT_TRYCATCH_LEAVING( langNames.append( LanguageName( langArray[index] ) ) );
+    }
+    return langNames;
+}
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogSelectLanguage::languageNames()
+// ----------------------------------------------------------------------------
+//
+QStringList SifUiDialogSelectLanguage::languageNames(const QVariant& languages)
+{
+    QByteArray byteArray = languages.toByteArray();
+    QStringList names;
+
+    const TPtrC8 ptr(reinterpret_cast<const TText8*>(byteArray.constData()), byteArray.length());
+    QT_TRAP_THROWING( names = LanguageNamesL( ptr ) );
+
+    return names;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogselectoptions_symbian.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Symbian specific functions in optional components selection dialog
+*
+*/
+
+#include <QList>
+#include <QVariant>
+#include <s32mem.h>                     // RDesWriteStream
+
+const TInt KBufferGranularity = 4;
+
+
+// ----------------------------------------------------------------------------
+// ConvertOptionalComponentIndexesL()
+// ----------------------------------------------------------------------------
+//
+QByteArray ConvertOptionalComponentIndexesL( const QList<QVariant> &aIndexes )
+{
+    // Get aIndexes into symbianArray
+    RArray<TInt> symbianArray;
+    CleanupClosePushL( symbianArray );
+    QListIterator<QVariant> iter( aIndexes );
+    while( iter.hasNext() ) {
+        QVariant item = iter.next();
+        int i;
+        bool ok;
+        i = item.toInt( &ok );
+        if( ok ) {
+            symbianArray.AppendL( i );
+        }
+    }
+
+    // Write symbianArray to a package buffer
+    CBufFlat* buffer = CBufFlat::NewL( KBufferGranularity );
+    CleanupStack::PushL( buffer );
+    RBufWriteStream writeStream( *buffer );
+    CleanupClosePushL( writeStream );
+    TPckg< const RArray<TInt> > indexesPckg( symbianArray );
+    writeStream.WriteL( indexesPckg );
+    writeStream.CommitL();
+    CleanupStack::PopAndDestroy( &writeStream );
+
+    // Create byte array (copies data) from the package buffer
+    const TInt KFromTheBeginning = 0;
+    TPtr8 ptr = buffer->Ptr(KFromTheBeginning);
+    QByteArray byteArray( reinterpret_cast<const char*>( ptr.Ptr() ), ptr.Length() );
+    CleanupStack::PopAndDestroy( buffer );
+
+    CleanupStack::PopAndDestroy( &symbianArray );
+    return byteArray;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogtitlewidget.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: SIF UI dialog title widget.
+*
+*/
+
+#include "sifuidialogtitlewidget.h"
+#include "sifuidialog.h"                    // dialogType, dialogMode
+#include "sifuidialogcertificatedetails.h"  // SifUiDialogCertificateDetails
+#include <QGraphicsLinearLayout>
+#include <hblabel.h>
+#include <hbpushbutton.h>
+#include <hbmessagebox.h>
+
+const char KSifUiCertTrusted[]    = "qtg_small_lock";
+const char KSifUiCertNotTrusted[] = "qtg_small_untrusted";
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogTitleWidget::SifUiDialogTitleWidget()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogTitleWidget::SifUiDialogTitleWidget(QGraphicsItem *parent,
+        Qt::WindowFlags flags): HbWidget(parent, flags),
+        mLayout(0), mTitle(0), mCertButton(0), mCertificates(0), mDetailsDialog(0)
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogTitleWidget::~SifUiDialogTitleWidget()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogTitleWidget::~SifUiDialogTitleWidget()
+{
+    delete mDetailsDialog;
+    delete mCertificates;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogTitleWidget::constructFromParameters()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogTitleWidget::constructFromParameters(const QVariantMap &parameters)
+{
+    mLayout = new QGraphicsLinearLayout(Qt::Horizontal);
+    updateTitle(parameters);
+    updateCertificates(parameters);
+    setLayout(mLayout);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogTitleWidget::updateFromParameters()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogTitleWidget::updateFromParameters(const QVariantMap &parameters)
+{
+    updateTitle(parameters);
+    updateCertificates(parameters);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogTitleWidget::defaultTitle()
+// ----------------------------------------------------------------------------
+//
+QString SifUiDialogTitleWidget::defaultTitle(SifUiDeviceDialogType type,
+        SifUiInstallingPhase phase)
+{
+    QString title;
+    switch (type) {
+        case SifUiConfirmationQuery:
+            //: Custom layout ID parent. Install confirmation query title.
+            //: Installation of an application starts if the user accepts the query.
+            title = hbTrId("txt_installer_title_install");
+            break;
+        case SifUiProgressNote:
+            switch (phase) {
+                case SifUiCheckingCerts:
+                    //: Progress note title. Installer validates certificates online.
+                    //: This may take some time.
+                    //TODO: localised UI string needed
+                    title = hbTrId("Checking certificate validity");
+                    break;
+                case SifUiInstalling:
+                case SifUiDownloading:
+                default:
+                    //: Progress note title. Installation is going on and progress bar
+                    //: shows how it proceeds.
+                    title = hbTrId("txt_installer_title_installing");
+                    break;
+            }
+            break;
+        case SifUiCompleteNote:
+            //: Installation complete note title. Indicates that installation
+            //: was succesfully completed. User has option to launch AppLib.
+            title = hbTrId("txt_installer_title_installed");
+            break;
+        case SifUiErrorNote:
+            //: Installation failed note title. Indicates that installation failed.
+            title = hbTrId("txt_installer_info_installation_failed");
+            break;
+        case SifUiUnspecifiedDialog:
+        default:
+            break;
+    }
+    return title;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogTitleWidget::updateTitle()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogTitleWidget::updateTitle(const QVariantMap &parameters)
+{
+    QString titleText;
+    if (parameters.contains(KSifUiDialogTitle)) {
+        titleText = parameters.value(KSifUiDialogTitle).toString();
+    } else {
+        SifUiDeviceDialogType type = SifUiDialog::dialogType(parameters);
+        SifUiInstallingPhase progressPhase = SifUiInstalling;
+        if (parameters.contains(KSifUiProgressNotePhase)) {
+            bool ok = false;
+            int i = parameters.value(KSifUiProgressNotePhase).toInt(&ok);
+            if (ok) {
+                progressPhase = static_cast<SifUiInstallingPhase>(i);
+            }
+        }
+        titleText = defaultTitle(type, progressPhase);
+    }
+    if (mTitle) {
+        if (titleText != mTitle->plainText()) {
+            mTitle->setPlainText(titleText);
+        }
+    } else {
+        mTitle = new HbLabel(titleText);
+        mTitle->setFontSpec(HbFontSpec(HbFontSpec::Title));
+        mLayout->addItem(mTitle);
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogTitleWidget::updateCertificates()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogTitleWidget::updateCertificates(const QVariantMap &parameters)
+{
+    if (!mCertButton) {
+        mCertButton = new HbPushButton;
+        connect(mCertButton, SIGNAL(clicked()), this, SLOT(certificatesClicked()));
+
+        if (parameters.contains(KSifUiCertificates)) {
+            Q_ASSERT(mCertificates == 0);
+            mCertificates = getCertificates(parameters.value(KSifUiCertificates).toByteArray());
+            mCertButton->setIcon(HbIcon(KSifUiCertTrusted));
+        } else {
+            mCertButton->setIcon(HbIcon(KSifUiCertNotTrusted));
+        }
+
+        mLayout->addStretch();
+        mLayout->addItem(mCertButton);
+        mLayout->setAlignment(mCertButton, Qt::AlignRight|Qt::AlignVCenter);
+    } else {
+        if (mCertificates == 0 && parameters.contains(KSifUiCertificates)) {
+            mCertificates = getCertificates(parameters.value(KSifUiCertificates).toByteArray());
+            mCertButton->setIcon(HbIcon(KSifUiCertTrusted));
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogTitleWidget::certificatesClicked()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogTitleWidget::certificatesClicked()
+{
+    if (mCertificates) {
+        if (mDetailsDialog) {
+            delete mDetailsDialog;
+            mDetailsDialog = 0;
+        }
+        mDetailsDialog = new SifUiDialogCertificateDetails(*mCertificates);
+        mDetailsDialog->showDetails();
+    } else {
+        // TODO: localize
+        HbMessageBox::warning(tr("Application is not certified. It's origin and authenticity cannot be proved."));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogtitlewidget_symbian.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,118 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: SIF UI dialog title widget (SymbianOS specific part).
+*
+*/
+
+#include "sifuidialogtitlewidget.h"
+#include "sifuidialogcertificateinfo.h"     // SifUiDialogCertificateInfo
+#include <s32mem.h>                         // RDesReadStream
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// readStringFromStreamL()
+// ----------------------------------------------------------------------------
+//
+QString readStringFromStreamL( RDesReadStream& aReadStream )
+{
+    TInt length = aReadStream.ReadInt32L();
+    HBufC* buf = HBufC::NewLC( length );
+    TPtr ptr( buf->Des() );
+    aReadStream.ReadL( ptr, length );
+    QString string = QString::fromUtf16( ptr.Ptr(), length );
+    CleanupStack::PopAndDestroy( buf );
+    return string;
+}
+
+// ----------------------------------------------------------------------------
+// readByteArrayFromStreamL()
+// ----------------------------------------------------------------------------
+//
+QByteArray readByteArrayFromStreamL( RDesReadStream& aReadStream )
+{
+    TInt length = aReadStream.ReadInt32L();
+    HBufC8* buf = HBufC8::NewLC( length );
+    TPtr8 ptr( buf->Des() );
+    aReadStream.ReadL( ptr, length );
+    QByteArray byteArray( reinterpret_cast< const char * >( ptr.Ptr() ), length );
+    CleanupStack::PopAndDestroy( buf );
+    return byteArray;
+}
+
+// ----------------------------------------------------------------------------
+// readDateFromStreamL()
+// ----------------------------------------------------------------------------
+//
+void readDateFromStreamL( RDesReadStream& aReadStream, QDateTime& aDateTime )
+{
+    TDateTime dateTimeSymbian;
+    TPckg<TDateTime> dateTimePckg( dateTimeSymbian );
+    aReadStream.ReadL( dateTimePckg );
+    QDate date( dateTimeSymbian.Year(), dateTimeSymbian.Month()+1, dateTimeSymbian.Day()+1 );
+    aDateTime.setDate( date );
+    QTime time( dateTimeSymbian.Hour(), dateTimeSymbian.Minute(), dateTimeSymbian.Second() );
+    aDateTime.setTime( time );
+}
+
+// ----------------------------------------------------------------------------
+// doGetCertificatesL()
+// ----------------------------------------------------------------------------
+//
+QList<SifUiDialogCertificateInfo*> *doGetCertificatesL( QByteArray aArray )
+{
+    QList<SifUiDialogCertificateInfo*> *list = new QList<SifUiDialogCertificateInfo*>;
+
+    const TPtrC8 ptr8( reinterpret_cast< const TText8* >( aArray.constData() ), aArray.size() );
+    RDesReadStream readStream;
+    CleanupClosePushL( readStream );
+    readStream.Open( ptr8 );
+
+    TInt certCount = readStream.ReadInt32L();
+    for( TInt index = 0; index < certCount; ++index )
+        {
+        QString subjectName = readStringFromStreamL( readStream );
+        QString issuerName = readStringFromStreamL( readStream );
+        QByteArray fingerprint = readByteArrayFromStreamL( readStream );
+        QByteArray serialNumber = readByteArrayFromStreamL( readStream );
+        QDateTime validFrom;
+        readDateFromStreamL( readStream, validFrom );
+        QDateTime validTo;
+        readDateFromStreamL( readStream, validTo );
+
+        SifUiDialogCertificateInfo *certInfo = new SifUiDialogCertificateInfo(
+            subjectName, issuerName, fingerprint, serialNumber, validFrom, validTo );
+        list->append( certInfo );
+        }
+
+    CleanupStack::PopAndDestroy( &readStream );
+    return list;
+}
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogTitleWidget::SifUiDialogTitleWidget()
+// ----------------------------------------------------------------------------
+//
+QList<SifUiDialogCertificateInfo*> *SifUiDialogTitleWidget::getCertificates(
+    QByteArray array)
+{
+    QList<SifUiDialogCertificateInfo*> *list = 0;
+    QT_TRAP_THROWING(list = doGetCertificatesL(array));
+    return list;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/tsrc/tsrc.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description: Test components for SIF UI device dialog plugin.
+#
+
+TEMPLATE = subdirs
+SUBDIRS += ut_sifuidevicedialog
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/tsrc/ut_sifuidevicedialog/ut_sifuidevicedialog.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Unit test implementation for SIF UI device dialog.
+*
+*/
+
+#include "ut_sifuidevicedialog.h"
+#include <sifuidialog.h>
+
+
+// ---------------------------------------------------------------------------
+// TestSifUiDeviceDialog::initTestCase()
+// ---------------------------------------------------------------------------
+//
+void TestSifUiDeviceDialog::initTestCase()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// TestSifUiDeviceDialog::init()
+// ---------------------------------------------------------------------------
+//
+void TestSifUiDeviceDialog::init()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// TestSifUiDeviceDialog::cleanup()
+// ---------------------------------------------------------------------------
+//
+void TestSifUiDeviceDialog::cleanup()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// TestSifUiDeviceDialog::cleanupTestCase()
+// ---------------------------------------------------------------------------
+//
+void TestSifUiDeviceDialog::cleanupTestCase()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// TestSifUiDeviceDialog::showInfoNote()
+// ---------------------------------------------------------------------------
+//
+void TestSifUiDeviceDialog::showInfoNote()
+    {
+    QVariantMap params;
+    SifUiDialog dlg(params);
+    bool isConstructOk = dlg.constructDialog(params);
+    QVERIFY(isConstructOk);
+    }
+
+// ---------------------------------------------------------------------------
+// main()
+// ---------------------------------------------------------------------------
+//
+QTEST_MAIN(TestSifUiDeviceDialog)
+#include "moc_ut_sifuidevicedialog.cpp"
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/tsrc/ut_sifuidevicedialog/ut_sifuidevicedialog.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Unit test definitions for SIF UI device dialog.
+*
+*/
+
+#ifndef UT_SIFUIDEVICEDIALOG_H
+#define UT_SIFUIDEVICEDIALOG_H
+
+#include <QtTest/QtTest>
+
+class TestSifUiDeviceDialog : public QObject
+{
+    Q_OBJECT
+
+private slots:
+    // Called first before first test case
+    void initTestCase();
+    // Called before each test case
+    void init();
+    // Called after every test case
+    void cleanup();
+    // Called after the last test case
+    void cleanupTestCase();
+
+    // Test cases
+    void showInfoNote();
+
+private:
+    
+
+};
+
+
+#endif  //  UT_SIFUIDEVICEDIALOG_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/tsrc/ut_sifuidevicedialog/ut_sifuidevicedialog.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Unit test project for SIF UI device dialog.
+#
+
+CONFIG += qtestlib hb
+TEMPLATE = app
+TARGET = ut_sifuidevicedialog
+DEPENDPATH += .
+INCLUDEPATH += . ../../inc
+
+HEADERS += ut_sifuidevicedialog.h
+SOURCES += ut_sifuidevicedialog.cpp
+
+symbian: {
+    TARGET.EPOCALLOWDLLDATA = 1
+    TARGET.CAPABILITY = CAP_APPLICATION
+    TARGET.UID3 = 0xE7DB7B81
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/inc/sifuiinstallindicator.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Software install progress indicator
+*
+*/
+
+#ifndef SIFUIINSTALLINDICATOR_H
+#define SIFUIINSTALLINDICATOR_H
+
+#include <hbindicatorinterface.h>
+#include <qmobilityglobal.h>            // QTM namespace macros
+
+QTM_BEGIN_NAMESPACE
+class QValueSpacePublisher;
+QTM_END_NAMESPACE
+
+// Variant map keys for parameters
+const QString KSifUiInstallIndicatorAppName = "name";       // QString
+const QString KSifUiInstallIndicatorPhase = "phase";        // int (enum Phase)
+const QString KSifUiInstallIndicatorProgress = "prog";      // int (0..100)
+const QString KSifUiInstallIndicatorComplete = "done";      // int (KErrNone or error code)
+const QString KSifUiInstallIndicatorIcon = "icon";          // TODO: TBD
+
+
+/**
+ * Software install progress indicator for the status indicator area
+ * and/or in universal indicator popup.
+ */
+class SifUiInstallIndicator : public HbIndicatorInterface
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    SifUiInstallIndicator(const QString &indicatorType);
+    virtual ~SifUiInstallIndicator();
+
+public:     // from HbIndicatorInterface
+    virtual bool handleInteraction(InteractionType type);
+    virtual QVariant indicatorData(int role) const;
+
+protected:  // from HbIndicatorInterface
+    bool handleClientRequest(RequestType type, const QVariant &parameter);
+
+private:    // new Symbian functions, TODO: move to symbian-specific code
+    void CreateNotifierL();
+    void StartListeningOperationsL();
+    void StopListeningOperationsL();
+
+private:    // new functions
+    void processParameters(const QVariant &parameter);
+    void publishActivityStatus(bool status);
+
+private:    // data
+    QString mAppName;
+    int mProgress;
+    QTM_PREPEND_NAMESPACE(QValueSpacePublisher) *mPublisher;
+    bool mIsActive;
+    enum Phase {
+        Installing,
+        Downloading,
+        CheckingCerts
+    } mPhase;
+    bool mIsComplete;
+    int mErrorCode;
+};
+
+#endif  // SIFUIINSTALLINDICATOR_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/inc/sifuiinstallindicatorparams.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definitions for software install progress indicator
+*
+*/
+
+#ifndef SIFUIINSTALLINDICATORPARAMS_H
+#define SIFUIINSTALLINDICATORPARAMS_H
+
+// Install indicator plugin type string
+const QString KSifUiInstallIndicatorType = "com.nokia.sifui.indi/1.0";
+
+// Path and value name for QValueSpacePublisher/QValueSpaceSubscriber.
+const QString KSifUiInstallIndicatorPath = "/SifUiInstallIndicator";
+const QString KSifUiInstallIndicatorStatus = "Status";
+const QString KSifUiInstallIndicatorStatusPath = "/SifUiInstallIndicator/Status";
+
+#endif // SIFUIINSTALLINDICATORPARAMS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/inc/sifuiinstallindicatorplugin.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Software install progress indicator
+*
+*/
+
+#ifndef SIFUIINSTALLINDICATORPLUGIN_H
+#define SIFUIINSTALLINDICATORPLUGIN_H
+
+#include <QObject>
+#include <hbindicatorplugininterface.h>
+
+
+/**
+ * Software install progress indicator plugin for the status indicator area
+ * and/or in universal indicator popup.
+ */
+class SifUiInstallIndicatorPlugin : public QObject, public HbIndicatorPluginInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(HbIndicatorPluginInterface)
+
+public:     // constructor and destructor
+     SifUiInstallIndicatorPlugin();
+    ~SifUiInstallIndicatorPlugin();
+
+public:     // from HbIndicatorPluginInterface
+    QStringList indicatorTypes() const;
+    bool accessAllowed(const QString &indicatorType, const QVariantMap &securityInfo) const;
+    HbIndicatorInterface* createIndicator(const QString &indicatorType);
+    int error() const;
+
+private:    // new functions
+    Q_DISABLE_COPY(SifUiInstallIndicatorPlugin)
+
+private:    // data
+    int mError;
+};
+
+#endif  // SIFUIINSTALLINDICATORPLUGIN_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/rom/sifuiinstallindicatorplugin.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Software install progress indicator
+*
+*/
+
+#ifndef SIFUIINSTALLINDICATORPLUGIN_IBY
+#define SIFUIINSTALLINDICATORPLUGIN_IBY
+
+file=ABI_DIR\UREL\sifuiinstallindicatorplugin.dll SHARED_LIB_DIR\sifuiinstallindicatorplugin.dll UNPAGED
+data=DATAZ_\resource\plugins\indicators\sifuiinstallindicatorplugin.qtplugin \resource\plugins\indicators\sifuiinstallindicatorplugin.qtplugin
+data=DATAZ_\resource\qt\crml\sifuiinstallindicatorplugin.qcrml \resource\qt\crml\sifuiinstallindicatorplugin.qcrml
+
+#endif  // SIFUIINSTALLINDICATORPLUGIN_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/sifuiinstallindicatorplugin.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:  Software install progress indicator
+#
+
+TEMPLATE = lib
+TARGET = sifuiinstallindicatorplugin
+CONFIG += plugin
+CONFIG += hb
+
+INCLUDEPATH += .
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+DEPENDPATH += .
+
+LIBS += -lQtPublishSubscribe
+
+HEADERS += inc/sifuiinstallindicatorplugin.h \
+    inc/sifuiinstallindicator.h \
+    inc/sifuiinstallindicatorparams.h
+
+SOURCES += src/sifuiinstallindicatorplugin.cpp \
+    src/sifuiinstallindicator.cpp
+
+symbian {
+    TARGET.EPOCALLOWDLLDATA = 1
+    TARGET.CAPABILITY = CAP_GENERAL_DLL
+    TARGET.UID3 = 0x2002E690
+
+    pluginstub.sources = sifuiinstallindicatorplugin.dll
+    pluginstub.path = /resource/plugins/indicators
+    DEPLOYMENT += pluginstub
+
+	crmlFiles.sources = sifuiinstallindicatorplugin.qcrml
+	crmlFiles.path = /resource/qt/crml
+	DEPLOYMENT += crmlFiles
+}
+
+BLD_INF_RULES.prj_exports += \
+    "$${LITERAL_HASH}include <platform_paths.hrh>" \
+    "rom/sifuiinstallindicatorplugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(sifuiinstallindicatorplugin.iby)"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/sifuiinstallindicatorplugin.qcrml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<repository target="RProperty" uidValue="0x20022FC5">
+    <key ref="/SifUiInstallIndicator/Status" int="0x2002E690"/>
+</repository>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/src/sifuiinstallindicator.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,246 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Software install progress indicator
+*
+*/
+
+#include "sifuiinstallindicator.h"
+#include "sifuiinstallindicatorparams.h"
+#include <QVariant>
+#include <qvaluespacepublisher.h>
+
+const char KSifUiDefaultApplicationIcon[] = "qtg_large_application";
+const char KSifUiErrorIcon[] = "qtg_large_warning";
+const QString KSifUiPathSeparator = "/";
+
+
+// ======== LOCAL FUNCTIONS =========
+
+// ---------------------------------------------------------------------------
+// getIntValue()
+// ---------------------------------------------------------------------------
+//
+void getIntValue(const QVariant &variant, int &value)
+{
+    bool ok = false;
+    int temp = variant.toInt(&ok);
+    if (ok) {
+        value = temp;
+    }
+}
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicator::SifUiInstallIndicator()
+// ---------------------------------------------------------------------------
+//
+SifUiInstallIndicator::SifUiInstallIndicator(const QString &indicatorType) :
+    HbIndicatorInterface(indicatorType, HbIndicatorInterface::ProgressCategory,
+            InteractionActivated), mAppName(), mProgress(0), mPublisher(0),
+            mIsActive(false), mPhase(Installing), mIsComplete(false), mErrorCode(0)
+{
+    mPublisher = new QTM_PREPEND_NAMESPACE(QValueSpacePublisher(KSifUiInstallIndicatorPath));
+}
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicator::~SifUiInstallIndicator()
+// ---------------------------------------------------------------------------
+//
+SifUiInstallIndicator::~SifUiInstallIndicator()
+{
+    if (mPublisher && mIsActive) {
+        publishActivityStatus(false);
+    }
+    delete mPublisher;
+}
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicator::handleInteraction()
+// ---------------------------------------------------------------------------
+//
+bool SifUiInstallIndicator::handleInteraction(InteractionType type)
+{
+    bool handled = false;
+
+    if (type == InteractionActivated) {
+        emit deactivate();
+        publishActivityStatus(false);
+        handled = true;
+    }
+
+    return handled;
+}
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicator::indicatorData()
+// ---------------------------------------------------------------------------
+//
+QVariant SifUiInstallIndicator::indicatorData(int role) const
+{
+    QVariant data;
+
+    switch(role) {
+        case DecorationNameRole:
+            if (mIsComplete && mErrorCode) {
+                data = QString(KSifUiErrorIcon);
+            } else {
+                // TODO: how to set application specific icon if defined?
+                data = QString(KSifUiDefaultApplicationIcon);
+            }
+            break;
+
+        case PrimaryTextRole:
+            if (mIsComplete) {
+                if (mErrorCode) {
+                    //: Indicates that application installation failed.
+                    // TODO: localized UI string needed
+                    data = tr("Installation failed");
+                } else {
+                    //: Indicates that application installation is completed.
+                    // TODO: localized UI string needed
+                    data = tr("Installed");
+                }
+            } else {
+                switch (mPhase) {
+                    case Installing:
+                        //: Indicates that application installation is ongoing.
+                        // TODO: localized UI string needed
+                        data = tr("Installing");
+                        break;
+                    case Downloading:
+                        //: Indicates that download is ongoing.
+                        // TODO: localized UI string needed
+                        data = tr("Downloading");
+                        break;
+                    case CheckingCerts:
+                        //: Indicates that OCSP check is ongoing.
+                        // TODO: localized UI string needed
+                        data = tr("Checking certificates");
+                        break;
+                    default:
+                        break;
+                }
+            }
+            break;
+
+        case SecondaryTextRole:
+            if (mIsComplete) {
+                data = mAppName;
+            } else {
+                switch (mPhase) {
+                    case Installing:
+                    case Downloading:
+                        if (!mAppName.isEmpty()) {
+                            //: Application name %1 followed by installation progress %L2
+                            // TODO: localized UI string needed
+                            data = tr("%1 (%L2 %)").arg(mAppName).arg(mProgress);
+                        }
+                        break;
+                    case CheckingCerts:
+                    default:
+                        data = mAppName;
+                        break;
+                }
+            }
+            break;
+
+        default:
+            break;
+    }
+
+    return data;
+}
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicator::prepareDisplayName()
+// ---------------------------------------------------------------------------
+//
+bool SifUiInstallIndicator::handleClientRequest(RequestType type, const QVariant &parameter)
+{
+    bool indicatorDisplayed = false;
+
+    switch (type) {
+        case RequestActivate:
+            processParameters(parameter);
+            indicatorDisplayed = true;
+            emit dataChanged();
+            break;
+        case RequestDeactivate:
+            break;
+        default:
+            break;
+    }
+
+    publishActivityStatus(indicatorDisplayed);
+    return indicatorDisplayed;
+}
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicator::processParameters()
+// ---------------------------------------------------------------------------
+//
+void SifUiInstallIndicator::processParameters(const QVariant &parameter)
+{
+    if (parameter.isValid()) {
+        if (parameter.type() == QVariant::String) {
+            mAppName = parameter.toString();
+        } else if (parameter.type() == QVariant::Int) {
+            getIntValue(parameter, mProgress);
+        } else if (parameter.type() == QVariant::Map) {
+            QVariantMap map = parameter.toMap();
+            QMapIterator<QString,QVariant> iter(map);
+            while (iter.hasNext()) {
+                iter.next();
+                if (iter.key() == KSifUiInstallIndicatorAppName) {
+                    mAppName = iter.value().toString();
+                } else if (iter.key() == KSifUiInstallIndicatorPhase) {
+                    int value = Installing;
+                    getIntValue(iter.value(), value);
+                    mPhase = static_cast<Phase>(value);
+                } else if (iter.key() == KSifUiInstallIndicatorProgress) {
+                    getIntValue(iter.value(), mProgress);
+                } else if (iter.key() == KSifUiInstallIndicatorComplete) {
+                    mIsComplete = true;
+                    mErrorCode = KErrNone;
+                    getIntValue(iter.value(), mErrorCode);
+                } else if (iter.key() == KSifUiInstallIndicatorIcon) {
+                    // TODO: icon?
+                } else {
+                    // ignore other types
+                }
+            }
+        } else {
+            // ignore other types
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicator::publishActivityStatus()
+// ---------------------------------------------------------------------------
+//
+void SifUiInstallIndicator::publishActivityStatus(bool status)
+{
+    if (status != mIsActive) {
+        if (mPublisher) {
+            int intStatus = status;
+            mPublisher->setValue(KSifUiInstallIndicatorStatus, QVariant(intStatus));
+            mPublisher->sync();
+        }
+        mIsActive = status;
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/src/sifuiinstallindicatorplugin.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Software install progress indicator
+*
+*/
+
+#include "sifuiinstallindicatorplugin.h"
+#include "sifuiinstallindicator.h"
+#include "sifuiinstallindicatorparams.h"
+
+Q_EXPORT_PLUGIN(SifUiInstallIndicatorPlugin)
+
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicatorPlugin::SifUiInstallIndicatorPlugin
+// ---------------------------------------------------------------------------
+//
+SifUiInstallIndicatorPlugin::SifUiInstallIndicatorPlugin() : mError(0)
+{
+}
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicatorPlugin::~SifUiInstallIndicatorPlugin
+// ---------------------------------------------------------------------------
+//
+SifUiInstallIndicatorPlugin::~SifUiInstallIndicatorPlugin()
+{
+}
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicatorPlugin::indicatorTypes
+// ---------------------------------------------------------------------------
+//
+QStringList SifUiInstallIndicatorPlugin::indicatorTypes() const
+{
+    QStringList types;
+    types << KSifUiInstallIndicatorType;
+    return types;
+}
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicatorPlugin::accessAllowed
+// ---------------------------------------------------------------------------
+//
+bool SifUiInstallIndicatorPlugin::accessAllowed(const QString &indicatorType,
+    const QVariantMap &securityInfo) const
+{
+    Q_UNUSED(indicatorType)
+    Q_UNUSED(securityInfo)
+
+    return true;    // All clients are allowed to use.
+}
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicatorPlugin::createIndicator
+// ---------------------------------------------------------------------------
+//
+HbIndicatorInterface* SifUiInstallIndicatorPlugin::createIndicator(
+        const QString &indicatorType)
+{
+    HbIndicatorInterface *indicator = new SifUiInstallIndicator(indicatorType);
+    return indicator;
+}
+
+// ---------------------------------------------------------------------------
+// SifUiInstallIndicatorPlugin::error
+// ---------------------------------------------------------------------------
+//
+int SifUiInstallIndicatorPlugin::error() const
+{
+    return mError;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_compile_tests.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SW install progress indicator.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Compiling module tests
+echo.
+echo ----------------------------------------------------------------------
+echo.
+call qmake
+call make debug-winscw
+call make release-armv5
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_instrument_code.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SW install progress indicator.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Instrumenting code (armv5 urel and winscw udeb, decision coverage)
+echo.
+echo ----------------------------------------------------------------------
+echo.
+pushd ..\..
+if exist MON.sym del MON.sym
+if exist MON.dat del MON.dat
+if exist profile.txt del profile.txt
+call qmake
+call make distclean
+call qmake
+call ctcwrap -i d -2comp -C "EXCLUDE+moc_*.cpp" -C "EXCLUDE+*.UID.CPP" -C "SKIP_FUNCTION_NAME+SifUiInstallIndicatorPlugin::error()" -C "SKIP_FUNCTION_NAME+qt_plugin_query_verification_data" -C "SKIP_FUNCTION_NAME+qt_plugin_instance" make debug-winscw
+call ctcwrap -i d -2comp -C "EXCLUDE+moc_*.cpp" -C "EXCLUDE+*.UID.CPP" -C "SKIP_FUNCTION_NAME+SifUiInstallIndicatorPlugin::error()" -C "SKIP_FUNCTION_NAME+qt_plugin_query_verification_data" -C "SKIP_FUNCTION_NAME+qt_plugin_instance" make release-armv5
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_remove_instrumentation.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,30 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SW install progress indicator.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Removing instrumentation
+echo.
+echo ----------------------------------------------------------------------
+echo.
+pushd ..\..
+call qmake
+call make distclean
+call qmake
+call make
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_run_tests.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,42 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SW install progress indicator.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Running module tests
+echo.
+echo ----------------------------------------------------------------------
+echo.
+call make run
+
+echo.
+echo.
+echo ----------------------------------------------------------------------
+echo.
+echo Processing test results
+echo.
+echo ----------------------------------------------------------------------
+echo.
+find "[QTestLib]" %TEMP%\epocwind.out > mt_results.txt
+start mt_results.txt
+type mt_results.txt
+echo.
+pushd ..\..
+call ctcpost MON.sym MON.dat -p profile.txt
+call ctc2html -i profile.txt
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/mt_sifuiinstallindicator.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Module tests for SW install progress indicator.
+*
+*/
+
+#include "mt_sifuiinstallindicator.h"
+#include "sifuiinstallindicatorparams.h"
+#include <hbindicator.h>
+#include <qvaluespacesubscriber.h>
+#include <QTest>
+
+QTM_USE_NAMESPACE
+
+
+// ---------------------------------------------------------------------------
+// TestSifUiInstallIndicator::activateWithoutParams()
+// ---------------------------------------------------------------------------
+//
+void TestSifUiInstallIndicator::activateWithoutParams()
+{
+    QValueSpaceSubscriber *subscriber = 0;
+    subscriber = new QValueSpaceSubscriber(KSifUiInstallIndicatorStatusPath);
+    QSignalSpy indicatorStatusSpy(subscriber, SIGNAL(contentsChanged()));
+
+    HbIndicator *indicator = new HbIndicator();
+    QVERIFY(indicator != 0);
+    QVERIFY(indicator->error() == 0);
+
+    QVERIFY(indicator->activate(KSifUiInstallIndicatorType));
+    QTest::qWait(3000);
+    QCOMPARE(indicatorStatusSpy.count(), 1);
+    QVERIFY(indicator->deactivate(KSifUiInstallIndicatorType));
+    delete indicator;
+
+    QCOMPARE(indicatorStatusSpy.count(), 2);
+    delete subscriber;
+}
+
+// ---------------------------------------------------------------------------
+// TestSifUiInstallIndicator::activateWithAppName()
+// ---------------------------------------------------------------------------
+//
+void TestSifUiInstallIndicator::activateWithAppName()
+{
+    HbIndicator *indicator = new HbIndicator();
+    QVERIFY(indicator != 0);
+    QVERIFY(indicator->error() == 0);
+
+    QValueSpaceSubscriber *subscriber = 0;
+    subscriber = new QValueSpaceSubscriber(KSifUiInstallIndicatorStatusPath);
+    QSignalSpy indicatorStatusSpy(subscriber, SIGNAL(contentsChanged()));
+
+    QVariant params(QString("Test application"));
+    QVERIFY(indicator->activate(KSifUiInstallIndicatorType, params));
+    QTest::qWait(3000);
+    QCOMPARE(indicatorStatusSpy.count(), 1);
+    QVERIFY(indicator->deactivate(KSifUiInstallIndicatorType));
+    delete indicator;
+
+    QCOMPARE(indicatorStatusSpy.count(), 2);
+    delete subscriber;
+}
+
+// ---------------------------------------------------------------------------
+// TestSifUiInstallIndicator::activateWithInvalidParam()
+// ---------------------------------------------------------------------------
+//
+void TestSifUiInstallIndicator::activateWithInvalidParam()
+{
+    QValueSpaceSubscriber *subscriber = 0;
+    subscriber = new QValueSpaceSubscriber(KSifUiInstallIndicatorStatusPath);
+    QSignalSpy indicatorStatusSpy(subscriber, SIGNAL(contentsChanged()));
+
+    HbIndicator *indicator = new HbIndicator();
+    QVERIFY(indicator != 0);
+    QVERIFY(indicator->error() == 0);
+
+    QVariant params(QByteArray("test"));
+    QVERIFY(indicator->activate(KSifUiInstallIndicatorType, params));
+    QTest::qWait(3000);
+    QCOMPARE(indicatorStatusSpy.count(), 1);
+    QVERIFY(indicator->deactivate(KSifUiInstallIndicatorType));
+    delete indicator;
+
+    QCOMPARE(indicatorStatusSpy.count(), 2);
+    delete subscriber;
+}
+
+// ---------------------------------------------------------------------------
+// Main QTestLib definitions
+// ---------------------------------------------------------------------------
+//
+QTEST_MAIN(TestSifUiInstallIndicator)
+#include "moc_mt_sifuiinstallindicator.cpp"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/mt_sifuiinstallindicator.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Module tests for SW install progress indicator.
+*
+*/
+
+
+#ifndef MT_SIFUIINSTALLINDICATOR_H
+#define MT_SIFUIINSTALLINDICATOR_H
+
+#include <QtTest/QtTest>
+
+class TestSifUiInstallIndicator: public QObject
+{
+    Q_OBJECT
+
+private slots:  // test functions
+    void activateWithoutParams();
+    void activateWithAppName();
+    void activateWithInvalidParam();
+};
+
+#endif  // MT_SIFUIINSTALLINDICATOR_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/mt_sifuiinstallindicator.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,30 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description:  Module tests for SW install progress indicator.
+#
+
+TEMPLATE = app
+TARGET =
+CONFIG += qtestlib hb
+DEPENDPATH += .
+INCLUDEPATH += . ../../inc
+LIBS += -lQtPublishSubscribe
+
+HEADERS += mt_sifuiinstallindicator.h
+SOURCES += mt_sifuiinstallindicator.cpp
+
+symbian {
+    TARGET.CAPABILITY = CAP_APPLICATION
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/run_module_tests.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SW install progress indicator.
+rem
+
+pushd mt_sifuiinstallindicator
+call ctc_instrument_code.bat
+call ctc_compile_tests.bat
+call ctc_run_tests.bat
+call ctc_remove_instrumentation.bat
+popd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test application for SW install indicator plugin
+*
+*/
+
+#include "testindiapp.h"
+#include <hbmainwindow.h>
+#include <hbview.h>
+#include <QGraphicsLinearLayout>
+#include <hbtextitem.h>
+#include <hbpushbutton.h>
+#include <hbindicator.h>
+#include <hbmessagebox.h>
+#include <qvaluespacesubscriber.h>
+#include "../../inc/sifuiinstallindicatorparams.h"
+
+
+TestInstallIndicator::TestInstallIndicator(int& argc, char* argv[]) : HbApplication(argc, argv),
+    mMainWindow(0), mMainView(0), mIndicator(0), mSubscriber(0)
+{
+    mMainWindow = new HbMainWindow();
+    mMainView = new HbView();
+    mMainView->setTitle(tr("TestInstIndi"));
+
+    mIndicator = new HbIndicator;
+
+    mSubscriber = new QTM_PREPEND_NAMESPACE(QValueSpaceSubscriber(KSifUiInstallIndicatorStatusPath));
+    connect(mSubscriber, SIGNAL(contentsChanged()), this, SLOT(handleIndicatorActivity()));
+
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    HbTextItem *infoText = new HbTextItem;
+    infoText->setText("Activate/deactivate SW install indicator in universal indicator popup.");
+    infoText->setTextWrapping(Hb::TextWordWrap);
+    layout->addItem(infoText);
+
+    HbPushButton *activateButton = new HbPushButton("Activate install indicator");
+    connect(activateButton, SIGNAL(clicked()), this, SLOT(activatePressed()));
+    layout->addItem(activateButton);
+
+    HbPushButton *deactivateButton = new HbPushButton("Deactivate install indicator");
+    connect(deactivateButton, SIGNAL(clicked()), this, SLOT(deactivatePressed()));
+    layout->addItem(deactivateButton);
+
+    HbPushButton *closeButton = new HbPushButton("Close");
+    connect(closeButton, SIGNAL(clicked()), qApp, SLOT(quit()));
+    layout->addItem(closeButton);
+
+    mMainView->setLayout(layout);
+    mMainWindow->addView(mMainView);
+    mMainWindow->show();
+}
+
+TestInstallIndicator::~TestInstallIndicator()
+{
+    delete mSubscriber;
+    delete mIndicator;
+    delete mMainView;
+    delete mMainWindow;
+}
+
+bool TestInstallIndicator::isIndicatorActive()
+{
+    bool isActive = false;
+    if (mSubscriber) {
+        QVariant variant = mSubscriber->value();
+        bool valueOk = false;
+        int intValue = variant.toInt(&valueOk);
+        if (valueOk && intValue) {
+            isActive = true;
+        }
+    }
+    return isActive;
+}
+
+void TestInstallIndicator::handleIndicatorActivity()
+{
+    if (isIndicatorActive()) {
+        HbMessageBox::information("Indicator activated");
+    } else {
+        HbMessageBox::information("Indicator deactivated");
+    }
+}
+
+void TestInstallIndicator::activatePressed()
+{
+    if (mIndicator) {
+        if (isIndicatorActive()) {
+            HbMessageBox::information("Already active");
+        } else {
+            QVariant parameter(QString("Application"));
+            mIndicator->activate(KSifUiInstallIndicatorType, parameter);
+        }
+    }
+}
+
+void TestInstallIndicator::deactivatePressed()
+{
+    if (mIndicator) {
+        if (isIndicatorActive()) {
+            mIndicator->deactivate(KSifUiInstallIndicatorType);
+        } else {
+            HbMessageBox::information("Already deactive");
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test application for SW install indicator plugin
+*
+*/
+
+#ifndef TESTINDICAPPLICATION_H
+#define TESTINDICAPPLICATION_H
+
+#include <hbapplication.h>
+#include <qmobilityglobal.h>            // QTM namespace macros
+
+class HbMainWindow;
+class HbView;
+class HbIndicator;
+
+QTM_BEGIN_NAMESPACE
+class QValueSpaceSubscriber;
+QTM_END_NAMESPACE
+
+
+class TestInstallIndicator : public HbApplication
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    TestInstallIndicator(int& argc, char* argv[]);
+    ~TestInstallIndicator();
+    bool isIndicatorActive();
+
+private slots:  // new functions
+    void handleIndicatorActivity();
+    void activatePressed();
+    void deactivatePressed();
+
+private:    // data
+    HbMainWindow *mMainWindow;
+    HbView       *mMainView;
+    HbIndicator  *mIndicator;
+    QTM_PREPEND_NAMESPACE(QValueSpaceSubscriber) *mSubscriber;
+};
+
+#endif  // TESTINDICAPPLICATION_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,30 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description:  Test application for SW install indicator plugin
+#
+
+TEMPLATE = app
+TARGET = testindiapp
+CONFIG += hb
+DEPENDPATH += .
+INCLUDEPATH += .
+LIBS += -lQtPublishSubscribe
+
+HEADERS += testindiapp.h
+SOURCES += testindimain.cpp testindiapp.cpp
+
+symbian {
+    TARGET.CAPABILITY = CAP_APPLICATION
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindimain.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test application for SW install indicator plugin
+*
+*/
+
+#include "testindiapp.h"
+
+int main(int argc, char *argv[])
+{
+    TestInstallIndicator app(argc, argv);
+    return app.exec();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/tsrc.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description:  Module tests for SW install progress indicator.
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += mt_sifuiinstallindicator/mt_sifuiinstallindicator.pro \
+    testindiapp/testindiapp.pro
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/data/20022FC1.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ECOM resource definition for Sisx SIF plugin.
+*
+*/
+
+#include <ecom/registryinfov2.rh>
+#include <SWInstUid.h>
+
+
+RESOURCE REGISTRY_INFO registry_info
+    {
+    resource_format_version = RESOURCE_FORMAT_VERSION_2;
+    dll_uid = 0x20022FC1;
+
+    interfaces =
+        {
+         INTERFACE_INFO
+             {
+             interface_uid = 0x10285BC2;
+             implementations =
+                 {
+                 IMPLEMENTATION_INFO
+                     {
+                     implementation_uid  =  0x20022EE3;
+                     version_no          =  1;
+                     display_name        =  "Sisx SIF plugin";
+                     default_data        =  "";
+                     opaque_data         =  "";
+                     }
+                 };
+              }
+        };
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Build information file for SISX SIF Plugin
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../rom/sisxsifplugin.iby    CORE_MW_LAYER_IBY_EXPORT_PATH( sisxsifplugin.iby )
+
+PRJ_MMPFILES
+sisxsifplugin.mmp
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/group/sisxsifplugin.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Native SISX SIF (Software Install Framework) plugin.
+*
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+TARGET          sisxsifplugin.dll
+TARGETTYPE      PLUGIN
+UID             0x10009D8D 0x20022FC1
+
+CAPABILITY      CAP_ECOM_PLUGIN
+VENDORID        VID_DEFAULT
+
+START RESOURCE  ../data/20022FC1.rss
+TARGET          sisxsifplugin.rsc
+END
+
+SOURCEPATH      ../src
+SOURCE          sisxsifpluginmain.cpp
+SOURCE          sisxsifplugin.cpp
+SOURCE          sisxsifpluginactiveimpl.cpp
+SOURCE          sisxsifpluginuihandlerbase.cpp
+SOURCE          sisxsifpluginuihandler.cpp
+SOURCE          sisxsifpluginuihandlersilent.cpp
+SOURCE          sisxsifplugininstallparams.cpp
+SOURCE          sisxsifpluginerrorhandler.cpp
+SOURCE          sisxsifuiselectioncache.cpp
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../../../installationservices/swi/inc
+USERINCLUDE     ../../../../installationservices/swi/inc/swi
+MW_LAYER_SYSTEMINCLUDE
+
+LIBRARY         euser.lib               // User
+LIBRARY         ecom.lib                // ECom
+LIBRARY         sif.lib                 // USIF
+LIBRARY         sifnotification.lib     // Usif::CPublishSifOperationInfo
+LIBRARY         scrclient.lib           // SCR
+LIBRARY         sifui.lib               // CSifUi
+LIBRARY         sisregistryclient.lib   // Swi::RSisRegistrySession
+LIBRARY         sishelper.lib           // Swi::CAsyncLauncher
+LIBRARY         bafl.lib                // TResourceReader
+LIBRARY         efsrv.lib               // RFs
+LIBRARY         PlatformEnv.lib         // TDriveInfo
+LIBRARY         featmgr.lib             // FeatureManager
+LIBRARY         pkixcertbase.lib        // CPKIXValidationResultBase
+LIBRARY         x509.lib                // TValidationStatus
+LIBRARY         centralrepository.lib   // CRepository
+LIBRARY         HbWidgets.lib           // CHbDeviceMessageBoxSymbian
+LIBRARY         syslangutil.lib         // GetInstalledLanguages
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifcleanuputils.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Defines CleanupResetAndDestroyPushL
+*
+*/
+
+
+#ifndef SISXUICLEANUPUTILS_H
+#define SISXUICLEANUPUTILS_H
+
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL( T& aRef );
+private:
+    static void ResetAndDestroy( TAny *aPtr );
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef );
+
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL( T& aRef )
+    {
+    CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) );
+    }
+
+template <class T>
+void CleanupResetAndDestroy<T>::ResetAndDestroy( TAny *aPtr )
+    {
+    if( aPtr )
+        {
+        static_cast<T*>( aPtr )->ResetAndDestroy();
+        }
+    }
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef )
+    {
+    CleanupResetAndDestroy<T>::PushL( aRef );
+    }
+
+#endif // SISXUICLEANUPUTILS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifplugin.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Header file of the CSisxSifPlugin class. CSisxSifPlugin
+*               implements ECom SIF::CSifPlugin interface for native
+*               SISX installation.
+*
+*/
+
+#ifndef C_SISXSIFPLUGIN_H
+#define C_SISXSIFPLUGIN_H
+
+#include <usif/sif/sifplugin.h>     // CSifPlugin
+
+namespace Usif
+{
+    class CSisxSifPluginActiveImpl;
+
+
+    /**
+     *  SISX SIF plugin
+     *  Universal Software Install Framework (USIF) plugin for native SISX
+     *  installation. CSisxSifPlugin is an ECom plugin that provides native
+     *  SISX install/uninstall functionality for USIF.
+     */
+    class CSisxSifPlugin : public CSifPlugin
+        {
+    public:     // constructors and destructor
+        static CSisxSifPlugin* NewL();
+        ~CSisxSifPlugin();
+
+    public:     // from CSifPlugin
+        void GetComponentInfo( const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+                CComponentInfo& aComponentInfo, TRequestStatus& aStatus );
+        void GetComponentInfo( RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+                CComponentInfo& aComponentInfo, TRequestStatus& aStatus );
+        void Install( const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+                const COpaqueNamedParams& aArguments, COpaqueNamedParams& aResults,
+                TRequestStatus& aStatus );
+        void Install( RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+                const COpaqueNamedParams& aArguments, COpaqueNamedParams& aResults,
+                TRequestStatus& aStatus );
+        void Uninstall( TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+                const COpaqueNamedParams& aArguments, COpaqueNamedParams& aResults,
+                TRequestStatus& aStatus );
+        void Activate( TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+                TRequestStatus& aStatus );
+        void Deactivate( TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+                TRequestStatus& aStatus );
+        void CancelOperation();
+
+    private:    // new functions
+        CSisxSifPlugin();
+        void ConstructL();
+
+    private:    // data
+        CSisxSifPluginActiveImpl* iImpl;
+        };
+}
+
+#endif      // C_SISXSIFPLUGIN_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifplugin.pan	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  SISX SIF plugin panic codes
+*
+*/
+
+
+#ifndef SISXSIFPLUGIN_PAN
+#define SISXSIFPLUGIN_PAN
+
+#include <e32std.h>     // User
+
+/**
+ * Native SISX SIF (Software Install Framework) plugin panic codes
+ */
+enum TSisxSifPanicCode
+    {
+    ESisxSifInternalError = 1,
+    ESisxSifNotInitialized,
+    ESisxSifNullPointer,
+    ESisxSifUnknownErrorCode
+    };
+
+inline void Panic( TSisxSifPanicCode aReason )
+    {
+    _LIT( category, "SisxSif" );
+    User::Panic( category, aReason );
+    }
+
+#endif // SISXSIFPLUGIN_PAN
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginactiveimpl.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,148 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CSisxSifPluginActiveImpl implements active object that
+*               handles installation operations requested via
+*               CSisxSifPlugin interface.
+*
+*/
+
+#ifndef C_SISXSIFPLUGINIMPL_H
+#define C_SISXSIFPLUGINIMPL_H
+
+#include <e32base.h>                    // CActive
+#include <swi/msisuihandlers.h>         // MUiHandler
+#include <usif/sif/sifcommon.h>         // TSecurityContext, COpaqueNamedParams
+#include <usif/usiferror.h>             // TErrorCategory
+#include <f32file.h>                    // RFs, RFile
+#include <barsc.h>                      // RResourceFile
+
+namespace Swi
+{
+    class CAsyncLauncher;
+    class CInstallPrefs;
+}
+
+namespace Usif
+{
+    class CComponentEntry;
+    class CSisxSifPluginUiHandlerBase;
+    class CSisxSifPluginInstallParams;
+    class CSisxSifPluginErrorHandler;
+    
+    /**
+     *  SISX SIF plugin active implementation
+     *  Universal Software Install Framework (USIF) plugin for native SISX
+     *  installation. CSisxSifPluginActiveImpl is active object that takes
+     *  care of SISX installation operations.
+     */
+    class CSisxSifPluginActiveImpl : public CActive
+        {
+    public:     // constructors and destructor
+        static CSisxSifPluginActiveImpl* NewL();
+        ~CSisxSifPluginActiveImpl();
+
+    public:     // from CActive
+        void DoCancel();
+        void RunL();
+        TInt RunError( TInt aError );
+
+    public:     // new functions
+        void GetComponentInfo( const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+                CComponentInfo& aComponentInfo, TRequestStatus& aStatus );
+        void GetComponentInfo( RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+                CComponentInfo& aComponentInfo, TRequestStatus& aStatus );
+        void Install( const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+                const COpaqueNamedParams& aArguments, COpaqueNamedParams& aResults,
+                TRequestStatus& aStatus );
+        void Install( RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+                const COpaqueNamedParams& aArguments, COpaqueNamedParams& aResults,
+                TRequestStatus& aStatus );
+        void Uninstall( TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+                const COpaqueNamedParams& aArguments, COpaqueNamedParams& aResults,
+                TRequestStatus& aStatus );
+        void Activate( TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+                TRequestStatus& aStatus );
+        void Deactivate( TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+                TRequestStatus& aStatus );
+
+    private:    // new functions
+        CSisxSifPluginActiveImpl();
+        void ConstructL();
+        void CommonRequestPreambleL( TRequestStatus& aStatus );
+        void CommonRequestPreambleL( const COpaqueNamedParams& aInputParams,
+                COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus );
+        void CompleteSelf( TInt aResult );
+        void CreateUiHandlerL();
+        TBool IsSilentMode();
+        void CompleteClientRequest( TInt aResult );
+        void DoGetComponentInfoL( CComponentInfo& aComponentInfo, TRequestStatus& aStatus );
+        void DoInstallL( const TSecurityContext& aSecurityContext,
+        		const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+        		TRequestStatus& aStatus );
+        void DoUninstallL( TComponentId aComponentId, const COpaqueNamedParams& aInputParams,
+            COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus );
+        void DoActivateL( TComponentId aComponentId, TRequestStatus& aStatus );
+        void DoDeactivateL( TComponentId aComponentId, TRequestStatus& aStatus );
+        void DoHandleErrorL( TInt aError );
+        void SetFileL( const TDesC& aFileName );
+        void SetFile( RFile& aFileHandle );
+        TComponentId GetLastInstalledComponentIdL();
+        void GetComponentAndUidL( TComponentId aComponentId, CComponentEntry& aEntry, TUid& aUid ) const;
+        TBool RequiresUserCapabilityL( const CComponentInfo::CNode& aRootNode );
+        void SetInstallPrefsRevocationServerUriL( const TDesC& aUri );
+        void UpdateInstallPrefsForPerformingOcspL();
+        void StartInstallingL();
+        void StartSilentInstallingL();
+        void StartSilentUninstallingL();
+        void FinalizeInstallationL();
+        void UpdateStartupListL();
+        void FillDeviceSupportedLanguagesL();
+
+    private:    // data
+        RFs iFs;
+        Swi::CAsyncLauncher* iAsyncLauncher;
+        CSisxSifPluginUiHandlerBase* iUiHandler;
+        Swi::CInstallPrefs* iInstallPrefs;
+        TRequestStatus* iClientStatus;
+        const COpaqueNamedParams* iInputParams;     // not owned
+        COpaqueNamedParams* iOutputParams;      // not owned
+        CSisxSifPluginInstallParams* iInstallParams;
+        CSisxSifPluginErrorHandler* iErrorHandler;
+        CComponentInfo* iComponentInfo;
+        TBool iHasAllFilesCapability;
+        HBufC* iFileName;
+        RFile* iFileHandle;             // not owned
+        enum TOperationType
+            {
+            ENoOperation,
+            EGetComponentInfo,
+            EInstall,
+            EUninstall,
+            EActivate,
+            EDeactivate
+            } iOperation;
+        enum TPhase
+            {
+            ENotActive,
+            EPreprocessing,
+            ERunningOperation,
+            EPostprocessing
+            } iPhase;
+        RArray<TInt> iDeviceSupportedLanguages;
+        };
+
+}   // namespace Usif
+
+#endif      // C_SISXSIFPLUGINIMPL_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginerrorhandler.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CSisxSifPluginErrorHandler collects information
+*               about errors. Error details are then passed to
+*               framework (USIF).
+*
+*/
+
+#ifndef C_SISXSIFPLUGINERRORHANDLER_H
+#define C_SISXSIFPLUGINERRORHANDLER_H
+
+#include <e32base.h>                    // CBase
+#include <usif/usiferror.h>             // TErrorCategory
+
+namespace Usif
+{
+    class COpaqueNamedParams;
+
+
+    /**
+     *  Native SISX installation error class.
+     */
+    class CSisxSifPluginErrorHandler : public CBase
+        {
+        public:     // constructor and destructor
+            static CSisxSifPluginErrorHandler* NewL();
+            ~CSisxSifPluginErrorHandler();
+
+        public:     // new functions
+            TErrorCategory  ErrorCategory() const;
+            void FillOutputParamsL( COpaqueNamedParams& aOutputParams ) const;
+
+            TInt ErrorCode() const;
+            void SetErrorCode( TInt aErrorCode );
+            TInt ExtendedErrorCode() const;
+            void SetExtendedErrorCode( TInt aExtendedErrorCode );
+            const TDesC& ErrorMessage() const;
+            void SetErrorMessage( const TDesC& aErrorMessage );
+            const TDesC& ErrorMessageDetails() const;
+            void SetErrorMessageDetails( const TDesC& aErrorMessageDetails );
+
+        private:    // new functions
+            CSisxSifPluginErrorHandler();
+            void ConstructL();
+
+        private:    // data
+            TInt iErrorCode;
+            TInt iExtendedErrorCode;
+            HBufC* iErrorMessage;
+            HBufC* iErrorMessageDetails;
+        };
+
+}   // namespace Usif
+
+#endif // C_SISXSIFPLUGINERRORHANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginerrors.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Detailed error codes for KErrPermissionDenined errors.
+*
+*/
+
+#ifndef SISXSIFPLUGINERRORS_H
+#define SISXSIFPLUGINERRORS_H
+
+enum TSisxSifPluginErrors
+    {
+    ESifUiTrustedUICapabilityRequired = 1,      // TrustedUI capability required.
+    ESifUIAllFilesCapabilityRequired = 2,       // AllFiles capability required.
+    ESifUiNeedsAllowUntrustedParameter = 3,     // Cannot install untrusted package without AllowUntrusted parameter.
+    ESifUiNeedsPackageInfoParameter = 4,        // Cannot install package displaying infos without PackageInfo parameter.
+    ESifUiNeedsAllowAppBreakDependencyParameter = 5, // Uninstall breaks dependencies. Cannot uninstall without AllowAppBreakDependency parameter.
+    ESifUiNeedsAllowAppShutdownParameter = 6,   // Application is running. Cannot uninstall without AllowAppShutdown parameter.
+    ESifUiNeedsAllowIncompatibleParameter = 7,  // Cannot install incompatible package without AllowIncompatible parameter.
+    ESifUiNeedsAllowOverwriteParameter = 8,     // Cannot overwrite existing file which is not part of any package without AllowOverwrite parameter.
+    ESifUiNeedsGrantCapabilitiesParameter = 9,  // Cannot install package requesting user capabilities without GrantCapabilities parameter.
+    ESifUiCannotOverwriteFile = 99              // Cannot overwrite file
+    };
+
+#endif // SISXSIFPLUGINERRORS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifplugininstallparams.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Installation parameters class.
+*
+*/
+
+#ifndef C_SISXSIFPLUGININSTALLPARAMS_H
+#define C_SISXSIFPLUGININSTALLPARAMS_H
+
+#include <e32base.h>                    // CBase
+#include <usif/sif/sifcommon.h>         // COpaqueNamedParams, TSifPolicy
+
+namespace Usif
+{
+    /**
+     *  Installation parameters class.
+     */
+    class CSisxSifPluginInstallParams : public CBase
+        {
+    public:     // constructors and destructor
+        static CSisxSifPluginInstallParams* NewL( const COpaqueNamedParams& aParams );
+        static CSisxSifPluginInstallParams* NewL( const CSisxSifPluginInstallParams& aParams );
+        ~CSisxSifPluginInstallParams();
+
+    public:     // new functions
+        TBool IsSilentMode() const;
+        TBool IsInstallInactive() const;
+        TUint Drive() const;
+        TLanguage Language() const;
+        const TDesC& OCSPUrl() const;
+        TSifPolicy PerformOCSP() const;
+        TSifPolicy IgnoreOCSPWarnings() const;
+        TSifPolicy AllowUpgrade() const;
+        TSifPolicy InstallOptionalItems() const;
+        TSifPolicy AllowUntrusted() const;
+        TSifPolicy GrantCapabilities() const;
+        TSifPolicy AllowAppShutdown() const;
+        TSifPolicy AllowAppBreakDependency() const;
+        TSifPolicy AllowOverwrite() const;
+        TSifPolicy PackageInfo() const;
+        TSifPolicy AllowIncompatible() const;
+
+    private:    // new functions
+        CSisxSifPluginInstallParams();
+        void ConstructL( const COpaqueNamedParams& aParams );
+        void ConstructL( const CSisxSifPluginInstallParams& aParams );
+        TInt GetIntParam( const COpaqueNamedParams& aParams, const TDesC& aParamName,
+        		TInt aDefaultValue );
+        void GetPolicyParam( const COpaqueNamedParams& aParams, const TDesC& aParamName,
+                TSifPolicy& aPolicy, const TSifPolicy& aDefault );
+        void GetStringParamL( const COpaqueNamedParams& aParams, const TDesC& aParamName,
+        		HBufC*& aBuf );
+
+    private:    // data
+        TBool iUseSilentMode;
+        TBool iIsInstallInactive;
+        TUint iDrive;
+        TLanguage iLanguage;
+        HBufC* iOCSPUrl;
+        TSifPolicy iPerformOCSP;
+        TSifPolicy iIgnoreOCSPWarnings;
+        TSifPolicy iAllowUpgrade;
+        TSifPolicy iInstallOptionalItems;
+        TSifPolicy iAllowUntrusted;
+        TSifPolicy iGrantCapabilities;
+        TSifPolicy iAllowAppShutdown;
+        TSifPolicy iAllowAppBreakDependency;
+        TSifPolicy iAllowOverwrite;
+        TSifPolicy iPackageInfo;
+        TSifPolicy iAllowIncompatible;
+        };
+
+}   // namespace Usif
+
+#endif  // C_SISXSIFPLUGININSTALLPARAMS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginuihandler.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  UI Handler for normal (non-silent) install/uninstall operations.
+*
+*/
+
+#ifndef C_SISXSIFPLUGUIHANDLER_H
+#define C_SISXSIFPLUGUIHANDLER_H
+
+#include <e32base.h>                    // CBase
+#include "sisxsifpluginuihandlerbase.h" // CSisxSifPluginUiHandlerBase
+
+class CSifUi;
+class CSifUiAppInfo;
+class CSisxSifUiSelectionCache;
+enum CSifUi::TInstallingPhase;
+
+
+namespace Usif
+{
+    /**
+     * UI Handler for normal (non-silent) install/uninstall operations.
+     */
+    class CSisxSifPluginUiHandler : public CSisxSifPluginUiHandlerBase
+        {
+    public:     // constructors and destructor
+        static CSisxSifPluginUiHandler* NewL( RFs& aFs,
+                CSisxSifPluginErrorHandler& aErrorHandler );
+        ~CSisxSifPluginUiHandler();
+
+    public:     // from MUiHandler (via CSisxSifPluginUiHandlerBase)
+        // from MCommonDialogs
+        TBool DisplayTextL( const Swi::CAppInfo& aAppInfo, Swi::TFileTextOption aOption,
+                const TDesC& aText );
+        void DisplayErrorL( const Swi::CAppInfo& aAppInfo, Swi::TErrorDialog aType,
+                const TDesC& aParam );
+        TBool DisplayDependencyBreakL( const Swi::CAppInfo& aAppInfo,
+                const RPointerArray<TDesC>& aComponents );
+        TBool DisplayApplicationsInUseL( const Swi::CAppInfo& aAppInfo,
+                const RPointerArray<TDesC>& aAppNames );
+        TBool DisplayQuestionL( const Swi::CAppInfo& aAppInfo, Swi::TQuestionDialog aQuestion,
+                const TDesC& aDes );
+
+        // from MInstallerUiHandler
+        TBool DisplayInstallL( const Swi::CAppInfo& aAppInfo, const CApaMaskedBitmap* aLogo,
+                const RPointerArray<Swi::CCertificateInfo>& aCertificates );
+        TBool DisplayGrantCapabilitiesL( const Swi::CAppInfo& aAppInfo,
+                const TCapabilitySet& aCapabilitySet );
+        TInt DisplayLanguageL( const Swi::CAppInfo& aAppInfo,
+                const RArray<TLanguage>& aLanguages );
+        TInt DisplayDriveL( const Swi::CAppInfo& aAppInfo, TInt64 aSize,
+                const RArray<TChar>& aDriveLetters, const RArray<TInt64>& aDriveSpaces );
+        TBool DisplayUpgradeL( const Swi::CAppInfo& aAppInfo,
+                const Swi::CAppInfo& aExistingAppInfo );
+        TBool DisplayOptionsL( const Swi::CAppInfo& aAppInfo,
+                const RPointerArray<TDesC>& aOptions, RArray<TBool>& aSelections );
+        TBool HandleInstallEventL( const Swi::CAppInfo& aAppInfo, Swi::TInstallEvent aEvent,
+                TInt aValue, const TDesC& aDes );
+        void HandleCancellableInstallEventL( const Swi::CAppInfo& aAppInfo,
+                Swi::TInstallCancellableEvent aEvent, Swi::MCancelHandler& aCancelHandler,
+                TInt aValue, const TDesC& aDes );
+        TBool DisplaySecurityWarningL( const Swi::CAppInfo& aAppInfo,
+                Swi::TSignatureValidationResult aSigValidationResult,
+                RPointerArray<CPKIXValidationResultBase>& aPkixResults,
+                RPointerArray<Swi::CCertificateInfo>& aCertificates, TBool aInstallAnyway );
+        TBool DisplayOcspResultL( const Swi::CAppInfo& aAppInfo,
+                Swi::TRevocationDialogMessage aMessage,
+                RPointerArray<TOCSPOutcome>& aOutcomes,
+                RPointerArray<Swi::CCertificateInfo>& aCertificates, TBool aWarningOnly );
+        void DisplayCannotOverwriteFileL( const Swi::CAppInfo& aAppInfo,
+                const Swi::CAppInfo& aInstalledAppInfo, const TDesC& aFileName );
+        TBool DisplayMissingDependencyL( const Swi::CAppInfo& aAppInfo,
+                const TDesC& aDependencyName, TVersion aWantedVersionFrom,
+                TVersion aWantedVersionTo, TVersion aInstalledVersion );
+
+        // from MUninstallerUiHandler
+        TBool DisplayUninstallL( const Swi::CAppInfo& aAppInfo );
+
+    public:     // from CSisxSifPluginUiHandlerBase
+        void DisplayPreparingInstallL( const TDesC& aFileName );
+        void DisplayCompleteL();
+        void DisplayFailedL( const CSisxSifPluginErrorHandler& aError );
+
+    public:     // new functions
+        void SetDriveSelectionRequired( TBool aIsRequired );
+
+    private:    // new functions
+        CSisxSifPluginUiHandler( RFs& aFs, CSisxSifPluginErrorHandler& aErrorHandler );
+        void ConstructL();
+        void AddMemorySelectionL();
+        void AddCertificatesL( RPointerArray<Swi::CCertificateInfo>& aCertificates,
+                RPointerArray<CPKIXValidationResultBase>& aPkixResults );
+        CSifUiAppInfo* GetAppInfoLC( const Swi::CAppInfo& aAppInfo );
+        void ShowProgressL( const Swi::CAppInfo& aAppInfo, TInt aProgressBarFinalValue,
+                CSifUi::TInstallingPhase aPhase );
+        TBool ShowConfirmationL( const Swi::CAppInfo& aAppInfo );
+
+    private:    // data
+        CSifUi* iSifUi;
+        CSisxSifUiSelectionCache* iSelectionCache;
+        CApaMaskedBitmap* iLogo;
+        TBool iQuestionIncompatibleDisplayed;
+        RArray<TInt> iSelectableDrives;
+        };
+
+}   // namespace Usif
+
+#endif      // C_SISXSIFPLUGUIHANDLER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginuihandlerbase.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Base class for SISX SIF plugin UI handlers.
+*
+*/
+
+#ifndef C_SISXSIFPLUGUIHANDLERBASE_H
+#define C_SISXSIFPLUGUIHANDLERBASE_H
+
+#include <e32base.h>                    // CBase
+#include <swi/msisuihandlers.h>         // MUiHandler
+#include <f32file.h>                    // RFs
+#include <sifui.h>                      // CSifUi
+#include <usif/sif/sifcommon.h>         // CComponentInfo::CNode
+#include <usif/sif/sifnotification.h>   // TSifOperationSubPhase, TErrorCategory
+
+
+namespace Usif
+{
+    class CComponentEntry;
+    class CSisxSifPluginInstallParams;
+    class CSisxSifPluginErrorHandler;
+
+
+    /**
+     * Base class for SISX SIF plugin UI handlers.
+     */
+    class CSisxSifPluginUiHandlerBase : public CBase, public Swi::MUiHandler
+        {
+    public:     // constructors and destructor
+        CSisxSifPluginUiHandlerBase( RFs& aFs, CSisxSifPluginErrorHandler& aErrorHandler );
+        ~CSisxSifPluginUiHandlerBase();
+
+    public:     // new functions
+        virtual void DisplayPreparingInstallL( const TDesC& aFileName ) = 0;
+        virtual void DisplayCompleteL() = 0;
+        virtual void DisplayFailedL( const CSisxSifPluginErrorHandler& aError ) = 0;
+
+    public:     // new functions
+        void SetInstallParamsL( const CSisxSifPluginInstallParams& aInstallParams );
+        void SetMaxInstalledSize( TInt aSize );
+        void SetDriveSelectionRequired( TBool aIsRequired );
+        TBool IsOcspMandatoryL() const;
+
+        // functions to publish operation progress
+        void PublishStartL( const CComponentInfo::CNode& aRootNode );
+        void PublishStartL( const CComponentEntry& aEntry );
+        void PublishProgressL( TSifOperationSubPhase aSubPhase );
+        void PublishCompletionL();
+
+    protected:  // new functions
+        void SetErrorL( TInt aErrorCode, TInt aExtErrorCode );
+        void SetErrorL( TInt aErrorCode, TInt aExtErrorCode, const TDesC& aErrMsgDetails );
+        void SetErrorSwiErrorL( Swi::TErrorDialog aType, const TDesC& aParam );
+        void SetOcspErrorL( Swi::TRevocationDialogMessage aMessage );
+        TBool ShowQuestionL( const TDesC& aText ) const;
+        void ShowQuestionWithContinueL( const TDesC& aText ) const;
+
+    protected:	// data
+        RFs& iFs;
+        CSisxSifPluginErrorHandler& iErrorHandler;
+        TInt iMaxInstalledSize;
+        TBool iIsDriveSelectionRequired;
+        CSisxSifPluginInstallParams* iInstallParams;
+
+        // members for publishing operation progress
+        CPublishSifOperationInfo* iPublishSifOperationInfo;
+        TSifOperationPhase iOperationPhase;
+        HBufC* iGlobalComponentId;
+        TInt iProgressBarCurrentValue;
+        TInt iProgressBarFinalValue;
+        };
+
+}   // namespace Usif
+
+#endif      // C_SISXSIFPLUGUIHANDLERBASE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginuihandlersilent.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  UI Handler for silent install/uninstall operations.
+*
+*/
+
+#ifndef C_SISXSIFPLUGUIHANDLERSILENT_H
+#define C_SISXSIFPLUGUIHANDLERSILENT_H
+
+#include <e32base.h>                    // CBase
+#include "sisxsifpluginuihandlerbase.h" // CSisxSifPluginUiHandlerBase
+
+
+namespace Usif
+{
+    /**
+     * UI handler for silent install/uninstall operations.
+     */
+    class CSisxSifPluginUiHandlerSilent : public CSisxSifPluginUiHandlerBase
+        {
+    public:     // constructors and destructor
+        static CSisxSifPluginUiHandlerSilent* NewL( RFs& aFs,
+                CSisxSifPluginErrorHandler& aErrorHandler );
+        ~CSisxSifPluginUiHandlerSilent();
+
+    public:     // from MUiHandler (via CSisxSifPluginUiHandlerBase)
+        // from MCommonDialogs
+        TBool DisplayTextL( const Swi::CAppInfo& aAppInfo, Swi::TFileTextOption aOption,
+                const TDesC& aText );
+        void DisplayErrorL( const Swi::CAppInfo& aAppInfo, Swi::TErrorDialog aType,
+                const TDesC& aParam );
+        TBool DisplayDependencyBreakL( const Swi::CAppInfo& aAppInfo,
+                const RPointerArray<TDesC>& aComponents );
+        TBool DisplayApplicationsInUseL( const Swi::CAppInfo& aAppInfo,
+                const RPointerArray<TDesC>& aAppNames );
+        TBool DisplayQuestionL( const Swi::CAppInfo& aAppInfo, Swi::TQuestionDialog aQuestion,
+                const TDesC& aDes );
+
+        // from MInstallerUiHandler
+        TBool DisplayInstallL( const Swi::CAppInfo& aAppInfo, const CApaMaskedBitmap* aLogo,
+                const RPointerArray<Swi::CCertificateInfo>& aCertificates );
+        TBool DisplayGrantCapabilitiesL( const Swi::CAppInfo& aAppInfo,
+                const TCapabilitySet& aCapabilitySet );
+        TInt DisplayLanguageL( const Swi::CAppInfo& aAppInfo,
+                const RArray<TLanguage>& aLanguages );
+        TInt DisplayDriveL( const Swi::CAppInfo& aAppInfo, TInt64 aSize,
+                const RArray<TChar>& aDriveLetters, const RArray<TInt64>& aDriveSpaces );
+        TBool DisplayUpgradeL( const Swi::CAppInfo& aAppInfo,
+                const Swi::CAppInfo& aExistingAppInfo );
+        TBool DisplayOptionsL( const Swi::CAppInfo& aAppInfo,
+                const RPointerArray<TDesC>& aOptions, RArray<TBool>& aSelections );
+        TBool HandleInstallEventL( const Swi::CAppInfo& aAppInfo, Swi::TInstallEvent aEvent,
+                TInt aValue, const TDesC& aDes );
+        void HandleCancellableInstallEventL( const Swi::CAppInfo& aAppInfo,
+                Swi::TInstallCancellableEvent aEvent, Swi::MCancelHandler& aCancelHandler,
+                TInt aValue, const TDesC& aDes );
+        TBool DisplaySecurityWarningL( const Swi::CAppInfo& aAppInfo,
+                Swi::TSignatureValidationResult aSigValidationResult,
+                RPointerArray<CPKIXValidationResultBase>& aPkixResults,
+                RPointerArray<Swi::CCertificateInfo>& aCertificates, TBool aInstallAnyway );
+        TBool DisplayOcspResultL( const Swi::CAppInfo& aAppInfo,
+                Swi::TRevocationDialogMessage aMessage,
+                RPointerArray<TOCSPOutcome>& aOutcomes,
+                RPointerArray<Swi::CCertificateInfo>& aCertificates, TBool aWarningOnly );
+        void DisplayCannotOverwriteFileL( const Swi::CAppInfo& aAppInfo,
+                const Swi::CAppInfo& aInstalledAppInfo, const TDesC& aFileName );
+        TBool DisplayMissingDependencyL( const Swi::CAppInfo& aAppInfo,
+                const TDesC& aDependencyName, TVersion aWantedVersionFrom,
+                TVersion aWantedVersionTo, TVersion aInstalledVersion );
+
+        // from MUninstallerUiHandler
+        TBool DisplayUninstallL( const Swi::CAppInfo& aAppInfo );
+
+    public:     // from CSisxSifPluginUiHandlerBase
+        void DisplayPreparingInstallL( const TDesC& aFileName );
+        void DisplayCompleteL();
+        void DisplayFailedL( const CSisxSifPluginErrorHandler& aError );
+
+    protected:  // new functions
+        CSisxSifPluginUiHandlerSilent( RFs& aFs, CSisxSifPluginErrorHandler& aErrorHandler );
+
+    private:    // new functions
+        void ConstructL();
+
+    protected:  // data
+        };
+
+}   // namespace Usif
+
+#endif      // C_SISXSIFPLUGUIHANDLERSILENT_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifuiselectioncache.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   CSisxSifUiSelectionCache saves user selections during
+*                installation. Cached selections can be re-used, to avoid
+*                displaying the same dialogs again.
+*/
+
+#ifndef C_SISXSIFUISELECTIONCACHE_H
+#define C_SISXSIFUISELECTIONCACHE_H
+
+#include <e32base.h>
+#include <f32file.h>
+
+
+/**
+ * Saves user selections during installation. Installer may re-use
+ * cached selections in order to avoid displaying the same prompts
+ * several times.
+ */
+class CSisxSifUiSelectionCache : public CBase
+    {
+    public:     // constructor and destructor
+        static CSisxSifUiSelectionCache* NewL();
+        ~CSisxSifUiSelectionCache();
+
+    public:     // new functions
+        /**
+         * Returns ETrue if language selection is currently cached, and
+         * EFalse otherwise. Language selection can be cached by using
+         * SetLanguage() method.
+         * @return TBool -- ETrue if language is cached
+         */
+        TBool LanguageCached() const;
+        
+        /**
+         * Returns the language code saved earlier with SetLanguage() method.
+         * If no language has been set, then returns language code 0 (ELangTest).
+         * @return TLanguage -- the cached language, or ELangTest
+         */
+        TLanguage Language() const;
+        
+        /**
+        * Caches the given language code.
+        * @param aLanguage - language to be cached
+        */
+        void SetLanguage( const TLanguage& aLanguage );
+
+        /**
+        * Returns ETrue if drive selection is currently cacehed, and EFalse
+        * otherwise. Drive selection can be cached by using SetDrive() method.
+        * @return TBool -- ETrue if drive is cached
+        */
+        TBool DriveCached() const;
+        
+        /**
+        * Returns the drive saved earlier with SetDrive() method.
+        * @return TDriveUnit -- the cached drive
+        */
+        TDriveUnit Drive() const;
+        
+        /**
+        * Caches the given drive.
+        * @param aLanguage -- drive to be cached
+        */
+        void SetDrive( TDriveUnit aDrive );
+
+        /**
+        * Returns ETrue if all options in aOptions array are cached, and EFalse
+        * otherwise. Options can be cached using SetOptions() method.
+        * @param aOptions -- array of options names
+        * @return TBool -- ETrue if all aOptions are cached
+        */
+        TBool OptionsCached( const RPointerArray<TDesC>& aOptions ) const;
+
+        /**
+        * Returns the options saved earlier with SetOptions() method.
+        * @param aSelections -- the cached option selections
+        */
+        void Options( RArray<TBool>& aSelections );
+        
+        /**
+        * Caches the given options.
+        * @param aOptions -- array of options names
+        * @param aSelections -- array of option selections
+        */
+        void SetOptionsL( const RPointerArray<TDesC>& aOptions, const RArray<TBool>& aSelections );    
+        
+    private:    // new functions
+        CSisxSifUiSelectionCache();
+        void ConstructL();
+
+    private:    // data
+        TBool iLanguageCached;
+        TLanguage iLanguage;
+        TDriveUnit iDrive;        
+        RPointerArray<HBufC> iOptions;        
+        RArray<TBool> iSelections;       
+    };
+
+
+#endif      // C_SISXSIFUISELECTIONCACHE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/rom/sisxsifplugin.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ROM image files for native SISX SIF plugin.
+*
+*/
+
+#ifndef SISXSIFPLUGIN_IBY
+#define SISXSIFPLUGIN_IBY
+
+ECOM_PLUGIN( sisxsifplugin.dll, sisxsifplugin.rsc )
+
+#endif  // SISXSIFPLUGIN_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifplugin.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Native SISX SIF (Software Install Framework) plugin.
+*
+*/
+
+#include "sisxsifplugin.h"              // CSisxSifPlugin
+#include "sisxsifpluginactiveimpl.h"    // CSisxSifPluginActiveImpl
+
+using namespace Usif;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::NewL()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPlugin* CSisxSifPlugin::NewL()
+	{
+	CSisxSifPlugin *self = new( ELeave ) CSisxSifPlugin;
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::~CSisxSifPlugin()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPlugin::~CSisxSifPlugin()
+	{
+	delete iImpl;
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::GetComponentInfo()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPlugin::GetComponentInfo( const TDesC& aFileName,
+        const TSecurityContext& aSecurityContext,
+        CComponentInfo& aComponentInfo,
+        TRequestStatus& aStatus )
+	{
+	iImpl->GetComponentInfo( aFileName, aSecurityContext, aComponentInfo, aStatus );
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::GetComponentInfo()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPlugin::GetComponentInfo( RFile& aFileHandle,
+        const TSecurityContext& aSecurityContext,
+        CComponentInfo& aComponentInfo,
+        TRequestStatus& aStatus )
+	{
+	iImpl->GetComponentInfo( aFileHandle, aSecurityContext, aComponentInfo, aStatus );
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::Install()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPlugin::Install( const TDesC& aFileName,
+        const TSecurityContext& aSecurityContext,
+        const COpaqueNamedParams& aInputParams,
+        COpaqueNamedParams& aOutputParams,
+        TRequestStatus& aStatus )
+	{
+	iImpl->Install( aFileName, aSecurityContext, aInputParams, aOutputParams, aStatus );
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::Install()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPlugin::Install( RFile& aFileHandle,
+        const TSecurityContext& aSecurityContext,
+        const COpaqueNamedParams& aInputParams,
+        COpaqueNamedParams& aOutputParams,
+        TRequestStatus& aStatus )
+	{
+	iImpl->Install( aFileHandle, aSecurityContext, aInputParams, aOutputParams, aStatus );
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::Uninstall()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPlugin::Uninstall( TComponentId aComponentId,
+        const TSecurityContext& aSecurityContext,
+        const COpaqueNamedParams& aInputParams,
+        COpaqueNamedParams& aOutputParams,
+        TRequestStatus& aStatus )
+	{
+	iImpl->Uninstall( aComponentId, aSecurityContext, aInputParams, aOutputParams, aStatus );
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::Activate()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPlugin::Activate( TComponentId aComponentId,
+        const TSecurityContext& aSecurityContext,
+        TRequestStatus& aStatus )
+	{
+	iImpl->Activate( aComponentId, aSecurityContext, aStatus );
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::Deactivate()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPlugin::Deactivate( TComponentId aComponentId,
+        const TSecurityContext& aSecurityContext,
+        TRequestStatus& aStatus )
+	{
+	iImpl->Deactivate( aComponentId, aSecurityContext, aStatus );
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::CancelOperation()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPlugin::CancelOperation()
+    {
+    iImpl->Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::CSisxSifPlugin()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPlugin::CSisxSifPlugin()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPlugin::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPlugin::ConstructL()
+    {
+    iImpl = CSisxSifPluginActiveImpl::NewL();
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginactiveimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1045 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Native SISX SIF (Software Install Framework) plugin.
+*
+*/
+
+#include "sisxsifpluginactiveimpl.h"        // CSisxSifPluginActiveImpl
+#include "sisxsifpluginuihandlerbase.h"     // CSisxSifPluginUiHandlerBase
+#include "sisxsifpluginuihandler.h"         // CSisxSifPluginUiHandler
+#include "sisxsifpluginuihandlersilent.h"   // CSisxSifPluginUiHandlerSilent
+#include "sisxsifplugininstallparams.h"     // CSisxSifPluginInstallParams
+#include "sisxsifpluginerrorhandler.h"      // CSisxSifPluginErrorHandler
+#include "sisxsifcleanuputils.h"            // CleanupResetAndDestroyPushL
+#include "sisxsifpluginerrors.h"            // Error codes
+#include "sisxsifplugin.pan"                // Panic codes
+#include <usif/sif/sifcommon.h>             // Usif::CComponentInfo
+#include <usif/scr/scr.h>                   // RSoftwareComponentRegistry
+#include <swi/asynclauncher.h>              // Swi::CAsyncLauncher
+#include <swi/sisregistrysession.h>         // RSisRegistrySession
+#include "sisregistrywritablesession.h"     // RSisRegistryWritableSession
+#include <e32property.h>                    // RProperty
+#include <centralrepository.h>              // CRepository
+#include <sacls.h>                          // KUidSwiLatestInstallation
+#include <SWInstallerInternalCRKeys.h>      // KCRUidSWInstallerSettings
+#include <featmgr.h>                        // FeatureManager
+#include <syslangutil.h>                    // GetInstalledLanguages
+
+// TODO: replace with proper logging
+#ifdef _DEBUG
+#define FLOG(x)         RDebug::Print(x);
+#define FLOG_1(x,y)     RDebug::Print(x, y);
+#define FLOG_2(x,y,z)   RDebug::Print(x, y, z);
+#define FLOG_3(x,y,z,v) RDebug::Print(x, y, z, v);
+#else
+#define FLOG(x)
+#define FLOG_1(x,y)
+#define FLOG_2(x,y,z)
+#define FLOG_3(x,y,z,v)
+#endif
+
+using namespace Usif;
+
+_LIT( KCompUid, "CompUid" );
+_LIT( KStartupListUpdaterExecutable, "z:\\sys\\bin\\startuplistupdater.exe" );
+_LIT( KStartupListUpdaterName, "StartupListUpdater" );
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::NewL()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginActiveImpl* CSisxSifPluginActiveImpl::NewL()
+    {
+    FLOG( _L("Constructing CSisxSifPluginActiveImpl") );
+    CSisxSifPluginActiveImpl *self = new( ELeave ) CSisxSifPluginActiveImpl;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::~CSisxSifPluginActiveImpl()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginActiveImpl::~CSisxSifPluginActiveImpl()
+    {
+    FLOG( _L("Destructing CSisxSifPluginActiveImpl") );
+    Cancel();
+    delete iAsyncLauncher;
+    delete iUiHandler;
+    delete iInstallPrefs;
+    iDeviceSupportedLanguages.Reset();
+    iInputParams = NULL;    // not owned
+    iOutputParams = NULL;   // not owned
+    delete iInstallParams;
+    delete iComponentInfo;
+    delete iFileName;
+    delete iErrorHandler;
+    FeatureManager::UnInitializeLib();
+    iFs.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::DoCancel()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::DoCancel()
+    {
+    FLOG( _L("CSisxSifPluginActiveImpl::DoCancel") );
+
+    if( iClientStatus )
+        {
+        if( iAsyncLauncher )
+            {
+            iAsyncLauncher->CancelOperation();
+            delete iAsyncLauncher;
+            iAsyncLauncher = NULL;
+            }
+
+        CompleteClientRequest( KErrCancel );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::RunL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::RunL()
+    {
+    FLOG_3( _L("CSisxSifPluginActiveImpl::RunL(), operation %d, phase %d, result %d"),
+            iOperation, iPhase, iStatus.Int() );
+
+    User::LeaveIfError( iStatus.Int() );
+    switch( iOperation )
+        {
+        case EGetComponentInfo:
+            __ASSERT_DEBUG( iPhase == ERunningOperation, Panic( ESisxSifInternalError ) );
+            CompleteClientRequest( KErrNone );
+            break;
+
+        case EInstall:
+            switch( iPhase )
+                {
+                case EPreprocessing:
+                    if( IsSilentMode() )
+                        {
+                        StartSilentInstallingL();
+                        }
+                    else
+                        {
+                        StartInstallingL();
+                        }
+                    break;
+
+                case ERunningOperation:
+                    FinalizeInstallationL();
+                    CompleteClientRequest( KErrNone );
+                    break;
+
+				// TODO: KSifInParam_InstallInactive
+
+                default:
+                    Panic( ESisxSifInternalError );
+                    break;
+                }
+            break;
+
+        case EUninstall:
+            __ASSERT_DEBUG( iPhase == ERunningOperation, Panic( ESisxSifInternalError ) );
+            UpdateStartupListL();
+            iUiHandler->PublishCompletionL();
+            CompleteClientRequest( KErrNone );
+            break;
+
+        case EActivate:
+        case EDeactivate:
+            __ASSERT_DEBUG( iPhase == ERunningOperation, Panic( ESisxSifInternalError ) );
+            CompleteClientRequest( KErrNone );
+            break;
+
+        default:
+            Panic( ESisxSifInternalError );
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::RunError()
+// ---------------------------------------------------------------------------
+//
+TInt CSisxSifPluginActiveImpl::RunError( TInt aError )
+    {
+    FLOG_1( _L("CSisxSifPluginActiveImpl::RunError(), aError %d"), aError );
+
+    TRAP_IGNORE( DoHandleErrorL( aError ) );
+    CompleteClientRequest( aError );
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::GetComponentInfo()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::GetComponentInfo(
+        const TDesC& aFileName,
+        const TSecurityContext& /*aSecurityContext*/,
+        CComponentInfo& aComponentInfo,
+        TRequestStatus& aStatus )
+    {
+    FLOG_1( _L("CSisxSifPluginActiveImpl::GetComponentInfo: %S"), &aFileName );
+
+    if( IsActive() )
+        {
+        FLOG( _L("CSisxSifPluginActiveImpl::GetComponentInfo, KErrInUse") );
+        CompleteClientRequest( KErrInUse );
+        return;
+        }
+
+    TRAPD( error, SetFileL( aFileName ) );
+    if( error )
+        {
+        FLOG_1( _L("CSisxSifPluginActiveImpl::GetComponentInfo, set file error %d"), error );
+        CompleteClientRequest( error );
+        return;
+        }
+
+    TRAP( error, DoGetComponentInfoL( aComponentInfo, aStatus ) );
+	if( error )
+		{
+		FLOG_1( _L("CSisxSifPluginActiveImpl::GetComponentInfo ERROR %d"), error );
+		CompleteClientRequest( error );
+		}
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::GetComponentInfo()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::GetComponentInfo(
+        RFile& aFileHandle,
+        const TSecurityContext& /*aSecurityContext*/,
+        CComponentInfo& aComponentInfo,
+        TRequestStatus& aStatus )
+    {
+    FLOG( _L("CSisxSifPluginActiveImpl::GetComponentInfo(RFile)") );
+
+    if( IsActive() )
+        {
+        FLOG( _L("CSisxSifPluginActiveImpl::GetComponentInfo, KErrInUse") );
+        CompleteClientRequest( KErrInUse );
+        return;
+        }
+
+    SetFile( aFileHandle );
+
+	TRAPD( error, DoGetComponentInfoL( aComponentInfo, aStatus ) );
+	if( error )
+		{
+		FLOG_1( _L("CSisxSifPluginActiveImpl::GetComponentInfo ERROR %d"), error );
+		CompleteClientRequest( error );
+		}
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::Install()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::Install(
+        const TDesC& aFileName,
+        const TSecurityContext& aSecurityContext,
+        const COpaqueNamedParams& aInputParams,
+        COpaqueNamedParams& aOutputParams,
+        TRequestStatus& aStatus )
+    {
+    FLOG_1( _L("CSisxSifPluginActiveImpl::Install: %S"), &aFileName );
+
+    if( IsActive() )
+        {
+		FLOG( _L("CSisxSifPluginActiveImpl::Install, KErrInUse") );
+		CompleteClientRequest( KErrInUse );
+		return;
+		}
+
+    iHasAllFilesCapability = aSecurityContext.HasCapability( ECapabilityAllFiles );
+
+	TRAPD( error, SetFileL( aFileName ) );
+	if( error )
+		{
+		FLOG_1( _L("CSisxSifPluginActiveImpl::Install, set file error %d"), error );
+		CompleteClientRequest( error );
+		return;
+		}
+
+	TRAP( error, DoInstallL( aSecurityContext, aInputParams, aOutputParams, aStatus ) );
+	if( error )
+		{
+		FLOG_1( _L("CSisxSifPluginActiveImpl::Install, DoInstallL error %d"), error );
+		CompleteClientRequest( error );
+		}
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::Install()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::Install(
+        RFile& aFileHandle,
+        const TSecurityContext& aSecurityContext,
+        const COpaqueNamedParams& aInputParams,
+        COpaqueNamedParams& aOutputParams,
+        TRequestStatus& aStatus )
+    {
+    FLOG( _L("CSisxSifPluginActiveImpl::Install(RFile)") );
+
+    if( IsActive() )
+        {
+		FLOG( _L("CSisxSifPluginActiveImpl::Install KErrInUse") );
+		CompleteClientRequest( KErrInUse );
+		return;
+		}
+
+    iHasAllFilesCapability = aSecurityContext.HasCapability( ECapabilityAllFiles );
+
+    SetFile( aFileHandle );
+
+    TRAPD( error, DoInstallL( aSecurityContext, aInputParams, aOutputParams, aStatus ) );
+    if( error )
+        {
+        FLOG_1( _L("CSisxSifPluginActiveImpl::Install, DoInstallL error %d"), error );
+        CompleteClientRequest( error );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::Uninstall()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::Uninstall(
+        TComponentId aComponentId,
+        const TSecurityContext& aSecurityContext,
+        const COpaqueNamedParams& aInputParams,
+        COpaqueNamedParams& aOutputParams,
+        TRequestStatus& aStatus )
+    {
+    FLOG_1( _L("CSisxSifPluginActiveImpl::Uninstall, aComponentId %d"), aComponentId );
+
+    if( IsActive() )
+        {
+        FLOG( _L("CSisxSifPluginActiveImpl::Uninstall KErrInUse") );
+        CompleteClientRequest( KErrInUse );
+        return;
+        }
+
+    iHasAllFilesCapability = aSecurityContext.HasCapability( ECapabilityAllFiles );
+
+    // Uninstall is always silent. TrustedUI capability is required.
+	if( !aSecurityContext.HasCapability( ECapabilityTrustedUI ) )
+		{
+		FLOG( _L( "CSisxSifPluginActiveImpl::Uninstall, missing ECapabilityTrustedUI") );
+		iErrorHandler->SetExtendedErrorCode( ESifUiTrustedUICapabilityRequired );
+		CompleteClientRequest( KErrPermissionDenied );
+		return;
+		}
+
+	TRAPD( error, DoUninstallL( aComponentId, aInputParams, aOutputParams, aStatus ) );
+	if( error )
+		{
+		FLOG_1( _L("CSisxSifPluginActiveImpl::Uninstall, DoUninstallL ERROR %d"), error );
+		CompleteClientRequest( error );
+		}
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::Activate()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::Activate(
+        TComponentId aComponentId,
+        const TSecurityContext& aSecurityContext,
+        TRequestStatus& aStatus )
+    {
+    FLOG_1( _L("CSisxSifPluginActiveImpl::Activate, aComponentId %d"), aComponentId );
+
+    if( IsActive() )
+        {
+        FLOG( _L("CSisxSifPluginActiveImpl::Activate KErrInUse") );
+        CompleteClientRequest( KErrInUse );
+        return;
+        }
+
+    iHasAllFilesCapability = aSecurityContext.HasCapability( ECapabilityAllFiles );
+
+    TRAPD( error, DoActivateL( aComponentId, aStatus ) );
+    if( error )
+        {
+        FLOG_1( _L("CSisxSifPluginActiveImpl::Activate, DoActivateL ERROR %d"), error );
+        CompleteClientRequest( error );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::Deactivate()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::Deactivate(
+        TComponentId aComponentId,
+        const TSecurityContext& aSecurityContext,
+        TRequestStatus& aStatus )
+    {
+    FLOG_1( _L("CSisxSifPluginActiveImpl::Deactivate, aComponentId %d"), aComponentId );
+
+    if( IsActive() )
+        {
+        FLOG( _L("CSisxSifPluginActiveImpl::Deactivate KErrInUse") );
+        CompleteClientRequest( KErrInUse );
+        return;
+        }
+
+    iHasAllFilesCapability = aSecurityContext.HasCapability( ECapabilityAllFiles );
+
+    TRAPD( error, DoDeactivateL( aComponentId, aStatus ) );
+    if( error )
+        {
+        FLOG_1( _L("CSisxSifPluginActiveImpl::Deactivate, DoDeactivateL ERROR %d"), error );
+        CompleteClientRequest( error );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::CSisxSifPluginActiveImpl()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginActiveImpl::CSisxSifPluginActiveImpl() : CActive( CActive::EPriorityStandard )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::ConstructL()
+    {
+    User::LeaveIfError( iFs.Connect() );
+    FeatureManager::InitializeLibL();
+
+    iAsyncLauncher = Swi::CAsyncLauncher::NewL();
+    iInstallPrefs = Swi::CInstallPrefs::NewL();
+    iComponentInfo = CComponentInfo::NewL();
+    iErrorHandler = CSisxSifPluginErrorHandler::NewL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::CommonRequestPreambleL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::CommonRequestPreambleL( TRequestStatus& aStatus )
+    {
+    aStatus = KRequestPending;
+    iClientStatus = &aStatus;
+
+    if( iInstallParams )
+        {
+        delete iInstallParams;
+        iInstallParams = NULL;
+        }
+    CreateUiHandlerL();
+
+    iInputParams = NULL;
+    iOutputParams = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::CommonRequestPreambleL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::CommonRequestPreambleL(
+        const COpaqueNamedParams& aInputParams,
+        COpaqueNamedParams& aOutputParams,
+        TRequestStatus& aStatus )
+    {
+    aStatus = KRequestPending;
+    iClientStatus = &aStatus;
+
+    if( iInstallParams )
+        {
+        delete iInstallParams;
+        iInstallParams = NULL;
+        }
+    iInstallParams = CSisxSifPluginInstallParams::NewL( aInputParams );
+    CreateUiHandlerL();
+
+    iInputParams = &aInputParams;
+    iOutputParams = &aOutputParams;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::CompleteSelf()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::CompleteSelf( TInt aResult )
+    {
+    iStatus = KRequestPending;
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete( status, aResult );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::CreateUiHandlerL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::CreateUiHandlerL()
+    {
+    if( iUiHandler )
+    	{
+		delete iUiHandler;
+		iUiHandler = NULL;
+    	}
+	if( IsSilentMode() )
+		{
+		iUiHandler = CSisxSifPluginUiHandlerSilent::NewL( iFs, *iErrorHandler );
+		}
+	else
+		{
+		iUiHandler = CSisxSifPluginUiHandler::NewL( iFs, *iErrorHandler );
+		}
+	if( iInstallParams )
+		{
+		iUiHandler->SetInstallParamsL( *iInstallParams );
+		}
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::IsSilentMode()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginActiveImpl::IsSilentMode()
+	{
+	return( iInstallParams && iInstallParams->IsSilentMode() );
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::CompleteClientRequest()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::CompleteClientRequest( TInt aResult )
+    {
+    if( iClientStatus )
+        {
+        User::RequestComplete( iClientStatus, aResult );
+        iClientStatus = NULL;
+        }
+    __ASSERT_DEBUG( !IsActive(), Panic( ESisxSifInternalError ) );
+    iOperation = ENoOperation;
+    iPhase = ENotActive;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::DoGetComponentInfoL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::DoGetComponentInfoL( CComponentInfo& aComponentInfo,
+		TRequestStatus& aStatus )
+	{
+	CommonRequestPreambleL( aStatus );
+
+	if( iFileName )
+		{
+		iAsyncLauncher->GetComponentInfoL( *iUiHandler, *iFileName, *iInstallPrefs,
+				aComponentInfo, iStatus );
+		}
+	else if( iFileHandle )
+		{
+		iAsyncLauncher->GetComponentInfoL( *iUiHandler, *iFileHandle, *iInstallPrefs,
+				aComponentInfo, iStatus );
+		}
+	else
+		{
+		User::Leave( KErrGeneral );
+		}
+
+    iOperation = EGetComponentInfo;
+    iPhase = ERunningOperation;
+    SetActive();
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::DoInstallL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::DoInstallL( const TSecurityContext& aSecurityContext,
+		const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+		TRequestStatus& aStatus )
+	{
+    CommonRequestPreambleL( aInputParams, aOutputParams, aStatus );
+    FLOG_1( _L("CSisxSifPluginActiveImpl::DoInstall, IsSilentMode=%d"), IsSilentMode() );
+
+    if( IsSilentMode() )
+        {
+        if( !aSecurityContext.HasCapability( ECapabilityTrustedUI ) )
+            {
+            FLOG( _L("CSisxSifPluginActiveImpl::Install, missing ECapabilityTrustedUI") );
+            iErrorHandler->SetExtendedErrorCode( ESifUiTrustedUICapabilityRequired );
+            CompleteClientRequest( KErrPermissionDenied );
+            return;
+            }
+        }
+
+    if( iFileName )
+        {
+        iUiHandler->DisplayPreparingInstallL( *iFileName );
+        iAsyncLauncher->GetComponentInfoL( *iUiHandler, *iFileName, *iInstallPrefs,
+                *iComponentInfo, iStatus );
+        }
+    else if( iFileHandle )
+        {
+        TFileName fileName;
+        iFileHandle->Name( fileName );
+        iUiHandler->DisplayPreparingInstallL( fileName );
+        iAsyncLauncher->GetComponentInfoL( *iUiHandler, *iFileHandle, *iInstallPrefs,
+                *iComponentInfo, iStatus );
+        }
+    else
+        {
+        User::Leave( KErrGeneral );
+        }
+
+    iOperation = EInstall;
+    iPhase = EPreprocessing;
+    SetActive();
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::DoUninstallL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::DoUninstallL( TComponentId aComponentId,
+		const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+		TRequestStatus& aStatus )
+    {
+    CommonRequestPreambleL( aInputParams, aOutputParams, aStatus );
+
+    TUid uid;
+    CComponentEntry *entry = CComponentEntry::NewLC();
+    GetComponentAndUidL( aComponentId, *entry, uid );
+    iUiHandler->PublishStartL( *entry );
+    CleanupStack::PopAndDestroy( entry );
+
+    iAsyncLauncher->UninstallL( *iUiHandler, uid, iStatus );
+
+    iOperation = EUninstall;
+    iPhase = ERunningOperation;
+    SetActive();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::DoActivateL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::DoActivateL( TComponentId aComponentId,
+        TRequestStatus& aStatus )
+    {
+    CommonRequestPreambleL( aStatus );
+
+    Swi::RSisRegistryWritableSession sisRegSession;
+    User::LeaveIfError( sisRegSession.Connect() );
+    CleanupClosePushL( sisRegSession );
+    sisRegSession.ActivateComponentL( aComponentId );
+    CleanupStack::PopAndDestroy( &sisRegSession );
+
+    CompleteSelf( KErrNone );
+
+    iOperation = EActivate;
+    iPhase = ERunningOperation;
+    SetActive();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::DoDeactivateL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::DoDeactivateL( TComponentId aComponentId,
+        TRequestStatus& aStatus )
+    {
+    CommonRequestPreambleL( aStatus );
+
+    Swi::RSisRegistryWritableSession sisRegSession;
+    User::LeaveIfError( sisRegSession.Connect() );
+    CleanupClosePushL( sisRegSession );
+    sisRegSession.DeactivateComponentL( aComponentId );
+    CleanupStack::PopAndDestroy( &sisRegSession );
+
+    CompleteSelf( KErrNone );
+
+    iOperation = EDeactivate;
+    iPhase = ERunningOperation;
+    SetActive();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::DoHandleErrorL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::DoHandleErrorL( TInt aError )
+    {
+    FLOG_1( _L("CSisxSifPluginActiveImpl::DoHandleErrorL(), aError=%d"), aError );
+
+    iErrorHandler->SetErrorCode( aError );
+    if( iOutputParams )
+        {
+        iErrorHandler->FillOutputParamsL( *iOutputParams );
+        }
+    iUiHandler->PublishCompletionL();
+
+    if( aError != KErrNone && aError != KErrCancel )
+        {
+        iUiHandler->DisplayFailedL( *iErrorHandler );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::SetFileL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::SetFileL( const TDesC& aFileName )
+    {
+    if( iFileName )
+        {
+        delete iFileName;
+        iFileName = NULL;
+        }
+    iFileName = aFileName.AllocL();
+    iFileHandle = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::SetFile()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::SetFile( RFile& aFileHandle )
+    {
+    if( iFileName )
+        {
+        delete iFileName;
+        iFileName = NULL;
+        }
+    iFileHandle = &aFileHandle;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::GetLastInstalledComponentIdL()
+// ---------------------------------------------------------------------------
+//
+TComponentId CSisxSifPluginActiveImpl::GetLastInstalledComponentIdL()
+    {
+    __ASSERT_DEBUG( iOperation == EInstall, Panic( ESisxSifInternalError ) );
+
+    // Find the id of the last installed component and return it
+    TInt uid;
+    User::LeaveIfError( RProperty::Get( KUidSystemCategory, KUidSwiLatestInstallation, uid ) );
+
+    Swi::RSisRegistrySession sisRegistrySession;
+    User::LeaveIfError( sisRegistrySession.Connect() );
+    CleanupClosePushL( sisRegistrySession );
+
+    TUid tuid( TUid::Uid( uid ) );
+    TComponentId componentId = sisRegistrySession.GetComponentIdForUidL( tuid );
+    CleanupStack::PopAndDestroy( &sisRegistrySession );
+
+    return componentId;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::GetComponentAndUidL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::GetComponentAndUidL( TComponentId aComponentId,
+        CComponentEntry& aEntry, TUid& aUid ) const
+    {
+    FLOG_1( _L("CSisxSifPluginActiveImpl::GetComponentAndUidL, component %d"), aComponentId );
+
+    RSoftwareComponentRegistry scrSession;
+    User::LeaveIfError( scrSession.Connect() );
+    CleanupClosePushL( scrSession );
+
+    if( scrSession.GetComponentL( aComponentId, aEntry ) )
+        {
+        FLOG( _L("CSisxSifPluginActiveImpl::GetComponentAndUidL, entry found") );
+
+        CPropertyEntry* propertyEntry = scrSession.GetComponentPropertyL( aComponentId, KCompUid );
+        CleanupStack::PushL( propertyEntry );
+
+        CIntPropertyEntry* intPropertyEntry = dynamic_cast< CIntPropertyEntry* >( propertyEntry );
+        if( !intPropertyEntry )
+            {
+            FLOG( _L("CSisxSifPluginActiveImpl::GetComponentUidL, UID property not found") );
+            User::Leave( KErrNotFound );
+            }
+        aUid = TUid::Uid( intPropertyEntry->IntValue() );
+
+        CleanupStack::PopAndDestroy( propertyEntry );
+        }
+    else
+        {
+        FLOG( _L("CSisxSifPluginActiveImpl::GetComponentAndUidL, entry not found") );
+        User::Leave( KErrNotFound );
+        }
+
+    CleanupStack::PopAndDestroy( &scrSession );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::RequiresUserCapabilityL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginActiveImpl::RequiresUserCapabilityL(
+        const CComponentInfo::CNode& aRootNode )
+    {
+    // Silent install is not allowed when the package requires additional capabilities
+    // than what it is signed for (package may request for some capability that is not
+    // granted by the certificate used to sign it).
+    const TCapabilitySet& componentUserCaps( aRootNode.UserGrantableCaps() );
+    for( TInt cap = 0; cap < ECapability_Limit; cap++ )
+        {
+        if( componentUserCaps.HasCapability( TCapability( cap ) ) )
+            {
+            FLOG_1( _L("CSisxSifPluginActiveImpl::RequiresUserCapabilityL - %d"), cap );
+            return ETrue;
+            }
+        }
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::SetInstallPrefsRevocationServerUriL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::SetInstallPrefsRevocationServerUriL( const TDesC& aUri )
+    {
+    if( aUri.Length() )
+        {
+        HBufC8* uriBuf = HBufC8::NewLC( aUri.Length() );
+        TPtr8 uri( uriBuf->Des() );
+        uri.Copy( aUri );
+        iInstallPrefs->SetRevocationServerUriL( uri );
+        CleanupStack::PopAndDestroy( uriBuf );
+        }
+    else
+        {
+        iInstallPrefs->SetRevocationServerUriL( KNullDesC8 );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::UpdateInstallPrefsForPerformingOcspL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::UpdateInstallPrefsForPerformingOcspL()
+    {
+    if( IsSilentMode() )
+        {
+        TBool performOcsp( iInstallParams->PerformOCSP() != ENotAllowed );
+        iInstallPrefs->SetPerformRevocationCheck( performOcsp );
+
+        if( performOcsp )
+            {
+            SetInstallPrefsRevocationServerUriL( iInstallParams->OCSPUrl() );
+            }
+        }
+    else
+        {
+        CRepository* cenRep = CRepository::NewLC( KCRUidSWInstallerSettings );
+
+        TInt ocspProcedure = ESWInstallerOcspProcedureOff;
+        (void)cenRep->Get( KSWInstallerOcspProcedure, ocspProcedure );
+        TBool performOcsp( ocspProcedure != ESWInstallerOcspProcedureOff );
+        iInstallPrefs->SetPerformRevocationCheck( performOcsp );
+
+        if( performOcsp )
+            {
+            HBufC* ocspUrlBuf = HBufC::NewLC(
+                    NCentralRepositoryConstants::KMaxUnicodeStringLength );
+            TPtr ocspUrl( ocspUrlBuf->Des() );
+            (void)cenRep->Get( KSWInstallerOcspDefaultURL, ocspUrl );
+            SetInstallPrefsRevocationServerUriL( ocspUrl );
+            CleanupStack::PopAndDestroy( ocspUrlBuf );
+            }
+
+        CleanupStack::PopAndDestroy( cenRep );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::StartInstallingL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::StartInstallingL()
+    {
+	const CComponentInfo::CNode& rootNode( iComponentInfo->RootNodeL() );
+	TBool driveSelection = rootNode.DriveSeletionRequired();
+	iUiHandler->SetDriveSelectionRequired( driveSelection );
+	TInt maxInstalledSize = rootNode.MaxInstalledSize();
+	iUiHandler->SetMaxInstalledSize( maxInstalledSize );
+
+	iUiHandler->PublishStartL( rootNode );
+
+	UpdateInstallPrefsForPerformingOcspL();
+	FillDeviceSupportedLanguagesL();
+
+    if( iFileHandle )
+        {
+        iAsyncLauncher->InstallL( *iUiHandler, *iFileHandle, *iInstallPrefs,
+                iDeviceSupportedLanguages, iStatus );
+        }
+    else if( iFileName )
+        {
+        iAsyncLauncher->InstallL( *iUiHandler, *iFileName, *iInstallPrefs,
+                iDeviceSupportedLanguages, iStatus );
+        }
+    else
+        {
+        Panic( ESisxSifInternalError );
+        }
+
+    iPhase = ERunningOperation;
+    SetActive();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::StartSilentInstallingL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::StartSilentInstallingL()
+    {
+    // TODO: fix this, removed temporarily to allow installations
+#ifdef _NOT_DEFINED_
+    const CComponentInfo::CNode& rootNode( iComponentInfo->RootNodeL() );
+    TBool isAuthenticated = ( rootNode.Authenticity() == EAuthenticated );
+
+    // AllowUntrusted option is needed to install untrusted packages.
+    if( !isAuthenticated && ( iInstallParams->AllowUntrusted() != EAllowed ) )
+        {
+        FLOG( _L("Attempt to install unsigned package silently without AllowUntrusted option") );
+        iErrorHandler->SetExtendedErrorCode( ENeedsAllowUntrustedParameter );
+        CompleteClientRequest( KErrPermissionDenied );
+        }
+    // GrantCapabilities option is needed to install packages that require user capabilities
+    else if( RequiresUserCapabilityL( rootNode ) &&
+            ( iInstallParams->GrantCapabilities() != EAllowed  ) )
+        {
+        FLOG( _L("Attempt to grant user capabilities silently without GrantCapabilities option") );
+        iErrorHandler->SetExtendedErrorCode( ENeedsGrantCapabilitiesParameter );
+        CompleteClientRequest( KErrPermissionDenied );
+        }
+    // AllFiles capability is needed to install untrusted packages that contains exe/dll binaries
+    else if( !isAuthenticated && rootNode.HasExecutable() && !iHasAllFilesCapability )
+        {
+        FLOG( _L("Attempt to install untrusted binaries silently without AllFiles capability") );
+        iErrorHandler->SetExtendedErrorCode( EAllFilesCapabilityRequired );
+        CompleteClientRequest( KErrPermissionDenied );
+        }
+    else
+#endif
+        {
+        StartInstallingL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::FinalizeInstallationL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::FinalizeInstallationL()
+    {
+    UpdateStartupListL();
+
+    if( iOutputParams )
+        {
+        TComponentId componentId = GetLastInstalledComponentIdL();
+        iOutputParams->AddIntL( KSifOutParam_ComponentId, componentId );
+        }
+
+    iUiHandler->PublishCompletionL();
+	iUiHandler->DisplayCompleteL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::UpdateStartupListL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::UpdateStartupListL()
+    {
+    if( FeatureManager::FeatureSupported( KFeatureIdExtendedStartup ) )
+        {
+        TFullName name( KStartupListUpdaterName );
+        name.Append( '*' );
+        TFindProcess findProcess( name );
+        if( findProcess.Next( name ) == KErrNone )
+            {
+            // already running, no need to do anything
+            return;
+            }
+
+        RProcess process;
+        CleanupClosePushL( process );
+
+        TInt result = process.Create( KStartupListUpdaterExecutable, KNullDesC );
+        if( result == KErrNone )
+            {
+            TRequestStatus rendezvousStatus;
+            process.Rendezvous( rendezvousStatus );
+
+            // start process and wait until it is started
+            process.Resume();
+            User::WaitForRequest( rendezvousStatus );
+
+            // ignore possible errors
+            result = rendezvousStatus.Int();
+            }
+
+        CleanupStack::PopAndDestroy( &process );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::FillDeviceSupportedLanguagesL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::FillDeviceSupportedLanguagesL()
+    {
+    FLOG( _L("CSisxSifPluginActiveImpl::FillDeviceSupportedLanguagesL, begin") );
+
+    CArrayFixFlat<TInt>* installedLanguages = NULL;
+    TInt err = SysLangUtil::GetInstalledLanguages( installedLanguages, &iFs );
+    CleanupStack::PushL( installedLanguages );
+    User::LeaveIfError( err );
+    if( installedLanguages )
+        {
+        iDeviceSupportedLanguages.Reset();
+        for( TInt index = 0; index < installedLanguages->Count(); index++ )
+            {
+            TInt language = (*installedLanguages)[ index ];
+            FLOG_1( _L("CSisxSifPluginActiveImpl::FillDeviceSupportedLanguagesL: %d"), language );
+            iDeviceSupportedLanguages.AppendL( language );
+            }
+        }
+    CleanupStack::PopAndDestroy( installedLanguages );
+
+    FLOG( _L("CSisxSifPluginActiveImpl::FillDeviceSupportedLanguagesL, end") );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginerrorhandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,349 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CSisxSifPluginError collects information about errors.
+*               Error details are then passed to framework (USIF).
+*
+*/
+
+#include "sisxsifpluginerrorhandler.h"      // CSisxSifPluginErrorHandler
+#include <swi/sisinstallerrors.h>           // SWI error codes
+#include <usif/sif/sifcommon.h>             // COpaqueNamedParams
+#include "sisxsifplugin.pan"                // Panic codes
+
+using namespace Usif;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::NewL()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginErrorHandler* CSisxSifPluginErrorHandler::NewL()
+    {
+    CSisxSifPluginErrorHandler* self = new ( ELeave ) CSisxSifPluginErrorHandler;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::~CSisxSifPluginErrorHandler()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginErrorHandler::~CSisxSifPluginErrorHandler()
+    {
+    delete iErrorMessage;
+    delete iErrorMessageDetails;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ErrorCategory()
+// ---------------------------------------------------------------------------
+//
+TErrorCategory CSisxSifPluginErrorHandler::ErrorCategory() const
+    {
+    switch( iErrorCode )
+        {
+        // System-wide error codes
+        case KErrNone:
+            return ENone;
+        case KErrNotFound:
+        case KErrGeneral:
+            return EUnexpectedError;
+        case KErrCancel:
+            return EUserCancelled;
+        case KErrNoMemory:
+            return ELowMemory;
+        case KErrNotSupported:
+        case KErrArgument:
+        case KErrTotalLossOfPrecision:
+        case KErrBadHandle:
+        case KErrOverflow:
+        case KErrUnderflow:
+        case KErrAlreadyExists:
+        case KErrPathNotFound:
+        case KErrDied:
+            return EUnexpectedError;
+        case KErrInUse:
+            return EInstallerBusy;
+        case KErrServerTerminated:
+        case KErrServerBusy:
+        case KErrCompletion:
+        case KErrNotReady:
+        case KErrUnknown:
+            return EUnexpectedError;
+        case KErrCorrupt:
+            return ECorruptedPackage;
+        case KErrAccessDenied:
+            return ESecurityError;
+        case KErrLocked:
+        case KErrWrite:
+        case KErrDisMounted:
+        case KErrEof:
+            return EUnexpectedError;
+        case KErrDiskFull:
+            return ELowDiskSpace;
+        case KErrBadDriver:
+        case KErrBadName:
+        case KErrCommsLineFail:
+        case KErrCommsFrame:
+        case KErrCommsOverrun:
+        case KErrCommsParity:
+        case KErrTimedOut:
+        case KErrCouldNotConnect:
+        case KErrCouldNotDisconnect:
+        case KErrDisconnected:
+        case KErrBadLibraryEntryPoint:
+        case KErrBadDescriptor:
+        case KErrAbort:
+        case KErrTooBig:
+        case KErrDivideByZero:
+        case KErrBadPower:
+        case KErrDirFull:
+        case KErrHardwareNotAvailable:
+        case KErrSessionClosed:
+            return EUnexpectedError;
+        case KErrPermissionDenied:
+            return ESecurityError;
+        case KErrExtensionNotSupported:
+        case KErrCommsBreak:
+        case KErrNoSecureTime:
+            return EUnexpectedError;
+
+        // Native SW Installer error codes
+        case KErrSISFieldIdMissing:
+        case KErrSISFieldLengthMissing:
+        case KErrSISFieldLengthInvalid:
+        case KErrSISStringInvalidLength:
+        case KErrSISSignedControllerSISControllerMissing:
+        case KErrSISControllerSISInfoMissing:
+        case KErrSISInfoSISUidMissing:
+        case KErrSISInfoSISNamesMissing:
+            return ECorruptedPackage;
+        case KErrSISFieldBufferTooShort:
+            return EUnexpectedError;
+        case KErrSISStringArrayInvalidElement:
+        case KErrSISInfoSISVendorNamesMissing:
+        case KErrSISInfoSISVersionMissing:
+        case KErrSISControllerSISSupportedLanguagesMissing:
+        case KErrSISSupportedLanguagesInvalidElement:
+        case KErrSISLanguageInvalidLength:
+        case KErrSISContentsSISSignedControllerMissing:
+        case KErrSISContentsSISDataMissing:
+        case KErrSISDataSISFileDataUnitMissing:
+        case KErrSISFileDataUnitTargetMissing:
+        case KErrSISFileOptionsMissing:
+        case KErrSISFileDataUnitDescriptorMissing:
+        case KErrSISFileDataDescriptionMissing:
+        case KErrSISContentsMissing:
+        case KErrSISEmbeddedControllersMissing:
+        case KErrSISEmbeddedDataUnitsMissing:
+        case KErrSISControllerOptionsMissing:
+        case KErrSISExpressionMissing:
+        case KErrSISExpressionStringValueMissing:
+        case KErrSISOptionsStringMissing:
+        case KErrSISFileOptionsExpressionMissing:
+        case KErrSISExpressionHeadValueMissing:
+        case KErrSISEmbeddedSISOptionsMissing:
+        case KErrSISInfoSISUpgradeRangeMissing:
+        case KErrSISDependencyMissingUid:
+        case KErrSISDependencyMissingVersion:
+        case KErrSISDependencyMissingNames:
+        case KErrSISPrerequisitesMissingDependency:
+        case KErrSISControllerMissingPrerequisites:
+        case KErrSISUpgradeRangeMissingVersion:
+        case KErrSISUnexpectedFieldType:
+        case KErrSISExpressionUnknownOperator:
+        case KErrSISArrayReadError:
+        case KErrSISArrayTypeMismatch:
+        case KErrSISInvalidStringLength:
+        case KErrSISCompressionNotSupported:
+        case KErrSISTooDeeplyEmbedded:
+            return ECorruptedPackage;
+        case KErrSISInvalidTargetFile:
+        case KErrSISWouldOverWrite:
+            return ESecurityError;
+        case KErrSISInfoMissingRemoveDirectories:
+            return ECorruptedPackage;
+        case KErrSISNotEnoughSpaceToInstall:
+            return ELowDiskSpace;
+        case KErrInstallerLeave:
+        case KErrPolicyFileCorrupt:
+            return EUnexpectedError;
+        case KErrSignatureSchemeNotSupported:
+        case KErrDigestNotSupported:
+            return EApplicationNotCompatible;
+        case KErrBadHash:
+            return ECorruptedPackage;
+        case KErrSecurityError:
+            return ESecurityError;
+        case KErrBadUsage:
+        case KErrInvalidType:
+        case KErrInvalidExpression:
+        case KErrExpressionToComplex:
+            return EUnexpectedError;
+        case KErrMissingBasePackage:
+        case KErrInvalidUpgrade:
+            return EApplicationNotCompatible;
+        case KErrInvalidEclipsing:
+            return ESecurityError;
+        case KErrWrongHeaderFormat:
+            return EUnexpectedError;
+        case KErrCapabilitiesMismatch:
+            return ESecurityError;
+        case KErrLegacySisFile:
+        case KErrInvalidSoftwareTypeRegistrationFile:
+            return EApplicationNotCompatible;
+
+        // Other error codes
+        default:
+            __ASSERT_DEBUG( EFalse, Panic( ESisxSifUnknownErrorCode ) );
+            return EUnexpectedError;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ErrorCode()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::FillOutputParamsL( COpaqueNamedParams& aOutputParams ) const
+    {
+    if( iErrorCode )
+        {
+        aOutputParams.AddIntL( KSifOutParam_ErrCategory, ErrorCategory() );
+        aOutputParams.AddIntL( KSifOutParam_ErrCode, iErrorCode );
+        }
+    if( iExtendedErrorCode )
+        {
+        aOutputParams.AddIntL( KSifOutParam_ExtendedErrCode, iExtendedErrorCode );
+        }
+    if( iErrorMessage )
+        {
+        aOutputParams.AddStringL( KSifOutParam_ErrMessage, *iErrorMessage );
+        }
+    if( iErrorMessageDetails )
+        {
+        aOutputParams.AddStringL( KSifOutParam_ErrMessageDetails, *iErrorMessageDetails );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ErrorCode()
+// ---------------------------------------------------------------------------
+//
+TInt CSisxSifPluginErrorHandler::ErrorCode() const
+    {
+    return iErrorCode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::SetErrorCode()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::SetErrorCode( TInt aErrorCode )
+    {
+    iErrorCode = aErrorCode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ExtendedErrorCode()
+// ---------------------------------------------------------------------------
+//
+TInt CSisxSifPluginErrorHandler::ExtendedErrorCode() const
+    {
+    return iExtendedErrorCode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::SetExtendedErrorCode()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::SetExtendedErrorCode( TInt aExtendedErrorCode )
+    {
+    iExtendedErrorCode = aExtendedErrorCode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ErrorMessage()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CSisxSifPluginErrorHandler::ErrorMessage() const
+    {
+    if( iErrorMessage )
+        {
+        return *iErrorMessage;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::SetErrorMessage()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::SetErrorMessage( const TDesC& aErrorMessage )
+    {
+    if( iErrorMessage )
+        {
+        delete iErrorMessage;
+        iErrorMessage = NULL;
+        }
+    iErrorMessage = aErrorMessage.AllocL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ErrorMessageDetails()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CSisxSifPluginErrorHandler::ErrorMessageDetails() const
+    {
+    if( iErrorMessageDetails )
+        {
+        return *iErrorMessageDetails;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::SetErrorMessageDetails()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::SetErrorMessageDetails(
+        const TDesC& aErrorMessageDetails )
+    {
+    if( iErrorMessageDetails )
+        {
+        delete iErrorMessageDetails;
+        iErrorMessageDetails = NULL;
+        }
+    iErrorMessageDetails = aErrorMessageDetails.AllocL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::CSisxSifPluginErrorHandler()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginErrorHandler::CSisxSifPluginErrorHandler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginError::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::ConstructL()
+    {
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifplugininstallparams.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,322 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Installation parameters class.
+*
+*/
+
+#include "sisxsifplugininstallparams.h" // CSisxSifPluginInstallParams
+#include <f32file.h>                    // EDriveC
+
+using namespace Usif;
+
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::NewL()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginInstallParams* CSisxSifPluginInstallParams::NewL(
+        const COpaqueNamedParams& aParams )
+    {
+    CSisxSifPluginInstallParams* self = new ( ELeave ) CSisxSifPluginInstallParams;
+    CleanupStack::PushL( self );
+    self->ConstructL( aParams );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::NewL()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginInstallParams* CSisxSifPluginInstallParams::NewL(
+        const CSisxSifPluginInstallParams& aParams )
+    {
+    CSisxSifPluginInstallParams* self = new ( ELeave ) CSisxSifPluginInstallParams;
+    CleanupStack::PushL( self );
+    self->ConstructL( aParams );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::~CSisxSifPluginInstallParams()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginInstallParams::~CSisxSifPluginInstallParams()
+    {
+    delete iOCSPUrl;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::IsSilentMode()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginInstallParams::IsSilentMode() const
+    {
+    return iUseSilentMode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::IsInstallInactive()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginInstallParams::IsInstallInactive() const
+    {
+    return iIsInstallInactive;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::Drive()
+// ---------------------------------------------------------------------------
+//
+TUint CSisxSifPluginInstallParams::Drive() const
+    {
+    return iDrive;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::Language()
+// ---------------------------------------------------------------------------
+//
+TLanguage CSisxSifPluginInstallParams::Language() const
+    {
+    return iLanguage;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::OCSPUrl()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CSisxSifPluginInstallParams::OCSPUrl() const
+    {
+    if( iOCSPUrl )
+        {
+        return *iOCSPUrl;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::PerformOCSP()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::PerformOCSP() const
+    {
+    return iPerformOCSP;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::IgnoreOCSPWarnings()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::IgnoreOCSPWarnings() const
+    {
+    return iIgnoreOCSPWarnings;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowUpgrade()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowUpgrade() const
+    {
+    return iAllowUpgrade;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::InstallOptionalItems()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::InstallOptionalItems() const
+    {
+    return iInstallOptionalItems;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowUntrusted()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowUntrusted() const
+    {
+    return iAllowUntrusted;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::GrantCapabilities()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::GrantCapabilities() const
+    {
+    return iGrantCapabilities;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowAppShutdown()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowAppShutdown() const
+    {
+    return iAllowAppShutdown;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowAppBreakDependency()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowAppBreakDependency() const
+    {
+    return iAllowAppBreakDependency;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowOverwrite()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowOverwrite() const
+    {
+    return iAllowOverwrite;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::PackageInfo()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::PackageInfo() const
+    {
+    return iPackageInfo;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowIncompatible()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowIncompatible() const
+    {
+    return iAllowIncompatible;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::CSisxSifPluginInstallParams()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginInstallParams::CSisxSifPluginInstallParams() : iAllowUntrusted( ENotAllowed )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginInstallParams::ConstructL( const COpaqueNamedParams& aParams )
+    {
+    iUseSilentMode = GetIntParam( aParams, KSifInParam_InstallSilently, EFalse );
+    iIsInstallInactive = GetIntParam( aParams, KSifInParam_InstallInactive, EFalse );
+    // TODO: change drive and language params as arrays when available
+    iDrive = static_cast<TUint>( GetIntParam( aParams, KSifInParam_Drive, EDriveC ) );
+    iLanguage = static_cast<TLanguage>( GetIntParam( aParams, KSifInParam_Languages,
+            ELangNone ) );
+    GetStringParamL( aParams, KSifInParam_OCSPUrl, iOCSPUrl );
+    GetPolicyParam( aParams, KSifInParam_PerformOCSP, iPerformOCSP, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_IgnoreOCSPWarnings, iIgnoreOCSPWarnings, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowUpgrade, iAllowUpgrade, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_InstallOptionalItems, iInstallOptionalItems, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowUntrusted, iAllowUntrusted, ENotAllowed );
+    GetPolicyParam( aParams, KSifInParam_GrantCapabilities, iGrantCapabilities, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowAppShutdown, iAllowAppShutdown, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowAppBreakDependency, iAllowAppBreakDependency,
+            EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowOverwrite, iAllowOverwrite, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_PackageInfo, iPackageInfo, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowIncompatible, iAllowIncompatible, EAllowed );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginInstallParams::ConstructL( const CSisxSifPluginInstallParams& aParams )
+    {
+	iUseSilentMode = aParams.iUseSilentMode;
+	iIsInstallInactive = aParams.iIsInstallInactive;
+    iDrive = aParams.iDrive;
+    iLanguage = aParams.iLanguage;
+    if( aParams.iOCSPUrl )
+        {
+        iOCSPUrl = aParams.iOCSPUrl->AllocL();
+        }
+    iPerformOCSP = aParams.iPerformOCSP;
+    iIgnoreOCSPWarnings = aParams.iIgnoreOCSPWarnings;
+    iAllowUpgrade = aParams.iAllowUpgrade;
+    iInstallOptionalItems = aParams.iInstallOptionalItems;
+    iAllowUntrusted = aParams.iAllowUntrusted;
+    iGrantCapabilities = aParams.iGrantCapabilities;
+    iAllowAppShutdown = aParams.iAllowAppShutdown;
+    iAllowAppBreakDependency = aParams.iAllowAppBreakDependency;
+    iAllowOverwrite = aParams.iAllowOverwrite;
+    iPackageInfo = aParams.iPackageInfo;
+    iAllowIncompatible = aParams.iAllowIncompatible;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::GetIntParam()
+// ---------------------------------------------------------------------------
+//
+TInt CSisxSifPluginInstallParams::GetIntParam( const COpaqueNamedParams& aParams,
+        const TDesC& aParamName, TInt aDefaultValue )
+    {
+    TInt value = aDefaultValue;
+    TBool paramFound = EFalse;
+    TRAPD( err, paramFound = aParams.GetIntByNameL( aParamName, value ) );
+    if( !err && paramFound )
+        {
+        return value;
+        }
+    return aDefaultValue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::GetPolicyParam()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginInstallParams::GetPolicyParam( const COpaqueNamedParams& aParams,
+        const TDesC& aParamName, TSifPolicy& aPolicy, const TSifPolicy& aDefault )
+    {
+    TInt value = aDefault;
+    TBool paramFound = EFalse;
+    TRAPD( err, paramFound = aParams.GetIntByNameL( aParamName, value ) );
+    if( !err && paramFound )
+        {
+        aPolicy = static_cast<TSifPolicy>( value );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::GetStringParamL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginInstallParams::GetStringParamL( const COpaqueNamedParams& aParams,
+        const TDesC& aParamName, HBufC*& aBuf )
+    {
+    TPtrC value( aParams.StringByNameL( aParamName ) );
+    if( value.Length() )
+        {
+        if( aBuf )
+            {
+            delete aBuf;
+            aBuf = NULL;
+            }
+        aBuf = value.AllocL();
+        }
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginmain.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Native SISX SIF (Software Install Framework) plugin.
+*
+*/
+
+#include <ecom/implementationproxy.h>   // TImplementationProxy
+#include "sisxsifplugin.h"              // CSisxSifPlugin
+
+using namespace Usif;
+
+const TImplementationProxy KImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY( 0x20022EE3, CSisxSifPlugin::NewL )
+    };
+
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    aTableCount = sizeof( KImplementationTable ) / sizeof( TImplementationProxy );
+    return KImplementationTable;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginuihandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,643 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Native SISX SIF (Software Install Framework) plugin.
+*
+*/
+
+#include "sisxsifpluginuihandler.h"     // CSisxSifPluginUiHandler
+#include "sisxsifpluginerrorhandler.h"  // CSisxSifPluginErrorHandler
+#include "sisxsifplugin.pan"            // Panic codes
+#include "sisxsifcleanuputils.h"        // CleanupResetAndDestroyPushL
+#include "sisxsifuiselectioncache.h"    // CSisxUISelectionCache
+#include <sifui.h>                      // CSifUi
+#include <sifuiappinfo.h>               // CSifUiAppInfo
+#include <sifuicertificateinfo.h>       // CSifUiCertificateInfo
+#include <sifuierrorinfo.h>             // CSifUiErrorInfo
+#include <bautils.h>                    // BaflUtils
+#include <driveinfo.h>                  // DriveInfo
+#include <featmgr.h>                    // FeatureManager
+
+using namespace Usif;
+
+const TInt KFreeSpaceTreshold = 128*1024;   // bytes
+
+// TODO: replace with proper tracing support
+#ifdef _DEBUG
+#define FLOG(x)         RDebug::Print(x);
+#define FLOG_1(x,y)     RDebug::Print(x, y);
+#define FLOG_2(x,y,z)   RDebug::Print(x, y, z);
+#else
+#define FLOG(x)
+#define FLOG_1(x,y)
+#define FLOG_2(x,y,z)
+#endif
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::NewL()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginUiHandler* CSisxSifPluginUiHandler::NewL( RFs& aFs,
+        CSisxSifPluginErrorHandler& aErrorHandler )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::NewL") );
+    CSisxSifPluginUiHandler *self = new( ELeave ) CSisxSifPluginUiHandler( aFs, aErrorHandler );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::~CSisxSifPluginUiHandler()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginUiHandler::~CSisxSifPluginUiHandler()
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::~CSisxSifPluginUiHandler") );
+    delete iSelectionCache;
+    delete iSifUi;
+    iSelectableDrives.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayTextL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplayTextL( const Swi::CAppInfo& /*aAppInfo*/,
+        Swi::TFileTextOption aOption, const TDesC& aText )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayTextL") );
+    TBool okToContinue = EFalse;
+
+    switch( aOption )
+        {
+        case Swi::EInstFileTextOptionContinue:
+            ShowQuestionWithContinueL( aText );
+            okToContinue = ETrue;
+            break;
+        case Swi::EInstFileTextOptionSkipOneIfNo:
+            okToContinue = ShowQuestionL( aText );
+            break;
+        case Swi::EInstFileTextOptionAbortIfNo:
+        case Swi::EInstFileTextOptionExitIfNo:
+            okToContinue = ShowQuestionL( aText );
+            break;
+        case Swi::EInstFileTextOptionForceAbort:
+            ShowQuestionWithContinueL( aText );
+            break;
+        default:
+            break;
+        }
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayErrorL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandler::DisplayErrorL( const Swi::CAppInfo& /*aAppInfo*/,
+        Swi::TErrorDialog aType, const TDesC& aParam )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayErrorL") );
+    SetErrorSwiErrorL( aType, aParam );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayDependencyBreakL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplayDependencyBreakL( const Swi::CAppInfo& /*aAppInfo*/,
+        const RPointerArray<TDesC>& /*aComponents*/ )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayDependencyBreakL") );
+    TBool okToContinue = EFalse;
+
+    // TODO: localized UI string needed
+    _LIT( KText, "Removal may stop other applications working. Continue?" );
+    okToContinue = ShowQuestionL( KText );
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayApplicationsInUseL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplayApplicationsInUseL( const Swi::CAppInfo& /*aAppInfo*/,
+        const RPointerArray<TDesC>& /*aAppNames*/ )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayApplicationsInUseL") );
+    return ETrue;   // silently accepted
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayQuestionL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplayQuestionL( const Swi::CAppInfo& /*aAppInfo*/,
+        Swi::TQuestionDialog aQuestion, const TDesC& /*aDes*/ )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayQuestionL") );
+    TBool okToContinue = EFalse;
+
+    switch( aQuestion )
+        {
+        case Swi::EQuestionIncompatible:
+            if( !iQuestionIncompatibleDisplayed )
+                {
+                _LIT( KText, "Application not compatible with phone. Continue anyway?" );
+                okToContinue = ShowQuestionL( KText );
+                iQuestionIncompatibleDisplayed = ETrue;
+                }
+            else
+                {
+                okToContinue = ETrue;   // already accepted once
+                }
+            break;
+
+        case Swi::EQuestionOverwriteFile:
+        default:
+            okToContinue = ETrue;   // silently accepted
+            break;
+        }
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayInstallL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplayInstallL( const Swi::CAppInfo& /*aAppInfo*/,
+        const CApaMaskedBitmap* /*aLogo*/,
+        const RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/ )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayInstallL") );
+    iOperationPhase = EInstalling;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayGrantCapabilitiesL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplayGrantCapabilitiesL( const Swi::CAppInfo& /*aAppInfo*/,
+        const TCapabilitySet& aCapabilitySet )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayGrantCapabilitiesL") );
+    TBool okToContinue = iSifUi->ShowGrantCapabilitiesL( aCapabilitySet );
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayLanguageL()
+// ---------------------------------------------------------------------------
+//
+TInt CSisxSifPluginUiHandler::DisplayLanguageL( const Swi::CAppInfo& /*aAppInfo*/,
+        const RArray<TLanguage>& aLanguages )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayLanguageL") );
+    TInt langIndex = iSifUi->ShowSelectLanguageL( aLanguages );
+    return langIndex;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayDriveL()
+// ---------------------------------------------------------------------------
+//
+TInt CSisxSifPluginUiHandler::DisplayDriveL( const Swi::CAppInfo& /*aAppInfo*/,
+        TInt64 /*aSize*/, const RArray<TChar>& aDriveLetters,
+        const RArray<TInt64>& /*aDriveSpaces*/ )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayDriveL") );
+
+    TInt err = KErrNone;
+    TInt driveNumber = EDriveC;
+    if( iSifUi )
+        {
+        err = iSifUi->SelectedDrive( driveNumber );
+        if( err )
+            {
+            FLOG_1( _L("CSisxSifPluginUiHandler::DisplayDriveL; SelectedDrive err=%d"), err );
+            }
+        }
+
+    TChar driveLetter = 'C';
+    err = RFs::DriveToChar( driveNumber, driveLetter );
+    if( err )
+        {
+        FLOG_1( _L("CSisxSifPluginUiHandler::DisplayDriveL; DriveToChar err=%d"), err );
+        }
+
+    TInt index = aDriveLetters.Find( driveLetter );
+    if( index >= 0 && index < aDriveLetters.Count() )
+        {
+        return index;
+        }
+    return 0;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayUpgradeL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplayUpgradeL( const Swi::CAppInfo& /*aAppInfo*/,
+        const Swi::CAppInfo& /*aExistingAppInfo*/ )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayUpgradeL") );
+
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayOptionsL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplayOptionsL( const Swi::CAppInfo& /*aAppInfo*/,
+        const RPointerArray<TDesC>& aOptions, RArray<TBool>& aSelections )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayOptionsL") );
+    TInt optionCount = aOptions.Count();
+    CPtrCArray* selectableItems = new( ELeave ) CPtrC16Array( optionCount );
+    CleanupStack::PushL( selectableItems );
+    for( TInt index = 0; index < optionCount; index++ )
+        {
+        selectableItems->AppendL( *aOptions[ index ] );
+        }
+
+    RArray<TInt> selectedIndexes;
+    TBool isSelected = iSifUi->ShowSelectOptionsL( *selectableItems, selectedIndexes );
+    if( isSelected && selectedIndexes.Count() )
+        {
+        TInt selectionsCount = aSelections.Count();
+        __ASSERT_DEBUG( selectionsCount == optionCount, User::Invariant() );
+        for( TInt index = 0; index < selectionsCount; index++ )
+            {
+            aSelections[ index ] = ( selectedIndexes.Find( index ) != KErrNotFound );
+            }
+        }
+    return isSelected;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::HandleInstallEventL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::HandleInstallEventL( const Swi::CAppInfo& aAppInfo,
+        Swi::TInstallEvent aEvent, TInt aValue, const TDesC& /*aDes*/ )
+    {
+    FLOG_2( _L("CSisxSifPluginUiHandler::HandleInstallEventL: aEvent %d, aValue %d"), aEvent, aValue );
+
+    if( iSifUi->IsCancelled() )
+        {
+        return EFalse;
+        }
+
+    switch( aEvent )
+        {
+        case Swi::EEventSetProgressBarFinalValue:
+            iProgressBarFinalValue = aValue;
+            if( iOperationPhase == EInstalling )
+                {
+                ShowProgressL( aAppInfo, iProgressBarFinalValue, CSifUi::EInstalling );
+                }
+            break;
+
+        case Swi::EEventUpdateProgressBar:
+            if( iOperationPhase == EInstalling )
+                {
+                iSifUi->IncreaseProgressBarValueL( aValue );
+                }
+            iProgressBarCurrentValue += aValue;
+            PublishProgressL( EFileOperation );
+            break;
+
+        case Swi::EEventDevCert:
+            // TODO: show "developer certificate" warning note
+            break;
+
+        case Swi::EEventOcspCheckEnd:
+        case Swi::EEventAbortedInstall:
+        case Swi::EEventAbortedUnInstall:
+        case Swi::EEventCompletedInstall:
+        case Swi::EEventCompletedUnInstall:
+        case Swi::EEventCompletedNoMessage:
+        case Swi::EEventLeave:
+        default:
+            break;
+        }
+
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::HandleCancellableInstallEventL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandler::HandleCancellableInstallEventL( const Swi::CAppInfo& aAppInfo,
+        Swi::TInstallCancellableEvent aEvent, Swi::MCancelHandler& aCancelHandler,
+        TInt aValue, const TDesC& /*aDes*/ )
+    {
+    FLOG_2( _L("CSisxSifPluginUiHandler::HandleCancellableInstallEventL: aEvent %d, aValue %d"), aEvent, aValue );
+
+    if( iSifUi->IsCancelled() )
+        {
+        aCancelHandler.HandleCancel();
+        }
+    else
+        {
+        switch( aEvent )
+            {
+            case Swi::EEventOcspCheckStart:
+                ShowProgressL( aAppInfo, aValue, CSifUi::ECheckingCerts );
+                iProgressBarCurrentValue += aValue;
+                PublishProgressL( EOCSPCheck );
+                break;
+
+            case Swi::EEventRemovingFiles:
+            case Swi::EEventCopyingFiles:
+            case Swi::EEventShuttingDownApps:
+            default:
+                break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplaySecurityWarningL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplaySecurityWarningL( const Swi::CAppInfo& aAppInfo,
+        Swi::TSignatureValidationResult aSigValidationResult,
+        RPointerArray<CPKIXValidationResultBase>& aPkixResults,
+        RPointerArray<Swi::CCertificateInfo>& aCertificates,
+        TBool aInstallAnyway )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplaySecurityWarningL") );
+    TBool result = EFalse;
+
+    if( iIsDriveSelectionRequired )
+        {
+        AddMemorySelectionL();
+        }
+    AddCertificatesL( aCertificates, aPkixResults );
+
+    switch( aSigValidationResult )
+        {
+        case Swi::EValidationSucceeded:
+            result = ShowConfirmationL( aAppInfo );
+            break;
+
+        case Swi::ESignatureSelfSigned:
+        case Swi::ENoCertificate:
+        case Swi::ECertificateValidationError:
+        case Swi::ESignatureNotPresent:
+        case Swi::ESignatureCouldNotBeValidated:
+        case Swi::ENoCodeSigningExtension:
+        case Swi::ENoSupportedPolicyExtension:
+        case Swi::EMandatorySignatureMissing:
+            if( aInstallAnyway )
+                {
+                result = ShowConfirmationL( aAppInfo );
+                }
+            break;
+
+        default:
+            break;
+        }
+
+    return result;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayOcspResultL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplayOcspResultL( const Swi::CAppInfo& /*aAppInfo*/,
+        Swi::TRevocationDialogMessage aMessage, RPointerArray<TOCSPOutcome>& /*aOutcomes*/,
+        RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/, TBool aWarningOnly )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayOcspResultL") );
+    TBool okToContinue = EFalse;
+
+    if( aWarningOnly && !IsOcspMandatoryL() )
+        {
+        // TODO: localised UI string needed, see R_SISXUI_OCSP_SECURITY_WARNING
+        _LIT( KText, "Installation security warning. Unable to verify supplier. Continue anyway?" );
+        if( ShowQuestionL( KText ) )
+            {
+            okToContinue = ETrue;
+            }
+        }
+
+    if( !okToContinue )
+        {
+        SetOcspErrorL( aMessage );
+        }
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayCannotOverwriteFileL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandler::DisplayCannotOverwriteFileL( const Swi::CAppInfo& /*aAppInfo*/,
+        const Swi::CAppInfo& /*aInstalledAppInfo*/, const TDesC& /*aFileName*/ )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayCannotOverwriteFileL") );
+
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayMissingDependencyL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplayMissingDependencyL( const Swi::CAppInfo& /*aAppInfo*/,
+        const TDesC& /*aDependencyName*/, TVersion /*aWantedVersionFrom*/,
+        TVersion /*aWantedVersionTo*/, TVersion /*aInstalledVersion*/ )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayMissingDependencyL") );
+
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayUninstallL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::DisplayUninstallL( const Swi::CAppInfo& /*aAppInfo*/ )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayUninstallL") );
+
+    iOperationPhase = EUninstalling;
+    return ETrue;       // uninstall is always silent
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayPreparingInstallL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandler::DisplayPreparingInstallL( const TDesC& /*aFileName*/ )
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayPreparingInstallL") );
+    // TODO: display preparing install
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayCompleteL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandler::DisplayCompleteL()
+    {
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayCompleteL") );
+
+    iSifUi->ShowCompleteL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::DisplayFailedL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandler::DisplayFailedL( const CSisxSifPluginErrorHandler& aError )
+    {
+    FLOG_1( _L("CSisxSifPluginUiHandler::DisplayFailedL, error code %d"), aError.ErrorCode() );
+
+    CSifUiErrorInfo* errorInfo = CSifUiErrorInfo::NewLC( aError.ErrorCategory(),
+        aError.ErrorCode(), aError.ExtendedErrorCode(), aError.ErrorMessage(),
+        aError.ErrorMessageDetails() );
+    iSifUi->ShowFailedL( *errorInfo );
+    CleanupStack::PopAndDestroy( errorInfo );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::CSisxSifPluginUiHandler()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginUiHandler::CSisxSifPluginUiHandler( RFs& aFs,
+        CSisxSifPluginErrorHandler& aErrorHandler ) :
+        CSisxSifPluginUiHandlerBase( aFs, aErrorHandler )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandler::ConstructL()
+    {
+    iSifUi = CSifUi::NewL();
+    iSelectionCache = CSisxSifUiSelectionCache::NewL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::AddMemorySelectionL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandler::AddMemorySelectionL()
+    {
+    TInt64 adjustedSize = iMaxInstalledSize + KFreeSpaceTreshold;
+
+    TDriveList driveList;
+    TInt driveCount = 0;
+    TInt err = DriveInfo::GetUserVisibleDrives( iFs, driveList, driveCount );
+    User::LeaveIfError( err );
+
+    iSelectableDrives.Reset();
+    TInt driveListLength = driveList.Length();
+    for( TInt driveNumber = 0; driveNumber < driveListLength; driveNumber++ )
+        {
+        if( driveList[ driveNumber ] )
+            {
+            TUint driveStatus = 0;
+            err = DriveInfo::GetDriveStatus( iFs, driveNumber, driveStatus );
+            if( !err && !( driveStatus & DriveInfo::EDriveRemote ) )
+                {
+                TVolumeInfo volumeInfo;
+                err = iFs.Volume( volumeInfo, driveNumber );
+                if( !err && volumeInfo.iFree > adjustedSize )
+                    {
+                    iSelectableDrives.Append( driveNumber );
+                    }
+                }
+            }
+        }
+    iSifUi->SetMemorySelectionL( iSelectableDrives );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::AddCertificatesL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandler::AddCertificatesL(
+        RPointerArray<Swi::CCertificateInfo>& aCertificates,
+        RPointerArray<CPKIXValidationResultBase>& aPkixResults )
+    {
+    ASSERT( aCertificates.Count() == aPkixResults.Count() );
+
+    RPointerArray<CSifUiCertificateInfo> certificates;
+    CleanupResetAndDestroyPushL( certificates );
+
+    for( TInt index = 0; index < aCertificates.Count(); ++index )
+        {
+        TValidationStatus status = aPkixResults[ index ]->Error();
+        if( status.iReason == EValidatedOK )
+            {
+            CSifUiCertificateInfo* cert = CSifUiCertificateInfo::NewLC( *aCertificates[ index ] );
+            certificates.AppendL( cert );
+            CleanupStack::Pop( cert );
+            }
+        }
+    iSifUi->SetCertificateInfoL( certificates );
+    CleanupStack::PopAndDestroy( &certificates );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::GetAppInfoLC()
+// ---------------------------------------------------------------------------
+//
+CSifUiAppInfo* CSisxSifPluginUiHandler::GetAppInfoLC( const Swi::CAppInfo& aAppInfo )
+    {
+    CSifUiAppInfo *appInfo = CSifUiAppInfo::NewLC( aAppInfo.AppName(), aAppInfo.AppVendor(),
+            aAppInfo.AppVersion(), iMaxInstalledSize, iLogo );
+    return appInfo;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::ShowProgressL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandler::ShowProgressL( const Swi::CAppInfo& aAppInfo,
+        TInt aProgressBarFinalValue, CSifUi::TInstallingPhase aPhase )
+    {
+    CSifUiAppInfo *appInfo = GetAppInfoLC( aAppInfo );
+    iSifUi->ShowProgressL( *appInfo, aProgressBarFinalValue, aPhase );
+    CleanupStack::PopAndDestroy( appInfo );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::ShowConfirmationL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandler::ShowConfirmationL( const Swi::CAppInfo& aAppInfo )
+    {
+    CSifUiAppInfo *appInfo = GetAppInfoLC( aAppInfo );
+    TBool result = iSifUi->ShowConfirmationL( *appInfo );
+    CleanupStack::PopAndDestroy( appInfo );
+    return result;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginuihandlerbase.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,451 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Base class for SISX SIF plugin UI handlers.
+*
+*/
+
+#include "sisxsifpluginuihandlerbase.h"     // CSisxSifPluginUiHandlerBase
+#include "sisxsifplugininstallparams.h"     // CSisxSifPluginInstallParams
+#include "sisxsifpluginerrorhandler.h"      // CSisxSifPluginErrorHandler
+#include "sisxsifcleanuputils.h"            // CleanupResetAndDestroyPushL
+#include <centralrepository.h>              // CRepository
+#include <SWInstallerInternalCRKeys.h>      // KCRUidSWInstallerSettings
+#include <hb/hbwidgets/hbdevicemessageboxsymbian.h> // CHbDeviceMessageBoxSymbian
+#include <usif/scr/screntries.h>            // CComponentEntry
+
+using namespace Usif;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::CSisxSifPluginUiHandlerBase()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginUiHandlerBase::CSisxSifPluginUiHandlerBase( RFs& aFs,
+        CSisxSifPluginErrorHandler& aErrorHandler ) : iFs( aFs ),
+        iErrorHandler( aErrorHandler )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::~CSisxSifPluginUiHandlerBase()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginUiHandlerBase::~CSisxSifPluginUiHandlerBase()
+    {
+    delete iInstallParams;
+    delete iPublishSifOperationInfo;
+    delete iGlobalComponentId;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::SetInstallParamsL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::SetInstallParamsL(
+        const CSisxSifPluginInstallParams& aInstallParams )
+    {
+    if( iInstallParams )
+        {
+        delete iInstallParams;
+        iInstallParams = NULL;
+        }
+    iInstallParams = CSisxSifPluginInstallParams::NewL( aInstallParams );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::SetMaxInstalledSize()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::SetMaxInstalledSize( TInt aSize )
+    {
+    iMaxInstalledSize = aSize;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::SetDriveSelectionRequired()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::SetDriveSelectionRequired( TBool aIsRequired )
+    {
+    iIsDriveSelectionRequired = aIsRequired;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::IsOcspMandatoryL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerBase::IsOcspMandatoryL() const
+    {
+    CRepository* cenRep = CRepository::NewLC( KCRUidSWInstallerSettings );
+    TInt ocspProcedure = ESWInstallerOcspProcedureOff;
+    User::LeaveIfError( cenRep->Get( KSWInstallerOcspProcedure, ocspProcedure ) );
+    CleanupStack::PopAndDestroy( cenRep );
+    return ( ocspProcedure == ESWInstallerOcspProcedureMust );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::PublishStartL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::PublishStartL( const CComponentInfo::CNode& aRootNode )
+    {
+    RPointerArray<HBufC> appNames;
+    CleanupResetAndDestroyPushL( appNames );
+    RPointerArray<HBufC> appIcons;
+    CleanupResetAndDestroyPushL( appIcons );
+
+    const RPointerArray<CComponentInfo::CApplicationInfo>& apps = aRootNode.Applications();
+    for( TInt index = 0; index < apps.Count(); ++index )
+        {
+        HBufC* name = apps[ index ]->Name().AllocLC();
+        appNames.AppendL( name );
+        CleanupStack::Pop( name );
+        HBufC* icon = apps[ index ]->IconFileName().AllocLC();
+        appIcons.AppendL( icon );
+        CleanupStack::Pop( icon );
+        }
+
+    if( iGlobalComponentId )
+        {
+        delete iGlobalComponentId;
+        iGlobalComponentId = NULL;
+        }
+    iGlobalComponentId = aRootNode.GlobalComponentId().AllocL();
+
+    CSifOperationStartData* data = CSifOperationStartData::NewLC( *iGlobalComponentId,
+            aRootNode.ComponentName(), appNames, appIcons, aRootNode.MaxInstalledSize(),
+            KNullDesC, KNullDesC, aRootNode.SoftwareTypeName(), iOperationPhase );
+
+    if( !iPublishSifOperationInfo )
+        {
+        iPublishSifOperationInfo = CPublishSifOperationInfo::NewL();
+        }
+    iPublishSifOperationInfo->PublishStartL( *data );
+
+    CleanupStack::PopAndDestroy( 3, &appNames );    // data, appIcons, appNames
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::PublishStartL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::PublishStartL( const CComponentEntry& aEntry )
+    {
+    RPointerArray<HBufC> appNames;
+    CleanupResetAndDestroyPushL( appNames );
+    RPointerArray<HBufC> appIcons;
+    CleanupResetAndDestroyPushL( appIcons );
+
+    if( iGlobalComponentId )
+        {
+        delete iGlobalComponentId;
+        iGlobalComponentId = NULL;
+        }
+    iGlobalComponentId = aEntry.GlobalId().AllocL();
+
+    CSifOperationStartData* data = CSifOperationStartData::NewLC( *iGlobalComponentId,
+            aEntry.Name(), appNames, appIcons, aEntry.ComponentSize(),
+            KNullDesC, KNullDesC, aEntry.SoftwareType(), iOperationPhase );
+
+    if( !iPublishSifOperationInfo )
+        {
+        iPublishSifOperationInfo = CPublishSifOperationInfo::NewL();
+        }
+    iPublishSifOperationInfo->PublishStartL( *data );
+
+    CleanupStack::PopAndDestroy( 3, &appNames );    // data, appIcons, appNames
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::PublishProgressL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::PublishProgressL( TSifOperationSubPhase aSubPhase )
+    {
+    User::LeaveIfNull( iPublishSifOperationInfo );
+    CSifOperationProgressData* data = CSifOperationProgressData::NewLC( *iGlobalComponentId,
+            iOperationPhase, aSubPhase, iProgressBarCurrentValue, iProgressBarFinalValue );
+    iPublishSifOperationInfo->PublishProgressL( *data );
+    CleanupStack::PopAndDestroy( data );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::PublishCompletionL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::PublishCompletionL()
+    {
+    User::LeaveIfNull( iPublishSifOperationInfo );
+    CSifOperationEndData* data = CSifOperationEndData::NewLC( *iGlobalComponentId,
+            iErrorHandler.ErrorCategory(), iErrorHandler.ErrorCode(),
+            iErrorHandler.ErrorMessage(), iErrorHandler.ErrorMessageDetails() );
+    iPublishSifOperationInfo->PublishCompletionL( *data );
+    CleanupStack::PopAndDestroy( data );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::SetErrorL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::SetErrorL( TInt aErrorCode, TInt aExtErrorCode )
+    {
+    iErrorHandler.SetErrorCode( aErrorCode );
+    iErrorHandler.SetExtendedErrorCode( aExtErrorCode );
+
+    // TODO: localized UI strings needed
+    switch( iErrorHandler.ErrorCategory() )
+        {
+        case ELowMemory:
+            // txt_error_info_there_is_not_enough_memory_currentl
+            iErrorHandler.SetErrorMessage( _L("There is not enough memory currently.") );
+            break;
+        case ELowDiskSpace:
+            // txt_error_info_there_is_not_enough_space_currently
+            iErrorHandler.SetErrorMessage( _L("There is not enough space currently in this drive.") );
+            break;
+        case ENetworkUnavailable:
+            // txt_error_info_network_is_unavailable_currently
+            iErrorHandler.SetErrorMessage( _L("Network  is unavailable currently.") );
+            break;
+        case EInstallerBusy:
+            // txt_error_info_installer_is_busy_currently
+            iErrorHandler.SetErrorMessage( _L("Installer is busy currently.") );
+            break;
+        case ECorruptedPackage:
+            // txt_error_info_installation_package_is_corrupted
+            iErrorHandler.SetErrorMessage( _L("Installation package is corrupted. You may want to try again.") );
+            break;
+        case EApplicationNotCompatible:
+            // txt_error_info_application_is_not_compatible_with
+            iErrorHandler.SetErrorMessage( _L("Application is not compatible with this device.") );
+            break;
+        case ESecurityError:
+            // txt_error_info_there_is_a_security_issue_with_this
+            iErrorHandler.SetErrorMessage( _L("There is a security issue with this application.") );
+            break;
+        case EUnexpectedError:
+        case EUnknown:
+            // txt_error_info_an_unexpected_error_occurred
+            iErrorHandler.SetErrorMessage( _L("An unexpected error occurred.") );
+            break;
+        case EUserCancelled:
+            if( iOperationPhase == EInstalling )
+                {
+                // txt_error_info_application_not_installed
+                iErrorHandler.SetErrorMessage( _L("Application not installed.") );
+                }
+            else
+                {
+                // txt_error_info_application_not_deleted
+                iErrorHandler.SetErrorMessage( _L("Application not deleted. ") );
+                }
+            break;
+        case EUninstallationBlocked:
+            // txt_error_info_application_cannot_be_deleted
+            iErrorHandler.SetErrorMessage( _L("Application cannot be deleted.") );
+            break;
+        case ENone:
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::SetErrorL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::SetErrorL( TInt aErrorCode, TInt aExtErrorCode,
+    const TDesC& aErrMsgDetails )
+    {
+    SetErrorL( aErrorCode, aExtErrorCode );
+    iErrorHandler.SetErrorMessageDetails( aErrMsgDetails );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::SetErrorSwiErrorL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::SetErrorSwiErrorL( Swi::TErrorDialog aType,
+        const TDesC& /*aParam*/ )
+    {
+    // TODO: localised detailed error messages
+    // TODO: append aParam when message supports parameters
+    TBuf<512> details;
+    switch( aType )
+        {
+        case Swi::EUiAlreadyInRom:
+            details.Copy(_L("EUiAlreadyInRom"));
+            break;
+        case Swi::EUiMissingDependency:
+            details.Copy(_L("EUiMissingDependency"));
+            break;
+        case Swi::EUiRequireVer:
+            details.Copy(_L("EUiRequireVer"));
+            break;
+        case Swi::EUiRequireVerOrGreater:
+            details.Copy(_L("EUiRequireVerOrGreater"));
+            break;
+        case Swi::EUiFileCorrupt:
+            details.Copy(_L("EUiFileCorrupt"));
+            break;
+        case Swi::EUiDiskNotPresent:
+            details.Copy(_L("EUiDiskNotPresent"));
+            break;
+        case Swi::EUiCannotRead:
+            details.Copy(_L("EUiCannotRead"));
+            break;
+        case Swi::EUiCannotDelete:
+            details.Copy(_L("EUiCannotDelete"));
+            break;
+        case Swi::EUiInvalidFileName:
+            details.Copy(_L("EUiInvalidFileName"));
+            break;
+        case Swi::EUiFileNotFound:
+            details.Copy(_L("EUiFileNotFound"));
+            break;
+        case Swi::EUiInsufficientSpaceOnDrive:
+            details.Copy(_L("EUiInsufficientSpaceOnDrive"));
+            break;
+        case Swi::EUiCapabilitiesCannotBeGranted:
+            // aParam contains list of capability names
+            details.Copy(_L("Cannot grant capabilities requested by the application."));
+            break;
+        case Swi::EUiUnknownFile:
+            details.Copy(_L("EUiUnknownFile"));
+            break;
+        case Swi::EUiMissingBasePackage:
+            details.Copy(_L("EUiMissingBasePackage"));
+            break;
+        case Swi::EUiConstraintsExceeded:
+            details.Copy(_L("EUiConstraintsExceeded"));
+            break;
+        case Swi::EUiSIDViolation:
+            details.Copy(_L("EUiSIDViolation"));
+            break;
+        case Swi::EUiVIDViolation:
+            details.Copy(_L("EUiVIDViolation"));
+            break;
+        case Swi::EUiNoMemoryInDrive:
+            details.Copy(_L("EUiNoMemoryInDrive"));
+            break;
+        case Swi::EUiUIDPackageViolation:
+            details.Copy(_L("EUiUIDPackageViolation"));
+            break;
+        case Swi::EUiOSExeViolation:
+            details.Copy(_L("EUiOSExeViolation"));
+            break;
+        case Swi::EUiSIDMismatch:
+            details.Copy(_L("EUiSIDMismatch"));
+            break;
+        case Swi::EUiBlockingEclipsingFile:
+            details.Copy(_L("EUiBlockingEclipsingFile"));
+            break;
+        default:
+            break;
+        }
+
+    SetErrorL( KErrGeneral, aType, details );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::SetOcspErrorL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::SetOcspErrorL( Swi::TRevocationDialogMessage aMessage )
+    {
+    // TODO: localised error strings needed
+    iErrorHandler.SetErrorMessage( _L("Unable to check certificate validity online." ) );
+    iErrorHandler.SetExtendedErrorCode( aMessage );
+    switch( aMessage )
+        {
+        case Swi::EInvalidRevocationServerUrl:
+            iErrorHandler.SetErrorCode( KErrGeneral );
+            iErrorHandler.SetErrorMessageDetails( _L("Invalid server URL. Check settings.") );
+            break;
+        case Swi::EUnableToObtainCertificateStatus:
+            iErrorHandler.SetErrorCode( KErrGeneral );
+            iErrorHandler.SetErrorMessageDetails( _L("Unable to obtain certificate status. Try again later.") );
+            break;
+        case Swi::EResponseSignatureValidationFailure:
+            iErrorHandler.SetErrorCode( KErrGeneral );
+            iErrorHandler.SetErrorMessageDetails( _L("Response signature validation failure. Check settings.") );
+            break;
+        case Swi::EInvalidRevocationServerResponse:
+            iErrorHandler.SetErrorCode( KErrGeneral );
+            iErrorHandler.SetErrorMessageDetails( _L("The OCSP server reply is invalid. Check settings.") );
+            break;
+        case Swi::EInvalidCertificateStatusInformation:
+        case Swi::ECertificateStatusIsUnknownSelfSigned:
+            iErrorHandler.SetErrorCode( KErrGeneral );
+            iErrorHandler.SetErrorMessageDetails( _L("Invalid certificate status information. Try again later.") );
+            break;
+        case Swi::ECertificateStatusIsUnknown:
+            iErrorHandler.SetErrorCode( KErrGeneral );
+            iErrorHandler.SetErrorMessageDetails( _L("Unknown certificate. Try again later.") );
+            break;
+        case Swi::ECertificateStatusIsRevoked:
+            iErrorHandler.SetErrorCode( KErrAccessDenied );
+            iErrorHandler.SetErrorMessageDetails( _L("The certificate has been revoked.") );
+            break;
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::ShowQuestionL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerBase::ShowQuestionL( const TDesC& aText ) const
+    {
+    TBool questionAccepted = EFalse;
+
+    CHbDeviceMessageBoxSymbian *note = NULL;
+    note = CHbDeviceMessageBoxSymbian::NewL( CHbDeviceMessageBoxSymbian::EQuestion );
+    CleanupStack::PushL( note );
+
+    note->SetTextL( aText );
+    note->SetTimeout( 0 );
+    if( note->ExecL() == CHbDeviceMessageBoxSymbian::EAcceptButton )
+        {
+        questionAccepted = ETrue;
+        }
+
+    CleanupStack::PopAndDestroy( note );
+    return questionAccepted;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::ShowQuestionWithContinueL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::ShowQuestionWithContinueL( const TDesC& aText ) const
+    {
+    CHbDeviceMessageBoxSymbian *note = NULL;
+    note = CHbDeviceMessageBoxSymbian::NewL( CHbDeviceMessageBoxSymbian::EQuestion );
+    CleanupStack::PushL( note );
+
+    note->SetTextL( aText );
+    note->SetTimeout( 0 );
+    note->SetButton( CHbDeviceMessageBoxSymbian::EAcceptButton, EFalse );
+    note->SetButton( CHbDeviceMessageBoxSymbian::ERejectButton, ETrue );
+    // TODO: localized UI string needed
+    note->SetButtonTextL( CHbDeviceMessageBoxSymbian::ERejectButton, _L("Continue") );
+    (void)note->ExecL();
+
+    CleanupStack::PopAndDestroy( note );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginuihandlersilent.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,618 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Native SISX SIF (Software Install Framework) plugin.
+*
+*/
+
+#include "sisxsifpluginuihandlersilent.h"   // CSisxSifPluginUiHandlerSilent
+#include "sisxsifplugininstallparams.h"     // CSisxSifPluginInstallParams
+#include "sisxsifpluginerrorhandler.h"      // CSisxSifPluginErrorHandler
+#include "sisxsifplugin.pan"                // Panic codes
+#include "sisxsifcleanuputils.h"            // CleanupResetAndDestroyPushL
+#include "sisxsifpluginerrors.h"            // Error codes
+
+using namespace Usif;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::NewL()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginUiHandlerSilent* CSisxSifPluginUiHandlerSilent::NewL( RFs& aFs,
+        CSisxSifPluginErrorHandler& aErrorHandler )
+    {
+    CSisxSifPluginUiHandlerSilent *self = new( ELeave ) CSisxSifPluginUiHandlerSilent(
+            aFs, aErrorHandler );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::~CSisxSifPluginUiHandlerSilent()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginUiHandlerSilent::~CSisxSifPluginUiHandlerSilent()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayTextL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplayTextL( const Swi::CAppInfo& /*aAppInfo*/,
+        Swi::TFileTextOption aOption, const TDesC& aText )
+    {
+	TBool okToContinue = EFalse;
+
+	if( iInstallParams )
+		{
+		switch( iInstallParams->PackageInfo() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			    switch( aOption )
+			        {
+			        case Swi::EInstFileTextOptionContinue:
+			            ShowQuestionWithContinueL( aText );
+                        okToContinue = ETrue;
+			            break;
+			        case Swi::EInstFileTextOptionSkipOneIfNo:
+			            okToContinue = ShowQuestionL( aText );
+			            break;
+			        case Swi::EInstFileTextOptionAbortIfNo:
+			        case Swi::EInstFileTextOptionExitIfNo:
+			            okToContinue = ShowQuestionL( aText );
+			            break;
+			        case Swi::EInstFileTextOptionForceAbort:
+			            ShowQuestionWithContinueL( aText );
+			            break;
+			        default:
+			            break;
+			        }
+				break;
+			case ENotAllowed:
+			default:
+		        SetErrorL( KErrPermissionDenied, ESifUiNeedsPackageInfoParameter, aText );
+				break;
+			}
+		}
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayErrorL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerSilent::DisplayErrorL( const Swi::CAppInfo& /*aAppInfo*/,
+        Swi::TErrorDialog aType, const TDesC& aParam )
+    {
+    SetErrorSwiErrorL( aType, aParam );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayDependencyBreakL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplayDependencyBreakL( const Swi::CAppInfo& /*aAppInfo*/,
+        const RPointerArray<TDesC>& /*aComponents*/ )
+    {
+	TBool okToContinue = EFalse;
+
+	if( iInstallParams )
+		{
+		switch( iInstallParams->AllowAppBreakDependency() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+			    SetErrorL( KErrPermissionDenied, ESifUiNeedsAllowAppBreakDependencyParameter );
+				break;
+			}
+		}
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayApplicationsInUseL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplayApplicationsInUseL( const Swi::CAppInfo& /*aAppInfo*/,
+        const RPointerArray<TDesC>& /*aAppNames*/ )
+    {
+	TBool okToContinue = EFalse;
+
+	if( iInstallParams )
+		{
+		switch( iInstallParams->AllowAppShutdown() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+			    SetErrorL( KErrPermissionDenied, ESifUiNeedsAllowAppShutdownParameter );
+				break;
+			}
+		}
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayQuestionL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplayQuestionL( const Swi::CAppInfo& /*aAppInfo*/,
+        Swi::TQuestionDialog aQuestion, const TDesC& aDes )
+    {
+	TBool okToContinue = EFalse;
+
+    switch( aQuestion )
+        {
+        case Swi::EQuestionIncompatible:
+        	if( iInstallParams )
+        		{
+				switch( iInstallParams->AllowIncompatible() )
+					{
+					case EAllowed:
+						okToContinue = ETrue;
+						break;
+                    case EUserConfirm:
+					case ENotAllowed:
+					default:
+						break;
+					}
+        		}
+        	if( !okToContinue )
+        	    {
+                SetErrorL( KErrPermissionDenied, ESifUiNeedsAllowIncompatibleParameter, aDes );
+        	    }
+            break;
+
+        case Swi::EQuestionOverwriteFile:
+        	if( iInstallParams )
+        		{
+				switch( iInstallParams->AllowOverwrite() )
+					{
+					case EAllowed:
+						okToContinue = ETrue;
+						break;
+					case EUserConfirm:
+					case ENotAllowed:
+					default:
+						break;
+					}
+        		}
+        	if( !okToContinue )
+        	    {
+                SetErrorL( KErrPermissionDenied, ESifUiNeedsAllowOverwriteParameter, aDes );
+                }
+        	break;
+
+        default:
+            SetErrorL( KErrNotSupported, KErrNotSupported, aDes );
+            break;
+        }
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayInstallL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplayInstallL( const Swi::CAppInfo& /*aAppInfo*/,
+        const CApaMaskedBitmap* /*aLogo*/,
+        const RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/ )
+    {
+    iOperationPhase = EInstalling;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayGrantCapabilitiesL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplayGrantCapabilitiesL( const Swi::CAppInfo& /*aAppInfo*/,
+        const TCapabilitySet& /*aCapabilitySet*/ )
+    {
+	TBool okToContinue = EFalse;
+
+	if( iInstallParams )
+		{
+		switch( iInstallParams->GrantCapabilities() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+			    SetErrorL( KErrPermissionDenied, ESifUiNeedsGrantCapabilitiesParameter );
+				break;
+			}
+		}
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayLanguageL()
+// ---------------------------------------------------------------------------
+//
+TInt CSisxSifPluginUiHandlerSilent::DisplayLanguageL( const Swi::CAppInfo& /*aAppInfo*/,
+        const RArray<TLanguage>& aLanguages )
+    {
+	TInt languageIndex = 0;
+	TBool found = EFalse;
+	TInt languageCount = aLanguages.Count();
+	if( iInstallParams )
+		{
+		TLanguage lang = iInstallParams->Language();
+		TInt index = aLanguages.Find( lang );
+		if( index >= 0 && index < languageCount )
+			{
+			languageIndex = index;
+			found = ETrue;
+			}
+		}
+	if( !found )
+		{
+		TLanguage lang = User::Language();
+		TInt index = aLanguages.Find( lang );
+		if( index > 0 && index < languageCount )
+			{
+			languageIndex = index;
+			}
+		}
+    return languageIndex;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayDriveL()
+// ---------------------------------------------------------------------------
+//
+TInt CSisxSifPluginUiHandlerSilent::DisplayDriveL( const Swi::CAppInfo& /*aAppInfo*/,
+        TInt64 aSize, const RArray<TChar>& aDriveLetters,
+        const RArray<TInt64>& aDriveSpaces )
+    {
+	TInt driveIndex = 0;
+	TBool found = EFalse;
+	TInt driveCount = aDriveLetters.Count();
+	if( iInstallParams )
+		{
+		TChar driveLetter = 0;
+		RFs::DriveToChar( iInstallParams->Drive(), driveLetter );
+		TInt index = aDriveLetters.Find( driveLetter );
+		if( index >= 0 && index < driveCount )
+			{
+			if( aDriveSpaces[ index ] > aSize )
+				{
+				driveIndex = index;
+				found = ETrue;
+				}
+			}
+		}
+	// TODO: should there be some default drive?
+	if( !found )
+		{
+		User::Leave( KErrNoMemory );
+		}
+    return driveIndex;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayUpgradeL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplayUpgradeL( const Swi::CAppInfo& /*aAppInfo*/,
+        const Swi::CAppInfo& /*aExistingAppInfo*/ )
+    {
+	TBool okToContinue = EFalse;
+	if( iInstallParams )
+		{
+		switch( iInstallParams->AllowUpgrade() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+				break;
+			}
+		}
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayOptionsL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplayOptionsL( const Swi::CAppInfo& /*aAppInfo*/,
+        const RPointerArray<TDesC>& aOptions, RArray<TBool>& aSelections )
+    {
+	TBool allowOptions = EFalse;
+	if( iInstallParams )
+		{
+		switch( iInstallParams->InstallOptionalItems() )
+			{
+			case EAllowed:
+				allowOptions = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+				break;
+			}
+		}
+	for( TInt index = 0; index < aOptions.Count(); ++index )
+		{
+		aSelections[ index ] = allowOptions;
+		}
+    return ETrue;		// always ok to continue
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::HandleInstallEventL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::HandleInstallEventL( const Swi::CAppInfo& /*aAppInfo*/,
+        Swi::TInstallEvent aEvent, TInt aValue, const TDesC& /*aDes*/ )
+    {
+    switch( aEvent )
+        {
+        case Swi::EEventSetProgressBarFinalValue:
+            iProgressBarFinalValue = aValue;
+            break;
+
+        case Swi::EEventUpdateProgressBar:
+            iProgressBarCurrentValue += aValue;
+            PublishProgressL( EFileOperation );
+            break;
+
+        case Swi::EEventDevCert:
+        case Swi::EEventOcspCheckEnd:
+        case Swi::EEventAbortedInstall:
+        case Swi::EEventAbortedUnInstall:
+        case Swi::EEventCompletedInstall:
+        case Swi::EEventCompletedUnInstall:
+        case Swi::EEventCompletedNoMessage:
+        case Swi::EEventLeave:
+        default:
+            break;
+        }
+
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::HandleCancellableInstallEventL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerSilent::HandleCancellableInstallEventL(
+        const Swi::CAppInfo& /*aAppInfo*/, Swi::TInstallCancellableEvent aEvent,
+        Swi::MCancelHandler& /*aCancelHandler*/, TInt /*aValue*/, const TDesC& /*aDes*/ )
+    {
+    switch( aEvent )
+        {
+        case Swi::EEventOcspCheckStart:
+            PublishProgressL( EOCSPCheck );
+            break;
+
+        case Swi::EEventRemovingFiles:
+        case Swi::EEventCopyingFiles:
+        case Swi::EEventShuttingDownApps:
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplaySecurityWarningL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplaySecurityWarningL( const Swi::CAppInfo& /*aAppInfo*/,
+        Swi::TSignatureValidationResult aSigValidationResult,
+        RPointerArray<CPKIXValidationResultBase>& /*aPkixResults*/,
+        RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/,
+        TBool aInstallAnyway )
+    {
+    TBool okToContinue = EFalse;
+
+    switch( aSigValidationResult )
+        {
+        case Swi::EValidationSucceeded:
+        	okToContinue = ETrue;
+            break;
+
+        // TODO: check these, now same functionality as before
+        case Swi::ESignatureSelfSigned:
+        case Swi::ENoCertificate:
+        case Swi::ECertificateValidationError:
+        case Swi::ESignatureNotPresent:
+        case Swi::ESignatureCouldNotBeValidated:
+        case Swi::ENoCodeSigningExtension:
+        case Swi::ENoSupportedPolicyExtension:
+        case Swi::EMandatorySignatureMissing:
+            if( aInstallAnyway && iInstallParams )
+                {
+				switch( iInstallParams->AllowUntrusted() )
+					{
+					case EAllowed:
+						okToContinue = ETrue;
+						break;
+					case EUserConfirm:
+					case ENotAllowed:
+					default:
+						break;
+					}
+                }
+            break;
+
+        default:
+            break;
+        }
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayOcspResultL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplayOcspResultL( const Swi::CAppInfo& /*aAppInfo*/,
+        Swi::TRevocationDialogMessage aMessage, RPointerArray<TOCSPOutcome>& /*aOutcomes*/,
+        RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/, TBool aWarningOnly )
+    {
+	TBool okToContinue = EFalse;
+
+	if( aWarningOnly && !IsOcspMandatoryL() )
+		{
+	    if( iInstallParams )
+	        {
+            switch( iInstallParams->IgnoreOCSPWarnings() )
+                {
+                case EAllowed:
+                    okToContinue = ETrue;
+                    break;
+                case EUserConfirm:
+                case ENotAllowed:
+                default:
+                    break;
+                }
+	        }
+		}
+
+	if( !okToContinue )
+	    {
+	    SetOcspErrorL( aMessage );
+	    }
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayCannotOverwriteFileL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerSilent::DisplayCannotOverwriteFileL( const Swi::CAppInfo& /*aAppInfo*/,
+        const Swi::CAppInfo& /*aInstalledAppInfo*/, const TDesC& aFileName )
+    {
+    // TODO: localized UI string needed: "The package tries to overwrite file '%1' it does not own."
+	TName detailsString;
+	detailsString.Format( _L("The package tries to overwrite file '%S' it does not own."), &aFileName );
+    SetErrorL( KErrPermissionDenied, ESifUiCannotOverwriteFile, detailsString );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayMissingDependencyL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplayMissingDependencyL( const Swi::CAppInfo& /*aAppInfo*/,
+        const TDesC& /*aDependencyName*/, TVersion /*aWantedVersionFrom*/,
+        TVersion /*aWantedVersionTo*/, TVersion /*aInstalledVersion*/ )
+    {
+	TBool okToContinue = EFalse;
+
+	if( iInstallParams )
+		{
+		switch( iInstallParams->AllowAppBreakDependency() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+				break;
+			}
+		}
+
+	if( !okToContinue )
+	    {
+        SetErrorL( KErrSifMissingDependencies, 0, KNullDesC );
+	    }
+
+    return okToContinue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayUninstallL()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginUiHandlerSilent::DisplayUninstallL( const Swi::CAppInfo& /*aAppInfo*/ )
+    {
+    iOperationPhase = EUninstalling;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayPreparingInstallL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerSilent::DisplayPreparingInstallL( const TDesC& /*aFileName*/ )
+    {
+    // nothing displayed in silent mode
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayCompleteL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerSilent::DisplayCompleteL()
+    {
+    // nothing displayed in silent mode
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayFailedL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerSilent::DisplayFailedL(
+        const CSisxSifPluginErrorHandler& /*aError*/ )
+    {
+    // nothing displayed in silent mode
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::CSisxSifPluginUiHandlerSilent()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginUiHandlerSilent::CSisxSifPluginUiHandlerSilent( RFs& aFs,
+        CSisxSifPluginErrorHandler& aErrorHandler ) :
+        CSisxSifPluginUiHandlerBase( aFs, aErrorHandler )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerSilent::ConstructL()
+    {
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifuiselectioncache.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CSisxSifUiSelectionCache saves user-selections so that
+*              they can be re-used without displaying the same UI
+*              dialog again.
+*/
+
+
+#include "sisxsifuiselectioncache.h"        // CSisxSifUiSelectionCache
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CSisxSifUiSelectionCache::CSisxSifUiSelectionCache()
+// -----------------------------------------------------------------------------
+//
+CSisxSifUiSelectionCache::CSisxSifUiSelectionCache()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSisxSifUiSelectionCache::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CSisxSifUiSelectionCache::ConstructL()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSisxSifUiSelectionCache::NewL()
+// -----------------------------------------------------------------------------
+//
+CSisxSifUiSelectionCache* CSisxSifUiSelectionCache::NewL()
+    {
+    CSisxSifUiSelectionCache* self = new( ELeave ) CSisxSifUiSelectionCache();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;    
+    }
+    
+// -----------------------------------------------------------------------------
+// CSisxSifUiSelectionCache::~CSisxSifUiSelectionCache()
+// -----------------------------------------------------------------------------
+//
+CSisxSifUiSelectionCache::~CSisxSifUiSelectionCache()
+    {
+    iOptions.ResetAndDestroy();
+    iSelections.Reset(); 
+    }
+
+// -----------------------------------------------------------------------------
+// CSisxUISelectionCacheAppInfo::LanguageCached()
+// -----------------------------------------------------------------------------
+//
+TBool CSisxSifUiSelectionCache::LanguageCached() const
+    {
+    return iLanguageCached;    
+    }
+       
+// -----------------------------------------------------------------------------
+// CSisxUISelectionCacheAppInfo::Language()
+// -----------------------------------------------------------------------------
+//
+TLanguage CSisxSifUiSelectionCache::Language() const
+    {
+    return iLanguage;    
+    }
+
+// -----------------------------------------------------------------------------
+// CSisxUISelectionCacheAppInfo::SetLanguage()
+// -----------------------------------------------------------------------------
+//
+void CSisxSifUiSelectionCache::SetLanguage( const TLanguage& aLanguage )
+    {
+    iLanguage = aLanguage;   
+    iLanguageCached = ETrue;    
+    }
+     
+// -----------------------------------------------------------------------------
+// CSisxUISelectionCacheAppInfo::DriveCached()
+// -----------------------------------------------------------------------------
+//
+TBool CSisxSifUiSelectionCache::DriveCached() const
+    {
+    TBool result( EFalse );
+    
+    if( iDrive != 0 )
+        {
+        result = ETrue;        
+        }
+    return result;    
+    }
+  
+// -----------------------------------------------------------------------------
+// CSisxUISelectionCacheAppInfo::Drive()
+// -----------------------------------------------------------------------------
+//
+TDriveUnit CSisxSifUiSelectionCache::Drive() const
+    {
+    return iDrive;    
+    }
+
+// -----------------------------------------------------------------------------
+// CSisxUISelectionCacheAppInfo::SetDrive()
+// -----------------------------------------------------------------------------
+//
+void CSisxSifUiSelectionCache::SetDrive( TDriveUnit aDrive )
+    {
+    iDrive = aDrive;    
+    }
+
+// -----------------------------------------------------------------------------
+// CSisxUISelectionCacheAppInfo::OptionsCached()
+// -----------------------------------------------------------------------------
+//
+TBool CSisxSifUiSelectionCache::OptionsCached( const RPointerArray<TDesC>& aOptions ) const
+    {
+    TBool result( EFalse );
+    
+    if( iOptions.Count() > 0 && aOptions.Count() == iOptions.Count() )
+        {        
+        for( TInt index = 0; index < iOptions.Count(); ++index )
+            {
+            if( aOptions[ index ] != iOptions[ index ] )
+                {
+                result = EFalse;
+                break;                
+                }            
+            }        
+        result = ETrue;        
+        }    
+
+    return result;    
+    }
+
+// -----------------------------------------------------------------------------
+// CSisxUISelectionCacheAppInfo::Options()
+// -----------------------------------------------------------------------------
+//
+void CSisxSifUiSelectionCache::Options( RArray<TBool>& aSelections )
+    {
+    for( TInt index = 0; index < aSelections.Count(); ++index )
+        {
+        aSelections[ index ] = iSelections[ index ];
+        }    
+    }
+
+// -----------------------------------------------------------------------------
+// CSisxUISelectionCacheAppInfo::SetOptionsL()
+// -----------------------------------------------------------------------------
+//
+void CSisxSifUiSelectionCache::SetOptionsL( const RPointerArray<TDesC>& aOptions,
+        const RArray<TBool>& aSelections )
+    {
+    TInt index( 0 );
+    
+    iOptions.ResetAndDestroy();
+    iSelections.Reset();    
+
+    for( index = 0; index < aOptions.Count(); ++index )
+        {
+        HBufC* tmp = aOptions[ index ]->AllocLC();
+        iOptions.Append( tmp );        
+        }
+    
+    for( index = 0; index < aSelections.Count(); ++index )
+        {
+        iSelections.Append( aSelections[ index ] );
+        }
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test installer that uses Usif::RSoftwareInstall API.
+*
+*/
+
+#include "activerunner.h"
+#include "activerunner_symbian.h"
+
+
+ActiveRunner::ActiveRunner(bool useSif)
+{
+    d_ptr = new ActiveRunnerPrivate(this);
+    if (d_ptr) {
+        d_ptr->Initialize(useSif);
+    }
+}
+
+ActiveRunner::~ActiveRunner()
+{
+    delete d_ptr;
+}
+
+void ActiveRunner::install(const QString &fileName, bool silent, bool openfile, bool ocsp)
+{
+    if (d_ptr) {
+        d_ptr->Install(fileName, silent, openfile, ocsp);
+    }
+}
+
+void ActiveRunner::remove(const Usif::TComponentId& aComponentId, bool silent)
+{
+    if (d_ptr) {
+        d_ptr->Remove(aComponentId, silent);
+    }
+}
+
+void ActiveRunner::remove(const TUid& aUid, const TDesC8& aMime, bool silent)
+{
+    if (d_ptr) {
+        d_ptr->Remove(aUid, aMime, silent);
+    }
+}
+
+void ActiveRunner::handleCompletion()
+{
+    emit opCompleted();
+}
+
+void ActiveRunner::handleError(int error)
+{
+    emit opFailed(error);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test installer that uses Usif::RSoftwareInstall API.
+*
+*/
+
+#ifndef ACTIVERUNNER_H
+#define ACTIVERUNNER_H
+
+#include <QObject>
+#include <usif/usifcommon.h>
+
+class ActiveRunnerPrivate;
+
+
+class ActiveRunner : public QObject
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    ActiveRunner(bool useSif);
+    ~ActiveRunner();
+
+signals:
+    void opCompleted();
+    void opFailed(int error);
+
+public:     // new functions
+    void install(const QString &fileName, bool silent, bool openfile, bool ocsp);
+    void remove(const Usif::TComponentId& aComponentId, bool silent);
+    void remove(const TUid& aUid, const TDesC8& aMime, bool silent);
+
+protected:
+    void handleCompletion();
+    void handleError(int error);
+
+private:    // data
+    friend class ActiveRunnerPrivate;
+    ActiveRunnerPrivate *d_ptr;
+};
+
+#endif  // ACTIVERUNNER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner_symbian.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,250 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test installer that uses Usif::RSoftwareInstall API.
+*
+*/
+
+#include "activerunner_symbian.h"
+#include "activerunner.h"
+
+_LIT( KDefaultOcspResponderUrl, "http://4fil30423.noe.nokia.com:45000/" );
+
+
+ActiveRunnerPrivate::ActiveRunnerPrivate( ActiveRunner *aRunner ) :
+        CActive( CActive::EPriorityStandard ), q_ptr( aRunner )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+ActiveRunnerPrivate::~ActiveRunnerPrivate()
+    {
+    Cancel();
+    if( iUseSif )
+        {
+        iSoftwareInstall.Close();
+        }
+    else
+        {
+        iSWInstLauncher.Close();
+        }
+    iFs.Close();
+    delete iFileName;
+    delete iArguments;
+    delete iResults;
+    }
+
+TInt ActiveRunnerPrivate::Initialize( bool aUseSif )
+    {
+    TRAPD( err, DoInitializeL( aUseSif ) );
+    return err;
+    }
+
+TInt ActiveRunnerPrivate::Install( const QString& aFileName, bool aSilent, bool aOpenFile, bool aOcsp )
+    {
+    TRAPD( err, DoInstallL( aFileName, aSilent, aOpenFile, aOcsp ) );
+    return err;
+    }
+
+TInt ActiveRunnerPrivate::Remove( const Usif::TComponentId& aComponentId, bool aSilent )
+    {
+    TRAPD( err, DoRemoveL( aComponentId, aSilent ) );
+    return err;
+    }
+
+TInt ActiveRunnerPrivate::Remove( const TUid& aUid, const TDesC8& aMime, bool aSilent )
+    {
+    TRAPD( err, DoRemoveL( aUid, aMime, aSilent ) );
+    return err;
+    }
+
+void ActiveRunnerPrivate::DoCancel()
+    {
+    if( iUseSif )
+        {
+        iSoftwareInstall.CancelOperation();
+        }
+    else
+        {
+        iSWInstLauncher.CancelAsyncRequest( SwiUI::ERequestInstall );
+        }
+    }
+
+void ActiveRunnerPrivate::RunL()
+    {
+    User::LeaveIfError( iStatus.Int() );
+
+    RDebug::Printf( "USIFTestInstaller: Installation completed" );
+    if( q_ptr )
+        {
+        q_ptr->handleCompletion();
+        }
+    }
+
+TInt ActiveRunnerPrivate::RunError( TInt aError )
+    {
+    RDebug::Printf( "USIFTestInstaller: Error %d", aError );
+    if( q_ptr )
+        {
+        q_ptr->handleError( aError );
+        }
+    return KErrNone;
+    }
+
+void ActiveRunnerPrivate::DoInitializeL( bool aUseSif )
+    {
+    iUseSif = aUseSif;
+    User::LeaveIfError( iFs.Connect() );
+    User::LeaveIfError( iFs.ShareProtected() );
+    if( iUseSif )
+        {
+        User::LeaveIfError( iSoftwareInstall.Connect() );
+        }
+    else
+        {
+        User::LeaveIfError( iSWInstLauncher.Connect() );
+        }
+    }
+
+void ActiveRunnerPrivate::DoInstallL( const QString& aFileName, bool aSilent, bool aOpenFile, bool aOcsp )
+    {
+    if( iFileName )
+        {
+        delete iFileName;
+        iFileName = NULL;
+        }
+    iFileName = HBufC16::NewL( aFileName.length() );
+    TPtr16 fileName( iFileName->Des() );
+    fileName.Copy( reinterpret_cast<const TText*>( aFileName.constData() ) );
+
+    // Convert forward-slashes to backward-slashes
+    const TChar KBackSlash = '\\';
+    const TChar KSlash = '/';
+    for( TInt i = 0; i < fileName.Length(); ++i )
+        {
+        if( fileName[i] == KSlash )
+            {
+            fileName[i] = KBackSlash;
+            }
+        }
+
+    RFile fileHandle;
+    if( aOpenFile )
+        {
+        User::LeaveIfError( fileHandle.Open( iFs, fileName, EFileRead ) );
+        CleanupClosePushL( fileHandle );
+        }
+
+    if( iUseSif )
+        {
+        delete iArguments;
+        iArguments = NULL;
+        iArguments = Usif::COpaqueNamedParams::NewL();
+
+        delete iResults;
+        iResults = NULL;
+        iResults = Usif::COpaqueNamedParams::NewL();
+
+        if( aSilent )
+            {
+            iArguments->AddIntL( Usif::KSifInParam_InstallSilently, ETrue );
+            }
+        if( aOcsp )
+            {
+            iArguments->AddIntL( Usif::KSifInParam_PerformOCSP, Usif::EAllowed );
+            iArguments->AddStringL( Usif::KSifInParam_OCSPUrl, KDefaultOcspResponderUrl );
+            }
+
+        if( aOpenFile )
+            {
+            iSoftwareInstall.Install( fileHandle, *iArguments, *iResults, iStatus );
+            }
+        else
+            {
+            iSoftwareInstall.Install( fileName, *iArguments, *iResults, iStatus );
+            }
+        }
+    else
+        {
+        if( aSilent )
+            {
+            SwiUI::TInstallOptions defaultOptions;
+            SwiUI::TInstallOptionsPckg optPckg( defaultOptions );
+
+            if( aOpenFile )
+                {
+                iSWInstLauncher.SilentInstall( iStatus, fileHandle, optPckg );
+                }
+            else
+                {
+                iSWInstLauncher.SilentInstall( iStatus, fileName, optPckg );
+                }
+            }
+        else
+            {
+            if( aOpenFile )
+                {
+                iSWInstLauncher.Install( iStatus, fileHandle );
+                }
+            else
+                {
+                iSWInstLauncher.Install( iStatus, fileName  );
+                }
+            }
+        }
+
+    if( aOpenFile )
+        {
+        CleanupStack::PopAndDestroy( &fileHandle );
+        }
+
+    SetActive();
+    }
+
+void ActiveRunnerPrivate::DoRemoveL( const Usif::TComponentId& aComponentId, bool aSilent )
+    {
+    if( aSilent )
+        {
+        delete iArguments;
+        iArguments = NULL;
+        iArguments = Usif::COpaqueNamedParams::NewL();
+        iArguments->AddIntL( Usif::KSifInParam_InstallSilently, 1 );
+
+        delete iResults;
+        iResults = NULL;
+        iResults = Usif::COpaqueNamedParams::NewL();
+
+        iSoftwareInstall.Uninstall( aComponentId, *iArguments, *iResults, iStatus );
+        }
+    else
+        {
+        iSoftwareInstall.Uninstall( aComponentId, iStatus );
+        }
+    SetActive();
+    }
+
+void ActiveRunnerPrivate::DoRemoveL( const TUid& aUid, const TDesC8& aMime, bool aSilent )
+    {
+    if( aSilent )
+        {
+        SwiUI::TUninstallOptions defaultOptions;
+        SwiUI::TUninstallOptionsPckg optPckg( defaultOptions );
+        iSWInstLauncher.SilentUninstall( iStatus, aUid, optPckg, aMime );
+        }
+    else
+        {
+        iSWInstLauncher.Uninstall( iStatus, aUid, aMime );
+        }
+    SetActive();
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner_symbian.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test installer that uses Usif::RSoftwareInstall API.
+*
+*/
+
+#ifndef ACTIVERUNNERPRIVATE_H
+#define ACTIVERUNNERPRIVATE_H
+
+#include <e32base.h>            // CActive
+#include <usif/sif/sif.h>       // Usif::RSoftwareInstall
+#include <SWInstApi.h>          // RSWInstLauncher
+
+class ActiveRunner;
+class QString;
+
+
+class ActiveRunnerPrivate : public CActive
+{
+public:     // constructor and destructor
+    ActiveRunnerPrivate( ActiveRunner *aRunner );
+    ~ActiveRunnerPrivate();
+
+public:     // new functions
+    TInt Initialize( bool aUseSif );
+    TInt Install( const QString& aFileName, bool aSilent, bool aOpenFile, bool aOcsp );
+    TInt Remove( const Usif::TComponentId& aComponentId, bool aSilent );
+    TInt Remove( const TUid& aUid, const TDesC8& aMime, bool aSilent );
+
+protected:  // from CActive
+    void DoCancel();
+    void RunL();
+    TInt RunError(TInt aError);
+
+private:    // new functions
+    void DoInitializeL( bool aUseSif );
+    void DoInstallL( const QString& aFileName, bool aSilent, bool aOpenFile, bool aOcsp );
+    void DoRemoveL( const Usif::TComponentId& aComponentId, bool aSilent );
+    void DoRemoveL( const TUid& aUid, const TDesC8& aMime, bool aSilent );
+
+private:    // data
+    ActiveRunner *q_ptr;
+    RFs iFs;
+    HBufC* iFileName;
+    TBool iUseSif;
+    Usif::COpaqueNamedParams *iArguments;
+    Usif::COpaqueNamedParams *iResults;
+    Usif::RSoftwareInstall iSoftwareInstall;
+    SwiUI::RSWInstLauncher iSWInstLauncher;
+};
+
+#endif  // ACTIVERUNNERPRIVATE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/main.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test installer that uses Usif::RSoftwareInstall API.
+*
+*/
+
+#include "testinstaller.h"
+
+int main(int argc, char *argv[]) {
+    TestInstaller testInstaller(argc, argv);
+    testInstaller.setApplicationName("TestInstaller");
+    return testInstaller.exec();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,475 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test installer that uses Usif::RSoftwareInstall API.
+*
+*/
+
+#include "testinstaller.h"
+#include "activerunner.h"
+#include <hbmainwindow.h>
+#include <hbview.h>
+#include <hbtoolbar.h>
+#include <hbpushbutton.h>
+#include <hbcheckbox.h>
+#include <hbcombobox.h>
+#include <hblabel.h>
+#include <hbmessagebox.h>
+#include <QGraphicsLinearLayout>
+#include <QDir>
+#include <xqappmgr.h>                       // XQApplicationManager
+#include <usif/scr/scr.h>                   // RSoftwareComponentRegistry
+
+using namespace Usif;
+
+#define INSTALLS_PATH_1 "C:\\Data\\Installs\\"
+#define INSTALLS_PATH_2 "E:\\Installs\\"
+#define INSTALLS_PATH_3 "F:\\Installs\\"
+#define INSTALLS_PATH_4 "C:\\"
+#define INSTALLS_PATH_5 "E:\\"
+#define INSTALLS_PATH_6 "F:\\"
+
+
+TestInstaller::TestInstaller(int& argc, char* argv[]) : HbApplication(argc, argv),
+    mMainWindow(0), mInstallView(0), mRemoveView(0),
+    mUseSilentInstall(false), mUseSilentUninstall(false), mUseRFileInstall(false), mOcsp(false),
+    mInstallDirectories(0), mInstallableFiles(0), mRemovableApps(0),
+    mCurrentDirPath(), mCurrentFile(), mRunner(0)
+{
+    mMainWindow = new HbMainWindow();
+
+    // Install view
+    mInstallView = new HbView();
+    mInstallView->setTitle(tr("Test Installer"));
+
+    QGraphicsLinearLayout *installLayout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    HbLabel *installTitle = new HbLabel(tr("Install:"));
+    installLayout->addItem(installTitle);
+
+    mInstallDirectories = new HbComboBox;
+    mInstallDirectories->setEditable(false);
+    QStringList dirList;
+    getInstallDirs(dirList);
+    mInstallDirectories->setItems(dirList);
+    connect(mInstallDirectories, SIGNAL(currentIndexChanged(int)),
+        this, SLOT(installableDirChanged(int)));
+    installLayout->addItem(mInstallDirectories);
+
+    mInstallableFiles = new HbComboBox;
+    mInstallableFiles->setEditable(false);
+    connect(mInstallableFiles, SIGNAL(currentIndexChanged(int)),
+            this, SLOT(installableFileChanged(int)));
+    installLayout->addItem(mInstallableFiles);
+
+    QGraphicsLinearLayout *checkboxesLayout = new QGraphicsLinearLayout(Qt::Horizontal);
+    HbCheckBox *silentInstallCheckBox = new HbCheckBox;
+    silentInstallCheckBox->setText(tr("Silent"));
+    connect(silentInstallCheckBox, SIGNAL(stateChanged(int)),
+            this, SLOT(silentInstallCheckChanged(int)));
+    checkboxesLayout->addItem(silentInstallCheckBox);
+    HbCheckBox *rfileCheckBox = new HbCheckBox;
+    rfileCheckBox->setText(tr("Use RFile"));
+    connect(rfileCheckBox, SIGNAL(stateChanged(int)), this, SLOT(rfileCheckChanged(int)));
+    checkboxesLayout->addItem(rfileCheckBox);
+    HbCheckBox *ocspCheckBox = new HbCheckBox;
+    ocspCheckBox->setText(tr("OCSP"));
+    connect(ocspCheckBox, SIGNAL(stateChanged(int)), this, SLOT(ocspCheckChanged(int)));
+    checkboxesLayout->addItem(ocspCheckBox);
+    installLayout->addItem(checkboxesLayout);
+    installLayout->addStretch();
+
+    HbPushButton *installNew = new HbPushButton(tr("Install using new API"));
+    installLayout->addItem(installNew);
+    HbPushButton *installOld = new HbPushButton(tr("Install using old API"));
+    installLayout->addItem(installOld);
+    HbPushButton *launchApp = new HbPushButton(tr("Install by opening file"));
+    installLayout->addItem(launchApp);
+    HbPushButton *cancelInstall = new HbPushButton(tr("Cancel installing"));
+    installLayout->addItem(cancelInstall);
+    installLayout->addStretch();
+    connect(installNew, SIGNAL(clicked()), this, SLOT(installUsingNewApi()));
+    connect(installOld, SIGNAL(clicked()), this, SLOT(installUsingOldApi()));
+    connect(launchApp, SIGNAL(clicked()), this, SLOT(installByOpeningFile()));
+    connect(cancelInstall, SIGNAL(clicked()), this, SLOT(cancelInstalling()));
+
+    HbToolBar *installToolBar = new HbToolBar();
+    installToolBar->addAction(tr("RemoveView"), this, SLOT(removeViewActivated()));
+    installToolBar->addAction(tr("Exit"), this, SLOT(closeApp()));
+    mInstallView->setToolBar(installToolBar);
+
+    mInstallView->setLayout(installLayout);
+    mMainWindow->addView(mInstallView);
+
+    // Remove view
+    mRemoveView = new HbView();
+    mRemoveView->setTitle(tr("Test Uninstaller"));
+
+    QGraphicsLinearLayout *removeLayout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    HbLabel *uninstallTitle = new HbLabel(tr("Uninstall:"));
+    removeLayout->addItem(uninstallTitle);
+
+    mRemovableApps = new HbComboBox;
+    mRemovableApps->setEditable(false);
+    removeLayout->addItem(mRemovableApps);
+
+    HbCheckBox *silentRemoveCheckBox = new HbCheckBox;
+    silentRemoveCheckBox->setText(tr("Silent"));
+    connect(silentRemoveCheckBox, SIGNAL(stateChanged(int)),
+            this, SLOT(silentCheckChanged(int)));
+    removeLayout->addItem(silentRemoveCheckBox);
+    removeLayout->addStretch();
+
+    HbPushButton *removeNew = new HbPushButton(tr("Remove using new API"));
+    removeLayout->addItem(removeNew);
+    HbPushButton *removeOld = new HbPushButton(tr("Remove using old API"));
+    removeLayout->addItem(removeOld);
+    removeLayout->addStretch();
+    connect(removeNew, SIGNAL(clicked()), this, SLOT(removeUsingNewApi()));
+    connect(removeOld, SIGNAL(clicked()), this, SLOT(removeUsingOldApi()));
+
+    mRemoveView->setLayout(removeLayout);
+    mMainWindow->addView(mRemoveView);
+
+    HbToolBar *removeToolBar = new HbToolBar();
+    removeToolBar->addAction(tr("InstallView"), this, SLOT(installViewActivated()));
+    removeToolBar->addAction(tr("Exit"), this, SLOT(closeApp()));
+    mRemoveView->setToolBar(removeToolBar);
+
+    mMainWindow->setCurrentView(mInstallView);
+    mMainWindow->show();
+
+    changeDir(mInstallDirectories->currentText());
+    getRemovableApps();
+}
+
+TestInstaller::~TestInstaller()
+{
+    delete mRunner;
+    delete mInstallView;
+    delete mRemoveView;
+    delete mMainWindow;
+}
+
+void TestInstaller::installViewActivated()
+{
+    mMainWindow->setCurrentView(mInstallView);
+}
+
+void TestInstaller::removeViewActivated()
+{
+    mMainWindow->setCurrentView(mRemoveView);
+}
+
+void TestInstaller::silentInstallCheckChanged(int state)
+{
+    Qt::CheckState s = static_cast<Qt::CheckState>(state);
+    mUseSilentInstall = (s == Qt::Checked);
+}
+
+void TestInstaller::silentRemoveCheckChanged(int state)
+{
+    Qt::CheckState s = static_cast<Qt::CheckState>(state);
+    mUseSilentUninstall = (s == Qt::Checked);
+}
+
+void TestInstaller::rfileCheckChanged(int state)
+{
+    Qt::CheckState s = static_cast<Qt::CheckState>(state);
+    mUseRFileInstall = (s == Qt::Checked);
+}
+
+void TestInstaller::ocspCheckChanged(int state)
+{
+    Qt::CheckState s = static_cast<Qt::CheckState>(state);
+    mOcsp = (s == Qt::Checked);
+}
+
+void TestInstaller::installableDirChanged(int /*index*/)
+{
+    if (mInstallDirectories) {
+        changeDir(mInstallDirectories->currentText());
+    }
+}
+
+void TestInstaller::installableFileChanged(int /*index*/)
+{
+    if (mInstallableFiles) {
+        mCurrentFile = mCurrentDirPath;
+        mCurrentFile.append(mInstallableFiles->currentText());
+    }
+}
+
+void TestInstaller::installUsingNewApi()
+{
+    if (isFileSelected() && createRunner(true)) {
+        doInstall(mCurrentFile);
+    }
+}
+
+void TestInstaller::installUsingOldApi()
+{
+    if (isFileSelected() && createRunner(false)) {
+        doInstall(mCurrentFile);
+    }
+}
+
+void TestInstaller::installByOpeningFile()
+{
+    if (mInstallableFiles) {
+        doOpenFile(mCurrentFile);
+    }
+}
+
+void TestInstaller::cancelInstalling()
+{
+    if (mRunner) {
+        delete mRunner;
+        mRunner = 0;
+        HbMessageBox::warning(tr("Running operation deleted"));
+    } else {
+        HbMessageBox::warning(tr("No operation running"));
+    }
+}
+
+void TestInstaller::removeUsingNewApi()
+{
+    if (isFileSelected() && createRunner(true)) {
+        removeSelectedUsingNewApi();
+    }
+}
+
+void TestInstaller::removeUsingOldApi()
+{
+    if (isFileSelected() && createRunner(false)) {
+        removeSelectedUsingOldApi();
+    }
+}
+
+void TestInstaller::handleComplete()
+{
+    HbMessageBox::information(tr("Completed"));
+
+    delete mRunner;
+    mRunner = 0;
+
+    changeDir(mCurrentDirPath);
+    getRemovableApps();
+}
+
+void TestInstaller::handleError(int error)
+{
+    QString messageText;
+    if (error == KErrCancel) {
+        messageText = tr("Cancelled");
+    } else {
+        messageText = tr("Error %1").arg(error);
+    }
+    HbMessageBox::warning(messageText);
+
+    delete mRunner;
+    mRunner = 0;
+}
+
+void TestInstaller::closeApp()
+{
+    qApp->exit();
+}
+
+void TestInstaller::fileOpenOk(const QVariant &/*result*/)
+{
+    HbMessageBox::information(tr("Open ok"));
+}
+
+void TestInstaller::fileOpenFailed(int errorCode, const QString &errorMsg)
+{
+    HbMessageBox::warning(tr("Open failed: %1: %2").arg(errorCode).arg(errorMsg));
+}
+
+void TestInstaller::getInstallDirs(QStringList& dirList)
+{
+    QStringList possibleDirs;
+    possibleDirs << INSTALLS_PATH_1 << INSTALLS_PATH_2 << INSTALLS_PATH_3
+        << INSTALLS_PATH_4 << INSTALLS_PATH_5 << INSTALLS_PATH_6;
+
+    QListIterator<QString> iter(possibleDirs);
+    while (iter.hasNext()) {
+        QString dirName(iter.next());
+        QDir dir(dirName);
+        if (dir.exists()) {
+            dirList.append(dirName);
+        }
+    }
+}
+
+void TestInstaller::changeDir(const QString& dirPath)
+{
+    QDir dir(dirPath);
+    if (dir.exists()) {
+        mCurrentDirPath = dirPath;
+        mInstallableFiles->clear();
+
+        QFileInfoList list = dir.entryInfoList(QDir::Files);
+        QListIterator<QFileInfo> iter(list);
+        while (iter.hasNext()) {
+            const QFileInfo &info(iter.next());
+            mInstallableFiles->addItem(info.fileName());
+        }
+
+        mCurrentFile.clear();
+        if (mInstallableFiles->count()) {
+            mCurrentFile = mCurrentDirPath;
+            mCurrentFile.append(mInstallableFiles->currentText());
+        }
+    }
+}
+
+void TestInstaller::getRemovableApps()
+{
+    TRAP_IGNORE(doGetRemovableAppsL());
+}
+
+void TestInstaller::doGetRemovableAppsL()
+{
+    mRemovableApps->clear();
+    mRemovableComponentIds.clear();
+    mRemovableUids.clear();
+    mRemovableSoftwareTypes.clear();
+
+    RSoftwareComponentRegistry registry;
+    User::LeaveIfError(registry.Connect());
+    CleanupClosePushL(registry);
+
+    RArray<TComponentId> componentIdList;
+    CleanupClosePushL( componentIdList );
+    registry.GetComponentIdsL(componentIdList);
+    for (int i = 0; i < componentIdList.Count(); ++i) {
+        TComponentId compId = componentIdList[i];
+        CComponentEntry *compEntry = CComponentEntry::NewLC();
+        if (registry.GetComponentL(compId, *compEntry)) {
+            if (compEntry->IsRemovable()) {
+                TPtrC compName = compEntry->Name();
+                QString name = QString::fromUtf16(compName.Ptr(), compName.Length());
+                mRemovableApps->addItem(name);
+
+                mRemovableComponentIds.append(compId);
+
+                _LIT(KCompUid, "CompUid");
+                CPropertyEntry *property = registry.GetComponentPropertyL(compId, KCompUid);
+                CleanupStack::PushL(property);
+                CIntPropertyEntry* intProperty = dynamic_cast<CIntPropertyEntry*>(property);
+                mRemovableUids.append(TUid::Uid(intProperty->IntValue()));
+                CleanupStack::PopAndDestroy(property);
+
+                TPtrC softwareType = compEntry->SoftwareType();
+                if (softwareType == KSoftwareTypeNative) {
+                    mRemovableSoftwareTypes.append(Native);
+                } else if (softwareType == KSoftwareTypeJava) {
+                    mRemovableSoftwareTypes.append(Java);
+                } else {
+                    mRemovableSoftwareTypes.append(Unknown);
+                }
+            }
+        }
+        CleanupStack::PopAndDestroy(compEntry);
+    }
+
+    CleanupStack::PopAndDestroy(2, &registry);  // componentIdList, registry
+}
+
+bool TestInstaller::isFileSelected()
+{
+    if (mCurrentFile.isEmpty()) {
+        HbMessageBox::warning(tr("No files selected"));
+        changeDir(mCurrentDirPath);
+        return false;
+    }
+    return true;
+}
+
+bool TestInstaller::createRunner(bool useSif)
+{
+    if (!mRunner) {
+        mRunner = new ActiveRunner(useSif);
+        connect(mRunner, SIGNAL(opCompleted()), this, SLOT(handleComplete()));
+        connect(mRunner, SIGNAL(opFailed(int)), this, SLOT(handleError(int)));
+    } else {
+        HbMessageBox::warning(tr("Already running"));
+        return false;
+    }
+    return true;
+}
+
+void TestInstaller::doInstall(const QString &fileName)
+{
+    if (mRunner) {
+        mRunner->install(fileName, mUseSilentInstall, mUseRFileInstall, mOcsp );
+    }
+}
+
+void TestInstaller::doOpenFile(const QString &fileName)
+{
+    QFile file(fileName);
+    if (file.exists()) {
+        XQApplicationManager appManager;
+        XQAiwRequest *request = appManager.create(file);
+        if (request) {
+            connect(request, SIGNAL(requestOk(const QVariant &)),
+                this, SLOT(fileOpenOk(const QVariant &)));
+            connect(request, SIGNAL(requestError(int, const QString &)),
+                this, SLOT(fileOpenFailed(int, const QString &)));
+            QList<QVariant> args;
+            args << file.fileName();
+            request->setArguments(args);
+            if (request->send()) {
+                HbMessageBox::information(tr("Opening..."));
+            } else {
+                HbMessageBox::warning(tr("Cannot open"));
+            }
+            delete request;
+        } else {
+            HbMessageBox::warning(tr("No handler for file '%1'").arg(fileName));
+        }
+    }
+}
+
+void TestInstaller::removeSelectedUsingNewApi()
+{
+    if (mRemovableApps && mRunner) {
+        int index = mRemovableApps->currentIndex();
+        const TComponentId &compId(mRemovableComponentIds.at(index));
+        mRunner->remove(compId, mUseSilentUninstall);
+    }
+}
+
+void TestInstaller::removeSelectedUsingOldApi()
+{
+    if (mRemovableApps && mRunner) {
+        int index = mRemovableApps->currentIndex();
+        const TUid &uid(mRemovableUids.at(index));
+
+        if (mRemovableSoftwareTypes.at(index) == Native) {
+            _LIT8(KSisxMimeType, "x-epoc/x-sisx-app");
+            mRunner->remove(uid, KSisxMimeType, mUseSilentInstall);
+        } else if (mRemovableSoftwareTypes.at(index) == Java) {
+            _LIT8(KJarMIMEType, "application/java-archive");
+            mRunner->remove(uid, KJarMIMEType, mUseSilentInstall);
+        } else {
+            HbMessageBox::warning(tr("Not supported software type"));
+            delete mRunner;
+            mRunner = 0;
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test installer that uses Usif::RSoftwareInstall API.
+*
+*/
+
+#ifndef TESTINSTALLER_H
+#define TESTINSTALLER_H
+
+#include <hbapplication.h>
+#include <QStringList>
+#include <usif/usifcommon.h>
+
+class HbMainWindow;
+class HbView;
+class HbLabel;
+class HbComboBox;
+class ActiveRunner;
+
+
+class TestInstaller : public HbApplication
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    TestInstaller(int& argc, char* argv[]);
+    ~TestInstaller();
+
+private slots:
+    void installViewActivated();
+    void removeViewActivated();
+    void silentInstallCheckChanged(int state);
+    void silentRemoveCheckChanged(int state);
+    void rfileCheckChanged(int state);
+    void ocspCheckChanged(int state);
+    void installableDirChanged(int index);
+    void installableFileChanged(int index);
+    void installUsingNewApi();
+    void installUsingOldApi();
+    void installByOpeningFile();
+    void cancelInstalling();
+    void removeUsingNewApi();
+    void removeUsingOldApi();
+    void handleComplete();
+    void handleError(int error);
+    void closeApp();
+    void fileOpenOk(const QVariant &result);
+    void fileOpenFailed(int errorCode, const QString &errorMsg);
+
+private:    // functions
+    void getInstallDirs(QStringList& dirList);
+    void changeDir(const QString& dirPath);
+    void getRemovableApps();
+    void doGetRemovableAppsL();
+    bool isFileSelected();
+    bool createRunner(bool useSif);
+    void doInstall(const QString &fileName);
+    void doOpenFile(const QString &fileName);
+    void removeSelectedUsingNewApi();
+    void removeSelectedUsingOldApi();
+
+private:    // data
+    HbMainWindow *mMainWindow;
+    HbView       *mInstallView;
+    HbView       *mRemoveView;
+    bool         mUseSilentInstall;
+    bool         mUseSilentUninstall;
+    bool         mUseRFileInstall;
+    bool         mOcsp;
+    HbComboBox   *mInstallDirectories;
+    HbComboBox   *mInstallableFiles;
+    HbComboBox   *mRemovableApps;
+    QList<Usif::TComponentId> mRemovableComponentIds;
+    QList<TUid>  mRemovableUids;
+    enum TSoftwareType {
+        Unknown,
+        Native,
+        Java
+    };
+    QList<TSoftwareType>  mRemovableSoftwareTypes;
+    QString      mCurrentDirPath;
+    QString      mCurrentFile;
+    ActiveRunner *mRunner;
+};
+
+#endif  // TESTINSTALLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Package info file for test installer
+*
+*/
+
+#ifndef __TESTINSTALLER_IBY__
+#define __TESTINSTALLER_IBY__
+
+file=ABI_DIR/BUILD_DIR/testinstaller.exe SHARED_LIB_DIR/testinstaller.exe
+HB_UPGRADABLE_APP_REG_RSC( testinstaller )
+
+#endif  // __TESTINSTALLER_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description: Package info file for test installer
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"testinstaller"},(0x0fe91d97),1,0,0
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Manual PKG pre-rules from PRO files
+; Default HW/platform dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+ 
+; Default dependency to Qt libraries
+(0x2001E61C), *, *, *, {"Qt"}
+
+; Executable and default resource files
+"/epoc32/release/armv5/urel/testinstaller.exe" - "!:\sys\bin\testinstaller.exe"
+"/epoc32/data/z/resource/apps/testinstaller.rsc" - "!:\resource\apps\testinstaller.rsc"
+"/epoc32/data/z/private/10003a3f/import/apps/testinstaller_reg.rsc" - "!:\private\10003a3f\import\apps\testinstaller_reg.rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,53 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:  Test installer that uses Usif::RSoftwareInstall API.
+#
+#
+
+
+TEMPLATE = app
+TARGET = testinstaller
+DEPENDPATH += .
+INCLUDEPATH += .
+
+HEADERS +=  testinstaller.h \
+		activerunner.h
+SOURCES +=  testinstaller.cpp \
+		activerunner.cpp \
+        main.cpp
+
+symbian {
+    TARGET.CAPABILITY = ALL -TCB
+    TARGET.UID2 = 0x100039ce
+    TARGET.UID3 = 0x0fe91d97      // random UID
+    TARGET.VID = VID_DEFAULT
+
+    INCLUDEPATH += /epoc32/include/mw \ 
+        /epoc32/include/platform/mw \
+        /epoc32/include/mw/hb/hbcore \
+        /epoc32/include/mw/hb/hbwidgets
+    LIBS += -lHbCore -lHbWidgets -lxqservice -lsif -lscrclient -lswinstcli -lefsrv 
+
+	HEADERS += activerunner_symbian.h
+	SOURCES += activerunner_symbian.cpp
+	
+    rssrules = \
+        "newfile = KAppDoesNotSupportNewFile;"
+    RSS_RULES += rssrules
+}
+
+BLD_INF_RULES.prj_exports += \
+  "$${LITERAL_HASH}include <platform_paths.hrh>" \
+  "testinstaller.iby CORE_APP_LAYER_IBY_EXPORT_PATH(testinstaller.iby)"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/inc/sisxsilentinstallindicator.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+#ifndef SISXSILENTINSTALLINDICATOR_H
+#define SISXSILENTINSTALLINDICATOR_H
+
+#include <QObject>
+#include <hbindicatorinterface.h>
+
+/**
+ * SWI Daemon sisx silent install universal indicator class. 
+ * Handles client request and showing the indications. 
+ */
+class SisxSilentInstallIndicator : public HbIndicatorInterface
+{
+public:
+    /**
+     * Constructor
+     */
+    SisxSilentInstallIndicator(const QString &indicatorType);
+    
+    /**
+     * Destructor
+     */
+    ~SisxSilentInstallIndicator();
+    
+    /**
+     * @see HbIndicatorInterface
+     */
+    bool handleInteraction(InteractionType type);
+    
+    /**
+     * @see HbIndicatorInterface
+     */
+    QVariant indicatorData(int role) const;
+    
+protected:
+    /**
+     * @see HbIndicatorInterface
+     */
+    bool handleClientRequest(RequestType type, const QVariant &parameter);
+    
+private: 
+    
+private:
+    
+    int mUpdateValue;
+    bool mIsInstallProcess;
+    
+};
+
+#endif // SISXSILENTINSTALLINDICATOR_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/inc/sisxsilentinstallindicatorplugin.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  
+ *
+ */
+
+#ifndef SISXSILENTINSTALLINDICATORPLUGIN_H
+#define SISXSILENTINSTALLINDICATORPLUGIN_H
+
+#include <QObject>
+#include <QStringList>
+#include <QVariant>
+#include <hbindicatorplugininterface.h>
+#include <hbindicatorinterface.h>
+
+/**
+ * SWI Daemon sisx silent install indicator plugin class. 
+ * Main class of indicator plugin. 
+ */
+class SisxSilentInstallIndicatorPlugin : public QObject, 
+                                         public HbIndicatorPluginInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(HbIndicatorPluginInterface)
+
+public:
+    /**
+     * Constructor
+     */
+     SisxSilentInstallIndicatorPlugin();
+     
+     /**
+      * Destructor
+      */
+    ~SisxSilentInstallIndicatorPlugin();
+    
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    QStringList indicatorTypes() const;
+    
+    /**
+     * @see HbIndicatorPluginInterface
+     */   
+    bool accessAllowed(const QString &indicatorType,
+                       const QVariantMap &securityInfo) const;
+      
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    HbIndicatorInterface* createIndicator(const QString &indicatorType);
+    
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    int error() const;
+    
+private:
+    Q_DISABLE_COPY(SisxSilentInstallIndicatorPlugin)
+    
+    /**
+     * Error value
+     */
+    int mError;
+        
+    /**
+     * Indicator types 
+     * supported indicator types. 
+     */
+    QStringList mIndicatorTypes;
+};
+
+#endif // SISXSILENTINSTALLINDICATORPLUGIN_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/rom/sisxsilentinstallindicatorplugin.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __SISXSILENTINSTALLINDICATORPLUGIN_IBY__
+#define __SISXSILENTINSTALLINDICATORPLUGIN_IBY__
+
+REM DLL
+file=ABI_DIR\UREL\sisxsilentinstallindicatorplugin.dll    SHARED_LIB_DIR\sisxsilentinstallindicatorplugin.dll UNPAGED
+data=\epoc32\data\z\resource\plugins\indicators\sisxsilentinstallindicatorplugin.qtplugin   \resource\plugins\indicators\sisxsilentinstallindicatorplugin.qtplugin
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/sisxsilentinstallindicatorplugin.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description:
+#
+
+TEMPLATE = lib
+TARGET = sisxsilentinstallindicatorplugin
+CONFIG += plugin
+CONFIG += hb
+
+INCLUDEPATH += .
+DEPENDPATH += .
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+INCLUDEPATH += ../../../../inc
+
+
+HEADERS += inc/sisxsilentinstallindicatorplugin.h \ 
+				inc/sisxsilentinstallindicator.h
+
+SOURCES += src/sisxsilentinstallindicatorplugin.cpp \ 
+				src/sisxsilentinstallindicator.cpp
+		   
+
+symbian {
+    TARGET.EPOCALLOWDLLDATA=1
+    TARGET.CAPABILITY = CAP_GENERAL_DLL
+    TARGET.UID3 = 0x2002FF6A 
+
+    pluginstub.sources = sisxsilentinstallindicatorplugin.dll
+    pluginstub.path = /resource/plugins/indicators
+    DEPLOYMENT += pluginstub
+}
+
+BLD_INF_RULES.prj_exports += \
+  "$${LITERAL_HASH}include <platform_paths.hrh>" \
+  "rom/sisxsilentinstallindicatorplugin.iby             CORE_APP_LAYER_IBY_EXPORT_PATH(sisxsilentinstallindicatorplugin.iby)" 
+  
+LIBS += -lxqservice
+LIBS += -lws32
+LIBS += -lapparc  
+LIBS += -lapgrfx
+
+# TODO: onko tarpeen apparc lippi ? lapparc 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/src/sisxsilentinstallindicator.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include <w32std.h>
+#include <apgtask.h>
+#include <apacmdln.h>
+#include <xqservicerequest.h>
+#include <hb/hbcore/hbtranslator.h>
+#include <hbicon.h>
+#include "sisxsilentinstallindicator.h" 
+
+const char KSifUiDefaultApplicationIcon[] = "qtg_large_application.svg";
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicator::SisxSilentInstallIndicator
+// @see sisxsilentinstallindicator.h
+// ----------------------------------------------------------------------------
+SisxSilentInstallIndicator::SisxSilentInstallIndicator( 
+	const QString &indicatorType) :
+    	HbIndicatorInterface( indicatorType,    				
+    		HbIndicatorInterface::NotificationCategory,
+    		InteractionActivated),
+    	mUpdateValue(0),
+    	mIsInstallProcess(1) // Set installer mode as default.
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicator::~SisxSilentInstallIndicator
+// @see sisxsilentinstallindicator.h
+// ----------------------------------------------------------------------------
+SisxSilentInstallIndicator::~SisxSilentInstallIndicator()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicator::handleInteraction
+// @see sisxsilentinstallindicator.h
+// ----------------------------------------------------------------------------
+bool SisxSilentInstallIndicator::handleInteraction(InteractionType type)
+    {
+    bool handled = false;
+    
+    if (type == InteractionActivated) 
+        {       
+        handled = true;           
+        emit deactivate(); 
+        }
+    
+    return handled;
+    }
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicator::indicatorData
+// @see sisxsilentinstallindicator.h
+// ----------------------------------------------------------------------------
+QVariant SisxSilentInstallIndicator::indicatorData(int role) const
+{       
+switch(role)
+    {
+    case PrimaryTextRole: 
+        {
+        // Set text to first line of indicator.
+        QString text("");
+        // Check which mode is on.
+        if ( mIsInstallProcess  )
+            { 
+            text.append(QString("Installing"));            
+            }       
+        else
+            {
+            text.append(QString("Finalizing installations"));            
+            }     
+        return text;        
+        }
+    case SecondaryTextRole:
+        {
+        // Set text to second line of indicator.
+        QString text("");        
+        text.append(QString("%1 %").arg(mUpdateValue));      
+        return text; 
+        }    
+    case DecorationNameRole:
+    case MonoDecorationNameRole:
+        {
+        // Get icon for the indicator.
+        QString iconName(KSifUiDefaultApplicationIcon);
+        return iconName;
+        }
+    default: 
+        return QVariant();      
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicator::prepareDisplayName
+// @see sisxsilentinstallindicator.h
+// ----------------------------------------------------------------------------
+bool SisxSilentInstallIndicator::handleClientRequest( RequestType type, 
+                                                      const QVariant &parameter)
+    {
+    bool handled(false);
+    
+    switch (type) 
+        {
+        case RequestActivate:
+            {
+            // Read client percent value to float.
+            mUpdateValue = parameter.toInt();
+            
+            // If client send -1 insted of percent value (0-100) we need
+            // to switch to uninstaller mode.
+            if (mUpdateValue == -1)
+                {
+                mIsInstallProcess = false;
+                mUpdateValue = 0;
+                }           
+            emit dataChanged();
+            handled =  true;
+            }
+            break;
+        case RequestDeactivate:
+            {
+            emit deactivate();
+            }
+            break;
+        default:
+            break;
+        }
+
+    return handled;
+    }
+
+// EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/src/sisxsilentinstallindicatorplugin.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include <QtPlugin>
+#include <QVariant>
+#include "sisxsilentinstallindicatorplugin.h"
+#include "sisxsilentinstallindicator.h"
+
+Q_EXPORT_PLUGIN(SisxSilentInstallIndicatorPlugin)
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::SisxSilentInstallIndicatorPlugin
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+SisxSilentInstallIndicatorPlugin::SisxSilentInstallIndicatorPlugin() : mError(0)
+{
+   
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::~SisxSilentInstallIndicatorPlugin
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+SisxSilentInstallIndicatorPlugin::~SisxSilentInstallIndicatorPlugin()
+{
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::indicatorTypes
+// Return notification types this plugin implements
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+QStringList SisxSilentInstallIndicatorPlugin::indicatorTypes() const
+{
+  QStringList types; 
+  types << "com.nokia.sisxsilentinstall.indicatorplugin/1.0";
+  return types;
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::accessAllowed
+// Check if client is allowed to use notification widget
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+bool SisxSilentInstallIndicatorPlugin::accessAllowed(
+		const QString &indicatorType,
+    const QVariantMap &securityInfo) const
+{
+    Q_UNUSED(indicatorType)
+    Q_UNUSED(securityInfo)
+
+    // This plugin doesn't perform operations that may compromise security.
+    // All clients are allowed to use.
+    return true;
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::createIndicator
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+HbIndicatorInterface* SisxSilentInstallIndicatorPlugin::createIndicator(
+        const QString &indicatorType)
+{
+    HbIndicatorInterface *indicator = 
+            new SisxSilentInstallIndicator(indicatorType);
+    return indicator;
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::error
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+int SisxSilentInstallIndicatorPlugin::error() const
+{
+    return mError;
+}
+
+//EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Build information file for startup list updater.
+*               Applications that needs to be started at boot time install
+*               resource file containing STARTUP_ITEM_INFO resource into
+*               the import directory of the startup list updater. Startup
+*               list updater registers these applications to system, to be
+*               started at boot time. Uninstalled applications are removed
+*               from the startup list too.
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../rom/startuplistupdater.iby   CORE_MW_LAYER_IBY_EXPORT_PATH( startuplistupdater.iby )
+
+PRJ_MMPFILES
+startuplistupdater.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/group/startuplistupdater.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project file for startup list updater.
+*               Applications that needs to be started at boot time install
+*               resource file containing STARTUP_ITEM_INFO resource into
+*               the import directory of the startup list updater. Startup
+*               list updater registers these applications to system, to be
+*               started at boot time. Uninstalled applications are removed
+*               from the startup list too.
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+TARGET          startuplistupdater.exe
+TARGETTYPE      exe
+UID             0x100039CE 0xE5F88F39   // TODO: Change UID3 to 0x101F875A after SWInstSvrUI has been removed
+CAPABILITY      CAP_SERVER AllFiles
+VENDORID        VID_DEFAULT
+
+SOURCEPATH      ../src
+SOURCE          main.cpp
+SOURCE          startuplistupdater.cpp
+
+MW_LAYER_SYSTEMINCLUDE
+USERINCLUDE     ../inc
+
+LIBRARY         euser.lib
+LIBRARY         efsrv.lib               // RFs, RFile
+LIBRARY         dscstore.lib            // RDscStore, CDscItem
+LIBRARY         sisregistryclient.lib   // Swi::RSisRegistrySession, Swi::RSisRegistryEntry
+LIBRARY         siscontroller.lib       // Swi::TSisTrustStatus::IsTrusted
+LIBRARY         featmgr.lib             // FeatureManager
+LIBRARY         bafl.lib                // RResourceFile
+LIBRARY         platformenv.lib         // DriveInfo
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/inc/cleanupresetanddestroy.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Defines CleanupResetAndDestroyPushL
+*
+*/
+
+
+#ifndef CLEANUPRESETANDDESTROY_H
+#define CLEANUPRESETANDDESTROY_H
+
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL( T& aRef );
+private:
+    static void ResetAndDestroy( TAny *aPtr );
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef );
+
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL( T& aRef )
+    {
+    CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) );
+    }
+
+template <class T>
+void CleanupResetAndDestroy<T>::ResetAndDestroy( TAny *aPtr )
+    {
+    if( aPtr )
+        {
+        static_cast<T*>( aPtr )->ResetAndDestroy();
+        }
+    }
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef )
+    {
+    CleanupResetAndDestroy<T>::PushL( aRef );
+    }
+
+#endif // CLEANUPRESETANDDESTROY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/inc/startuplistupdater.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Header file for startup list updater.
+*
+*/
+
+#ifndef STARTUPLISTUPDATER_H
+#define STARTUPLISTUPDATER_H
+
+#include <e32base.h>                    // CBase
+#include <f32file.h>                    // RFs
+#include <dscstore.h>                   // RDscStore
+
+namespace Swi
+    {
+    class RSisRegistryEntry;
+    }
+
+class CStartupListUpdater : public CBase
+    {
+public:     // constructor and destructor
+    static CStartupListUpdater* NewL();
+    ~CStartupListUpdater();
+
+public:     // new functions
+    void UpdateStartupListL();
+
+private:    // new functions
+    CStartupListUpdater();
+    void ConstructL();
+    const TDesC& PrivateImportPathL();
+    void ProcessImportsAndUninstallsL();
+    void OpenDscStoreLC( RDscStore& aDscStore );
+    void ImportNewResourceFilesL( RDscStore& aDscStore );
+    void DeregisterUninstalledAppsL( RDscStore& aDscStore );
+    void GetDataToBeImportedL( RPointerArray<HBufC>& aExecutableArray,
+            RPointerArray<HBufC>& aResourceFileArray );
+    void ImportExecutablesL( RDscStore& aDscStore, RPointerArray<HBufC>& aExecutableArray );
+    void RemoveImportedResourceFiles( RPointerArray<HBufC>& aResourceFileArray );
+    void AppendExecutablesFromResourceFileL( const TDesC& aResourceFile,
+            RPointerArray<HBufC>& aExecutableArray );
+    TBool IsValidExecutableForStartupL( const TDesC& aResourceFile,
+        const TDesC& aExecutableName );
+    void GetInstalledAppsL( RPointerArray<HBufC>& aInstalledExecutableArray );
+    void GetStartupListAppsL( RDscStore& aDscStore,
+            RPointerArray<HBufC>& aStartedExecutableArray );
+    void StartedButNotInstalledAppsL( RPointerArray<HBufC>& aStartedExecutableArray,
+            RPointerArray<HBufC>& aInstalledExecutableArray,
+            RPointerArray<HBufC>& aStartedButNotInstalledExecutableArray );
+    void RemoveFromStartupListL( RDscStore& aDscStore, RPointerArray<HBufC>& aExecutableArray );
+    void GetExecutablesFromEntryL( Swi::RSisRegistryEntry& aEntry,
+            RPointerArray<HBufC>& aExecutableArray );
+
+private:    // new data
+    RFs iFs;
+    HBufC* iPrivateImportPath;
+    };
+
+#endif  // STARTUPLISTUPDATER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/rom/startuplistupdater.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ROM image files for startup list updater.
+*
+*/
+
+#ifndef STARTUPLISTUPDATER_IBY
+#define STARTUPLISTUPDATER_IBY
+
+file=ABI_DIR\BUILD_DIR\startuplistupdater.exe   sys\bin\startuplistupdater.exe
+
+#endif  // STARTUPLISTUPDATER_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/src/main.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Main source file for startup list updater.
+*
+*/
+
+#include "startuplistupdater.h"
+
+_LIT( KStartupListUpdaterThread, "StartupListUpdater" );
+
+
+// ---------------------------------------------------------------------------
+// StartupListUpdaterL()
+// ---------------------------------------------------------------------------
+//
+void StartupListUpdaterL()
+    {
+    User::LeaveIfError( User::RenameThread( KStartupListUpdaterThread ) );
+    RProcess::Rendezvous( KErrNone );
+
+    CStartupListUpdater* updater = CStartupListUpdater::NewL();
+    CleanupStack::PushL( updater );
+    updater->UpdateStartupListL();
+    CleanupStack::PopAndDestroy( updater );
+}
+
+
+// ---------------------------------------------------------------------------
+// E32Main()
+// ---------------------------------------------------------------------------
+//
+GLDEF_C TInt E32Main()
+    {
+    TInt returnCode = KErrNone;
+    __UHEAP_MARK;
+
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    if( cleanup )
+        {
+        CActiveScheduler* scheduler = new CActiveScheduler();
+        if( scheduler )
+            {
+            CActiveScheduler::Install( scheduler );
+
+            TRAP( returnCode, StartupListUpdaterL() );
+
+            delete scheduler;
+            delete cleanup;
+            }
+        else
+            {
+            delete cleanup;
+            return KErrNoMemory;
+            }
+        }
+    else
+        {
+        return KErrNoMemory;
+        }
+
+    __UHEAP_MARKEND;
+    return returnCode;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/src/startuplistupdater.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,544 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Startup list updater implementation.
+*
+*/
+
+#include "startuplistupdater.h"         // CStartupListUpdater
+#include "cleanupresetanddestroy.h"     // CleanupResetAndDestroyPushL
+#include <featmgr.h>                    // FeatureManager
+#include <driveinfo.h>                  // DriveInfo
+#include <barsc.h>                      // RResourceFile
+#include <barsread.h>                   // TResourceReader
+#include <StartupItem.hrh>              // EStartupItemExPolicyNone
+#include <dscitem.h>                    // CDscItem
+#include <swi/sisregistrysession.h>     // Swi::RSisRegistrySession
+#include <swi/sisregistrypackage.h>     // Swi::CSisRegistryPackage
+#include <swi/sisregistryentry.h>       // Swi::RSisRegistryEntry
+#include <swi/sistruststatus.h>         // Swi::TSisTrustStatus::IsTrusted
+
+_LIT( KImport, "import\\" );
+_LIT( KDriveAndPathFormat, "%c:%S" );
+_LIT( KResourceFileSpec, "c:*.rsc" );
+_LIT( KExecutableExtension, ".exe" );
+_LIT( KAsterisk, "*" );
+
+const TInt KDriveSpecLength = 2;
+const TInt KFirstStartupItemInfo = 1;
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// FileNamesEqual()
+// ---------------------------------------------------------------------------
+//
+TBool FileNamesEqual( const HBufC& aFile1, const HBufC& aFile2 )
+    {
+    return ( aFile1.CompareF( aFile2 ) == 0 );
+    }
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::NewL()
+// ---------------------------------------------------------------------------
+//
+CStartupListUpdater* CStartupListUpdater::NewL()
+    {
+    CStartupListUpdater* self = new( ELeave ) CStartupListUpdater;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::~CStartupListUpdater()
+// ---------------------------------------------------------------------------
+//
+CStartupListUpdater::~CStartupListUpdater()
+    {
+    delete iPrivateImportPath;
+    iFs.Close();
+
+    FeatureManager::UnInitializeLib();
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::UpdateStartupListL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::UpdateStartupListL()
+    {
+    if ( FeatureManager::FeatureSupported( KFeatureIdExtendedStartup ) )
+        {
+        ProcessImportsAndUninstallsL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::CStartupListUpdater()
+// ---------------------------------------------------------------------------
+//
+CStartupListUpdater::CStartupListUpdater()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::ConstructL()
+    {
+    FeatureManager::InitializeLibL();
+    User::LeaveIfError( iFs.Connect() );
+
+    TInt err = iFs.MkDirAll( PrivateImportPathL() );
+    if( err != KErrNone && err != KErrAlreadyExists )
+        {
+        User::Leave( err );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::PrivateImportPathL()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CStartupListUpdater::PrivateImportPathL()
+    {
+    if( !iPrivateImportPath )
+        {
+        TFileName privateImportPath;
+        User::LeaveIfError( iFs.PrivatePath( privateImportPath ) );
+        privateImportPath.Append( KImport );
+
+        TInt driveNumber;
+        TInt err = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultSystem, driveNumber );
+        User::LeaveIfError( err );
+        TChar driveLetter;
+        User::LeaveIfError( RFs::DriveToChar( driveNumber, driveLetter ) );
+
+        iPrivateImportPath = HBufC::NewL( KDriveSpecLength + privateImportPath.Length() );
+        TPtr ptr( iPrivateImportPath->Des() );
+        ptr.Format( KDriveAndPathFormat, static_cast< TUint >( driveLetter ), &privateImportPath );
+        }
+    return *iPrivateImportPath;
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::ProcessImportsAndUninstallsL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::ProcessImportsAndUninstallsL()
+    {
+    RDscStore dscStore;
+    OpenDscStoreLC( dscStore );
+
+    ImportNewResourceFilesL( dscStore );
+    DeregisterUninstalledAppsL( dscStore );
+
+    CleanupStack::PopAndDestroy( &dscStore );
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::OpenDscStoreLC()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::OpenDscStoreLC( RDscStore& aDscStore )
+    {
+    if( !aDscStore.IsOpened() )
+        {
+        aDscStore.OpenL();
+        CleanupClosePushL( aDscStore );
+        if( !aDscStore.DscExistsL() )
+            {
+            aDscStore.CreateDscL();
+            }
+        }
+    else
+        {
+        User::Leave( KErrAlreadyExists );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::ImportNewResourceFilesL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::ImportNewResourceFilesL( RDscStore& aDscStore )
+    {
+    RPointerArray<HBufC> executableArray;
+    CleanupResetAndDestroyPushL( executableArray );
+    RPointerArray<HBufC> resourceFileArray;
+    CleanupResetAndDestroyPushL( resourceFileArray );
+
+    GetDataToBeImportedL( executableArray, resourceFileArray );
+    ImportExecutablesL( aDscStore, executableArray );
+    RemoveImportedResourceFiles( resourceFileArray );
+
+    CleanupStack::PopAndDestroy( 2, &executableArray );
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::DeregisterUninstalledAppsL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::DeregisterUninstalledAppsL( RDscStore& aDscStore )
+    {
+    RPointerArray<HBufC> startedAtBootArray;
+    CleanupResetAndDestroyPushL( startedAtBootArray );
+    RPointerArray<HBufC> installedArray;
+    CleanupResetAndDestroyPushL( installedArray );
+    RPointerArray<HBufC> startedNotInstalled;
+    CleanupResetAndDestroyPushL( startedNotInstalled );
+
+    GetStartupListAppsL( aDscStore, startedAtBootArray );
+    GetInstalledAppsL( installedArray );
+    StartedButNotInstalledAppsL( startedAtBootArray, installedArray, startedNotInstalled );
+    RemoveFromStartupListL( aDscStore, startedNotInstalled );
+
+    CleanupStack::PopAndDestroy( 3, &startedAtBootArray );
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::GetDataToBeImportedL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::GetDataToBeImportedL(
+        RPointerArray<HBufC>& aExecutableArray,
+        RPointerArray<HBufC>& aResourceFileArray )
+    {
+    TParse resourceFiles;
+    User::LeaveIfError( resourceFiles.Set( KResourceFileSpec, &PrivateImportPathL(), NULL ) );
+    const TPtrC importDir( resourceFiles.FullName() );
+
+    CDir* dir;
+    User::LeaveIfError( iFs.GetDir( importDir, KEntryAttMaskSupported, ESortNone, dir ) );
+    CleanupStack::PushL( dir );
+    for( TInt index = 0; index < dir->Count(); ++index )
+        {
+        TFileName resourceFile;
+        TInt lastSeparator = importDir.LocateReverse( '\\' );
+        if( lastSeparator > 0 )
+            {
+            resourceFile.Copy( importDir.Mid( 0, lastSeparator + 1 ) );
+            resourceFile.Append( ( *dir )[ index ].iName );
+            aResourceFileArray.AppendL( resourceFile.AllocL() );
+
+            AppendExecutablesFromResourceFileL( resourceFile, aExecutableArray );
+            }
+        }
+    CleanupStack::PopAndDestroy( dir );
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::ImportExecutablesL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::ImportExecutablesL( RDscStore& aDscStore,
+        RPointerArray<HBufC>& aExecutableArray )
+    {
+    for( TInt index = 0; index < aExecutableArray.Count(); ++index )
+        {
+        const TDesC& executableName = *( aExecutableArray[ index ] );
+        CDscItem* item = CDscItem::NewLC( executableName, KNullDesC );
+        if( !aDscStore.ItemExistsL( *item ) )
+            {
+            aDscStore.AddItemL( *item );
+            }
+        CleanupStack::PopAndDestroy( item );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::RemoveImportedResourceFiles()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::RemoveImportedResourceFiles(
+        RPointerArray<HBufC>& aResourceFileArray )
+    {
+    for( TInt index = 0; index < aResourceFileArray.Count(); ++index )
+        {
+        const TDesC& fileName = *( aResourceFileArray[ index ] );
+        TInt err = iFs.Delete( fileName );
+        if( err )
+            {
+#ifdef _DEBUG
+            RDebug::Print( _L("CStartupListUpdater: cannot delete %S, error %d"),
+                    &fileName, err );
+#endif
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::AppendExecutablesFromResourceFileL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::AppendExecutablesFromResourceFileL(
+        const TDesC& aResourceFile,
+        RPointerArray<HBufC>& aExecutableArray )
+    {
+    RResourceFile resource;
+    CleanupClosePushL( resource );
+    resource.OpenL( iFs, aResourceFile );
+
+    for( TInt id = KFirstStartupItemInfo; resource.OwnsResourceId( id ); ++id )
+        {
+        HBufC8* buffer = resource.AllocReadLC( id );
+
+        TResourceReader reader;
+        reader.SetBuffer( buffer );
+
+        // Read STARTUP_ITEM_INFO
+        TInt versionInfo = reader.ReadUint8();
+        TFileName executableName;
+        executableName.Copy( reader.ReadTPtrC() );
+        TInt recoveryPolicy = reader.ReadUint16();
+
+        CleanupStack::PopAndDestroy( buffer );
+
+        if( versionInfo == 0 && recoveryPolicy == EStartupItemExPolicyNone )
+            {
+            // PKG files use '!' for drive letters that user can decide at installation time
+            if( executableName.Length() > 0 && executableName[ 0 ] == '!' )
+                {
+                executableName.Replace( 0, 1, KAsterisk );
+
+                TFindFile fileFinder( iFs );
+                CDir* executableDir;            // next FindWildByDir needs AllFiles capability
+                TInt err = fileFinder.FindWildByDir( executableName, KNullDesC, executableDir );
+                if( !err )
+                    {
+                    CleanupStack::PushL( executableDir );
+                    executableName.Replace( 0, 1, fileFinder.File() );
+                    CleanupStack::PopAndDestroy( executableDir );
+                    }
+                }
+
+            if( IsValidExecutableForStartupL( aResourceFile, executableName ) )
+                {
+                aExecutableArray.AppendL( executableName.AllocL() );
+                }
+            }
+        }
+
+    CleanupStack::PopAndDestroy( &resource );
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::IsValidExecutableForStartupL()
+// ---------------------------------------------------------------------------
+//
+TBool CStartupListUpdater::IsValidExecutableForStartupL( const TDesC& aResourceFile,
+        const TDesC& aExecutableName )
+    {
+    TBool isValid = EFalse;
+
+    TEntry entry;
+    if( iFs.Entry( aExecutableName, entry ) == KErrNone )   // needs AllFiles capability
+        {
+        isValid = ETrue;
+
+        // Extract package UID from the resource file name
+        // - allow both "[1234ABCD]" and "1234ABCD" formats
+        // - allow possible "0x" prefix too
+        TUid packageUid = KNullUid;
+        TParsePtrC parse( aResourceFile );
+        TPtrC parseName = parse.Name();
+        TInt fileNameLength = parseName.Length();
+        if( !parse.IsNameWild() && fileNameLength > 0 )
+            {
+            TPtr fileName( const_cast<TUint16*>( parseName.Ptr() ),
+                fileNameLength, fileNameLength );
+
+            if( fileName[ 0 ] == '[' && fileName[ fileNameLength - 1 ] == ']' )
+                {
+                const TInt KTwoCharsLength = 2;
+                fileNameLength -= KTwoCharsLength;
+                fileName = fileName.Mid( 1, fileNameLength );
+                }
+
+            _LIT( KHexPrefix, "0x" );
+            const TInt KHexPrefixLength = 2;
+            if( fileName.Left( KHexPrefixLength ) == KHexPrefix )
+                {
+                fileNameLength -= KHexPrefixLength;
+                fileName = fileName.Mid( KHexPrefixLength, fileNameLength );
+                }
+
+            TLex lex( fileName );
+            TUint32 uidValue = 0;
+            TInt lexError = lex.Val( uidValue, EHex );
+            if( !lexError )
+                {
+                packageUid.iUid = uidValue;
+                }
+            }
+
+        // Get package info from RSisRegistry, and check that
+        // - the package contains the resource file
+        // - the package is properly signed
+        if( packageUid != KNullUid )
+            {
+            Swi::RSisRegistrySession sisRegSession;
+            User::LeaveIfError( sisRegSession.Connect() );
+            CleanupClosePushL( sisRegSession );
+
+            Swi::RSisRegistryEntry package;
+            CleanupClosePushL( package );
+            TInt openError = package.Open( sisRegSession, packageUid );
+            if( !openError )
+                {
+                TBool hasResourceFile = EFalse;
+
+                RPointerArray<HBufC> files;
+                CleanupResetAndDestroyPushL( files );
+                package.FilesL( files );
+                for( TInt index = 0; index < files.Count() && !hasResourceFile; ++index )
+                    {
+                    hasResourceFile = ( aResourceFile.CompareF( *files[ index ] ) == 0 );
+                    }
+
+                if( hasResourceFile && package.TrustStatusL().IsTrusted() )
+                    {
+                    isValid = ETrue;
+                    }
+
+                CleanupStack::PopAndDestroy( &files );
+                }
+
+            CleanupStack::PopAndDestroy( 2, &sisRegSession );  // package, sisRegSession
+            }
+        }
+
+    return isValid;
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::GetInstalledAppsL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::GetInstalledAppsL(
+        RPointerArray<HBufC>& aInstalledExecutableArray )
+    {
+    Swi::RSisRegistrySession sisRegistrySession;
+    User::LeaveIfError( sisRegistrySession.Connect() );
+    CleanupClosePushL( sisRegistrySession );
+
+    RPointerArray<Swi::CSisRegistryPackage> removablePackages;
+    CleanupResetAndDestroyPushL( removablePackages );
+    sisRegistrySession.RemovablePackagesL( removablePackages );
+
+    for( TInt index = 0; index < removablePackages.Count(); ++index )
+        {
+        Swi::RSisRegistryEntry entry;
+        CleanupClosePushL( entry );
+        entry.OpenL( sisRegistrySession, *( removablePackages[ index ] ) );
+        if( entry.RemovableL() )
+            {
+            GetExecutablesFromEntryL( entry, aInstalledExecutableArray );
+            }
+        CleanupStack::PopAndDestroy( &entry );
+        }
+
+    CleanupStack::PopAndDestroy( 2, &sisRegistrySession );
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::GetStartupListAppsL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::GetStartupListAppsL( RDscStore& aDscStore,
+        RPointerArray<HBufC>& aStartedExecutableArray )
+    {
+    aDscStore.EnumOpenLC();
+
+    while( CDscItem* item = aDscStore.EnumReadNextL() )
+        {
+        CleanupStack::PushL( item );
+        aStartedExecutableArray.AppendL( item->FileName().AllocL() );
+        CleanupStack::PopAndDestroy( item );
+        }
+
+    CleanupStack::PopAndDestroy();  // runs EnumClose
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::StartedButNotInstalledAppsL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::StartedButNotInstalledAppsL(
+        RPointerArray<HBufC>& aStartedExecutableArray,                  // in
+        RPointerArray<HBufC>& aInstalledExecutableArray,                // in
+        RPointerArray<HBufC>& aStartedButNotInstalledExecutableArray )  // out
+    {
+    aStartedButNotInstalledExecutableArray.ResetAndDestroy();
+
+    TIdentityRelation<HBufC> identityRelation( FileNamesEqual );
+    for( TInt index = 0; index < aStartedExecutableArray.Count(); ++index )
+        {
+        const HBufC* startedAppName = aStartedExecutableArray[ index ];
+        if( aInstalledExecutableArray.Find( startedAppName, identityRelation ) == KErrNotFound )
+            {
+            aStartedButNotInstalledExecutableArray.AppendL( startedAppName->AllocL() );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::RemoveFromStartupListL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::RemoveFromStartupListL( RDscStore& aDscStore,
+        RPointerArray<HBufC>& aExecutableArray )
+    {
+    for( TInt index = 0; index < aExecutableArray.Count(); ++index )
+        {
+        const TDesC& executableName = *( aExecutableArray[ index ] );
+        CDscItem* item = CDscItem::NewLC( executableName, KNullDesC );
+        if( aDscStore.ItemExistsL( *item ) )
+            {
+            aDscStore.DeleteItemL( *item );
+            }
+        CleanupStack::PopAndDestroy( item );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupListUpdater::GetExecutablesFromEntryL()
+// ---------------------------------------------------------------------------
+//
+void CStartupListUpdater::GetExecutablesFromEntryL( Swi::RSisRegistryEntry& aEntry,
+        RPointerArray<HBufC>& aExecutableArray )
+    {
+    RPointerArray<HBufC> filesList;
+    CleanupResetAndDestroyPushL( filesList );
+    aEntry.FilesL( filesList );
+
+    for( TInt index = 0; index < filesList.Count(); ++index )
+        {
+        TParse parse;
+        TInt err = parse.SetNoWild( KNullDesC, filesList[ index ], NULL );
+        if( !err && ( parse.Ext().CompareF( KExecutableExtension ) == 0 ) )
+            {
+            aExecutableArray.AppendL( parse.FullName().AllocL() );
+            }
+        }
+
+    CleanupStack::PopAndDestroy( &filesList );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/bwins/mt_startuplistupdateru.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/conf/mt_startuplistupdater.cfg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,59 @@
+//
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// 
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+// 
+// Contributors:
+// 
+// Description:  Startup list updater test module.
+//
+
+
+[Test]
+title Install startable exe
+create mt_startuplistupdater test
+test NotInStartList c:\sys\bin\teststartlist.exe
+//test Install e:\testing\data\teststartlist.sisx
+test Install c:\data\installs\teststartlist.sisx
+pause 1000
+test InStartList c:\sys\bin\teststartlist.exe
+delete test
+[Endtest]
+
+[Test]
+title Remove startable exe
+create mt_startuplistupdater test
+test InStartList c:\sys\bin\teststartlist.exe
+test Remove 0xEBE1C11B
+pause 1000
+test NotInStartList c:\sys\bin\teststartlist.exe
+delete test
+[Endtest]
+
+[Test]
+title Install embedded startable exe
+create mt_startuplistupdater test
+test NotInStartList c:\sys\bin\teststartlistembedded.exe
+//test Install e:\testing\data\teststartlistembedded.sisx
+test Install c:\data\installs\teststartlistembedded.sisx
+pause 1000
+test InStartList c:\sys\bin\teststartlistembedded.exe
+delete test
+[Endtest]
+
+[Test]
+title Remove embedded startable exe
+create mt_startuplistupdater test
+test InStartList c:\sys\bin\teststartlistembedded.exe
+test Remove 0xED2159D3
+pause 1000
+test NotInStartList c:\sys\bin\teststartlistembedded.exe
+delete test
+[Endtest]
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_compile_tests.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for startup list updater.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Compiling module tests
+echo.
+echo ----------------------------------------------------------------------
+echo.
+pushd group
+call sbs reallyclean
+call sbs -c armv5_urel
+call sbs -c winscw_udeb
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_instrument_code.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for startup list updater.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Instrumenting code (armv5 urel and winscw udeb, decision coverage)
+echo.
+echo ----------------------------------------------------------------------
+echo.
+pushd ..\..\group
+if exist MON.sym del MON.sym
+if exist MON.dat del MON.dat
+if exist profile.txt del profile.txt
+call sbs reallyclean
+call ctcwrap -i d -2comp -C "EXCLUDE+*.UID.CPP" sbs -c armv5_urel
+call ctcwrap -i d -2comp -C "EXCLUDE+*.UID.CPP" sbs -c winscw_udeb
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_remove_instrumentation.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for startup list updater.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Removing instrumentation
+echo.
+echo ----------------------------------------------------------------------
+echo.
+pushd ..\..\group
+call sbs reallyclean
+call sbs -c armv5_urel
+call sbs -c winscw_udeb
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_run_tests.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for startup list updater.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Running module tests
+echo.
+echo ----------------------------------------------------------------------
+echo.
+echo Note: module test can be run also manually. Start STIF UI and run
+echo test cases listed in conf\mt_startuplistupdater.cfg file. Use ctcpost
+echo and ctc2html commands to process the CTC output file (MON.dat).
+echo.
+pushd ..\..\group
+call \epoc32\release\winscw\udeb\ATSInterface.exe -testmodule testscripter -config c:\testframework\mt_startuplistupdater.cfg
+
+echo.
+echo.
+echo ----------------------------------------------------------------------
+echo.
+echo Processing test results
+echo.
+echo ----------------------------------------------------------------------
+echo.
+call ctcpost MON.sym MON.dat -p profile.txt
+call ctc2html -i profile.txt
+popd
Binary file appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data/mmc/teststartlist.sisx has changed
Binary file appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data/mmc/teststartlist_winscw.sisx has changed
Binary file appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data/mmc/teststartlistembedded.sisx has changed
Binary file appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data/mmc/teststartlistembedded_winscw.sisx has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test exe for startup list updater test module.
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+teststartlist.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/doall.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Creates test exe for startup list updater test module.
+rem
+
+set CERTPATH=%1
+if not x%CERTPATH%x == xx goto doit
+echo Usage
+echo doall.bat [path to RD certificates]
+goto end
+
+:doit
+echo on
+call sbs
+call makesis teststartlist.pkg
+call makesis teststartlist_winscw.pkg
+call signsis teststartlist.sis teststartlist.sisx %CERTPATH%\rd.cer %CERTPATH%\rd-key.pem
+call signsis teststartlist_winscw.sis teststartlist_winscw.sisx %CERTPATH%\rd.cer %CERTPATH%\rd-key.pem
+if not exist ..\..\data mkdir ..\..\data
+if not exist ..\..\data\mmc mkdir ..\..\data\mmc
+if exist ..\..\data\mmc\teststartlist.sisx del /F/Q ..\..\data\mmc\teststartlist.sisx
+move teststartlist.sisx ..\..\data\mmc\.
+if exist ..\..\data\mmc\teststartlist_winscw.sisx del /F/Q ..\..\data\mmc\teststartlist_winscw.sisx
+move teststartlist_winscw.sisx ..\..\data\mmc\.
+del teststartlist.sis
+del teststartlist_winscw.sis
+call sbs reallyclean
+dir ..\..\data\mmc
+
+:end
+set CERTPATH=
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test exe for startup list updater test module.
+*
+*/
+
+
+#include "teststartlist.h"
+
+
+GLDEF_C TInt E32Main()
+    {
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test exe for startup list updater test module.
+*
+*/
+
+
+#ifndef TESTSTARTLIST_H
+#define TESTSTARTLIST_H
+
+#include <e32base.h>
+
+GLDEF_C TInt E32Main();
+
+#endif  // TESTSTARTLIST_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test exe for startup list updater test module.
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET          teststartlist.exe
+TARGETTYPE      exe
+UID             0 0xEBE1C11B    // random UID
+
+START RESOURCE  teststartlist.rss
+TARGET          ebe1c11b.rsc
+TARGETPATH      /private/101f875a/import
+END
+
+USERINCLUDE     .
+APP_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH      .
+SOURCE          teststartlist.cpp
+
+LIBRARY         euser.lib
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,35 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:  Test exe for startup list updater test module.
+;
+
+
+#{"TestStartList"},(0xEBE1C11B),1,0,0
+
+; S60 platform dependencies
+[0x101F7961],0,0,0,{"Series60ProductID"}
+[0x1028315F],0,0,0,{"Series60ProductID"}
+[0x10283160],0,0,0,{"Series60ProductID"}
+[0x20022E6D],0,0,0,{"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Files
+"\epoc32\release\armv5\urel\teststartlist.exe" - "c:\sys\bin\teststartlist.exe"
+"\epoc32\data\z\private\101f875a\import\ebe1c11b.rsc" - "c:\private\101f875a\import\ebe1c11b.rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test exe for startup list updater test module.
+*
+*/
+
+#include <startupitem.rh>
+
+RESOURCE STARTUP_ITEM_INFO teststartlist
+    {
+    executable_name = "c:\\sys\\bin\\teststartlist.exe";
+    recovery = EStartupItemExPolicyNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlist/teststartlist_winscw.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,36 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:  Test exe for startup list updater test module.
+;
+
+
+#{"TestStartList"},(0xEBE1C11B),1,0,0
+
+; S60 platform dependencies
+[0x101F7961],0,0,0,{"Series60ProductID"}
+[0x1028315F],0,0,0,{"Series60ProductID"}
+[0x10283160],0,0,0,{"Series60ProductID"}
+[0x20022E6D],0,0,0,{"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Files
+"\epoc32\release\winscw\udeb\teststartlist.exe" - "c:\sys\bin\teststartlist.exe"
+; "\epoc32\data\z\private\101f875a\import\ebe1c11b.rsc" - "c:\private\101f875a\import\ebe1c11b.rsc"
+"\epoc32\data\z\private\101f875a\import\ebe1c11b.rsc" - "c:\private\E5F88F39\import\ebe1c11b.rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test exe for startup list updater test module.
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+teststartlistembedded.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/datafile.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is data file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/doall.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,49 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Creates test exe for startup list updater test module.
+rem
+
+set CERTPATH=%1
+if not x%CERTPATH%x == xx goto doit
+echo Usage
+echo doall.bat [path to RD certificates]
+goto end
+
+:doit
+echo on
+call sbs
+call makesis teststartlistembedded.pkg
+call makesis teststartlistembedded_winscw.pkg
+call signsis teststartlistembedded.sis teststartlistembedded.sisx %CERTPATH%\rd.cer %CERTPATH%\rd-key.pem
+call signsis teststartlistembedded_winscw.sis teststartlistembedded_winscw.sisx %CERTPATH%\rd.cer %CERTPATH%\rd-key.pem
+del teststartlistembedded.sis
+del teststartlistembedded_winscw.sis
+call makesis teststartlistembedded_main.pkg
+call makesis teststartlistembedded_main_winscw.pkg
+call signsis teststartlistembedded_main.sis teststartlistembedded_main.sisx %CERTPATH%\rd.cer %CERTPATH%\rd-key.pem
+call signsis teststartlistembedded_main_winscw.sis teststartlistembedded_main_winscw.sisx %CERTPATH%\rd.cer %CERTPATH%\rd-key.pem
+if not exist ..\..\data mkdir ..\..\data
+if not exist ..\..\data\mmc mkdir ..\..\data\mmc
+if exist ..\..\data\mmc\teststartlistembedded.sisx del /F/Q ..\..\data\mmc\teststartlistembedded.sisx
+move teststartlistembedded_main.sisx ..\..\data\mmc\teststartlistembedded.sisx
+if exist ..\..\data\mmc\teststartlistembedded_winscw.sisx del /F/Q ..\..\data\mmc\teststartlistembedded_winscw.sisx
+move teststartlistembedded_main_winscw.sisx ..\..\data\mmc\teststartlistembedded_winscw.sisx
+del teststartlistembedded_main.sis
+del teststartlistembedded_main_winscw.sis
+call sbs reallyclean
+dir ..\..\data\mmc
+
+:end
+set CERTPATH=
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test exe for startup list updater test module.
+*
+*/
+
+
+#include "teststartlistembedded.h"
+
+
+GLDEF_C TInt E32Main()
+    {
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test exe for startup list updater test module.
+*
+*/
+
+
+#ifndef TESTSTARTLISTEMBEDDED_H
+#define TESTSTARTLISTEMBEDDED_H
+
+#include <e32base.h>
+
+GLDEF_C TInt E32Main();
+
+#endif  // TESTSTARTLISTEMBEDDED_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test exe for startup list updater test module.
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET          teststartlistembedded.exe
+TARGETTYPE      exe
+UID             0 0xEC35FEAB    // random UID
+
+START RESOURCE  teststartlistembedded.rss
+TARGET          ec35feab.rsc
+TARGETPATH      /private/101f875a/import
+END
+
+USERINCLUDE     .
+APP_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH      .
+SOURCE          teststartlistembedded.cpp
+
+LIBRARY         euser.lib
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,35 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:  Test exe for startup list updater test module.
+;
+
+
+#{"TestStartListEmbedded"},(0xEC35FEAB),1,0,0
+
+; S60 platform dependencies
+[0x101F7961],0,0,0,{"Series60ProductID"}
+[0x1028315F],0,0,0,{"Series60ProductID"}
+[0x10283160],0,0,0,{"Series60ProductID"}
+[0x20022E6D],0,0,0,{"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Files
+"\epoc32\release\armv5\urel\teststartlistembedded.exe" - "c:\sys\bin\teststartlistembedded.exe"
+"\epoc32\data\z\private\101f875a\import\ec35feab.rsc" - "c:\private\101f875a\import\[0xec35feab].rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test exe for startup list updater test module.
+*
+*/
+
+#include <startupitem.rh>
+
+RESOURCE STARTUP_ITEM_INFO teststartlistembedded
+    {
+    executable_name = "c:\\sys\\bin\\teststartlistembedded.exe";
+    recovery = EStartupItemExPolicyNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded_main.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:  Test exe for startup list updater test module.
+;
+
+
+#{"TestStartListEmbedded"},(0xED2159D3),1,0,0
+
+; S60 platform dependencies
+[0x101F7961],0,0,0,{"Series60ProductID"}
+[0x1028315F],0,0,0,{"Series60ProductID"}
+[0x10283160],0,0,0,{"Series60ProductID"}
+[0x20022E6D],0,0,0,{"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Files
+"datafile.txt" - "c:\data\datafile.txt"
+
+; Embeddded package containing startable exe
+@{"teststartlistembedded.sisx"}, (0xEC35FEAB)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded_main_winscw.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:  Test exe for startup list updater test module.
+;
+
+
+#{"TestStartListEmbedded"},(0xED2159D3),1,0,0
+
+; S60 platform dependencies
+[0x101F7961],0,0,0,{"Series60ProductID"}
+[0x1028315F],0,0,0,{"Series60ProductID"}
+[0x10283160],0,0,0,{"Series60ProductID"}
+[0x20022E6D],0,0,0,{"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Files
+"datafile.txt" - "c:\data\datafile.txt"
+
+; Embeddded package containing startable exe
+@{"teststartlistembedded_winscw.sisx"}, (0xEC35FEAB)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded_winscw.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,36 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:  Test exe for startup list updater test module.
+;
+
+
+#{"TestStartListEmbedded"},(0xEC35FEAB),1,0,0
+
+; S60 platform dependencies
+[0x101F7961],0,0,0,{"Series60ProductID"}
+[0x1028315F],0,0,0,{"Series60ProductID"}
+[0x10283160],0,0,0,{"Series60ProductID"}
+[0x20022E6D],0,0,0,{"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Files
+"\epoc32\release\winscw\udeb\teststartlistembedded.exe" - "c:\sys\bin\teststartlistembedded.exe"
+; "\epoc32\data\z\private\101f875a\import\ec35feab.rsc" - "c:\private\101f875a\import\[0xec35feab].rsc"
+"\epoc32\data\z\private\101f875a\import\ec35feab.rsc" - "c:\private\E5F88F39\import\[0xec35feab].rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/eabi/mt_startuplistupdateru.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,5 @@
+EXPORTS
+	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+	_ZTI23CTestStartupListUpdater @ 2 NONAME
+	_ZTV23CTestStartupListUpdater @ 3 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:  Startup list updater test module.
+*
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../init/TestFramework.ini   /epoc32/winscw/c/testframework/TestFramework.ini
+../init/TestFramework.ini   /epoc32/data/z/system/data/TestFramework.ini
+../conf/mt_startuplistupdater.cfg   /epoc32/winscw/c/testframework/mt_startuplistupdater.cfg
+../conf/mt_startuplistupdater.cfg   /epoc32/data/z/testframework/mt_startuplistupdater.cfg
+../rom/mt_startuplistupdater.iby    CORE_MW_LAYER_IBY_EXPORT_PATH( mt_startuplistupdater.iby )
+../data/mmc/teststartlist_winscw.sisx   /epoc32/winscw/c/data/installs/teststartlist.sisx
+../data/mmc/teststartlistembedded_winscw.sisx /epoc32/winscw/c/data/installs/teststartlistembedded.sisx
+
+PRJ_TESTMMPFILES
+mt_startuplistupdater.mmp
+
+PRJ_MMPFILES
+mt_startuplistupdater_nrm.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/mt_startuplistupdater.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:  Startup list updater test module.
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET          mt_startuplistupdater.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+VENDORID        VID_DEFAULT
+
+USERINCLUDE     ../inc
+MW_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH      ../src
+SOURCE          mt_startuplistupdater.cpp
+SOURCE          mt_startuplistupdaterblocks.cpp
+
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         stiftestengine.lib
+LIBRARY         sif.lib
+LIBRARY         scrclient.lib
+LIBRARY         dscstore.lib
+
+LANG            SC
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/mt_startuplistupdater.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:  Startup list updater test module.
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"STIF"},(0x00000000),1,1,0,TYPE=SA
+
+; Series60 product id for S60 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Install files
+"\epoc32\release\armv5\udeb\mt_startuplistupdater.dll" - "!:\sys\bin\mt_startuplistupdater.dll"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/mt_startuplistupdater_nrm.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:  Startup list updater test module.
+*
+*/
+
+#include "mt_startuplistupdater.mmp"
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/inc/cleanupresetanddestroy.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Defines CleanupResetAndDestroyPushL
+*
+*/
+
+
+#ifndef CLEANUPRESETANDDESTROY_H
+#define CLEANUPRESETANDDESTROY_H
+
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL( T& aRef );
+private:
+    static void ResetAndDestroy( TAny *aPtr );
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef );
+
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL( T& aRef )
+    {
+    CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) );
+    }
+
+template <class T>
+void CleanupResetAndDestroy<T>::ResetAndDestroy( TAny *aPtr )
+    {
+    if( aPtr )
+        {
+        static_cast<T*>( aPtr )->ResetAndDestroy();
+        }
+    }
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef )
+    {
+    CleanupResetAndDestroy<T>::PushL( aRef );
+    }
+
+#endif // CLEANUPRESETANDDESTROY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/inc/mt_startuplistupdater.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Startup list updater test module.
+*
+*/
+
+#ifndef MT_STARTUPLISTUPDATER_H
+#define MT_STARTUPLISTUPDATER_H
+
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+#include <TestclassAssert.h>
+
+#define TEST_CLASS_VERSION_MAJOR 1
+#define TEST_CLASS_VERSION_MINOR 0
+#define TEST_CLASS_VERSION_BUILD 0
+
+_LIT( KTestStartupListUpdaterLogPath, "\\logs\\testframework\\mt_startuplistupdater\\" );
+_LIT( KTestStartupListUpdaterLogFile, "mt_startuplistupdater.txt" );
+_LIT( KTestStartupListUpdaterLogFileWithTitle, "mt_startuplistupdater_[%S].txt" );
+
+
+class CTestStartupListUpdater : public CScriptBase
+    {
+    public:     // constructors and destructor
+        static CTestStartupListUpdater* NewL( CTestModuleIf& aTestModuleIf );
+        ~CTestStartupListUpdater();
+
+    private:    // new functions
+        CTestStartupListUpdater( CTestModuleIf& aTestModuleIf );
+        void ConstructL();
+        void SendTestClassVersion();
+        void Delete();
+        void Print( const TInt aPriority, TRefByValue<const TDesC> aFmt, ... );
+
+    public:     // from CScriptBase
+        TInt RunMethodL( CStifItemParser& aItem );
+
+    private:    // test methods
+        TInt InstallL( CStifItemParser& aItem );
+        TInt RemoveL( CStifItemParser& aItem );
+        TInt CheckStartListContainsL( CStifItemParser& aItem );
+        TInt CheckStartListDoesNotContainL( CStifItemParser& aItem );
+
+    private:    // new functions
+        void GetStartupListL( RPointerArray<HBufC>& aStartupList );
+    };
+
+#endif      // MT_STARTUPLISTUPDATER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/init/TestFramework.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description:  Startup list updater test module.
+#
+#
+
+[Engine_Defaults]
+TestReportMode= FullReport
+CreateTestReport= YES
+TestReportFilePath= C:\LOGS\TestFramework\
+TestReportFileName= TestReport
+TestReportFormat= TXT
+TestReportOutput= FILE
+TestReportFileCreationMode= OVERWRITE
+DeviceResetDllName= StifResetForNokia.dll
+DisableMeasurement= stifmeasurementdisablenone
+Timeout= 0
+UITestingSupport= YES
+SeparateProcesses= NO
+[End_Defaults]
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= c:\testframework\mt_startuplistupdater.cfg
+[End_Module]
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/rom/mt_startuplistupdater.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Startup list updater test module.
+*
+*/
+
+#ifndef MT_STARTUPLISTUPDATERTEST_IBY
+#define MT_STARTUPLISTUPDATERTEST_IBY
+
+data=\epoc32\release\armv5\urel\mt_startuplistupdater.dll   \sys\bin\mt_startuplistupdater.dll
+
+#endif  // MT_STARTUPLISTUPDATERTEST_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/src/mt_startuplistupdater.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,118 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Startup list updater test module.
+*
+*/
+
+#include "mt_startuplistupdater.h"          // CTestStartupListUpdater
+#include <SettingServerClient.h>            // RSettingServer
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::CTestStartupListUpdater
+// ---------------------------------------------------------------------------
+//
+CTestStartupListUpdater::CTestStartupListUpdater( CTestModuleIf& aTestModuleIf ) :
+        CScriptBase( aTestModuleIf )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CTestStartupListUpdater::ConstructL()
+    {
+    // Read settings to check if test case name is to be appended to file name.
+    RSettingServer settingsServer;
+    User::LeaveIfError( settingsServer.Connect() );
+    CleanupClosePushL( settingsServer );
+
+    TLoggerSettings loggerSettings;
+    User::LeaveIfError( settingsServer.GetLoggerSettings( loggerSettings ) );
+
+    CleanupStack::PopAndDestroy( &settingsServer );
+
+    TFileName logFileName;
+    if( loggerSettings.iAddTestCaseTitle )
+        {
+        TName title;
+        TestModuleIf().GetTestCaseTitleL( title );
+        logFileName.Format( KTestStartupListUpdaterLogFileWithTitle, &title );
+        }
+    else
+        {
+        logFileName.Copy( KTestStartupListUpdaterLogFile );
+        }
+
+    iLog = CStifLogger::NewL( KTestStartupListUpdaterLogPath, logFileName,
+        CStifLogger::ETxt, CStifLogger::EFile, EFalse );
+    SendTestClassVersion();
+    }
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::NewL
+// ---------------------------------------------------------------------------
+//
+CTestStartupListUpdater* CTestStartupListUpdater::NewL( CTestModuleIf& aTestModuleIf )
+    {
+    CTestStartupListUpdater* self = new( ELeave ) CTestStartupListUpdater( aTestModuleIf );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::~CTestStartupListUpdater()
+// ---------------------------------------------------------------------------
+//
+CTestStartupListUpdater::~CTestStartupListUpdater()
+    {
+    Delete();
+    delete iLog;
+    }
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::SendTestClassVersion
+// ---------------------------------------------------------------------------
+//
+void CTestStartupListUpdater::SendTestClassVersion()
+    {
+    TVersion moduleVersion;
+    moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR;
+    moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR;
+    moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD;
+
+    TFileName moduleName;
+    moduleName = _L("mt_startuplistupdater.dll");
+
+    TBool newVersionOfMethod = ETrue;
+    TestModuleIf().SendTestModuleVersion( moduleVersion, moduleName, newVersionOfMethod );
+    }
+
+
+// ======== GLOBAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// LibEntryL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL( CTestModuleIf& aTestModuleIf )
+    {
+    return reinterpret_cast< CScriptBase* >( CTestStartupListUpdater::NewL( aTestModuleIf ) );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/src/mt_startuplistupdaterblocks.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,325 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Startup list updater test module.
+*
+*/
+
+#include "mt_startuplistupdater.h"      // CTestStartupListUpdater
+#include "cleanupresetanddestroy.h"     // CleanupResetAndDestroyPushL
+#include <StifParser.h>                 // CStifItemParser
+#include <usif/sif/sif.h>               // Usif::RSoftwareInstall
+#include <usif/scr/scr.h>               // Usif::RSoftwareComponentRegistry
+#include <dscstore.h>                   // RDscStore
+#include <dscitem.h>                    // CDscItem
+
+const TInt KMaxLineLength = 256;
+
+_LIT( KTestTag, "SLU" );
+_LIT( KTestStartFormat, "%S: start" );
+_LIT( KTestParamFormatArg, "%S: %S => %d");
+_LIT( KTestDoneFormat, "%S: done" );
+
+using namespace Usif;
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// FileNamesEqual()
+// ---------------------------------------------------------------------------
+//
+TBool FileNamesEqual( const HBufC& aFile1, const HBufC& aFile2 )
+    {
+    return ( aFile1.CompareF( aFile2 ) == 0 );
+    }
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::Delete
+// ---------------------------------------------------------------------------
+//
+void CTestStartupListUpdater::Delete()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CTestStartupListUpdater::Print()
+// -----------------------------------------------------------------------------
+//
+void CTestStartupListUpdater::Print( const TInt aPriority,
+        TRefByValue<const TDesC> aFmt, ... )
+    {
+    VA_LIST list;
+    VA_START( list, aFmt );
+    TBuf<KMaxLineLength> buf;
+    buf.FormatList( aFmt, list );
+    iLog->Log( buf );
+    TestModuleIf().Printf( aPriority, KTestTag, buf );
+    }
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::RunMethodL
+// ---------------------------------------------------------------------------
+//
+TInt CTestStartupListUpdater::RunMethodL( CStifItemParser& aItem )
+    {
+    static TStifFunctionInfo const KFunctions[] =
+        {
+        ENTRY( "Install", CTestStartupListUpdater::InstallL ),
+        ENTRY( "Remove", CTestStartupListUpdater::RemoveL ),
+        ENTRY( "InStartList", CTestStartupListUpdater::CheckStartListContainsL ),
+        ENTRY( "NotInStartList", CTestStartupListUpdater::CheckStartListDoesNotContainL )
+        };
+
+    const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo );
+    return RunInternalL( KFunctions, count, aItem );
+    }
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::InstallL
+// ---------------------------------------------------------------------------
+//
+TInt CTestStartupListUpdater::InstallL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "Install" );
+    Print( 0, KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    RSoftwareInstall installer;
+    User::LeaveIfError( installer.Connect() );
+    CleanupClosePushL( installer );
+
+    TPtrC param;
+    while ( aItem.GetNextString ( param ) == KErrNone )
+        {
+        COpaqueNamedParams* args = COpaqueNamedParams::NewLC();
+        COpaqueNamedParams* results = COpaqueNamedParams::NewLC();
+        args->AddIntL( KSifInParam_InstallSilently, 1 );
+
+        TRequestStatus status;
+        installer.Install( param, *args, *results, status );
+        User::WaitForRequest( status );
+        testResult = status.Int();
+
+        CleanupStack::PopAndDestroy( 2, args );
+
+        Print( 1, KTestParamFormatArg, &KTestName, &param, testResult );
+        }
+
+    CleanupStack::PopAndDestroy( &installer );
+
+    Print( 0, KTestDoneFormat, &KTestName );
+    return testResult;
+    }
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::RemoveL()
+// ---------------------------------------------------------------------------
+//
+TInt CTestStartupListUpdater::RemoveL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "Remove" );
+    Print( 0, KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    RSoftwareComponentRegistry registry;
+    User::LeaveIfError( registry.Connect() );
+    CleanupClosePushL( registry );
+
+    // Get installed application TComponentIds and TUids
+    RArray<TUid> uidList;
+    CleanupClosePushL( uidList );
+    RArray<TComponentId> componentIdList;
+    CleanupClosePushL( componentIdList );
+
+    registry.GetComponentIdsL( componentIdList );
+    for( TInt i = 0; i < componentIdList.Count(); ++i ) {
+        TComponentId compId = componentIdList[ i ];
+        CComponentEntry *compEntry = CComponentEntry::NewLC();
+        if( registry.GetComponentL( compId, *compEntry ) ) {
+            if( compEntry->IsRemovable() && compEntry->SoftwareType() == KSoftwareTypeNative )
+                {
+                _LIT(KCompUid, "CompUid");
+                CPropertyEntry *property = registry.GetComponentPropertyL( compId, KCompUid );
+                CleanupStack::PushL( property );
+                CIntPropertyEntry* intProperty = dynamic_cast<CIntPropertyEntry*>( property );
+                uidList.AppendL( TUid::Uid( intProperty->IntValue() ) );
+                CleanupStack::PopAndDestroy( property );
+            } else {
+                uidList.AppendL( KNullUid );
+            }
+
+        }
+        CleanupStack::PopAndDestroy( compEntry );
+    }
+    if( uidList.Count() != componentIdList.Count() )
+        {
+        _LIT( KFailedToGetIds, "Failed to get IDs" );
+        Print( 0, KTestStartFormat, &KFailedToGetIds );
+        testResult = KErrGeneral;
+        }
+
+    // Uninstall TUid apps listed in parameters
+    TPtrC param;
+    while( aItem.GetNextString ( param ) == KErrNone && testResult == KErrNone )
+        {
+        const TUint KMaxLimit = 0xFFFFFFFF;
+        TLex lex( param );
+        TUint32 intVal = 0;
+
+        _LIT( KHexPrefix, "0x" );
+        if( param.Left( KHexPrefix().Length() ) == KHexPrefix )
+            {
+            lex.Inc( KHexPrefix().Length() );
+            testResult = lex.BoundedVal( intVal, EHex, KMaxLimit );
+            }
+        else
+            {
+            testResult = lex.BoundedVal( intVal, EDecimal, KMaxLimit );
+            }
+
+        if( testResult == KErrNone )
+            {
+            TUid uid( TUid::Uid( intVal ) );
+            if( uid != KNullUid )
+                {
+                TInt index = uidList.Find( uid );
+                if( index >= 0 && index < componentIdList.Count() )
+                    {
+                    TComponentId componentId = componentIdList[ index ];
+
+                    RSoftwareInstall installer;
+                    User::LeaveIfError( installer.Connect() );
+                    CleanupClosePushL( installer );
+
+                    TRequestStatus status;
+                    installer.Uninstall( componentId, status );
+                    User::WaitForRequest( status );
+                    testResult = status.Int();
+
+                    CleanupStack::PopAndDestroy( &installer );
+                    }
+                else
+                    {
+                    testResult = KErrNotFound;
+                    }
+                }
+            else
+                {
+                testResult = KErrUnknown;
+                }
+            }
+        Print( 1, KTestParamFormatArg, &KTestName, &param, testResult );
+        }
+
+    CleanupStack::PopAndDestroy( 3, &registry );    // componentIdList, uidList, registry
+    Print( 0, KTestDoneFormat, &KTestName );
+    return testResult;
+    }
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::CheckStartListContainsL()
+// ---------------------------------------------------------------------------
+//
+TInt CTestStartupListUpdater::CheckStartListContainsL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "InStartList" );
+    Print( 0, KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    RPointerArray<HBufC> startupList;
+    CleanupResetAndDestroyPushL( startupList );
+    GetStartupListL( startupList );
+
+    TIdentityRelation<HBufC> compareFileNames( FileNamesEqual );
+
+    TPtrC param;
+    while( aItem.GetNextString ( param ) == KErrNone )
+        {
+        HBufC* buf = param.AllocLC();
+        if( startupList.Find( buf, compareFileNames ) == KErrNotFound )
+            {
+            testResult = KErrNotFound;
+            }
+        CleanupStack::PopAndDestroy( buf );
+        Print( 1, KTestParamFormatArg, &KTestName, &param, testResult );
+        }
+
+    CleanupStack::PopAndDestroy( &startupList );
+
+    Print( 0, KTestDoneFormat, &KTestName );
+    return testResult;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::CheckStartListDoesNotContainL()
+// ---------------------------------------------------------------------------
+//
+TInt CTestStartupListUpdater::CheckStartListDoesNotContainL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "NotInStartList" );
+    Print( 0, KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    RPointerArray<HBufC> startupList;
+    CleanupResetAndDestroyPushL( startupList );
+    GetStartupListL( startupList );
+
+    TIdentityRelation<HBufC> compareFileNames( FileNamesEqual );
+
+    TPtrC param;
+    while( aItem.GetNextString ( param ) == KErrNone )
+        {
+        HBufC* buf = param.AllocLC();
+        if( startupList.Find( buf, compareFileNames ) >= 0 )
+            {
+            testResult = KErrAlreadyExists;
+            }
+        CleanupStack::PopAndDestroy( buf );
+        Print( 1, KTestParamFormatArg, &KTestName, &param, testResult );
+        }
+
+    CleanupStack::PopAndDestroy( &startupList );
+
+    Print( 0, KTestDoneFormat, &KTestName );
+    return testResult;
+    }
+
+// ---------------------------------------------------------------------------
+// CTestStartupListUpdater::GetStartupListL()
+// ---------------------------------------------------------------------------
+//
+void CTestStartupListUpdater::GetStartupListL( RPointerArray<HBufC>& aStartupList )
+    {
+    RDscStore dscStore;
+    dscStore.OpenL();
+    CleanupClosePushL( dscStore );
+    if( !dscStore.DscExistsL() )
+        {
+        dscStore.CreateDscL();
+        }
+    dscStore.EnumOpenLC();
+
+    while( CDscItem* item = dscStore.EnumReadNextL() )
+        {
+        CleanupStack::PushL( item );
+        aStartupList.AppendL( item->FileName().AllocL() );
+        CleanupStack::PopAndDestroy( item );
+        }
+
+    CleanupStack::PopAndDestroy( 2, &dscStore );    // EnumClose, dscStore
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/run_module_tests.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for startup list updater.
+rem
+
+pushd mt_startuplistupdater
+call ctc_instrument_code.bat
+call ctc_compile_tests.bat
+call ctc_run_tests.bat
+call ctc_remove_instrumentation.bat
+popd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/testslulauncher/main.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test startup list update launcher application
+*
+*/
+
+#include "testslulauncher.h"
+
+int main(int argc, char *argv[]) {
+    TestStartupListUpdateLauncher testApp(argc, argv);
+    testApp.setApplicationName("TestSLULauncher");
+    return testApp.exec();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/testslulauncher/testslulauncher.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test startup list update launcher application
+*
+*/
+
+#include "testslulauncher.h"
+#include <hbmainwindow.h>
+#include <hbview.h>
+#include <hbpushbutton.h>
+#include <hblabel.h>
+#include <hbmessagebox.h>
+#include <QGraphicsLinearLayout>
+#ifdef Q_OS_SYMBIAN
+#include <e32std.h>
+#endif  // Q_OS_SYMBIAN
+
+
+// ======== LOCAL FUNCTIONS ========
+
+#ifdef Q_OS_SYMBIAN
+_LIT( KStartupListUpdater, "z:\\sys\\bin\\startuplistupdater.exe" );
+
+// ---------------------------------------------------------------------------
+// DoLaunchStartupListUpdater()
+// ---------------------------------------------------------------------------
+//
+TInt DoLaunchStartupListUpdater()
+{
+    RProcess process;
+    TInt result = process.Create( KStartupListUpdater, KNullDesC );
+
+    if (result == KErrNone) {
+        TRequestStatus rendezvousStatus;
+        process.Rendezvous(rendezvousStatus);
+
+        // start process and wait until it is started
+        process.Resume();
+        User::WaitForRequest(rendezvousStatus);
+
+        if (rendezvousStatus.Int() == KErrNone) {
+            TRequestStatus logonStatus;
+            process.Logon(logonStatus);
+
+            // waits until process is finished
+            User::WaitForRequest(logonStatus);
+
+            result = logonStatus.Int();
+        } else {
+            result = rendezvousStatus.Int();
+        }
+
+        process.Close();
+    }
+
+    return result;
+}
+#endif  // Q_OS_SYMBIAN
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// TestStartupListUpdateLauncher::TestStartupListUpdateLauncher
+// ---------------------------------------------------------------------------
+//
+TestStartupListUpdateLauncher::TestStartupListUpdateLauncher(int& argc, char* argv[])
+        : HbApplication(argc, argv), mMainWindow(0), mMainView(0)
+{
+    mMainWindow = new HbMainWindow();
+    mMainView = new HbView();
+    mMainView->setTitle(tr("Test SLU Launcher"));
+
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    HbPushButton *updateStartupList = new HbPushButton(tr("Update Startup List"));
+    layout->addItem(updateStartupList);
+    connect(updateStartupList, SIGNAL(clicked()), this, SLOT(updateStartupList()));
+
+    HbPushButton *exitApp = new HbPushButton(tr("Exit"));
+    layout->addItem(exitApp);
+    connect(exitApp, SIGNAL(clicked()), this, SLOT(closeApp()));
+
+    mMainView->setLayout(layout);
+    mMainWindow->addView(mMainView);
+    mMainWindow->show();
+}
+
+// ---------------------------------------------------------------------------
+// TestStartupListUpdateLauncher::~TestStartupListUpdateLauncher
+// ---------------------------------------------------------------------------
+//
+TestStartupListUpdateLauncher::~TestStartupListUpdateLauncher()
+{
+    delete mMainView;
+    delete mMainWindow;
+}
+
+// ---------------------------------------------------------------------------
+// TestStartupListUpdateLauncher::updateStartupList()
+// ---------------------------------------------------------------------------
+//
+void TestStartupListUpdateLauncher::updateStartupList()
+{
+#ifdef Q_OS_SYMBIAN
+    int err = DoLaunchStartupListUpdater();
+    if( !err ) {
+        HbMessageBox::information(tr("Ok"));
+    } else {
+        HbMessageBox::information(tr("Error %L1").arg(err));
+    }
+#endif  // Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+// TestStartupListUpdateLauncher::closeApp()
+// ---------------------------------------------------------------------------
+//
+void TestStartupListUpdateLauncher::closeApp()
+{
+    qApp->exit();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/testslulauncher/testslulauncher.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Test startup list update launcher application
+*
+*/
+
+#ifndef TESTSLULAUNCHER_H
+#define TESTSLULAUNCHER_H
+
+#include <hbapplication.h>
+
+class HbMainWindow;
+class HbView;
+
+
+class TestStartupListUpdateLauncher : public HbApplication
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    TestStartupListUpdateLauncher(int& argc, char* argv[]);
+    ~TestStartupListUpdateLauncher();
+
+private slots:
+    void updateStartupList();
+    void closeApp();
+
+private:    // functions
+
+private:    // data
+    HbMainWindow *mMainWindow;
+    HbView       *mMainView;
+};
+
+#endif  // TESTSLULAUNCHER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/testslulauncher/testslulauncher.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:  Test startup list update launcher application
+#
+#
+
+
+TEMPLATE = app
+TARGET = testslulauncher
+DEPENDPATH += .
+INCLUDEPATH += .
+CONFIG += Hb
+
+HEADERS +=  testslulauncher.h
+SOURCES +=  testslulauncher.cpp main.cpp
+
+symbian {
+    TARGET.CAPABILITY = ALL -TCB
+    TARGET.UID2 = 0x100039ce
+    TARGET.UID3 = 0xed835a87      // random UID
+    TARGET.VID = VID_DEFAULT
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/appinstaller.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+TEMPLATE = subdirs
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+SUBDIRS += AppinstUi/appinstui.pro
+
--- a/appinstaller/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/appinstaller/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -23,7 +23,6 @@
 
 PRJ_MMPFILES
 
-#include "../AppMngr2/group/bld.inf"
 #include "../AppinstUi/group/bld.inf"
 
 
--- a/iaupdate/IAD/api/bwins/iaupdateapiu.def	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-EXPORTS
-	??1CIAUpdate@@UAE@XZ @ 1 NONAME ; CIAUpdate::~CIAUpdate(void)
-	??1CIAUpdateParameters@@UAE@XZ @ 2 NONAME ; CIAUpdateParameters::~CIAUpdateParameters(void)
-	??1CIAUpdateResult@@UAE@XZ @ 3 NONAME ; CIAUpdateResult::~CIAUpdateResult(void)
-	?CancelCount@CIAUpdateResult@@QBEHXZ @ 4 NONAME ; int CIAUpdateResult::CancelCount(void) const
-	?CheckUpdates@CIAUpdate@@QAEXABVCIAUpdateParameters@@@Z @ 5 NONAME ; void CIAUpdate::CheckUpdates(class CIAUpdateParameters const &)
-	?CommandLineArguments@CIAUpdateParameters@@QBEABVTDesC8@@XZ @ 6 NONAME ; class TDesC8 const & CIAUpdateParameters::CommandLineArguments(void) const
-	?CommandLineExecutable@CIAUpdateParameters@@QBEABVTDesC16@@XZ @ 7 NONAME ; class TDesC16 const & CIAUpdateParameters::CommandLineExecutable(void) const
-	?FailCount@CIAUpdateResult@@QBEHXZ @ 8 NONAME ; int CIAUpdateResult::FailCount(void) const
-	?NewL@CIAUpdate@@SAPAV1@AAVMIAUpdateObserver@@@Z @ 9 NONAME ; class CIAUpdate * CIAUpdate::NewL(class MIAUpdateObserver &)
-	?NewL@CIAUpdateParameters@@SAPAV1@XZ @ 10 NONAME ; class CIAUpdateParameters * CIAUpdateParameters::NewL(void)
-	?NewL@CIAUpdateResult@@SAPAV1@XZ @ 11 NONAME ; class CIAUpdateResult * CIAUpdateResult::NewL(void)
-	?NewLC@CIAUpdate@@SAPAV1@AAVMIAUpdateObserver@@@Z @ 12 NONAME ; class CIAUpdate * CIAUpdate::NewLC(class MIAUpdateObserver &)
-	?NewLC@CIAUpdateParameters@@SAPAV1@XZ @ 13 NONAME ; class CIAUpdateParameters * CIAUpdateParameters::NewLC(void)
-	?NewLC@CIAUpdateResult@@SAPAV1@XZ @ 14 NONAME ; class CIAUpdateResult * CIAUpdateResult::NewLC(void)
-	?SearchCriteria@CIAUpdateParameters@@QBEABVTDesC16@@XZ @ 15 NONAME ; class TDesC16 const & CIAUpdateParameters::SearchCriteria(void) const
-	?SetCancelCount@CIAUpdateResult@@QAEXH@Z @ 16 NONAME ; void CIAUpdateResult::SetCancelCount(int)
-	?SetCommandLineArgumentsL@CIAUpdateParameters@@QAEXABVTDesC8@@@Z @ 17 NONAME ; void CIAUpdateParameters::SetCommandLineArgumentsL(class TDesC8 const &)
-	?SetCommandLineExecutableL@CIAUpdateParameters@@QAEXABVTDesC16@@@Z @ 18 NONAME ; void CIAUpdateParameters::SetCommandLineExecutableL(class TDesC16 const &)
-	?SetFailCount@CIAUpdateResult@@QAEXH@Z @ 19 NONAME ; void CIAUpdateResult::SetFailCount(int)
-	?SetSearchCriteriaL@CIAUpdateParameters@@QAEXABVTDesC16@@@Z @ 20 NONAME ; void CIAUpdateParameters::SetSearchCriteriaL(class TDesC16 const &)
-	?SetSuccessCount@CIAUpdateResult@@QAEXH@Z @ 21 NONAME ; void CIAUpdateResult::SetSuccessCount(int)
-	?SetUid@CIAUpdateParameters@@QAEXABVTUid@@@Z @ 22 NONAME ; void CIAUpdateParameters::SetUid(class TUid const &)
-	?ShowUpdates@CIAUpdate@@QAEXABVCIAUpdateParameters@@@Z @ 23 NONAME ; void CIAUpdate::ShowUpdates(class CIAUpdateParameters const &)
-	?SuccessCount@CIAUpdateResult@@QBEHXZ @ 24 NONAME ; int CIAUpdateResult::SuccessCount(void) const
-	?Uid@CIAUpdateParameters@@QBEABVTUid@@XZ @ 25 NONAME ; class TUid const & CIAUpdateParameters::Uid(void) const
-	?Update@CIAUpdate@@QAEXABVCIAUpdateParameters@@@Z @ 26 NONAME ; void CIAUpdate::Update(class CIAUpdateParameters const &)
-	?UpdateQuery@CIAUpdate@@QAEXXZ @ 27 NONAME ; void CIAUpdate::UpdateQuery(void)
-	?SetShowProgress@CIAUpdateParameters@@QAEXH@Z @ 28 NONAME ; void CIAUpdateParameters::SetShowProgress(int)
-	?ShowProgress@CIAUpdateParameters@@QBEHXZ @ 29 NONAME ; int CIAUpdateParameters::ShowProgress(void) const
-	?Importance@CIAUpdateParameters@@QBEIXZ @ 30 NONAME ; unsigned int CIAUpdateParameters::Importance(void) const
-	?Refresh@CIAUpdateParameters@@QBEHXZ @ 31 NONAME ; int CIAUpdateParameters::Refresh(void) const
-	?SetImportance@CIAUpdateParameters@@QAEXI@Z @ 32 NONAME ; void CIAUpdateParameters::SetImportance(unsigned int)
-	?SetRefresh@CIAUpdateParameters@@QAEXH@Z @ 33 NONAME ; void CIAUpdateParameters::SetRefresh(int)
-	?SetType@CIAUpdateParameters@@QAEXI@Z @ 34 NONAME ; void CIAUpdateParameters::SetType(unsigned int)
-	?Type@CIAUpdateParameters@@QBEIXZ @ 35 NONAME ; unsigned int CIAUpdateParameters::Type(void) const
-
--- a/iaupdate/IAD/api/client/inc/iaupdateclient.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/api/client/inc/iaupdateclient.h	Tue Aug 31 15:21:33 2010 +0300
@@ -20,195 +20,93 @@
 #ifndef IA_UPDATE_CLIENT_H
 #define IA_UPDATE_CLIENT_H
 
-#include <AknServerApp.h> 
+
 #include <e32std.h>
 #include <e32cmn.h>
+#include <iaupdateobserver.h>
+#include <QObject>
 
 class CIAUpdateParameters;
-
-/**
- * RIAUpdateClient object provides methods to delegate update actions
- * to the server side. Updating will be targeted to the update items that 
- * qualify the requirements of CIAUpdateParameters objects. In asynchronous 
- * actions, observers will be informed about the completion of update action.
- * 
- * Because this object is R-class, it does not provide constructor or destructor.
- * Usage:
- * - First, call Open-function.
- * - Second, use update functions to start update.
- * - Finally, user has to call Close-function to terminate object. 
- *   Otherwise, memory leaks may occur.
- *
- * @see CIAUpdateParameters
- * @see CIAUpdate
- *
- * @since S60 v3.2
- */
-NONSHARABLE_CLASS( RIAUpdateClient ) : public RAknAppServiceBase 
-    {
-
-public:
-
-    /**
-     * Constructor.
-     */
-     
-     RIAUpdateClient();
-
-    /** 
-     * This function will open the update action.
-     *
-     * @note This has to be called before calling operation functions.
-     *
-     * @return System wide error code.
-     *
-     * @since S60 v3.2
-     */
-    TInt Open();
-    
-    /** 
-     * Close releases the resources allocated by this class object.
-     * After Close is called, this R-class object may go out of scope.
-     *
-     * @note If Close is called before asynchronous operation has finished, 
-     * the operation will continue but callback functions of the observer
-     * will not be called when operation progresses. 
-     * 
-     * @since S60 v3.2
-     */
-    TInt OpenToBackroundAsync( TRequestStatus& aStatus );
-
-    TInt ConnectToApp();
-   
-    void Close();
+class MIAUpdateObserver;
+class XQServiceRequest;
 
 
-    /** 
-     * @see CIAUpdate::CheckUpdates
-     *
-     * @note The client server connection has to be opened by calling
-     * Open function before this function can be called.
-     *
-     * @param aAvailableUpdates Number of the updates that were found available.
-     * @param aStatus The status will be updated when the operation
-     * has been completed.
-     * @return Informs if the initialization of server request failed.
-     *         System wide error code. 
-     *
-     * @since S60 v3.2
-     */
-    TInt CheckUpdates( const CIAUpdateParameters& aUpdateParameters,
-                       TInt& aAvailableUpdates,
-                       TRequestStatus& aStatus );
+class IAUpdateClient : public QObject
+//NONSHARABLE_CLASS( IAUpdateClient ) : public QObject
+    {
+    Q_OBJECT
+public:
     
+    enum RequestType
+        {
+        /**
+        * No operation is going on.
+        */ 
+        NoOperation,       
+            
+        /**
+        * Update check has been requested.
+        */
+        CheckUpdates,
+
+        /**
+        * Show Update operation has been requested.
+        */
+        ShowUpdates,     
+            
+        /**
+        * Update query has been requested.
+        */
+        UpdateQuery,
+        /**
+        * Bring to foreground has been requested.
+        */
+        BroughtToForeground
+        };
+
+    IAUpdateClient(MIAUpdateObserver& aObserver);
+     
+     
+    ~IAUpdateClient();
+
+    int initRequest(const CIAUpdateParameters* updateParameters, const QString& message, bool toBackground);
+
+    void checkUpdates(const CIAUpdateParameters& updateParameters);
+
+    void showUpdates(const CIAUpdateParameters& updateParameters);
+
+    void updateQuery();
+    
+    void update();
         
-    /** 
-     * @see CIAUpdate::ShowUpdates
-     *
-     * @note The client server connection has to be opened by calling
-     * Open function before this function can be called.
-     *
-     * @param aNumberOfSuccessfullUpdates Number of the successfull updates 
-     *                                    that were done during the update.
-     * @param aNumberOfFailedUpdates Number of the failed updates 
-     *                               that were done during the update.
-     * @param aNumberOfCancelledUpdates Number of the cancelled updates 
-     *                                  during the update.     
-     * @param aStatus The status will be updated when the operation
-     * has been completed.
-     * @return Informs if the initialization of server request failed.
-     *         System wide error code. 
-     *
-     * @since S60 v3.2
-     */
-    TInt ShowUpdates( const CIAUpdateParameters& aUpdateParameters,
-                      TInt& aNumberOfSuccessfullUpdates,
-                      TInt& aNumberOfFailedUpdates,
-                      TInt& aNumberOfCancelledUpdates,
-                      TRequestStatus& aStatus );
-    
+    void broughtToForeground();
+
+protected slots:
 
-        
-                 
-    /** 
-     * @see CIAUpdate::Update
-     *
-     * @note The client server connection has to be opened by calling
-     * Open function before this function can be called.
-     *
-     * @param aUpdateNow  Value depending on a user's choice
-     * @param aStatus The status will be updated when the operation
-     * has been completed.
-     * @return Informs if the initialization of server request failed.
-     *         System wide error code. 
-     *
-     * @since S60 v3.2
-     */
-    TInt UpdateQuery( TBool& aUpdateNow, TRequestStatus& aStatus );
-                      
-    
-    void BroughtToForeground();
+    void requestCompleted(const QVariant& value);
     
-    
-    /**
-     * Cancels the ongoing asynchronous operation.
-     * The active object that has started the update operation
-     * will be informed when the requested update operation 
-     * has been cancelled.
-     *
-     * @since S60 v3.2
-     */             
-    void CancelAsyncRequest();
-
-
-public: // RAknAppServiceBase
-
-    /**
-     * @see RAknAppServiceBase::ServiceUid
-     *
-     * @since S60 v3.2
-     */
-    TUid ServiceUid() const;
+    void requestError(int err);     
 
 
 private:
-    
-    // These functions send the operation requests to the server.
-    
-    TInt SendCheckUpdatesRequest( TInt aUpdateFunction,
-                                  const CIAUpdateParameters& aUpdateParameters,
-                                  TInt& aCount,
-                                  TRequestStatus& aStatus );
+     
+    QString qStringFromTDesC16( const TDesC16& aDes16 ); 
+     
+    QString qStringFromTDesC8( const TDesC8& aDes8 );
+     
+    QString qStringFromTDesC( const TDesC& aDes );
 
-    TInt SendUpdateRequest( TInt aUpdateFunction,
-                            const CIAUpdateParameters& aUpdateParameters,
-                            TInt& aNumberOfSuccessfullUpdates,
-                            TInt& aNumberOfFailedUdpdates,
-                            TInt& aNumberOfCancelledUpdates,
-                            TRequestStatus& aStatus );
-    
-    void ConnectNewAppToBackgroundL( TUid aAppUid );
-    
-    void StartNewAppToBackgroundL( TUid aAppUid, TRequestStatus& aStatus ); 
-    
-    void ServerName(TName& aServerName, TUid aAppServerUid, TUint aServerDifferentiator);
-    
-    TUint GenerateServerDifferentiatorAndName(TName& aServerName, TUid aAppServerUid);
-    
                                
 private: //data
-
-    HBufC8* iData;
     
-    TBool iConnected;
+    XQServiceRequest* mServiceRequest;
     
-    TInt iOwnWgId;
-    
-    TUint iDifferentiator;
+    // Informs what kind of operation is going on.
+    RequestType mCurrentRequestType;
     
-    TPtr8 iPtr1;
-    TPtr8 iPtr2;
-    TPtr8 iPtr3;  
+    // Observer who will be informed about the completion of the operations. 
+    MIAUpdateObserver& mObserver; 
+         
     };
 
 #endif // IA_UPDATE_CLIENT_H
--- a/iaupdate/IAD/api/client/inc/iaupdatemanager.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/api/client/inc/iaupdatemanager.h	Tue Aug 31 15:21:33 2010 +0300
@@ -15,8 +15,6 @@
 *
 */
 
-
-
 #ifndef IA_UPDATE_MANAGER_H
 #define IA_UPDATE_MANAGER_H
 
@@ -26,9 +24,8 @@
 #include <e32std.h>
 #include <coemain.h>
 
-#include "iaupdateclient.h"
-
 //FORWARD DECLARATIONS
+class IAUpdateClient;
 class CIAUpdateParameters;
 class MIAUpdateObserver;
 class CEikonEnv;
@@ -49,189 +46,34 @@
  *
  * @since S60 v3.2
  */
-NONSHARABLE_CLASS( CIAUpdateManager ) : public CActive, public MCoeForegroundObserver
+NONSHARABLE_CLASS( CIAUpdateManager ) : public CBase, public MCoeForegroundObserver
     {
 
 public:
 
-    /**
-     * These values inform what operation has been requested.
-     *
-     * @since S60 v3.2
-     */
-    enum TIAUpdateType
-        {
-        /**
-         * No operation is going on.
-         */ 
-        EIAUpdateIdle,    
-        /**
-         * SWUpdate app start requested.
-         */
-        
-        EIAUpdateStartServer,
-        
-        /**
-         * Update check has been requested.
-         */
-        EIAUpdateCheck,
-
-        /**
-         * Update operation has been requested.
-         */
-        EIAUpdateUpdate,     
-        
-        /**
-         * Update query has been requested.
-         */
-        EIAUpdateQuery   
-        };
-
-
-    /**
-     * @param aObserver Callback functions of the observer are called
-     * when operations progress.    
-     * @return CIAUpdateManager* Pointer to the created CIAUpdateManager 
-     * object that can be used for update actions.
-     *
-     * @since S60 v3.2
-     */
     static CIAUpdateManager* NewL( MIAUpdateObserver& aObserver );
     
-    /**
-     * @see NewL
-     *
-     * @since S60 v3.2
-     */
     static CIAUpdateManager* NewLC( MIAUpdateObserver& aObserver );
     
 
-    /**
-     * Destructor
-     *
-     * @since S60 v3.2
-     */
-    virtual ~CIAUpdateManager();
-    
 
-    /** 
-     * @see CIAUpdate::CheckUpdates
-     *
-     * @since S60 v3.2
-     */
+    ~CIAUpdateManager();
+  
     void CheckUpdates( const CIAUpdateParameters& aUpdateParameters );
-    
-        
-    /** 
-     * @see CIAUpdate::ShowUpdates
-     *
-     * @since S60 v3.2
-     */
+  
     void ShowUpdates( const CIAUpdateParameters& aUpdateParameters );
-    
-
-    /** 
-     * @see CIAUpdate::Update
-     *
-     * @since S60 v3.2
-     */
-    void Update( const CIAUpdateParameters& aUpdateParameters );
-    
-     /** 
-     * @see CIAUpdate::UpdateQuery
-     *
-     * @since S60 v3.2
-     */   
+ 
     void UpdateQuery();
-
-
-protected: // CActive
-
-    /**
-     * @see CActive::DoCancel
-     *
-     * @since S60 v3.2
-     */
-    virtual void DoCancel();
-
-    /**
-     * When the server side has finished operation, the CActive object will
-     * be informed about it, and as a result RunL will be called. This function
-     * well inform the observer that the operation has been completed.
-     * @see CActive::RunL
-     *
-     * @since S60 v3.2
-     */
-    virtual void RunL();
-
-
-protected:
-
-    /**
-     * @see NewL
-     *
-     * @since S60 v3.2
-     */
-    CIAUpdateManager( MIAUpdateObserver& aObserver );
     
-    /**
-     * @see NewL
-     *
-     * @since S60 v3.2
-     */
-    virtual void ConstructL();
-
-
-    /**
-     * Resets all the result variables to their default values.
-     *
-     * @since S60 v3.2
-     */
-    virtual void ResetResults();
-
-
-    /**
-     * @return ETrue if an operation is going on. Else EFalse.
-     *
-     * @since S60 v3.2
-     */
-    TBool BusyCheck() const;
-
-
-    /**
-     * @return RIAUpdateClient& Handles the client server communication.
-     *
-     * @since S60 v3.2
-     */
-    RIAUpdateClient& UpdateClient();
-
-
-    /**
-     * @return MUpdateObserver& Observer who will be informed about the
-     * completion of the operations.
-     *
-     * @since S60 v3.2
-     */
-    MIAUpdateObserver& Observer() const;
-
-
-    /**
-     * @return TIAUpdateType Informs what kind of operation is going on.
-     *
-     * @since S60 v3.2
-     */
-    TIAUpdateType UpdateType() const;
-    
-    /**
-     * @param aUpdateType Informs what kind of operation is going on.
-     *
-     * @since S60 v3.2
-     */
-    void SetUpdateType( TIAUpdateType aUpdateType );
+    void Update( const CIAUpdateParameters& aUpdateParameters );
 
 
 private:
 
+    CIAUpdateManager();
+    
+    void ConstructL( MIAUpdateObserver& aObserver );
+
     // Prevent these if not implemented
     CIAUpdateManager( const CIAUpdateManager& aObject );
     CIAUpdateManager& operator =( const CIAUpdateManager& aObject );
@@ -247,39 +89,14 @@
 	* Handles the application going into the background.
 	*/
 	void HandleLosingForeground();
-	
-private:// new functions
-	
-	void CheckUpdatesContinue();
-	
-	void CopyUpdateParamsL( const CIAUpdateParameters& aUpdateParameters );
+
 
 private: // data
-
-	CIAUpdateParameters* iUpdateParameters;
-	
-    // Observer who will be informed about the completion of the operations. 
-    MIAUpdateObserver& iObserver;    
-    
+   
     // Handles the client server communication.
-    RIAUpdateClient iUpdateClient;
-
-    // Informs what kind of operation is going on.
-    TIAUpdateType iUpdateType;
+    IAUpdateClient* iUpdateClient;
 
-    // This is used to storage the success count values for update operations.
-    TInt iSuccessCount;
-    
-    // This is used to storage the fail count values for update operations.
-    TInt iFailCount;
-    
-    // This is used to storage the cancel count values for update operations.
-    TInt iCancelCount;
-
-    TBool iUpdateNow;
-    
     CEikonEnv* iEikEnv; //not owned
-
     };
 
 #endif // IA_UPDATE_IMPL_H
--- a/iaupdate/IAD/api/client/src/iaupdateclient.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/api/client/src/iaupdateclient.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:   This module contains the implementation of RIAUpdateClient
+* Description:   This module contains the implementation of IAUpdateClient
 *                class member functions.
 *
 */
@@ -22,390 +22,406 @@
 #include <eikenv.h>
 #include <apgcli.h>
 #include <e32math.h>
+#include <iaupdateparameters.h>
+#include <iaupdateresult.h>
+#include <xqservicerequest.h>
+#include <xqserviceutil.h>
+#include <xqrequestinfo.h>
+
 #include "iaupdateclient.h"
 #include "iaupdateclientdefines.h"
-#include "iaupdatetools.h"
 #include "iaupdatedebug.h"
 
 
 // -----------------------------------------------------------------------------
-// RIAUpdateClient::RIAUpdateClient
+// IAUpdateClient::IAUpdateClient
 // 
 // -----------------------------------------------------------------------------
 // 
-RIAUpdateClient::RIAUpdateClient() 
-: iPtr1( NULL, 0 ),
-  iPtr2( NULL, 0 ),
-  iPtr3( NULL, 0 )
+IAUpdateClient::IAUpdateClient(MIAUpdateObserver& observer):
+    mObserver(observer)
     {
+    mServiceRequest = NULL;
+    mCurrentRequestType = NoOperation;
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateClient::~IAUpdateClient
+// 
+// -----------------------------------------------------------------------------
+// 
+IAUpdateClient::~IAUpdateClient() 
+    {
+    if ( mServiceRequest)
+        {
+        delete mServiceRequest;
+        }
     }
 
 
 // -----------------------------------------------------------------------------
-// RIAUpdateClient::Open
+// IAUpdateClient::initRequest
 // 
 // -----------------------------------------------------------------------------
 // 
-TInt RIAUpdateClient::Open()
+int IAUpdateClient::initRequest(const CIAUpdateParameters* updateParameters, const QString& message, bool toBackground)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::initRequest() begin");
+    int error(KErrNone);
+    if (mCurrentRequestType != NoOperation) 
+        {
+        error = KErrServerBusy;
+        }
+    else if (!mServiceRequest)
     {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::Open() begin");
-    TInt error( KErrNone );
+        mServiceRequest = new XQServiceRequest("com.nokia.services.swupdate.swupdate_interface", message, false);
+        if (mServiceRequest)
+        {    
+            connect(mServiceRequest, SIGNAL(requestCompleted(QVariant)), this, SLOT(requestCompleted(QVariant)));
+            connect(mServiceRequest, SIGNAL(requestError(int)), this, SLOT(requestError(int)));
+        }
+        else
+        {
+            error = KErrNoMemory;
+        }
+    }
+    else
+    {
+        mServiceRequest->setMessage(message);
+    }
     
-    if ( !iConnected )
+    
+    if (error == KErrNone)
+    {    
+        XQRequestInfo requestInfo;
+        requestInfo.setBackground(toBackground);
+        mServiceRequest->setInfo(requestInfo); 
+        int wgId = 0;
+        CEikonEnv* eikEnv = CEikonEnv::Static();
+        if ( eikEnv )
         {
-        TRAP( error, ConnectNewAppL( ServiceUid() ) );
-        if ( error == KErrNone ) 
-            {
-            iConnected = ETrue;
-            CEikonEnv* eikEnv = CEikonEnv::Static();
-            if ( eikEnv )
-                {
-            	RWindowGroup owngroup;
-		        iOwnWgId = eikEnv->RootWin().Identifier(); 
-		        
-	            TPckg<TInt> wgId( iOwnWgId );
-	            delete iData;
-	            iData = NULL;
-	             TRAP_IGNORE( iData = wgId.AllocL() );
-	            
-                TIpcArgs args;
-                args.Set( 0, iData );
-                SendReceive( IAUpdateClientDefines::EIAUpdateServerSendWgId, args );    
-	            } 
-            }
+            RWindowGroup owngroup;
+            wgId = eikEnv->RootWin().Identifier();
         }
-    IAUPDATE_TRACE_1("[IAUPDATE] RIAUpdateClient::Open() end error code: %d", error );
+        IAUPDATE_TRACE_1("IAUpdateClient::initRequest() wgId: %d", wgId);
+        QString stringWgid;
+        stringWgid.setNum(wgId);
+        *mServiceRequest << stringWgid;  
+        if (updateParameters)
+        {    
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() UID: %d", updateParameters->Uid().iUid);
+            QString stringUid; 
+            stringUid.setNum(updateParameters->Uid().iUid);
+            *mServiceRequest << stringUid;
+                
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() searchcriteria: %S", &updateParameters->SearchCriteria());
+            *mServiceRequest << qStringFromTDesC(updateParameters->SearchCriteria());
+                
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() executable: %S", &updateParameters->CommandLineExecutable());
+            *mServiceRequest << qStringFromTDesC(updateParameters->CommandLineExecutable());
+                
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() arguments: %S8", &updateParameters->CommandLineArguments());
+            *mServiceRequest << qStringFromTDesC8(updateParameters->CommandLineArguments());
+                
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() show progress: %d", updateParameters->ShowProgress());
+            QString stringShowProgress;
+            stringShowProgress.setNum(updateParameters->ShowProgress());
+            *mServiceRequest << stringShowProgress;
+                
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() importance: %d", updateParameters->Importance());
+            QString stringImportance;
+            stringImportance.setNum(updateParameters->Importance());
+            *mServiceRequest << stringImportance;
+                
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() type: %d", updateParameters->Type());
+            QString stringType;
+            stringType.setNum(updateParameters->Type());
+            *mServiceRequest << stringType;
+                
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() refresh: %d", updateParameters->Refresh());
+            QString stringRefresh;
+            stringRefresh.setNum(updateParameters->Refresh());
+            *mServiceRequest << stringRefresh;
+        }
+    }                 
+     
+    
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() error code: %d", error );
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::initRequest() end");
     return error;
-    }
+}
 
 // -----------------------------------------------------------------------------
-// RIAUpdateClient::OpenToBackroundAsync
-// 
-// -----------------------------------------------------------------------------
-//
-TInt RIAUpdateClient::OpenToBackroundAsync( TRequestStatus& aStatus )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::OpenToBackroundAsync() begin");
-    TInt error( KErrNone );
-    if ( !iConnected )
-        {
-        TRAP( error, StartNewAppToBackgroundL( ServiceUid(), aStatus ) );
-        }
-    IAUPDATE_TRACE_1("[IAUPDATE] RIAUpdateClient::OpenToBackroundAsync() end error code: %d", error );
-    return error;
-    }
-
-// -----------------------------------------------------------------------------
-// RIAUpdateClient::ConnectToApp
+// IAUpdateClient::checkUpdates
 // 
 // -----------------------------------------------------------------------------
 //
-TInt RIAUpdateClient::ConnectToApp()
+void IAUpdateClient::checkUpdates(const CIAUpdateParameters& updateParameters)
     {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::ConnectToApp() begin");
-    TInt error( KErrNone );
-    TName serverName;
-    ServerName(serverName, ServiceUid(), iDifferentiator);
-    TRAP( error,ConnectExistingByNameL( serverName ) );
-    
-    if ( error == KErrNone ) 
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::checkUpdates()");
+    QString message("checkUpdates(QString,QString,QString,QString,QString,QString,QString,QString,QString)");
+    //QString message("checkUpdates(int,int)");
+    int ret = initRequest(&updateParameters,message,!updateParameters.ShowProgress());
+    if (ret == KErrNone)
         {
-        iConnected = ETrue;
-        CEikonEnv* eikEnv = CEikonEnv::Static();
-        if ( eikEnv )
+        if (mServiceRequest->send()) 
             {
-            RWindowGroup owngroup;
-            iOwnWgId = eikEnv->RootWin().Identifier(); 
-                    
-            TPckg<TInt> wgId( iOwnWgId );
-            delete iData;
-            iData = NULL;
-            TRAP_IGNORE( iData = wgId.AllocL() );
-                    
-            TIpcArgs args;
-            args.Set( 0, iData );
-            SendReceive( IAUpdateClientDefines::EIAUpdateServerSendWgId, args );    
-            } 
+            mCurrentRequestType = CheckUpdates;
+            }
+        else
+            {
+            mObserver.CheckUpdatesComplete(ret,0);        
+            }
         }
-    IAUPDATE_TRACE_1("[IAUPDATE] RIAUpdateClient::ConnectToApp() end error code: %d", error );
-    return error; 
     }
 
-
-
-
 // -----------------------------------------------------------------------------
-// RIAUpdateClient::Close
+// IAUpdateClient::showUpdates
 // 
 // -----------------------------------------------------------------------------
 //
-void RIAUpdateClient::Close()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::Close() begin");
-    // Let the parent handle closing.
-    RAknAppServiceBase::Close();
-    iConnected = EFalse;
-    delete iData;
-    iData = NULL;
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::Close() end");
-    }
-
-// -----------------------------------------------------------------------------
-// RIAUpdateClient::CheckUpdates
-// 
-// -----------------------------------------------------------------------------
-//
-TInt RIAUpdateClient::CheckUpdates( const CIAUpdateParameters& aUpdateParameters,
-                                    TInt& aAvailableUpdates, 
-                                    TRequestStatus& aStatus )
+void IAUpdateClient::showUpdates(const CIAUpdateParameters& updateParameters)
     {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::CheckUpdates()");
-    // Inform the caller about the success of the request initializing.
-    return SendCheckUpdatesRequest( IAUpdateClientDefines::EIAUpdateServerCheckUpdates,
-                                    aUpdateParameters,
-                                    aAvailableUpdates,
-                                    aStatus );
-    }
-
-// -----------------------------------------------------------------------------
-// RIAUpdateClient::ShowUpdates
-// 
-// -----------------------------------------------------------------------------
-//
-TInt RIAUpdateClient::ShowUpdates( const CIAUpdateParameters& aUpdateParameters,
-                                   TInt& aNumberOfSuccessfullUpdates,
-                                   TInt& aNumberOfFailedUpdates,
-                                   TInt& aNumberOfCancelledUpdates,
-                                   TRequestStatus& aStatus )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::ShowUpdates()");
-    // Inform the caller about the success of the request initializing.
-    return SendUpdateRequest( IAUpdateClientDefines::EIAUpdateServerShowUpdates,
-                              aUpdateParameters,
-                              aNumberOfSuccessfullUpdates,
-                              aNumberOfFailedUpdates,
-                              aNumberOfCancelledUpdates,
-                              aStatus );
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::showUpdates()");
+    QString message("showUpdates(QString,QString,QString,QString,QString,QString,QString,QString,QString)");
+    int ret = initRequest(&updateParameters, message, false);
+    if (ret == KErrNone)
+        {
+        if (mServiceRequest->send())
+            {
+            mCurrentRequestType = ShowUpdates;
+            }
+        else
+            {
+            mObserver.UpdateComplete(ret,NULL);
+            }
+        }
     }
     
 
 // -----------------------------------------------------------------------------
-// RIAUpdateClient::UpdateQuery
+// IAUpdateClient::updateQuery
 // 
 // -----------------------------------------------------------------------------
 //    
-TInt RIAUpdateClient::UpdateQuery( TBool& aUpdateNow, TRequestStatus& aStatus )
+void IAUpdateClient::updateQuery()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::updateQuery() begin");
+    QString message("updateQuery(QString)");
+    CIAUpdateParameters* nullParameters = NULL;
+    int ret = initRequest(nullParameters, message, false);
+    if (ret == KErrNone)
     {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::UpdateQuery() begin");
-	TPckg<TBool> updateNow( aUpdateNow );
-	iPtr1.Set( updateNow );
-	            
-    TIpcArgs args;
-    args.Set( 1, &iPtr1 );
-    
-	SendReceive( IAUpdateClientDefines::EIAUpdateServerShowUpdateQuery, 
-	             args, 
-	             aStatus );    
-	IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::UpdateQuery() begin");    
-    return KErrNone;
+        if (mServiceRequest->send()) 
+        {
+            mCurrentRequestType = UpdateQuery;
+        }
+        else
+        {
+            mObserver.UpdateQueryComplete(ret,false);
+        }
     }
+	IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::updateQuery() end");    
+}
 
 // -----------------------------------------------------------------------------
-// RIAUpdateClient::BroughtToForeground
+// IAUpdateClient::update
+// 
+// -----------------------------------------------------------------------------
+// 
+void IAUpdateClient::update()
+{
+    mObserver.UpdateComplete(KErrNotSupported,NULL);
+}
+
+// -----------------------------------------------------------------------------
+// IAUpdateClient::broughtToForeground
 // 
 // -----------------------------------------------------------------------------
 //
-void RIAUpdateClient::BroughtToForeground()
+void IAUpdateClient::broughtToForeground()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::broughtToForeground() begin");
+    if (mServiceRequest)
     {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::BroughtToForeground() begin");
-    if ( iConnected )
+        QString message("broughtToForeground(int)");
+        CIAUpdateParameters* nullParameters = NULL;
+        int ret = initRequest(nullParameters, message, false);
+        if (ret == KErrNone)
         {
-    	SendReceive( IAUpdateClientDefines::EIAUpdateServerToForeground );
+            if (mServiceRequest->send())
+            {
+                mCurrentRequestType = BroughtToForeground;
+            }
         }
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::BroughtToForeground() end");
-    }
-
+    } 
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::broughtToForeground() end");
+}
 
 // -----------------------------------------------------------------------------
-// RIAUpdateClient::CancelAsyncRequest
-// 
-// -----------------------------------------------------------------------------
-//
-void RIAUpdateClient::CancelAsyncRequest()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::CancelAsyncRequest() begin");
-    // We suppose that an active object will
-    // wait for the cancellation to complete.
-    // So, let the server know that operation is cancelled.
-    // The server should set the correct status and complete
-    // the request of the active object. So, the cancellation 
-    // can proceed to the end.
-    if ( iConnected )
-        {
-    	SendReceive( IAUpdateClientDefines::EIAUpdateServerCancel ); 
-        }
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::CancelAsyncRequest() end");
-    }
-
-
-
-// -----------------------------------------------------------------------------
-// RIAUpdateClient::ServiceUid()
-// 
-// -----------------------------------------------------------------------------
-//
-TUid RIAUpdateClient::ServiceUid() const
-    {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::ServiceUid()");
-    return IAUpdateClientDefines::KIAUpdateServiceUid;    
-    }
-
-// -----------------------------------------------------------------------------
-// RIAUpdateClient::SendCheckUpdatesRequest
+// IAUpdateClient::requestCompleted
 // 
 // -----------------------------------------------------------------------------
 //
-TInt RIAUpdateClient::SendCheckUpdatesRequest( TInt aUpdateFunction,
-                                               const CIAUpdateParameters& aUpdateParameters,
-                                               TInt& aCount,
-                                               TRequestStatus& aStatus )
+void IAUpdateClient::requestCompleted(const QVariant& value)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::requestCompleted() begin");
+    RequestType requestType = mCurrentRequestType;
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::requestCompleted()request type: %d", requestType );
+    QList<QVariant> resultlist = value.toList();
+    int errorCode = resultlist.at(0).toInt();
+    CIAUpdateResult* updateResult(NULL);
+            
+    if ( requestType == ShowUpdates )
     {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::SendCheckUpdatesRequest() begin");
-    
-    aStatus = KRequestPending;
-
-    delete iData;
-    iData = NULL;   
-    
-    TInt error( KErrNone );
-    TRAP( error, 
-          IAUpdateTools::ExternalizeParametersL( iData, 
-                                                 aUpdateParameters ) );
-    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", error );
+        // Update result object is required.
+        // Notice that the ownership is transferred later.
+        // So, this function does not need to delete updateResult object.
+        TRAPD( trapError, updateResult = CIAUpdateResult::NewL() );
+        if ( updateResult )
+        {
+            updateResult->SetSuccessCount(resultlist.at(1).toInt());
+            updateResult->SetFailCount(resultlist.at(2).toInt());
+            updateResult->SetCancelCount(resultlist.at(3).toInt());
+        }
+        else
+        {
+            // Something went wrong when creating update result object.
+            // Update the error code accordingly.
+            errorCode = trapError;
+        }
+            // Let's assume that connection is not needed anymore
+        if (mServiceRequest)
+        {
+            delete mServiceRequest;
+            mServiceRequest= NULL;
+        }
+    }
+        
+    // Inform that no operation is going on anymore.
+    // This is required for busy check.
+    mCurrentRequestType = NoOperation;
+        
+    // Use the request type of the ongoing operation to check what callback
+    // function to call.
+    int countOfUpdates = 0;
+    bool updateNow = false;
+    switch (requestType)
+    {
+        case CheckUpdates:
+        countOfUpdates = resultlist.at(1).toInt();    
+        if (countOfUpdates == 0)
+        {
+            // Let's assume that connection is not needed anymore
+            delete mServiceRequest;  
+            mServiceRequest= NULL;
+        }
+        IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::requestCompleted() count of updates: %d", countOfUpdates );
+        mObserver.CheckUpdatesComplete(errorCode, countOfUpdates);
+        break;
 
-    // Because this function does not leave,
-    // use error value to check if request can be done.
-    if ( error == KErrNone )
+        case ShowUpdates:
+        // Notice that ownership of result object is transferred here.
+        IAUPDATE_TRACE_3("[IAUPDATE] IAUpdateClient::requestCompleted() success count: %d failed count: %d cancelled count: %d", updateResult->SuccessCount(), updateResult->FailCount(), updateResult->CancelCount() );
+        mObserver.UpdateComplete(errorCode, updateResult);
+        break;
+                
+        case UpdateQuery:
+        updateNow = resultlist.at(1).toBool();      
+        if ( !updateNow )
         {
-        TPckg<TInt> count( aCount );
-	    iPtr1.Set( count );
-	            
-        TIpcArgs args;
-        args.Set( 0, iData );
-        args.Set( 1, &iPtr1 );
-              
-        // Start the asynchronous operation in the server side.
-        SendReceive( aUpdateFunction, args, aStatus );        
-        }
-
-    // Inform the caller about the success of the request initializing.
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::SendCheckUpdatesRequest() begin");
-    return error;
+            // Let's assume that connection is not needed anymore
+            delete mServiceRequest;
+            mServiceRequest= NULL;
+        }    
+        IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::requestCompleted() update now: %d", updateNow );
+        mObserver.UpdateQueryComplete(errorCode, updateNow);
+        break;
+             
+        default:
+        // Should not ever come here.
+        break;
     }
+            
+    // Do not anything else than return after callback function is called because 
+    // this instance can be deleted by a client in a callback function
+    // 
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::requestCompleted() end");
+}
 
 // -----------------------------------------------------------------------------
-// RIAUpdateClient::SendUpdateRequest
+// IAUpdateClient::requestError
 // 
 // -----------------------------------------------------------------------------
 //
-TInt RIAUpdateClient::SendUpdateRequest( TInt aUpdateFunction,
-                                         const CIAUpdateParameters& aUpdateParameters,
-                                         TInt& aNumberOfSuccessfullUpdates,
-                                         TInt& aNumberOfFailedUpdates,
-                                         TInt& aNumberOfCancelledUpdates,
-                                         TRequestStatus& aStatus )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::SendUpdateRequest() begin");
-    aStatus = KRequestPending;
-
-    delete iData;
-    iData = NULL;   
-    
-    TInt error( KErrNone );
-    TRAP( error, 
-          IAUpdateTools::ExternalizeParametersL( iData, 
-                                                 aUpdateParameters ) );
-    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", error );
-    // Because this function does not leave,
-    // use error value to check if request can be done.
-    if ( error == KErrNone )
+void IAUpdateClient::requestError(int /*err*/)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::requestError() begin");
+    if ( mServiceRequest)
         {
-        TPckg<TInt> successCount( aNumberOfSuccessfullUpdates );
-	    iPtr1.Set( successCount );
-
-        TPckg<TInt> failCount( aNumberOfFailedUpdates );
-	    iPtr2.Set( failCount );
+            delete mServiceRequest;
+            mServiceRequest= NULL;
+        }
+    RequestType requestType = mCurrentRequestType;
+    mCurrentRequestType = NoOperation;
+    // because this method is called also when iaupdate is closed normally, error code is not passed to a client   
+    CIAUpdateResult* updateResult(NULL);
+    switch (requestType)
+    {
+        case CheckUpdates:
+        mObserver.CheckUpdatesComplete(0, 0);
+        break;
 
-        TPckg<TInt> cancelCount( aNumberOfCancelledUpdates );
-	    iPtr3.Set( cancelCount );
-	    	            
-        TIpcArgs args;
-        args.Set( 0, iData );
-        args.Set( 1, &iPtr1 );
-        args.Set( 2, &iPtr2 );
-        args.Set( 3, &iPtr3 );
-      
-        // Start the asynchronous operation in the server side.
-        SendReceive( aUpdateFunction, args, aStatus );        
-        }
-
-    // Inform the caller about the success of the request initializing.
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::SendUpdateRequest() end");
-    return error;
-    }    
+        case ShowUpdates:
+        // Notice that ownership of result object is transferred here.
+        TRAP_IGNORE( updateResult = CIAUpdateResult::NewL() );    
+        mObserver.UpdateComplete(0, updateResult);
+        break;
+                    
+        case UpdateQuery:
+        mObserver.UpdateQueryComplete(0, false);
+        break;
+                 
+        default:
+        // Should not ever come here.
+        break;
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::requestError() end");
+}     
 
 // -----------------------------------------------------------------------------
-// RIAUpdateClient::StartNewAppToBackgroundL
+// IAUpdateClient::qStringFromTDesC16
 // 
 // -----------------------------------------------------------------------------
 //
-void RIAUpdateClient::StartNewAppToBackgroundL( TUid aAppUid, TRequestStatus& aStatus )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::StartNewAppToBackgroundL() begin");
-    TName notUsed;
-    iDifferentiator = GenerateServerDifferentiatorAndName(notUsed, aAppUid);
-       
-    RApaLsSession apa;
-    User::LeaveIfError(apa.Connect());
-    CleanupClosePushL(apa);
-    
-    TApaAppInfo info;
-    User::LeaveIfError(apa.GetAppInfo(info, aAppUid));
-    
-    CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
-    cmdLine->SetExecutableNameL(info.iFullName);
-    cmdLine->SetServerRequiredL( iDifferentiator );
-    cmdLine->SetCommandL(EApaCommandBackground);
-         
-    TThreadId notUsedId;
-    User::LeaveIfError(apa.StartApp(*cmdLine, notUsedId, &aStatus));
-          
-    CleanupStack::PopAndDestroy(2, &apa);   // cmdLine and apa
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::StartNewAppToBackgroundL() end");
-    }
+QString IAUpdateClient::qStringFromTDesC16( const TDesC16& aDes16 )             
+{
+    return QString::fromUtf16( aDes16.Ptr(), aDes16.Length() );
+}
+
+// -----------------------------------------------------------------------------
+// IAUpdateClient::qStringFromTDesC8
+// 
+// -----------------------------------------------------------------------------
+//
+QString IAUpdateClient::qStringFromTDesC8( const TDesC8& aDes8 )                
+{
+    return QString::fromUtf8( reinterpret_cast<const char*>( aDes8.Ptr() ), aDes8.Length() );
+}
+
+// -----------------------------------------------------------------------------
+// IAUpdateClient::qStringFromTDesC
+// 
+// -----------------------------------------------------------------------------
+//
+QString IAUpdateClient::qStringFromTDesC( const TDesC& aDes )                    
+{
+#if defined(_UNICODE)
+    return qStringFromTDesC16( aDes );
+#else
+    return qStringFromTDesC8( aDes );
+#endif
+}
 
 
 
-void RIAUpdateClient::ServerName(TName& aServerName, TUid aAppServerUid, TUint aServerDifferentiator)
-    {
-    _LIT(KServerNameFormat, "%08x_%08x_AppServer");
-    aServerName.Format(KServerNameFormat, aServerDifferentiator, aAppServerUid);
-    }
-    
-TUint RIAUpdateClient::GenerateServerDifferentiatorAndName(TName& aServerName, TUid aAppServerUid)
-    {
-    TUint r;
-    FOREVER
-        {
-        r = Math::Random();
-        if (r==0)
-            continue;
-        ServerName(aServerName, aAppServerUid, r);
-        TFindServer find(aServerName);
-        TFullName fullName;
-        if (find.Next(fullName) == KErrNone)
-            continue;
-        break;
-        }       
-    return r;
-    }
--- a/iaupdate/IAD/api/client/src/iaupdatemanager.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/api/client/src/iaupdatemanager.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -20,15 +20,13 @@
 
 // INCLUDES
 #include <eikenv.h>
-#include <iaupdateobserver.h>
-#include <iaupdateresult.h>
-#include <iaupdateparameters.h>
 
 #include "iaupdatemanager.h"
 #include "iaupdateclient.h"
 #include "iaupdatedebug.h"
 
 
+
 // -----------------------------------------------------------------------------
 // CIAUpdateManager::NewL
 // 
@@ -51,9 +49,9 @@
 CIAUpdateManager* CIAUpdateManager::NewLC( MIAUpdateObserver& aObserver )
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::NewLC() begin");
-    CIAUpdateManager* self = new( ELeave ) CIAUpdateManager( aObserver );
+    CIAUpdateManager* self = new( ELeave ) CIAUpdateManager();
     CleanupStack::PushL( self );
-    self->ConstructL();
+    self->ConstructL( aObserver );
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::NewLC() end");
     return self;
     }
@@ -63,10 +61,7 @@
 // 
 // -----------------------------------------------------------------------------
 //    
-CIAUpdateManager::CIAUpdateManager( MIAUpdateObserver& aObserver )
-: CActive( CActive::EPriorityStandard ),
-  iObserver( aObserver ),
-  iUpdateType( EIAUpdateIdle )
+CIAUpdateManager::CIAUpdateManager()
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::CIAUpdateManager()");
     iEikEnv = CEikonEnv::Static();
@@ -77,10 +72,14 @@
 // 
 // -----------------------------------------------------------------------------
 //    
-void CIAUpdateManager::ConstructL()
+void CIAUpdateManager::ConstructL( MIAUpdateObserver& aObserver )
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::ConstructL() begin");
-    CActiveScheduler::Add( this );
+    iUpdateClient = new IAUpdateClient( aObserver );
+    if ( !iUpdateClient )
+        {
+        User::Leave(KErrNoMemory);
+        }
     if ( iEikEnv )
         {
     	iEikEnv->AddForegroundObserverL(*this);
@@ -96,12 +95,7 @@
 CIAUpdateManager::~CIAUpdateManager()
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::~CIAUpdateManager() begin");
-    delete iUpdateParameters;
-    iUpdateParameters = NULL;
-    // If an operation is still active, 
-    // then DoCancel will cancel ongoing request
-    Cancel();
-    UpdateClient().Close();
+    delete iUpdateClient;
     if ( iEikEnv )
         {
     	iEikEnv->RemoveForegroundObserver(*this);
@@ -117,60 +111,9 @@
 void CIAUpdateManager::CheckUpdates( const CIAUpdateParameters& aUpdateParameters )
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::CheckUpdates() begin");
-    if ( BusyCheck() )
-        {
-        // An operation is already going on.
-        // Do not continue with this new operation.
-        // Only, inform the observer with the error code.
-        // Notice that the callback is called synchronously here 
-        // because there is no better way to do it. Asynchronous way 
-        // would be really cumbersome because this object is already active. 
-        // This error is users fault. Therefore we, could also panic here.
-        Observer().CheckUpdatesComplete( KErrServerBusy, 0 );
-        return;
-        }
-
-    // Reset result values because we are starting a new operation.
-    ResetResults();
+    
+    iUpdateClient->checkUpdates( aUpdateParameters );
 
-    //
-    delete iUpdateParameters;
-    iUpdateParameters = NULL;
-    TInt error = KErrNone;
-    TRAP(error,CopyUpdateParamsL( aUpdateParameters ) );
-    if ( error == KErrNone )
-        {
-        // Set the update type. 
-        // So, we know later in RunL what operation was requested.
-        SetUpdateType( EIAUpdateStartServer );   
-        error = UpdateClient().OpenToBackroundAsync( iStatus);
-        }
- 
-    if ( error == KErrNone )
-        {
-        // Set this object active.
-        // Because everything went ok, 
-        // the operation will be handled asynchronously
-        // and the service provider will inform us when the operation
-        // is finished.
-        SetActive();        
-        }
-    else
-        {
-        // Because we are going to activate this active object,
-        // set the status pending.
-        iStatus = KRequestPending;
-        
-        // An error occurred above. 
-        // Therefore, the operation did not proceed any further.
-        // Set this object active for asynchronous error handling.
-        SetActive();
-                
-        // Now, that everything is ready, just inform the active scheduler
-        // that operation is finished. Pass the error code for the observer.
-        TRequestStatus* status( &iStatus );
-        User::RequestComplete( status, error );                
-        }
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::CheckUpdates() end");
     }
 
@@ -182,62 +125,8 @@
 void CIAUpdateManager::ShowUpdates( const CIAUpdateParameters& aUpdateParameters )
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::ShowUpdates() begin");
-    if ( BusyCheck() )
-         {
-         // An update operation is already going on.
-         // Do not continue with this new operation.
-         // Only, inform the observer with the error code.
-         // Notice that the callback is called synchronously here 
-         // because there is no better way to do it. Asynchronous way 
-         // would be really cumbersome because this object is already active. 
-         // This error is users fault. Therefore we, could also panic here.
-         Observer().UpdateComplete( KErrServerBusy, NULL );
-         return;
-         }
-
-    // Reset result values because we are starting a new operation.
-    ResetResults();
+    iUpdateClient->showUpdates( aUpdateParameters );
 
-    // Set the update type. 
-    // So, we know later in RunL what operation was requested.
-    SetUpdateType( EIAUpdateUpdate );
-    
-    TInt error( UpdateClient().Open() );
-    if ( error == KErrNone )
-        {    
-        error =
-            UpdateClient().ShowUpdates( aUpdateParameters, 
-                                        iSuccessCount,
-                                        iFailCount,
-                                        iCancelCount,  
-                                        iStatus );
-        }        
-
-    if ( error == KErrNone )
-        {
-        // Set this object active.
-        // Because everything went ok, 
-        // the operation will be handled asynchronously
-        // and the service provider will inform us when the operation
-        // is finished.
-        SetActive();        
-        }
-    else
-        {
-        // Because we are going to activate this active object,
-        // set the status pending.
-        iStatus = KRequestPending;
-        
-        // An error occurred above. 
-        // Therefore, the operation did not proceed any further.
-        // Set this object active for asynchronous error handling.
-        SetActive();
-                
-        // Now, that everything is ready, just inform the active scheduler
-        // that operation is finished. Pass the error code for the observer.
-        TRequestStatus* status( &iStatus );
-        User::RequestComplete( status, error );                
-        }
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::ShowUpdates() end");
     }
     
@@ -249,9 +138,9 @@
 void CIAUpdateManager::Update( const CIAUpdateParameters& /*aUpdateParameters*/ )
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::Update() begin");
-    Observer().UpdateComplete( KErrNotSupported, NULL );
-    
-    
+
+    iUpdateClient->update();
+   
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::Update() begin");
     }
 
@@ -263,259 +152,13 @@
 void CIAUpdateManager::UpdateQuery()
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::UpdateQuery() begin");
-    if ( BusyCheck() )
-        {
-        // An update operation is already going on.
-        // Do not continue with this new operation.
-        // Only, inform the observer with the error code.
-        // Notice that the callback is called synchronously here 
-        // because there is no better way to do it. Asynchronous way 
-        // would be really cumbersome because this object is already active. 
-        // This error is users fault. Therefore we, could also panic here.
-        Observer().UpdateQueryComplete( KErrServerBusy, EFalse );
-        return;
-    }
-
-    // Reset result values because we are starting a new operation.
-    ResetResults();
-
-    // Set the update type. 
-    // So, we know later in RunL what operation was requested.
-    SetUpdateType( EIAUpdateQuery );
-    
-    TInt error( UpdateClient().Open() );
-    if ( error == KErrNone )
-        {    
-        error =
-            UpdateClient().UpdateQuery( iUpdateNow, iStatus );
-        }        
-
-    if ( error == KErrNone )
-        {
-        // Set this object active.
-        // Because everything went ok, 
-        // the operation will be handled asynchronously
-        // and the service provider will inform us when the operation
-        // is finished.
-        SetActive();        
-        }
-    else
-        {
-        // Because we are going to activate this active object,
-        // set the status pending.
-        iStatus = KRequestPending;
         
-        // An error occurred above. 
-        // Therefore, the operation did not proceed any further.
-        // Set this object active for asynchronous error handling.
-        SetActive();
-                
-        // Now, that everything is ready, just inform the active scheduler
-        // that operation is finished. Pass the error code for the observer.
-        TRequestStatus* status( &iStatus );
-        User::RequestComplete( status, error );                
-        }
+    iUpdateClient->updateQuery();
+          
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::UpdateQuery() end");
     }
 
-// -----------------------------------------------------------------------------
-// CIAUpdateManager::DoCancel
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateManager::DoCancel()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::DoCancel() begin");
-    UpdateClient().CancelAsyncRequest();
 
-    // Reset result values because we are starting a new operation.
-    ResetResults();
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::DoCancel() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateManager::RunL
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateManager::RunL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::RunL() begin");
-    // Update operation error code
-    TInt errorCode( iStatus.Int() );
-    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", errorCode );
-    if ( errorCode == KErrServerTerminated )
-        {
-    	// Handle is released if server is terminated
-        UpdateClient().Close();
-        }
-
-    // Variables for operation and result information.
-    TIAUpdateType updateType( UpdateType() );
-    IAUPDATE_TRACE_1("[IAUPDATE] update type: %d", updateType );
-    CIAUpdateResult* updateResult( NULL );
-        
-    if ( updateType == EIAUpdateUpdate )
-        {
-        // Update result object is required.
-        // Notice that the ownership is transferred later.
-        // So, this function does not need to delete updateResult object.
-        TRAPD( trapError, updateResult = CIAUpdateResult::NewL() );
-        if ( updateResult )
-            {
-            updateResult->SetSuccessCount( iSuccessCount );
-            updateResult->SetFailCount( iFailCount );
-            updateResult->SetCancelCount( iCancelCount );
-            }
-        else
-            {
-            // Something went wrong when creating update result object.
-            // Update the error code accordingly.
-            errorCode = trapError;
-            }
-        // Let's assume that connection is not needed anymore
-        UpdateClient().Close();
-        }
-
-    
-    // Inform that no operation is going on anymore.
-    // This is required for busy check.
-    SetUpdateType( EIAUpdateIdle );    
-    
-    // Use the update type of the ongoing operation to check what callback
-    // function to call.
-    switch ( updateType )
-        {
-        case EIAUpdateStartServer:
-            if ( errorCode == KErrNone )
-                {
-                CheckUpdatesContinue();            
-                }
-            else
-                {
-                UpdateClient().Close();
-                Observer().CheckUpdatesComplete( errorCode, 0);
-                }
-            break;
-            
-        case EIAUpdateCheck:
-            if ( iSuccessCount == 0 )
-                {
-            	// Let's assume that connection is not needed anymore
-                UpdateClient().Close();
-                }
-            IAUPDATE_TRACE_1("[IAUPDATE] success count: %d", iSuccessCount );
-            Observer().CheckUpdatesComplete( errorCode, iSuccessCount );
-            break;
-
-        case EIAUpdateUpdate:
-            // Notice that ownership of result object is transferred here.
-            IAUPDATE_TRACE_3("[IAUPDATE] success count: %d failed count: %d cancelled count: %d", iSuccessCount, iFailCount, iCancelCount );
-            Observer().UpdateComplete( errorCode, updateResult );
-            break;
-            
-        case EIAUpdateQuery:
-            if ( !iUpdateNow )
-                {
-            	// Let's assume that connection is not needed anymore
-                UpdateClient().Close();
-                } 
-            IAUPDATE_TRACE_1("[IAUPDATE] update now: %d", iUpdateNow );
-            Observer().UpdateQueryComplete( errorCode, iUpdateNow );
-            break;
-         
-        default:
-            // Should not ever come here.
-            break;
-        }
-        
-    // Do not anything else than return after callback function is called because 
-    // this instance can be deleted by a client in a callback function
-    // 
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::RunL() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateManager::ResetResults
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateManager::ResetResults()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::ResetResults() begin");
-    // Set the member variables to their default values.
-    iSuccessCount = 0;
-    iFailCount = 0;
-    iCancelCount = 0;
-    iUpdateNow = EFalse;
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::ResetResults() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateManager::BusyCheck
-// 
-// -----------------------------------------------------------------------------
-//
-TBool CIAUpdateManager::BusyCheck() const
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::BusyCheck()");
-    if ( UpdateType() == EIAUpdateIdle )
-        {
-        return EFalse;
-        }
-    else
-        {
-        return ETrue; 
-        }
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateManager::UpdateClient 
-// 
-// -----------------------------------------------------------------------------
-//
-RIAUpdateClient& CIAUpdateManager::UpdateClient()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::UpdateClient()");
-    return iUpdateClient;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateManager::Observer
-// 
-// -----------------------------------------------------------------------------
-//
-MIAUpdateObserver& CIAUpdateManager::Observer() const
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::Observer()");
-    return iObserver;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateManager::UpdateType
-// 
-// -----------------------------------------------------------------------------
-//
-CIAUpdateManager::TIAUpdateType CIAUpdateManager::UpdateType() const
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::UpdateType()");
-    return iUpdateType;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateManager::SetUpdateType
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateManager::SetUpdateType( CIAUpdateManager::TIAUpdateType aUpdateType )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::SetUpdateType() begin");
-    IAUPDATE_TRACE_1("[IAUPDATE] update type: %d", aUpdateType );
-    iUpdateType = aUpdateType;
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::SetUpdateType() end");
-    }
- 
 // -----------------------------------------------------------------------------
 // CIAUpdateManager::HandleGainingForeground
 //  iaupdate.exe is brought to foreground if visible request is ongoing
@@ -524,7 +167,7 @@
 void CIAUpdateManager::HandleGainingForeground()
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::HandleGainingForeground() begin");
-	iUpdateClient.BroughtToForeground();   
+	//iUpdateClient->broughtToForeground();   
 	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::HandleGainingForeground() end");  
     }
 
@@ -537,71 +180,8 @@
     {
     }
 
-// -----------------------------------------------------------------------------
-// CIAUpdateManager::CheckUpdatesContinue
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateManager::CheckUpdatesContinue()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::CheckUpdatesContinue() begin");
-    TInt error = KErrNone;
-    SetUpdateType( EIAUpdateCheck );
-    error = UpdateClient().ConnectToApp();
-    if ( error == KErrNone )
-        {
-        error = UpdateClient().CheckUpdates( *iUpdateParameters, 
-                                             iSuccessCount, 
-                                             iStatus ); 
-        }
-    
-    if ( error == KErrNone )
-        {
-        // Set this object active.
-        // Because everything went ok, 
-        // the operation will be handled asynchronously
-        // and the service provider will inform us when the operation
-        // is finished.
-        SetActive();        
-        }
-    else
-        {
-        // Because we are going to activate this active object,
-        // set the status pending.
-        iStatus = KRequestPending;
-        
-        // An error occurred above. 
-        // Therefore, the operation did not proceed any further.
-        // Set this object active for asynchronous error handling.
-        SetActive();
-                
-        // Now, that everything is ready, just inform the active scheduler
-        // that operation is finished. Pass the error code for the observer.
-        TRequestStatus* status( &iStatus );
-        User::RequestComplete( status, error );                
-        }
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::CheckUpdatesContinue() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateManager::CopyUpdateParamsL
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateManager::CopyUpdateParamsL( const CIAUpdateParameters& aUpdateParameters )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::CopyUpdateParamsL() begin");
-    iUpdateParameters = CIAUpdateParameters::NewL();
-    iUpdateParameters->SetCommandLineArgumentsL( aUpdateParameters.CommandLineArguments() );
-    iUpdateParameters->SetCommandLineExecutableL( aUpdateParameters.CommandLineExecutable() );
-    iUpdateParameters->SetImportance( aUpdateParameters.Importance() );
-    iUpdateParameters->SetRefresh( aUpdateParameters.Refresh() );
-    iUpdateParameters->SetSearchCriteriaL( aUpdateParameters.SearchCriteria() );
-    iUpdateParameters->SetShowProgress( aUpdateParameters.ShowProgress() );
-    iUpdateParameters->SetType( aUpdateParameters.Type() );
-    iUpdateParameters->SetUid( aUpdateParameters.Uid() );
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateManager::CopyUpdateParamsL() end");
-    }
 
 
 
+
+
--- a/iaupdate/IAD/api/eabi/iaupdateapiu.def	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-EXPORTS
-	_ZN15CIAUpdateResult12SetFailCountEi @ 1 NONAME
-	_ZN15CIAUpdateResult14SetCancelCountEi @ 2 NONAME
-	_ZN15CIAUpdateResult15SetSuccessCountEi @ 3 NONAME
-	_ZN15CIAUpdateResult4NewLEv @ 4 NONAME
-	_ZN15CIAUpdateResult5NewLCEv @ 5 NONAME
-	_ZN15CIAUpdateResultD0Ev @ 6 NONAME
-	_ZN15CIAUpdateResultD1Ev @ 7 NONAME
-	_ZN15CIAUpdateResultD2Ev @ 8 NONAME
-	_ZN19CIAUpdateParameters18SetSearchCriteriaLERK7TDesC16 @ 9 NONAME
-	_ZN19CIAUpdateParameters24SetCommandLineArgumentsLERK6TDesC8 @ 10 NONAME
-	_ZN19CIAUpdateParameters25SetCommandLineExecutableLERK7TDesC16 @ 11 NONAME
-	_ZN19CIAUpdateParameters4NewLEv @ 12 NONAME
-	_ZN19CIAUpdateParameters5NewLCEv @ 13 NONAME
-	_ZN19CIAUpdateParameters6SetUidERK4TUid @ 14 NONAME
-	_ZN19CIAUpdateParametersD0Ev @ 15 NONAME
-	_ZN19CIAUpdateParametersD1Ev @ 16 NONAME
-	_ZN19CIAUpdateParametersD2Ev @ 17 NONAME
-	_ZN9CIAUpdate11ShowUpdatesERK19CIAUpdateParameters @ 18 NONAME
-	_ZN9CIAUpdate11UpdateQueryEv @ 19 NONAME
-	_ZN9CIAUpdate12CheckUpdatesERK19CIAUpdateParameters @ 20 NONAME
-	_ZN9CIAUpdate4NewLER17MIAUpdateObserver @ 21 NONAME
-	_ZN9CIAUpdate5NewLCER17MIAUpdateObserver @ 22 NONAME
-	_ZN9CIAUpdate6UpdateERK19CIAUpdateParameters @ 23 NONAME
-	_ZN9CIAUpdateD0Ev @ 24 NONAME
-	_ZN9CIAUpdateD1Ev @ 25 NONAME
-	_ZN9CIAUpdateD2Ev @ 26 NONAME
-	_ZNK15CIAUpdateResult11CancelCountEv @ 27 NONAME
-	_ZNK15CIAUpdateResult12SuccessCountEv @ 28 NONAME
-	_ZNK15CIAUpdateResult9FailCountEv @ 29 NONAME
-	_ZNK19CIAUpdateParameters14SearchCriteriaEv @ 30 NONAME
-	_ZNK19CIAUpdateParameters20CommandLineArgumentsEv @ 31 NONAME
-	_ZNK19CIAUpdateParameters21CommandLineExecutableEv @ 32 NONAME
-	_ZNK19CIAUpdateParameters3UidEv @ 33 NONAME
-	_ZTI15CIAUpdateResult @ 34 NONAME ; #<TI>#
-	_ZTI19CIAUpdateParameters @ 35 NONAME ; #<TI>#
-	_ZTI9CIAUpdate @ 36 NONAME ; #<TI>#
-	_ZTV15CIAUpdateResult @ 37 NONAME ; #<VT>#
-	_ZTV19CIAUpdateParameters @ 38 NONAME ; #<VT>#
-	_ZTV9CIAUpdate @ 39 NONAME ; #<VT>#
-	_ZN19CIAUpdateParameters15SetShowProgressEi @ 40 NONAME
-	_ZNK19CIAUpdateParameters12ShowProgressEv @ 41 NONAME
-	_ZN19CIAUpdateParameters10SetRefreshEi @ 42 NONAME
-	_ZN19CIAUpdateParameters13SetImportanceEj @ 43 NONAME
-	_ZN19CIAUpdateParameters7SetTypeEj @ 44 NONAME
-	_ZNK19CIAUpdateParameters10ImportanceEv @ 45 NONAME
-	_ZNK19CIAUpdateParameters4TypeEv @ 46 NONAME
-	_ZNK19CIAUpdateParameters7RefreshEv @ 47 NONAME
-
--- a/iaupdate/IAD/api/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Build information file for IA Update API
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_MMPFILES
-iaupdateapi.mmp
\ No newline at end of file
--- a/iaupdate/IAD/api/group/iaupdateapi.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Project definition file of iaupdateapi.dll
-*
-*/
-
-
-
-#include <platform_paths.hrh>
-
-
-CAPABILITY      CAP_GENERAL_DLL
-
-TARGET          iaupdateapi.dll
-TARGETTYPE      dll
-UID             0x1000008d 0x2000F85C
-VERSION         10.1
-
-PAGED
-
-
-// API source files
-SOURCEPATH      ../src
-SOURCE          iaupdate.cpp
-SOURCE          iaupdateparameters.cpp
-SOURCE          iaupdateresult.cpp
-
-// Client header files
-USERINCLUDE     ../client/inc
-
-// Client source files
-SOURCEPATH      ../client/src
-SOURCE          iaupdateclient.cpp
-SOURCE          iaupdatemanager.cpp
-
-// Client uses IAD UI services.
-// So, IAD UID information is required.
-USERINCLUDE     ../../ui/inc
-// for iaupdatetools methods
-USERINCLUDE     ../../tools/inc
-
-MW_LAYER_SYSTEMINCLUDE
-
-LIBRARY         iaupdatetools.lib
-LIBRARY         euser.lib
-LIBRARY         estor.lib
-LIBRARY         avkon.lib
-LIBRARY         apparc.lib
-LIBRARY         eikcore.lib
-LIBRARY         cone.lib
-LIBRARY         ws32.lib
-LIBRARY         apgrfx.lib
-
-// For debugging and logging purposes
-USERINCLUDE     ../../engine/inc
-DEBUGLIBRARY    flogger.lib
-
-SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/api/iaupdateapi.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,65 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:   
+#                
+
+
+TEMPLATE = lib
+TARGET = iaupdateapi 	
+
+symbian {
+    TARGET.UID3 = 0x2000F85C
+    TARGET.CAPABILITY = CAP_GENERAL_DLL
+    TARGET.EPOCALLOWDLLDATA=1
+    MMP_RULES += "OPTION ARMCC --export_all_vtbl"
+
+    defBlock = \      
+    "$${LITERAL_HASH}if defined(EABI)" \
+    "DEFFILE  ../eabi/iaupdateapi.def" \
+    "$${LITERAL_HASH}else" \
+    "DEFFILE  ../bwins/iaupdateapi.def" \
+    "$${LITERAL_HASH}endif"
+     MMP_RULES += defBlock
+} 
+
+DEPENDPATH += .
+DEPENDPATH += ./src
+DEPENDPATH += ./client/src
+DEPENDPATH += ./inc
+DEPENDPATH += ./client/inc
+DEPENDPATH += ../ui/inc
+DEPENDPATH += ../engine/inc
+
+INCLUDEPATH += .
+INCLUDEPATH += ../ui/inc
+INCLUDEPATH += ../engine/inc
+
+
+CONFIG += hb
+
+# Input
+SOURCES += iaupdate.cpp \
+           iaupdateparameters.cpp \
+           iaupdateresult.cpp \
+           iaupdateclient.cpp \
+           iaupdatemanager.cpp
+
+HEADERS = iaupdateclient.h \
+          iaupdatemanager.h 
+
+LIBS += -lcone
+LIBS += -lws32
+LIBS += -lxqservice
+LIBS += -lxqserviceutil
+LIBS += -lflogger
--- a/iaupdate/IAD/backgroundchecker/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -22,10 +22,8 @@
 PRJ_PLATFORMS
 DEFAULT
 
-
 PRJ_EXPORTS
 
-
 PRJ_MMPFILES
 ./iaupdatebg.mmp
 
--- a/iaupdate/IAD/backgroundchecker/group/iaupdatebg.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/group/iaupdatebg.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -32,17 +32,20 @@
 USERINCLUDE         ../../ui/inc
 USERINCLUDE         ../../firmwareupdate/inc
 
+SYSTEMINCLUDE     /epoc32/include/mw/hb
+SYSTEMINCLUDE     /epoc32/include/mw/hb/hbcore 
+SYSTEMINCLUDE     /epoc32/include/mw/hb/hbwidgets
+
 MW_LAYER_SYSTEMINCLUDE
 
 SOURCEPATH          ../src
 SOURCE              iaupdatebgmain.cpp
 SOURCE              iaupdatebgrefreshtimer.cpp
-SOURCE              iaupdatebgremindertimer.cpp
 SOURCE              iaupdatebgcontrollerfile.cpp
 SOURCE              iaupdatebgfirsttimehandler.cpp
 SOURCE              iaupdatebginternalfilehandler.cpp
-SOURCE              iaupdatebgsoftnotification.cpp
-
+SOURCE              iaupdatebgsoftnotification.cpp 
+SOURCE              iaupdatbgnotifyhandler.cpp
 
 
 LIBRARY             euser.lib 
@@ -61,6 +64,10 @@
 LIBRARY             commonengine.lib
 LIBRARY             sysversioninfo.lib
 LIBRARY             FeatMgr.lib
+
+LIBRARY             hbcore.lib
+LIBRARY             hbwidgets.lib
+
 DEBUGLIBRARY 	    flogger.lib
 
 SMPSAFE
--- a/iaupdate/IAD/backgroundchecker/inc/iaupdatebgcheckermode.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/inc/iaupdatebgcheckermode.h	Tue Aug 31 15:21:33 2010 +0300
@@ -25,11 +25,11 @@
     {
     ESleepMode,
     EFirstTimeMode,
+//    EFirstTimeMode2,
     EFirstTimeMode2,
-    EFirstTimeMode3,
     ENormalMode,
-    ERetryMode,
-    EFirstTimeRemindMode
+    ERetryMode
+//    EFirstTimeRemindMode
     };
 
 #endif //IAUPDATEBGCHECKERMODE_H
--- a/iaupdate/IAD/backgroundchecker/inc/iaupdatebgconst.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/inc/iaupdatebgconst.h	Tue Aug 31 15:21:33 2010 +0300
@@ -30,14 +30,11 @@
 const TInt KUpdateAvailableReminderInterval = 1; //60*24*7; //one week in minutes
 const TInt KFirstTimeDialogDelay = 1; //60*24*2; //two days in minutes
 const TInt KFirstTimeDialogReminderInterval = 4; //60*24*7*4; //four weeks in minutes
-const TInt KRefreshTimerReminderTimerGap = 1; // 1min, if the refresh timer is about to expire in 1 mins, then we don't show redminer timer anymore
 const TInt HalfHourInMinuts = 5;//30;
 const TInt KFirstSecondRetryInterval = 1; //30mins
 const TInt KThirdFourthRetryInterval = 2; //one day in minutes
 #else
 
-const TInt KRefreshTimerReminderTimerGap = 60*24; //one day.If the refresh timer is about to expire in one day, then we don't show reminder timer anymore
-                                               // this is to avoid the soft notifications coming too close to eachother.
 const TInt KDelayForUserToAcceptDisclaimer = 10; //10 minutes
 const TInt HalfHourInMinuts = 30;
 const TInt KFirstSecondRetryInterval = 30; //30mins
@@ -45,7 +42,6 @@
 #endif //_DEMO
 
 const TInt StartNow = 0;
-const TInt KSoftNotificationPriority = 1000; //minimum soft notifier priority
 const TInt KMaxRetry = 4; //Max times of retry when refresh fails for some reason
 const TInt StartAfterOneMin = 1; //1mins
 
--- a/iaupdate/IAD/backgroundchecker/inc/iaupdatebgfirsttimehandler.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/inc/iaupdatebgfirsttimehandler.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -61,12 +61,7 @@
     * Set Nokia agreement as accepted by an user
     */
     void SetAgreementAcceptedL();
-    
-    /**
-    * Set Nokia agreement as asked (prompted) to an user
-    */
-    void SetAgreementAskedL();
-        
+          
     /**
     * Set automatic update checks as asked (prompted) to an user
     */
@@ -79,13 +74,7 @@
     */
     TBool AgreementAcceptedL();
     
-    /**
-    * Is Nokia agreement of Application Update already asked 
-    *
-    * @return True value if agreement already asked 
-    */
-    TBool AgreementAskedL();
-    
+       
     /**
     * Is activation for automatic update cheks from network already asked 
     *
@@ -121,8 +110,6 @@
     
     TBool iAgreementAccepted;
     
-    TBool iAgreementAsked;
-    
     TBool iAutomaticUpdateChecksAsked;   
    
     };
--- a/iaupdate/IAD/backgroundchecker/inc/iaupdatebginternalfilehandler.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/inc/iaupdatebginternalfilehandler.h	Tue Aug 31 15:21:33 2010 +0300
@@ -52,22 +52,10 @@
 
     void SetLastTimeShowNewFeatureDialog( TInt64 aTime );
 
-    //void SetCurrentRefreshTime();
-
     TBool UserRejectNewFeatureDialog() const;
     
     void SetUserRejectNewFeatureDialog( TBool aUserDecision );
     
-    TBool ReminderOn();
-    
-    void SetReminder( TBool aOn );
-    
-    TTime NextRemindTime();
-    
-    void SetNextRemindTime( TTime aNextRemindTime );
-    
-    void SetNextRemindTime( TInt64 aNextRemindTime );
-    
     void SetMode( TIAUpdateBGMode aMode );
     
     TIAUpdateBGMode Mode();
@@ -83,7 +71,11 @@
     TInt RetryTimes();
     
     void SetRetryTimes( TInt aRetry );
-
+    
+    TInt NrOfIndicatorEntries();
+    
+    void  SetNrOfIndicatorEntries( TInt aEntries );
+    
 protected:
 
     CIAUpdateBGInternalFileHandler();
@@ -113,14 +105,9 @@
 
     // Time when the content was refreshed.
     TTime iLastTimeShowNewFeatureDialog;
-
     
     TBool iUserRejectNewFeatureDialog;
     
-    TTime iNextRemindTime;
-    
-    TBool iIsReminderOn;
-    
     TIAUpdateBGMode iMode;
     
     HBufC* iFwVersion;
@@ -128,7 +115,9 @@
     TInt iSNID;
     
     TInt iRetryTimes;
-     
+    
+    TInt iNrOfIndicatiorEntries;
+    
     };
         
 #endif // IAUPDATEBGINTERNAL_FILE_HANDLER
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/backgroundchecker/inc/iaupdatebgnotifyhandler.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This file contains the header file of the CIAUpdateBGNotifyhandler
+*                class 
+*
+*/
+
+
+#ifndef __IAUPDATEBGNOTIFYHANDLER_H__
+#define __IAUPDATEBGNOTIFYHHANDLER_H__
+
+// INCLUDES
+#include <e32base.h>
+#include <e32property.h>
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATIONS
+
+/**
+*  Observer
+*/
+class MIAUpdateBGNotifyObserver
+{
+public: // Observer API
+    /**
+    * Called by CIAUpdateBGNotifyHandler when indicator is to
+    * be removed 
+    */ 
+    virtual void HandleIndicatorRemoveL() = 0;
+};
+/**
+*
+*/
+
+class CIAUpdateBGNotifyHandler : public CActive
+    {
+public:
+
+    /**
+    * Construct a CIAUpdateBGNotifyHandler using two phase construction,
+    * and return a pointer to the created object
+    * @return A pointer to the created instance of CIAUpdateBGNotifyHandler
+    */
+    static CIAUpdateBGNotifyHandler* NewL();
+    
+    /**
+    * Construct a CIAUpdateBGNotifyHandler using two phase construction,
+    * and return a pointer to the created object
+    * @return A pointer to the created instance of CIAUpdateBGNotifyHandler
+    */
+    static CIAUpdateBGNotifyHandler* NewLC();
+    
+    /**
+    * Destructor
+    */
+    ~CIAUpdateBGNotifyHandler();
+
+public: // new functions
+    
+    /**
+    *
+    */
+    void StartListeningL( MIAUpdateBGNotifyObserver* iObserver );
+    
+private: // CActive
+
+    /**
+     * @see CActive::DoCancel
+     */
+    void DoCancel();
+
+    /**
+     * @see CActive::RunL
+     */
+    void RunL();
+   
+    /**
+     * @see CActive::RunError
+     */ 
+    TInt RunError( TInt aError );
+
+private:
+
+    /**
+    * C++ constructor 
+    */
+    CIAUpdateBGNotifyHandler();
+    
+    /**
+     * Perform the second phase construction of a CIAUpdateBGNotifyHandler object
+     */
+    void ConstructL();
+    
+private: //data
+
+    RProperty iProperty;
+    
+    MIAUpdateBGNotifyObserver* iObserver;
+    
+    };
+
+
+#endif // __IAUPDATEBGNOTIFYHANDLER_H__
--- a/iaupdate/IAD/backgroundchecker/inc/iaupdatebgrefreshtimer.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/inc/iaupdatebgrefreshtimer.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -26,15 +26,17 @@
 #include <iaupdateobserver.h>
 #include <barsc.h>
 
-#include "iaupdatebgremindertimer.h"
+
+#include "iaupdatebginternalfilehandler.h"
 #include "iaupdatebgcontrollerfile.h"
 #include "iaupdatebgsoftnotification.h"
 #include "iaupdatebgcheckermode.h"
 
+#include "iaupdatebgnotifyhandler.h"
+
 // FORWARD DECLARATIONS
 class CIAUpdate;
 class CIAUpdateParameters;
-class CAknSoftNotifier;
 class CInternalFileHandler;
 class CIdleObserver;
 
@@ -49,8 +51,8 @@
 class CIAUpdateBGTimer : public CTimer, 
                  public MIAUpdateObserver, 
                  public MCenRepNotifyHandlerCallback, 
-                 public MIAUpdateBGSoftNotificationCallBack, 
-                 public MIAUpdateBGReminderTimerCallBack
+                 public MIAUpdateBGSoftNotificationCallBack,
+                 public MIAUpdateBGNotifyObserver
             
     {
     public:
@@ -83,6 +85,10 @@
     public: //MReminderTimerCallBack
 
         void ReminderTimerCallBack();
+    
+    private: // From MIAUpdateBGNotifyObserver   
+
+         void HandleIndicatorRemoveL();
         
     private:
     
@@ -121,9 +127,7 @@
         TTimeIntervalMinutes TimeIntervalFromNextShowOfNewFeatureDialogL();
         
         TBool IsAgreementAcceptedL();
-        
-        TBool IsAskedAlreadyL();
-        
+       
         void HandlerFirstTimeL();
         
         TTime GetLastTimeShowNewFeatureDialogL();
@@ -134,27 +138,21 @@
  
         TInt SetUserDecisionL( TBool aDecision );
         
-        TBool ReminderOnL();
-
-        TInt SetReminderL( TBool aOn );
-        
-        TTime NextRemindTimeL();
-
-        TInt SetNextRemindTimeL( TTime aTime );
-        
         TIAUpdateBGMode ModeL();
 
         TInt SetModeL( TIAUpdateBGMode aMode );
         
+        TInt NrOfIndicatorEntries();
+
+        TInt SetNrOfIndicatorEntriesL( TInt aEntries );
+        
         TInt RetryTimesL();
 
         TInt SetRetryTimesL( TInt aRetry );
           
-        HBufC* ReadResourceLC( TInt aResourceId );
-        
         void StartIaupdateL() const;
         
-        void LaunchSoftNotificationL( const TInt& aResourceId, const TInt& SK1, const TInt& SK2 );
+        void LaunchNotificationL( const int aNrOfUpdates );
         
         TBool IsAutoUpdateDisabledL();
         
@@ -168,18 +166,8 @@
         
         void DoSoftNotificationCallBackL( TBool aIsAccepted );
         
-        void DoReminderTimerCallBackL();
-        
         void StartUpdatesCheckingL();    
         
-        HBufC8* LoadFileLC(const TDesC& aFile);
-        
-        TInt GetPrivatePathL( TFileName& aPath );
-        
-        TInt SetSessionPrivatePathL( RFs& aFs, const TDesC& aPath ) const;
-        
-        void SetPrivateDriveL( RFs& aFs, const TDesC& aFileName ) const;
-        
         TBool IAUpdateEnabledL() const;
         
         void Shutdown();
@@ -188,7 +176,6 @@
         // Data       
         CIAUpdate* iUpdate; 
         CIAUpdateParameters* iParameters; 
-        CIAUpdateBGReminderTimer* iReminderTimer;
         CRepository* iIAUpdateCRSession; 
         CCenRepNotifyHandler* iNotifyHandler; 
         TInt iRuns;
@@ -197,8 +184,8 @@
         CIAUpdateBGInternalFileHandler* iInternalFile;
         TIAUpdateBGMode iMode;
         CIAUpdateBGSoftNotification* iSoftNotification;
-        RResourceFile iResourceFile;
-        RFs iFs;
+        
+        CIAUpdateBGNotifyHandler* iIndicatorNotifyHandler;
     };        
 
 #endif //IAUPDATEBGREFRESHTIMER_H
--- a/iaupdate/IAD/backgroundchecker/inc/iaupdatebgremindertimer.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   The main header file of background timer
-*
-*/
-
-
-
-
-#ifndef IAUPDATEBGREMINDERTIMER_H
-#define IAUPDATEBGREMINDERTIMER_H
-
-#include <e32base.h>
-#include "iaupdatebginternalfilehandler.h"
-
-
-// INCLUDE FILES 
-class MIAUpdateBGReminderTimerCallBack
-    {
-    public:
-        virtual void ReminderTimerCallBack() = 0;
-    };
-
-
-class CIAUpdateBGReminderTimer : public CTimer
-            
-    {
-    public:
-
-         static CIAUpdateBGReminderTimer* NewL( MIAUpdateBGReminderTimerCallBack* aCallback );  
-        
-         virtual ~CIAUpdateBGReminderTimer();   
-          
-         void StartReminderTimerL( TTimeIntervalMinutes& aTimetoWait );
-         
-         void CancelReminderTimerL();
-         
-    private:
-    
-        CIAUpdateBGReminderTimer( MIAUpdateBGReminderTimerCallBack* aCallback );
-
-        void ConstructL();  
-        
-        void RunL();
-  
-        void DoCancel();
-
-        TInt RunError(TInt aError);
-        
-        void StartL( TTimeIntervalMinutes aWaitTime );
-        
-        TTimeIntervalMicroSeconds32 ConvertToMicroseconds( TTimeIntervalMinutes aInterval );
-
-    private:
-
-        TTime iNextRemindTime;
-        TInt iRuns;
-        CIAUpdateBGInternalFileHandler* iInternalFile;
-        MIAUpdateBGReminderTimerCallBack* iCallback; 
-    };        
-
-#endif //IAUPDATEBGREMINDERTIMER_H
--- a/iaupdate/IAD/backgroundchecker/inc/iaupdatebgsoftnotification.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/inc/iaupdatebgsoftnotification.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -22,13 +22,12 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <AknDynamicSoftNotifier.h>
+
+#include <hbdevicenotificationdialogsymbian.h>
 #include "iaupdatebgcheckermode.h"
 
+
 // FORWARD DECLARATION
-class TAknDynamicSoftNotificationParams;
-class CIAUpdateBGInternalFileHandler;
-
 class MIAUpdateBGSoftNotificationCallBack
     {
     public:
@@ -39,104 +38,66 @@
 
 // CLASS DECLARATION
 /**
- *  Controls the native soft notifications.
- *  This class delegates method calls to AvKon soft notification.
+ *  Controls the background indicator notifications. 
  *
- *  @since 3.2
  */
-class CIAUpdateBGSoftNotification : public CBase, public MAknDynamicSoftNoteObserver
+class CIAUpdateBGSoftNotification : public CBase, 
+                                    public MHbDeviceNotificationDialogObserver
     {
     public:  // Constructors and destructor
 
         /**
          * Static constructor
          */
-        static CIAUpdateBGSoftNotification* NewL( MIAUpdateBGSoftNotificationCallBack* aCallback, CIAUpdateBGInternalFileHandler* aInternalFile );
+        static CIAUpdateBGSoftNotification* NewL( 
+                MIAUpdateBGSoftNotificationCallBack* aCallback ); 
 
         /**
          * Destructor.
          */
         virtual ~CIAUpdateBGSoftNotification();
-
-    public: // From MAknDynamicSoftNotifierObserver
-
-        /**
-         * Dynamic soft notification was accepted by user.
-         *
-         * @param aNoteId Identification of notification.
-         */
-        void NotificationAccepted( TInt aIdentifier );
-
-        /**
-         * Dynamic soft notification was canceled by user.
-         *
-         * @param aNoteId Identification of notification.
-         */
-        void NotificationCanceled( TInt aIdentifier );
-
+        
     public: // New functions
         
-        void StartObservingIfNeededL();
-        
-        
-        /**
-         * Add a custom soft notification. If a custom soft notification with
-         * exactly the same parameters already exists,
-         * its count is increased by aCount.
-         *
-         * @param aNotificationId identifier for this notification
-         * @param aCount addition count
-         */
-        void ShowSoftNotificationL();
-
-        /**
-         * Cancels custom soft notification.
-         *
-         * @param aNotificationId identifier for this notification
-         */
-        void RemoveSoftNotificationL( TInt aNotifierID );
+         /**
+          * Shows notification and  indicator. 
+          */
+         void ShowNotificationL();
+         
+         /**
+          * Shows indicator. 
+          */
+         void ShowIndicatorL();
+         
+         /**
+          * Removes indicator. 
+          */
+         void RemoveIndicatorL();
 
         /**
          * Set a text for a soft notification.
          *
-         * @param aSingularText singular text for soft notification
-         * @param aPluralText plural text for soft notification
+         * @param aTitle title for soft notification
+         * @param aText  text for soft notification
          */
-        void SetTextL( const TDesC& aText, const TDesC& aGroupText );
-
+        void SetTextL( const TDesC& aTitle, const TDesC& aText ); 
+        
         /**
-         * Set labels for soft notification's softkeys.
-         *
-         * @param aSoftkey1Label Label for the softkey 1
-         * @param aSoftkey2Label Label for the softkey 2
-         */
-        void SetSoftkeyLabelsL( const TDesC& aSoftkey1Label,
-            const TDesC& aSoftkey2Label );
+        * Set number of updates a soft notification.
+        *
+        * @param aNrOfUpdates 0 - first time, >< 0 normal case
+        */
+        void SetNrOfUpdates( const TInt& aNrOfUpdates);
 
-        /**
-         * Set an image for a soft notification.
-         *
-         * @param aImage image for soft notification
-         */
-        void SetImageL( const TDesC8& aImage );
-
-        /**
-         * Returns the notification id.
-         *
-         * @return notification id
-         */
-        TInt Id();
 
     private:  // Constructors
         /**
          * C++ constructor.
          *
-         * @param aAppId View activation application id.
-         * @param aNotificationId Notification id.
-         * @param aEventSource Event source used for posting events from
-         *        native to Java side.
+         * @param aCallback notification callback
          */
-        CIAUpdateBGSoftNotification( MIAUpdateBGSoftNotificationCallBack* aCallback, CIAUpdateBGInternalFileHandler* aInternalFile );
+        CIAUpdateBGSoftNotification( 
+                MIAUpdateBGSoftNotificationCallBack* aCallback); 
 
         /**
          * 2nd phase constructor.
@@ -148,31 +109,60 @@
         /**
          * Set assigned member data to custom notification parameters
          *
-         * @param aParam custom soft notification params to fill
+         */
+        void FillNotificationParams();
+        
+        /**
+         * Notification dialog activationobserver
+         *
+         * @param aDialog notification dialog
+         */
+        virtual void NotificationDialogActivated(
+                const CHbDeviceNotificationDialogSymbian* aDialog );
+        /**
+         * Notification dialog activationobserver
+         *
+         * @param aDialog notification dialog
+         * @param aCompletionCode completion code
          */
-        void FillNotificationParams( TAknDynamicSoftNotificationParams& aParam );
-
+        virtual void NotificationDialogClosed( 
+                const CHbDeviceNotificationDialogSymbian* aDialog, 
+                TInt aCompletionCode );
+        
+        /**
+         * Enable/disable indicator
+         *
+         * @param aEnabled ETrue-enabled, EFalse-disabled
+         */        
+        void SetIndicatorEnabled(TBool aEnabled);
+        
+        /**
+         * Get indicator enablation state
+         *
+         * @return ETrue-enabled, EFalse-disabled
+         */ 
+        TBool IsIndicatorEnabled();
+        
+        int GetNrOfUpdates();
+        
     private:  // Data
-        /// Own. AvKon custom soft notifier
-        CAknDynamicSoftNotifier* iNotifier;
-        /// View activation application id
-        TUid iAppId;
-        /// Notification Id
-        TInt iNotificationId;
-        /// Own. Softkey 1 label
-        HBufC* iSoftkey1;
-        /// Own. Softkey 2 label
-        HBufC* iSoftkey2;
-        /// Own. Note label when single dialog is shown
-        HBufC* iLabel;
-        /// Own. Note label when notifications are groupped
-        HBufC* iGroupLabel;
-        /// Own. Image data byte array
-        HBufC8* iImageData;
+        // Note title
+        HBufC* iTitle; 
         
+        // Note text
+        HBufC* iText; 
+        
+        // Notification callback
         MIAUpdateBGSoftNotificationCallBack* iCallback;
         
-        CIAUpdateBGInternalFileHandler* iInternalFile; //not owned
+        // Number of updates
+        int iNrOfUpdates;
+        
+        // Indictor activation state
+        TBool iActivateIndicator;
+        
+        //Notification dialog
+        CHbDeviceNotificationDialogSymbian* iNotificationDialog;
 
     };
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/backgroundchecker/src/iaupdatbgnotifyhandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This module contains the implementation of CIAUpdateBGNotifyHandler class 
+*                member functions.
+*
+*/
+
+
+//INCLUDES
+#include <e32property.h>
+
+#include "iaupdatebgnotifyhandler.h"
+#include "iaupdateuids.h"
+#include "iaupdatebglogger.h"
+
+//CONSTANTS (-> to iaupdaeuids.h)
+#define KIAUpdateBgcUid1 0x200211f4    // Bg checker UID
+const TUint32 KIAUpdateBGNotifyIndicatorRemove = 0x00000003;
+
+const TUid KPSUid = { KIAUpdateBgcUid1 };
+
+//MACROS
+_LIT_SECURITY_POLICY_PASS( KReadPolicy );
+_LIT_SECURITY_POLICY_C1( KWritePolicy, ECapabilityWriteDeviceData );
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// CIAUpdateBGNotifyHandler::NewL
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIAUpdateBGNotifyHandler* CIAUpdateBGNotifyHandler::NewL()
+    {
+    CIAUpdateBGNotifyHandler* self = CIAUpdateBGNotifyHandler::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIAUpdateBGNotifyHandler::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIAUpdateBGNotifyHandler* CIAUpdateBGNotifyHandler::NewLC()
+    {
+    CIAUpdateBGNotifyHandler* self = new( ELeave ) CIAUpdateBGNotifyHandler();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+
+// ---------------------------------------------------------------------------
+//  CIAUpdateBGNotifyHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateBGNotifyHandler::ConstructL()
+    {
+    FLOG("[IAUPDATE] CIAUpdateBGNotifyHandler::ConstructL() begin");
+    CActiveScheduler::Add( this );
+    TInt err = RProperty::Define( KPSUid, 
+                                  KIAUpdateBGNotifyIndicatorRemove, 
+                                  RProperty::EInt,
+                                  KReadPolicy,
+                                  KWritePolicy );	
+    if ( err != KErrAlreadyExists )
+        {		
+        User::LeaveIfError( err );	
+        }
+    
+    // If not definined, set initial (dummy) value
+    if ( err == KErrNone )
+        {
+        RProperty::Set(KPSUid, KIAUpdateBGNotifyIndicatorRemove, 0);
+        }
+    
+    FLOG("[IAUPDATE] CIAUpdateBGNotifyHandler::ConstructL() end");   
+    }    
+
+// ---------------------------------------------------------------------------
+// CIAUpdateBGNotifyHandler::CIAUpdateBGNotifyHandler
+// constructor
+// ---------------------------------------------------------------------------
+//
+CIAUpdateBGNotifyHandler::CIAUpdateBGNotifyHandler()  
+: CActive( CActive::EPriorityStandard )
+    {
+
+    }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateBGNotifyHandler::~CIAUpdateBGNotifyHandler
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIAUpdateBGNotifyHandler::~CIAUpdateBGNotifyHandler()
+    {
+    FLOG("[IAUPDATE] CIAUpdateBGNotifyHandler::~CIAUpdateBGNotifyHandler() begin");
+    
+    Cancel();
+    iProperty.Close();
+  
+    FLOG("[IAUPDATE] CIAUpdateBGNotifyHandler::~CIAUpdateBGNotifyHandler() end");    
+    }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateBGNotifyHandler::StartListeningL()
+// 
+// ---------------------------------------------------------------------------
+// 
+void CIAUpdateBGNotifyHandler::StartListeningL( MIAUpdateBGNotifyObserver* aObserver )
+    {
+    
+    //#define KIAHelloWorldUiUid1 0xA000017F
+    //const TUid KPSUid1 = { KIAUpdateUiUid1 };
+    
+    FLOG("[IAUPDATE] CIAUpdateBGNotifyHandler::StartListeningL() begin");
+    
+    if ( !iObserver )
+        {
+    	iObserver = aObserver;
+    	User::LeaveIfError( 
+    	        iProperty.Attach( KPSUid, KIAUpdateBGNotifyIndicatorRemove ) );
+        }
+ 
+   	Cancel();
+	iProperty.Subscribe( iStatus );
+    SetActive();
+    
+    FLOG("[IAUPDATE] CIAUpdateBGNotifyHandler::StartListeningL() end");
+    }
+
+// -----------------------------------------------------------------------------
+// CIAUpdateBGNotifyHandler::DoCancel
+// 
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateBGNotifyHandler::DoCancel()
+    {
+    FLOG("[IAUPDATE] CIAUpdateBGNotifyHandler::DoCancel() begin");
+    
+    iProperty.Cancel();
+    
+    
+    FLOG("[IAUPDATE] CIAUpdateBGNotifyHandler::DoCancel() end");
+    }
+
+// -----------------------------------------------------------------------------
+// CIAUpdateBGNotifyHandler::RunL
+// 
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateBGNotifyHandler::RunL()
+    {
+    FLOG("[IAUPDATE] CIAUpdateBGNotifyHandler::RunL() begin");
+   	iProperty.Subscribe( iStatus );
+    SetActive();
+    
+    /* No need to read value so far
+    TInt value = 0;
+	User::LeaveIfError( RProperty::Get( KPSUid, 
+                                        KIAUpdateUiRefresh, 
+                                        wgId ) );
+    */
+    
+    iObserver->HandleIndicatorRemoveL();
+    
+    FLOG("[IAUPDATE] CIAUpdateBGNotifyHandler::RunL() end");
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIAUpdateBGNotifyHandler::RunError
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CIAUpdateBGNotifyHandler::RunError( TInt /*aError*/ )
+    {
+    FLOG("[IAUPDATE] CIAUpdateBGNotifyHandler::RunError()");
+	return KErrNone;
+    }
+    
+// End of File  
--- a/iaupdate/IAD/backgroundchecker/src/iaupdatebgfirsttimehandler.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/src/iaupdatebgfirsttimehandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -98,19 +98,7 @@
     iAgreementAccepted = ETrue;
     WriteDataL();
     }
-    
-// ---------------------------------------------------------------------------
-// CIAUpdateBGFirstTimeHandler::SetAgreementAskedL
-// Set Nokia agreement as asked (prompted) to an user
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateBGFirstTimeHandler::SetAgreementAskedL()
-    {
-    ReadDataL();
-    iAgreementAsked = ETrue;
-    WriteDataL();
-    }
-        
+       
 // ---------------------------------------------------------------------------
 // CIAUpdateBGFirstTimeHandler::SetAutomaticUpdatesAskedL
 // Set automatic update checks as prompted to an use
@@ -136,17 +124,6 @@
 
 
 // ---------------------------------------------------------------------------
-// CIAUpdateBGFirstTimeHandler::AgreementAskedL
-// Is Nokia agreement of Application Update already asked 
-// ---------------------------------------------------------------------------
-//
-TBool CIAUpdateBGFirstTimeHandler::AgreementAskedL()
-    {
-    ReadDataL();
-    return iAgreementAsked;
-    }
-
-// ---------------------------------------------------------------------------
 // CIAUpdateBGFirstTimeHandler::AutomaticUpdateChecksAskedL
 // Is activation for automatic update cheks from network already asked 
 // ---------------------------------------------------------------------------
@@ -170,7 +147,6 @@
     if ( err == KErrNotFound )
     	{
     	iAgreementAccepted = EFalse;
-	    iAgreementAsked = EFalse;
 	    iAutomaticUpdateChecksAsked = EFalse; 
     	}
     else
@@ -216,7 +192,6 @@
 void CIAUpdateBGFirstTimeHandler::InternalizeL( RReadStream& aStream )
 	{
 	iAgreementAccepted = aStream.ReadInt32L();
-	iAgreementAsked = aStream.ReadInt32L();
 	iAutomaticUpdateChecksAsked = aStream.ReadInt32L();
 	}
 
@@ -229,7 +204,6 @@
 void CIAUpdateBGFirstTimeHandler::ExternalizeL( RWriteStream& aStream )
 	{
 	aStream.WriteInt32L( iAgreementAccepted );
-	aStream.WriteInt32L( iAgreementAsked );	
 	aStream.WriteInt32L( iAutomaticUpdateChecksAsked );
 	}
     
--- a/iaupdate/IAD/backgroundchecker/src/iaupdatebginternalfilehandler.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/src/iaupdatebginternalfilehandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -15,9 +15,6 @@
 *
 */
 
-
-
-
 #include <bautils.h>
 #include <s32file.h>
 #include <sysversioninfo.h>
@@ -67,7 +64,7 @@
 //
 CIAUpdateBGInternalFileHandler::CIAUpdateBGInternalFileHandler()
     : iLastTimeShowNewFeatureDialog( 0 ), iUserRejectNewFeatureDialog( EFalse ), 
-      iNextRemindTime(0), iIsReminderOn( EFalse ), iMode( EFirstTimeMode ), iFwVersion( NULL ), 
+      iMode( EFirstTimeMode ), iFwVersion( NULL ), 
       iSNID(0), iRetryTimes(0)
     {
     }
@@ -215,62 +212,6 @@
     iUserRejectNewFeatureDialog = aUserDecision;
     }
 
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGInternalFileHandler::ReminderOn
-//
-// -----------------------------------------------------------------------------
-//
-TBool CIAUpdateBGInternalFileHandler::ReminderOn()
-    {
-    return iIsReminderOn;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGInternalFileHandler::SetReminder
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateBGInternalFileHandler::SetReminder( TBool aOn )
-    {
-    iIsReminderOn = aOn;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGInternalFileHandler::NextRemindTime
-//
-// -----------------------------------------------------------------------------
-//
-TTime CIAUpdateBGInternalFileHandler::NextRemindTime()
-    {
-    return iNextRemindTime;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGInternalFileHandler::SetNextRemindTime
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateBGInternalFileHandler::SetNextRemindTime( TTime aNextRemindTime )
-    {
-    iNextRemindTime = aNextRemindTime;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGInternalFileHandler::SetNextRemindTime
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateBGInternalFileHandler::SetNextRemindTime( TInt64 aNextRemindTime )
-    {
-    iNextRemindTime = aNextRemindTime;
-    }
-
-
 // -----------------------------------------------------------------------------
 // CIAUpdateBGInternalFileHandler::SetMode
 //
@@ -281,7 +222,6 @@
     iMode = aMode;
     }
 
-
 // -----------------------------------------------------------------------------
 // CIAUpdateBGInternalFileHandler::Mode
 //
@@ -292,7 +232,6 @@
     return iMode;
     }
 
-
 // -----------------------------------------------------------------------------
 // CIAUpdateBGInternalFileHandler::FwVersion
 //
@@ -303,7 +242,6 @@
     return iFwVersion;
     }
 
-
 // ----------------------------------------------------------
 // CIAUpdateBGInternalFileHandler::SetFwVersionL()
 // ----------------------------------------------------------
@@ -365,6 +303,26 @@
     }
 
 // -----------------------------------------------------------------------------
+// CIAUpdateBGInternalFileHandler::NrOfIndicatorEntries
+//
+// -----------------------------------------------------------------------------
+//
+TInt CIAUpdateBGInternalFileHandler::NrOfIndicatorEntries()
+    {
+    return iNrOfIndicatiorEntries;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIAUpdateBGInternalFileHandler::SetNrOfIndicatorEntries
+//
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateBGInternalFileHandler::SetNrOfIndicatorEntries( TInt aEntries )
+    {
+    iNrOfIndicatiorEntries = aEntries;
+    }
+// -----------------------------------------------------------------------------
 // CIAUpdateBGInternalFileHandler::InternalizeL
 //
 // -----------------------------------------------------------------------------
@@ -382,14 +340,6 @@
     // Static casting is safe to do here because enum and TInt are the same.
     SetUserRejectNewFeatureDialog( static_cast< TBool >( userDecision ) );
     
-    TInt64 nextRemindTime( 0 );
-    aStream >> nextRemindTime;
-    SetNextRemindTime( nextRemindTime );
-    
-    TInt remindOn( aStream.ReadUint8L() );
-    // Static casting is safe to do here because enum and TInt are the same.
-    SetReminder( static_cast< TBool >( remindOn ) );
-    
     TInt mode( aStream.ReadUint8L() );
     SetMode( static_cast<TIAUpdateBGMode> (mode) );
     
@@ -405,6 +355,10 @@
     
     TInt retry ( aStream.ReadUint8L() );
     SetRetryTimes( retry );
+    
+    TInt entries ( aStream.ReadUint8L() );
+    SetNrOfIndicatorEntries( entries );
+    
     }
 
 
@@ -424,12 +378,6 @@
     TInt userDecision ( UserRejectNewFeatureDialog() );
     aStream.WriteUint8L( userDecision );
     
-    TInt64 nextRemindTime( NextRemindTime().Int64() ); 
-    aStream << nextRemindTime;
-    
-    TInt remindOn ( ReminderOn() );
-    aStream.WriteUint8L( remindOn );
-    
     TInt mode( Mode() );
     aStream.WriteUint8L( mode );
     
@@ -443,6 +391,10 @@
     
     TInt retry ( RetryTimes() );
     aStream.WriteUint8L( retry ); 
+    
+    TInt entries ( NrOfIndicatorEntries() );
+    aStream.WriteUint8L( entries ); 
+    
     }
 
 //EOF
--- a/iaupdate/IAD/backgroundchecker/src/iaupdatebgmain.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/src/iaupdatebgmain.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -26,7 +26,6 @@
 // LOCAL FUNCTION PROTOTYPES
 LOCAL_C TInt ThreadStartL();
 LOCAL_C TBool IAUpdateEnabledL();
-LOCAL_C void RemoveExistingSoftNotificationL();
 
 //Const
 _LIT( KBackgroundChecker, "iaupdatebgchecker" );
@@ -70,7 +69,6 @@
     if ( !IAUpdateEnabledL() )
         {
         FLOG("[bgchecker] ThreadStartL() IAUpdate not enabled");
-        RemoveExistingSoftNotificationL();
         return KErrNone;  
         }
     TFullName name;
@@ -110,7 +108,7 @@
     }
 
 // ---------------------------------------------------------------------------
-// IAUpdateEnabledL()
+// IAUpdateEnabledL() 
 // ---------------------------------------------------------------------------
 //
 LOCAL_C TBool IAUpdateEnabledL() 
@@ -138,24 +136,5 @@
     return enabled;        
     }
 
-// ---------------------------------------------------------------------------
-// RemoveExistingSoftNotificationL()
-// ---------------------------------------------------------------------------
-//
-LOCAL_C void RemoveExistingSoftNotificationL() 
-    {
-    FLOG("[bgchecker] RemoveExistingSoftNotificationL() begin");
-    
-    CIAUpdateBGInternalFileHandler* internalFile = CIAUpdateBGInternalFileHandler::NewLC();
-    CIAUpdateBGSoftNotification* softNotification = CIAUpdateBGSoftNotification::NewL( NULL, internalFile );
-    CleanupStack::PushL( softNotification );
-    softNotification->RemoveSoftNotificationL( softNotification->Id() );
-    CleanupStack::PopAndDestroy( softNotification );
-    CleanupStack::PopAndDestroy( internalFile );
-    
-    FLOG("[bgchecker] RemoveExistingSoftNotificationL() end");
-    return;        
-    }
-
 //EOF  
 
--- a/iaupdate/IAD/backgroundchecker/src/iaupdatebgrefreshtimer.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/src/iaupdatebgrefreshtimer.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -25,15 +25,12 @@
 #include <apgwgnam.h>
 #include <apgcli.h>
 #include <apacmdln.h>
-#include <avkon.hrh>
-#include <StringLoader.h> 
-#include <iaupdate.rsg>
-#include <data_caging_path_literals.hrh>
 #include <bautils.h>
 #include <apgtask.h>
 #include <sysversioninfo.h>  //sysversioninfo
 #include <featurecontrol.h>
 
+#include <hb/hbcore/hbtextresolversymbian.h>
 #include "iaupdateprivatecrkeys.h"
 #include "iaupdate.hrh"
 
@@ -45,9 +42,7 @@
 
 //MACROS
 _LIT8( KRefreshFromNetworkDenied, "1" );
-_LIT(KIAUpdateResourceFile, "iaupdate.rsc");
 _LIT(KIAUpdateLauncherExe, "iaupdatelauncher.exe" );
-//_LIT(KImageFile, "qgn_note_swupdate_notification.svg");
 
 //CONSTANTS
 const TUint KIADUpdateLauncherUid( 0x2001FE2F );
@@ -73,7 +68,6 @@
     CTimer::ConstructL();
     CActiveScheduler::Add( this );
   
-    iReminderTimer = CIAUpdateBGReminderTimer::NewL( this );
     iUpdate = NULL;
     iParameters = NULL;
     
@@ -84,26 +78,20 @@
     
     iInternalFile = CIAUpdateBGInternalFileHandler::NewL();
     
-    iSoftNotification = CIAUpdateBGSoftNotification::NewL( this, iInternalFile );
-    iSoftNotification->StartObservingIfNeededL();
+    iSoftNotification = CIAUpdateBGSoftNotification::NewL( this ); 
+    
+    iIndicatorNotifyHandler = CIAUpdateBGNotifyHandler::NewL();
     
-    // Get resource file path
-    TFileName fileName;
-    fileName.Copy(TParsePtrC(RProcess().FileName()).Drive());
-    fileName.Append(KDC_APP_RESOURCE_DIR);
-    fileName.Append(KIAUpdateResourceFile);
-
-    User::LeaveIfError(iFs.Connect());
-
-    // Get language of resource file        
-    BaflUtils::NearestLanguageFile( iFs, fileName );
-
-    // Open resource file
-    iResourceFile.OpenL( iFs, fileName );
-    iResourceFile.ConfirmSignatureL();    
+    // loc: initialize localisation text loader
+    /*
+    TBool res = HbTextResolverSymbian::Init(KLocFile, KLocFilePath);
+    if ( res != KErrNone )
+        {
+        // nothing to do
+        }
+    */
     }
     
-    
 // ----------------------------------------------------------
 // CIAUpdateBGTimer::~CIAUpdateBGTimer()
 // ----------------------------------------------------------
@@ -112,7 +100,6 @@
     Cancel();
     delete iUpdate; 
     delete iParameters;
-    delete iReminderTimer;
 
     if ( iNotifyHandler ) 
         {
@@ -124,26 +111,37 @@
     delete iControllerFile;
     delete iInternalFile;
     delete iSoftNotification;
+    delete iIndicatorNotifyHandler;
     
-    iResourceFile.Close();
-    iFs.Close();
     }
 
-
 // ----------------------------------------------------------
 // CIAUpdateBGTimer::StartProcessL()
 // ----------------------------------------------------------
 void CIAUpdateBGTimer::StartProcessL()
     {
     FLOG("[bgchecker] StartProcessL");
-        
+    
+    // start listening indicator remove
+    iIndicatorNotifyHandler->StartListeningL( this );
+    
+    
     iMode = ModeL();
     
     switch ( iMode )
         {
         case EFirstTimeMode:
-        case EFirstTimeRemindMode:    
             {
+            // while not released keep in sleep mode
+            int test = 0;
+            if ( test == 0 )
+                {
+                ListenAutoUpdateSettingsL();
+                iMode = ESleepMode;
+                SetModeL( iMode );
+                return;
+                }
+        
             if ( IsFirstTimeDialogDisabledL() )
                 {
                 //this should only happen in testing
@@ -171,9 +169,6 @@
                         
             FLOG("[bgchecker] StartProcessL EFirstTimeMode");
             
-            
-
-
             //Wait for some days before activate the first time mode
             TTimeIntervalMinutes timetowait =
                     TimeIntervalFromNextShowOfNewFeatureDialogL();
@@ -220,14 +215,7 @@
 
         case EFirstTimeMode2:
             {
-            FLOG("[bgchecker] StartProcessL EFirstTimeMode2");
-            RunL();
-            break;
-            }
-
-        case EFirstTimeMode3:
-            {
-            FLOG("[bgchecker] StartProcessL EFirstTimeMode 3");
+            FLOG("[bgchecker] StartProcessL EFirstTimeMode 2");
             //if user accepted the disclaimer already and reboot the phone, 
             //this mode could go to network immediately after boot
             //We put one min delay here to wait for network ready.
@@ -250,13 +238,39 @@
                 }
                     
             iNotifyHandler->StartListeningL();  
+            
+
+            if ( !IsAgreementAcceptedL() )
+                {
+                FLOG("[bgchecker] EFirstTimeMode4 ShowIndicator");
+                // Set number of updates; zero for first case
+                iSoftNotification->SetNrOfUpdates( 0 );
+                
+                // do not show indicator when testing
+                int test = 0;
+                if ( test == 1)
+                  iSoftNotification->ShowIndicatorL();
+                
+                }
+            
+            
             break;
             }
 
         case ENormalMode:
         case ERetryMode:
             {
+            
+            // Should indicator be shown ?
+            TInt entries = NrOfIndicatorEntries();
+            if  ( entries )
+                {
+                iSoftNotification->SetNrOfUpdates( entries );
+                iSoftNotification->ShowIndicatorL();
+                }
+            
             StartUpdatesCheckingL();
+            
             break;
             }
         
@@ -283,19 +297,6 @@
 
 
 // ----------------------------------------------------------
-// CIAUpdateBGTimer::IsAskedAlreadyL()
-// ----------------------------------------------------------
-TBool CIAUpdateBGTimer::IsAskedAlreadyL()
-    {
-    CIAUpdateBGFirstTimeHandler* fthandler  = CIAUpdateBGFirstTimeHandler::NewL();
-    CleanupStack::PushL( fthandler );
-    TBool result = fthandler->AgreementAskedL();
-    CleanupStack::PopAndDestroy( fthandler );
-    return result;
-    }
-
-
-// ----------------------------------------------------------
 // CIAUpdateBGTimer::StartUpdatesCheckingL()
 // ----------------------------------------------------------
 void CIAUpdateBGTimer::StartUpdatesCheckingL()  
@@ -331,36 +332,7 @@
             FLOG_NUM( "Start checking update after %d minutes", timetowait.Int());
             StartL( timetowait );
             
-            //start reminder timer also if user choose later before reboot
-            //check the value from private folder
-             
-              if ( ReminderOnL() )
-                  {
-                  TTime currenttime;
-                  currenttime.UniversalTime();
-                  
-                  FTIME( currenttime );
-                  
-                  TTime nextremindtime = NextRemindTimeL();
-                  
-                  FTIME( nextremindtime );
-                  
-                  TTimeIntervalMinutes timetogo;
-                  nextremindtime.MinutesFrom( currenttime, timetogo );
-                  
-                  FLOG_NUM("time to go = %d", timetogo.Int() );
-                  
-                  if ( timetogo.Int() <= 0 )
-                      {
-                      //pop up the reminder directly
-                      ReminderTimerCallBack();
-                      }
-                  else
-                      {
-                      iReminderTimer->StartReminderTimerL( timetogo );
-                      }
-                  }
-            }
+         }
     }
 
 
@@ -485,49 +457,6 @@
     return err;
     }
 
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::NextRemindTimeL()
-// ----------------------------------------------------------
-TTime CIAUpdateBGTimer::NextRemindTimeL()
-    {
-    iInternalFile->ReadControllerDataL();
-    return iInternalFile->NextRemindTime();
-    }
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::SetNextRemindTimeL()
-// ----------------------------------------------------------
-TInt CIAUpdateBGTimer::SetNextRemindTimeL( TTime aTime )
-    {
-    iInternalFile->SetNextRemindTime( aTime );
-    TRAPD( err,iInternalFile->WriteControllerDataL() );
-    return err;
-    }
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::ReminderOnL()
-// ----------------------------------------------------------
-TBool CIAUpdateBGTimer::ReminderOnL()
-    {
-    iInternalFile->ReadControllerDataL(); 
-    return iInternalFile->ReminderOn();
-    }
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::SetReminderL()
-// ----------------------------------------------------------
-TInt CIAUpdateBGTimer::SetReminderL( TBool aOn )
-    {
-    iInternalFile->SetReminder( aOn );
-    TRAPD( err,iInternalFile->WriteControllerDataL() );
-    return err;
-    }
-
-
 // ----------------------------------------------------------
 // CIAUpdateBGTimer::ModeL()
 // ----------------------------------------------------------
@@ -548,6 +477,25 @@
     return err;
     }
 
+// ----------------------------------------------------------
+// CIAUpdateBGTimer::NrOfIndicatorEntries()
+// ----------------------------------------------------------
+TInt CIAUpdateBGTimer::NrOfIndicatorEntries()
+    {
+    iInternalFile->ReadControllerDataL();
+    return iInternalFile->NrOfIndicatorEntries();
+    }
+
+
+// ----------------------------------------------------------
+// CIAUpdateBGTimer::SetNrOfIndicatorEntriesL()
+// ----------------------------------------------------------
+TInt CIAUpdateBGTimer::SetNrOfIndicatorEntriesL( TInt aEntries )
+    {
+    iInternalFile->SetNrOfIndicatorEntries( aEntries );
+    TRAPD( err,iInternalFile->WriteControllerDataL() );
+    return err;
+    }
 
 // ----------------------------------------------------------
 // CIAUpdateBGTimer::RetryTimesL()
@@ -585,15 +533,6 @@
 void CIAUpdateBGTimer::DoUpdatesCheckingL( const TBool& aUpdateFromServer )
     {   
     FLOG( "DoUpdatesCheckingL update");
-    //turn off the reminder, user will decide whether to turn if on or off
-    //The user's decision will be checked in soft notification callback function
-    
-    if ( ReminderOnL())
-        {
-        FLOG( "Do CheckUpdates 3");
-        iReminderTimer->CancelReminderTimerL();
-        SetReminderL( EFalse );
-        }
     
     if( !iUpdate )
         {
@@ -644,6 +583,15 @@
     {
     FLOG_NUM( "CheckUpdatesComplete aErrorCode = %d", aErrorCode );
     FLOG_NUM( "CheckUpdatesComplete aAvailableUpdates = %d", aAvailableUpdates );
+    
+    //HLa
+    int test = 0;
+    if ( test == 0 )
+        {
+        aErrorCode = 0;
+        aAvailableUpdates = 0;
+        }
+    
     if ( !IAUpdateEnabledL() )
         {
         Shutdown();
@@ -688,8 +636,7 @@
             {             
             FLOG( "CheckUpdatesComplete 4");
     
-            LaunchSoftNotificationL(R_IAUPDATE_UPDATE_AVAILABLE,
-                        R_TEXT_SOFTKEY_SHOW, R_TEXT_SOFTKEY_LATER );
+            LaunchNotificationL( aAvailableUpdates );
             }
 
             FLOG( "CheckUpdatesComplete 5");
@@ -736,19 +683,6 @@
                 StartL( interval );
                 SetLastRefreshTime();
                 }
-            else
-                {
-                //don't show soft notification and restart the timer.
-                TTimeIntervalMinutes oneweek( UpdateAvailableReminderIntervalInMinutesL() );   
-                TTime currenttime;
-                currenttime.UniversalTime();
-                TTime nextRemindTime = currenttime + oneweek;
-
-                SetReminderL( ETrue );
-                SetNextRemindTimeL( nextRemindTime );
-                                       
-                iReminderTimer->StartReminderTimerL( oneweek );
-                }
             //clear the retry time
             SetRetryTimesL( 0 ); 
             }
@@ -893,7 +827,6 @@
             break;
             
         case EFirstTimeMode:
-        case EFirstTimeRemindMode:
             {
             FLOG("[bgchecker] runl EFirstTimeMode");
             
@@ -921,14 +854,7 @@
 
         case EFirstTimeMode2:
             {
-            FLOG("[bgchecker] runl EFirstTimeMode2");
-            LaunchSoftNotificationL(R_IAUPDATE_REMIND_LATER, R_TEXT_SOFTKEY_YES, R_TEXT_SOFTKEY_NO );
-            }
-            break;
-
-        case EFirstTimeMode3:
-            {
-            FLOG("[bgchecker] runl EFirstTimeMode3");                 
+            FLOG("[bgchecker] runl EFirstTimeMode2");                 
             //disclaimer is not accepted  
            
             if ( !IsAgreementAcceptedL()  )
@@ -984,8 +910,7 @@
         {
         //this is first time mode
         FLOG("[bgchecker]HandlerFirstTimeL 3 ");
-        LaunchSoftNotificationL( R_IAUPDATE_FEATURES_AVAILABLE,
-                    R_TEXT_SOFTKEY_OK, R_TEXT_SOFTKEY_CANCEL );
+        LaunchNotificationL( 0 );
         }
     }
 
@@ -1252,11 +1177,6 @@
         FLOG(" current mode is FirstTimeMode ");
         interval = FirstTimeDialogDelayInMinutesL();
         }
-    else if ( ModeL() == EFirstTimeRemindMode )
-        {
-        FLOG(" current mode is FirstTimeRemindMode");
-        interval = FirstTimeDialogReminderIntervalInMinutesL();
-        }
     else
         {
         //nothing
@@ -1290,16 +1210,19 @@
       switch ( iMode )
           {
           case EFirstTimeMode:
-          case EFirstTimeRemindMode:     
                  {
                  
                  FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode");
                  if ( !aIsAccepted )
                      {
-                     FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode not accepted");
-                     iMode = EFirstTimeMode2;
+                     FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode, not accepted");
+                     //in sleep mode now
+                     iMode = ESleepMode;
                      SetModeL( iMode );
-                     StartL( StartNow );
+                     
+                     //subscribe to cenrep key for automatic checking for wake up from sleep mode
+                     ListenAutoUpdateSettingsL();
+                     
                      }
                  else
                      {
@@ -1309,7 +1232,7 @@
                      //check the disclaimer acceptance and automatic checking setting in 10mins
 
                      StartL( KDelayForUserToAcceptDisclaimer );
-                     iMode = EFirstTimeMode3;     
+                     iMode = EFirstTimeMode2;     
                      SetModeL( iMode );
 
                      
@@ -1319,64 +1242,19 @@
                  break;
                  }
                  
-                 
-                 
-          case EFirstTimeMode2:
-              {
-              FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode2 ");
-              if ( aIsAccepted )
-                  {
-                  FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode2, accepted");
-                  //user wants to be reminder so remind in 4 weeks
-                  //set to first time remind mode
-                  iMode = EFirstTimeRemindMode;
-                  SetModeL( iMode );
-                  TTimeIntervalMinutes fourweeks( FirstTimeDialogReminderIntervalInMinutesL() );            
-                  TTime currenttime;
-                  currenttime.UniversalTime();
-                        
-                  //save the next show new feature dialog time
-                  //in case use switch off the device and restarted.      
-                  User::LeaveIfError( SetLastTimeShowNewFeatureDialogL( currenttime ) );
-                        
-                  StartL( fourweeks );
-                  return;
-                  }
-              else
-                  {
-                  FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode2, not accepted");
-                  //in sleep mode now
-                  iMode = ESleepMode;
-                  SetModeL( iMode );
-                  
-                  //subscribe to cenrep key for automatic checking for wake up from sleep mode
-                  ListenAutoUpdateSettingsL(); 
-                  }
-              break;
-              }
-              
           case ENormalMode:
               {
               FLOG("[bgchecker] SoftNotificationCallBack ENormalMode");
               if ( !aIsAccepted )
                   {
                   FLOG("[bgchecker] SoftNotificationCallBack ENormalMode not accpeted");
-                  //user wants to be reminded later
-                  TTimeIntervalMinutes oneweek( UpdateAvailableReminderIntervalInMinutesL() );   
-                  TTime currenttime;
-                  currenttime.UniversalTime();
-                  TTime nextRemindTime = currenttime + oneweek;
-
-                  SetReminderL( ETrue );
-                  SetNextRemindTimeL( nextRemindTime );
                   
-                  iReminderTimer->StartReminderTimerL( oneweek );
-                  
-                  //the reminder call back function will be called when reminder timer expires.
                   }
               else
                   {
-                  //accepted, launch iad
+                  //accepted, clear indicator entries
+                  SetNrOfIndicatorEntriesL( 0 );
+                  // start IAD
                   StartIaupdateL();
                   }
               break;
@@ -1411,81 +1289,110 @@
     return iMode;
     }
 
-
 // ----------------------------------------------------------
-// CIAUpdateBGTimer::DoReminderTimerCallBack()
+// CIAUpdateBGTimer::LaunchNotificationL( const int aNrOfUpdates )
 // ----------------------------------------------------------
-void CIAUpdateBGTimer::DoReminderTimerCallBackL()
+void CIAUpdateBGTimer::LaunchNotificationL( const int aNrOfUpdates )
     {
-    FLOG("[bgchecker] ReminderTimerCallBack begin");
-    if ( !IAUpdateEnabledL() )
-        {
-        Shutdown();
-        return;
-        }
-    //Check the automatic update setting, if it has been disabled, 
-    //then go to sleep mode.   
-    if ( IsAutoUpdateDisabledL() )
-        {
-        FLOG("[bgchecker] ReminderTimerCallBack autoupdate is disabled, switch to sleep mode");
-        ListenAutoUpdateSettingsL();
-        iMode = ESleepMode;
-        SetModeL( iMode );
-        return;
-        } 
-    
-    TTimeIntervalMinutes timetowait = TimeIntervalFromNextRefreshL();
-    
-    if ( timetowait.Int() <= KRefreshTimerReminderTimerGap )
-        {
-        FLOG("[bgchecker] ReminderTimerCallBack refresh is about to come in one day. We don't show reminder then");
-        return;
-        }
+   
+    _LIT( KFirstTimeText, "Update checking" );
+    _LIT( KNormalText, "Updates available" );
+    _LIT( KSecondText, "Tap to view" );
+
+    // loc:
+    /*
+    _LIT( KIcon, "z:\\resource\\iaupdate\\qgn_note_swupdate_notification.svg" );
+    _LIT(KLocFile, "Text_Map_Swupdate_");
+    _LIT(KLocFilePath, "z:\\resource\\iaupdate\\");
     
-    //if reminder is still on which means the BGTimer is not expired 
-    //and checkupdate() is not called yet, then go ahead to call DoupdatesChecking
-    //this is to avoid DoUpdateChecking being called at the same time.
-        
-    if ( ReminderOnL() )
-        {
-        FLOG("[bgchecker] ReminderTimerCallBack Reminder is still ON");
-        DoUpdatesCheckingL( EFalse );
-        }
-    FLOG("[bgchecker] ReminderTimerCallBack end");
-    }
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::ReminderTimerCallBack()
-// ----------------------------------------------------------
-void CIAUpdateBGTimer::ReminderTimerCallBack()
-    {
-    TRAP_IGNORE( DoReminderTimerCallBackL() );
-    }
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::LaunchSoftNotificationL()
-// ----------------------------------------------------------
-void CIAUpdateBGTimer::LaunchSoftNotificationL( const TInt& aResourceId, const TInt& SK1, const TInt& SK2 )
-    {     
-    iInternalFile->ReadControllerDataL(); 
-    TInt snid = iInternalFile->SoftNotificationID();
-    if ( snid ) 
-        {
-        //there is a soft notification buffered, remove it
-        iSoftNotification->RemoveSoftNotificationL( snid );
-        }
+    _LIT(KTitleFirstTime, "txt_software_dpophead_update_checking");
+    _LIT(KTitleOneUpdate, "txt_software_dpophead_update_available");
+    _LIT(KTitleSeveralUpdates, "txt_software_dpophead_updates_available");
+    
     
-    FLOG("[bgchecker] LaunchSoftNotificationL ");
-    HBufC* text = ReadResourceLC( aResourceId );    
-    HBufC* sk1 = ReadResourceLC( SK1 );    
-    HBufC* sk2 = ReadResourceLC( SK2 );  
+    _LIT(KSecondFirstTime, "txt_software_dpopinfo_tap_to_view");
+    _LIT(KSecondOneUpdate, "txt_software_dpopinfo_tap_to_view");
+    _LIT(KSecondSeveralUpdates, "txt_software_dpopinfo_tap_to_view");
+   */
     
+    FLOG("[bgchecker] LaunchNotificationL ");
         
     iMode = ModeL();
     
-/*    
-    // Commented out, so no icon is shown in the soft notification.
-    // Other functions, used by the code below, are also commented out.
+    // loc: initialize localisation text loader
+    /*
+    TBool res = HbTextResolverSymbian::Init(KLocFile, KLocFilePath);
+    if ( res != KErrNone )
+        {
+        // nothing to do
+        }
+    */
+    
+    
+    // loc: Resolve title text
+    /*
+    HBufC*  titleText;
+    if ( aNrOfUpdates == 0 )
+        {
+        // First time case
+        titleText = HbTextResolverSymbian::LoadL( KTitleFirstTime );
+        }
+    else if ( aNrOfUpdates == 1 )
+        {
+        // one update available
+        titleText = HbTextResolverSymbian::LoadL( KTitleOneUpdate );
+        }
+    else
+        {
+        // several updates available
+        titleText = HbTextResolverSymbian::LoadL( KTitleSeveralUpdates );
+        }
+    
+    // Resolve second text
+    HBufC*  secondText;
+    if ( aNrOfUpdates == 0 )
+        {
+        // First time case
+        secondText = HbTextResolverSymbian::LoadL( KSecondFirstTime );
+        }
+    else if ( aNrOfUpdates == 1 )
+        {
+        // one update available
+        secondText = HbTextResolverSymbian::LoadL( KSecondOneUpdate, aNrOfUpdates );
+        }
+    else
+        {
+        // several updates available
+        // loc: text.append(hbTrId("txt_software_dblist_updates_available"));
+        secondText = HbTextResolverSymbian::LoadL( KSecondSeveralUpdates, aNrOfUpdates );
+        }
+     */
+    
+    // loc: Load title and second line
+    // HBufC* titleText = HbTextResolverSymbian::LoadL(KTextTitle);
+    // CleanupStack::PushL( titleText );
+    // HBufC* secondText3 = HbTextResolverSymbian::LoadL(KTextSecond);
+    // CleanupStack::PushL( titleText );
+    
+    
+    TBuf<128> titleText;
+    TBuf<128> secondText;
+    
+    //title text (normal/first time)
+    if ( iMode == ENormalMode )
+        {
+        titleText.Append(KNormalText);
+        }
+    else
+        {
+        titleText.Append(KFirstTimeText);
+        }
+    
+    //text for 2nd line
+    secondText.Append(KSecondText);
+            
+    // icon
+    /* HLa-->
     if ( iMode == ENormalMode )
         {
         TFileName path;
@@ -1493,187 +1400,35 @@
         
         if ( err == KErrNone )
             {
-            HBufC8* image = LoadFileLC( path );   
-            iSoftNotification->SetImageL( *image );
-            CleanupStack::PopAndDestroy( image );
+            iSoftNotification->SetImagePathL( path );
+            //HBufC8* image = LoadFileLC( path );   
+            //iSoftNotification->SetImageL( *image );
+            //CleanupStack::PopAndDestroy( image );
             }
         }
-*/
+    */
+    // loc: set image path
+    // iSoftNotification->SetImagePathL( KIcon );
   
+    // Set texts
+    // loc: iSoftNotification->SetTextL( titleText->Des(), secondText->Des() );
+    iSoftNotification->SetTextL( titleText, secondText );
     
-    iSoftNotification->SetTextL( *text, *text );
-    iSoftNotification->SetSoftkeyLabelsL( *sk1, *sk2 );
-   
-    iSoftNotification->ShowSoftNotificationL();
-    FLOG("[bgchecker] LaunchSoftNotificationL 1");
-    CleanupStack::PopAndDestroy( 3 ); //text, sk1, sk2
-    }
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::GetPrivatePathL()
-// ----------------------------------------------------------
-TInt CIAUpdateBGTimer::GetPrivatePathL( TFileName& /*aPath*/ )
-    {
-/*
-    RFs fsSession;  
-    User::LeaveIfError( fsSession.Connect() );
-    CleanupClosePushL( fsSession );
-
-    // This will set the correct drive and private path 
-    // for the file server session. 
-    TInt err = KErrNone;
-    TRAP( err, SetPrivateDriveL( fsSession, KImageFile ) );
+    // loc: delete text buffers
+    // CleanupStack::PopAndDestroy( titleText );
+    // CleanupStack::PopAndDestroy( titleText );
     
-    if ( err != KErrNone )
-        {
-        CleanupStack::PopAndDestroy( &fsSession ); 
-        return err;
-        }
-   
-    err = fsSession.SessionPath( aPath );
-    aPath.Append( KImageFile );
+    // Set number of updates for dialog and internal file
+    iSoftNotification->SetNrOfUpdates( aNrOfUpdates );
+    SetNrOfIndicatorEntriesL( aNrOfUpdates );
     
-    CleanupStack::PopAndDestroy( &fsSession ); 
-    return err;
-*/
-    return 0;
+    iSoftNotification->ShowNotificationL();
+    FLOG("[bgchecker] LaunchNotificationL 1");
+    
+    return;
     }
 
 // ----------------------------------------------------------
-// CIAUpdateBGTimer::LoadFileLC()
-// ----------------------------------------------------------
- HBufC8* CIAUpdateBGTimer::LoadFileLC(const TDesC& /*aFile*/)
-     {
-/*
-     RFs fs;
-    User::LeaveIfError( fs.Connect() );
-    CleanupClosePushL( fs );
-    RFile file;
-    User::LeaveIfError(file.Open(fs, aFile, EFileRead));
-    CleanupClosePushL(file);
-    TInt size;
-    User::LeaveIfError(file.Size(size));
-    HBufC8* imagebuf = HBufC8::NewL(size);
-    TPtr8 imageptr(imagebuf->Des());
-    file.Read(imageptr);
-    CleanupStack::PopAndDestroy( &file ); 
-    CleanupStack::PopAndDestroy( &fs ); 
-    CleanupDeletePushL(imagebuf);
-    return imagebuf;
-*/
-    return NULL;
-     } 
-
- 
- // ----------------------------------------------------------
- // CIAUpdateBGTimer::SetPrivateDriveL()
- // ----------------------------------------------------------
- void CIAUpdateBGTimer::SetPrivateDriveL( 
-     RFs& /*aFs*/,
-     const TDesC& /*aFileName*/ ) const
-     {
-/*
-     // First try to find the file from the private directory
-     // of the drive where the process exists.
-     RProcess process;
-
-     // Set the session private path according to 
-     // the process file name drive.
-     TInt driveNum( 
-         SetSessionPrivatePathL( aFs, process.FileName() ) );
-
-     // Get the session path that was set above.
-     TFileName sessionPath;
-     User::LeaveIfError( aFs.SessionPath( sessionPath ) );
-
-     // Use the file finder to check if the file actually exists 
-     // in the given drive path. If it does not, the file finder 
-     // will automatically check from other drives. So, here we 
-     // should always find the file if any exists.
-     TFindFile finder( aFs );
-     User::LeaveIfError( finder.FindByDir( aFileName, sessionPath ) );
-
-     // The drive may have changed if the file was not found from
-     // the first suggested drive. So, be sure to have the correct
-     // private path.
-     driveNum = SetSessionPrivatePathL( aFs, finder.File() );
-
-     // Use the drive info to check if the drive is ROM drive.
-     // We prefer non ROM drives. But, accept ROM if nothing else is
-     // available.
-     TDriveInfo info;
-     User::LeaveIfError( aFs.Drive( info, driveNum ) );
-     TBool isRomDrive( info.iDriveAtt & KDriveAttRom );
-     if ( !isRomDrive )
-         {
-         // The current file is not in ROM drive so use that.
-         return;
-         }
-
-     // Because previous finding was ROM file, try to find a non ROM file.
-     TInt findErrorCode( finder.Find() );
-     if ( findErrorCode == KErrNotFound )
-         {
-         // Because no new file is found, use the current settings.
-         return;
-         }
-     User::LeaveIfError( findErrorCode );
-
-     // Update the session path for the correct file.
-     SetSessionPrivatePathL( aFs, finder.File() );
-*/
-     }
-
-
- // ----------------------------------------------------------
- // CIAUpdateBGTimer::SetSessionPrivatePathL()
- // ----------------------------------------------------------
- TInt CIAUpdateBGTimer::SetSessionPrivatePathL( 
-     RFs& /*aFs*/,
-     const TDesC& /*aPath*/ ) const
-     {                      
-/*
-     // Use the parser to get the drive information from the path.
-     TParsePtrC parser( aPath );
-
-     if ( !parser.DrivePresent() )
-         {
-         User::Leave( KErrArgument );
-         }
-
-     // Drive check was passed above.
-     // So, drive information is safe to use.
-     const TDesC& drive( parser.Drive() );
-     const TChar driveChar( drive[ 0 ] );
-     TInt driveNum( EDriveA );
-     User::LeaveIfError( 
-         RFs::CharToDrive( driveChar, driveNum ) );
-
-     // Set the file drive to be file session private path drive.
-     User::LeaveIfError( aFs.SetSessionToPrivate( driveNum ) );
-
-     return driveNum;
-*/
-     return 0;
-     }
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::ReadResourceLC()
-// ----------------------------------------------------------
-HBufC* CIAUpdateBGTimer::ReadResourceLC( TInt aResourceId )
-    {
-    TResourceReader reader;
-    HBufC8* buff = iResourceFile.AllocReadLC( aResourceId );
-    reader.SetBuffer( buff );
-    HBufC* text = reader.ReadHBufCL();
-    CleanupStack::PopAndDestroy( buff );
-    CleanupStack::PushL( text );
-    return text;
-    }
-
-
-// ----------------------------------------------------------
 // CIAUpdateBGTimer::IsAutoUpdateDisabledL()
 // ----------------------------------------------------------
 TBool CIAUpdateBGTimer::IsAutoUpdateDisabledL()
@@ -1800,8 +1555,8 @@
     delete iUpdate; 
     iUpdate = NULL;
     
-    delete iReminderTimer;
-    iReminderTimer = NULL;
+    //delete iReminderTimer;
+    //iReminderTimer = NULL;
     
     if ( iNotifyHandler ) 
         {
@@ -1812,18 +1567,31 @@
     
     if ( iSoftNotification )
         {
-        TRAP_IGNORE( iSoftNotification->RemoveSoftNotificationL( iSoftNotification->Id() ) );    
         delete iSoftNotification;
         iSoftNotification = NULL;
         }
     
+    if ( iIndicatorNotifyHandler )
+        {
+        delete iIndicatorNotifyHandler;
+        iIndicatorNotifyHandler = NULL;
+        }
+    
     CActiveScheduler::Stop();
         
     FLOG("[bgchecker] Shutdown() end");
+    }   
+// ---------------------------------------------------------------------------
+// CIAUpdateBGTimer::HandleIndicatorRemoveL()
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateBGTimer::HandleIndicatorRemoveL() 
+    {
+    // remove indicator from indicator menu
+    iSoftNotification->RemoveIndicatorL();
+    
+    //clear nr of indicator entries in internal file
+    SetNrOfIndicatorEntriesL( 0 );
     }
 
-
-
 // End of file
-
-
--- a/iaupdate/IAD/backgroundchecker/src/iaupdatebgremindertimer.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Implementation of background checker
-*
-*/
-
-
-#include    <e32std.h>
-#include    <AknSoftNotifier.h>
-#include    <AknNotifyStd.h>
-#include    <AknSoftNotificationParameters.h>
-#include    <avkon.rsg>
-#include    <iaupdate.rsg>
-#include    <centralrepository.h>
-#include    "iaupdatebgremindertimer.h"
-#include    "iaupdate.hrh"
-#include    "iaupdateprivatecrkeys.h"
-#include    "iaupdatebgconst.h"
-
-// ----------------------------------------------------------
-// CIAUpdateBGReminderTimer::NewL()
-// ----------------------------------------------------------
-CIAUpdateBGReminderTimer* CIAUpdateBGReminderTimer::NewL(MIAUpdateBGReminderTimerCallBack* aCallback)
-    {
-    CIAUpdateBGReminderTimer* self = new(ELeave)CIAUpdateBGReminderTimer(aCallback);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-    
-
-// ----------------------------------------------------------
-// CIAUpdateBGReminderTimer::ConstructL()
-// ----------------------------------------------------------
-void CIAUpdateBGReminderTimer::ConstructL()
-    {
-    CTimer::ConstructL();
-    CActiveScheduler::Add( this );
-    iInternalFile = CIAUpdateBGInternalFileHandler::NewL();
-    }
-    
-    
-// ----------------------------------------------------------
-// CIAUpdateBGReminderTimer::~CIAUpdateBGReminderTimer()
-// ----------------------------------------------------------
-CIAUpdateBGReminderTimer::~CIAUpdateBGReminderTimer()
-    {
-    Cancel();
-    delete iInternalFile;
-    }
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGReminderTimer::CIAUpdateBGReminderTimer()
-// ----------------------------------------------------------
-CIAUpdateBGReminderTimer::CIAUpdateBGReminderTimer(MIAUpdateBGReminderTimerCallBack* aCallback):CTimer( EPriorityStandard ), iCallback ( aCallback )
-    {   
-    }
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGReminderTimer::RunL()
-// ----------------------------------------------------------
-void CIAUpdateBGReminderTimer::RunL()
-    {
-    
-    if( iRuns == 0 )
-        {
-        //timer expired call the callback
-        iCallback->ReminderTimerCallBack();
-        }
-    else
-        {
-        TTime currenttime;
-        currenttime.UniversalTime();
-                 
-        if ( currenttime >= iNextRemindTime )
-            {
-            StartL( StartNow );
-            }
-        else
-            {
-            iInternalFile->ReadControllerDataL();
-            TTime nextremindtime = iInternalFile->NextRemindTime();
-            TTimeIntervalMinutes timetowait;
-            currenttime.MinutesFrom( nextremindtime, timetowait );
-            StartL( timetowait );
-            }                           
-         }  
-    }
-  
-// ----------------------------------------------------------
-// CIAUpdateBGReminderTimer::DoCancel()
-// ----------------------------------------------------------
-void CIAUpdateBGReminderTimer::DoCancel()
-    {
-    }
-// ----------------------------------------------------------
-// CIAUpdateBGReminderTimer::RunError()
-// ----------------------------------------------------------
-TInt CIAUpdateBGReminderTimer::RunError(TInt /*aError*/)
-    {
-    return KErrNone;
-    }
-
-// ----------------------------------------------------------
-// CIAUpdateBGReminderTimer::StartReminderTimerL()
-// ----------------------------------------------------------
-void CIAUpdateBGReminderTimer::StartReminderTimerL(TTimeIntervalMinutes& aTimetoWait )
-    {
-    if ( IsActive() )
-        {
-        Cancel();
-        }
-    
-    //show after one week
-    StartL( aTimetoWait );    
-    }
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGReminderTimer::CancelReminderTimerL()
-// ----------------------------------------------------------
-void CIAUpdateBGReminderTimer::CancelReminderTimerL()
-    {    
-    Cancel();
-    }
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGReminderTimer::StartL()
-// ----------------------------------------------------------
-void CIAUpdateBGReminderTimer::StartL( TTimeIntervalMinutes aWaitTime )
-    {   
-    Cancel();
-    /*
-    RTimer::After maximum delay is 35 minutes, 47 seconds this is because it is 32bit integer. 
-    Thats why aWaitTime is divided to 30min runs.  
-    */
-    iRuns = 0;
-    if(aWaitTime.Int() > HalfHourInMinuts )
-        {
-        iRuns = aWaitTime.Int() / HalfHourInMinuts;
-        TTimeIntervalMinutes halfhour( HalfHourInMinuts );    
-        After( ConvertToMicroseconds( halfhour ) );
-        }
-    else{
-        After( ConvertToMicroseconds( aWaitTime ) );
-        }
-
-    }
-
-// ----------------------------------------------------------
-// CIAUpdateBGReminderTimer::ConvertToMicroseconds()
-// ----------------------------------------------------------
-TTimeIntervalMicroSeconds32 CIAUpdateBGReminderTimer::ConvertToMicroseconds( TTimeIntervalMinutes aInterval )
-    {
-    return aInterval.Int()*60*1000*1000;
-    }
-
-// End of file
-
--- a/iaupdate/IAD/backgroundchecker/src/iaupdatebgsoftnotification.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/backgroundchecker/src/iaupdatebgsoftnotification.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -18,26 +18,74 @@
 
 
 // INCLUDE FILES
-#include <AknDynamicSoftNotifier.h>
-#include <AknDynamicSoftNotificationParams.h>
+#include <hbindicatorsymbian.h>
+#include <hbsymbianvariant.h>
 
 #include "iaupdatebgsoftnotification.h"
 #include "iaupdatebginternalfilehandler.h"
 #include "iaupdatebgconst.h"
 #include "iaupdatebglogger.h"
 
+// Indicator type
+_LIT(KIndicatorTypeBgc, "com.nokia.iaupdate.indicatorplugin/1.0");
 
 // ============================ MEMBER FUNCTIONS ===============================
+void CIAUpdateBGSoftNotification::NotificationDialogActivated(
+        const CHbDeviceNotificationDialogSymbian* /* aDialog */)
+    {
+    
+    FLOG("[bgchecker] softnotification callback function ACCEPTED");
+    
+    // indicator shall not be shown 
+    SetIndicatorEnabled( EFalse );
+    
+    // Remove (possibly) existing indicator
+    RemoveIndicatorL();
+    
+    iCallback->SoftNotificationCallBack( ETrue );
+    
+    // remove dialog
+    //delete iNotificationDialog;
+    //iNotificationDialog = 0;
+    
+    return;
+    }
+
+void CIAUpdateBGSoftNotification::NotificationDialogClosed
+         ( const CHbDeviceNotificationDialogSymbian* /* aDialog */, 
+           TInt /* aCompletionCode*/ )
+    {
+    
+    
+    FLOG("[bgchecker] softnotification callback function Closed");
+
+    // Set indicator, if needed
+    if (IsIndicatorEnabled())
+        {
+        ShowIndicatorL();
+        }
+    
+    
+    iCallback->SoftNotificationCallBack( EFalse );
+    
+    // remove dialog
+    //delete iNotificationDialog;
+    //iNotificationDialog = 0;
+    
+    return;
+    }
+
+
 // -----------------------------------------------------------------------------
 // CIAUpdateBGSoftNotification::NewLC
 // Static constructor
 // -----------------------------------------------------------------------------
 //
-CIAUpdateBGSoftNotification* CIAUpdateBGSoftNotification::NewL( MIAUpdateBGSoftNotificationCallBack* aCallback, 
-                                                                CIAUpdateBGInternalFileHandler* aInternalFile )
+CIAUpdateBGSoftNotification* CIAUpdateBGSoftNotification::NewL( 
+        MIAUpdateBGSoftNotificationCallBack* aCallback ) 
     {   
     CIAUpdateBGSoftNotification* self =
-        new ( ELeave ) CIAUpdateBGSoftNotification( aCallback, aInternalFile );
+        new ( ELeave ) CIAUpdateBGSoftNotification( aCallback );
     CleanupStack::PushL( self );
     
     self->ConstructL();
@@ -52,83 +100,88 @@
 //
 CIAUpdateBGSoftNotification::~CIAUpdateBGSoftNotification()
     {
-    delete iSoftkey1;
-    delete iSoftkey2;
 
-    delete iLabel;
-    delete iGroupLabel;
+    delete iTitle;
+    delete iText;
+    
+    delete iNotificationDialog;
 
-    delete iImageData;
-
-    delete iNotifier;
     }
-
+   
 // -----------------------------------------------------------------------------
-// CIAUpdateBGSoftNotification::NotificationAccepted
-// Dynamic soft notification was accepted by user.
+// CIAUpdateBGSoftNotification::ShowNotificationL
+// Displays notification
 // -----------------------------------------------------------------------------
 //
-void CIAUpdateBGSoftNotification::NotificationAccepted( TInt /*aIdentifier*/ )
+void CIAUpdateBGSoftNotification::ShowNotificationL()
     {
-    FLOG("[bgchecker] softnotification callback function ACCEPTED");
-    //remove the soft notifiation id
-    iInternalFile->SetSoftNotificationID( 0 );
-    TRAP_IGNORE( iInternalFile->WriteControllerDataL() );
+    
+    FLOG("[bgchecker] ShowNotificationL");
+    
+    // crete dialog, id does not exist already
+    if (!iNotificationDialog)
+        {
+        iNotificationDialog = CHbDeviceNotificationDialogSymbian::NewL( this );
+        }
     
-    iCallback->SoftNotificationCallBack( ETrue );
+    // enable indicator showing
+    SetIndicatorEnabled( ETrue );
+
+    // fill texts, icon & behaviour parameters
+    FillNotificationParams();
+    
+    iNotificationDialog->ShowL();
+    
+    return;
+    
     }
 
 // -----------------------------------------------------------------------------
-// CIAUpdateBGSoftNotification::NotificationCanceled
-// Dynamic soft notification was canceled by user.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateBGSoftNotification::NotificationCanceled( TInt /*aIdentifier*/ )
-    {
-    FLOG("[bgchecker] softnotification callback function Canceled");
-    //remove the soft notifiation id
-    iInternalFile->SetSoftNotificationID( 0 );
-    TRAP_IGNORE( iInternalFile->WriteControllerDataL() );
-          
-    iCallback->SoftNotificationCallBack( EFalse );
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateBGSoftNotification::ShowSoftNotificationL
-// Displays a soft notification
+// CIAUpdateBGSoftNotification::ShowIndicatorL
+// Displays indicator
 // -----------------------------------------------------------------------------
 //
-void CIAUpdateBGSoftNotification::ShowSoftNotificationL()
+void CIAUpdateBGSoftNotification::ShowIndicatorL()
     {
-    TAknDynamicSoftNotificationParams param( KSoftNotificationPriority );
-    FillNotificationParams( param );
+    
+    FLOG("[bgchecker] ShowIndicatorL");
     
-    TInt oldId = iNotificationId;
-    iNotificationId =
-        iNotifier->SetDynamicNotificationCountL( param, iNotificationId, 1 );
-
-    if( oldId != iNotificationId )
-        {           
-        FLOG("[bgchecker] softnotification save notification Id");
-        iInternalFile->SetSoftNotificationID( iNotificationId );
-        TRAP_IGNORE( iInternalFile->WriteControllerDataL() );
-        
-        iNotifier->StopObserving( oldId );
-        iNotifier->StartObservingL( iNotificationId, this );
-        }
+    CHbIndicatorSymbian *ind = CHbIndicatorSymbian::NewL();
+    CleanupStack::PushL( ind );
+            
+    TInt value = GetNrOfUpdates();
+            
+    // Set indicator
+    CHbSymbianVariant* varValue = CHbSymbianVariant::NewL( &value,
+        CHbSymbianVariant::EInt );
+    CleanupStack::PushL( varValue );
+    // Temporary removal 
+    ind->Activate( KIndicatorTypeBgc, varValue );
+    CleanupStack::PopAndDestroy( varValue );
+    CleanupStack::PopAndDestroy( ind );
+    
+    return;
+    
     }
 
 // -----------------------------------------------------------------------------
-// CIAUpdateBGSoftNotification::RemoveSoftNotificationL
-// Cancels and removes the soft notification
+// CIAUpdateBGSoftNotification::Remove indicator
+// Removes indicator
 // -----------------------------------------------------------------------------
 //
-void CIAUpdateBGSoftNotification::RemoveSoftNotificationL( TInt aNotifierId )
+void CIAUpdateBGSoftNotification::RemoveIndicatorL()
     {
-    if ( aNotifierId != 0 )
-        {
-        iNotifier->CancelDynamicNotificationL( aNotifierId );
-        }
+    
+    FLOG("[bgchecker] RemoveIndicatorL");
+    
+    CHbIndicatorSymbian *ind = CHbIndicatorSymbian::NewL();
+    CleanupStack::PushL( ind );
+    // Temporary removal 
+    ind->Deactivate( KIndicatorTypeBgc ); 
+    CleanupStack::PopAndDestroy(ind);
+    
+    return;
+    
     }
 
 // -----------------------------------------------------------------------------
@@ -136,58 +189,29 @@
 // Sets a text for a soft notification
 // -----------------------------------------------------------------------------
 //
-void CIAUpdateBGSoftNotification::SetTextL( const TDesC& aText, const TDesC& aGroupText )
+void CIAUpdateBGSoftNotification::SetTextL( 
+        const TDesC& aTitle, const TDesC& aText )
     {
-    HBufC* txt = aText.AllocL();
-    delete iLabel;
-    iLabel = txt;
+    HBufC* txt = aTitle.AllocL();
+    delete iTitle;
+    iTitle = txt;
 
-    txt = aGroupText.AllocL();
-    delete iGroupLabel;
-    iGroupLabel = txt;
+    txt = aText.AllocL();
+    delete iText;
+    iText = txt;
     }
 
 // -----------------------------------------------------------------------------
-// CIAUpdateBGSoftNotification::SetSoftkeyLabelsL
-// Sets new labels for softkeys
+// CIAUpdateBGSoftNotification::SetNrOfUpdates
+// Sets an image path for a soft notification
 // -----------------------------------------------------------------------------
 //
-void CIAUpdateBGSoftNotification::SetSoftkeyLabelsL(
-    const TDesC& aSoftkey1Label,
-    const TDesC& aSoftkey2Label )
+void CIAUpdateBGSoftNotification::SetNrOfUpdates( const TInt& aNrOfUpdates)
     {
-    HBufC* txt = aSoftkey1Label.AllocL();
-    delete iSoftkey1;
-    iSoftkey1 = txt;
-
-    txt = aSoftkey2Label.AllocL();
-    delete iSoftkey2;
-    iSoftkey2 = txt;
+    // save number of updates
+    iNrOfUpdates = aNrOfUpdates;
+    return;
     }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGSoftNotification::SetImageL
-// Sets an image for a soft notification
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateBGSoftNotification::SetImageL(
-    const TDesC8& aImage )
-    {
-    HBufC8* image = aImage.AllocL();
-    delete iImageData;
-    iImageData = image;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGSoftNotification::Id
-// Notification Id
-// -----------------------------------------------------------------------------
-//
-TInt CIAUpdateBGSoftNotification::Id()
-    {
-    return iNotificationId;
-    }
-
 // -----------------------------------------------------------------------------
 // CIAUpdateBGSoftNotification::ConstructL
 // Symbian 2nd phase constructor can leave.
@@ -196,11 +220,6 @@
 void CIAUpdateBGSoftNotification::ConstructL()
     {
     FLOG("[bgchecker] softnotification ConstructL");
-    iNotifier = CAknDynamicSoftNotifier::NewL();
-    
-    iInternalFile->ReadControllerDataL();
-    iNotificationId = iInternalFile->SoftNotificationID();
-      
     }
 
 // -----------------------------------------------------------------------------
@@ -209,54 +228,66 @@
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CIAUpdateBGSoftNotification::CIAUpdateBGSoftNotification( MIAUpdateBGSoftNotificationCallBack* aCallback, 
-                                                          CIAUpdateBGInternalFileHandler* aInternalFile ) 
-    : iCallback ( aCallback ), iInternalFile ( aInternalFile )
+CIAUpdateBGSoftNotification::CIAUpdateBGSoftNotification( 
+        MIAUpdateBGSoftNotificationCallBack* aCallback )
+    : iCallback ( aCallback )
     {
     }
 
 // -----------------------------------------------------------------------------
-// CIAUpdateBGSoftNotification::StartObservingIfNeededL
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateBGSoftNotification::StartObservingIfNeededL()
-    {
-    if ( iNotificationId )
-        {
-        FLOG("[bgchecker] softnotification There is a buffered softnotification");
-        //a buffering soft notification
-        iNotifier->StartObservingL( iNotificationId, this );
-        }
-    }
-
-// -----------------------------------------------------------------------------
 // CIAUpdateBGSoftNotification::FillNotificationParams
 // -----------------------------------------------------------------------------
 //
-void CIAUpdateBGSoftNotification::FillNotificationParams(
-    TAknDynamicSoftNotificationParams& aParam )
+
+void CIAUpdateBGSoftNotification::FillNotificationParams()
     {
-    if( iSoftkey1 && iSoftkey2 )
-        {
-        aParam.SetSoftkeys( *iSoftkey1, *iSoftkey2 );
-        }
-
-    if( iLabel )
+    
+    // set title, text and icon
+    if ( iTitle )
         {
-        aParam.SetNoteLabels( *iLabel, *iLabel );
+        iNotificationDialog->SetTitleL(iTitle->Des());
         }
-
-    if( iGroupLabel )
+    
+    if ( iText )
         {
-        //aParam.SetGroupLabels( *iGroupLabel, *iGroupLabel );
-        }
-
-    if( iImageData )
-        {
-        aParam.SetImageData( *iImageData );
+        iNotificationDialog->SetTextL(iText->Des());
         }
     
-    aParam.EnableObserver();
+    // set wrapping, timeout and touch 
+    iNotificationDialog->SetTitleTextWrapping(
+            CHbDeviceNotificationDialogSymbian::TextWordWrap);
+    iNotificationDialog->SetTimeout(4000); //default 3000
+    iNotificationDialog->EnableTouchActivation(ETrue); // default FALSE
+  
+    }  
+// ----------------------------------------------------------
+// CIAUpdateBGSoftNotification::EnableIndicator(TBool aEnabled)
+// ----------------------------------------------------------
+void CIAUpdateBGSoftNotification::SetIndicatorEnabled( TBool aEnabled )
+    {
+    
+    iActivateIndicator = aEnabled;
+    
+    }
+
+// ----------------------------------------------------------
+// CIAUpdateBGSoftNotification::IndicatorEnabled()
+// ----------------------------------------------------------
+TBool CIAUpdateBGSoftNotification::IsIndicatorEnabled()
+    {
+    
+    return iActivateIndicator;
+    
+    }
+
+// ----------------------------------------------------------
+// CIAUpdateBGSoftNotification::GetNrOfUpdates()
+// ----------------------------------------------------------
+int CIAUpdateBGSoftNotification::GetNrOfUpdates()
+    {
+    
+    return iNrOfUpdates;
+    
     }
 
 //  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/bgcindicatorplugin/bgcindicatorplugin.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description:
+#
+
+TEMPLATE = lib
+TARGET = bgcindicatorplugin
+CONFIG += plugin
+CONFIG += hb
+
+INCLUDEPATH += .
+DEPENDPATH += .
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+INCLUDEPATH += ../../../../inc
+
+
+HEADERS += inc/bgcindicatorplugin.h \
+					 inc/bgcindicator.h
+SOURCES += src/bgcindicatorplugin.cpp \
+		   		 src/bgcindicator.cpp
+		   
+
+symbian {
+    TARGET.EPOCALLOWDLLDATA=1
+    TARGET.CAPABILITY = CAP_GENERAL_DLL
+    TARGET.UID3 = 0x2002E696
+
+    pluginstub.sources = bgcindicatorplugin.dll
+    pluginstub.path = /resource/plugins/indicators
+    DEPLOYMENT += pluginstub
+}
+
+BLD_INF_RULES.prj_exports += \
+  "$${LITERAL_HASH}include <platform_paths.hrh>" \
+  "rom/bgcindicatorplugin.iby             CORE_APP_LAYER_IBY_EXPORT_PATH(bgcindicatorplugin.iby)" 
+  
+LIBS += -lxqservice
+LIBS += -lws32
+LIBS += -lapparc
+LIBS += -lapgrfx
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/bgcindicatorplugin/inc/bgcindicator.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Backgroundchecker Indicator class
+ *
+ */
+
+#ifndef BGCINDICATOR_H
+#define BGCINDICATOR_H
+
+#include <QObject>
+
+#include <hbindicatorinterface.h>
+
+/**
+ * Message indicator class. 
+ * Handles client request and showing the indications. 
+ */
+class BgcIndicator : public HbIndicatorInterface
+{
+public:
+    /**
+     * Constructor
+     */
+    BgcIndicator(const QString &indicatorType);
+    
+    /**
+     * Destructor
+     */
+    ~BgcIndicator();
+    
+    /**
+     * @see HbIndicatorInterface
+     */
+    bool handleInteraction(InteractionType type);
+    
+    /**
+     * @see HbIndicatorInterface
+     */
+    QVariant indicatorData(int role) const;
+    
+protected:
+    /**
+     * @see HbIndicatorInterface
+     */
+    bool handleClientRequest(RequestType type, const QVariant &parameter);
+    
+private: 
+    /**
+     * Start the iaupdate client
+     */
+    void StartIaupdateL() const;
+    
+private:
+    /**
+     * Nr of updates
+     */
+    int mNrOfUpdates;
+    
+};
+
+#endif // BGCINDICATOR_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/bgcindicatorplugin/inc/bgcindicatorplugin.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Backgroundchecker Indicator Plugin Class 
+ *
+ */
+
+#ifndef BGCINDICATORPLUGIN_H
+#define BGCINDICATORPLUGIN_H
+
+#include <QObject>
+#include <QStringList>
+#include <QVariant>
+
+#include <hbindicatorplugininterface.h>
+#include <hbindicatorinterface.h>
+
+/**
+ * Backgroundchecker indicator plugin class. 
+ * Main class of backgroundchecker indicator plugin. 
+ */
+class BgcIndicatorPlugin : public QObject, public HbIndicatorPluginInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(HbIndicatorPluginInterface)
+
+public:
+    /**
+     * Constructor
+     */
+     BgcIndicatorPlugin();
+     
+     /**
+      * Destructor
+      */
+    ~BgcIndicatorPlugin();
+    
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    QStringList indicatorTypes() const;
+    
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    bool accessAllowed(const QString &indicatorType,
+            const QVariantMap &securityInfo) const;
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    HbIndicatorInterface* createIndicator(const QString &indicatorType);
+    
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    int error() const;
+    
+private:
+    Q_DISABLE_COPY(BgcIndicatorPlugin)
+    
+    /**
+     * Error value
+     */
+    int mError;
+    
+    
+    /**
+     * Indicator types 
+     * supported indicator types. 
+     */
+    QStringList mIndicatorTypes;
+};
+
+#endif // BGCINDICATORPLUGIN_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/bgcindicatorplugin/rom/bgcindicatorplugin.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __BGCINDICATORPLUGIN_IBY__
+#define __BGCINDICATORPLUGIN_IBY__
+
+REM DLL
+file=ABI_DIR\UREL\bgcindicatorplugin.dll               SHARED_LIB_DIR\bgcindicatorplugin.dll UNPAGED
+data=\epoc32\data\z\resource\plugins\indicators\bgcindicatorplugin.qtplugin   \resource\plugins\indicators\bgcindicatorplugin.qtplugin
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/bgcindicatorplugin/src/bgcindicator.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,208 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include <w32std.h>
+#include <apgtask.h>
+#include <apacmdln.h>
+#include <xqservicerequest.h>
+
+#include <hb/hbcore/hbtranslator.h>
+
+#include <hbicon.h>
+
+#include "bgcindicator.h" 
+
+//----------------------------------------------------------------------
+
+
+// ----------------------------------------------------------------------------
+// BgcIndicator::BgcIndicator
+// @see bgcindicator.h
+// ----------------------------------------------------------------------------
+BgcIndicator::BgcIndicator(const QString &indicatorType) :
+HbIndicatorInterface(indicatorType,
+        HbIndicatorInterface::NotificationCategory,
+        InteractionActivated), 
+        mNrOfUpdates(0)
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// BgcIndicator::~BgcIndicator
+// @see bgcindicator.h
+// ----------------------------------------------------------------------------
+BgcIndicator::~BgcIndicator()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// BgcIndicator::handleInteraction
+// @see bgcindicator.h
+// ----------------------------------------------------------------------------
+bool BgcIndicator::handleInteraction(InteractionType type)
+    {
+    bool handled = false;
+    
+    if (type == InteractionActivated) 
+        {
+        TRAPD( err, StartIaupdateL() );
+        if ( err != KErrNone )
+            {
+            // nothing to do 
+            }
+        handled = true;   
+        
+        emit deactivate(); 
+        }
+    return handled;
+    }
+
+// ----------------------------------------------------------------------------
+// BgcIndicator::indicatorData
+// @see bgcindicator.h
+// ----------------------------------------------------------------------------
+QVariant BgcIndicator::indicatorData(int role) const
+{
+    // use iaupdate's translate file
+    // loc: HbTranslator trans("z:\\resource\\iaupdate\\","Text_Map_Swupdate_");
+        
+switch(role)
+    {
+    case PrimaryTextRole: 
+        {
+        QString text("");
+        if ( mNrOfUpdates == 0 )
+            {
+            // First time case
+            // loc: text.append(hbTrId("txt_software_dblist_update_checking"));
+            text.append(QString("Update checking"));
+            }
+        else if ( mNrOfUpdates == 1 )
+            {
+            // one update available
+            // loc: text.append(hbTrId("txt_software_dblist_update_available"));
+            text.append(QString("Update available"));
+            }
+        else
+            {
+            // several updates available
+            // loc: text.append(hbTrId("txt_software_dblist_updates_available"));
+            text.append(QString("Updates available"));
+            }
+        return text;        
+        }
+    case SecondaryTextRole:
+        {
+        QString text("");
+        if ( mNrOfUpdates == 0 )
+            {
+            // First time case
+            // loc: QString text(hbTrId("txt_software_dblist_val_not_activated"));
+            text.append(QString("Not activated"));
+            }
+        else if ( mNrOfUpdates == 1 )
+            {
+            // one update available
+            // loc: QString text(hbTrId("txt_software_dblist_1_val_ln_update"));
+            text.append(QString("%Ln updates").arg(mNrOfUpdates));
+            }
+        else
+            {
+            // several updates available
+            // loc: QString text(hbTrId("txt_software_dblist_1_val_ln_update"));
+            text.append(QString("%%Ln updates").arg(mNrOfUpdates));
+            }
+        return text; 
+        }
+    case DecorationNameRole:
+    case MonoDecorationNameRole:
+        {
+        QString iconName("");
+        return iconName;
+        }
+    default: 
+        return QVariant();      
+    }
+}
+
+// ----------------------------------------------------------------------------
+// BgcIndicator::prepareDisplayName
+// @see bgcindicator.h
+// ----------------------------------------------------------------------------
+bool BgcIndicator::handleClientRequest( RequestType type, 
+        const QVariant &parameter)
+    {
+    bool handled(false);
+    switch (type) {
+        case RequestActivate:
+            {
+            mNrOfUpdates = parameter.toInt();
+            emit dataChanged();
+            handled =  true;
+            }
+            break;
+        case RequestDeactivate:
+            {
+            emit deactivate();
+            }
+            break;
+        default:
+            break;
+    }
+
+    return handled;
+    }
+
+// ----------------------------------------------------------
+// BgcIndicator::StartIaupdateL()
+// ----------------------------------------------------------
+void BgcIndicator::StartIaupdateL() const
+    {
+    
+    const TUint KIADUpdateLauncherUid( 0x2001FE2F );
+    _LIT(KIAUpdateLauncherExe, "iaupdatelauncher.exe" );
+    _LIT8( KRefreshFromNetworkDenied, "1" );
+    
+    RWsSession ws;   
+    User::LeaveIfError( ws.Connect() == KErrNone );
+    TApaTaskList tasklist(ws);   
+    TApaTask task = tasklist.FindApp( TUid::Uid( KIADUpdateLauncherUid ) );
+    if ( task.Exists() )
+        {
+        task.BringToForeground();
+        ws.Close();
+        }
+    else 
+        {
+        ws.Close();
+        RProcess process;
+        CleanupClosePushL( process );
+        User::LeaveIfError( 
+              process.Create( KIAUpdateLauncherExe, KNullDesC ) );
+              
+        CApaCommandLine* commandLine = CApaCommandLine::NewLC();
+        commandLine->SetDocumentNameL( KNullDesC );
+        commandLine->SetExecutableNameL( _L("iaupdatelauncher.exe") );
+        commandLine->SetTailEndL( KRefreshFromNetworkDenied );
+        commandLine->SetProcessEnvironmentL( process );
+        CleanupStack::PopAndDestroy( commandLine );
+       
+        process.Resume();
+        CleanupStack::PopAndDestroy( &process );    
+        }
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/bgcindicatorplugin/src/bgcindicatorplugin.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include "bgcindicatorplugin.h"
+
+#include "bgcindicator.h"
+#include <QtPlugin>
+#include <QVariant>
+
+Q_EXPORT_PLUGIN(BgcIndicatorPlugin)
+
+// ----------------------------------------------------------------------------
+// BgcIndicatorPlugin::BgcIndicatorPlugin
+// @see bgcindicatorplugin.h
+// ----------------------------------------------------------------------------
+BgcIndicatorPlugin::BgcIndicatorPlugin() : mError(0)
+{
+   
+}
+
+// ----------------------------------------------------------------------------
+// BgcIndicatorPlugin::~BgcIndicatorPlugin
+// @see bgcindicatorplugin.h
+// ----------------------------------------------------------------------------
+BgcIndicatorPlugin::~BgcIndicatorPlugin()
+{
+}
+
+// ----------------------------------------------------------------------------
+// BgcIndicatorPlugin::indicatorTypes
+// Return notification types this plugin implements
+// @see bgcindicatorplugin.h
+// ----------------------------------------------------------------------------
+QStringList BgcIndicatorPlugin::indicatorTypes() const
+{
+  QStringList types; 
+  types << "com.nokia.iaupdate.indicatorplugin/1.0";
+  return types;
+}
+
+// ----------------------------------------------------------------------------
+// BgcIndicatorPlugin::accessAllowed
+// Check if client is allowed to use notification widget
+// @see bgcindicatorplugin.h
+// ----------------------------------------------------------------------------
+bool BgcIndicatorPlugin::accessAllowed(const QString &indicatorType,
+        const QVariantMap &securityInfo) const
+{
+    Q_UNUSED(indicatorType)
+    Q_UNUSED(securityInfo)
+
+    // This plugin doesn't perform operations that may compromise security.
+    // All clients are allowed to use.
+    return true;
+}
+
+// ----------------------------------------------------------------------------
+// BgcIndicatorPlugin::createIndicator
+// @see bgcindicatorplugin.h
+// ----------------------------------------------------------------------------
+HbIndicatorInterface* BgcIndicatorPlugin::createIndicator(
+        const QString &indicatorType)
+{
+    HbIndicatorInterface *indicator = new BgcIndicator(indicatorType);
+
+    return indicator;
+}
+
+// ----------------------------------------------------------------------------
+// BgcIndicatorPlugin::error
+// @see bgcindicatorplugin.h
+// ----------------------------------------------------------------------------
+int BgcIndicatorPlugin::error() const
+{
+    return mError;
+}
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/bwins/iaupdateapiu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+EXPORTS
+	??1CIAUpdate@@UAE@XZ @ 1 NONAME ; CIAUpdate::~CIAUpdate(void)
+	??1CIAUpdateParameters@@UAE@XZ @ 2 NONAME ; CIAUpdateParameters::~CIAUpdateParameters(void)
+	??1CIAUpdateResult@@UAE@XZ @ 3 NONAME ; CIAUpdateResult::~CIAUpdateResult(void)
+	?CancelCount@CIAUpdateResult@@QBEHXZ @ 4 NONAME ; int CIAUpdateResult::CancelCount(void) const
+	?CheckUpdates@CIAUpdate@@QAEXABVCIAUpdateParameters@@@Z @ 5 NONAME ; void CIAUpdate::CheckUpdates(class CIAUpdateParameters const &)
+	?CommandLineArguments@CIAUpdateParameters@@QBEABVTDesC8@@XZ @ 6 NONAME ; class TDesC8 const & CIAUpdateParameters::CommandLineArguments(void) const
+	?CommandLineExecutable@CIAUpdateParameters@@QBEABVTDesC16@@XZ @ 7 NONAME ; class TDesC16 const & CIAUpdateParameters::CommandLineExecutable(void) const
+	?FailCount@CIAUpdateResult@@QBEHXZ @ 8 NONAME ; int CIAUpdateResult::FailCount(void) const
+	?NewL@CIAUpdate@@SAPAV1@AAVMIAUpdateObserver@@@Z @ 9 NONAME ; class CIAUpdate * CIAUpdate::NewL(class MIAUpdateObserver &)
+	?NewL@CIAUpdateParameters@@SAPAV1@XZ @ 10 NONAME ; class CIAUpdateParameters * CIAUpdateParameters::NewL(void)
+	?NewL@CIAUpdateResult@@SAPAV1@XZ @ 11 NONAME ; class CIAUpdateResult * CIAUpdateResult::NewL(void)
+	?NewLC@CIAUpdate@@SAPAV1@AAVMIAUpdateObserver@@@Z @ 12 NONAME ; class CIAUpdate * CIAUpdate::NewLC(class MIAUpdateObserver &)
+	?NewLC@CIAUpdateParameters@@SAPAV1@XZ @ 13 NONAME ; class CIAUpdateParameters * CIAUpdateParameters::NewLC(void)
+	?NewLC@CIAUpdateResult@@SAPAV1@XZ @ 14 NONAME ; class CIAUpdateResult * CIAUpdateResult::NewLC(void)
+	?SearchCriteria@CIAUpdateParameters@@QBEABVTDesC16@@XZ @ 15 NONAME ; class TDesC16 const & CIAUpdateParameters::SearchCriteria(void) const
+	?SetCancelCount@CIAUpdateResult@@QAEXH@Z @ 16 NONAME ; void CIAUpdateResult::SetCancelCount(int)
+	?SetCommandLineArgumentsL@CIAUpdateParameters@@QAEXABVTDesC8@@@Z @ 17 NONAME ; void CIAUpdateParameters::SetCommandLineArgumentsL(class TDesC8 const &)
+	?SetCommandLineExecutableL@CIAUpdateParameters@@QAEXABVTDesC16@@@Z @ 18 NONAME ; void CIAUpdateParameters::SetCommandLineExecutableL(class TDesC16 const &)
+	?SetFailCount@CIAUpdateResult@@QAEXH@Z @ 19 NONAME ; void CIAUpdateResult::SetFailCount(int)
+	?SetSearchCriteriaL@CIAUpdateParameters@@QAEXABVTDesC16@@@Z @ 20 NONAME ; void CIAUpdateParameters::SetSearchCriteriaL(class TDesC16 const &)
+	?SetSuccessCount@CIAUpdateResult@@QAEXH@Z @ 21 NONAME ; void CIAUpdateResult::SetSuccessCount(int)
+	?SetUid@CIAUpdateParameters@@QAEXABVTUid@@@Z @ 22 NONAME ; void CIAUpdateParameters::SetUid(class TUid const &)
+	?ShowUpdates@CIAUpdate@@QAEXABVCIAUpdateParameters@@@Z @ 23 NONAME ; void CIAUpdate::ShowUpdates(class CIAUpdateParameters const &)
+	?SuccessCount@CIAUpdateResult@@QBEHXZ @ 24 NONAME ; int CIAUpdateResult::SuccessCount(void) const
+	?Uid@CIAUpdateParameters@@QBEABVTUid@@XZ @ 25 NONAME ; class TUid const & CIAUpdateParameters::Uid(void) const
+	?Update@CIAUpdate@@QAEXABVCIAUpdateParameters@@@Z @ 26 NONAME ; void CIAUpdate::Update(class CIAUpdateParameters const &)
+	?UpdateQuery@CIAUpdate@@QAEXXZ @ 27 NONAME ; void CIAUpdate::UpdateQuery(void)
+	?SetShowProgress@CIAUpdateParameters@@QAEXH@Z @ 28 NONAME ; void CIAUpdateParameters::SetShowProgress(int)
+	?ShowProgress@CIAUpdateParameters@@QBEHXZ @ 29 NONAME ; int CIAUpdateParameters::ShowProgress(void) const
+	?Importance@CIAUpdateParameters@@QBEIXZ @ 30 NONAME ; unsigned int CIAUpdateParameters::Importance(void) const
+	?Refresh@CIAUpdateParameters@@QBEHXZ @ 31 NONAME ; int CIAUpdateParameters::Refresh(void) const
+	?SetImportance@CIAUpdateParameters@@QAEXI@Z @ 32 NONAME ; void CIAUpdateParameters::SetImportance(unsigned int)
+	?SetRefresh@CIAUpdateParameters@@QAEXH@Z @ 33 NONAME ; void CIAUpdateParameters::SetRefresh(int)
+	?SetType@CIAUpdateParameters@@QAEXI@Z @ 34 NONAME ; void CIAUpdateParameters::SetType(unsigned int)
+	?Type@CIAUpdateParameters@@QBEIXZ @ 35 NONAME ; unsigned int CIAUpdateParameters::Type(void) const
+
--- a/iaupdate/IAD/configurator/group/iadctrldcmoadapter.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/configurator/group/iadctrldcmoadapter.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -45,12 +45,6 @@
 LANGUAGE_IDS
 end
 
-START RESOURCE 	iadctrl.rss
-    HEADER
-    TARGETPATH  RESOURCE
-    LANGUAGE_IDS
-END 
-
 LIBRARY 				euser.lib ECom.lib efsrv.lib 
 LIBRARY					FeatMgr.lib 
 LIBRARY 				commonengine.lib               // Series 60 common components library
--- a/iaupdate/IAD/configurator/src/iadctrldcmoadapter.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/configurator/src/iadctrldcmoadapter.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -17,8 +17,6 @@
 
 #include <featmgr.h>
 #include <featurecontrol.h>
-#include <iadctrl.rsg>
-#include <stringresourcereader.h> 
 #include <f32file.h> 
 #include <data_caging_path_literals.hrh>
 #include "iadctrldcmoadapter.h"
@@ -213,15 +211,15 @@
 // CiadCtrlDCMOAdapter::GetLocalizedNameL
 // Returns the localized name of IAD plug-in Adapter.
 // ----------------------------------------------------------------------------------------
-void CiadCtrlDCMOAdapter::GetLocalizedNameL( HBufC*& aLocName )
+void CiadCtrlDCMOAdapter::GetLocalizedNameL( HBufC*& /*aLocName*/ )
 {
 	TFileName myFileName;
     TParse parseObj;
     parseObj.Set( KRuntimeResourceFileName(), &KDC_RESOURCE_FILES_DIR,NULL );
     myFileName = parseObj.FullName();
-	CStringResourceReader* test = CStringResourceReader::NewLC( myFileName );
+/*	CStringResourceReader* test = CStringResourceReader::NewLC( myFileName );
 	TPtrC buf;
 	buf.Set(test->ReadResourceString( R_SWUPDATE_CONFIGURING_TITLE ) ); 
 	aLocName = buf.AllocL() ; 
-	CleanupStack::PopAndDestroy( test );
+	CleanupStack::PopAndDestroy( test );*/
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/eabi/iaupdateapiu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,49 @@
+EXPORTS
+	_ZN15CIAUpdateResult12SetFailCountEi @ 1 NONAME
+	_ZN15CIAUpdateResult14SetCancelCountEi @ 2 NONAME
+	_ZN15CIAUpdateResult15SetSuccessCountEi @ 3 NONAME
+	_ZN15CIAUpdateResult4NewLEv @ 4 NONAME
+	_ZN15CIAUpdateResult5NewLCEv @ 5 NONAME
+	_ZN15CIAUpdateResultD0Ev @ 6 NONAME
+	_ZN15CIAUpdateResultD1Ev @ 7 NONAME
+	_ZN15CIAUpdateResultD2Ev @ 8 NONAME
+	_ZN19CIAUpdateParameters18SetSearchCriteriaLERK7TDesC16 @ 9 NONAME
+	_ZN19CIAUpdateParameters24SetCommandLineArgumentsLERK6TDesC8 @ 10 NONAME
+	_ZN19CIAUpdateParameters25SetCommandLineExecutableLERK7TDesC16 @ 11 NONAME
+	_ZN19CIAUpdateParameters4NewLEv @ 12 NONAME
+	_ZN19CIAUpdateParameters5NewLCEv @ 13 NONAME
+	_ZN19CIAUpdateParameters6SetUidERK4TUid @ 14 NONAME
+	_ZN19CIAUpdateParametersD0Ev @ 15 NONAME
+	_ZN19CIAUpdateParametersD1Ev @ 16 NONAME
+	_ZN19CIAUpdateParametersD2Ev @ 17 NONAME
+	_ZN9CIAUpdate11ShowUpdatesERK19CIAUpdateParameters @ 18 NONAME
+	_ZN9CIAUpdate11UpdateQueryEv @ 19 NONAME
+	_ZN9CIAUpdate12CheckUpdatesERK19CIAUpdateParameters @ 20 NONAME
+	_ZN9CIAUpdate4NewLER17MIAUpdateObserver @ 21 NONAME
+	_ZN9CIAUpdate5NewLCER17MIAUpdateObserver @ 22 NONAME
+	_ZN9CIAUpdate6UpdateERK19CIAUpdateParameters @ 23 NONAME
+	_ZN9CIAUpdateD0Ev @ 24 NONAME
+	_ZN9CIAUpdateD1Ev @ 25 NONAME
+	_ZN9CIAUpdateD2Ev @ 26 NONAME
+	_ZNK15CIAUpdateResult11CancelCountEv @ 27 NONAME
+	_ZNK15CIAUpdateResult12SuccessCountEv @ 28 NONAME
+	_ZNK15CIAUpdateResult9FailCountEv @ 29 NONAME
+	_ZNK19CIAUpdateParameters14SearchCriteriaEv @ 30 NONAME
+	_ZNK19CIAUpdateParameters20CommandLineArgumentsEv @ 31 NONAME
+	_ZNK19CIAUpdateParameters21CommandLineExecutableEv @ 32 NONAME
+	_ZNK19CIAUpdateParameters3UidEv @ 33 NONAME
+	_ZTI15CIAUpdateResult @ 34 NONAME ; #<TI>#
+	_ZTI19CIAUpdateParameters @ 35 NONAME ; #<TI>#
+	_ZTI9CIAUpdate @ 36 NONAME ; #<TI>#
+	_ZTV15CIAUpdateResult @ 37 NONAME ; #<VT>#
+	_ZTV19CIAUpdateParameters @ 38 NONAME ; #<VT>#
+	_ZTV9CIAUpdate @ 39 NONAME ; #<VT>#
+	_ZN19CIAUpdateParameters15SetShowProgressEi @ 40 NONAME
+	_ZNK19CIAUpdateParameters12ShowProgressEv @ 41 NONAME
+	_ZN19CIAUpdateParameters10SetRefreshEi @ 42 NONAME
+	_ZN19CIAUpdateParameters13SetImportanceEj @ 43 NONAME
+	_ZN19CIAUpdateParameters7SetTypeEj @ 44 NONAME
+	_ZNK19CIAUpdateParameters10ImportanceEv @ 45 NONAME
+	_ZNK19CIAUpdateParameters4TypeEv @ 46 NONAME
+	_ZNK19CIAUpdateParameters7RefreshEv @ 47 NONAME
+
--- a/iaupdate/IAD/engine/controller/inc/iaupdatenodeimpl.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/engine/controller/inc/iaupdatenodeimpl.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -137,7 +137,20 @@
      * @see MIAUpdateNode::Depth
      */
     virtual TInt Depth() const;
-
+    
+    virtual void SetUiState( TUIUpdateState aState );
+        
+    virtual TUIUpdateState UiState() const;
+        
+    // for progress bar in UI
+    virtual void SetProgress( TInt aProgress );
+        
+    virtual TInt Progress() const; 
+        
+    virtual void SetTotal( TInt aTotal );
+        
+    virtual TInt Total() const; 
+               
     /**
      * @see MIAUpdateNode:::NodeType
      */
@@ -323,7 +336,10 @@
     TDependencyCheckStatus              iDependencyCheckStatus;
     TInt                                iLeafDistance;
     TInt                                iDepth;
-
+    TUIUpdateState                      iUiUpdateState;
+    TInt                                iProgress;
+    TInt                                iTotal;
+    
     // These arrays do not own the nodes.
     RPointerArray< CIAUpdateNode >      iDependants;
     RPointerArray< CIAUpdateNode >      iExcessDependencyNodes;
--- a/iaupdate/IAD/engine/controller/src/iaupdateinstalloperation.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/engine/controller/src/iaupdateinstalloperation.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -205,8 +205,10 @@
         {
         // Install interface was available.
         // So, start installing with silent install operation.
-        SwiUI::TInstallOptions options(
-            IAUpdateUtils::SilentInstallOptionsL( Node() ) );
+        // Get silent install parameters 
+        Usif::COpaqueNamedParams * options = Usif::COpaqueNamedParams::NewLC();
+
+        IAUpdateUtils::UsifSilentInstallOptionsL ( options );
         
         operation = install->SilentInstallL( *this, options );
 
@@ -216,7 +218,7 @@
             IAUPDATE_TRACE("[IAUPDATE] ERROR Could not create the operation.");
             User::Leave( KErrGeneral );
             }
-        
+        CleanupStack::Pop( options );
         CleanupStack::PopAndDestroy( install );
         }
     else
--- a/iaupdate/IAD/engine/controller/src/iaupdatenodeimpl.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/engine/controller/src/iaupdatenodeimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -367,6 +367,67 @@
 
 
 // ---------------------------------------------------------------------------
+// CIAUpdateNode::SetUiState()
+// 
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateNode::SetUiState( MIAUpdateNode::TUIUpdateState aState )
+    {
+    iUiUpdateState = aState;
+    }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateNode::UiState()
+// 
+// ---------------------------------------------------------------------------
+//
+MIAUpdateNode::TUIUpdateState CIAUpdateNode::UiState() const
+    {
+    return iUiUpdateState;
+    }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateNode::SetProgress
+// 
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateNode::SetProgress( TInt aProgress )
+    {
+    iProgress = aProgress; 
+    }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateNode::Progress
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CIAUpdateNode::Progress() const
+    {
+    return iProgress;
+    }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateNode::SetTotal
+// 
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateNode::SetTotal( TInt aTotal )
+    {
+    iTotal = aTotal; 
+    }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateNode::Total
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CIAUpdateNode::Total() const
+    {    
+    return iTotal;
+    }
+    
+
+// ---------------------------------------------------------------------------
 // CIAUpdateNode::NodeType
 // 
 // ---------------------------------------------------------------------------
--- a/iaupdate/IAD/engine/controller/src/iaupdateutils.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/engine/controller/src/iaupdateutils.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -39,7 +39,8 @@
 #include <ncdpurchaseoption.h>
 
 #include <catalogsutils.h>
-#include <widgetregistryclient.h>
+//#include <WidgetRegistryClient.h>
+#include <usif/scr/scr.h>
 
 //Constants
 const TText KVersionSeparator( '.' );
@@ -303,6 +304,47 @@
 
 EXPORT_C TBool IAUpdateUtils::IsWidgetInstalledL(const TDesC& aIdentifier, TIAUpdateVersion& aVersion )
     {
+    
+    TBool retVal = EFalse;
+    
+    // Connect to registry
+    Usif::RSoftwareComponentRegistry scrSession;  
+    CleanupClosePushL( scrSession );
+    User::LeaveIfError( scrSession.Connect());
+       
+    // // Get widget component id by identifier
+    Usif::TComponentId compId = 0;
+    TRAPD( err, compId = 
+           scrSession.GetComponentIdL( aIdentifier, Usif::KSoftwareTypeWidget ));
+    
+    if ( err == KErrNotFound )
+        {
+        retVal = EFalse;
+        }
+    else if  (err != KErrNone )
+        {
+        User::Leave( err );
+        }
+    else
+        {
+        // Widget found
+        retVal = ETrue;
+        
+        // Get entry 
+        Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+        retVal = scrSession.GetComponentL(compId, *entry);
+        
+        // Convert version
+        DesToVersionL ( entry->Version(), aVersion.iMajor, aVersion.iMinor, aVersion.iBuild  );
+    
+        CleanupStack::PopAndDestroy(entry);
+        }
+    
+    CleanupStack::PopAndDestroy( &scrSession ); 
+    
+    return retVal;
+    
+    /*
     RWidgetRegistryClientSession widgetRegistry;
 
     User::LeaveIfError( widgetRegistry.Connect() );
@@ -339,6 +381,7 @@
     CleanupStack::PopAndDestroy( &widgetInfoArr );
     CleanupStack::PopAndDestroy( &widgetRegistry);
     return EFalse;
+    */
       
      
     }
@@ -461,79 +504,60 @@
     return exeFound;
     }
 
-
 // ---------------------------------------------------------------------------
-// IAUpdateUtils::SilentInstallOptionsL
+// IAUpdateUtils::UsifSilentInstallOptionsL
 // 
 // ---------------------------------------------------------------------------
-//
-SwiUI::TInstallOptions IAUpdateUtils::SilentInstallOptionsL(
-    const CIAUpdateBaseNode& aNode )
+
+void  IAUpdateUtils::UsifSilentInstallOptionsL( 
+        Usif::COpaqueNamedParams * aOptions )
     {
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::SilentInstallOptionsL() begin");
-    SwiUI::TInstallOptions options;
+
+    aOptions->AddIntL( Usif::KSifInParam_InstallSilently, ETrue );
 
-    // Upgrades are allowed        
-    options.iUpgrade = SwiUI::EPolicyAllowed;
-
+    // Upgrades are allowed 
+    aOptions->AddIntL( Usif::KSifInParam_AllowUpgrade, Usif::EAllowed );
+    
     // Install all if optional packets exist.
-    options.iOptionalItems = SwiUI::EPolicyAllowed;
-
+    aOptions->AddIntL( Usif::KSifInParam_InstallOptionalItems, Usif::EAllowed );
+    
     // Prevent online cert revocation check.
-    options.iOCSP = SwiUI::EPolicyNotAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_PerformOCSP, Usif::ENotAllowed );
     
     // See iOCSP setting above
-    options.iIgnoreOCSPWarnings = SwiUI::EPolicyAllowed;
-
+    aOptions->AddIntL( Usif::KSifInParam_IgnoreOCSPWarnings, Usif::EAllowed );
+    
     // Do not allow installation of uncertified packages.
-    options.iUntrusted = SwiUI::EPolicyNotAllowed;
-
-    // If filetexts are included in SIS package. Then, show them.
-    options.iPackageInfo = SwiUI::EPolicyUserConfirm;
+    aOptions->AddIntL( Usif::KSifInParam_AllowUntrusted, Usif::ENotAllowed );
+    
+    // If filetexts are included in SIS package, show them.
+    aOptions->AddIntL( Usif::KSifInParam_PackageInfo, Usif::EAllowed );
     
     // Automatically grant user capabilities.
-    // See also iUntrusted above.
-    options.iCapabilities = SwiUI::EPolicyAllowed;
-
+    // See also KSifInParam_AllowUntrusted above.
+    aOptions->AddIntL( Usif::KSifInParam_GrantCapabilities, Usif::EAllowed );
+    
     // Open application will be closed.
-    options.iKillApp = SwiUI::EPolicyAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_AllowAppShutdown, Usif::EAllowed );
     
     // Files can be overwritten.
-    options.iOverwrite = SwiUI::EPolicyAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_AllowOverwrite, Usif::EAllowed  );
+    
+    // Incompatible allowed
+    aOptions->AddIntL( Usif::KSifInParam_AllowIncompatible, Usif::EAllowed  );
     
     // This only affects Java applications.
-    options.iDownload = SwiUI::EPolicyAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_AllowDownload, Usif::EAllowed  );
     
     // Where to save.
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::SilentInstallOptionsL() before DriveToInstallL");
-    TDriveUnit driveUnit;
-    if ( aNode.Mime().Compare( IAUpdateProtocolConsts::KMimeWidget ) == 0 )
-        {
-        driveUnit = IAUpdateUtils::DriveToInstallWidgetL( aNode.Identifier() );
-        }
-    else
-        {
-        driveUnit = IAUpdateUtils::DriveToInstallL( aNode.Uid(), aNode.OwnContentSizeL() );
-        }
-     IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::SilentInstallOptionsL() after DriveToInstallL");
-    
-    TDriveName driveName = driveUnit.Name();
-    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateUtils::SilentInstallOptionsL() driveName: %S", &driveName );
-    options.iDrive = driveName[0];
+    //aOptions->AddIntL( Usif::KSifInParam_Drive, EDriveC );
     
     // Choose the phone language.
-    options.iLang = User::Language();
-    
-    // If language is asked, then use the current phone language.
-    options.iUsePhoneLang = ETrue;
+    TLanguage lang = User::Language();
+    //aOptions->AddIntL( Usif::KSifInParam_Languages, lang ); // User::Language() );
     
-    // Does not affect SISX. This is for Java.
-    options.iUpgradeData = SwiUI::EPolicyAllowed;
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::SilentInstallOptionsL() end");
-    return options;
+    //aOptions->AddIntL( Usif::KSifInParam_Drive, IAUpdateUtils::DriveToInstallL( aUid, aSize ) );
     }
-
-
 // -----------------------------------------------------------------------------
 // IAUpdateUtils::InstalledDriveL
 // 
@@ -653,6 +677,11 @@
                                            TDriveUnit& aLocationDrive )
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::InstalledDriveWidgetL() begin");
+    aLocationDrive = EDriveC;
+    
+    //HLa: Widget registry remove
+    
+    /*
     TFileName widgetPath;
     aWidgetRegistry.GetWidgetPath( aUid, widgetPath );
     aLocationDrive = widgetPath.Mid( 0, 2 );
@@ -674,6 +703,8 @@
             IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::InstalledDriveWidgetL() Physically removable drive not present, install to C:");
             }
         }
+    */
+    
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::InstalledDriveWidgetL() begin");
     }
 
@@ -762,7 +793,12 @@
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::DriveToInstallWidgetL() begin");
     IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateUtils::DriveToInstallWidgetL() identifier: %S", &aIdentifier );
+    
+
     TDriveUnit targetDriveUnit( EDriveC );
+    
+    //HLa: Widget registry remove
+    /*
     RWidgetRegistryClientSession widgetRegistry;
 
     User::LeaveIfError( widgetRegistry.Connect() );
@@ -796,8 +832,11 @@
         
     CleanupStack::PopAndDestroy( &widgetInfoArr );
     CleanupStack::PopAndDestroy( &widgetRegistry);
+    */
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::DriveToInstallWidgetL() end");
+
     return targetDriveUnit;
+
     }
 
 
--- a/iaupdate/IAD/engine/group/iaupdateengine.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/engine/group/iaupdateengine.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -114,7 +114,7 @@
 LIBRARY         platformenv.lib
 LIBRARY         platformver.lib     // System version info
 LIBRARY         etel3rdparty.lib
-LIBRARY         swinstcli.lib
+//LIBRARY         swinstcli.lib
 LIBRARY         apmime.lib
 LIBRARY         ecom.lib            // For the NCD Engine ECOM session closing.
 LIBRARY         sysversioninfo.lib
@@ -125,7 +125,9 @@
 LIBRARY         iaupdaterfiles.lib
 
 // widget registry API library
-LIBRARY         widgetregistryclient.lib
+LIBRARY         sif.lib // SIF installer
+LIBRARY         scrclient.lib  //Registry client
+//LIBRARY         widgetregistryclient.lib
 
 // NCD Engine
 LIBRARY         ncdengine_20019119.lib
--- a/iaupdate/IAD/engine/inc/iaupdatenode.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/engine/inc/iaupdatenode.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -78,6 +78,20 @@
        
         };
 
+    /**
+    * For UI during update process
+    **/
+    
+    enum TUIUpdateState
+        {
+        ENormal,
+        EDownloading,
+        EInstalling,
+        EUpdated,
+        EFailed,
+        EDownloaded        
+        };
+    
 
     /**
      * @return TPackageType The type of this node content.
@@ -169,6 +183,20 @@
      */
     virtual TInt Depth() const = 0;
 
+    virtual void SetUiState( TUIUpdateState aState ) = 0;
+    
+    virtual TUIUpdateState UiState() const = 0;
+    
+    // for progress bar in UI
+    virtual void SetProgress( TInt aProgress ) = 0;
+    
+    virtual TInt Progress() const = 0; 
+    
+    virtual void SetTotal( TInt aTotal ) = 0;
+    
+    virtual TInt Total() const = 0; 
+    
+       
 
 protected:
 
--- a/iaupdate/IAD/engine/inc/iaupdateutils.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/engine/inc/iaupdateutils.h	Tue Aug 31 15:21:33 2010 +0300
@@ -25,6 +25,7 @@
 
 // For silent installation
 #include <SWInstDefs.h>
+#include <usif/sif/sif.h>
 #include <swi/sisregistryentry.h>
 
 class TIAUpdateVersion;
@@ -128,7 +129,13 @@
 SwiUI::TInstallOptions SilentInstallOptionsL( const CIAUpdateBaseNode& aNode );
                                                      
 
-
+/**
+ * Creates options for silent install.
+ * Uses DriveToInstallL to etermine target drive to install.
+ * 
+ * @param aOptions  Silent install options
+ */
+void  UsifSilentInstallOptionsL( Usif::COpaqueNamedParams * aOptions );
 
 /**
  * Finds drive where a package is currently installed
--- a/iaupdate/IAD/firmwareupdate/group/iaupdatefwupdate.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/firmwareupdate/group/iaupdatefwupdate.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -48,7 +48,6 @@
 
 
 LIBRARY         euser.lib
-LIBRARY         avkon.lib 
 LIBRARY         centralrepository.lib
 LIBRARY         SyncMLClientAPI.lib
 LIBRARY         fotaengine.lib
@@ -56,7 +55,6 @@
 LIBRARY		sysutil.lib
 LIBRARY         nsmltransporthandler.lib
 LIBRARY         cmmanager.lib
-LIBRARY         commonengine.lib
 DEBUGLIBRARY 	flogger.lib
 
 SMPSAFE
--- a/iaupdate/IAD/firmwareupdate/inc/iaupdatefwfotamodel.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/firmwareupdate/inc/iaupdatefwfotamodel.h	Tue Aug 31 15:21:33 2010 +0300
@@ -23,6 +23,7 @@
 
 //  INCLUDES
 #include <fotaengine.h>
+#include <badesca.h>
 
 // FORWARD DECLARATIONS
 
@@ -51,16 +52,6 @@
     public: // New functions
         
         /**
-        * Retrieves the human readable name of the profile.
-        * @since Series 60 3.1
-        * @param aProfileId Profile identifier
-        * @param aProfileId Human readable name of the profile, or KNullDesC if not found.
-        * @return None
-        */
-        void GetProfileNameL( const TInt aProfileId,
-                                    HBufC* aProfileName ) const;
-
-        /**
         * Retrieves the default fota profile identifier from
         * the central repository.
         * @since Series 60 3.1
--- a/iaupdate/IAD/firmwareupdate/inc/iaupdatefwsynchandler.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/firmwareupdate/inc/iaupdatefwsynchandler.h	Tue Aug 31 15:21:33 2010 +0300
@@ -22,9 +22,8 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <AknProgressDialog.h>
 #include <SyncMLObservers.h>
-#include <cmmanagerext.h>
+#include <cmmanager.h>
 
 #include "iaupdatefwsyncutil.h"
 #include "iaupdatefwsyncprofile.h"
@@ -47,9 +46,7 @@
 NONSHARABLE_CLASS (CIAUpdateFWSyncHandler) : public CBase, 
 						public MIAUpdateFWActiveCallerObserver,
 						public MSyncMLEventObserver,
-						public MSyncMLProgressObserver,
-						public MProgressDialogCallback
-						
+						public MSyncMLProgressObserver
 	{
     public:
         /**
@@ -275,8 +272,8 @@
     private:
         
         TUint32 SelectConnectionMethodL();
-        TUint32 GetBestIAPInInternetSNAPL( RCmManagerExt& aCmManagerExt  );
-        TUint32 GetBestIAPInThisSNAPL( RCmManagerExt& aCmManagerExt, TUint32 aSNAPID  );
+        TUint32 GetBestIAPInInternetSNAPL( RCmManager& aCmManager );
+        TUint32 GetBestIAPInThisSNAPL( RCmManager& aCmManager, TUint32 aSNAPID  );
 
     private:
 		// session with sync server
--- a/iaupdate/IAD/firmwareupdate/src/iaupdatefwfotamodel.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/firmwareupdate/src/iaupdatefwfotamodel.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -57,37 +57,6 @@
 
 
 // -----------------------------------------------------------------------------
-// CIAUpdateFWFotaModel::GetProfileName
-// Changes aProfileName to KNullDesC if the profile identifier is
-// not found.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFWFotaModel::GetProfileNameL( const TInt   aProfileId,
-                                              HBufC* aProfileName ) const
-    {
-    FLOG( "[IAUPDATEFW] CIAUpdateFWFotaModel::GetProfileNameL() - not implemented" );
-
-/*KNST
-    TInt index( 0 );
-    aProfileName->Des().Copy( KNullDesC );
-    
-    iDocument->RefreshProfileListL( ETrue ); // Include hidden profile
-    CArrayFixFlat<TNSmlDMProfileItem>* profileList = iDocument->ProfileList( index );
-    
-    for ( index = 0; index < profileList->Count(); index++ )
-        {
-        if ( ( *profileList )[index].iProfileId == aProfileId )
-            {
-            aProfileName->Des().Copy( ( *profileList )[index].iProfileName );
-            }
-        }
-*/
-    FTRACE( FPrint( _L(
-        "[IAUPDATEFW] CIAUpdateFWFotaModel::GetProfileNameL(): aProfileId = %d, ProfileName = \"%S\"" ),
-         aProfileId, aProfileName ) );
-    }
-
-// -----------------------------------------------------------------------------
 // CIAUpdateFWFotaModel::DefaultFotaProfileIdL
 // -----------------------------------------------------------------------------
 //
--- a/iaupdate/IAD/firmwareupdate/src/iaupdatefwsynchandler.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/firmwareupdate/src/iaupdatefwsynchandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -19,27 +19,24 @@
 
 
 // INCLUDES
-#include <aknnotewrappers.h>
-#include <AknWaitDialog.h>
 #include <StringLoader.h>
 #include <e32property.h>
 #include <data_caging_path_literals.hrh>  // for resource and bitmap directories
 #include <SyncMLErr.h>      // sync error codes
-#include <iaupdate.rsg>
-#include <AknsUtils.h>
 #include <DevManInternalCRKeys.h>
 #include <centralrepository.h>
 #include <rconnmon.h>
 #include <es_enum.h>
 
-#include <cmconnectionmethodext.h>
+#include <cmconnectionmethod.h>
 #include <cmconnectionmethoddef.h>
 #include <cmpluginpacketdatadef.h>
-#include <cmconnectionmethoddef.h>
-#include <cmconnectionmethodext.h>
-#include <cmdestinationext.h>
+
+#include <cmdestination.h>
 #include <cmmanagerdef.h>
 
+#include <uikon.hrh>
+
 #include "iaupdateconnectionmethod.h"
 #include "iaupdateprivatecrkeys.h"
 #include "iaupdatefwfotamodel.h"
@@ -82,11 +79,11 @@
 //
 CIAUpdateFWSyncHandler::~CIAUpdateFWSyncHandler()
     {
-    if ( iWaitDialog )
+    /*if ( iWaitDialog )
         {
         TRAP_IGNORE( iWaitDialog->ProcessFinishedL() );
         iWaitDialog = NULL;
-        }
+        }*/
     
 	delete iState;
 	delete iActiveCaller;
@@ -334,12 +331,12 @@
 	iSyncRunning = EFalse;
 	iSyncError = aError;
 
-    if ( iWaitDialog )
+    /*if ( iWaitDialog )
         {
         
         iWaitDialog->ProcessFinishedL();
         iWaitDialog = NULL;
-        }
+        }*/
 
 	iUseFotaProgressNote = EFalse;
     iSyncJob.Close();
@@ -429,16 +426,16 @@
     CleanupStack::PopAndDestroy( cenrep ); 
     cenrep = NULL;
 
-    RCmManagerExt cmManagerExt;
-    cmManagerExt.OpenL();
-    CleanupClosePushL( cmManagerExt );
+    RCmManager cmManager;
+    cmManager.OpenL();
+    CleanupClosePushL( cmManager );
     
     if ( connMethodId == -1 )
         {
         //check what is the default connection by users     
         
         TCmDefConnValue DCSetting;
-        cmManagerExt.ReadDefConnL( DCSetting );
+        cmManager.ReadDefConnL( DCSetting );
        
         
         switch ( DCSetting.iType )
@@ -447,13 +444,13 @@
             case ECmDefConnAskOnce:
                 {
                 //go with the best IAP under internet snap
-                connectionMethodId = GetBestIAPInInternetSNAPL( cmManagerExt );
+                connectionMethodId = GetBestIAPInInternetSNAPL( cmManager );
                 break;
                 }
             case ECmDefConnDestination:
                 {
                 //go with the best IAP under this snap
-                connectionMethodId = GetBestIAPInThisSNAPL( cmManagerExt, DCSetting.iId );
+                connectionMethodId = GetBestIAPInThisSNAPL( cmManager, DCSetting.iId );
                 break;
                 }
             case ECmDefConnConnectionMethod:
@@ -467,16 +464,16 @@
     else if ( connMethodId == 0 )
         {
         //no choice from user, we go with the best IAP under Internent SNAP
-        connectionMethodId = GetBestIAPInInternetSNAPL( cmManagerExt );
+        connectionMethodId = GetBestIAPInInternetSNAPL( cmManager );
         }
     else
         {
 
         // It was some SNAP value
-        connectionMethodId = GetBestIAPInThisSNAPL( cmManagerExt, connMethodId );
+        connectionMethodId = GetBestIAPInThisSNAPL( cmManager, connMethodId );
         }
 
-    CleanupStack::PopAndDestroy( &cmManagerExt ); 
+    CleanupStack::PopAndDestroy( &cmManager ); 
     
     return connectionMethodId;
               
@@ -487,15 +484,15 @@
 // CIAUpdateFWSyncHandler::GetBestIAPInInternetSNAPL
 // -----------------------------------------------------------------------------
 //
-TUint32 CIAUpdateFWSyncHandler::GetBestIAPInInternetSNAPL( RCmManagerExt& aCmManagerExt  )
+TUint32 CIAUpdateFWSyncHandler::GetBestIAPInInternetSNAPL( RCmManager& aCmManager )
     {
     //select IAP from Internet SNAP
     RArray<TUint32> destIdArray;
-    aCmManagerExt.AllDestinationsL( destIdArray );
+    aCmManager.AllDestinationsL( destIdArray );
     TUint32 InternetSNAPID = 0;
     for ( TInt i = 0; i< destIdArray.Count(); i++ )
         {
-        RCmDestinationExt dest = aCmManagerExt.DestinationL( destIdArray[i] );
+        RCmDestination dest = aCmManager.DestinationL( destIdArray[i] );
         CleanupClosePushL( dest );
                                      
         if ( dest.MetadataL( CMManager::ESnapMetadataInternet ) )
@@ -508,7 +505,7 @@
          }
     destIdArray.Reset();
     
-    return GetBestIAPInThisSNAPL( aCmManagerExt, InternetSNAPID );
+    return GetBestIAPInThisSNAPL( aCmManager, InternetSNAPID );
     }
 
 
@@ -517,7 +514,7 @@
 // CIAUpdateFWSyncHandler::GetBestIAPInThisSNAPL
 // -----------------------------------------------------------------------------
 //
-TUint32 CIAUpdateFWSyncHandler::GetBestIAPInThisSNAPL( RCmManagerExt& aCmManagerExt, TUint32 aSNAPID  )
+TUint32 CIAUpdateFWSyncHandler::GetBestIAPInThisSNAPL( RCmManager& aCmManager, TUint32 aSNAPID  )
     {
     //get all usable IAPs
     TConnMonIapInfoBuf iapInfo;
@@ -533,13 +530,13 @@
     
     CleanupStack::PopAndDestroy( &connMon ); 
     
-    RCmDestinationExt dest = aCmManagerExt.DestinationL( aSNAPID );
+    RCmDestination dest = aCmManager.DestinationL( aSNAPID );
     CleanupClosePushL( dest );
     
     // Check whether the SNAP contains any IAP.
     for  (TInt i = 0; i < dest.ConnectionMethodCount(); i++ )
         {
-        RCmConnectionMethodExt cm =  dest.ConnectionMethodL( i );
+        RCmConnectionMethod cm =  dest.ConnectionMethodL( i );
         CleanupClosePushL( cm );
         
         TUint32 iapid= cm.GetIntAttributeL( CMManager::ECmIapId );
@@ -716,10 +713,10 @@
 //
 void CIAUpdateFWSyncHandler::ShowProgressDialogL( )
 	{
-        iWaitDialog = new ( ELeave ) CAknWaitDialog(
-            ( REINTERPRET_CAST( CEikDialog**, &iWaitDialog ) ) );
-        iWaitDialog->ExecuteLD( R_FOTA_CHECK_WAIT_NOTE );
-        iWaitDialog->SetCallback( this );
+        //iWaitDialog = new ( ELeave ) CAknWaitDialog(
+        //    ( REINTERPRET_CAST( CEikDialog**, &iWaitDialog ) ) );
+        //iWaitDialog->ExecuteLD( R_FOTA_CHECK_WAIT_NOTE );
+        //iWaitDialog->SetCallback( this );
 	}
 
 // -----------------------------------------------------------------------------
@@ -728,11 +725,11 @@
 //
 void CIAUpdateFWSyncHandler::HideProgressDialogL()
     {
-    if ( iWaitDialog )
+    /*if ( iWaitDialog )
         {
         iWaitDialog->ProcessFinishedL();
         iWaitDialog = NULL;
-        }
+        }*/
     }
 
 // -----------------------------------------------------------------------------
--- a/iaupdate/IAD/firmwareupdate/src/iaupdatefwsyncutil.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/firmwareupdate/src/iaupdatefwsyncutil.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -20,11 +20,8 @@
 
 // INCLUDES
 #include <SyncMLTransportProperties.h>
-#include <eikenv.h>
-#include <bautils.h>
 #include <collate.h>
-#include <StringLoader.h>
-#include <avkon.rsg>
+
 
 #include "iaupdatefwsyncutil.h"
 #include "iaupdatefwdebug.h"
@@ -156,10 +153,10 @@
 		FLOG( "[OMADM] TUtil::SyncTimeLC time" );
 		
 		TBuf<KBufSize> timeFormat;
-		HBufC* buf = StringLoader::LoadLC( R_QTN_TIME_USUAL_WITH_ZERO );
+		/*HBufC* buf = StringLoader::LoadLC( R_QTN_TIME_USUAL_WITH_ZERO );
 		TUtil::StrCopy( timeFormat, *buf );
 		CleanupStack::PopAndDestroy( buf );
-		homeTime.FormatL( ptr, timeFormat );
+		homeTime.FormatL( ptr, timeFormat );*/
 		
 		FLOG( "[OMADM] TUtil::SyncTimeLC time done" );
 		}
@@ -168,10 +165,10 @@
 		FLOG( "[OMADM] TUtil::SyncTimeLC date" );
 		
 		TBuf<KBufSize> dateFormat;
-        HBufC* buf = StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO );
+        /*HBufC* buf = StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO );
         TUtil::StrCopy( dateFormat, *buf );
         CleanupStack::PopAndDestroy( buf );
-		homeTime.FormatL(ptr, dateFormat);
+		homeTime.FormatL(ptr, dateFormat);*/
 		
 		FLOG( "[OMADM] TUtil::SyncTimeLC date done" );
 		}
@@ -238,12 +235,12 @@
 // TUtil::GetDateTextL
 // -----------------------------------------------------------------------------
 //
-void TUtil::GetDateTextL(TDes& aText, TTime aDateTime)
+void TUtil::GetDateTextL(TDes& /*aText*/, TTime aDateTime)
 	{
 	TTime homeTime = ConvertUniversalToHomeTime( aDateTime );
-	HBufC* hBuf = StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO );
-    homeTime.FormatL( aText, *hBuf );
-    CleanupStack::PopAndDestroy( hBuf );
+	//HBufC* hBuf = StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO );
+    //homeTime.FormatL( aText, *hBuf );
+    //CleanupStack::PopAndDestroy( hBuf );
 	}
 
 
@@ -251,12 +248,12 @@
 // TUtil::GetTimeTextL
 // -----------------------------------------------------------------------------
 //
-void TUtil::GetTimeTextL( TDes& aText, TTime aDateTime )
+void TUtil::GetTimeTextL( TDes& /*aText*/, TTime aDateTime )
 	{
 	TTime homeTime = ConvertUniversalToHomeTime( aDateTime );
-	HBufC* hBuf = StringLoader::LoadLC( R_QTN_TIME_USUAL_WITH_ZERO );
-    homeTime.FormatL( aText, *hBuf );
-    CleanupStack::PopAndDestroy( hBuf );
+	//HBufC* hBuf = StringLoader::LoadLC( R_QTN_TIME_USUAL_WITH_ZERO );
+    //homeTime.FormatL( aText, *hBuf );
+    //CleanupStack::PopAndDestroy( hBuf );
 	}
 
 
--- a/iaupdate/IAD/firmwareupdate/src/iaupdatefwupdatehandler.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/firmwareupdate/src/iaupdatefwupdatehandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,12 +15,9 @@
 *
 */
 
-
-#include <iaupdate.rsg>
-#include <StringLoader.h> 
-#include <aknmessagequerydialog.h>
-#include <aknnotewrappers.h>
+#include <e32base.h>
 #include <DevManInternalCRKeys.h>
+#include <centralrepository.h>
 #include <e32property.h>
 
 #include "iaupdatefwupdatehandler.h"
@@ -139,24 +136,7 @@
         {
         case ENSU:
             {          
-            HBufC* text1 = StringLoader::LoadLC( R_IAUPDATE_INFO_NSU_1 );  
-            HBufC* text2 = StringLoader::LoadLC( R_IAUPDATE_INFO_NSU_2 );
-            
-            HBufC* text = HBufC::NewLC( text1->Length() +
-                                        text2->Length() );
-                
-            text->Des() += *text1;
-            text->Des() += *text2;
-
-            HBufC* heading = StringLoader::LoadLC( R_IAUPDATE_NEW_SW_TITLE );
-     
-            ShowDialogL( *text, *heading );
-            
-            CleanupStack::PopAndDestroy( heading ); //text, heading
-            CleanupStack::PopAndDestroy( text );
-            CleanupStack::PopAndDestroy( text2 );
-            CleanupStack::PopAndDestroy( text1 );
-          
+                      
             break;
             }
         case EFOTA:
@@ -175,7 +155,7 @@
                 if ( ( fotamodelstate != RFotaEngineSession::EDownloadComplete ) && ( fotamodelstate != RFotaEngineSession::EStartingUpdate ) )
                     {
 		                //if download is suspended, try to resume it.
-		                if ( fotamodelstate == RFotaEngineSession::EDownloadProgressingWithResume)
+		                if ( fotamodelstate == RFotaEngineSession::EDownloadProgressing)
 		                    {
 		                    TInt result = iFotaModel->TryResumeFwUpdDownload();
 						            FLOG_NUM( "[IAUPDATEFW] TryResumeFwUpdDownload result  = %d", result );   
@@ -230,16 +210,9 @@
 //  CIAUpdateFWUpdateHandler::ShowDialogL()
 // -----------------------------------------------------------------------------
 //
-void CIAUpdateFWUpdateHandler::ShowDialogL(TDesC& aText, TDesC& aHeading )
+void CIAUpdateFWUpdateHandler::ShowDialogL(TDesC& /*aText*/, TDesC& /*aHeading*/ )
     {  
-    CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( aText );
-
-    dlg->PrepareLC( R_IAUPDATE_MESSAGE_QUERY );
-
-    CAknPopupHeadingPane* headingPane = dlg->Heading();
-    headingPane->SetTextL( aHeading );
-	    
-    TInt ret = dlg->RunLD();
+    
     }
         
 
@@ -285,12 +258,12 @@
     if (error != KErrNone)
         {
 
-        CAknInformationNote* queryDialog = new (ELeave) CAknInformationNote;
+        //CAknInformationNote* queryDialog = new (ELeave) CAknInformationNote;
         
-        HBufC* error = HBufC::NewL(20);
-                  TPtr ptrerror = error->Des();
-                  ptrerror.Copy(_L("sync problem")); 
-        queryDialog->ExecuteLD( *error  );
+        //HBufC* error = HBufC::NewL(20);
+        //          TPtr ptrerror = error->Des();
+        //          ptrerror.Copy(_L("sync problem")); 
+        //queryDialog->ExecuteLD( *error  );
         }
     }
 
--- a/iaupdate/IAD/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -22,9 +22,6 @@
 PRJ_PLATFORMS
 DEFAULT
 
-PRJ_EXPORTS
-
-../loc/iaupdate.loc  MW_LAYER_LOC_EXPORT_PATH(iaupdate.loc)
 
 PRJ_MMPFILES
 
@@ -34,28 +31,14 @@
 // IA Engine
 #include "../engine/group/bld.inf"
 
-// IA Tools
-#include "../tools/group/bld.inf"
-
-// IA API
-// Compile API before UI because UI imports the IA API library
-#include "../api/group/bld.inf"
-
 // firmware update 
-// Compile before UI and bgchecker because they import the library
 #include "../firmwareupdate/group/bld.inf"
 
-// IA UI
-#include "../ui/group/bld.inf"
-
 // IA Enabler
 #include "../enabler/group/bld.inf"
 
 // background checker
 #include "../backgroundchecker/group/bld.inf"
 
-// launcher
-#include "../launcher/group/bld.inf"
-
 // configurator
 #include "../configurator/group/bld.inf"
--- a/iaupdate/IAD/launcher/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Project definition file of iaupdatelauncher.exe
-*
-*/
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-
-PRJ_EXTENSIONS
-
-START EXTENSION s60/mifconv
-  OPTION TARGETFILE iaupdatelauncher_aif.mif
-  OPTION SOURCES -c8,8 qgn_menu_swupdate
-END
-
-
-PRJ_MMPFILES
-
-iaupdatelauncher.mmp
-
--- a/iaupdate/IAD/launcher/group/iaupdatelauncher.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Project definition file of iaupdatelauncher.exe
-*
-*/
-
-
-#include <platform_paths.hrh>
-#include <data_caging_paths.hrh>
-#include "../inc/iaupdatelauncheruids.h"
-
-CAPABILITY        CAP_APPLICATION
-VENDORID          VID_DEFAULT
-
-TARGET            iaupdatelauncher.exe
-TARGETTYPE        exe
-UID		          0x100039CE KIAUpdateLauncherUid
-
-PAGED
-
-MW_LAYER_SYSTEMINCLUDE
-
-USERINCLUDE       ../inc
-USERINCLUDE       ../../engine/inc
-USERINCLUDE       ../../ui/inc
-USERINCLUDE       ../../updater/inc
-USERINCLUDE       ../../api/client/inc
-USERINCLUDE       ../../loc
-
-SOURCEPATH        ../src
-SOURCE            iaupdatelauncher.cpp
-SOURCE            iaupdatelauncherapplication.cpp
-SOURCE            iaupdatelauncherappui.cpp
-SOURCE            iaupdatelauncherdocument.cpp
-SOURCE            iaupdatelaunchermanager.cpp
-SOURCE            iaupdatelauncherclient.cpp
-
-LIBRARY           euser.lib
-LIBRARY           apparc.lib
-LIBRARY           cone.lib
-LIBRARY           eikcore.lib
-LIBRARY           avkon.lib
-DEBUGLIBRARY      flogger.lib
-
-// Path for resources
-SOURCEPATH .
-
-START RESOURCE    iaupdatelauncher.rss
-HEADER
-TARGETPATH        APP_RESOURCE_DIR
-LANGUAGE_IDS
-END //RESOURCE
-
-START RESOURCE    iaupdatelauncher_reg.rss
-DEPENDS iaupdatelauncher.rsg
-TARGETPATH 	      /private/10003a3f/apps
-END //RESOURCE
-
-SMPSAFE
-
-// End of File
-
--- a/iaupdate/IAD/launcher/group/iaupdatelauncher.rss	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Resource definitions for IAD launcher
-*
-*/
-
-
-
-//  RESOURCE IDENTIFIER
-NAME IALA    // 4 letter ID
-
-
-//  INCLUDES
-#include <eikon.rh>
-#include <appinfo.rh>
-#include <data_caging_paths_strings.hrh>
-#include <iaupdate.loc>
-
-
-//  RESOURCE DEFINITIONS
-// -----------------------------------------------------------------------------
-//
-//    Define the resource file signature
-//    This resource should be empty.
-//
-// -----------------------------------------------------------------------------
-//
-RESOURCE RSS_SIGNATURE
-    {
-    }
-
-
-// ---------------------------------------------------------------------------- 
-//
-// r_iaupdatelauncher_localisable_app_info
-//
-// ---------------------------------------------------------------------------- 
-//
-RESOURCE LOCALISABLE_APP_INFO r_iaupdatelauncher_localisable_app_info
-    {
-    short_caption = qtn_swupdate_caption_grid_ph2;
-    caption_and_icon = 
-    CAPTION_AND_ICON_INFO
-        {
-        caption = qtn_swupdate_caption_list_ph2;
-        number_of_icons = 1;
-        icon_file = APP_BITMAP_DIR"\\iaupdate_aif.mif";
-	};
-    }
-
-// End of File
-
--- a/iaupdate/IAD/launcher/group/iaupdatelauncher_reg.rss	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   registration resource file of IAD client launcher
-*
-*/
-
-
-
-#include <appinfo.rh>
-#include <iaupdatelauncher.rsg>
-#include <data_caging_paths_strings.hrh>
-#include "iaupdatelauncheruids.h"
-
-UID2 KUidAppRegistrationResourceFile
-UID3 KIAUpdateLauncherUid
-
-RESOURCE APP_REGISTRATION_INFO
-  {
-  app_file="iaupdatelauncher";
-  localisable_resource_file =  APP_RESOURCE_DIR"\\iaupdatelauncher";
-  localisable_resource_id = R_IAUPDATELAUNCHER_LOCALISABLE_APP_INFO;
-
-  embeddability=KAppNotEmbeddable;
-  newfile=KAppDoesNotSupportNewFile;
-  }
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/launcher/iaupdatelauncher.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:   
+#                
+
+
+TEMPLATE = app
+TARGET = iaupdatelauncher 	
+
+symbian {
+    TARGET.UID3 = 0x2001FE2F
+    TARGET.CAPABILITY = CAP_APPLICATION
+    SKINICON = qtg_large_swupdate 
+    TRANSLATIONS = swupdate.ts
+}    
+DEPENDPATH += .
+DEPENDPATH += ./src
+DEPENDPATH += ./inc
+
+INCLUDEPATH += .
+INCLUDEPATH += ../engine/inc
+
+CONFIG += hb
+
+# Input
+SOURCES += iaupdatelaunchermain.cpp \
+           iaupdatelauncherclient.cpp 
+
+HEADERS = iaupdatelauncherclient.h 
+
+LIBS += -lxqservice
+LIBS += -lxqserviceutil
+LIBS += -lflogger
\ No newline at end of file
--- a/iaupdate/IAD/launcher/inc/iaupdatelauncherapplication.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIaupdateLauncherApplication class 
-*
-*/
-
-
-
-#ifndef __IAUPDATELAUNCHERAPPLICATION_H__
-#define __IAUPDATELAUNCHERAPPLICATION_H__
-
-// INCLUDES
-#include <aknapp.h>
-
-// CLASS DECLARATION
-
-/**
-* CIaupdateLauncherApplication application class.
-* Provides factory to create concrete document object.
-* An instance of CIaupdateLauncherApplication is the application part of the
-* AVKON application framework for the IAupdate client launcher application.
-*/
-class CIAUpdateLauncherApplication : public CAknApplication
-    {
-    public: // Functions from base classes
-
-        /**
-        * From CApaApplication, AppDllUid.
-        * @return Application's UID (KUidHelloWorldBasicApp).
-        */
-        TUid AppDllUid() const;
-
-    protected: // Functions from base classes
-
-        /**
-        * From CApaApplication, CreateDocumentL.
-        * Creates CIaupdateLauncherDocument document object. The returned
-        * pointer in not owned by the CIaupdateLauncherApplication object.
-        * @return A pointer to the created document object.
-        */
-        CApaDocument* CreateDocumentL();
-    };
-
-#endif // __IAUPDATELAUNCHERAPPLICATION_H__
-
-// End of File
-
--- a/iaupdate/IAD/launcher/inc/iaupdatelauncherappui.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateLauncherAppUi class 
-*
-*/
-
-
-
-
-#ifndef __IAUPDATELAUNCHERAPPUI_H__
-#define __IAUPDATELAUNCHERAPPUI_H__
-
-// INCLUDES
-#include <aknappui.h>
-
-// FORWARD DECLARATIONS
-class CIAUpdateLauncherManager;
-
-// CLASS DECLARATION
-/**
-* CLauncherAppUi application UI class.
-* Interacts with the user through the UI and request message processing
-* from the handler class
-*/
-class CIAUpdateLauncherAppUi : public CAknAppUi
-                          
-    {
-    public: // Constructors and destructor
-
-        /**
-        * ConstructL.
-        * 2nd phase constructor.
-        */
-        void ConstructL();
-
-        /**
-        * C++ default constructor. This needs to be public due to
-        * the way the framework constructs the AppUi
-        */
-        CIAUpdateLauncherAppUi();
-
-        /**
-        * Virtual Destructor.
-        */
-        virtual ~CIAUpdateLauncherAppUi();
-
-    private: // from CAknViewAppUi
-    
-         /*!
-          * @function HandleCommandL  
-          * @discussion Handle user menu selections
-          * @param aCommand the enumerated code for the option selected
-          */
-        void HandleCommandL( TInt aCommand );
-
-        
-     private: // from CEikAppUi
-        /**
-        * @param aCommand - The shell command sent to the application
-        * @param aDocumentName - The document name that will be given to 
-        * OpenFileL()
-        * @param aTail - The rest of the command line
-        * @return Whether the final document name represents an existing file
-        */
-        TBool ProcessCommandParametersL( TApaCommand aCommand,
-                                         TFileName& aDocumentName,
-                                         const TDesC8& aTail );
-
-        
-    private: // Data
-    
-        CIAUpdateLauncherManager* iLauncherManager; 
-        TBool iRefreshFromNetworkDenied;
-    };
-
-#endif // __IAUPDATELAUNCHERAPPUI_H__
-
-// End of File
-
--- a/iaupdate/IAD/launcher/inc/iaupdatelauncherclient.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/launcher/inc/iaupdatelauncherclient.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -19,63 +19,30 @@
 
 #ifndef IA_UPDATE_LAUNCHER_CLIENT_H
 #define IA_UPDATE_LAUNCHER_CLIENT_H
+#include <QObject>
 
-#include <AknServerApp.h> 
-#include <e32std.h>
+class XQServiceRequest;
 
-/**
- *  
- */
-class RIAUpdateLauncherClient : public RAknAppServiceBase 
-    {
-
+//class IAUpdateLauncherClient 
+class IAUpdateLauncherClient : public QObject
+{
+     Q_OBJECT
 public:
 
-    /**
-     * Constructor.
-     */
      
-     RIAUpdateLauncherClient();
-
-    /** 
-     * This function will crete new embedded IAUpdate instance.
-     */
-    TInt Open();
-    
-    /** 
-     * Close client server connection to IAUpdate
-     */
-    void Close();
-
+     IAUpdateLauncherClient();
+     ~IAUpdateLauncherClient();
 
-    /** 
-     * Command asks IAUpdate to show updates list
-     *
-     * @param aStatus The status will be updated when the operation
-     * has been completed.
-     */
-    void ShowUpdates( TBool& aRefreshFromNetworkDenied, 
-                      TRequestStatus& aStatus );
-    
-    /** 
-     * Cancel async ShowUpdates() request
-     */
-     void CancelAsyncRequest();
- 
-public: // RAknAppServiceBase
+     void launch();
 
-    /**
-     * @see RAknAppServiceBase::ServiceUid
-     */
-    TUid ServiceUid() const;
+protected slots:
+     void requestCompleted(const QVariant& value);
+     void requestError(int err); 
 
                                
-private: //data
+private: 
 
-     TBool iConnected;
-     
-     TPtr8 iPtr1;
-
+     XQServiceRequest* mServiceRequest;
      };
 
 #endif // IA_UPDATE_LAUNCHER_CLIENT_H
--- a/iaupdate/IAD/launcher/inc/iaupdatelauncherdocument.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateLauncherDocument
-*                class 
-*
-*/
-
-
-
-
-#ifndef __IAUPDATELAUNCHERDOCUMENT_H__
-#define __IAUPDATELAUNCHERDOCUMENT_H__
-
-// INCLUDES
-#include <AknDoc.h>
-
-// FORWARD DECLARATIONS
-class CIAUpdateLauncherAppUi;
-class CEikApplication;
-
-
-// CLASS DECLARATION
-
-/**
-* CLauncherDocument application class.
-* An instance of class CLauncherDocument is the Document part of the
-* AVKON application framework for the Launcher example application.
-*/
-class CIAUpdateLauncherDocument : public CAknDocument
-    {
-    public: // Constructors and destructor
-
-        /**
-        * NewL.
-        * Two-phased constructor.
-        * Construct a CIAUpdateLauncherDocument for the AVKON application aApp
-        * using two phase construction, and return a pointer
-        * to the created object.
-        * @param aApp Application creating this document.
-        * @return A pointer to the created instance of CIAUpdateLauncherDocument
-        */
-        static CIAUpdateLauncherDocument* NewL( CEikApplication& aApp );
-
-        /**
-        * NewLC.
-        * Two-phased constructor.
-        * Construct a CIAUpdateLauncherDocument for the AVKON application aApp
-        * using two phase construction, and return a pointer
-        * to the created object.
-        * @param aApp Application creating this document.
-        * @return A pointer to the created instance of CIAUpdateLauncherDocument.
-        */
-        static CIAUpdateLauncherDocument* NewLC( CEikApplication& aApp );
-
-        /**
-        * ~CLauncherDocument
-        * Virtual Destructor.
-        */
-        virtual ~CIAUpdateLauncherDocument();
-
-    public: // Functions from base classes
-
-        /**
-        * CreateAppUiL
-        * From CEikDocument, CreateAppUiL.
-        * Create a CIAUpdateLauncherAppUi object and return a pointer to it.
-        * The object returned is owned by the Uikon framework.
-        * @return Pointer to created instance of AppUi.
-        */
-        CEikAppUi* CreateAppUiL();
-
-    private: // Constructors
-
-        /**
-        * ConstructL
-        * 2nd phase constructor.
-        */
-        void ConstructL();
-
-        /**
-        * CLauncherDocument.
-        * C++ default constructor.
-        * @param aApp Application creating this document.
-        */
-        CIAUpdateLauncherDocument( CEikApplication& aApp );
-
-    };
-
-#endif // __IAUPDATELAUNCHERDOCUMENT_H__
-
-// End of File
-
--- a/iaupdate/IAD/launcher/inc/iaupdatelaunchermanager.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateLauncherManager class 
-*
-*/
-
-
-
-#ifndef IA_UPDATE_LAUNCHER_MANAGER_H
-#define IA_UPDATE_LAUNCHER_MANAGER_H
-
-
-//INCLUDES
-#include <e32base.h>
-#include <e32std.h>
-#include <coemain.h>
-
-#include "iaupdatelauncherclient.h"
-
-/**
- * 
-  */
-class CIAUpdateLauncherManager : public CActive
-    {
-
-public:
-
-    /**
-     * Symbian two phased constructor.
-     */
-    static CIAUpdateLauncherManager* NewL( TBool& aRefreshFromNetworkDenied );
-    
-    /**
-     * Symbian two phased constructor.
-     */
-    static CIAUpdateLauncherManager* NewLC( TBool& aRefreshFromNetworkDenied );
-    
-
-    /**
-     * Destructor
-     */
-    virtual ~CIAUpdateLauncherManager();
-    
-
-    
-
-private: // CActive
-
-    /**
-     * @see CActive::DoCancel
-     */
-    void DoCancel();
-
-    /**
-     * When the server side has finished operation, the CActive object will
-     * be informed about it, and as a result RunL will be called. This function
-     * well inform the observer that the operation has been completed.
-     * @see CActive::RunL
-     */
-    void RunL();
-
-
-private:
-
-    /**
-     * private C++ constructor
-     */
-    CIAUpdateLauncherManager();
-    
-    /**
-     * @see NewL
-     */
-    void ConstructL( TBool& aRefreshFromNetworkDenied );
-
-  
-private:
-
-    // Prevent these if not implemented
-    CIAUpdateLauncherManager( const CIAUpdateLauncherManager& aObject );
-    CIAUpdateLauncherManager& operator =( const CIAUpdateLauncherManager& aObject );
-    
-
-private: // data
-       
-    // Handles the client server communication.
-    RIAUpdateLauncherClient iUpdateClient;
-        
-    CEikonEnv* iEikEnv; //not owned
-
-    };
-
-#endif // IA_UPDATE_LAUNCHER_MANAGER_H
--- a/iaupdate/IAD/launcher/src/iaupdatelauncher.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   IAUpdate client launcher.
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <eikstart.h>
-#include "iaupdatelauncherapplication.h"
-#include "iaupdatedebug.h"
-
-
-LOCAL_C CApaApplication* NewApplication()
-	{
-	IAUPDATE_TRACE("[IAUPDATE] NewApplication() begin");
-	return new CIAUpdateLauncherApplication;
-	}
-
-GLDEF_C TInt E32Main()
-	{
-	return EikStart::RunApplication( NewApplication );
-	}
-
--- a/iaupdate/IAD/launcher/src/iaupdatelauncherapplication.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   IAUpdate client launcher.
-*
-*/
-
-
-
-
-// INCLUDE FILES
-#include "iaupdatelauncherdocument.h"
-#include "iaupdatelauncherapplication.h"
-#include "iaupdatelauncheruids.h"
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// UID for the application;
-// this should correspond to the uid defined in the mmp file
-static const TUid KUidIaupdateLauncherApp = { KIAUpdateLauncherUid };
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherApplication::CreateDocumentL()
-// Creates CApaDocument object
-// -----------------------------------------------------------------------------
-//
-CApaDocument* CIAUpdateLauncherApplication::CreateDocumentL()
-    {
-    // Create an Launcher document, and return a pointer to it
-    return (static_cast<CApaDocument*>
-                    ( CIAUpdateLauncherDocument::NewL( *this ) ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherApplication::AppDllUid()
-// Returns application UID
-// -----------------------------------------------------------------------------
-//
-TUid CIAUpdateLauncherApplication::AppDllUid() const
-    {
-    // Return the UID for the Launcher application
-    return KUidIaupdateLauncherApp;
-    }
-
-// End of File
-
--- a/iaupdate/IAD/launcher/src/iaupdatelauncherappui.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of CIAUpdateLauncherAppUi class 
-*                member functions.
-*
-*/
-
-
-
-// INCLUDE FILES
-#include "iaupdatelauncherappui.h"
-#include "iaupdatelaunchermanager.h"
-#include "iaupdatedebug.h"
-
-_LIT8( KRefreshFromNetworkDenied, "1" );
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherAppUi::ConstructL()
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateLauncherAppUi::ConstructL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherAppUi::ConstructL() begin");
-    // Initialise app UI with standard value.
-    BaseConstructL( ENoAppResourceFile );
-    StatusPane()->MakeVisible( EFalse );
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherAppUi::ConstructL() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherrAppUi::CIAUpdateLauncherAppUi()
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateLauncherAppUi::CIAUpdateLauncherAppUi()
-    {
-    SetFullScreenApp( EFalse );
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherAppUi::~CIAUpdateLauncherAppUi()
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateLauncherAppUi::~CIAUpdateLauncherAppUi()
-    {
-    delete iLauncherManager;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherAppUi::HandleCommandL
-// 
-// -----------------------------------------------------------------------------
-//         
-void CIAUpdateLauncherAppUi::HandleCommandL( TInt aCommand )
-    {
-    switch(aCommand)
-        {
-        case EEikCmdExit:
-        case EAknCmdExit:
-        case EAknSoftkeyExit:
-            {
-            delete iLauncherManager;
-            iLauncherManager = NULL;
-            Exit();	
-            break;
-            }
-             
-        default:
-            {
-            break;
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherAppUi::ProcessCommandParametersL
-// 
-// -----------------------------------------------------------------------------
-// 
-TBool CIAUpdateLauncherAppUi::ProcessCommandParametersL( TApaCommand /*aCommand*/,
-                                                         TFileName& /*aDocumentName*/,
-                                                         const TDesC8& aTail )
-   {
-   IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherAppUi::ProcessCommandParametersL() begin");
-   if ( aTail == KRefreshFromNetworkDenied )
-       {
-   	   iRefreshFromNetworkDenied = ETrue;
-       }
-   iLauncherManager = CIAUpdateLauncherManager::NewL( iRefreshFromNetworkDenied );
-
-   IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherAppUi::ProcessCommandParametersL() end");
-   return ETrue;	
-   }
-    
-// End of File
-
--- a/iaupdate/IAD/launcher/src/iaupdatelauncherclient.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/launcher/src/iaupdatelauncherclient.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:   This module contains the implementation of RIAUpdateLauncherClient
+* Description:   This module contains the implementation of IAUpdateLauncherClient
 *                class member functions.
 *
 */
@@ -19,107 +19,66 @@
 
 
 //INCLUDES
+#include <qapplication.h>
+#include <xqservicerequest.h>
+#include <xqserviceutil.h>
+#include <xqrequestinfo.h>
+
 #include "iaupdatelauncherclient.h"
-#include "iaupdateclientdefines.h"
 #include "iaupdatedebug.h"
 
-// -----------------------------------------------------------------------------
-// RIAUpdateLauncherClient::RIAUpdateLauncherClient
-// 
-// -----------------------------------------------------------------------------
-// 
-RIAUpdateLauncherClient::RIAUpdateLauncherClient() 
-: iPtr1( NULL, 0 )
-    {
-    }
+ 
 
+IAUpdateLauncherClient::IAUpdateLauncherClient()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateLauncherClient::IAUpdateLauncherClient()");
+    mServiceRequest = NULL;
+}
 
-// -----------------------------------------------------------------------------
-// RIAUpdateLauncherClient::Open
-// 
-// -----------------------------------------------------------------------------
-// 
-TInt RIAUpdateLauncherClient::Open()
+IAUpdateLauncherClient::~IAUpdateLauncherClient()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateLauncherClient::~IAUpdateLauncherClient() begin");
+    if ( mServiceRequest)
     {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateLauncherClient::Open() begin");
-        
-    TInt error = KErrNone;
-    if ( !iConnected )
-        {
-        TRAP( error, ConnectChainedAppL( ServiceUid() ) );
-        if ( error == KErrNone )
-            {
-            iConnected = ETrue;
-            }
-        }	
-    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", error );
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateLauncherClient::Open() end");
-    return error;
+       delete mServiceRequest;
     }
-
-// -----------------------------------------------------------------------------
-// RIAUpdateLauncherClient::Close
-// 
-// -----------------------------------------------------------------------------
-//
-void RIAUpdateLauncherClient::Close()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateLauncherClient::Close() begin");
-    // Let the parent handle closing.
-    RAknAppServiceBase::Close();
-    iConnected = EFalse;
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateLauncherClient::Close() end");
-    }
-
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateLauncherClient::~IAUpdateLauncherClient() end");
+}
 
-// -----------------------------------------------------------------------------
-// RIAUpdateLauncherClient::ShowUpdates()
-// 
-// -----------------------------------------------------------------------------
-//
-void RIAUpdateLauncherClient::ShowUpdates( TBool& aRefreshFromNetworkDenied, 
-                                           TRequestStatus& aStatus )
+void IAUpdateLauncherClient::launch()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateLauncherClient::launch() begin");
+    mServiceRequest = new XQServiceRequest("com.nokia.services.swupdate.swupdate_interface","startedByLauncher(QString)",false);
+    
+    XQRequestInfo requestInfo;
+    requestInfo.setEmbedded(true);
+    mServiceRequest->setInfo(requestInfo);
+    QString stringRefreshFromNetworkDenied("0");
+    *mServiceRequest << stringRefreshFromNetworkDenied;   
+    bool ret = mServiceRequest->send();   
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateLauncherClient::launch() ret %d", ret );
+    if (!ret)
     {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateLauncherClient::ShowUpdates() begin");
-    if ( iConnected )
-        {
-        TPckg<TBool> refreshFromNetworkDenied( aRefreshFromNetworkDenied );
-	    iPtr1.Set( refreshFromNetworkDenied );
-	    TIpcArgs args;
-        args.Set( 0, &iPtr1 );
-    	SendReceive( IAUpdateClientDefines::EIAUpdateServerStartedByLauncher, 
-    	             args,
-    	             aStatus );
-        }
- 
-        
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateLauncherClient::ShowUpdates() end");
+        IAUPDATE_TRACE("[IAUPDATE] send failed");
+        qApp->quit();
     }
+    else
+    {
+        connect(mServiceRequest, SIGNAL(requestCompleted(QVariant)), this, SLOT(requestCompleted(QVariant)));
+        connect(mServiceRequest, SIGNAL(requestError(int)), this, SLOT(requestError(int)));
+    }    
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateLauncherClient::launch() end");
+}
 
-// -----------------------------------------------------------------------------
-// RIAUpdateLauncherClient::CancelAsyncRequest()
-// 
-// -----------------------------------------------------------------------------
-//    
-void RIAUpdateLauncherClient::CancelAsyncRequest()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateLauncherClient::CancelAsyncRequest() begin");
-    if ( iConnected )
-        {
-    	SendReceive( IAUpdateClientDefines::EIAUpdateServerCancel ); 
-        }
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateLauncherClient::CancelAsyncRequest() end");
-    }
+void IAUpdateLauncherClient::requestCompleted(const QVariant& /*value*/)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateLauncherClient::requestCompleted()");
+    qApp->quit();
+}
 
+void IAUpdateLauncherClient::requestError(int err)
+{
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateLauncherClient::requestError() %d", err );
+    qApp->quit();
+}
 
-// -----------------------------------------------------------------------------
-// RIAUpdateLauncherClient::ServiceUid()
-// 
-// -----------------------------------------------------------------------------
-//
-TUid RIAUpdateLauncherClient::ServiceUid() const
-    {
-    IAUPDATE_TRACE("[IAUPDATE] RIAUpdateLauncherClient::ServiceUid()");
-    return IAUpdateClientDefines::KIAUpdateServiceUid;    
-    }
-
--- a/iaupdate/IAD/launcher/src/iaupdatelauncherdocument.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of CIAUpdateLauncherDocument class 
-*                member functions.
-*
-*/
-
-
-
-// INCLUDE FILES
-#include "iaupdatelauncherappui.h"
-#include "iaupdatelauncherdocument.h"
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherDocument::NewL()
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateLauncherDocument* CIAUpdateLauncherDocument::NewL( CEikApplication& aApp )
-    {
-    CIAUpdateLauncherDocument* self = NewLC( aApp );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherDocument::NewLC()
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateLauncherDocument* CIAUpdateLauncherDocument::NewLC( CEikApplication& aApp )
-    {
-    CIAUpdateLauncherDocument* self =
-        new ( ELeave ) CIAUpdateLauncherDocument( aApp );
-
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherDocument::ConstructL()
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateLauncherDocument::ConstructL()
-    {
-    // No implementation required
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherDocument::CIAUpdateLauncherDocument()
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateLauncherDocument::CIAUpdateLauncherDocument( CEikApplication& aApp )
-    : CAknDocument( aApp )
-    {
-    // No implementation required
-    }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateLauncherDocument::~CIAUpdateLauncherDocument()
-// Destructor.
-// ---------------------------------------------------------------------------
-//
-CIAUpdateLauncherDocument::~CIAUpdateLauncherDocument()
-    {
-    // No implementation required
-    }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateLauncherDocument::CreateAppUiL()
-// Constructs CreateAppUi.
-// ---------------------------------------------------------------------------
-//
-CEikAppUi* CIAUpdateLauncherDocument::CreateAppUiL()
-    {
-    // Create the application user interface, and return a pointer to it;
-    // the framework takes ownership of this object
-    return ( static_cast <CEikAppUi*> ( new ( ELeave ) CIAUpdateLauncherAppUi ) );
-    }
-
-// End of File
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/launcher/src/iaupdatelaunchermain.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This module contains the implementation of main function
+*
+*/
+
+#include <QApplication>
+#include "iaupdatelauncherclient.h"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+    IAUpdateLauncherClient launcherClient;
+    launcherClient.launch();
+    return app.exec();
+}
--- a/iaupdate/IAD/launcher/src/iaupdatelaunchermanager.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of CIAUpdateLauncherManager
-*                class member functions.
-*
-*/
-
-
-
-// INCLUDES
-#include <eikenv.h>
-
-#include "iaupdatelauncherappui.h"
-#include "iaupdatelaunchermanager.h"
-#include "iaupdatelauncherclient.h"
-#include "iaupdatedebug.h"
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherManager::NewL
-// 
-// -----------------------------------------------------------------------------
-// 
-CIAUpdateLauncherManager* CIAUpdateLauncherManager::NewL( TBool& aRefreshFromNetworkDenied )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::NewL() begin");
-    CIAUpdateLauncherManager* self = CIAUpdateLauncherManager::NewLC( aRefreshFromNetworkDenied );
-    CleanupStack::Pop( self );
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::NewL() end");
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherManager::NewLC
-// 
-// -----------------------------------------------------------------------------
-//    
-CIAUpdateLauncherManager* CIAUpdateLauncherManager::NewLC( TBool& aRefreshFromNetworkDenied )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::NewLC() begin");
-    CIAUpdateLauncherManager* self = new( ELeave ) CIAUpdateLauncherManager();
-    CleanupStack::PushL( self );
-    self->ConstructL( aRefreshFromNetworkDenied );
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::NewLC() end");
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherManager::CIAUpdateLauncherManager
-// 
-// -----------------------------------------------------------------------------
-//    
-CIAUpdateLauncherManager::CIAUpdateLauncherManager()
-: CActive( CActive::EPriorityStandard )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::CIAUpdateLauncherManager()");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherManager::ConstructL()
-// 
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateLauncherManager::ConstructL( TBool& aRefreshFromNetworkDenied )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::ConstructL() begin");
-    CActiveScheduler::Add( this );
-    TInt error( iUpdateClient.Open() );
-    IAUPDATE_TRACE_1("[IAUPDATE] CIAUpdateLauncherManager::ConstructL() error code: %d", error);
-    if ( error == KErrNone )
-        {    
-        iUpdateClient.ShowUpdates( aRefreshFromNetworkDenied, iStatus );
-        SetActive();        
-        }
-    else
-        {
-        iEikEnv = CEikonEnv::Static();
-        CIAUpdateLauncherAppUi* appUi = 
-       	            static_cast< CIAUpdateLauncherAppUi* >( iEikEnv->EikAppUi() );
-        appUi->Exit();
-        }
- 
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::ConstructL() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherManager::~CIAUpdateLauncherManager
-// 
-// -----------------------------------------------------------------------------
-//
-CIAUpdateLauncherManager::~CIAUpdateLauncherManager()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::~CIAUpdateLauncherManager() begin");
-    Cancel();
-    iUpdateClient.Close();
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::~CIAUpdateLauncherManager() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherManager::DoCancel
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateLauncherManager::DoCancel()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::DoCancel() begin");
-    iUpdateClient.CancelAsyncRequest();
-
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::DoCancel() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateLauncherManager::RunL
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateLauncherManager::RunL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::RunL() begin");
-    iEikEnv = CEikonEnv::Static();
-    CIAUpdateLauncherAppUi* appUi = 
-       	            static_cast< CIAUpdateLauncherAppUi* >( iEikEnv->EikAppUi() );
-    appUi->Exit();
-     
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLauncherManager::RunL() end");
-    }
-
-
-
-
-
-
-
-
-
-
--- a/iaupdate/IAD/loc/iaupdate.loc	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/loc/iaupdate.loc	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -304,11 +304,6 @@
 // l: None
 #define qtn_swupdate_main_device_fw "DEVICE SOFTWARE" 
 
-// d: Second row in double graphic style list
-// d: Firmware update with PC
-// l: list_double_graphic_pane_t2
-#define qtn_swupdate_update_with_pc "Use your PC to update"
-
 
 //HISTORY VIEW LIST
 
--- a/iaupdate/IAD/tools/bwins/iaupdatetoolsu.def	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-EXPORTS
-	?ExternalizeParametersL@IAUpdateTools@@YAXAAPAVHBufC8@@ABVCIAUpdateParameters@@@Z @ 1 NONAME ; void IAUpdateTools::ExternalizeParametersL(class HBufC8 * &, class CIAUpdateParameters const &)
-	?InternalizeParametersL@IAUpdateTools@@YAXAAVCIAUpdateParameters@@ABVTDesC8@@@Z @ 2 NONAME ; void IAUpdateTools::InternalizeParametersL(class CIAUpdateParameters &, class TDesC8 const &)
-	?ExternalizeDes8L@IAUpdateTools@@YAXABVTDesC8@@AAVRWriteStream@@@Z @ 3 NONAME ; void IAUpdateTools::ExternalizeDes8L(class TDesC8 const &, class RWriteStream &)
-	?ExternalizeDesL@IAUpdateTools@@YAXABVTDesC16@@AAVRWriteStream@@@Z @ 4 NONAME ; void IAUpdateTools::ExternalizeDesL(class TDesC16 const &, class RWriteStream &)
-	?InternalizeDes8L@IAUpdateTools@@YAHAAPAVHBufC8@@AAVRReadStream@@@Z @ 5 NONAME ; int IAUpdateTools::InternalizeDes8L(class HBufC8 * &, class RReadStream &)
-	?InternalizeDesL@IAUpdateTools@@YAHAAPAVHBufC16@@AAVRReadStream@@@Z @ 6 NONAME ; int IAUpdateTools::InternalizeDesL(class HBufC16 * &, class RReadStream &)
-
--- a/iaupdate/IAD/tools/eabi/iaupdatetoolsu.def	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-EXPORTS
-	_ZN13IAUpdateTools22ExternalizeParametersLERP6HBufC8RK19CIAUpdateParameters @ 1 NONAME
-	_ZN13IAUpdateTools22InternalizeParametersLER19CIAUpdateParametersRK6TDesC8 @ 2 NONAME
-	_ZN13IAUpdateTools15ExternalizeDesLERK7TDesC16R12RWriteStream @ 3 NONAME
-	_ZN13IAUpdateTools15InternalizeDesLERP7HBufC16R11RReadStream @ 4 NONAME
-	_ZN13IAUpdateTools16ExternalizeDes8LERK6TDesC8R12RWriteStream @ 5 NONAME
-	_ZN13IAUpdateTools16InternalizeDes8LERP6HBufC8R11RReadStream @ 6 NONAME
-
--- a/iaupdate/IAD/tools/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Build information file for IA Update tools
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-
-PRJ_MMPFILES
-
-iaupdatetools.mmp
-
-
-PRJ_EXPORTS
-
-
-
--- a/iaupdate/IAD/tools/group/iaupdatetools.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Project definition file of iaupdatetools.dll
-*
-*/
-
-
-
-#include <platform_paths.hrh>
-
-
-CAPABILITY      CAP_GENERAL_DLL
-
-TARGET          iaupdatetools.dll
-TARGETTYPE      dll
-UID             0x1000008d 0x20019596
-
-PAGED
-
-SOURCEPATH      ../src
-SOURCE          iaupdatetools.cpp
-
-// Client header files
-USERINCLUDE     ../inc
-
-
-MW_LAYER_SYSTEMINCLUDE
-
-LIBRARY         iaupdateapi.lib
-LIBRARY         euser.lib
-LIBRARY         estor.lib
-LIBRARY         avkon.lib
-LIBRARY         apparc.lib
-LIBRARY         eikcore.lib
-LIBRARY         cone.lib
-
-// For debugging and logging purposes
-USERINCLUDE     ../../engine/inc
-DEBUGLIBRARY    flogger.lib
-
-SMPSAFE
--- a/iaupdate/IAD/tools/inc/iaupdatetools.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the IAUpdateTools functions
-*
-*/
-
-
-
-#ifndef IA_UPDATE_TOOLS_H
-#define IA_UPDATE_TOOLS_H
-
-#include <e32base.h>
-#include <e32cmn.h>
-
-class RReadStream;
-class RWriteStream;
-
-
-/**
- * IAUpdateTools provides general tool functions
- *
- * @since S60 v3.2
- */
-namespace IAUpdateTools
-    {
-
-    /**
-     * @param aTarget The old pointer data will be deleted and the pointer will point to the new data 
-     * that will contain externalization of the CIAUpdateParameters object.
-     * @param aSource CIAUpdateParameters object that will be externalized to a descriptor.
-     * @exception Leaves with system wide error code.
-     */
-    IMPORT_C void ExternalizeParametersL( HBufC8*& aTarget,
-                                          const CIAUpdateParameters& aSource );
-
-    /**
-     * Internalizes CIAUpdateParameters from the source descriptor data.
-     *
-     * @param aTarget CIAUpdateParameters object that will be internalized.
-     * @param aSource Data that is used to internalize CIAUpdateParameters object.
-     * @exception Leaves with system wide error code.
-     */
-    IMPORT_C void InternalizeParametersL( CIAUpdateParameters& aTarget, 
-                                          const TDesC8& aSource );
-
-
-    /**
-     * Externalizes the descriptor to the stream with length information
-     *
-     * @param aDes Descriptor to externalize
-     * @param aStream Target stream
-     * @exception Leaves with system wide error code.
-     */
-    IMPORT_C void ExternalizeDesL( const TDesC& aDes, 
-                                   RWriteStream& aStream );
-
-    /**
-     * Internalizes a descriptor written with ExternalizeDesL() from the stream
-     *
-     * @param Target descriptor pointer. Old descriptor is deleted if the read is 
-     * successful.
-     * @param aStream Source stream
-     * @return Length of the read data
-     * @exception Leaves with system wide error code. 
-     */
-    IMPORT_C TInt InternalizeDesL( HBufC*& aDes, 
-                                   RReadStream& aStream );
-
-
-    /**
-     * @see ExternalizeDesL
-     */
-    IMPORT_C void ExternalizeDes8L( const TDesC8& aDes, 
-                                    RWriteStream& aStream );
-
-    /**
-     * @see InternalizeDesL
-     */
-    IMPORT_C TInt InternalizeDes8L( HBufC8*& aDes, 
-                                    RReadStream& aStream );
-
-    }
-
-#endif // IA_UPDATE_TOOLS_H
--- a/iaupdate/IAD/tools/src/iaupdatetools.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,252 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of IAUpdateTools functions
-*
-*/
-
-
-
-
-
-
-#include <s32mem.h>
-#include <iaupdateparameters.h>
-
-#include "iaupdatetools.h"
-#include "iaupdatedebug.h"
-
-// -----------------------------------------------------------------------------
-// IAUpdateTools::ExternalizeParametersL
-// 
-// -----------------------------------------------------------------------------
-// 
-EXPORT_C void IAUpdateTools::ExternalizeParametersL( HBufC8*& aTarget,
-                                                     const CIAUpdateParameters& aSource )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::ExternalizeParametersL begin");
-    // Notice!
-    // If you make changes here. Also, remember to make corresponding
-    // changes to the InternalizeParametersL
-
-    // The size of the buffer will contain:
-    // - 1 TInt for UIDs,
-    // - 1 TBool for ShowProgress boolean
-    // - 1 TUint for importance
-    // - 1 TUint for type
-    // - 1 TBool for Refresh boolean
-    
-    // - 3 TInt for descriptor lengths
-    // --> bytes for 5 + 3 = 8 TInt values are needed 
-    //     (sizeof( TInt ) * KNumberOfTInts)
-    // - 3 descriptor TDesC texts
-    const TInt KNumberOfTInts( 8 );
-
-    // Notice, that because descriptor texts that are included
-    // here are TDesC, their Size-information has to be used
-    // instead of Length.
-    HBufC8* tmp = 
-        HBufC8::NewLC( sizeof( TInt ) * KNumberOfTInts
-                       + aSource.SearchCriteria().Size()
-                       + aSource.CommandLineExecutable().Size()
-                       + aSource.CommandLineArguments().Size() );
-
-    // Create stream that uses the buffer created above.
-    // By using the stream, the values are easier to insert into the buffer.
-    TPtr8 ptr( tmp->Des() );    
-    RDesWriteStream stream( ptr );
-    CleanupClosePushL( stream );
-
-    // These are integers for uids
-    IAUPDATE_TRACE_1("[IAUPDATE] uid: %x", aSource.Uid().iUid );
-    stream.WriteInt32L( aSource.Uid().iUid );
-
-    // These are length and data pairs for descriptors
-    IAUPDATE_TRACE_1("[IAUPDATE] search criteria: %S", &aSource.SearchCriteria() );
-    ExternalizeDesL( aSource.SearchCriteria(), stream );
-    IAUPDATE_TRACE_1("[IAUPDATE] command line executable: %S", &aSource.CommandLineExecutable() );
-    ExternalizeDesL( aSource.CommandLineExecutable(), stream );
-#ifdef _DEBUG
-    HBufC* temp = HBufC::NewL( aSource.CommandLineArguments().Length() );
-    temp->Des().Copy( aSource.CommandLineArguments()) ;
-    IAUPDATE_TRACE_1("[IAUPDATE] command line arguments: %S", temp );
-    delete temp;
-#endif //_DEBUG
-    ExternalizeDes8L( aSource.CommandLineArguments(), stream );
-    
-    // Boolean for ShowProgress
-    stream.WriteInt32L( aSource.ShowProgress() );
-    
-    // TUint for importance
-    stream.WriteInt32L( aSource.Importance() );
-    
-    // TUint for type
-    stream.WriteInt32L( aSource.Type() );
-    
-    // Boolean for Refresh
-    stream.WriteInt32L( aSource.Refresh() );
-
-    // Stream is not needed anymore
-    CleanupStack::PopAndDestroy( &stream );
-
-    // Remove tmp from the stack but do not delete it because it will be
-    // assigned to the aTarget below.
-    CleanupStack::Pop( tmp );
-    
-    // Replace aTarget with new value
-    delete aTarget;
-    aTarget = tmp;
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::ExternalizeParametersL end");
-    }
-
-// -----------------------------------------------------------------------------
-// IAUpdateTools::InternalizeParametersL
-// 
-// -----------------------------------------------------------------------------
-// 
-EXPORT_C void IAUpdateTools::InternalizeParametersL( CIAUpdateParameters& aTarget, 
-                                                     const TDesC8& aSource )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::InternalizeParametersL begin");
-    // Notice!
-    // If you make changes here. Also, remember to make corresponding
-    // changes to the ExternalizeParametersL
-
-    // InternalizeDesL function will set values into this tmp descriptor.
-    HBufC* tmp( NULL );
-    
-    // Create stream that uses the given buffer.
-    RDesReadStream stream( aSource );
-    CleanupClosePushL( stream );
-
-    aTarget.SetUid( TUid::Uid( stream.ReadInt32L() ) );
-    IAUPDATE_TRACE_1("[IAUPDATE] uid: %x", aTarget.Uid().iUid );
-    
-    InternalizeDesL( tmp, stream );
-    CleanupStack::PushL( tmp );
-    aTarget.SetSearchCriteriaL( *tmp );
-    IAUPDATE_TRACE_1("[IAUPDATE] search criteria: %S", tmp );
-    CleanupStack::PopAndDestroy( tmp );
-    tmp = NULL;
-        
-    InternalizeDesL( tmp, stream );
-    CleanupStack::PushL( tmp );
-    aTarget.SetCommandLineExecutableL( *tmp );
-    IAUPDATE_TRACE_1("[IAUPDATE] command line executable: %S", tmp );
-    CleanupStack::PopAndDestroy( tmp );
-    tmp = NULL;
-
-    HBufC8* tmp8( NULL );        
-    InternalizeDes8L( tmp8, stream );
-    CleanupStack::PushL( tmp8 );
-    aTarget.SetCommandLineArgumentsL( *tmp8 );
-#ifdef _DEBUG
-    tmp = HBufC::NewL( tmp8->Length() );
-    tmp->Des().Copy( *tmp8 ) ;
-    IAUPDATE_TRACE_1("[IAUPDATE] command line arguments: %S", tmp );
-    delete tmp;
-    tmp = NULL;
-#endif //_DEBUG
-    CleanupStack::PopAndDestroy( tmp8 );
-    tmp8 = NULL;
-    
-    aTarget.SetShowProgress( stream.ReadInt32L() );
-
-    // new parameters (in phase 2 IAD) do not always exist. Parameters may have written by old IAD in selfupdate case.
-    TRAPD( err, aTarget.SetImportance( stream.ReadInt32L() ) );
-    if ( err != KErrEof )
-        {
-        User::LeaveIfError( err );
-        aTarget.SetType( stream.ReadInt32L() );
-        aTarget.SetRefresh( stream.ReadInt32L() );
-        }
-     
-    IAUPDATE_TRACE_1("[IAUPDATE] show progress: %d", aTarget.ShowProgress() );
-    CleanupStack::PopAndDestroy( &stream );   
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::InternalizeParametersL end");
-    }
-
-
-// -----------------------------------------------------------------------------
-// IAUpdateTools::ExternalizeDesL
-// 
-// -----------------------------------------------------------------------------
-// 
-EXPORT_C void IAUpdateTools::ExternalizeDesL( const TDesC& aDes, 
-                                              RWriteStream& aStream )
-    {
-    aStream.WriteInt32L( aDes.Length() );
-    aStream.WriteL( aDes );
-    }
-
-// -----------------------------------------------------------------------------
-// IAUpdateTools::InternalizeDesL
-// 
-// -----------------------------------------------------------------------------
-// 
-EXPORT_C TInt IAUpdateTools::InternalizeDesL( HBufC*& aDes, 
-                                              RReadStream& aStream )
-    {
-    TInt length = aStream.ReadInt32L();
-    if ( length > 0 ) 
-        {
-        HBufC* target = HBufC::NewLC( length );
-        TPtr ptr( target->Des() );        
-        aStream.ReadL( ptr, length );
-        delete aDes;
-        aDes = target;
-        CleanupStack::Pop( target );
-        }
-    else
-        {
-        delete aDes;
-        aDes = KNullDesC().AllocL();
-        }
-    return length;
-    }
-
-// -----------------------------------------------------------------------------
-// IAUpdateTools::ExternalizeDes8L
-// 
-// -----------------------------------------------------------------------------
-// 
-EXPORT_C void IAUpdateTools::ExternalizeDes8L( const TDesC8& aDes, RWriteStream& aStream )
-    {
-    aStream.WriteInt32L( aDes.Length() );
-    aStream.WriteL( aDes );
-    }
-
-// -----------------------------------------------------------------------------
-// IAUpdateTools::InternalizeDes8L
-// 
-// -----------------------------------------------------------------------------
-// 
-EXPORT_C TInt IAUpdateTools::InternalizeDes8L( HBufC8*& aDes, RReadStream& aStream )
-    {
-    TInt length = aStream.ReadInt32L();
-    if ( length > 0 ) 
-        {
-        HBufC8* target = HBufC8::NewLC( length );
-        TPtr8 ptr( target->Des() );        
-        aStream.ReadL( ptr, length );
-        delete aDes;
-        aDes = target;
-        CleanupStack::Pop( target );
-        }
-    else
-        {
-        delete aDes;
-        aDes = KNullDesC8().AllocL();
-        }
-    return length;
-    }
Binary file iaupdate/IAD/ui/group/2000F85A.txt has changed
--- a/iaupdate/IAD/ui/group/backup_registration.xml	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-<backup_registration version="1.0">
-    <proxy_data_manager sid = "0x10202BE9" />
-    <restore requires_reboot = "no"/>
-</backup_registration>
--- a/iaupdate/IAD/ui/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Build information file for IA Update UI
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-
-
-PRJ_EXTENSIONS
-
-START EXTENSION s60/mifconv
-  OPTION TARGETFILE iaupdate.mif
-  OPTION HEADERFILE iaupdate.mbg
-  OPTION SOURCES \
-	-c8,8 qgn_prop_cale_accepted -c8,8 qgn_prop_swupd_failed \
-	-c8,8 qgn_indi_important_add -c8,8 qgn_indi_tb_swupd_start\
-        -c8,8 qgn_indi_tb_swupd_detail -c8,8 qgn_indi_tb_swupd_history
-END
-
-START EXTENSION s60/mifconv
-  OPTION TARGETFILE iaupdate_aif.mif
-  OPTION SOURCES -c8,8 qgn_menu_swupdate
-END
-
-
-PRJ_MMPFILES
-
-iaupdate.mmp
-
-
-PRJ_EXPORTS
-
-// Config file
-backup_registration.xml        /epoc32/release/winscw/udeb/z/private/2000F85A/backup_registration.xml
-backup_registration.xml        /epoc32/release/winscw/urel/z/private/2000F85A/backup_registration.xml
-backup_registration.xml        /epoc32/data/z/private/2000F85A/backup_registration.xml
--- a/iaupdate/IAD/ui/group/iaupdate.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Project definition file of iaupdate.exe
-*
-*/
-
-
-
-#include <platform_paths.hrh>
-#include <data_caging_paths.hrh>
-#include "../inc/iaupdateuids.h"
-
-CAPABILITY CAP_APPLICATION TrustedUI PowerMgmt
-
-VENDORID   VID_DEFAULT 
-
-PAGED
-
-TARGETPATH	/sys/bin
-TARGET      iaupdate.exe
-TARGETTYPE  exe
-
-UID               0x100039CE KIAUpdateUiUid
-
-SOURCEPATH        ../src
-SOURCE            iaupdateapplication.cpp 
-SOURCE            iaupdateappui.cpp
-SOURCE            iaupdatedocument.cpp 
-SOURCE            iaupdatemainview.cpp
-SOURCE            iaupdatemaincontainer.cpp
-SOURCE            iaupdateuicontroller.cpp
-SOURCE            iaupdatewaitdialog.cpp
-SOURCE            iaupdateprogressdialog.cpp
-SOURCE            iaupdateserver.cpp
-SOURCE            iaupdatesession.cpp
-SOURCE            iaupdatenodefilter.cpp
-SOURCE 		      iaupdatesettingdialog.cpp
-SOURCE 		      iaupdatedialogutil.cpp
-SOURCE            iaupdatehistorycontainer.cpp
-SOURCE            iaupdatehistoryview.cpp
-SOURCE            iaupdatestarter.cpp
-SOURCE            iaupdatestatusdialog.cpp 
-SOURCE            iaupdatedetailsdialog.cpp 
-SOURCE            iaupdatefwdetailsdialog.cpp 
-SOURCE            iaupdateuiconfigdata.cpp
-SOURCE            iaupdateagreement.cpp
-SOURCE            iaupdateautomaticcheck.cpp
-SOURCE            iaupdatefirsttimeinfo.cpp
-SOURCE            iaupdatefirsttimedatefile.cpp
-SOURCE            iaupdatequeryhistory.cpp
-SOURCE            iaupdatestatuspanehandler.cpp
-SOURCE            iaupdatenavipanehandler.cpp
-SOURCE            iaupdateaccesspointhandler.cpp
-SOURCE            iaupdateroaminghandler.cpp
-SOURCE            iaupdateparametersfilemanager.cpp
-SOURCE            iaupdategloballockhandler.cpp
-SOURCE            iaupdaterefreshhandler.cpp
-SOURCE            iaupdateinstallationlistener.cpp
-SOURCE            iaupdatedeputils.cpp
-SOURCE            iaupdateuitimer.cpp
-SOURCE            iaupdatenodeid.cpp
-
-USERINCLUDE       ../inc
-USERINCLUDE       ../../tools/inc
-USERINCLUDE       ../../api/client/inc
-USERINCLUDE       ../../engine/inc 
-USERINCLUDE       ../../updater/inc
-USERINCLUDE       ../../updater/updaterfiles/inc
-USERINCLUDE       ../../loc
-USERINCLUDE       ../../firmwareupdate/inc
-USERINCLUDE       ../../launcher/inc
-
-APP_LAYER_SYSTEMINCLUDE
-
-LIBRARY           iaupdatetools.lib
-LIBRARY           iaupdateapi.lib
-LIBRARY           iaupdateengine.lib
-LIBRARY           iaupdaterfiles.lib
-LIBRARY           bafl.lib              // CDesC16Array
-LIBRARY           commonengine.lib      // StringLoader
-LIBRARY           euser.lib
-LIBRARY           apparc.lib
-LIBRARY           cone.lib 
-LIBRARY           eikcore.lib 
-LIBRARY           eikcoctl.lib          // CEikStatusPanelBase
-LIBRARY           avkon.lib  
-LIBRARY           sisregistryclient.lib // RSisRegistrySession RSisRegistryEntry
-LIBRARY           egul.lib
-LIBRARY           aknicon.lib
-LIBRARY           estor.lib
-LIBRARY			  efsrv.lib		        //RF
-LIBRARY           eikcdlg.lib
-LIBRARY           eikctl.lib
-LIBRARY           apgrfx.lib
-LIBRARY           ws32.lib 
-LIBRARY	          FeatMgr.lib
-LIBRARY           commdb.lib
-LIBRARY	          apsettingshandlerui.lib
-LIBRARY           ConnectionUiUtilities.lib
-LIBRARY           eikdlg.lib
-LIBRARY           centralrepository.lib
-LIBRARY           cmmanager.lib
-LIBRARY           xmlframework.lib	// Xml::CParser
-LIBRARY           aknskins.lib
-LIBRARY           hlplch.lib 
-LIBRARY           sysutil.lib
-LIBRARY           commonui.lib  //CErrorUi
-LIBRARY           ConnMon.lib
-LIBRARY           iaupdatefwupdate.lib
-LIBRARY           starterclient.lib
-
-DEBUGLIBRARY      flogger.lib
-
-
-// Path for resources
-SOURCEPATH .
-
-START RESOURCE	iaupdate.rss
-HEADER
-TARGETPATH	    APP_RESOURCE_DIR
-LANGUAGE_IDS
-END //RESOURCE
-
-
-START RESOURCE	iaupdate_reg.rss
-DEPENDS iaupdate.rsg
-TARGETPATH	/private/10003a3f/apps
-END //RESOURCE
-
-SMPSAFE
--- a/iaupdate/IAD/ui/group/iaupdate.rss	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1346 +0,0 @@
-/*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Resource definitions
-*
-*/
-
-
-
-NAME HELL
-
-#include <eikon.rh>
-#include <eikon.rsg>
-#include <avkon.rsg>
-#include <avkon.rh>
-#include <avkon.hrh>
-#include <avkon.mbg>
-#include <avkon.loc>
-#include <appinstui.loc>
-#include <appinfo.rh>
-#include <iaupdate.mbg>
-#include <iaupdate.loc>
-#include "iaupdate.hrh"
-#include <data_caging_paths_strings.hrh>
-
-
-// ---------------------------------------------------------
-//   
-//    Define the resource file signature 
-//    This resource should be empty.
-//
-// ---------------------------------------------------------
-//
-RESOURCE RSS_SIGNATURE { }
-
-// ---------------------------------------------------------
-//   
-//    Default Document Name
-//
-// ---------------------------------------------------------
-//
-RESOURCE TBUF r_default_document_name { buf=""; }
-
-// ---------------------------------------------------------
-//   
-//    Define default menu and CBA key.
-//
-// ---------------------------------------------------------
-//
-RESOURCE EIK_APP_INFO
-    {
-    status_pane = r_iaupdate_status_pane;
-    cba = r_iaupdate_softkeys_options_exit__options;
-    }
-        
-// ---------------------------------------------------------
-//   
-//    App Info
-//
-// ---------------------------------------------------------
-//
-RESOURCE LOCALISABLE_APP_INFO r_iaupdate_localisable_app_info
-	{
-	short_caption = qtn_swupdate_caption_grid_ph2;
-	caption_and_icon =
-		{
-		CAPTION_AND_ICON_INFO 
-			{
-			caption = qtn_swupdate_caption_list_ph2;
-			number_of_icons = 1;
-			icon_file = APP_BITMAP_DIR"\\iaupdate_aif.mif";
-			}
-		};
-	}
-
-
-
-
-// ---------------------------------------------------------
-//   
-//    Strings
-//
-// ---------------------------------------------------------
-//
-
-RESOURCE TBUF r_iaupdate_refreshing_update_list
-    {
-    buf = qtn_swupdate_refreshing_update_list;	
-    }
-
-RESOURCE TBUF r_iaupdate_downloading_note
-    {
-    buf = qtn_swupdate_downloading;
-    }
-
-RESOURCE TBUF r_iaupdate_installing_note
-    {    
-    buf = qtn_swupdate_installing;
-    }
-
-RESOURCE TBUF r_iaupdate_name_with_version
-    {
-    buf = qtn_swupdate_name_with_version;
-    }
-
-RESOURCE TBUF r_iaupdate_des_required_update_kb
-    {
-    buf = qtn_swupdate_required_update_kb;
-    }
-    
-RESOURCE TBUF r_iaupdate_des_required_update_mb
-    {
-    buf = qtn_swupdate_required_update_mb;
-    }
-
-RESOURCE TBUF r_iaupdate_des_critical_update_kb
-    {
-    buf = qtn_swupdate_critical_update_kb;
-    }
-    
-RESOURCE TBUF r_iaupdate_des_critical_update_mb
-    {
-    buf = qtn_swupdate_critical_update_mb;
-    }
-
-RESOURCE TBUF r_iaupdate_des_critical_update_no_size
-    {
-    buf = qtn_swupdate_critical_update_no_size;
-    }
-    
-RESOURCE TBUF r_iaupdate_des_recommended_update_kb
-    {
-    buf = qtn_swupdate_recommended_update_kb;
-    }
-    
-RESOURCE TBUF r_iaupdate_des_recommended_update_mb
-    {
-    buf = qtn_swupdate_recommended_update_mb;
-    }    
-    
-RESOURCE TBUF r_iaupdate_des_normal_update_kb
-    {
-    buf = qtn_swupdate_normal_update_kb;
-    }
-    
-RESOURCE TBUF r_iaupdate_des_normal_update_mb
-    {
-    buf = qtn_swupdate_normal_update_mb;
-    }
-
-RESOURCE TBUF r_iaupdate_update_with_pc
-    {
-    buf = qtn_swupdate_update_with_pc;
-    }
-    
-RESOURCE TBUF r_iaupdate_text_no_updates    
-    {    
-    buf = qtn_swupdate_empty_no_updates_available;
-    }
-
-RESOURCE TBUF r_iaupdate_refresh_failed    
-    {    
-    buf = qtn_swupdate_refresh_failed;
-    }
-    
-RESOURCE TBUF r_iaupdate_program_update
-    {
-    buf = qtn_swupdate_program_update;
-    }
-
-RESOURCE TBUF r_iaupdate_program_automatic_update_disabled
-    { 
-    buf = qtn_swupdate_program_automatic_update_disabled_ph2;
-    }
-
-
-//
-// pc udpate dialog resources
-//
-
-RESOURCE TBUF r_iaupdate_new_sw_title
-    {
-    buf = qtn_swupdate_new_sw_title;
-    }
-
-RESOURCE TBUF r_iaupdate_info_nsu_1
-    {
-    buf = qtn_swupdate_info_nsu_1;
-    }
-
-RESOURCE TBUF r_iaupdate_info_nsu_2
-    {
-    buf = qtn_swupdate_info_nsu_2;
-    }
-
-// -----------------------------------------------------------------------------
-//
-//    r_iaupdate_msk_mark
-//    Middle softkey label: Mark
-//
-// -----------------------------------------------------------------------------
-//  
-RESOURCE TBUF r_iaupdate_msk_mark
-    {
-    buf = qtn_msk_mark;	
-    }
-    
-// -----------------------------------------------------------------------------
-//
-//    r_iaupdate_msk_unmark
-//    Middle softkey label: Unmark
-//
-// -----------------------------------------------------------------------------
-//  
-RESOURCE TBUF r_iaupdate_msk_unmark
-    {
-    buf = qtn_msk_unmark;	
-    } 
-	    
-// ---------------------------------------------------------
-//   
-//    Define status pane.
-//
-// ---------------------------------------------------------
-//
-RESOURCE STATUS_PANE_APP_MODEL r_iaupdate_status_pane
-    {
-    layout = R_AVKON_STATUS_PANE_LAYOUT_USUAL;
-    panes =
-        {		
-        SPANE_PANE
-            {
-            id = EEikStatusPaneUidTitle;
-            type = EAknCtTitlePane;
-            resource = r_iaupdate_title_pane_text;
-            }
-        };
-    }
-    
-//----------------------------------------------------
-//   
-//    r_iaupdate_title_pane_text
-//    title pane resource for status pane
-//
-//----------------------------------------------------
-//
-RESOURCE TITLE_PANE r_iaupdate_title_pane_text
-    {
-    txt = qtn_swupdate_title_ph2;
-    }
-    
-
-// ---------------------------------------------------------
-//   
-//   r_iaupdate_refresh_dialog
-//   Refresh dialog
-//
-// ---------------------------------------------------------
-//
-
-RESOURCE DIALOG r_iaupdate_refresh_dialog
-    {
-    flags = EAknWaitNoteFlags;
-
-    items =
-        {
-        DLG_LINE
-            {
-            type = EAknCtNote;
-            id = EGeneralNote;
-            control = AVKON_NOTE
-                {
-                layout = EWaitLayout;
-                singular_label = qtn_swupdate_refreshing_update_list;
-                imagefile = AVKON_BITMAP_FILE;
-                imageid = EMbmAvkonQgn_note_progress;
-                imagemask = EMbmAvkonQgn_note_progress_mask;
-                animation = R_QGN_GRAF_WAIT_BAR_ANIM;
-                };
-            }
-        };
-    }
-    
-   
-  
-
-
-//------------------------------------------------------------------------------
-//
-//    r_iaupdate_wait_dialog
-//    Defines a wait dialog
-//
-//------------------------------------------------------------------------------
-//
-RESOURCE DIALOG r_iaupdate_wait_dialog
-    {
-    flags = EAknWaitNoteFlags;
-    buttons = R_AVKON_SOFTKEYS_CANCEL;
-    items =
-        {
-        DLG_LINE
-            {
-            type = EAknCtNote;
-            id = EGeneralNote;
-            control = AVKON_NOTE
-                {
-                layout = EWaitLayout;
-                animation = R_QGN_GRAF_WAIT_BAR_ANIM;                
-                };
-            }
-        };
-    }
-
-//------------------------------------------------------------------------------
-//
-//    r_iaupdate_progress_dialog
-//    Defines a progress dialog
-//
-//------------------------------------------------------------------------------
-//
-RESOURCE DIALOG r_iaupdate_progress_dialog
-    {
-    flags = EAknProgressNoteFlags;
-    buttons = R_AVKON_SOFTKEYS_CANCEL;
-    items =
-        {
-        DLG_LINE
-            {
-            type = EAknCtNote;
-            id = EAknNoteProgressBar;
-            control = AVKON_NOTE
-                {
-                layout = EProgressLayout;                            
-                };
-            }
-        };
-    }
-
-//----------------------------------------------------
-//
-// r_fota_check_wait_note
-//
-//----------------------------------------------------
-//
-RESOURCE DIALOG r_fota_check_wait_note
-    {
-    flags = EAknWaitNoteFlags;
-    buttons = R_AVKON_SOFTKEYS_CANCEL;
-    items =
-        {
-        DLG_LINE
-            {
-            type = EAknCtNote;
-            id = EGeneralNote;
-            control = AVKON_NOTE 
-                {
-                layout = EWaitLayout;
-                singular_label = qtn_gen_note_processing;
-                animation = R_QGN_GRAF_WAIT_BAR_ANIM;
-                };
-            }
-        };
-    } 
-
-
-//------------------------------------------------------------------------------
-// Softkey resource
-//------------------------------------------------------------------------------
-//
-RESOURCE CBA r_iaupdate_softkeys_options_exit__options
-    {
-    buttons =
-        {
-        CBA_BUTTON
-            {
-            id = EAknSoftkeyOptions;
-            txt = text_softkey_option;
-            },
-        CBA_BUTTON
-            {
-            id = EAknSoftkeyExit;
-            txt = text_softkey_exit;
-            },
-        CBA_BUTTON
-            {
-            id = EAknSoftkeyOptions;
-            txt = text_softkey_option;
-            }
-        };
-    }
-
-
-// ---------------------------------------------------------
-//   
-//   r_iaupdate_main_view
-//   Main view
-//
-// ---------------------------------------------------------
-//
-RESOURCE AVKON_VIEW r_iaupdate_main_view
-    {
-    menubar = r_iaupdate_main_menubar;
-    cba = r_iaupdate_softkeys_options_exit__options;
-    toolbar = r_iaupdate_main_toolbar;
-    }
-
-    
-// ---------------------------------------------------------
-//   
-//   r_iaupdate_text_title_main_view
-//   title pane resource for status pane in main view
-//
-// ---------------------------------------------------------
-//   
-RESOURCE TBUF r_iaupdate_text_title_main_view
-    {
-    buf = qtn_swupdate_title_ph2;
-    }
-
-// ---------------------------------------------------------
-//   
-//   r_iaupdate_main_menubar
-//   Menu for main view
-//
-// ---------------------------------------------------------
-//
-
-RESOURCE MENU_BAR r_iaupdate_main_menubar
-    {
-    titles =
-        {
-        MENU_TITLE {menu_pane = r_iaupdate_main_menu;}
-        };
-    }
-
-// ---------------------------------------------------------
-//   
-//   r_iaupdate_main_menu
-//   Menu for main view
-//
-// ---------------------------------------------------------
-//
-
-RESOURCE MENU_PANE r_iaupdate_main_menu
-    {
-    items = 
-        {
-        MENU_ITEM 
-            {
-            command = EIAUpdateCmdStartUpdate; 
-            txt = qtn_swupdate_option_start_update;
-            },
-        MENU_ITEM
-            {
-            command = EIAUpdateCmdUpdateWithPC;
-            txt = qtn_swupdate_option_update_with_pc;
-            },
-        MENU_ITEM 
-            {
-            command = EAknCmdMark; 
-            txt = qtn_options_list_mark_one;
-            flags = EEikMenuItemAction;  
-            },
-        MENU_ITEM 
-            {
-            command = EAknCmdUnmark; 
-            txt = qtn_options_list_unmark_one;
-            flags = EEikMenuItemAction;
-            },
-        MENU_ITEM 
-            {
-            command = EIAUpdateCmdUpdateDetails; 
-            txt = qtn_swupdate_option_update_details;
-            flags = EEikMenuItemSpecific; 
-            },
-        MENU_ITEM 
-            {
-            command = EIAUpdateCmdUpdateHistory; 
-            txt = qtn_swupdate_option_update_history;
-            },
-        MENU_ITEM 
-            {
-            command = EIAUpdateCmdSettings; 
-            txt = qtn_swupdate_option_settings;
-            },
-        MENU_ITEM 
-            {
-            command = EIAUpdateCmdDisclaimer; 
-            txt = qtn_swupdate_option_disclaimer;
-            },
-        MENU_ITEM 
-            {
-            command = EAknCmdHelp;
-            txt = qtn_options_help;
-            },
-        MENU_ITEM 
-            {
-            command = EAknCmdExit;   
-            txt = qtn_options_exit;
-            }
-            
-        };
-    }
-
-
-//----------------------------------------------------
-//
-//    r_iaupdate_main_toolbar
-//
-//
-//
-//----------------------------------------------------
-//
-RESOURCE AVKON_TOOLBAR r_iaupdate_main_toolbar
-    {
-    flags = KAknToolbarFixed;
-    items =
-        {
-        TBAR_CTRL
-            {
-            type = EAknCtButton;
-            id = EIAUpdateCmdStartUpdate;
-            control = AVKON_BUTTON
-                {
-                flags = KAknButtonSizeFitText; 
-                states =
-                    {
-                    AVKON_BUTTON_STATE
-                        {
-                        helptxt = qtn_swupdate_tb_tooltip_start_update;
-                        bmpfile = BITMAP_DIR"\\iaupdate.mif";
-#ifndef __S60_32__
-                        bmpid = EMbmIaupdateQgn_indi_tb_swupd_start;
-                        bmpmask = EMbmIaupdateQgn_indi_tb_swupd_start_mask;
-#endif
-                        } 
-                    };            
-                };
-            },
-        TBAR_CTRL
-            {
-            type = EAknCtButton;
-            id = EIAUpdateCmdMarkedUpdateDetails;
-            control = AVKON_BUTTON
-                {
-                flags = KAknButtonSizeFitText; 
-                states =
-                    {
-                    AVKON_BUTTON_STATE
-                        {
-                        helptxt = qtn_swupdate_tb_tooltip_details;
-                        bmpfile = BITMAP_DIR"\\iaupdate.mif";
-#ifndef __S60_32__
-                        bmpid = EMbmIaupdateQgn_indi_tb_swupd_detail;
-                        bmpmask = EMbmIaupdateQgn_indi_tb_swupd_detail_mask;
-#endif
-                        }  
-                    };            
-                };
-            },
-        TBAR_CTRL
-            {
-            type = EAknCtButton;
-            id = EIAUpdateCmdUpdateHistory;
-            control = AVKON_BUTTON
-                {
-                flags = KAknButtonSizeFitText; 
-                states =
-                    {
-                    AVKON_BUTTON_STATE
-                        {
-                        helptxt = qtn_swupdate_tb_tooltip_history;
-                        bmpfile = BITMAP_DIR"\\iaupdate.mif";
-#ifndef __S60_32__
-                        bmpid = EMbmIaupdateQgn_indi_tb_swupd_history;
-                        bmpmask = EMbmIaupdateQgn_indi_tb_swupd_history_mask;
-#endif
-                        }  
-                    };            
-                };
-            }
-        };
-    }
-
-
-
-
-
-   
-// ---------------------------------------------------------
-//   
-//   r_iaupdate_updates_list
-//   List of updates available
-//
-// ---------------------------------------------------------
-RESOURCE LISTBOX r_iaupdate_updates_list
-    {
-    flags = EAknListBoxMultiselectionList|EAknListBoxItemSpecificMenuAlwaysShown;
-    }
-
-	    
-// ---------------------------------------------------------
-//   
-//   r_iaupdate_history_list
-//   List of update history
-//
-// ---------------------------------------------------------
-RESOURCE LISTBOX r_iaupdate_history_list
-    {
-    flags = EAknListBoxSelectionList;
-    }
-
-// ---------------------------------------------------------
-//   
-//   r_iaupdate_history_view
-//   History view
-//
-// ---------------------------------------------------------
-//
-RESOURCE AVKON_VIEW r_iaupdate_history_view
-    {
-    cba = R_AVKON_SOFTKEYS_BACK;
-    }
-       
-
-
-// ---------------------------------------------------------
-//   
-//   Strings
-//
-// ---------------------------------------------------------
-//
-
-
-RESOURCE TBUF r_iaupdate_navipane_kilobyte 
-    {
-    buf = qtn_swupdate_navipane_kilobyte;
-    }
-
-RESOURCE TBUF r_iaupdate_navipane_megabyte 
-    {
-    buf = qtn_swupdate_navipane_megabyte;
-    }
-
-     
-RESOURCE TBUF r_iaupdate_no_updates_done
-    { 
-    buf = qtn_swupdate_no_updates_done_main_pane;
-    }
-
-RESOURCE TBUF r_iaupdate_text_download_cancelled
-    {
-    buf = qtn_swupdate_download_cancelled;
-    }
-    
-RESOURCE TBUF r_iaupdate_text_download_failed
-    {
-    buf = qtn_swupdate_download_failed;
-    }
-
-RESOURCE TBUF r_iaupdate_text_install_cancelled
-    {
-    buf = qtn_swupdate_installation_cancelled;
-    }
-    
-RESOURCE TBUF r_iaupdate_text_install_failed
-    {
-    buf = qtn_swupdate_installation_failed;
-    }
-
-RESOURCE TBUF r_iaupdate_text_update_successfull
-    {
-    buf = qtn_swupdate_update_successful;
-    }
-
-RESOURCE TBUF r_iaupdate_text_update_no_memory
-    {
-    buf = qtn_swupdate_not_enough_memory;
-    }
-
-RESOURCE TBUF r_iaupdate_text_title_pane_history
-    {
-    buf = qtn_swupdate_history_title;
-    }
-
-RESOURCE TBUF r_iaupdate_firmware_with_others
-    {
-    buf = qtn_swupdate_firmware_with_others;
-    }
-
-RESOURCE TBUF r_iaupdate_cannot_omit
-    {
-    buf = qtn_swupdate_cannot_omit;
-    }
-
-RESOURCE TBUF r_iaupdate_main_device_fw
-    {
-    buf  = qtn_swupdate_main_device_fw;
-    }
-
-//background check strings
-
-RESOURCE LBUF r_iaupdate_update_available
-    {
-    txt = qtn_swupdate_update_available;
-    }
-
-RESOURCE LBUF r_iaupdate_features_available
-    {
-    txt = qtn_swupdate_features_available_query;
-    }
-
-RESOURCE LBUF r_iaupdate_remind_later
-    {
-    txt = qtn_swupdate_remind_later;
-    }
-
-RESOURCE LBUF r_text_softkey_later
-    {
-    txt = text_softkey_later;
-    }
-
-RESOURCE LBUF r_text_softkey_show
-    {
-    txt = text_softkey_show;
-    }
-
-RESOURCE LBUF r_text_softkey_yes
-    {
-    txt = text_softkey_yes;
-    }
-
-RESOURCE LBUF r_text_softkey_no
-    {
-    txt = text_softkey_no;
-    }
-
-RESOURCE LBUF r_text_softkey_ok
-    {
-    txt = text_softkey_ok;
-    }
-
-RESOURCE LBUF r_text_softkey_cancel
-    {
-    txt = text_softkey_cancel;
-    }
-
-//
-// Utility resources
-//
-
-
-//------------------------------------------------------------------------------
-// message query resource
-//------------------------------------------------------------------------------
-//
-RESOURCE DIALOG r_iaupdate_message_query
-    {
-    flags = EGeneralQueryFlags;
-    buttons = R_AVKON_SOFTKEYS_OK_EMPTY__OK;
-    items=
-        {
-        DLG_LINE 
-            {
-            type = EAknCtPopupHeadingPane;
-            id = EAknMessageQueryHeaderId;
-            control = AVKON_HEADING
-                {
-                };
-            },
-        DLG_LINE
-            {
-            type = EAknCtMessageQuery;
-            id = EAknMessageQueryContentId;
-            control = AVKON_MESSAGE_QUERY
-                {
-                };
-            }
-        };
-    }
-
-
-//------------------------------------------------------------------------------
-// confirmation query resource
-//------------------------------------------------------------------------------
-//
-RESOURCE DIALOG r_iaupdate_confirmation_query
-	{ 
-	flags=EGeneralQueryFlags;
-	buttons=R_AVKON_SOFTKEYS_YES_NO__YES;
-	items=
-		{
-		DLG_LINE
-			{
-			type=EAknCtQuery;
-			id=EGeneralQuery;
-			control=AVKON_CONFIRMATION_QUERY
-				{
-				layout=EConfirmationLayout;
-				};
-			}
-		};
-	} 
-
-//------------------------------------------------------------------------------
-// information query resource
-//------------------------------------------------------------------------------
-//
-RESOURCE DIALOG r_iaupdate_information_query
-    {
-    flags=EGeneralQueryFlags;
-    buttons = R_AVKON_SOFTKEYS_OK_EMPTY__OK;
-    items=
-        {
-        DLG_LINE
-            {
-            type=EAknCtQuery;
-            id=EGeneralQuery;
-            control= AVKON_CONFIRMATION_QUERY
-                {
-                layout = EConfirmationQueryLayout;
-                animation = R_QGN_NOTE_INFO_ANIM;
-                };
-            }
-        };
-    }
-
-
-//
-// Not enough memory dialog resources
-//
-
-RESOURCE TBUF r_iaupdate_insufficient_memory
-    {
-    buf = qtn_swupdate_insufficient_memory;
-    }
-
-//
-// Automatic updates check dialog resources
-//
-
-    
-RESOURCE TBUF r_iaupdate_turn_on_autoupd_checks
-    {
-    buf = qtn_swupdate_turn_on_autoupd_checks;
-    }
-
-
-//
-// Phone restart query dialog resources
-//
-RESOURCE TBUF r_iaupdate_phone_restart_query
-    {
-    buf = qtn_swupdate_phone_restart_query;
-    }
-
-
-//
-// Activate automatic network connections dialog resources
-//
-
-RESOURCE TBUF r_iaupdate_allow_nw_title
-    {
-    buf = qtn_swupdate_allow_nw_title;
-    }
-   
-//
-// Dependencies found dialog resources
-//
-
-RESOURCE TBUF r_iaupdate_dependency_title
-    {
-    buf = qtn_swupdate_dependency_title; 	
-    }
-
-RESOURCE TBUF r_iaupdate_dependency_mark_one
-    {
-    buf = qtn_swupdate_dependency_mark_one; 
-    }    
-
-RESOURCE TBUF r_iaupdate_dependency_unmark_one
-    {
-    buf = qtn_swupdate_dependency_unmark_one; 	
-    }
-
-RESOURCE TBUF r_iaupdate_dependency_mark_many
-    {
-    buf = qtn_swupdate_dependency_mark_many; 	
-    }
-    
-RESOURCE TBUF r_iaupdate_dependency_unmark_many
-    {
-    buf = qtn_swupdate_dependency_unmark_many; 	
-    }
-
-RESOURCE TBUF r_iaupdate_separator
-    {
-    buf = qtn_swupdate_separator;
-    }
-
-
-//
-// Update status dialog resources
-//
-
-RESOURCE TBUF r_iaupdate_status_dialog_title
-    {
-    buf = qtn_swupdate_results;
-    }
-
-RESOURCE TBUF r_iaupdate_status_dialog_successful
-    {
-    buf = qtn_swupdate_successful;
-    }
-
-RESOURCE TBUF r_iaupdate_status_dialog_successful_one
-    {
-    buf = qtn_swupdate_successful_one;
-    }
-RESOURCE TBUF r_iaupdate_status_dialog_cancelled
-    {
-    buf = qtn_swupdate_cancelled;
-    }
-
-RESOURCE TBUF r_iaupdate_status_dialog_cancelled_one
-    {
-    buf = qtn_swupdate_cancelled_one;
-    }
-
-RESOURCE TBUF r_iaupdate_status_dialog_failed
-    {
-    buf = qtn_swupdate_failed;
-    }
-
-RESOURCE TBUF r_iaupdate_status_dialog_failed_one
-    {
-    buf = qtn_swupdate_failed_one;
-    }
-
-RESOURCE TBUF r_iaupdate_close_all
-    {
-    buf = qtn_swupdate_close_all;	
-    }    
-
-RESOURCE TBUF r_iaupdate_status_dialog_text_link
-    {
-    buf = qtn_swupdate_text_link;
-    }
-
-
-
-//
-// Update details dialog resources
-//
-
-RESOURCE TBUF r_iaupdate_details_dialog_title
-    {
-    buf = qtn_swupdate_details_title;
-    }
-
-RESOURCE TBUF r_iaupdate_details_dialog_app_name
-    {
-    buf = qtn_swupdate_application_name;
-    }
-
-RESOURCE TBUF r_iaupdate_details_dialog_description
-    {
-    buf = qtn_swupdate_description;
-    }
-
-RESOURCE TBUF r_iaupdate_details_dialog_version
-    {
-    buf = qtn_swupdate_version;
-    }
-
-RESOURCE TBUF r_iaupdate_details_dialog_version_format
-    {
-    buf = qtn_swupdate_version_format;
-    }
-
-RESOURCE TBUF r_iaupdate_details_dialog_file_size
-    {
-    buf = qtn_swupdate_file_size;
-    }
-
-RESOURCE TBUF r_iaupdate_details_dialog_size_kilobyte
-    {
-    buf = qtn_swupdate_size_kilobyte;
-    }
-
-RESOURCE TBUF r_iaupdate_details_dialog_size_megabyte
-    {
-    buf = qtn_swupdate_size_megabyte;
-    }
-
-RESOURCE TBUF r_iaupdate_fw_description
-    {
-    buf = qtn_swupdate_fw_description_text;
-    }
-
-
-//
-// Settings dialog resources
-//
-
-RESOURCE TBUF r_iaupdate_setting_dialog_title
-    {
-    buf = qtn_swupdate_setting_dialog_title;
-    }
-
-
-RESOURCE MENU_BAR r_iaupdate_setting_dialog_menu
-	{
-	titles= 
-	    { 
-	    MENU_TITLE 
-                { 
-	        menu_pane=r_iaupdate_setting_dialog_menu_pane;
-	        }
-	    };
-	}
-
-
-RESOURCE MENU_PANE r_iaupdate_setting_dialog_menu_pane
-    {
-    items=
-        {
-	MENU_ITEM { command=EAknCmdOpen; txt=qtn_options_change; flags = EEikMenuItemAction; },
-		
-    	MENU_ITEM { command=EAknCmdHelp; txt=qtn_options_help; },
-    	
-	MENU_ITEM { command=EAknCmdExit; txt=qtn_options_exit; }        
-        };
-    }
-
-
-//------------------------------------------------------------------------------
-// Softkey resource
-//------------------------------------------------------------------------------
-//
-RESOURCE CBA r_cba_options_back_change
-    {
-    buttons =
-        {
-        CBA_BUTTON
-            {
-            id = EAknSoftkeyOptions;
-            txt = text_softkey_option;
-            },
-        CBA_BUTTON
-            {
-            id = EAknSoftkeyBack;
-            txt = text_softkey_back;
-            },
-        CBA_BUTTON
-            {
-            id = EAknSoftkeyOpen;
-            txt = qtn_msk_change;
-            }
-        };
-    }
-
-
-
-// -----------------------------------------------------------------------------
-// setting dialog resource.
-// -----------------------------------------------------------------------------
-//
-RESOURCE DIALOG r_iaupdate_setting_dialog
-    {
-    flags=EEikDialogFlagWait | 
-          EEikDialogFlagFillAppClientRect | 
-          EEikDialogFlagNotifyEsc | 
-          EEikDialogFlagCbaButtons;
-    
-    buttons = r_cba_options_back_change;
-    
-    items=
-        {
-        DLG_LINE
-            {
-            type=EAknCtLastControlId;
-	          itemflags=EEikDlgItemTakesEnterKey;
-	          id=EIAUpdateSettingDialogList;
-	          control=AVKON_SETTING_ITEM_LIST
-	          {
-	          items =
-                  {
-                  AVKON_SETTING_ITEM
-                      {
-                      identifier = EIAUpdateSettingAccessPoint;
-                      name = qtn_swupdate_default_access_point;
-                      },
-                 AVKON_SETTING_ITEM
-                     {
-                     identifier = EIAUpdateSettingAutoUpdateCheck;
-                     name = qtn_swupdate_automatic_update_checks;
-                     setting_page_resource = r_iaupdate_auto_update_check_setting_page;
-                     associated_resource = r_iaupdate_auto_update_check_texts;
-                     }
-                 };
-	          };
-            }
-        };
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// r_iaupdate_default_connection
-// ?description
-//
-// -----------------------------------------------------------------------------
-//
-RESOURCE TBUF r_iaupdate_default_connection
-    {
-    buf = qtn_swupdate_default_connection;
-    }
-
-
-
-// -----------------------------------------------------------------------------
-//
-// r_iaupdate_roaming_warning_texts
-// ?description
-//
-// -----------------------------------------------------------------------------
-//
-RESOURCE AVKON_POPUP_SETTING_TEXTS r_iaupdate_auto_update_check_texts
-    {
-    flags = 0;
-    setting_texts_resource = r_iaupdate_auto_update_check_texts_array;
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// r_iaupdate_auto_update_check_texts
-// ?description
-//
-// -----------------------------------------------------------------------------
-//
-RESOURCE ARRAY r_iaupdate_auto_update_check_texts_array
-    {
-    items =
-        {
-        AVKON_ENUMERATED_TEXT { value = EIAUpdateSettingValueEnable; 
-                                text = qtn_swupdate_checks_enabled; },
-        AVKON_ENUMERATED_TEXT { value = EIAUpdateSettingValueDisableWhenRoaming;  
-                                text = qtn_swupdate_checks_no_when_roaming; },
-        AVKON_ENUMERATED_TEXT { value = EIAUpdateSettingValueDisable;  
-                                text = qtn_swupdate_checks_disabled; }
-        };
-    }
-    
-// -----------------------------------------------------------------------------
-//
-// r_iaupdate_roaming_warning_texts
-// ?description
-//
-// -----------------------------------------------------------------------------
-//
-RESOURCE AVKON_POPUP_SETTING_TEXTS r_iaupdate_roaming_warning_texts
-    {
-    flags = 0;
-    setting_texts_resource = r_iaupdate_roaming_warning_texts_array;
-    }
-
-
-RESOURCE ARRAY r_iaupdate_roaming_warning_texts_array
-    {
-    items =
-        {
-        AVKON_ENUMERATED_TEXT { value = EIAUpdateSettingValueOn; 
-                                text = qtn_swupdate_roaming_warn_on; },
-        AVKON_ENUMERATED_TEXT { value = EIAUpdateSettingValueOff;  
-                                text = qtn_swupdate_roaming_warn_off; }
-        };
-    }
-    
-
-// -----------------------------------------------------------------------------
-//
-// r_iaupdate_auto_update_check_setting_page
-// ?description
-//
-// -----------------------------------------------------------------------------
-//
-RESOURCE AVKON_SETTING_PAGE r_iaupdate_auto_update_check_setting_page
-    {
-    label = qtn_swupdate_automatic_update_checks;
-    softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
-    type = EAknCtPopupSettingList;
-    editor_resource_id = r_iaupdate_empty_popup_setting_list_control;
-    }
-
-    
-// -----------------------------------------------------------------------------
-//
-// r_iaupdate_roaming_warning_setting_page
-// ?description
-//
-// -----------------------------------------------------------------------------
-//
-RESOURCE AVKON_SETTING_PAGE r_iaupdate_roaming_warning_setting_page
-    {
-    label = qtn_swupdate_roaming_warning;
-    softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
-    type = EAknCtPopupSettingList;
-    editor_resource_id = r_iaupdate_empty_popup_setting_list_control;
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// r_iaupdate_empty_popup_setting_list_control
-// ?description
-//
-// -----------------------------------------------------------------------------
-//
-RESOURCE POPUP_SETTING_LIST r_iaupdate_empty_popup_setting_list_control
-    {
-    }
-
-
-
-//
-// Agreement dialog resources
-//
-
-RESOURCE TBUF r_iaupdate_agreement_dialog_title
-    {
-    buf = qtn_swupdate_nokia_agreement_title;
-    }
-
-RESOURCE TBUF r_iaupdate_agreement_dialog_text_1
-    {
-    buf = qtn_swupdate_nokia_agreement_1_phase2;
-    }
-
-RESOURCE TBUF r_iaupdate_agreement_dialog_text_2
-    {
-    buf = qtn_swupdate_nokia_agreement_2_phase2;
-    }
-
-RESOURCE TBUF r_iaupdate_agreement_dialog_text_3
-    {
-    buf = qtn_swupdate_nokia_agreement_3_phase2;
-    }
-
-RESOURCE TBUF r_iaupdate_agreement_dialog_text_4
-    {
-    buf = qtn_swupdate_nokia_agreement_4_phase2;
-    }
-    
-RESOURCE TBUF r_iaupdate_agreement_dialog_text_5
-    {
-    buf = qtn_swupdate_nokia_agreement_5_phase2;
-    }
-    
-RESOURCE TBUF r_iaupdate_agreement_dialog_text_6
-    {
-    buf = qtn_swupdate_nokia_agreement_6_phase2;
-    }
-    
-RESOURCE TBUF r_iaupdate_agreement_dialog_text_7
-    {
-    buf = qtn_swupdate_nokia_agreement_7_phase2;
-    }
-    
-RESOURCE TBUF r_iaupdate_agreement_dialog_text_8
-    {
-    buf = qtn_swupdate_nokia_agreement_8_phase2;
-    }
-    
-RESOURCE TBUF r_iaupdate_agreement_dialog_text_9
-    {
-    buf = qtn_swupdate_nokia_agreement_9_phase2;
-    }
-    
-RESOURCE TBUF r_iaupdate_agreement_dialog_copyright
-    {
-    buf = qtn_swupdate_nokia_agreement_copyright_phase2;
-    }
-//------------------------------------------------------------------------------
-//
-//    r_iaupdate_softkeys_accept_decline__accept
-//    Defines softkeys accept, decline, accept (MSK)
-//
-//------------------------------------------------------------------------------
-//
-RESOURCE CBA r_iaupdate_softkeys_accept_decline__accept
-    {
-    buttons =
-        {
-        CBA_BUTTON { id = EAknSoftkeyYes; txt = text_softkey_accept; },
-        CBA_BUTTON { id = EAknSoftkeyNo; txt = qtn_swupdate_softkey_decline; },
-        CBA_BUTTON { id = EAknSoftkeyYes; txt = text_softkey_accept; }
-        };
-    }
-
-
-//------------------------------------------------------------------------------
-//
-//    r_iaupdate_softkeys_now_later__now
-//    Defines softkeys now, later, now (MSK)
-//
-//------------------------------------------------------------------------------
-//
-RESOURCE CBA r_iaupdate_softkeys_now_later__now
-    {
-    buttons =
-        {
-        CBA_BUTTON { id = EIAUpdateSoftkeyNow; txt = qtn_swupdate_now; },
-        CBA_BUTTON { id = EIAUpdateSoftkeyLater; txt = qtn_swupdate_later; },
-        CBA_BUTTON { id = EIAUpdateSoftkeyNow; txt = qtn_swupdate_now; }
-        };
-    }
-    
-//------------------------------------------------------------------------------
-//
-//    r_iaupdate_softkeys_continue_cancel__continue
-//    Defines softkeys continue, canclel, continue (MSK)
-//
-//------------------------------------------------------------------------------
-//
-RESOURCE CBA r_iaupdate_softkeys_continue_cancel__continue
-    {
-    buttons =
-        {
-        CBA_BUTTON { id = EAknSoftkeyOk; txt = text_softkey_continue; },
-        CBA_BUTTON { id = EAknSoftkeyCancel; txt = text_softkey_cancel; },
-        CBA_BUTTON { id = EAknSoftkeyOk; txt = text_softkey_continue; }
-        };
-    }
-
--- a/iaupdate/IAD/ui/group/iaupdate_reg.rss	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   registration resource file
-*
-*/
-
-
-
-#include <appinfo.rh>
-#include <iaupdate.rsg>
-#include <data_caging_paths_strings.hrh>
-#include "iaupdateuids.h"
-
-UID2 KUidAppRegistrationResourceFile
-UID3 KIAUpdateUiUid
-
-RESOURCE APP_REGISTRATION_INFO 
-	{
-	app_file = "iaupdate";
-        localisable_resource_file = APP_RESOURCE_DIR"\\iaupdate";
-        localisable_resource_id = R_IAUPDATE_LOCALISABLE_APP_INFO;  
-        newfile = KAppDoesNotSupportNewFile;
-        hidden = KAppIsHidden; 
-	}
-
-// End of File
-
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/iaupdate.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,146 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:   
+#                
+
+
+TEMPLATE = app
+TARGET = iaupdate
+
+
+symbian {
+    TARGET.UID3 = 0x2000F85A
+    TARGET.CAPABILITY = CAP_APPLICATION TrustedUI PowerMgmt
+    rssrules = "hidden = KAppIsHidden;"
+    RSS_RULES += rssrules
+    TRANSLATIONS = swupdate.ts
+}
+
+DEPENDPATH += .
+DEPENDPATH += ./src
+DEPENDPATH += ./inc
+
+INCLUDEPATH += .
+INCLUDEPATH += ../engine/inc
+INCLUDEPATH += ../api/client/inc
+INCLUDEPATH += ../updater/inc
+INCLUDEPATH += ../updater/updaterfiles/inc
+INCLUDEPATH += ../firmwareupdate/inc
+INCLUDEPATH += ../launcher/inc
+
+CONFIG += hb
+
+# Input
+SOURCES += iaupdatemain.cpp \
+    iaupdateapplication.cpp \
+    iaupdatemainwindow.cpp \
+    iaupdatemainview.cpp \
+    iaupdateengine.cpp \
+    iaupdateagreement.cpp \
+    iaupdateautomaticcheck.cpp \
+    iaupdatedeputils.cpp \ 
+    iaupdatefirsttimeinfo.cpp \
+    iaupdategloballockhandler.cpp \
+    iaupdateinstallationlistener.cpp \
+    iaupdatenodefilter.cpp \
+    iaupdateparametersfilemanager.cpp \
+    iaupdatequeryhistory.cpp \
+    iaupdaterefreshhandler.cpp \
+    iaupdateroaminghandler.cpp \ 
+    iaupdatestarter.cpp \
+    iaupdateuiconfigdata.cpp \
+    iaupdateuicontroller.cpp \
+    iaupdateuitimer.cpp \
+    iaupdateserviceprovider.cpp \
+    iaupdatewaitdialog.cpp \
+    iaupdatenodeid.cpp \
+    iaupdatetools.cpp \
+    iaupdatesettingdialog.cpp \
+    iaupdateresultsdialog.cpp \
+    iaupdatedialogutil.cpp
+
+    
+
+HEADERS = iaupdateapplication.h \
+    iaupdatemainwindow.h \
+    iaupdatemainview.h \
+    iaupdateengine.h \
+    iaupdatewaitdialog.h \
+    iaupdatewaitdialogobserver.h \
+    iaupdateagreement.h \
+    iaupdateautomaticcheck.h \
+    iaupdatedeputils.h \
+    iaupdatefileconsts.h \
+    iaupdatefirsttimeinfo.h \
+    iaupdategloballockhandler.h \
+    iaupdateinstallationlistener.h \
+    iaupdatenodefilter.h \
+    iaupdateparametersfilemanager.h \
+    iaupdateprivatecrkeys.h \
+    iaupdatequeryhistory.h \
+    iaupdaterefreshhandler.h \
+    iaupdaterefreshobserver.h \
+    iaupdaterequestobserver.h \
+    iaupdateresultsinfo.h \
+    iaupdateroaminghandler.h \
+    iaupdateroaminghandlerobserver.h \
+    iaupdatestarter.h \
+    iaupdatestarterobserver.h \
+    iaupdateuiconfigconsts.h \
+    iaupdateuiconfigdata.h \
+    iaupdateuicontroller.h \
+    iaupdateuicontrollerobserver.h \
+    iaupdateuidefines.h \
+    iaupdateuids.h \
+    iaupdateuitimer.h \
+    iaupdateserviceprovider.h \
+    iaupdatenodeid.h \
+    iaupdatetools.h \
+    iaupdatesettingdialog.h \
+    iaupdateresultsdialog.h \ 
+    iaupdatedialogutil.h
+
+
+LIBS += -lbafl
+LIBS += -liaupdateengine
+LIBS += -liaupdateapi
+LIBS += -liaupdatefwupdate
+LIBS += -liaupdaterfiles
+LIBS += -lflogger
+LIBS += -lxqservice
+LIBS += -lxqserviceutil
+LIBS += -lxqutils
+LIBS += -lcentralrepository
+LIBS += -lcmmanager
+LIBS += -lconnmon
+LIBS += -lefsrv
+LIBS += -lestor
+LIBS += -lsysutil
+LIBS += -lfeatmgr
+LIBS += -lcone
+LIBS += -lws32
+LIBS += -lapparc
+LIBS += -lapgrfx
+LIBS += -lstarterclient
+LIBS += -lcmapplsettingsui
+
+
+
+CONFIG += service
+
+SERVICE.FILE = service_conf.xml
+SERVICE.OPTIONS = embeddable
+
+
+RESOURCES = iaupdate.qrc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/iaupdate.qrc	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<RCC>
+    <qresource prefix="/xml">
+        <file>iaupdate_mainview.docml</file>
+    </qresource>
+</RCC>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/iaupdate_mainview.docml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<hbdocument version="0.4">
+    <object name="action" type="HbAction">
+        <string name="text" value="Start update"/>
+    </object>
+    <object name="action_1" type="HbAction">
+        <string name="text" value="Settings"/>
+    </object>
+    <object name="action_2" type="HbAction">
+        <string name="text" value="Disclaimer"/>
+    </object>
+    <widget name="view" type="HbView">
+        <widget name="content" role="HbView:widget" type="HbWidget">
+            <widget name="listWidget" type="HbListWidget">
+                <sizehint height="16.41791091514448un" type="PREFERRED" width="38.80597125397785un"/>
+            </widget>
+            <zvalue value="0.0"/>
+            <layout orientation="Vertical" type="linear">
+                 <linearitem itemname="listWidget"/>
+            </layout>
+        </widget>
+        <widget name="viewMenu" role="HbView:menu" type="HbMenu">
+            <ref object="action" role="HbMenu:addAction"/>
+            <ref object="action_1" role="HbMenu:addAction"/>
+            <ref object="action_2" role="HbMenu:addAction"/>
+        </widget>
+        <widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
+            <ref object="action" role="HbToolBar:addAction"/>
+        </widget>
+        <string name="title" value="Software update"/>
+    </widget>
+    <metadata display="QHD portrait" unit="un"/>
+</hbdocument>
--- a/iaupdate/IAD/ui/inc/iaupdate.hrh	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdate.hrh	Tue Aug 31 15:21:33 2010 +0300
@@ -14,35 +14,13 @@
 * Description:    
 *
 */
-
-
-
 #ifndef __IAUPDATE_HRH__
 #define __IAUPDATE_HRH__
 
-/** iaupdate enumerate command codes */
-enum TIAUpdateCommandId
-    {
-    EIAUpdateCmdDummy = 0x6000,
-    EIAUpdateCmdStartUpdate,
-    EIAUpdateCmdUpdateWithPC,
-    EIAUpdateCmdUpdateDetails,
-    EIAUpdateCmdMarkedUpdateDetails,
-    EIAUpdateCmdUpdateHistory,
-    EIAUpdateCmdSettings,
-    EIAUpdateCmdDisclaimer,
-    EIAUpdateCmdHistoryViewExit,
-    EIAUpdateSoftkeyNow,
-    EIAUpdateSoftkeyLater
-    };
-    
+
 
-/** IAUpdate views */
-enum TIAUpdateViewId 
-    {
-    EIAUpdateMainViewId = 0,
-    EIAUpdateHistoryViewId
-    };
+
+
 
 enum TIAUpdateSettingDialog 
     {
--- a/iaupdate/IAD/ui/inc/iaupdateaccesspointhandler.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Header file of CIAUpdateAccessPointHandler class
-*
-*/
-
-
-
-#ifndef IAUPDATEACCESSPOINTHANDLER_H
-#define IAUPDATEACCESSPOINTHANDLER_H
-
-
-//  INCLUDES
-#include <e32base.h>
-
-// Access point selection
-#include <cmmanager.h>
-
-//FORWARD DECLARATIONS
-class CCmApplicationSettingsUi;
-
-
-/**
-* CIAUpdateAccessPointHandler 
-*
-* CIAUpdateAccessPointHandler is for setting internet access points.
-*/
-class CIAUpdateAccessPointHandler : public CBase
-    {
-    public:
-	enum TExitMode
-		{
-	    EDialogSelect,
-	    EDialogCancel,
-	    EDialogExit
-		};
-   
-    public:
-        /**
-        * Two-phased constructor.
-        */
-        static CIAUpdateAccessPointHandler* NewL();
-
-	    /**
-        * Destructor.
-        */
-        virtual ~CIAUpdateAccessPointHandler();
-
-    private:
-        /**
-        * C++ default constructor.
-        */
-	    CIAUpdateAccessPointHandler();
-
-        /**
-        * By default Symbian 2nd phase constructor is private.
-        */
-	    void ConstructL();
-
-    public: //functions
-	    /**
-        * Displays dialog for selecting one access point.
-        * @return ETrue if user selected access point, EFalse otherwise.
-        */
-        TInt ShowApSelectDialogL( TInt& aItemUid, HBufC*& aItemName );
-	          
-        /**
-        * Gets access point name
-		* @param aItemUid Access point id
-		* @paran aName Access point name
-        * @return Error value.
-        */
-        TInt GetApNameL( TInt aItemUid, HBufC*& aItemName );
-       
-        /**
-        * Get for Default Connection text
-		* @param aLabelText Localised text for "Default connection" text
-        */
-        void GetDefaultConnectionLabelL( HBufC*& aLabelText ); 
-    
-    private:  //data
-    	TBool iIdAppCsdSupport;
-    	
-    	CCmApplicationSettingsUi* iCmUi;
-    	RCmManager iCmManager;
-    };
-
-
-#endif  //IAUPDATEACCESSPOINTHANDLER_H
-            
-// End of File
--- a/iaupdate/IAD/ui/inc/iaupdateagreement.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdateagreement.h	Tue Aug 31 15:21:33 2010 +0300
@@ -24,7 +24,7 @@
 #include <e32base.h>
 
 // FORWARD DECLARATIONS
-
+class HbAction;
 
 // CLASS DECLARATION
 /**
@@ -62,12 +62,7 @@
     * @return True value if agreement accepted 
     */
     TBool AcceptAgreementL();
-    
-    /**
-    * Shows Nokia agreement of Application Update 
-    */
-    void ShowAgreementL();
-    
+        
     /**
     * Is Nokia agreement of Application Update accepted by an user
     *
@@ -89,16 +84,7 @@
      */
     void ConstructL();
     
-    /**
-    * Shows agreement dialog
-    * 
-    * @param aCbaResource Resource id of CBA
-    *
-    * @return Value of user selection 
-    */
-    TInt ShowDialogL( TInt aCbaResourceId );
-    
-    
+       
 private: //data
     
     };
--- a/iaupdate/IAD/ui/inc/iaupdateapplication.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdateapplication.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,56 +11,30 @@
 *
 * Contributors:
 *
-* Description:   This file contains the header file of the CIAUpdateApplication
+* Description:   This file contains the header file of the IAUpdateApplication
 *                class 
 *
 */
 
-
-
-#ifndef __IAUPDATE_APPLICATION_H__
-#define __IAUPDATE_APPLICATION_H__
+#ifndef IAUPDATEAPPLICATION_H_
+#define IAUPDATEAPPLICATION_H_
 
-// INCLUDES
-#include <aknapp.h>
-
-#include "iaupdateuids.h"
+#include <QSharedPointer>
+#include <hbapplication.h>
 
-// CONSTANTS
-// UID for the application, this should correspond to the uid defined in the mmp file
-static const TUid KUidIAUpdateApp = { KIAUpdateUiUid };
-
+// forward declarations
+class IAUpdateEngine;
+class IAUpdateMainWindow;
 
-/**
-* CAppMngrApp application class.
-* Provides factory to create concrete document object and
-* application server object
-*/
-class CIAUpdateApplication : public CAknApplication
+class IAUpdateApplication : public HbApplication
     {
+public:
+    IAUpdateApplication(int argc, char* argv[]);
+    virtual ~IAUpdateApplication();
     
-private:  // from CAknApplication
-
-    /**
-    * Returns application's UID 
-    * @return The UID value 
-    */
-    TUid AppDllUid() const;
+private:
+    IAUpdateEngine *mEngine;         // owned
+    QSharedPointer<IAUpdateMainWindow> mMainWindow; // owned
+    };
 
-    /**
-    * From CApaApplication, creates CAppMngrDocument document object.
-    * @return A pointer to the created document object.
-    */
-    CApaDocument* CreateDocumentL();
-    
-    /**
-    * Creates application server.
-    * @param aAppServer Instance of application server class
-    */
-    void NewAppServerL( CApaAppServer*& aAppServer );
-    };
-    
-
-#endif // __IAUPDATE_APPLICATION_H__
-
-// End of File
\ No newline at end of file
+#endif /* IAUPDATEAPPLICATION_H_ */
--- a/iaupdate/IAD/ui/inc/iaupdateappui.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,446 +0,0 @@
-/*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateAppUi class 
-*
-*/
-
-
-
-#ifndef __IAUPDATE_APPUI_H__
-#define __IAUPDATE_APPUI_H__
-
-//INCLUDES
-#include <e32base.h>
-#include <aknViewAppUi.h> 
-#include <cmmanagerext.h>
-
-#include "iaupdateuidefines.h"
-#include "iaupdateuicontrollerobserver.h"
-#include "iaupdatedialogutil.h"
-#include "iaupdateuitimerobserver.h"
-
-// FORWARD DECLARATIONS
-class CIAUpdateMainView;
-class CIAUpdateHistoryView;
-class CIAUpdateUiController;
-class CIAUpdateParameters;
-class MIAUpdateRequestObserver;
-class CIAUpdateGlobalLockHandler;
-class CIAUpdateUITimer;
-
-/*! 
-@class CIAUpdateAppUi
-  
-An instance of class CIAUpdateAppUi is the UserInterface part of the AVKON
-application framework for the IAUpdate example application
-*/
-class CIAUpdateAppUi : 
-    public CAknViewAppUi, 
-    public MIAUpdateUiControllerObserver,
-    public MIAUpdateTextLinkObserver,
-    public MIAUpdateUITimerObserver
-    {
-public:
-
-    /*
-     * Perform the second phase construction of a CIAUpdateAppUi object
-     * this needs to be public due to the way the framework constructs the AppUi 
-     */
-    void ConstructL();
-    
-    /*!
-     * Perform the first phase of two phase construction.
-     * This needs to be public due to the way the framework constructs the AppUi 
-     */
-    CIAUpdateAppUi();
-
-
-    /*
-     * Destroy the object and release all memory objects
-     */
-    virtual ~CIAUpdateAppUi();
-    
-    void StartedByLauncherL( MIAUpdateRequestObserver& aObserver, 
-                             TBool aRefreshFromNetworkDenied );
-    
-    /**
-     * When the update check operation is started through
-     * the API, the session directs the requests for the UI. UI will
-     * handle the operation and inform the observer when the operation is
-     * completed.
-     * @param aObserver This observer is informed when the operation has
-     * been completed.
-     * @param aFilterParams These parameters are used when update items
-     * are filtered for the UI list.
-     */
-    void CheckUpdatesRequestL( MIAUpdateRequestObserver& aObserver,
-                               CIAUpdateParameters* aFilterParams,
-                               TBool aForcedRefresh );
-
-    /**
-     * When the show update operation is started through
-     * the API, the session directs the requests for the UI. UI will
-     * hanle the operation and inform the observer when the operation is
-     * completed.
-     * @param aObserver This observer is informed when the operation has
-     * been completed.
-     * @param aFilterParams These parameters are used when update items
-     * are filtered for the UI list.
-     */
-    void ShowUpdatesRequestL( MIAUpdateRequestObserver& aObserver,
-                              CIAUpdateParameters* aFilterParams );
-    
-             
-    
-    /** 
-     * When the update operation is started through
-     * the API, the session directs the requests for the UI. UI will
-     * hanle the operation and inform the observer when the operation is
-     * completed.
-     * @param aObserver This observer is informed when the operation has
-     * been completed.
-     * @param aUid  Uid of the caller of the request
-     */
-    void ShowUpdateQueryRequestL( MIAUpdateRequestObserver& aObserver, TUint aUid );
-    
-    /**
-     *  Handle removal of observer
-     */    
-    void HandleObserverRemoval();
-    
-    /**
-    * Set this application visible/unvisible
-    * @param aVisible If EFalse application is put background and is hidden in FSW 
-    */
-    void SetVisibleL( TBool aVisible );
-    
-    /**
-    * Show status dialog of update
-    */ 
-    void ShowStatusDialogL();
-    
-    /**
-    * Starts CIdle. Status dialog is shown in callback function. 
-    */ 
-    void ShowStatusDialogDeferredL();
-    
-    /**
-    * Get CIAUpdateUiController instance
-    * @return Returns pointer of iController
-    */    
-    CIAUpdateUiController* Controller() const;
-    
-    /**
-    * Performs cancel depending on ongoing request and state
-    */   
-    void PotentialCancel();
-    
-    /**
-    * Set ordinal position to foreground and 
-    * set iClientMovedToBackground to EFalse
-    */  
-    void HandleClientToForegroundL();
-    
-    /**
-    * Handle situation when iaupdate.exe leaves running although 
-    * client session has been closed
-    */
-    void HandleAllClientsClosedL();
-    
-    /**
-    * Indicates whether Status dialog to be shown or not when history view is deactivated
-    *
-    * @return ETrue when status dialog to be re-shown
-    */ 
-    TBool ShowStatusDialogAgain() const;
-        
-    /**
-    * Starts monitoring of window group list changes 
-    */
-    void StartWGListChangeMonitoring();
-    
-    /**
-    * Stops monitoring of window group list changes 
-    */
-    void StopWGListChangeMonitoring();
-    
-    /**
-    * Set window group id of client application 
-    *
-    * @param aWgId Window group id
-    */
-    void SetClientWgId( TInt aWgId );
-    
-    /**
-    * Is client application in backround
-    *
-    * @param True value if client application is in background
-    */
-    TInt ClientInBackgroundL() const;
-    
-    
-    /**
-    * Set DM support
-    * 
-    * @param True value if DM is supported
-    */
-    void SetDMSupport( TBool aDMSupport );
-    
-    /**
-    * Check DM support
-    * 
-    * @return True value if DM is supported
-    */
-    TBool IsDMSupport();
-    
-    /**
-     * Check if DM support is set
-     * 
-     * @return True value if DM support is set
-     */
-    TBool IsDMSupportSet();
-    
-    /**
-    * Check if UI refresh allowed
-    * 
-    * @return True value if UI refresh is allowed 
-    */
-    TBool UiRefreshAllowed();
-    
-        
-private: // from CAknViewAppUi
-    
-    /*!
-     * @function HandleCommandL  
-     * @discussion Handle user menu selections
-     * @param aCommand the enumerated code for the option selected
-     */
-    void HandleCommandL( TInt aCommand );
-    
-    /**
-    * Handle window server event
-    *
-    * @param aEvent The window server event that occurred
-    * @param aDestination The controller associated with the event 
-    */
-    void HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination );
-    
-             
-private: // From MIAUpdateTextLinkObserver    
-    void TextLinkL( TInt aLinkId );
-
-    
-private: // From MIAUpdateUiControllerObserver   
-    /**
-    * Called when async engine start-up is completed
-    *
-    * @param aError Error code
-    */
-    void StartupComplete( TInt aError ); 
-    
-    /**
-    * Leaving method, called as trapped in StartupComplete
-    */
-    void StartupCompleteL(); 
- 
-    
-    /**
-    * Handles leave error. 
-    *
-    * @param aError Error code
-    */      
-    void HandleLeaveErrorL( TInt aError );
-    
-    /**
-    * Handles leave error withot leaving
-    *
-    * @param aError Error code
-    */      
-    void HandleLeaveErrorWithoutLeave( TInt aError );
-            
-    /**
-    * Called when async update list refresh is completed
-    *
-    * @param aError Error code
-    */
-    void RefreshCompleteL( TBool aWithViewActivation, TInt aError );
-    
-    /**
-    * Called when async updating is completed
-    *
-    * @param aError Error code
-    */     
-    void UpdateCompleteL( TInt aError );
-    
-    /**
-    * Choose a usable IAP from all SNAPs
-    *
-    * @param aCmManagerExt handle of connection manager
-    */  
-    TUint32 GetBestIAPInAllSNAPsL( RCmManagerExt& aCmManagerExt  );
-    
-    /**
-     * Choose a usable IAP from Internet SNAP
-     *
-     * @param aCmManagerExt handle of connection manager
-     */
-    TUint32 GetBestIAPInInternetSNAPL( RCmManagerExt& aCmManagerExt  );
-
-    /**
-    * Choose the best IAP under the given SNAP
-    *
-    * @param aCmManagerExt handle of connection manager
-    * @param aSNAP SNAP ID
-    */  
-    TUint32 GetBestIAPInThisSNAPL( RCmManagerExt& aCmManagerExt, TUint32 aSNAP = 0);
-
-private: // from MIAUpdateUITimerObserver
-
-     virtual void BackgroundDelayComplete( TInt aError );   
-     
-     virtual void ForegroundDelayComplete( TInt aError );
-     
-     virtual void ProcessStartDelayComplete( TInt aError );
-
-private: // new methods
-           
-    /**
-    * Refreshes main view 
-    * @param aError  Error code
-    */              
-    void RefreshL( TInt aError );
-    
-    /**
-    * Informs an observer that its async request is completed 
-    *
-    * @param aError  Error code 
-    */ 
-    void InformRequestObserver( TInt aError );
-    
-    /**
-     * Sets the default connection method used for network access.
-     * Connection can be set as an accesspoint or as a snap for example.
-     *
-     * @param aTotalSilent Set to ETrue if want silent connection
-     *
-     * @note Not stored persistently. A client needs to set this 
-     * again every time it creates the controller.
-     *
-     * @note Leaves with KErrNotFound if connection method was not
-     * set in the repocitory.
-     */
-    void SetDefaultConnectionMethodL( TBool aTotalSilent );
-        
-    
-    /**
-    * Shows update query dialog (now/later) 
-    */ 
-    void ShowUpdateQueryL();
-    
-    /**
-    * Hides this application from fast swap window 
-    *
-    * @param aAlwaysAsk
-    */ 
-    void HideApplicationInFSWL( TBool aHide);
-    
-    /**
-    * Shows global error note 
-    *
-    * @param aError Symbian error code
-    */ 
-    void ShowGlobalErrorNoteL( TInt aError ) const;
-       
-    /**
-    * CIdle callback function, that shows status dialog
-    * To be used to guarantee that possible old status dialog is totally 
-    * removed by AVKON before showing new one  
-    *
-    * @param aPtr  Pointer to this instance
-    */ 
-    static TInt ShowStatusDialogCallbackL( TAny* aPtr );
-    
-    /**
-    * CIdle callback function, that shows update query dialog
-    * To be used because a client to be informed immediately that its 
-    * async request is issued. Waiting dialog cannot be shown before responding to a client  
-    *
-    * @param aPtr  Pointer to this instance
-    */
-    static TInt UpdateQueryCallbackL( TAny* aPtr );
-    
-    /**
-    * CIdle callback function, that performs automatic update check ann query
-    *
-    * @param aPtr  Pointer to this instance
-    */
-    static TInt AutomaticCheckCallbackL( TAny* aPtr );
-    
-    /**
-    * History view is activated from a link in message query
-    */
-    void HandleTextLinkL();
-            
-private:  //data
-
-    CIAUpdateMainView* iMainView;
-
-    CIAUpdateHistoryView* iHistoryView;
-        
-    CIAUpdateUiController* iController;
-    
-    CIAUpdateGlobalLockHandler* iGlobalLockHandler;
-    
-    CIAUpdateUITimer* iForegroundTimer; 
-    
-    CIAUpdateUITimer* iBackgroundTimer;
-    
-    MIAUpdateRequestObserver* iRequestObserver;
-    
-    TIAUpdateDialogParam* iDialogParam;
-    
-    IAUpdateUiDefines::TIAUpdateUiRequestType iRequestType;
-    
-    CIdle* iIdle;
-    
-    CIdle* iIdleAutCheck;
-           
-    TBool iShowStatusDialogAgain;
-    
-    TUint iUpdatequeryUid;
-    
-    TBool iUpdateNow;
-    
-    TBool iInstUiOnTop;
-    
-    TBool iStartedFromApplication;
-    
-    TBool iClientMovedToBackground;
-    
-    RArray<TUint32> iDestIdArray;
-    
-    TInt iWgId;
-    
-    TBool iIsDMSupported;
-    
-    TBool iIsDMSet;
-    
-    TBool iUiRefreshAllowed;
-    
-    TBool iRebootAfterInstall;
-    };
-
-
-#endif // __IAUPDATE_APPUI_H__
-
--- a/iaupdate/IAD/ui/inc/iaupdateautomaticcheck.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdateautomaticcheck.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -22,13 +22,17 @@
 
 // INCLUDES
 #include <e32base.h>
+#include "iaupdatedialogobserver.h"
 
+class HbAction;
+class IAUpdateDialogUtil;
 // CLASS DECLARATION
 /**
 *
 */
 
-class CIAUpdateAutomaticCheck : public CBase
+class CIAUpdateAutomaticCheck : public CBase,
+                                public IAUpdateDialogObserver
     {
 public:
 
@@ -59,7 +63,7 @@
     * @return True value if automatic update connections are allowed, EFalse if not allowed.
     *         Returns always true if this function is called after first time
     */
-    TBool AcceptAutomaticCheckL();
+    void AcceptAutomaticCheckL();
     
     TBool AutoUpdateCheckEnabledL();
         
@@ -79,10 +83,15 @@
     * Enables automatic updates cheks
     */
     void EnableAutoUpdateCheckL( TBool aEnable );
+
+private: // From IAUpdateDialogObserver     
+         
+     void dialogFinished(HbAction *action);       
     
         
 private: //data
-    
+    IAUpdateDialogUtil *mDialogUtil;
+    HbAction *mPrimaryAction;
     };
 
 
--- a/iaupdate/IAD/ui/inc/iaupdatecontainerobserver.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   MIAUpdateContainerObserver interface
-*
-*/
-
-
-
-#ifndef IAUPDATECONTAINEROBSERVER_H
-#define IAUPDATECONTAINEROBSERVER_H
-
-#include <e32base.h>
-
-class MIAUpdateContainerObserver
-{
-public: // Observer API
-    /**
-    * Mark list item
-    * @param aMark True ig marking, False if unmarking
-    * @param aIndex  Index of the item
-    * @return False value if marking/unmarking cancelled when dependencies/dependants not found
-    */ 
-    virtual TBool MarkListItemL( TBool aMark, TInt aIndex ) = 0;
-
-    /**
-    * Set text label to middle soft key
-    * @param aVisible   True value when MSK text is visible
-    * @param aSelected  True value when list item is selected( marked)
-    */
-    virtual void SetMiddleSKTextL( TBool aVisible, TBool aSelected ) = 0;
-};
-	
-#endif // IAUPDATECONTAINEROBSERVER_H
--- a/iaupdate/IAD/ui/inc/iaupdatedeputils.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdatedeputils.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -25,7 +25,6 @@
 
 // FORWARD DECLARATIONS
 class MIAUpdateNode;
-class MIAUpdateAnyNode;
 
 // CLASS DECLARATION
 /**
@@ -43,7 +42,7 @@
     * @param aDependencyNodes List of dependencies (to be marked). 
     */ 
     static void GetDependenciesL( const MIAUpdateNode& aNode, 
-                                  const RPointerArray<MIAUpdateAnyNode>& aAllNodes, 
+                                  const RPointerArray<MIAUpdateNode>& aAllNodes, 
                                   RPointerArray<MIAUpdateNode>& aDependencyNodes );
      
     /**
@@ -54,7 +53,7 @@
     * @param aDependencyNodes List of dependendants (to be unmarked). 
     */
     static void GetDependantsL( const MIAUpdateNode& aNode, 
-                                const RPointerArray<MIAUpdateAnyNode>& aAllNodes, 
+                                const RPointerArray<MIAUpdateNode>& aAllNodes, 
                                 RPointerArray<MIAUpdateNode>& aDependantNodes );
     
     };
--- a/iaupdate/IAD/ui/inc/iaupdatedetailsdialog.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateDetailsDialog
-*
-*/
-
-
-
-#ifndef IAUPDATEDETAILSDIALOG_H
-#define IAUPDATEDETAILSDIALOG_H
-
-
-//  INCLUDES
-#include <e32base.h>
-
-#include "iaupdateversion.h"
-
-// FORWARD DECLARATIONS
-class TIAUpdateDialogParam;
-
-/*
-* CIAUpdateDetailsDialog
-*
-* CIAUpdateDetailsDialog is used for displaying update details.
-*/
-class CIAUpdateDetailsDialog : public CBase
-    {
-	public:
-	
-	    /**
-        * Launches dialog.
-        * @param aParam Class that contains dialog parameters.
-        * @return Completion code.
-        */
-		static TBool ShowDialogL( TIAUpdateDialogParam* aParam );
-		
-	public:// Constructors and destructor
-
-        /**
-        * Two-phased constructor.
-        */
-		static CIAUpdateDetailsDialog* NewL( TIAUpdateDialogParam* aParam );
-        
-        /**
-        * Destructor.
-        */
-        virtual ~CIAUpdateDetailsDialog();
-    
-    private:
-
-        /**
-        * C++ default constructor.
-        */
-        CIAUpdateDetailsDialog( TIAUpdateDialogParam* aParam );
-	
-        /**
-        * By default Symbian OS constructor is private.
-        */
-        void ConstructL();
-        
-    private:
-        void ConstructTextL();
-        TInt BufferSize();
-        HBufC* FileSizeTextLC( TInt aFileSize );
-        HBufC* VersionTextLC( TIAUpdateVersion aVersion );
-        TBool ShowDialogL();
-        
-    private:
-        TIAUpdateDialogParam* iParam;
-        
-        HBufC* iBuf;
-  
-    };
-#endif      // IAUPDATEDETAILSDIALOG_H
-            
-// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/inc/iaupdatedialogobserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This file contains the header file of the 
+*                IAUpdateDialogObserver class.
+*
+*/
+
+
+
+#ifndef IAUPDATEDIALOGOBSERVER_H
+#define IAUPDATEDIALOGOBSERVER_H
+
+//  INCLUDES
+
+class HbAction;
+
+
+
+class IAUpdateDialogObserver
+{
+    public:
+   
+    
+    virtual void dialogFinished(HbAction *action) = 0;   
+};
+
+
+#endif // IAUPDATEDIALOGOBSERVER_H
+            
+// End of File
--- a/iaupdate/IAD/ui/inc/iaupdatedialogutil.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdatedialogutil.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:    
+* Description:   This file contains the header file of the IAUpdateDialogUtil class 
 *
 */
 
@@ -20,75 +20,42 @@
 #ifndef IAUPDATEDIALOGUTIL_H
 #define IAUPDATEDIALOGUTIL_H
 
-
-//  INCLUDES
-#include <e32base.h>
-
-
-//FORWARD DECLARATIONS
-class MIAUpdateNode;
-
+#include <QtCore/qmetaobject.h>
+#include <QObject>
+#include <HbAction>
 
-/**
-* TIAUpdateTextLinkObserver
-* 
-* Observer interface function for observing text link.
-*/
-class MIAUpdateTextLinkObserver
-    {
-    public:
-        virtual void TextLinkL( TInt aLinkId ) = 0;
-    };
+class IAUpdateDialogObserver;
 
 
-/**
-* TIAUpdateDialogParam
-*
-* This class is used as general dialog parameter type.
-*/
-class TIAUpdateDialogParam
-	{
+class IAUpdateDialogUtil : public QObject
+{
+    Q_OBJECT
+    
     public:
-		TInt iCountSuccessfull;
-		TInt iCountCancelled;
-		TInt iCountFailed;
-		TInt iShowCloseAllText;
-		TInt iResourceId;
-		MIAUpdateNode* iNode;
-		MIAUpdateTextLinkObserver* iLinkObserver;
-		
-    public:
-    	TIAUpdateDialogParam();
-		
-	};
-
-
-
+            
+    IAUpdateDialogUtil(QObject *parent, IAUpdateDialogObserver *observer = NULL);
+    ~IAUpdateDialogUtil();
 
-/**
-* IAUpdateDialogUtil
-* 
-* IAUpdateDialogUtil contains general dialog utilities.
-*/
-class IAUpdateDialogUtil
-	{
-    public:
-		static void ShowMessageQueryL( const TDesC& aTitle, const TDesC& aText) ;
-		static void ShowMessageQueryL( const TDesC& aTitle, TInt aResource );
-		
-        static void ShowInformationQueryL( const TDesC& aText );
-        static void ShowInformationQueryL( TInt aResource );
+    void showInformation(const QString &text, HbAction *primaryAction);
+    
+    void showQuestion(const QString &text, HbAction *primaryAction, HbAction *secondaryAction);
+    
+    void showAgreement(HbAction *primaryAction, HbAction *secondaryAction = NULL);  
+    
+    public slots:
+
+    void finished(HbAction *action);
+    
+    
+    private:
+    
         
-        static TInt ShowConfirmationQueryL( const TDesC& aText, TInt aSoftkeyResourceId );
-        static TInt ShowConfirmationQueryL( TInt aResource, TInt aSoftkeyResourceId );
-        
-        static void Panic( TInt aReason );
-	};
+    private:
+    
+    IAUpdateDialogObserver* mObserver; //not owned
+    
+};
 
-
-
-
-
-#endif      // IAUPDATEDIALOGUTIL_H
+#endif  // IAUPDATEDIALOGUTIL_H
             
 // End of File
--- a/iaupdate/IAD/ui/inc/iaupdatedocument.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateDocument
-*                class 
-*
-*/
-
-
-#ifndef __IAUPDATE_DOCUMENT_H__
-#define __IAUPDATE_DOCUMENT_H__
-
-// INCLUDES
-#include <AknDoc.h>
-
-// FORWARD DECLARATIONS
-class CIAUpdateAppUi;
-class CEikApplication;
-
-
-// CLASS DECLARATION
-/**
-*  CIAUpdateDocument is the Document part of the AVKON
-*  application framework for the IAUpdate example application
-*
-*/
-
-class CIAUpdateDocument : public CAknDocument
-    {
-public:
-
-    /**
-    * Construct a CIAUpdateDocument for the AVKON application aApp 
-    * using two phase construction, and return a pointer to the created object
-    * @param aApp Application creating this document
-    * @return A pointer to the created instance of CIAUpdateDocument
-    */
-    static CIAUpdateDocument* NewL( CEikApplication& aApp );
-
-    /**
-    * Construct a CIAUpdateDocument for the AVKON application aApp 
-    * using two phase construction, and return a pointer to the created object
-    * @param aApp Application creating this document
-    * @return A pointer to the created instance of CIAUpdateDocument
-    */
-    static CIAUpdateDocument* NewLC( CEikApplication& aApp );
-
-    /**
-    * Destructor
-    */
-    ~CIAUpdateDocument();
-
-public: // from CAknDocument
-    /**
-    *  Create a CIAUpdateAppUi object and return a pointer to it
-    * @return a pointer to the created instance of the AppUi created
-    */
-    CEikAppUi* CreateAppUiL();
-
-private:
-
-    /**
-    * Perform the second phase construction of a CIAUpdateDocument object
-    */
-    void ConstructL();
-
-    /**
-    * Perform the first phase of two phase construction
-    @param aApp Application creating this document
-    */
-    CIAUpdateDocument( CEikApplication& aApp );
-
-    };
-
-
-#endif // __IAUPDATE_DOCUMENT_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/inc/iaupdateengine.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,290 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This file contains the header file of the IAUpdateEngine
+*                class 
+*
+*/
+
+#ifndef IAUPDATEENGINE_H_
+#define IAUPDATEENGINE_H_
+
+#include <QObject>
+
+#include "iaupdateuidefines.h"
+#include "iaupdateuicontrollerobserver.h"
+#include "iaupdatenode.h"
+
+class IAUpdateServiceProvider;
+class CIAUpdateUiController;
+class CIAUpdateFWUpdateHandler;
+class CIAUpdateParameters;
+class CIAUpdateGlobalLockHandler;
+class CIAUpdateAutomaticCheck;
+class MIAUpdateNode;
+class MIAUpdateFwNode;
+class CEikonEnv;
+class RCmManager;
+class CIdle;
+class HbAction;
+class IAUpdateResultsDialog;
+
+class IAUpdateEngine : public QObject,
+                       public MIAUpdateUiControllerObserver
+    {
+    Q_OBJECT
+
+public:
+    IAUpdateEngine(QObject *parent = 0);
+    ~IAUpdateEngine();
+    
+    void StartedByLauncherL( bool aRefreshFromNetworkDenied );
+     
+     /**
+      * When the update check operation is started through
+      * the API, the session directs the requests for the UI. UI will
+      * handle the operation and inform the observer when the operation is
+      * completed.
+      * @param aFilterParams These parameters are used when update items
+      * are filtered for the UI list.
+      */
+     void CheckUpdatesRequestL( int wgid, 
+                                CIAUpdateParameters* aFilterParams, 
+                                bool aForcedRefresh );
+
+     /**
+      * When the show update operation is started through
+      * the API, the session directs the requests for the UI. UI will
+      * hanle the operation and inform the observer when the operation is
+      * completed.
+      * @param aFilterParams These parameters are used when update items
+      * are filtered for the UI list.
+      */
+     void ShowUpdatesRequestL( int wgid, CIAUpdateParameters* aFilterParams );
+     
+              
+     
+     /** 
+      * When the update operation is started through
+      * the API, the session directs the requests for the UI. UI will
+      * hanle the operation and inform the observer when the operation is
+      * completed.
+      * @param aUid  Uid of the caller of the request
+      */
+     void ShowUpdateQueryRequestL( int wgid, uint aUid );
+     
+     
+     void StartUpdate( bool aFirmwareUpdate );
+     /**
+      * Set this application visible/unvisible
+      * @param aVisible If EFalse application is put background and is hidden in FSW 
+      */
+      void SetVisibleL( bool aVisible );
+      
+      /**
+      * Set window group id of client application 
+      *
+      * @param aWgId Window group id
+      */
+      void SetClientWgId( int aWgId );
+          
+      /**
+      * Is client application in background
+      *
+      * @param True value if client application is in background
+      */
+      bool ClientInBackgroundL() const;
+    
+signals:
+    void toMainView();
+    
+    /**
+    * Refreshes main view 
+    * @param aError  Error code
+    */              
+    void refresh(const RPointerArray<MIAUpdateNode>& nodes,
+                 const RPointerArray<MIAUpdateFwNode>& fwNodes,
+                 int error);
+    
+
+public slots:    
+    void handleAllClientsClosed();    
+
+    void dialogFinished(HbAction* action);
+  
+
+private: // From MIAUpdateUiControllerObserver   
+    /**
+    * Called when async engine start-up is completed
+    *
+    * @param aError Error code
+    */
+    void StartupComplete( TInt aError ); 
+    
+    /**
+    * Leaving method, called as trapped in StartupComplete
+    */
+    void StartupCompleteL(); 
+ 
+    
+    /**
+    * Handles leave error. 
+    *
+    * @param aError Error code
+    */      
+    void HandleLeaveErrorL( TInt aError );
+    
+    /**
+    * Handles leave error withot leaving
+    *
+    * @param aError Error code
+    */      
+    void HandleLeaveErrorWithoutLeave( TInt aError );
+    
+    /**
+    Called when UI to be redrawn during update process
+    *
+    * @param aError Error code
+    */
+    void RefreshUI();
+            
+    /**
+    * Called when async update list refresh is completed
+    *
+    * @param aError Error code
+    */
+    void RefreshCompleteL( TBool aWithViewActivation, TInt aError );
+    
+    /**
+    * Called when async updating is completed
+    *
+    * @param aError Error code
+    */     
+    void UpdateCompleteL( TInt aError );
+    
+private:  //new methods
+
+    /**
+    * Show results dialog of update
+    */ 
+    void ShowResultsDialogL();
+    
+    
+    void ShowRebootDialogL();
+           
+    /**
+    * Informs an observer that its async request is completed 
+    *
+    * @param aError  Error code 
+    */ 
+    void InformRequestObserver( int aError );
+    
+    /**
+     * Sets the default connection method used for network access.
+     * Connection can be set as an accesspoint or as a snap for example.
+     *
+     * @param aTotalSilent Set to ETrue if want silent connection
+     *
+     * @note Not stored persistently. A client needs to set this 
+     * again every time it creates the controller.
+     *
+     * @note Leaves with KErrNotFound if connection method was not
+     * set in the repocitory.
+     */
+    void SetDefaultConnectionMethodL( bool aTotalSilent );   
+    
+     /**
+     * Choose a usable IAP from all SNAPs
+     *
+     * @param aCmManager handle of connection manager
+     */  
+    uint GetBestIAPInAllSNAPsL( RCmManager& aCmManager );
+        
+     /**
+     * Choose a usable IAP from Internet SNAP
+     *
+     * @param aCmManager handle of connection manager
+     */
+    uint GetBestIAPInInternetSNAPL( RCmManager& aCmManager );
+
+     /**
+     * Choose the best IAP under the given SNAP
+     *
+     * @param aCmManager handle of connection manager
+     * @param aSNAP SNAP ID
+     */  
+     uint GetBestIAPInThisSNAPL( RCmManager& aCmManager, uint aSNAP = 0);
+     
+     /**
+     * Shows update query dialog (now/later) 
+     */ 
+     void ShowUpdateQueryL();
+
+     void HideApplicationInFSWL( bool aHide ) const;
+               
+     /**
+     * CIdle callback function, that shows update query dialog
+     * To be used because a client to be informed immediately that its 
+     * async request is issued. Waiting dialog cannot be shown before responding to a client  
+     *
+     * @param aPtr  Pointer to this instance
+     */
+     static TInt UpdateQueryCallbackL( TAny* aPtr );
+     
+     /**
+     * CIdle callback function, that performs automatic update check and query
+     *
+     * @param aPtr  Pointer to this instance
+     */
+     static TInt AutomaticCheckCallbackL( TAny* aPtr );
+     
+     bool DoPossibleApplicationClose();
+ 
+   
+
+private:
+     
+    enum DialogState
+        {
+        NoDialog,
+        Results,
+        RebootQuery,
+        ShowUpdateQuery
+        };
+     
+    IAUpdateServiceProvider *mServiceProvider;
+    IAUpdateResultsDialog* mResultsDialog;
+    
+    CIAUpdateUiController* iController;
+    CIAUpdateFWUpdateHandler* iFwUpdateHandler;
+    CIAUpdateGlobalLockHandler* iGlobalLockHandler;
+    CIAUpdateAutomaticCheck* iAutomaticCheck;
+    CEikonEnv* iEikEnv; //not owned
+    CIdle* iIdle;
+    CIdle* iIdleAutCheck;
+    
+    
+    IAUpdateUiDefines::TIAUpdateUiRequestType mRequestType;
+    bool mUpdateNow;
+    RArray<TUint32> iDestIdArray;
+    bool mRequestIssued;
+    bool mStartedFromApplication;
+    bool mUiRefreshAllowed;
+    uint mUpdatequeryUid;
+    int mWgId;
+    DialogState mDialogState;
+    HbAction *mPrimaryAction;
+    HbAction *mSecondaryAction;
+    };
+
+#endif /* IAUPDATEENGINE_H_ */
--- a/iaupdate/IAD/ui/inc/iaupdatefirsttimedatefile.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Header file of CIAUpdateFirstTimeDateFile class
-*
-*/
-
-
-
-
-
-
-#ifndef IA_UPDATE_FIRSTTIMEDATE_FILE_H
-#define IA_UPDATE_FIRSTTIMEDATE_FILE_H
-
-#include <e32std.h>
-#include <s32strm.h>
-#include <e32cmn.h>
-#include <f32file.h>
-#include <e32const.h>
-
-
-/**
- *
- */
-class CIAUpdateFirstTimeDateFile : public CBase
-    {
-
-public:
-
-    static CIAUpdateFirstTimeDateFile* NewL( const TDesC& aFile );
-
-    static CIAUpdateFirstTimeDateFile* NewLC( const TDesC& aFile );
-    
-    
-    ~CIAUpdateFirstTimeDateFile();
-
-
-    TBool ReadDataL();
-
-    void WriteDataL();
-    
-    const TTime& FirstTime() const;
-    
-    void SetCurrentFirstTime();
-     
-
-private:
-
-    // Prevent these if not implemented
-    CIAUpdateFirstTimeDateFile( const CIAUpdateFirstTimeDateFile& aObject );
-    CIAUpdateFirstTimeDateFile& operator =( const CIAUpdateFirstTimeDateFile& aObject );
-
-
-    CIAUpdateFirstTimeDateFile();
-    
-    virtual void ConstructL( const TDesC& aFile );
-
-
-    void InternalizeL( RReadStream& aStream );
-
-    void ExternalizeL( RWriteStream& aStream );
-
-
-private: // data
-
-	// file server session
-	RFs iFsSession;
-	
-	// file path
-	TFileName iPath;
-
-
-    // Time when IAD started first time
-    TTime iFirstTime;
-
-    };
-		
-#endif // IA_UPDATE_FIRSTTIMEDATE_FILE_H
-
--- a/iaupdate/IAD/ui/inc/iaupdatefirsttimeinfo.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdatefirsttimeinfo.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -62,22 +62,12 @@
     * Set Nokia agreement as accepted by an user
     */
     void SetAgreementAcceptedL();
-    
-    /**
-    * Set Nokia agreement as asked (prompted) to an user
-    */
-    void SetAgreementAskedL();
-        
+          
     /**
     * Set automatic update checks as asked (prompted) to an user
     */
     void SetAutomaticUpdatesAskedL();
-    
-    /**
-    * Time stamp of first check updates form application is stored
-    */
-    void SetFirstTimeIfNotSetL();
-    
+            
     /**
     * Is Nokia agreement of Application Update accepted by an user
     *
@@ -86,27 +76,13 @@
     TBool AgreementAcceptedL();
     
     /**
-    * Is Nokia agreement of Application Update already asked 
-    *
-    * @return True value if agreement already asked 
-    */
-    TBool AgreementAskedL();
-    
-    /**
     * Is activation for automatic update cheks from network already asked 
     *
     * @return True value if agreement already asked 
     */
     TBool AutomaticUpdateChecksAskedL();  
         
-    /**
-    * There is a delay (eg. 2 weeks) after first check updates request from an application
-    * when update check is not performed. This method checks is update check delayed. 
-    *
-    * @return True value if agreement accepted 
-    */
-    TBool FirstTimeDelayL();
-
+ 
 private:
 
     /**
@@ -135,8 +111,6 @@
 	
 	TBool iAgreementAccepted;
 	
-	TBool iAgreementAsked;
-	
 	TBool iAutomaticUpdateChecksAsked;   
    
     };
--- a/iaupdate/IAD/ui/inc/iaupdatefwdetailsdialog.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateDetailsDialog
-*
-*/
-
-
-
-#ifndef IAUPDATEFWDETAILSDIALOG_H
-#define IAUPDATEFWDETAILSDIALOG_H
-
-
-//  INCLUDES
-#include <e32base.h>
-
-//FORWARD
-class MIAUpdateFwNode;
-
-/*
-* CIAUpdateFwDetailsDialog
-*
-* CIAUpdateFwDetailsDialog is used for displaying update details.
-*/
-class CIAUpdateFwDetailsDialog : public CBase
-    {
-	public:
-	
-	    /**
-        * Launches dialog.
-        * @param aFwNode present FW node.
-        * @return Completion code.
-        */
-		static TBool ShowDialogL( MIAUpdateFwNode* aFwNode );
-		
-	public:// Constructors and destructor
-
-        /**
-        * Two-phased constructor.
-        */
-		static CIAUpdateFwDetailsDialog* NewL( MIAUpdateFwNode* aFwNode );
-        
-        /**
-        * Destructor.
-        */
-        virtual ~CIAUpdateFwDetailsDialog();
-    
-    private:
-
-        /**
-        * C++ default constructor.
-        */
-        CIAUpdateFwDetailsDialog( MIAUpdateFwNode* aFwNode );
-	
-        /**
-        * By default Symbian OS constructor is private.
-        */
-        void ConstructL();
-        
-    private:
-        void ConstructTextL();
-        TInt BufferSize();
-        HBufC* FileSizeTextLC( TInt aFileSize );
-        TBool ShowDialogL();
-        
-    private:
-        
-        MIAUpdateFwNode* iFwNode;
-        HBufC* iBuf;
-  
-    };
-#endif      // IAUPDATEDETAILSDIALOG_H
-            
-// End of File
--- a/iaupdate/IAD/ui/inc/iaupdatehistorycontainer.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateHistoryContainer
-*                class 
-*
-*/
-
-
-
-#ifndef IA_UPDATE_HISTORY_CONTAINER_H
-#define IA_UPDATE_HISTORY_CONTAINER_H
-
-#include <coecntrl.h>
-
-class CAknDoubleGraphicStyleListBox;
-class MIAUpdateHistory;
-class MIAUpdateHistoryItem;
-
-
-/*! 
-  @class CIAUpdateHistoryContainer
-  
-  @discussion 
-  */
-class CIAUpdateHistoryContainer : public CCoeControl
-    {
-    
-public:
-
-    /*!
-      @function NewL
-       
-      @discussion Create a CIAUpdateHistoryContainer object, which will draw itself to aRect
-      @param aRect the rectangle this view will be drawn to
-      @result a pointer to the created instance of CIAUpdateHistoryContainer
-      */
-    static CIAUpdateHistoryContainer* NewL( const TRect& aRect );
-
-    /*!
-      @function NewLC
-       
-      @discussion Create a CIAUpdateHistoryContainer object, which will draw itself to aRect
-      @param aRect the rectangle this view will be drawn to
-      @result a pointer to the created instance of CIAUpdateHistoryContainer
-      */
-    static CIAUpdateHistoryContainer* NewLC( const TRect& aRect );
-
-
-    /*!
-      @function ~CIAUpdateHistoryContainer
-      
-      @discussion Destroy the object and release all memory objects
-      */
-     virtual ~CIAUpdateHistoryContainer();
-
-
-    /*!
-     * @function RefreshL
-     *
-     * @discussion Populate list box with the given nodes.
-     * @param aHistory
-     */
-    void RefreshL( MIAUpdateHistory& aHistory );       
-
-
-private:  // from CCoeControl
-
-    /*!
-     * @function OfferKeyEventL
-     *
-     * @discussion Handle key events by forwarding them to the list box.
-     * @param aKeyEvent The key event.
-     * @param aType The event type.
-     * @result Indicates whether or not the key event was used by this control. 
-     */
-    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
-
-     /*!
-      * @see CCoeControl::SizeChanged
-      */
-     void SizeChanged();
-
-     /*!
-      * @see CCoeControl::CountComponentControls
-      */
-     TInt CountComponentControls() const;
-
-     /*!
-      *  @see CCoeControl::ComponentControl
-      */
-     CCoeControl* ComponentControl( TInt aIndex ) const;
-     
-     /**
-     * Handles a resource relative event
-     *
-     * @param aType Event type
-     */
-     void HandleResourceChange( TInt aType );
-  
-
-private:
-
-    /*!
-      @function ConstructL
-      
-      @discussion  Perform the second phase construction of a CIAUpdateHistoryContainer object
-      @param aRect the rectangle this view will be drawn to
-      */
-    void ConstructL(const TRect& aRect);
-
-    /*!
-      @function CIAUpdateHistoryContainer
-      
-      @discussion Perform the first phase of two phase construction 
-      */
-    CIAUpdateHistoryContainer();
-
-
-    // Creates the state description string.
-    HBufC* NodeStateDescriptionLC( const MIAUpdateHistoryItem& aItem );
-    
-
-private: // Data
-
-    CDesCArray* iItemTextArray;
-    CAknDoubleGraphicStyleListBox* iListBox;
-
-    };
-
-
-#endif // IA_UPDATE_HISTORY_CONTAINER_H
--- a/iaupdate/IAD/ui/inc/iaupdatehistoryview.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateHistoryView
-*                class 
-*
-*/
-
-
-
-#ifndef IA_UPDATE_HISTORY_VIEW_H
-#define IA_UPDATE_HISTORY_VIEW_H
-
-#include <aknview.h> 
-
-class CIAUpdateHistoryContainer;
-class MIAUpdateHistory;
-
-
-/*! 
-  @class CIAUpdateHistoryView
-  
-  @discussion An instance of the Application View object for the IAUpdate 
-  example application
-  */
-class CIAUpdateHistoryView : public CAknView
-    {
-
-public:
-    
-    /*!
-      @function NewL
-  
-      @discussion Create a CIAUpdateHistoryView object, which will draw itself to aRect
-      @result a pointer to the created instance of CIAUpdateHistoryView
-    */
-    static CIAUpdateHistoryView* NewL( MIAUpdateHistory& aHistory );
-
-    /*!
-      @function NewLC
-   
-      @discussion Create a CIAUpdateHistoryView object, which will draw itself to aRect
-      @result a pointer to the created instance of CIAUpdateHistoryView
-    */
-    static CIAUpdateHistoryView* NewLC( MIAUpdateHistory& aHistory );
-
-
-    /*!
-      @function ~CIAUpdateHistoryView
-      
-      @discussion Destroy the object and release all memory objects
-    */
-    virtual ~CIAUpdateHistoryView();
-
-
-    void RefreshL();       
-
-
-private:  // from CAknView
-
-    /*!
-      @see CAknView::Id
-    */
-    virtual TUid Id() const;
-
-
-    /*!
-      @see CAknView::HandleCommandL
-    */
-    virtual void HandleCommandL( TInt aCommand );
-    
-    
-    /*!
-      @see CAknView::DoActivateL
-    */
-    virtual void DoActivateL( const TVwsViewId &aPrevViewId, 
-                              TUid aCustomMessageId, 
-                              const TDesC8 &aCustomMessage);
-    
-    /*!
-      @see CAknView::DoDeactivate
-    */
-    virtual void DoDeactivate();
-
-                        
-private: // Methods
-
-    /*!
-      @function CIAUpdateHistoryView
-      
-      @discussion Perform the first phase of two phase construction 
-    */
-    CIAUpdateHistoryView( MIAUpdateHistory& aHistory );
-
-    
-    /*!
-      @function ConstructL
-      
-      @discussion  Perform the second phase construction of a CIAUpdateHistoryView object
-    */
-    virtual void ConstructL();
-    
-    // Gives the history object that is used to show the history in the view.
-    MIAUpdateHistory& History() const; 
-
-    // Updates the status pane texts.
-    void UpdateStatusPaneL();
-
-    
-private: // Data
-
-    // Contains the item history info
-    MIAUpdateHistory& iHistory;      
-    
-    // Handles the content of the view.
-    CIAUpdateHistoryContainer* iContainer;
-
-    };
-
-#endif // IA_UPDATE_HISTORY_VIEW_H
--- a/iaupdate/IAD/ui/inc/iaupdatemaincontainer.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,186 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateMainContainer class 
-*
-*/
-
-
-
-#ifndef IAUPDATEMAINCONTAINER_H
-#define IAUPDATEMAINCONTAINER_H
-
-//INCLUDES
-#include <coecntrl.h> // CCoeControl
-
-// FORWARD DECLARATIONS
-class CAknDoubleGraphicStyleListBox;
-class MIAUpdateContainerObserver;
-
-class MIAUpdateNode;
-class MIAUpdateAnyNode;
-
-// CLASS DECLARATION
-/**
-* This class represents the container of main view of IAUpdate
-*
-*/
-class CIAUpdateMainContainer :  
-    public CCoeControl,    
-    public MEikListBoxObserver
-    {
-public:
-     
-    /**
-    * Symbian two phased constructor.
-    * @param aRect the rectangle this view will be drawn to
-    * @return Instance of the created server object.
-    */
-    static CIAUpdateMainContainer* NewL( const TRect& aRect, 
-                                         MIAUpdateContainerObserver& aObserver );
-    
-    /**
-    * Symbian two phased constructor. Created object is pushed to clenaup stack
-    * @param aRect the rectangle this view will be drawn to
-    * @return Instance of the created server object.
-    */
-    static CIAUpdateMainContainer* NewLC( const TRect& aRect, 
-                                          MIAUpdateContainerObserver& aObserver );
-    /**
-    * Destructor
-    */
-    ~CIAUpdateMainContainer();
-    
-    /**
-    * Handles Mark/Unmark
-    * @param aCommand Mark or unmark commannd
-    */
-    void HandleMarkCommandL( TInt aCommand );
-    
-    /**
-    * Resfresh the list
-    * @param aNodes List of nodes
-    * @param aError Error code
-    */
-    void RefreshL( const RPointerArray<MIAUpdateAnyNode>& aNodes,
-                   TInt aError );       
-    
-    /**
-    * Returns node that's highlighted in a list
-    * @param aNodes List of nodes
-    * @return Current (highlighted) node
-    */    
-    MIAUpdateAnyNode* GetCurrentNode( const RPointerArray<MIAUpdateAnyNode>& aNodes );
-    
-    /**
-    * Set selected items to list  
-    * @param aIndices List of indices
-    */    
-    void SetSelectedIndicesL( const RArray<TInt>& aIndices );
-    
-    
-    /**
-     * Clean all the selection
-     */ 
-    void CleanAllSelection();
-
-    /**
-    * Set selected items to list  
-    * @param aListBox   List box
-    * @param aEventType Event type
-    */  
-    void HandleListBoxEventL(
-                  CEikListBox*  aListBox,
-                  TListBoxEvent aEventType );
-    
-private:  // from CCoeControl
-
-    /**
-    * Handle key events by forwarding them to the list box.
-    * @param aKeyEvent The key event.
-    * @param aType The event type.
-    * @result Indicates whether or not the key event was consumed by this control. 
-    */
-   TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
-
-    /**
-    * Called when size is changed by framework.
-    * Set current size to listbox
-    */
-    void SizeChanged();
-
-    /**
-    * Count of components.
-    * @return Count of child components
-    */
-    TInt CountComponentControls() const;
-
-    /**
-    * Component control
-    * @param aIndex  Index numer of child component.
-    * @return Pointer to a component
-    */
-    CCoeControl* ComponentControl( TInt aIndex ) const;
-      
-    /**
-    * Get the help context for this control.
-    *
-    * @param aContext Help context
-    */
-    void GetHelpContext( TCoeHelpContext& aContext ) const;
-        
-    /**
-    * Handles a resource relative event
-    *
-    * @param aType Event type
-    */
-    void HandleResourceChange( TInt aType );
-    
-    
-    
-private:
-    
-    /** 
-    * Constuctor 
-    * @param aRect Rectangular this view will be drawn to
-    */
-    void ConstructL (const TRect& aRect );
-    
-    /** 
-    * C++ constuctor 
-    * @param aObserver Observer of the container
-    */
-    CIAUpdateMainContainer( MIAUpdateContainerObserver& aObserver );
-            
-    /** 
-    * Update Middle soft key label text (Mark/Unmark) 
-    */
-    void UpdateMSKTextL();
-    
-    void CreateIconL( CFbsBitmap*& aBitmap,
-                      CFbsBitmap*& aMask,
-                      const TDesC& aFileName,
-                      TInt aBitmapId,
-                      TInt aMaskId );
-        
-
-private: // Data
-
-    MIAUpdateContainerObserver& iObserver;
-    CDesCArray* iItemTextArray;
-    CAknDoubleGraphicStyleListBox* iListBox; 
-    };
-
-#endif // IAUPDATEMAINCONTAINER_H
-
-// End of File
--- a/iaupdate/IAD/ui/inc/iaupdatemainview.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdatemainview.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,251 +11,115 @@
 *
 * Contributors:
 *
-* Description:   This file contains the header file of the CIAUpdateMainView class 
+* Description:   This file contains the header file of the IAUpdateMainView
+*                class 
 *
 */
 
+#ifndef IAUPDATEMAINVIEW_H_
+#define IAUPDATEMAINVIEW_H_
+
+#include <hbview.h>
+#include <QItemSelection> 
+
+#include "iaupdatenode.h"
+#include "iaupdatefwnode.h"
+#include "iaupdatebasenode.h"
 
 
-#ifndef IAUPDATEMAINVIEW_H
-#define IAUPDATEMAINVIEW_H
-
-// INCLUDES
-#include <aknview.h> 
-#include <akntoolbarobserver.h> 
-#include "iaupdatecontainerobserver.h"
-
-// FORWARD DECLARATIONS
-class CAknNavigationControlContainer;
-class CAknNavigationDecorator;
-class CAknToolbar;
-class CIAUpdateMainContainer;
-class CIAUpdateFWUpdateHandler;
-
-class MIAUpdateAnyNode;
-class MIAUpdateNode;
-class MIAUpdateFwNode;
-
-// CLASS DECLARATION
-/**
-* This class represents the main view of IAUpdate
-*
-*/
-class CIAUpdateMainView : public CAknView, 
-                          public MAknToolbarObserver, 
-                          public MIAUpdateContainerObserver
-    {
-public:
-    /**
-    * Symbian two phased constructor.
-    * @return Instance of the created server object.
-    */
-    static CIAUpdateMainView* NewL(const TRect& aRect );
-
-    /**
-    * Symbian two phased constructor.
-    * @return Instance of the created server object.
-    */
-    static CIAUpdateMainView* NewLC(const TRect& aRect );
-
-    /**
-    * Destructor
-    */
-    ~CIAUpdateMainView();
-    
-    /**
-    * Refresh the list
-    * @param aNodes  Array of nodes 
-    * @param aError  Error code
-    */    
-    void RefreshL( const RPointerArray<MIAUpdateNode>& aNodes,
-                   const RPointerArray<MIAUpdateFwNode>& aFwNodes,
-                   TInt aError );       
-            
-    /**
-    * Returns node that's highlighted in a list
-    * @return Current (highlighted) node
-    */     
-    MIAUpdateAnyNode* GetCurrentNode();
-    
-    /**
-    * Returns node that's selected (marked) in a list
-    * Can be used only when it's known that only one node is selected (marked)
-    * @return selected (marked) node
-    */  
-    MIAUpdateAnyNode* GetSelectedNode();
-    
-    
-private:  // from CAknView
-    
-    /**
-    * Returns views id, intended for overriding by sub classes.
-    * @return id for this view.
-    */
-    TUid Id() const;
-    
-    /** 
-    * Command handling function intended for overriding by sub classes. 
-    * Default implementation is empty.  
-    * @param aCommand ID of the command to respond to. 
-    */
-    void HandleCommandL( TInt aCommand );
-    
-    /**
-    * Dynamic menu initiation
-    * Called by framework before menu is shown.
-    * @param aResourceId Menu resource id.
-	* @param aMenuPane Pointer to the menu.
-    */ 
-    void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+class HbListWidget;
+class HbAction;
+class HbAbstractViewItem;
+class HbGroupBox;
+class HbDataForm;
+class IAUpdateEngine;
+class IAUpdateDialogUtil;
+class TIAUpdateVersion;
+class HbTranslator;
 
 
-    /** 
-    * Handles a view activation and passes the message of type 
-    * @c aCustomMessageId. This function is intended for overriding by 
-    * sub classes. This function is called by @c AknViewActivatedL().
-    * Views should not launch waiting or modal notes or dialogs in
-    * @c DoActivateL.
-    * @param aPrevViewId Specifies the view previously active.
-    * @param aCustomMessageId Specifies the message type.
-    * @param aCustomMessage The activation message.
-    */
-    void  DoActivateL ( const TVwsViewId& aPrevViewId, 
-                        TUid aCustomMessageId, 
-                        const TDesC8& aCustomMessage );
-
-    /** 
-    * View deactivation function intended for overriding by sub classes. 
-    * This function is called by @c AknViewDeactivated().
-    */
-    void DoDeactivate();
- 
-private: // from MAknToolbarObserver 
+class IAUpdateMainView : public HbView
+{
+    Q_OBJECT 
     
-    /**
-    * Should be used to set the properties of some toolbar components 
-    * before it is drawn.
-    * @param aResourceId The resource ID for particular toolbar
-    * @param aToolbar The toolbar object pointer
-    */
-    void DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar );
-            
-    /**
-    * Handles toolbar events for a certain toolbar item.
-    * @param aCommand The command ID of some toolbar item.
-    */
-    void OfferToolbarEventL( TInt aCommand );
+public:
+    IAUpdateMainView(IAUpdateEngine *engine);
+    virtual ~IAUpdateMainView();
+        
+    void refresh(const RPointerArray<MIAUpdateNode> &nodes,
+                 const RPointerArray<MIAUpdateFwNode> &fwNodes,
+                 int error);
+signals:
+    void toSettingView();
     
-private: // from MIAUpdateContainerObserver   
+public slots:
+    void handleStartUpdate();
  
-    /**
-    * Mark list item
-    * @param aMark True if marking, False if unmarking
-    * @param aIndex  Index of the item
-    * @return False value if marking/unmarking cancelled when dependencies/dependants not found
-    */ 
-    TBool MarkListItemL( TBool aMark, TInt aIndex );
-  
-    /**
-    * Set text label to middle soft key
-    * @param aVisible   True value when MSK text is visible
-    * @param aSelected  True value when list item is selected( marked)
-    */
-    void SetMiddleSKTextL( TBool aVisible, TBool aSelected );
+    void handleSettings();
+ 
+    void handleDisclaimer();
+    
+    void handleDetails(HbAbstractViewItem *, const QPointF &);
     
-private: // constructors
-     
-    /** 
-    * Constuctor 
-    * @param aRect Rectangular of the view
-    */
-    void ConstructL(const TRect& aRect);
-
-    /** 
-    * C++ constuctor 
-    */
-    CIAUpdateMainView();
-
-private: // new methods    
-    /**
-    * Get selected (marked) nodes in the list
-    * @param aSelectedNodes Array of nodes 
-    */  
-    void GetSelectedNodesL( RPointerArray<MIAUpdateAnyNode>& aSelectedNodes ) const;
+    void handleFotaDetails(HbAbstractViewItem *, const QPointF &); 
+    
+    void handleSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+    
+    void handleFwSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+    
+    void dialogFinished(HbAction* action);
+    
+private:
     
-    /**
-      * Get mandatory nodes in the list
-      * @param aMandNodes Array of nodes 
-      */  
-    void GetMandatoryNodesL( RPointerArray<MIAUpdateAnyNode>& aMandNodes ) const;  
-    /**
-    * Pass selected indices to the container 
-    */ 
-    void SetSelectedIndicesL(); 
-    
-    /**
-    * Get index of a node 
-    *
-    * @param aNode Node
-    * @return Index of the node
-    */  
-    TInt NodeIndex( const MIAUpdateAnyNode& aNode ) const; 
-    
-    /**
-    * Updates the status pane text
-    */ 
-    void UpdateStatusPaneL();
-    
-    /**
-    * Updates selection information in navi pane 
-    */ 
-    void UpdateSelectionInfoInNaviPaneL();
-    
-    /**
-    * Removes selection info in  navi pane
-    */                                      
-    void RemoveSelectionInfoInNaviPane();
+    bool fotaSelected() const;
+    void markListItem(bool mark, int index);
+    void markFotaItem(bool mark);
+    bool getMandatoryNodes(RPointerArray<MIAUpdateNode> &mandNodes) const;
+    void showUpdateCannotOmitDialog(); 
+    void showDependenciesFoundDialog(QString &text);
+    void updateSelectionsToNodeArray(MIAUpdateNode &node, bool mark);
+    void updateSelectionsToList();
+    MIAUpdateNode* getApplicationNode(int index) const;
+    void showDetails(MIAUpdateAnyNode& node);
+    void constructDetailsText(MIAUpdateAnyNode &node, QString &text);
+    void versionText(const TIAUpdateVersion &version, QString &versionText);
+    void fileSizeText(int fileSize, QString &text);
+    void setImportance(MIAUpdateAnyNode *node, QString &importanceDescription);
+    void removeCurrentContentLayout();
+    void refreshFirmwareUpdates(const RPointerArray<MIAUpdateFwNode> &fwNodes);
+    void refreshFotaUpdate(MIAUpdateFwNode& fwNode);
+    void refreshNsuUpdate();
+    void refreshApplicationUpdates(const RPointerArray<MIAUpdateNode> &nodes);
+    void updateSelectionInfoInDock();
     
-    /**
-    * Shows dependencies found dialog
-    *
-    * @param aText Text shown in a dialog
-    * @return True value if marking/unmarking accepted 
-    */ 
-    TBool ShowDependenciesFoundDialogL( TDesC& aText ) const;
-    
-    /**
-    * Count of selected (marked) items 
-    *
-    * @return Count of selected items 
-    */                     
-    TInt CountOfSelectedItems() const;
-    
-    void ShowUpdateCannotOmitDialogL() const;
-    
-private: // Data
+private:
+    enum DialogState
+        {
+        NoDialog,
+        Dependencies,
+        CannotOmit,
+        Details
+        };
+     
+    IAUpdateEngine *mEngine;
+    IAUpdateDialogUtil *mDialogUtil;
+    HbWidget *mContent;
+    HbListWidget *mListView;
+    HbListWidget *mFwListView;
+    HbGroupBox *mApplicationUpdatesGroupBox;
+    HbGroupBox *mFwNSUGroupBox;
+    HbDataForm *mContentDataForm;
+    HbGroupBox *mSelections;
+    RPointerArray<MIAUpdateNode> mNodes;
+    RPointerArray<MIAUpdateFwNode> mFwNodes;
+    DialogState mDialogState; 
+    HbAction *mPrimaryAction;
+    MIAUpdateNode *mNode; 
+    bool mMark;
+    bool mSelectionUpdate;
+    bool mSelectionConnect;
+    HbTranslator *mTranslator;
 
-    CAknNavigationControlContainer* iNaviPane; //not owned
-    
-    CAknNavigationDecorator* iDecorator;
-        
-    CIAUpdateMainContainer* iContainer;
-    
-    RPointerArray<MIAUpdateAnyNode> iAllNodes;
-    
-    TBool iShowStatusDialogAgain;
-    
-    TInt iRefreshError;
-    
-    TInt iLastCommandId;
-    
-    CIAUpdateFWUpdateHandler* iFwUpdateHandler;
-    
-    TBool iIsDMSupported;
-    
-    };
+};
 
-
-#endif // IAUPDATEMAINVIEW_H
-
-// End of File
+#endif /* IAUPDATEMAINVIEW_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/inc/iaupdatemainwindow.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This file contains the header file of the IAUpdateMainWindow
+*                class 
+*
+*/
+
+#ifndef IAUPDATEMAINWINDOW_H_
+#define IAUPDATEMAINWINDOW_H_
+
+#include <QObject>
+#include <hbmainwindow.h>
+
+// Forward declarations
+class IAUpdateMainView;
+class HbDocumentLoader;
+class MIAUpdateNode;
+class MIAUpdateFwNode;
+class IAUpdateEngine;  
+class CIAUpdateSettingDialog;
+
+class IAUpdateMainWindow : public HbMainWindow
+{
+    Q_OBJECT
+    
+public:
+    IAUpdateMainWindow(IAUpdateEngine *engine);
+    virtual ~IAUpdateMainWindow();
+    
+    IAUpdateMainView*  GetMainView();
+    CIAUpdateSettingDialog* GetSettingView();
+
+public slots:
+    void toMainView();
+    void refreshMainView(const RPointerArray<MIAUpdateNode>& nodes,
+                         const RPointerArray<MIAUpdateFwNode>& fwNodes,
+                         int error);
+    void toSettingView();
+
+private:
+    void addMainView(IAUpdateEngine *engine);
+    void addSettingView();
+    
+private:
+    IAUpdateMainView *mMainView;
+    CIAUpdateSettingDialog *mSettingView;
+    
+};
+
+#endif /* IAUPDATEMAINWINDOW */
--- a/iaupdate/IAD/ui/inc/iaupdatenavipanehandler.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Header file of CIAUpdateNaviPaneHandler class
-*
-*/
-
-
-
-#ifndef IAUPDATENAVIPANEHANDLER_H
-#define IAUPDATENAVIPANEHANDLER_H
-
-
-//  INCLUDES
-#include <e32base.h>
-#include <aknnavide.h>
-
-//FORWARD DECLARATIONS
-class CEikStatusPane;
-
-
-/**
-* CIAUpdateNaviPaneHandler
-* 
-* This class is used for changing navipane title.
-*/
-class CIAUpdateNaviPaneHandler : public CBase
-	{
-    public:
-        /**
-        * Destructor.
-        */
-		virtual ~CIAUpdateNaviPaneHandler();
-
-        /**
-        * C++ default constructor.
-        */
-		CIAUpdateNaviPaneHandler(CEikStatusPane* aStatusPane);
-
-	public:
-
-		/**
-		* Sets navi pane title.
-		* @param aTitle.
-		* @return None.
-		*/
-		void SetNaviPaneTitleL(const TDesC& aTitle);
-		
-
-	private:
-		// status pane
-		CEikStatusPane* iStatusPane;
-	
-	    // navi Pane
-	    CAknNavigationControlContainer* iNaviPane;
-        
-        // navi decorator
-        CAknNavigationDecorator* iNaviDecorator;
-        
-        // has Navidecorator been pushed into navi pane
-        TBool iNavidecoratorPushed;
-        
-        // has navi pane been pushed into navigation pane's object stack
-        TBool iNavipanePushed;
-	};
-#endif      // IAUPDATENAVIPANEHANDLER_H
-            
-// End of File
--- a/iaupdate/IAD/ui/inc/iaupdatenodefilter.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdatenodefilter.h	Tue Aug 31 15:21:33 2010 +0300
@@ -93,6 +93,16 @@
     void SetDependenciesSelectedL( MIAUpdateNode& aNode,
                         const RPointerArray<MIAUpdateNode>& aAllNodes);
     
+    void StoreNodeListL( const RPointerArray< MIAUpdateNode >& aNodes);  
+    
+    void RestoreNodeListL( RPointerArray< MIAUpdateNode >& aNodes) const;
+    
+    void SortSelectedNodesFirstL( const RPointerArray<MIAUpdateNode>& aSelectedNodes, 
+                                 RPointerArray< MIAUpdateNode >& aNodes );
+    
+    void SortThisNodeFirstL( const MIAUpdateNode* aFirstNode, RPointerArray< MIAUpdateNode >& aNodes);
+
+    
 private:
 
     CIAUpdateNodeFilter();
@@ -135,6 +145,8 @@
     TBool iDmSupportAsked;
     
     TBool iDmSupport;
+    
+    RPointerArray< MIAUpdateNode > iStoredNodes;
 
     };
 
--- a/iaupdate/IAD/ui/inc/iaupdateprogressdialog.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateProgressDialog class.
-*
-*/
-
-
-
-#ifndef IAUPDATEPROGRESSDIALOG_H
-#define IAUPDATEPROGRESSDIALOG_H
-
-// INCLUDES
-#include <AknWaitDialog.h>
-
-
-// FORWARD DECLARATIONS
-class MIAUpdateWaitDialogObserver;
-
-// CLASS DECLARATION
-
-/**
-* Wait dialog for IA Update client
-*/
-class CIAUpdateProgressDialog : public CAknProgressDialog
-    {
-
-    public: // Constructors and destructor
-
-        /**
-        * Constructor
-        */
-        CIAUpdateProgressDialog( CEikDialog** aSelfPtr, TBool aVisibilityDelayOff );
-
-        virtual ~CIAUpdateProgressDialog();
-
-    public:
-        
-        /**
-        * From CEikDialog, respond to softkey inputs.
-        * @para aButtonId, type of pressed Button or Softkey
-        * @return TBool, ETrue if exit the dialog, otherwise EFalse.
-        */
-        TBool OkToExitL( TInt aButtonId );
-
-    public:  // New functions
-        void SetCallback( MIAUpdateWaitDialogObserver* aCallback );  
-        
-        /**
-        * Set final value for the progress bar in progress dialog.        
-        * @param aValue - Final value of the progress bar.
-        */
-        void SetProgressDialogFinalValueL( TInt aValue );
-
-        /**
-        * Increments the progress bar in progress dialog.
-        * @param aValue - Value to be set as the total progress.
-        */
-        void UpdateProgressDialogValueL( TInt aValue );      
-
-    private: //data
-
-        MIAUpdateWaitDialogObserver* iCallback;   
-        TInt iMaxProgress;     
-    };
-
-
-#endif // IAUPDATEPROGRESSDIALOG_H
-
-// End of file
--- a/iaupdate/IAD/ui/inc/iaupdaterefreshhandler.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdaterefreshhandler.h	Tue Aug 31 15:21:33 2010 +0300
@@ -23,6 +23,7 @@
 // INCLUDES
 #include <e32base.h>
 #include <eikenv.h>
+#include <e32property.h>
 
 // FORWARD DECLARATIONS
 class MIAUpdateRefreshObserver;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/inc/iaupdateresultsdialog.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Header file of IAUpdateResultsDialog
+*
+*/
+
+
+
+#ifndef IAUPDATERESULTSDIALOG_H
+#define IAUPDATERESULTSDIALOG_H
+
+
+//  INCLUDES
+#include <QObject>
+
+class TIAUpdateResultsInfo;
+
+class IAUpdateResultsDialog : public QObject
+{
+public:
+
+    IAUpdateResultsDialog(QObject *parent = 0);
+    ~IAUpdateResultsDialog();
+    
+    void showResults( const TIAUpdateResultsInfo &param, QObject* receiver, const char* member );
+   
+private:
+
+    void constructText(const TIAUpdateResultsInfo &param, QString &buf);
+};
+#endif      // IAUPDATERESULTSDIALOG_H
+            
+// End of File
--- a/iaupdate/IAD/ui/inc/iaupdateserver.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateServer class 
-*
-*/
-
-
-
-#ifndef IAUPDATESERVER_H
-#define IAUPDATESERVER_H
-
-//  INCLUDES
-#include <AknServerApp.h>
-
-
-// FORWARD DECLARATIONS
-class MRequestCallback;
-
-// CLASS DECLARATION
-
-/**
-* This class represents the IAUpdate server.
-*
-* @since 3.2
-*/
-class CIAUpdateServer : public CAknAppServer
-    {
-    public:  // Constructors and destructor
-  
-        /**
-        * Constructor.
-        * @return Instance of the created server object.
-        */  
-        static CIAUpdateServer* NewL();
-
-        /**
-        * Destructor.
-        */
-        virtual ~CIAUpdateServer();      
-        
-    
-    public: // Functions from base classes
-
-        /**
-        * From CApaAppServiceBase, Service creation function.
-        * @since 3.2
-        */
-        CApaAppServiceBase* CreateServiceL( TUid aServiceType ) const;
-               
-        
-        void HandleAllClientsClosed();
-        
-        
-    private:
-
-        /**
-        * Constructor.
-        */
-        CIAUpdateServer();
-
-        /**
-        * 2nd phase constructor.
-        * @param aServerName - Name of the server
-        */
-        void ConstructL();
-        
-
-    };
-
-#endif      // IAUPDATESERVER_H
-            
-// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/inc/iaupdateserviceprovider.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,118 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This file contains the header file of the IAUpdateServiceProvider class 
+*
+*/
+
+
+
+#ifndef IAUPDATESERVICEPROVIDER_H
+#define IAUPDATESERVICEPROVIDER_H
+
+#include <QtCore/qmetaobject.h>
+#include <xqserviceprovider.h>
+
+class CIAUpdateParameters;
+class CIAUpdateResult;
+class IAUpdateEngine;
+
+class IAUpdateServiceProvider : public XQServiceProvider
+{
+    Q_OBJECT
+    
+    public:
+    
+    enum RequestType
+        {
+        /**
+        * No operation is going on.
+        */ 
+        NoOperation,       
+                
+        /**
+        * Update check has been requested.
+        */
+        CheckUpdates,
+
+        /**
+        * Show Update operation has been requested.
+        */
+        ShowUpdates,     
+                
+        /**
+        * Update query has been requested.
+        */
+        UpdateQuery,
+        /**
+        * Bring to foreground has been requested.
+        */
+        BroughtToForeground
+        };
+
+    
+    IAUpdateServiceProvider(IAUpdateEngine& engine);
+    ~IAUpdateServiceProvider();
+    
+    public slots:
+    void startedByLauncher(QString refreshFromNetworkDenied);
+    void checkUpdates(QString stringWgId, 
+                      QString stringUid,  
+                      QString searchCriteria, 
+                      QString commandLineExecutable,
+                      QString commandLineArguments,
+                      QString stringShowProgress,
+                      QString stringImportance,
+                      QString stringType,
+                      QString stringRefresh);
+    void showUpdates(QString stringWgId, 
+                     QString stringUid,  
+                     QString searchCriteria, 
+                     QString commandLineExecutable,
+                     QString commandLineArguments,
+                     QString stringShowProgress,
+                     QString stringImportance,
+                     QString stringType,
+                     QString stringRefresh);
+
+    void updateQuery(QString stringWgId);
+    
+    private:
+    
+    void SetParams(CIAUpdateParameters& params,
+                   QString& stringUid,  
+                   QString& searchCriteria, 
+                   QString& commandLineExecutable,
+                   QString& commandLineArguments,
+                   QString& stringShowProgress,
+                   QString& stringImportance,
+                   QString& stringType,
+                   QString& stringRefresh) const; 
+    
+    public:  //temp
+    
+    void completeLauncherLaunch(int error);
+    void completeCheckUpdates(int countOfAvailableUpdates, int error);
+    void completeShowUpdates(const CIAUpdateResult* updateResult, int error);
+    void completeUpdateQuery(bool updateNow, int error);
+    
+    private:
+    
+    IAUpdateEngine* mEngine; //not owned
+    int mAsyncReqId;
+    RequestType mCurrentRequest;
+};
+
+#endif      // IAUPDATESERVICEPROVIDER_H
+            
+// End of File
--- a/iaupdate/IAD/ui/inc/iaupdatesession.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the header file of the CIAUpdateSession class 
-*
-*/
-
-
-
-#ifndef IAUPDATESESSION_H
-#define IAUPDATESESSION_H
-
-//  INCLUDES
-#include <AknServerApp.h>
-
-#include "iaupdaterequestobserver.h"
-
-// FORWARD DECLARATIONS
-class CIAUpdateServer;
-class RMessage2;
-class CEikonEnv;
-
-// CLASS DECLARATION
-
-/**
-* This class represents the main server session.
-*
-*/
-class CIAUpdateSession : public CAknAppServiceBase,
-                         public MIAUpdateRequestObserver
-    {
-    public:  // Constructors and destructor
-     
-        /**
-        * C++ default constructor.
-        */
-        CIAUpdateSession();
-
-        /**
-        * Destructor.
-        */
-        virtual ~CIAUpdateSession();
-
-    public: // From CAknAppServiceBase
-
-        /**
-        * Handles the received message.
-        * The method simply calls HandleRequestL under trap harness. 
-        * @param aMessage - Reference to the message that contains the request
-        */
-        void ServiceL( const RMessage2& aMessage );
-
-        /**
-        * Called back by the server framework if this 
-        * session's RunL function returns an error.
-        * @param aMessage - Reference to the message that contains the request
-        * @param aError - Error code.
-        */
-        void ServiceError( const RMessage2& aMessage, TInt aError );
-
-        /**
-        * Completes construction of this server-side 
-        * client session object.
-        */
-        void CreateL(); 
-
-
-    public: // from MIAUpdateRequestObserver
-    
-        /**
-         * @see MIAUpdateRequestObserver::RequestCompleted
-         */
-        void RequestCompleted( CIAUpdateResult* aResult, 
-                               TInt aCountOfAvailableUpdates,
-                               TBool aUpdateNow,            
-                               TInt aError );
-
-
-    private:
-
-        /**
-        * Returns reference of the server.
-        * @return Reference of the server.
-        */
-        CIAUpdateServer& Server();
-
-        /**
-        * Handles the request.
-        * @param aMessage - Reference to the message that contains the request
-        */
-        void HandleRequestL( const RMessage2& aMessage );
-
-
-    private: // From CApaAppServiceBase
-
-        /**
-        * Virtual framework function that is called 
-        * on receipt of a message from the client. This allows the service 
-        * implementation to define a security policy for messages from the client. 
-        * @param aMessage - Reference to the message that contains the request
-        */
-        CPolicyServer::TCustomResult SecurityCheckL( const RMessage2& aMsg, 
-                                                     TInt& aAction, 
-                                                     TSecurityInfo& aMissing );        
-
-    private:    // Data
-
-        RMessage2* iMessage;
-        
-        CEikonEnv* iEikEnv; //not owned
-        
-                   
-    };
-
-
-#endif      // IAUPDATESESSION_H  
-            
-// End of File
--- a/iaupdate/IAD/ui/inc/iaupdatesettingdialog.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdatesettingdialog.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010-2011 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,271 +11,90 @@
 *
 * Contributors:
 *
-* Description:   Header file of CIAUpdateSettingDialog class
+* Description:   CIAUpdateSettingDialog
 *
 */
 
-
-
-
-#ifndef IAUPDATESETTINGDIALOG_H
-#define IAUPDATESETTINGDIALOG_H
-
-
-//  INCLUDES
-#include "iaupdatedialogutil.h"
-
-#include <e32base.h>
-#include <AknDialog.h>
-#include <aknsettingitemlist.h>
-
-
-// FORWARD DECLARATIONS
-class CAknSettingItemList;
-class CIAUpdateSettingItemList;
-class CIAUpdateAccessPointHandler;
-class CIAUpdateStatusPaneHandler;
-
-
-// CLASS DECLARATION
+#ifndef ACTION_H_
+#define ACTION_H_
 
-/**
-* CIAUpdateSettingDialog
-*
-* CIAUpdateSettingDialog is used for editing IA Update settings.
-*/
-class CIAUpdateSettingDialog : public CAknDialog, public MEikListBoxObserver
-    {
-    public:
-    enum TAttributeKeys
-        {
-        EAccessPoint = 0,
-        EAutoUpdateCheck
-        };
-    
-	public:
-	
-	    /**
-        * Launches dialog.
-        * @param aParam Class that contains dialog parameters.
-        * @return Completion code.
-        */
-		static TBool ShowDialogL();
-		
-		
-	public:// Constructors and destructor
-
-        /**
-        * Two-phased constructor.
-        */
-		static CIAUpdateSettingDialog* NewL();
-        
-        /**
-        * Destructor.
-        */
-        virtual ~CIAUpdateSettingDialog();
-    
-    private:
+#include <hbview.h>
+#include <hblineedit.h>
+#include <hblistwidget.h>
+#include <hblabel.h>
+#include <hbdataform.h>
+#include <hbdataformmodel.h>
 
-        /**
-        * C++ default constructor.
-        */
-        CIAUpdateSettingDialog();
-	
-        /**
-        * By default Symbian OS constructor is private.
-        */
-        void ConstructL();
-
-	private:
-	    SEikControlInfo CreateCustomControlL( TInt aControlType );
-	    
-        /**
-        * From MEikListBoxObserver, called by framework.
-        * @param aListBox.
-        * @param aEventType.
-		* @return None
-        */
-		void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType);
-
-        /**
-        * From the base class.
-		* Called by framework before the dialog is shown.
-        * @param None
-		* @return None
-        */
-        void PreLayoutDynInitL();
+// Access point selection
+#include <cmmanager.h>
 
-        /**
-        * From the base class.
-		* Called by framework before exiting the dialog.
-        * @param aButtonId Button id.
-		* @return ETrue to exit\ EFalse to not to exit.
-        */
-        TBool OkToExitL(TInt aButtonId);
-
-        /**
-        * From the base class.
-		* Called by framework for key event handling.
-        * @param aKeyEvent.
-		* @param aType.
-		* @return Return code.
-        */
-		TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+// Destination query dialog
+#include "cmapplsettingsui.h"
 
-        /**
-        * From the base class.
-		* Called by framework when dialog is activated.
-        * @param None.
-		* @return None.
-        */
-		void ActivateL();
-		
-		/**
-		* Method to get context sensitive help topic.
-        * @param aContext Help topic to open.
-		* @return None.
-        */
-		void GetHelpContext(TCoeHelpContext& aContext) const;
-
-		/**
-        * From the base class.
-		* Called by framework before menu is shown.
-        * @param aResourceId Menu resource id.
-		* @param aMenuPane Pointer to the menu.
-        * @return None.
-        */
-		void DynInitMenuPaneL(TInt aResourceID, CEikMenuPane* aMenuPane);
+class CIAUpdateSettingDialog : public HbView
+{
+    Q_OBJECT
 
-		/**
-		* From the base class.
-		* Handles menu events.
-		* @param  aCommandId Command id.
-		* @return None.
-		*/
-		void ProcessCommandL(TInt aCommandId);
-		
-		/**
-		* From base class.
-		* Called when UI layout changes. 
-		* @param aType.
-    	* @return None.
-		*/
-        void HandleResourceChange(TInt aType);
-
-
-    private:
-		/**
-		* Save settings to CR.
-		*/
-		void SaveSettingsL();
-
-		/**
-		* Read settings from CR.
-		*/
-        void ReadSettingsL();
+public:
+    explicit CIAUpdateSettingDialog(QGraphicsItem *parent=0);
+    virtual ~CIAUpdateSettingDialog();
+    
+public slots:
+    
+private slots:
+     void toggleChange(QModelIndex startIn, QModelIndex endIn);
+     void showResults(uint retval);
+     void showPreviousView(); 
+     void activated(const QModelIndex& index);
+     
+signals:
+         void toMainView();
+    
+private:
+     
+     void queryDestination();
      
-	private:
-		/**
-        * Opens setting editor.
-        */
-		void EditItemL();
-
-		/**
-        * Set setting item visibility (normal/readonly/hidden).
-        * @param None.
-		* @return None.
-        */
-		void SetVisibility();
-		
-        /**
-        * Set all settings to read-only state.
-        * @param None.
-		* @return None.
-        */
-		void SetAllReadOnly();
-		
-
-	private:
-		CIAUpdateSettingItemList* iList;
-
-		// for title and icon handling
-		CIAUpdateStatusPaneHandler* iStatusPaneHandler;
-
-		// dialog edit mode
-		TInt iEditMode;
-
-    };
-
+     void saveSettingsL();
+     
+     void initializeView();
+     
+     uint getInternetSnapIdL();
+     
+     void getDestinationNameL( uint aItemUid, QString& aItemName );
+     
+     void initializeFieldsL();
+     
+    // Form & model    
+    HbDataForm* mSettingsForm;
+    HbDataFormModel *mModel;
+    
+    
+    // settings ui
+    CmApplSettingsUi* mApplSett;
+    CmApplSettingsUi::SettingSelection mSelection;
 
-/**
-* CIAUpdateSettingItemList
-*
-* Customized setting item list.
-*/
-class CIAUpdateSettingItemList : public CAknSettingItemList
-    {
-    public:
-        TInt Attribute( TInt aKey );
-        void CheckSettings();
-        
-        
-    public:  // from CAknSettingItemList
-        /**
-        * Load settings.
-        */
-        void LoadSettingsL();
-        
-    	/**
-    	* Launches the setting page for the current item by calling EditItemL on it
-    	* @param aIndex	- current item's (Visible) index in the list
-    	* @param aCalledFromMenu- ignored in most classes; may alter the behaviour
-    	* of the setting page
-    	*/
-    	void EditItemL( TInt aIndex, TBool aCalledFromMenu );
-
-        /**
-        * Create setting item.
-        * @param aSettingId Setting id.
-        * @return Setting item.
-        */
-        CAknSettingItem* CreateSettingItemL( TInt aSettingId );
+    // Form items
+    HbDataFormModelItem *mAutoUpdateItem;
+    HbDataFormModelItem *mDestinationItem;
+    
+    // currently selected destination
+    QString mCurrentDest;
+    
+    // NW connection flags
+    bool mSetByNwQuery; // destination set by query / user
+    bool mConnected;    // already connected to query ?
+    bool mInitialized;  // connection initialized ?
+    
+    //TInt mAccessPointId;
+    
+    // Connection manager
+    RCmManager mCmManager;
+    
+    // for back key catching
+    HbAction*                   mBackKey;
+    
+    
 
-	private:
-	    TInt iAccessPoint;
-        TInt iAutoUpdateCheck;
-        };
-
-
-class CIAUpdateAccessPointSettingItem : public CAknSettingItem
-	{
-	public:
-        static CIAUpdateAccessPointSettingItem* 
-        CIAUpdateAccessPointSettingItem::NewL( TInt aSettingId, TInt& aAccessPointId );
-	    ~CIAUpdateAccessPointSettingItem();
-	private:
-	    CIAUpdateAccessPointSettingItem ( TInt aSettingId, TInt& aAccessPointId );
-	    void ConstructL();
-	    
+};
 
-	public:	// from CAknSettingItem
-		void EditItemL( TBool aCalledFromMenu );
-		const TDesC& SettingTextL();
-	
-	private:
-	    TBool EditAccessPointItemL();
-
-    private:
-        HBufC* iSettingText;
-        
-        TInt& iAccessPointId;
-        
-   		// for access point selection
-		CIAUpdateAccessPointHandler* iApHandler;
-	};
-
-
-
-#endif      // IAUPDATESETTINGDIALOG_H
-            
-// End of File
+#endif /* ACTION_H_ */
--- a/iaupdate/IAD/ui/inc/iaupdatestatusdialog.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Header file of CIAUpdateStatusDialog
-*
-*/
-
-
-
-#ifndef IAUPDATESTATUSDIALOG_H
-#define IAUPDATESTATUSDIALOG_H
-
-
-//  INCLUDES
-#include <e32base.h>
-
-// FORWARD DECLARATIONS
-class TIAUpdateDialogParam;
-class MIAUpdateTextLinkObserver;
-
-
-
-
-/**
-* CIAUpdateStatusDialog
-*
-* CIAUpdateStatusDialog is used for displaying status details.
-*/
-class CIAUpdateStatusDialog : public CBase
-    {
-	public:
-	
-	    /**
-        * Launches dialog.
-        * @param aParam Class that contains dialog parameters.
-        * @return Completion code.
-        */
-		static TInt ShowDialogL( TIAUpdateDialogParam* aParam );
-		
-	public:// Constructors and destructor
-
-        /**
-        * Two-phased constructor.
-        */
-		static CIAUpdateStatusDialog* NewL( TIAUpdateDialogParam* aParam );
-        
-        /**
-        * Destructor.
-        */
-        virtual ~CIAUpdateStatusDialog();
-    
-    private:
-
-        /**
-        * C++ default constructor.
-        */
-        CIAUpdateStatusDialog( TIAUpdateDialogParam* aParam );
-	
-        /**
-        * By default Symbian OS constructor is private.
-        */
-        void ConstructL();
-        
-    private:
-        void ConstructTextL();
-        TInt ShowDialogL();
-        void HandleLinkL();
-        
-    private:
-        // callback function in message query
-        static TInt HandleLink( TAny* aPtr );
-        
-    private:
-        TIAUpdateDialogParam* iParam;
-        HBufC* iBuf;
-        MIAUpdateTextLinkObserver* iObserver;
-    };
-
-
-#endif      // IAUPDATESTATUSDIALOG_H
-            
-// End of File
--- a/iaupdate/IAD/ui/inc/iaupdatestatuspanehandler.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Header file of CIAUpdateStatusPaneHandler class
-*
-*/
-
-
-
-#ifndef IAUPDATESTATUSPANEHANDLER_H
-#define IAUPDATESTATUSPANEHANDLER_H
-
-
-//  INCLUDES
-#include <e32base.h>
-#include <aknappui.h>
-
-// FORWARD DECLARATIONS
-class CIAUpdateNaviPaneHandler;
-
-
-
-/**
-* CIAUpdateStatusPaneHandler
-* 
-* This class is used for changing dialog title and image.
-*/
-class CIAUpdateStatusPaneHandler : public CBase
-	{
-    public:
-        /**
-        * Two-phased constructor.
-        */
-		static CIAUpdateStatusPaneHandler* NewL(CAknAppUi* aAppUi);
-
-        /**
-        * Destructor.
-        */
-		virtual ~CIAUpdateStatusPaneHandler();
-
-    private:
-        /**
-        * By default Symbian OS constructor is private.
-        */
-		void ConstructL();
-
-        /**
-        * C++ default constructor.
-        */
-		CIAUpdateStatusPaneHandler(CAknAppUi* aAppUi);
-
-	public:
-		/**
-		* Stores original title so it can be restored when dialog closes.
-		* @param  None.
-		* @return None.
-		*/
-        void StoreOriginalTitleL();
-
-		/**
-		* Restores original title.
-		* @param  None.
-		* @return None.
-		*/
-		void RestoreOriginalTitleL();
-
-		/**
-		* Sets dialog title.
-		* @param  aText.
-		* @return None.
-		*/
-		void SetTitleL(const TDesC& aText);
-
-		/**
-		* Sets dialog title.
-		* @param  aResourceId.
-		* @return None.
-		*/
-		void SetTitleL(TInt aResourceId);
-
-	public:
-		/**
-		* Sets dialog title.
-		* @param aAppUi.
-		* @param aText.
-		* @return Return code.
-		*/
-		static TBool SetTitleL(CAknAppUi* aAppUi, const TDesC& aText);
-
-		/**
-		* Gets dialog title.
-		* @param aAppUi.
-		* @param aText.
-		* @return Return code.
-		*/
-		static TBool GetTitleL(CAknAppUi* aAppUi, HBufC*& aText);
-		
-		/**
-		* Sets navi pane title.
-		* @param aTitle.
-		* @return None.
-		*/
-		void SetNaviPaneTitleL(const TDesC& aTitle);
-		
-	private:
-		// access to app ui
-		CAknAppUi* iAppUi;
-
-		// original status pane title
-		HBufC* iOriginalTitle;
-		
-		// is original status pane title stored
-		TBool iOriginalTitleStored;
-
-		// original context pane image
-		CEikImage* iOriginalImage;
-		
-   	    CIAUpdateNaviPaneHandler* iNaviPaneHandler;
-	};
-
-
-
-
-#endif      // IAUPDATESTATUSPANEHANDLER_H
-            
-// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/inc/iaupdatetools.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This file contains the header file of the IAUpdateTools functions
+*
+*/
+
+
+
+#ifndef IA_UPDATE_TOOLS_H
+#define IA_UPDATE_TOOLS_H
+
+#include <e32base.h>
+#include <e32cmn.h>
+
+class RReadStream;
+class RWriteStream;
+
+
+/**
+ * IAUpdateTools provides general tool functions
+ *
+ * @since S60 v3.2
+ */
+namespace IAUpdateTools
+    {
+
+    /**
+     * @param aTarget The old pointer data will be deleted and the pointer will point to the new data 
+     * that will contain externalization of the CIAUpdateParameters object.
+     * @param aSource CIAUpdateParameters object that will be externalized to a descriptor.
+     * @exception Leaves with system wide error code.
+     */
+    void ExternalizeParametersL( HBufC8*& aTarget,
+                                 const CIAUpdateParameters& aSource );
+
+    /**
+     * Internalizes CIAUpdateParameters from the source descriptor data.
+     *
+     * @param aTarget CIAUpdateParameters object that will be internalized.
+     * @param aSource Data that is used to internalize CIAUpdateParameters object.
+     * @exception Leaves with system wide error code.
+     */
+    void InternalizeParametersL( CIAUpdateParameters& aTarget, 
+                                 const TDesC8& aSource );
+
+
+    /**
+     * Externalizes the descriptor to the stream with length information
+     *
+     * @param aDes Descriptor to externalize
+     * @param aStream Target stream
+     * @exception Leaves with system wide error code.
+     */
+    void ExternalizeDesL( const TDesC& aDes, 
+                          RWriteStream& aStream );
+
+    /**
+     * Internalizes a descriptor written with ExternalizeDesL() from the stream
+     *
+     * @param Target descriptor pointer. Old descriptor is deleted if the read is 
+     * successful.
+     * @param aStream Source stream
+     * @return Length of the read data
+     * @exception Leaves with system wide error code. 
+     */
+    TInt InternalizeDesL( HBufC*& aDes, 
+                          RReadStream& aStream );
+
+
+    /**
+     * @see ExternalizeDesL
+     */
+    void ExternalizeDes8L( const TDesC8& aDes, 
+                           RWriteStream& aStream );
+
+    /**
+     * @see InternalizeDesL
+     */
+    TInt InternalizeDes8L( HBufC8*& aDes, 
+                           RReadStream& aStream );
+
+    }
+
+#endif // IA_UPDATE_TOOLS_H
--- a/iaupdate/IAD/ui/inc/iaupdateuicontroller.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdateuicontroller.h	Tue Aug 31 15:21:33 2010 +0300
@@ -28,6 +28,7 @@
 #include "iaupdatecontrollerobserver.h"
 #include "iaupdatenodeobserver.h"
 #include "iaupdatewaitdialogobserver.h"
+#include "iaupdatedialogobserver.h"
 #include "iaupdatestarterobserver.h"
 #include "iaupdateroaminghandlerobserver.h"
 #include "iaupdaterefreshobserver.h"
@@ -47,7 +48,13 @@
 class MIAUpdateUiControllerObserver;
 class MIAUpdateHistory;
 class MIAUpdateFwNode;
+class IAUpdateWaitDialog;
+class IAUpdateDialogUtil;
+
+class QString;
 class CIAUpdateNodeId;
+class CEikonEnv;
+class HbAction;
 
 
 // CLASS DECLARATION
@@ -62,7 +69,8 @@
     public MIAUpdateWaitDialogObserver,
     public MIAUpdateStarterObserver,
     public MIAUpdateRoamingHandlerObserver,
-    public MIAUpdateRefreshObserver
+    public MIAUpdateRefreshObserver,
+    public IAUpdateDialogObserver
     {
            
 public: //new functions
@@ -234,6 +242,13 @@
     TBool ForcedRefresh() const;
       
     void SetForcedRefresh( TBool aForcedRefresh );
+    
+    /**
+     *  Set node list to normal state after update. 
+     */
+    void RefreshNodeList();
+    
+    
     /**
      * Is client role "testing"
      *
@@ -323,11 +338,13 @@
 private: // From MIAUpdateWaitDialogObserver    
     
     /**
-     * This is called when the dialog is about to be closed.
-     * @param aButtonId - Id of the button, which was used to cancel the dialog.
-     * @return ETrue, if it's ok to close the dialog, EFalse otherwise.
+     * This is called when the dialog is  closed.
      */
-    TBool HandleDialogExitL( TInt aButtonId );   
+     void HandleWaitDialogCancel();   
+     
+private: // From IAUpdateDialogObserver     
+         
+     void dialogFinished(HbAction *action);   
     
 
 private: // From MIAUpdateRefreshObserver   
@@ -352,6 +369,8 @@
 
 
 private: // new functions
+    
+    void AgreementHandledL();
 
     /**
      * Called when refreshing updates list is completed.
@@ -429,7 +448,7 @@
      * @param aDisplayString       A string to be displayed
      * @param aVisibilityDelayOff  ETrue if visibility delay is off
      */                  
-    void ShowWaitDialogL( const TDesC& aDisplayString, 
+    void ShowWaitDialogL( const QString& aDisplayString, 
                           TBool aVisibilityDelayOff ); 
     
     /**
@@ -544,6 +563,14 @@
         ESelfUpdating
         };
 
+    enum TDialogState
+        {
+        ENoDialog,
+        EAgreement,
+        EInsufficientMemory  
+        };
+    
+    
     MIAUpdateUiControllerObserver& iObserver;
 
     MIAUpdateController* iController;
@@ -557,8 +584,10 @@
     RPointerArray<CIAUpdateNodeId> iPreviousSelections;
     
     RPointerArray<MIAUpdateNode> iServicePackNodes;
+    
+    IAUpdateDialogUtil *mDialogUtil;  
  
-    CIAUpdateWaitDialog* iWaitDialog;
+    IAUpdateWaitDialog *mWaitDialog;
     
     CIAUpdateProgressDialog* iProgressDialog;
     
@@ -584,6 +613,8 @@
     
     TState iState;
     
+    TDialogState iDialogState;
+    
     TBool iClosingAllowedByClient;
     
     CIAUpdateUiConfigData* iConfigData;
@@ -603,6 +634,8 @@
     TBool iForcedRefresh;
         
     TBool iTestRole;
+    
+    HbAction *mPrimaryAction;
 
     };
 
--- a/iaupdate/IAD/ui/inc/iaupdateuicontrollerobserver.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdateuicontrollerobserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -49,6 +49,13 @@
     virtual void HandleLeaveErrorWithoutLeave( TInt aError ) = 0;
     
     /**
+     Called when UI to be redrawn during update process
+     *
+     * @param aError Error code
+    */
+    virtual void RefreshUI() = 0;
+    
+    /**
     * Called when async update list refresh is completed
     *
     * @param aError Error code
--- a/iaupdate/IAD/ui/inc/iaupdatewaitdialog.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdatewaitdialog.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:   This file contains the header file of the CIAUpdateWaitDialog class.
+* Description:   This file contains the header file of the IAUpdateWaitDialog class.
 *
 */
 
@@ -21,10 +21,13 @@
 #define IAUPDATEWAITDIALOG_H
 
 // INCLUDES
-#include <AknWaitDialog.h>
+#include <QObject>
+
+#include "iaupdatewaitdialog.h"
 
 
 // FORWARD DECLARATIONS
+class HbProgressDialog;
 class MIAUpdateWaitDialogObserver;
 
 // CLASS DECLARATION
@@ -32,34 +35,36 @@
 /**
 * Wait dialog for IA Update client
 */
-class CIAUpdateWaitDialog : public CAknWaitDialog
-    {
+class IAUpdateWaitDialog : public QObject
+{
+    Q_OBJECT
 
-    public: // Constructors and destructor
+public: // Constructors and destructor
 
-        /**
-        * Constructor
-        */
-        CIAUpdateWaitDialog( CEikDialog** aSelfPtr, TBool aVisibilityDelayOff );
+    /**
+    * Constructor
+    */
+    IAUpdateWaitDialog();
 
-        virtual ~CIAUpdateWaitDialog();
+    ~IAUpdateWaitDialog();
 
-    public:
+public:  // New functions
+    
+    int showDialog(const QString& text);
         
-        /**
-        * From CEikDialog, respond to softkey inputs.
-        * @para aButtonId, type of pressed Button or Softkey
-        * @return TBool, ETrue if exit the dialog, otherwise EFalse.
-        */
-        TBool OkToExitL( TInt aButtonId );
+    void SetCallback(MIAUpdateWaitDialogObserver* callback );  
+    
+    void close();
+    
+public slots:
 
-    public:  // New functions
-        void SetCallback( MIAUpdateWaitDialogObserver* aCallback );        
+    void dialogCancelled();
 
-    private: //data
-
-        MIAUpdateWaitDialogObserver* iCallback;        
-    };
+private: //data
+    
+    HbProgressDialog *mWaitDialog;
+    MIAUpdateWaitDialogObserver *mCallback;        
+};
 
 
 #endif // IAUPDATEWAITDIALOG_H
--- a/iaupdate/IAD/ui/inc/iaupdatewaitdialogobserver.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/inc/iaupdatewaitdialogobserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -18,8 +18,8 @@
 
 
 
-#ifndef IAUPDATEDIALOGS_H
-#define IAUPDATEDIALOGS_H
+#ifndef IAUPDATE_WAITDIALOG_OBSERVER_H
+#define IAUPDATE_WAITDIALOG_OBSERVER_H
 
 //  INCLUDES
 #include <e32base.h>
@@ -35,15 +35,13 @@
     {
     public:
         
-        /**
-        * This is called when the dialog is about to be closed.
-        * @param aButtonId - Id of the button, which was used to cancel the dialog.
-        * @return ETrue, if it's ok to close the dialog, EFalse otherwise.
-        */
-        virtual TBool HandleDialogExitL( TInt aButtonId ) = 0;    
+    /**
+    * This is called when the dialog is cancelled
+    */
+    virtual void HandleWaitDialogCancel() = 0;    
     };
 
 
-#endif // IAUPDATEDIALOGS_H
+#endif // IAUPDATE_WAITDIALOG_OBSERVER_H
             
 // End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/service_conf.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<service>
+  <name>com.nokia.services.swupdate</name>
+  <filepath>No path</filepath>
+  <description>SWUpdate service</description>
+  <interface>
+     <name>swupdate_interface</name>
+     <version>1.0</version>
+     <description>Interface which may do something</description>
+   </interface>
+</service>
\ No newline at end of file
--- a/iaupdate/IAD/ui/src/iaupdateaccesspointhandler.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,181 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:    
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "iaupdateaccesspointhandler.h"
-#include "iaupdatedebug.h"
-#include <iaupdate.rsg>
-
-#include <featmgr.h>
-#include <StringLoader.h>
-// access point selection
-#include <cmapplicationsettingsui.h>
-#include <cmconnectionmethoddef.h>
-#include <cmdestination.h>
-
-
-
- 
-
-/******************************************************************************
- * class CIAUpdateAccessPointHandler
- ******************************************************************************/
- 
-// -----------------------------------------------------------------------------
-// CIAUpdateAccessPointHandler::NewLC
-//
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateAccessPointHandler* CIAUpdateAccessPointHandler::NewL()
-    {
-    CIAUpdateAccessPointHandler* self = new( ELeave ) CIAUpdateAccessPointHandler();
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-
-	return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// Destructor
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateAccessPointHandler::~CIAUpdateAccessPointHandler()
-	{
-	delete iCmUi;
-	iCmManager.Close();
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAccessPointHandler::CIAUpdateAccessPointHandler
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateAccessPointHandler::CIAUpdateAccessPointHandler()
-	{
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAccessPointHandler::ConstructL
-//
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateAccessPointHandler::ConstructL()
-    {
-    iCmManager.OpenL();
-    iCmUi = CCmApplicationSettingsUi::NewL();
-
-	iIdAppCsdSupport = EFalse;
-	FeatureManager::InitializeLibL();
-	if ( FeatureManager::FeatureSupported( KFeatureIdAppCsdSupport ) )
-	    {
-	    iIdAppCsdSupport = ETrue;
-	    }
-	FeatureManager::UnInitializeLib();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAccessPointHandler::ShowApSelectDialogL
-//
-// -----------------------------------------------------------------------------
-//
-TInt CIAUpdateAccessPointHandler::ShowApSelectDialogL( TInt& aItemUid, HBufC*& aItemName )
-	{
-    TBearerFilterArray filterArray;
-    TCmSettingSelection selection;
-    selection.iId = aItemUid;
-    selection.iResult = CMManager::EDestination;
-    
-    TBool ret = iCmUi->RunApplicationSettingsL( 
-        selection,
-        CMManager::EShowDestinations | CMManager::EShowDefaultConnection, 
-        filterArray );
-    filterArray.Close();
-	
-	if ( ret )
-		{
-		aItemUid = selection.iId;
-		if ( selection.iResult == CMManager::EDefaultConnection )
-		    {
-			GetDefaultConnectionLabelL( aItemName );
-			}
-	    else
-	        {
-	        GetApNameL( aItemUid, aItemName );	
-	        }
-		return EDialogSelect;
-		}
-    else
-    	{
-    	return EDialogCancel;
-    	}
-	}
-
-	
-// -----------------------------------------------------------------------------
-// CIAUpdateAccessPointHandler::GetApNameL
-//
-// -----------------------------------------------------------------------------
-//
-TInt CIAUpdateAccessPointHandler::GetApNameL( TInt aItemUid, HBufC*& aItemName )
-	{
-	if ( aItemUid == KErrNotFound || aItemUid == 0 )
-		{
-		aItemName = KNullDesC().AllocL();
-		return KErrNotFound;
-		}
-
-    RCmDestination dest = iCmManager.DestinationL( aItemUid );
-    CleanupClosePushL( dest );
-    HBufC* temp = dest.NameLC();    
-    CleanupStack::Pop( temp );
-	CleanupStack::PopAndDestroy( &dest ); 
-	aItemName = temp;
-
-	TInt ret = KErrNone;
-	if ( aItemName->Length() == 0 ) 
-		{
-		ret = KErrNotFound;
-		}
-    
-	return ret;
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAccessPointHandler::GetDefaultConnectionLabelL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateAccessPointHandler::GetDefaultConnectionLabelL( HBufC*& aLabelText )
-    {
-    aLabelText = StringLoader::LoadLC( R_IAUPDATE_DEFAULT_CONNECTION );    
-    CleanupStack::Pop( aLabelText );
-    }
-
-    
-//  End of File  
--- a/iaupdate/IAD/ui/src/iaupdateagreement.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdateagreement.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -18,18 +18,15 @@
 
 
 //INCLUDES
+#include <hbaction.h>
+#include <hbtextitem.h>
+#include <centralrepository.h>
 
 #include "iaupdateagreement.h"
 #include "iaupdatefirsttimeinfo.h"
-#include "iaupdatedialogutil.h"
 #include "iaupdate.hrh"
 #include "iaupdateprivatecrkeys.h"
 
-#include <avkon.rsg>
-#include <iaupdate.rsg>
-#include <aknmessagequerydialog.h>      // CAknMessageQueryDialog
-#include <StringLoader.h>
-#include <AknUtils.h>
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -110,11 +107,6 @@
             accepted = ETrue;
             firstTimeInfo->SetAgreementAcceptedL();
             }
-        else if ( ShowDialogL( R_IAUPDATE_SOFTKEYS_ACCEPT_DECLINE__ACCEPT ) == EAknSoftkeyYes )
-            {
-     	    accepted = ETrue;
-     	    firstTimeInfo->SetAgreementAcceptedL();
-            }
         }
     CleanupStack::PopAndDestroy( firstTimeInfo );
     return accepted;
@@ -134,18 +126,6 @@
 
 
 
-
-
-// ---------------------------------------------------------------------------
-// CIAUpdateAgreement::ShowAgreementL
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateAgreement::ShowAgreementL()
-    {
-    ShowDialogL( R_AVKON_SOFTKEYS_OK_EMPTY );	
-    }
-
 // ---------------------------------------------------------------------------
 // CIAUpdateAgreement::AgreementAcceptedL
 // 
@@ -159,14 +139,9 @@
 	return ret;
     }
     
-// ---------------------------------------------------------------------------
-// CIAUpdateAgreement::ShowDialogL
-// 
-// ---------------------------------------------------------------------------
-//
-TInt CIAUpdateAgreement::ShowDialogL( TInt aCbaResourceId )
-    {
-    HBufC* text_1 = StringLoader::LoadLC( R_IAUPDATE_AGREEMENT_DIALOG_TEXT_1 );
+
+    
+    /*HBufC* text_1 = StringLoader::LoadLC( R_IAUPDATE_AGREEMENT_DIALOG_TEXT_1 );
     HBufC* text_2 = StringLoader::LoadLC( R_IAUPDATE_AGREEMENT_DIALOG_TEXT_2 );
     HBufC* text_3 = StringLoader::LoadLC( R_IAUPDATE_AGREEMENT_DIALOG_TEXT_3 );
     HBufC* text_4 = StringLoader::LoadLC( R_IAUPDATE_AGREEMENT_DIALOG_TEXT_4 );
@@ -180,7 +155,7 @@
     CleanupStack::PushL( numberArray );
     numberArray->AppendL( 2007 ); 
     numberArray->AppendL( 2009 );
-    HBufC* text_copyright = StringLoader::LoadLC( R_IAUPDATE_AGREEMENT_DIALOG_COPYRIGHT, *numberArray );
+    //HBufC* text_copyright = StringLoader::LoadLC( R_IAUPDATE_AGREEMENT_DIALOG_COPYRIGHT, *numberArray );
     TPtr ptr = text_copyright->Des();
     AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );
     
@@ -230,7 +205,8 @@
 
 	TInt ret = dlg->RunLD();
 	
-    return ret;
-    }
+    return ret;*/
+    //return KErrNone;
+
     
 // End of File  
--- a/iaupdate/IAD/ui/src/iaupdateapplication.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdateapplication.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,65 +11,38 @@
 *
 * Contributors:
 *
-* Description:   This module contains the implementation of CIAUpdateApplication
+* Description:   This module contains the implementation of IAUpdateApplication 
 *                class member functions.
 *
 */
 
-
-
-#include <eikstart.h>
-#include "iaupdatedocument.h"
 #include "iaupdateapplication.h"
-#include "iaupdateserver.h"
-
+#include "iaupdatemainwindow.h"
+#include "iaupdateengine.h"
+#include "iaupdatemainview.h"
+#include "iaupdatesettingdialog.h"
 
-// ---------------------------------------------------------
-// CAppMngrApp::CreateDocumentL()
-// Creates CIAUpdateDocumentt object
-// ---------------------------------------------------------
-//
-CApaDocument* CIAUpdateApplication::CreateDocumentL()
-    {  
-    // Create an IAUpdate document, and return a pointer to it
-    CApaDocument* document = CIAUpdateDocument::NewL(*this);
-    return document;
+IAUpdateApplication::IAUpdateApplication(  int argc, char* argv[] ) :
+    HbApplication( argc, argv ),
+    mEngine (new IAUpdateEngine),
+    mMainWindow (new IAUpdateMainWindow(mEngine))
+    {
+    
+    // get mainview 
+    IAUpdateMainView* mainView = mMainWindow->GetMainView();
+    
+    // get settig view
+    CIAUpdateSettingDialog* settingView = mMainWindow->GetSettingView();
+    
+    // Connect view change signals to the view change slots
+    //connect(&(*mEngine), SIGNAL(toMainView()), &(*mMainWindow), SLOT(toMainView()));
+    connect(&(*settingView), SIGNAL(toMainView()), &(*mMainWindow), SLOT(toMainView()));
+    connect(&(*mainView), SIGNAL(toSettingView()), &(*mMainWindow), SLOT(toSettingView()));
+    connect(&(*mEngine), SIGNAL(refresh(const RPointerArray<MIAUpdateNode>&, const RPointerArray<MIAUpdateFwNode>&,int)),
+            &(*mMainWindow), SLOT(refreshMainView(const RPointerArray<MIAUpdateNode>&, const RPointerArray<MIAUpdateFwNode>&,int)));
     }
 
-
-// ---------------------------------------------------------
-// CIAUpdateApplication::AppDllUid
-// Returns application UID
-// ---------------------------------------------------------
-//
-TUid CIAUpdateApplication::AppDllUid() const
-    {
-    // Return the UID for the IAUpdate application
-    return KUidIAUpdateApp;
-    }
-
-// ---------------------------------------------------------
-// CIAUpdateApplication::NewAppServerL
-// Cretaes an instance of applicayion server class
-// ---------------------------------------------------------
-//
-void CIAUpdateApplication::NewAppServerL( CApaAppServer*& aAppServer )
-    {
-    aAppServer = CIAUpdateServer::NewL();    
-    }
-    
-	
-// ================= OTHER EXPORTED FUNCTIONS ==============
-//
-// Create an application, and return a pointer to it
-LOCAL_C CApaApplication* NewApplication()
-    {
-    return new CIAUpdateApplication;
-    }
-
-GLDEF_C TInt E32Main()
-    {
-    return EikStart::RunApplication(NewApplication);
-    }
-
-// End of File  
+IAUpdateApplication::~IAUpdateApplication()
+{
+    delete mEngine;    
+}
--- a/iaupdate/IAD/ui/src/iaupdateappui.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1633 +0,0 @@
-/*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of CIAUpdateAppUi class 
-*                member functions.
-*
-*/
-
-
-
-// INCLUDES
-#include <avkon.hrh>
-#include <StringLoader.h> 
-#include <iaupdate.rsg>
-#include <centralrepository.h>
-#include <apgwgnam.h>
-#include <f32file.h>
-#include <ErrorUI.h>
-#include <starterclient.h>
-#include <iaupdateresult.h>
-#include <iaupdateparameters.h>
-
-#include <cmmanagerext.h>
-#include <cmconnectionmethodext.h>
-#include <cmconnectionmethoddef.h>
-#include <cmpluginpacketdatadef.h>
-#include <cmdestinationext.h>
-#include <cmmanagerdef.h>
-#include <rconnmon.h>
-
-#include <hlplch.h>                   
-          
-
-#include "iaupdateappui.h"
-#include "iaupdatemainview.h"
-#include "iaupdatehistoryview.h"
-#include "iaupdate.hrh"
-#include "iaupdatenode.h"
-#include "iaupdatefwnode.h"
-#include "iaupdatebasenode.h"
-#include "iaupdateuicontroller.h"
-#include "iaupdaterequestobserver.h"
-#include "iaupdateserver.h"
-#include "iaupdatestatusdialog.h"
-#include "iaupdatedetailsdialog.h"
-#include "iaupdatefwdetailsdialog.h"
-#include "iaupdatesettingdialog.h"
-#include "iaupdateprivatecrkeys.h"
-#include "iaupdatestarter.h"
-#include "iaupdateuiconfigdata.h"
-#include "iaupdateagreement.h"
-#include "iaupdateautomaticcheck.h"
-#include "iaupdatequeryhistory.h"
-#include "iaupdatedialogutil.h"
-#include "iaupdategloballockhandler.h"
-#include "iaupdatenodefilter.h"
-#include "iaupdateuitimer.h"
-#include "iaupdateagreement.h"
-#include "iaupdatedebug.h"
-
-
-const TUint KSWInstSvrUid = 0x101F875A;
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateAppUi::ConstructL()
-    {    
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ConstructL() begin");
-     
-    TInt ownWgId = iEikonEnv->RootWin().Identifier();
-    RArray<RWsSession::TWindowGroupChainInfo> wgList;
-    iEikonEnv->WsSession().WindowGroupList( &wgList );
-    TBool chained = EFalse;
-    for ( TInt i = 0; i < wgList.Count() && !chained ; i++ )
-        {
-        if ( wgList[i].iId == ownWgId && wgList[i].iParentId > 0 )
-            {
-            chained = ETrue;
-            }
-        }
-    wgList.Reset();
-    if ( chained )
-        {
-        BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible );
-        }
-    else
-        {
-        iEikonEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNeverAtFront );
-        BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible );
-        StatusPane()->MakeVisible( EFalse );
-        }
-    
-    iController = CIAUpdateUiController::NewL( *this ); 
-        
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ConstructL() end");   
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::CIAUpdateAppUi
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateAppUi::CIAUpdateAppUi(): iIsDMSet( EFalse ), iUiRefreshAllowed( ETrue )                              
-    { 
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::CIAUpdateAppUi()");   
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::~CIAUpdateAppUi
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CIAUpdateAppUi::~CIAUpdateAppUi()
-    {    
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::~CIAUpdateAppUi() begin");
-    iShowStatusDialogAgain = EFalse;
-    delete iGlobalLockHandler;
-    iDestIdArray.Reset();
-	delete iController;
-	delete iIdle;
-	delete iIdleAutCheck;
-	delete iForegroundTimer;
-	delete iBackgroundTimer;
-	delete iDialogParam;
-		        
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::~CIAUpdateAppUi() end");
-    }        
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::StartedByLauncherL
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateAppUi::StartedByLauncherL( MIAUpdateRequestObserver& aObserver, 
-                                         TBool aRefreshFromNetworkDenied )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::StartedByLauncherL() begin");
-    iRequestObserver = &aObserver;
-    iRequestType = IAUpdateUiDefines::ENoRequest;
-    iController->SetRequestType( iRequestType );
-    SetVisibleL( ETrue );
-    CIAUpdateParameters* params = iController->ParamsReadAndRemoveFileL();
-    iController->CheckUpdatesDeferredL( params, aRefreshFromNetworkDenied );
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::StartedByLauncherL() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::CheckUpdatesRequestL
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateAppUi::CheckUpdatesRequestL( MIAUpdateRequestObserver& aObserver,
-                                           CIAUpdateParameters* aFilterParams,
-                                           TBool aForcedRefresh )
-                                           
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::CheckUpdatesRequestL() begin");
-    iStartedFromApplication  = ETrue;
-    CleanupStack::PushL( aFilterParams );
-    if ( iWgId > 0 )
-        {
-        HideApplicationInFSWL( ETrue );
-        }
-    CleanupStack::Pop( aFilterParams );
-    
-    if ( !aFilterParams->ShowProgress() )
-        {
-        iEikonEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNeverAtFront );	
-        }
-           
-    iRequestObserver = &aObserver;
-    iRequestType = IAUpdateUiDefines::ECheckUpdates; 
-    iController->SetRequestType( iRequestType );
-    IAUPDATE_TRACE_1("[IAUPDATE] CIAUpdateAppUi::CheckUpdatesRequestL() Forced refresh: %d", aForcedRefresh );
-    iController->SetForcedRefresh( aForcedRefresh ); 
-    iController->CheckUpdatesDeferredL( aFilterParams, EFalse );
-    
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::CheckUpdatesRequestL() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::ShowUpdatesRequestL
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateAppUi::ShowUpdatesRequestL( MIAUpdateRequestObserver& aObserver,
-                                          CIAUpdateParameters* aFilterParams )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowUpdatesRequestL() begin"); 
-    delete iBackgroundTimer;
-    iBackgroundTimer = NULL;
-    iStartedFromApplication  = ETrue;
-    CleanupStack::PushL( aFilterParams );
-    if ( iWgId > 0 )
-        {
-        HideApplicationInFSWL( ETrue );
-        }
-   
-    StatusPane()->MakeVisible( ETrue );
-    iEikonEnv->RootWin().SetOrdinalPosition( 0, ECoeWinPriorityNormal );
-    
-    iRequestObserver = &aObserver;
-    iRequestType = IAUpdateUiDefines::EShowUpdates;
-    iController->SetRequestType( iRequestType );
-     
-
-    if ( !iMainView )
-        {
-    	iMainView  = CIAUpdateMainView::NewL( ClientRect() ); 
-    	AddViewL( iMainView );
-        }
-    
-      
-    // by pushing object to cleanup stack its destructor is called if leave happens
-    // so global lock issued by this instance can be released in destructor of CIAUpdateGlobalLockHandler
-    CIAUpdateGlobalLockHandler* globalLockHandler = CIAUpdateGlobalLockHandler::NewLC();
-    if ( !globalLockHandler->InUseByAnotherInstanceL() )
-        {
-        globalLockHandler->SetToInUseForAnotherInstancesL( ETrue );
-        CleanupStack::Pop( globalLockHandler );
-        CleanupStack::Pop( aFilterParams );
-        CleanupStack::PushL( globalLockHandler );
-        iController->CheckUpdatesDeferredL( aFilterParams, EFalse );
-        CleanupStack::Pop( globalLockHandler );	
-        delete iGlobalLockHandler;
-        iGlobalLockHandler = globalLockHandler;
-        //now possible deletion of iGlobalLockHandler in leave situation is handled
-        //in HandleLeaveErrorL() and HandleLeaveErrorWithoutLeave methods. 
-        }
-    else
-        {
-        CleanupStack::PopAndDestroy( globalLockHandler );
-        CleanupStack::PopAndDestroy( aFilterParams );
-        // locked by another IAD instance, nothing else to do than just complete client's request.	
-        InformRequestObserver( KErrNone );
-        }  
-  	
-
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowUpdatesRequestL() end"); 
-    }
-    
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::ShowUpdateQueryRequestL
-// 
-// -----------------------------------------------------------------------------
-//     
-void CIAUpdateAppUi::ShowUpdateQueryRequestL( MIAUpdateRequestObserver& aObserver, 
-                                              TUint aUid )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowUpdateQueryRequestL begin");
-    iStartedFromApplication  = ETrue;
-    iUpdatequeryUid = aUid;
-    iUpdateNow = EFalse;
-    if ( iWgId > 0 )
-        {
-        HideApplicationInFSWL( ETrue );
-        }
-    
-    iRequestObserver = &aObserver;
-    iRequestType = IAUpdateUiDefines::EUpdateQuery;
-    
-    
-    delete iIdle;
-    iIdle = NULL;
-	iIdle = CIdle::NewL( CActive::EPriorityIdle ); 
-    iIdle->Start( TCallBack( UpdateQueryCallbackL, this ) ); 
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowUpdateQueryRequestL end")
-    }
-    
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::HandleObserverRemoval
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateAppUi::HandleObserverRemoval()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleObserverRemoval() begin");
-	iRequestObserver = NULL;
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleObserverRemoval() end");
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::TextLinkL
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateAppUi::TextLinkL( TInt /*aLinkId*/ )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::TextLinkL() begin");
-    TRAPD( err, HandleTextLinkL() );
-    if ( err != KErrNone )
-        {
-    	HandleLeaveErrorL( err );
-        }
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::TextLinkL() end");
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::HandleCommandL
-// 
-// -----------------------------------------------------------------------------
-//         
-void CIAUpdateAppUi::HandleCommandL( TInt aCommand )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleCommandL() begin");   
-    IAUPDATE_TRACE_1("[IAUPDATE] command id: %d", aCommand );
-
-    switch(aCommand)
-        {
-        case EIAUpdateCmdStartUpdate:
-            {
-            IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleCommandL() EIAUpdateCmdStartUpdate");
-    
-
-            // by pushing object to cleanup stack it's destructor is called if leave happens
-            // so global lock issued by this instance can be released in destructor of CIAUpdateGlobalLockHandler
-            CIAUpdateGlobalLockHandler* globalLockHandler = CIAUpdateGlobalLockHandler::NewLC();
-            if ( !globalLockHandler->InUseByAnotherInstanceL() )
-                {
-            	globalLockHandler->SetToInUseForAnotherInstancesL( ETrue );
-            	// No need to be totally silent since the updating is started
-            	// by user.
-            	SetDefaultConnectionMethodL( EFalse );
-            	iController->StartUpdateL();
-            	CleanupStack::Pop( globalLockHandler );	
-            	delete iGlobalLockHandler;
-            	iGlobalLockHandler = globalLockHandler;
-            	//now possible deletion of iGlobalLockHandler in leave situation is handled
-            	//in HandleLeaveErrorL() and HandleLeaveErrorWithoutLeave methods. 
-                }
-            else
-                {
-                CleanupStack::PopAndDestroy( globalLockHandler ); 	
-                }
-            break;	
-            } 
-            
-       	case EIAUpdateCmdSettings:
-       	    {
-       	    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleCommandL() EIAUpdateCmdSettings");
-            CIAUpdateSettingDialog::ShowDialogL();
-            break;	
-       	    } 
-       	    
-       	case EIAUpdateCmdUpdateDetails:
-       	     {
-       	     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleCommandL() EIAUpdateCmdUpdateDetails");
-       	            
-       	     if ( iMainView->GetCurrentNode()->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal )
-       	         {
-       	         TIAUpdateDialogParam param;
-       	         param.iNode = static_cast<MIAUpdateNode*>( iMainView->GetCurrentNode() );
-       	         CIAUpdateDetailsDialog::ShowDialogL( &param );
-       	         }
-       	            
-       	     if (iMainView->GetCurrentNode()->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-       	         {
-       	         //this is changed because of the new requirement: when both NSU and FOTA available, only show FOTA in details
-       	  
-       	         MIAUpdateFwNode* node = static_cast<MIAUpdateFwNode*>( iMainView->GetCurrentNode() );
-       	         CIAUpdateFwDetailsDialog::ShowDialogL( node );
-       	         }
-
-       	      break;      
-       	      }
-       	    
-        case EIAUpdateCmdMarkedUpdateDetails:
-            {
-            IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleCommandL() EIAUpdateCmdUpdateDetails");
-            
-            if ( iMainView->GetSelectedNode()->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal )
-                {
-                TIAUpdateDialogParam param;
-                param.iNode = static_cast<MIAUpdateNode*>( iMainView->GetSelectedNode() );
-                CIAUpdateDetailsDialog::ShowDialogL( &param );
-                }
-            
-            if (iMainView->GetSelectedNode()->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-                {
-                //this is changed because of the new requirement: when both NSU and FOTA available, only show FOTA in details
-  
-                MIAUpdateFwNode* node = static_cast<MIAUpdateFwNode*>( iMainView->GetSelectedNode() );
-                CIAUpdateFwDetailsDialog::ShowDialogL( node );
-                }
-
-            break;		
-            }
-       	    
-                
-        // History view
-        case EIAUpdateCmdUpdateHistory:
-            {
-            IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleCommandL() EIAUpdateCmdUpdateHistory");
-            if ( !iHistoryView )
-                {
-                iHistoryView = 
-                    CIAUpdateHistoryView::NewL( iController->HistoryL() );
-                AddViewL( iHistoryView );
-                }
-            ActivateLocalViewL( TUid::Uid( EIAUpdateHistoryViewId ) );
-            break;	
-            }
-        
-        case EIAUpdateCmdDisclaimer:
-            {
-            IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleCommandL() EIAUpdateCmdDisclaimer");
-            CIAUpdateAgreement* agreement = CIAUpdateAgreement::NewLC();
-            agreement->ShowAgreementL();
-            CleanupStack::PopAndDestroy( agreement);
-            break;	
-            }
-            
-        case EAknCmdHelp:
-            {
-            IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleCommandL() EAknCmdHelp");
-            HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), AppHelpContextL() );
-            break;
-            }
-                      
-        case EEikCmdExit:
-        case EAknCmdExit:
-        case EAknSoftkeyExit:
-            {
-            IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleCommandL() Exit");
-            if (iController )
-                {
-                iController->CancelOperation();
-                if ( iController->Starter() )
-                	 {
-                	 iController->Starter()->BringToForegroundL();
-                	 }
-                }
-            if ( iRequestObserver )
-                {
-   	            InformRequestObserver( KErrCancel );
-                }
-            Exit();	
-            break;
-            }
-            
-        case EIAUpdateCmdHistoryViewExit:
-            IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleCommandL() EIAUpdateCmdHistoryViewExit");
-            ActivateLocalViewL( TUid::Uid( EIAUpdateMainViewId ) );
-            break;
-
-        default:
-            {
-            break;
-            }
-        }
-       
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleCommandL() end")    
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateppUi::HandleWsEventL
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateAppUi::HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleWsEventL() begin");   
-    CAknViewAppUi::HandleWsEventL( aEvent, aDestination );
-  	if ( aEvent.Type() == EEventWindowGroupListChanged )
-	    {
-        IAUPDATE_TRACE("[IAUPDATE] Window group list changed"); 
-          
-		RWindowGroup owngroup;
-		TInt ownWgId = iEikonEnv->RootWin().Identifier();
-  		TApaTaskList tasklist( iEikonEnv->WsSession() );   
-        
-        TApaTask task = tasklist.FindApp( TUid::Uid( KSWInstSvrUid ) );
-        
-        if ( task.Exists() )
-            {
-            IAUPDATE_TRACE("[IAUPDATE] Installer task exists");
-            
-            TInt instUiWgId = task.WgId();
-            TInt ownPosition = KErrNotFound;
-            TInt instUiPosition = KErrNotFound;
-            CArrayFixFlat<TInt>*  wgArray = new(ELeave)CArrayFixFlat<TInt>(10);  
-            CleanupStack::PushL( wgArray );
-            User::LeaveIfError( iEikonEnv->WsSession().WindowGroupList( 0, wgArray ) );   
-            for ( TInt i = 0; i < wgArray->Count(); i++ )
-                {
-                if ( wgArray->At(i) == ownWgId )
-                    {
-                    IAUPDATE_TRACE_1("[IAUPDATE] ownPosition: %d", i);
-                	ownPosition = i;
-                    }
-                else if ( wgArray->At(i) == instUiWgId )
-                    {
-                    IAUPDATE_TRACE_1("[IAUPDATE] instUiPosition: %d", i);
-                	instUiPosition = i;
-                    }
-                }
-            CleanupStack::PopAndDestroy( wgArray );
-          	if ( ownPosition == 0 && iInstUiOnTop )
-                {
-                // IAD is now topmost. In the case Installer UI was previously on the top of IAD 
-                // bring Installer UI foreground 
-                IAUPDATE_TRACE("[IAUPDATE] instUi to foreground");
-            	task.BringToForeground();
-            	iInstUiOnTop = EFalse;
-                }
-            else
-                {
-                if ( instUiPosition < ownPosition  && 
-                    instUiPosition != KErrNotFound && 
-                    ownPosition != KErrNotFound )
-        	        {
-        	        // Installer UI is on the top of IAD, i.e. it's showing FILETEXT dialog 
-                    IAUPDATE_TRACE("[IAUPDATE] instUi is on top of IAD");
-        		    iInstUiOnTop = ETrue;
-        	        }
-        	    else
-        	        {
-                    IAUPDATE_TRACE("[IAUPDATE] iInstUiOnTop false");
-        	        iInstUiOnTop = EFalse;	
-        	        }
-                }    
-            }
-        else
-            {
-            IAUPDATE_TRACE("[IAUPDATE] No task. iInstUiOnTop false.");
-            iInstUiOnTop = EFalse;	
-            }
-        }
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleWsEventL() end");           
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::StartupComplete
-// 
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateAppUi::StartupComplete( TInt aError )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::StartupComplete() begin"); 
-    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError);
-    
-    if( aError != KErrNone ) 
-        {  
-        HandleLeaveErrorWithoutLeave( aError );
-        }
-    else
-        {
-        TRAPD( err, StartupCompleteL() );
-        if( err != KErrNone ) 
-           {  
-           HandleLeaveErrorWithoutLeave( err );
-           }
-        }
- 
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::StartupComplete() end");    
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::StartupCompleteL
-// 
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateAppUi::StartupCompleteL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::StartupCompleteL() begin"); 
-    
-    delete iGlobalLockHandler;
-    iGlobalLockHandler = NULL;
-    iGlobalLockHandler = CIAUpdateGlobalLockHandler::NewL();
-    if ( !iGlobalLockHandler->InUseByAnotherInstanceL() )
-        {
-        TBool totalSilent( EFalse );
-        if ( iRequestType == IAUpdateUiDefines::ECheckUpdates )
-            {
-            if ( iController->Filter() )
-                {
-                if ( iController->Filter()->FilterParams() )
-                    {
-                    if ( iController->Filter()->FilterParams()->Refresh() )
-                        {
-                        if ( !iController->ForcedRefresh() )
-                            {
-                            //from bgchecker, make it silent
-                            totalSilent = ETrue;
-                            }
-                        }
-                    }
-                }
-            }
-        SetDefaultConnectionMethodL( totalSilent );
-        iGlobalLockHandler->SetToInUseForAnotherInstancesL( ETrue );
-        iController->StartRefreshL();  
-        }
-    else
-        {
-        RefreshCompleteL( ETrue, KErrServerBusy );
-        }    
- 
-       
-    
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::StartupCompleteL() end");    
-    }
-    
- 
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::HandleLeaveErrorL
-// 
-// -----------------------------------------------------------------------------
-//        
-void CIAUpdateAppUi::HandleLeaveErrorL( TInt aError )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleLeaveErrorL() begin");
-    //removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
-    delete iGlobalLockHandler;
-    iGlobalLockHandler = NULL;
-    // client request is completed before leave in case of leave error
-    if ( aError != KErrNone ) 
-        { 	
-    	InformRequestObserver( aError );
-    	User::Leave( aError );
-        }
-    
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleLeaveErrorL() end");
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::HandleLeaveErrorWithoutLeave
-// 
-// -----------------------------------------------------------------------------
-//  
-void CIAUpdateAppUi::HandleLeaveErrorWithoutLeave( TInt aError )
-    {
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleLeaveErrorWithoutLeave() begin");
-	//removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
-    delete iGlobalLockHandler;
-    iGlobalLockHandler = NULL;
-	if ( aError != KErrNone ) 
-        {
-    	InformRequestObserver( aError );
-        }
-    if ( aError == KErrDiskFull )
-        {
-        TRAP_IGNORE( ShowGlobalErrorNoteL( aError ) );
-        }
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleLeaveErrorWithoutLeave end");
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::RefreshCompleteL
-// 
-// -----------------------------------------------------------------------------
-//      
-void CIAUpdateAppUi::RefreshCompleteL( TBool aWithViewActivation, TInt aError )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::RefreshCompleteL() begin");
-    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError );
-    //removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
-    delete iGlobalLockHandler;
-    iGlobalLockHandler = NULL;   
-   
-    if ( iRequestType == IAUpdateUiDefines::ECheckUpdates )
-        {
-  	    InformRequestObserver( aError );
-        }
-    else 
-        {    
-        RefreshL( aError );   
-        if ( aWithViewActivation)
-            {
-        	ActivateLocalViewL( TUid::Uid( EIAUpdateMainViewId ) );
-            }
-        CIAUpdateAgreement* agreement = CIAUpdateAgreement::NewLC();
-        TBool agreementAccepted = agreement->AgreementAcceptedL();
-        if ( iController->ForcedRefresh() )    
-            {
-            if ( !agreementAccepted )
-                {
-                agreement->SetAgreementAcceptedL();
-                }
-            }
-        CleanupStack::PopAndDestroy( agreement );
-        // By calling CIdle possible waiting dialog can be closed before
-        // automatic check where a new dialog may be launched
-        delete iIdleAutCheck;
-        iIdleAutCheck = NULL;
-        iIdleAutCheck = CIdle::NewL( CActive::EPriorityIdle ); 
-        iIdleAutCheck->Start( TCallBack( AutomaticCheckCallbackL, this ) );
-        } 
- 
-  
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::RefreshCompleteL() end");        
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::UpdateCompleteL
-// 
-// -----------------------------------------------------------------------------
-//     
-void CIAUpdateAppUi::UpdateCompleteL( TInt aError )    
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::UpdateCompleteL begin");
-    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError );
-    //removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
-    delete iGlobalLockHandler;
-    iGlobalLockHandler = NULL;  
-    if ( iRequestType != IAUpdateUiDefines::ENoRequest )
-        {
-        InformRequestObserver( aError );
-        }
-    
-    RefreshL( KErrNone ); 
-      
-    ShowStatusDialogDeferredL();
-                
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::UpdateCompleteL end");
-    }
-
-   
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::ShowStatusDialogL
-// 
-// -----------------------------------------------------------------------------
-//   
-void CIAUpdateAppUi::ShowStatusDialogL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowStatusDialogL() begin");
- 
-     
-    if ( !iDialogParam )
-        {
-        iDialogParam = new( ELeave ) TIAUpdateDialogParam;
-        }
-    
-    if ( !iShowStatusDialogAgain )
-        {
-        TIAUpdateResultsInfo resultsInfo( iController->ResultsInfo() );
-        iDialogParam->iCountCancelled = resultsInfo.iCountCancelled;
-        iDialogParam->iCountFailed = resultsInfo.iCountFailed;
-        iDialogParam->iCountSuccessfull = resultsInfo.iCountSuccessfull;
-        iDialogParam->iShowCloseAllText = resultsInfo.iFileInUseError;
-        iRebootAfterInstall = resultsInfo.iRebootAfterInstall;
-        iDialogParam->iLinkObserver = this;
-        }
-         
-    iShowStatusDialogAgain = EFalse;
-    iUiRefreshAllowed = ETrue;
-    TInt ret = CIAUpdateStatusDialog::ShowDialogL( iDialogParam );
-    if ( ret == EAknSoftkeyOk && iRebootAfterInstall )
-        {
-        TInt rebootRet = IAUpdateDialogUtil::ShowConfirmationQueryL( 
-                                           R_IAUPDATE_PHONE_RESTART_QUERY, 
-                                           R_AVKON_SOFTKEYS_OK_CANCEL__OK );
-        if ( rebootRet == EAknSoftkeyOk )
-            {
-            RStarterSession startersession;
-            if( startersession.Connect() == KErrNone )
-                {
-                startersession.Reset( RStarterSession::EUnknownReset );
-                startersession.Close();
-                return;
-                }
-            }
-        }
-    if ( ret == EAknSoftkeyOk && 
-         iStartedFromApplication && 
-         iDialogParam->iCountCancelled == 0 &&
-         iDialogParam->iCountFailed == 0 )
-        {
-    	HandleCommandL( EEikCmdExit );
-        }
-    
-    IAUPDATE_TRACE_1("[IAUPDATE] nodes count: %d", iController->Nodes().Count() );
-    IAUPDATE_TRACE_1("[IAUPDATE] fw nodes: %d", iController->FwNodes().Count() );
-    //exit from result view if there are no update left
-    if ( ret == EAknSoftkeyOk && (iController->Nodes().Count() == 0) && (iController->FwNodes().Count() == 0) )
-        {
-        HandleCommandL( EEikCmdExit );
-        }
-    
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowStatusDialogL() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::ShowStatusDialogDeferredL
-// 
-// -----------------------------------------------------------------------------
-//       
-void CIAUpdateAppUi::ShowStatusDialogDeferredL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowStatusDialogDeferredL() begin");
-    delete iIdle;
-    iIdle = NULL;
-	iIdle = CIdle::NewL( CActive::EPriorityIdle ); 
-    iIdle->Start( TCallBack( ShowStatusDialogCallbackL, this ) ); 
-    iUiRefreshAllowed = EFalse;
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowStatusDialogDeferredL() end");
-    }
- 
-
-
-                       
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::RefreshL
-// 
-// -----------------------------------------------------------------------------
-//  
-void CIAUpdateAppUi::RefreshL( TInt aError ) 
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::RefreshL() begin");
-    IAUPDATE_TRACE_1("[IAUPDATE] Error code: %d", aError );
-    iMainView->RefreshL( iController->Nodes(), iController->FwNodes(), aError );                    
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::RefreshL() end");
-    }
-    
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::InformRequestObserver
-// 
-// -----------------------------------------------------------------------------
-//      
-void CIAUpdateAppUi::InformRequestObserver( TInt aError )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::InformRequestObserver() begin");
-        
-    if ( iRequestObserver )
-        {
-        if ( iController->ClosingAllowedByClient() )
-            {
-            if ( iRequestType != IAUpdateUiDefines::ENoRequest )
-                {
-                if ( iRequestType == IAUpdateUiDefines::EUpdateQuery && iUpdateNow )
-                    {
-                    if ( !iBackgroundTimer )
-                        {
-                        iBackgroundTimer = CIAUpdateUITimer::NewL( *this, CIAUpdateUITimer::EBackgroundDelay );
-                        }
-                    if ( !iBackgroundTimer->IsActive() )
-                        {
-                        iBackgroundTimer->After( 500000 );
-                        }
-                    }
-                else
-                    {
-                    iEikonEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNeverAtFront );
-                    }
-                }
-            }
-        CIAUpdateResult* details( NULL );
-        TRAPD( error, details = CIAUpdateResult::NewL() )
-        if ( details )
-            {
-            TIAUpdateResultsInfo resultsInfo(
-                iController->ResultsInfo() );
-            IAUPDATE_TRACE_3("[IAUPDATE] succeed: %d failed: %d  cancelled: %d", 
-                              resultsInfo.iCountSuccessfull, 
-                              resultsInfo.iCountFailed, 
-                              resultsInfo.iCountCancelled );
-            IAUPDATE_TRACE_2("[IAUPDATE] update now: %d available updates: %d", 
-                              iUpdateNow, iController->CountOfAvailableUpdates() );
-            details->SetSuccessCount( resultsInfo.iCountSuccessfull );
-            details->SetFailCount( resultsInfo.iCountFailed );
-            details->SetCancelCount( resultsInfo.iCountCancelled );    
-            
-            // Ownership of details is transferred here.
-            iRequestObserver->RequestCompleted( details, 
-                                                iController->CountOfAvailableUpdates(), 
-                                                iUpdateNow, 
-                                                aError );
-            details = NULL;        
-            }
-        else
-            {
-            iRequestObserver->RequestCompleted( details, 
-                                                iController->CountOfAvailableUpdates(),
-                                                iUpdateNow, 
-                                                error );            
-            }
-        iRequestObserver = NULL;
-        }
-        
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::InformRequestObserver() end");
-    }
-
-
-// ---------------------------------------------------------------------------
-// CIAUpdateAppUi::SetDefaultConnectionMethodL
-// Sets the connection method for the update network connection.
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateAppUi::SetDefaultConnectionMethodL(TBool aTotalSilent )
-    {
-    if ( aTotalSilent )
-        {
-        // from back ground checker, choose the IAP to make the internet access silent
-        IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::SetDefaultConnectionMethodL() begin");
-
-           TUint32 connectionMethodId( 0 );
-           TInt connMethodId( 0 );
-
-           // Let's first check whether cenrep contains SNAP id other than zero
-           CRepository* cenrep( CRepository::NewLC( KCRUidIAUpdateSettings ) );
-           User::LeaveIfError(  
-               cenrep->Get( KIAUpdateAccessPoint, connMethodId ) );
-           CleanupStack::PopAndDestroy( cenrep ); 
-           cenrep = NULL;
-
-           RCmManagerExt cmManagerExt;
-           cmManagerExt.OpenL();
-           CleanupClosePushL( cmManagerExt );
-           
-           if ( connMethodId == -1 )
-               {
-               IAUPDATE_TRACE("[IAUPDATE] user chooses default connection, use IAP logic");
-               
-               //check what is the default connection by users     
-               
-               TCmDefConnValue DCSetting;
-               cmManagerExt.ReadDefConnL( DCSetting );
-              
-               
-               switch ( DCSetting.iType )
-                   {
-                   case ECmDefConnAlwaysAsk:
-                   case ECmDefConnAskOnce:
-                       {
-                       //go with the best IAP under internet snap
-                       connectionMethodId = GetBestIAPInAllSNAPsL( cmManagerExt );
-                       break;
-                       }
-                   case ECmDefConnDestination:
-                       {
-                       //go with the best IAP under this snap
-                       connectionMethodId = GetBestIAPInThisSNAPL( cmManagerExt, DCSetting.iId );
-                       break;
-                       }
-                   case ECmDefConnConnectionMethod:
-                       {
-                       //go with the best IAP under this snap
-                       connectionMethodId = DCSetting.iId;
-                       break;
-                       }
-                   }
-               }
-           else if ( connMethodId == 0 )
-               {
-               //no choice from user, we go with the best IAP under Internent SNAP
-               connectionMethodId = GetBestIAPInAllSNAPsL( cmManagerExt );
-               }
-           else
-               {
-               IAUPDATE_TRACE("[IAUPDATE] use chooses a snap");
-               // It was some SNAP value
-               connectionMethodId = GetBestIAPInThisSNAPL( cmManagerExt, connMethodId );
-               }
-
-           CleanupStack::PopAndDestroy( &cmManagerExt ); 
-           
-           if ( connectionMethodId != 0 )
-               {
-               TIAUpdateConnectionMethod connectionMethod( 
-                   connectionMethodId, 
-                   TIAUpdateConnectionMethod::EConnectionMethodTypeAccessPoint );
-
-               iController->SetDefaultConnectionMethodL( connectionMethod );
-               }
-           else
-               {
-               //In the totally silent case, if no usable IAP, we complete the check update with 0 updates.
-               //the bgchecker will try again later after 1 month. 
-               //The LEAVE will be catched up later and complete the request from background checker.
-               User::LeaveIfError( KErrNotFound );
-               }
-           
-
-
-           IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::SetDefaultConnectionMethodL() end");
-        }
-    else
-        {
-        // from grid, use the old logic
-        IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::SetDefaultConnectionMethodL() begin");
-                  TUint32 connectionMethodId( 0 );
-                  TInt connMethodId( 0 );
-
-                  // Set initial value to always ask
-                  TInt connectionMethodType( TIAUpdateConnectionMethod::EConnectionMethodTypeAlwaysAsk );
-                  TBool needSaving(EFalse);
-
-                  // Let's first check whether cenrep contains SNAP id other than zero
-                  CRepository* cenrep( CRepository::NewLC( KCRUidIAUpdateSettings ) );
-                  User::LeaveIfError(  
-                      cenrep->Get( KIAUpdateAccessPoint, connMethodId ) );
-                  CleanupStack::PopAndDestroy( cenrep ); 
-                  cenrep = NULL;
-                    
-                  if ( connMethodId == -1 )
-                      {
-                      IAUPDATE_TRACE("[IAUPDATE] user chooses default connection, use IAP logic");
-                                            
-                      connectionMethodId = 0;
-                      connectionMethodType = TIAUpdateConnectionMethod::EConnectionMethodTypeDefault;
-                      }
-                  else if ( connMethodId == 0 )
-                      {
-                      
-                      IAUPDATE_TRACE("[IAUPDATE] use chooses nothing, use internal IAP logic");
-                      //if nothing is set by user, use our new logic
-                      //SetDefaultConnectionMethod2L();
-                      //return;
-                      // CenRep didn't contain any SNAP id. Let's try Internet SNAP then.
-                          
-                      RCmManagerExt cmManagerExt;
-                      cmManagerExt.OpenL();
-                      CleanupClosePushL( cmManagerExt );
-                      iDestIdArray.Reset();
-                      cmManagerExt.AllDestinationsL( iDestIdArray );
-
-                      for ( TInt i = 0; i< iDestIdArray.Count(); i++ )
-                          {
-                          RCmDestinationExt dest = cmManagerExt.DestinationL( iDestIdArray[i] );
-                          CleanupClosePushL( dest );
-                           
-                          if ( dest.MetadataL( CMManager::ESnapMetadataInternet ) )
-                              {
-                              // Check whether Internet SNAP contains any IAP.
-                              if ( dest.ConnectionMethodCount() > 0 )
-                                  {
-                                  connectionMethodId = iDestIdArray[i];
-                                  needSaving = ETrue;
-                                  IAUPDATE_TRACE_1("[IAUPDATE] connectionMethodId: %d", connectionMethodId );
-                                  }
-                              CleanupStack::PopAndDestroy( &dest ); 
-                              break;
-                              }
-                               
-                          CleanupStack::PopAndDestroy( &dest ); 
-                          }
-                      iDestIdArray.Reset();
-                      CleanupStack::PopAndDestroy( &cmManagerExt ); 
-                      }
-                  else
-                      {
-                      IAUPDATE_TRACE("[IAUPDATE] use chooses a snap");
-                      // It was some SNAP value
-                      connectionMethodId = connMethodId;
-                      }
-                  
-                  if ( connectionMethodId > 0)
-                      {
-                      // We have now some valid SNAP id, either from CenRep or Internet SNAP
-                      connectionMethodType = TIAUpdateConnectionMethod::EConnectionMethodTypeDestination;
-                      // Save to cenrep if needed
-                      if ( needSaving )
-                          {
-                          cenrep = CRepository::NewLC( KCRUidIAUpdateSettings );
-                          TInt err = cenrep->StartTransaction( CRepository::EReadWriteTransaction );
-                          User::LeaveIfError( err );
-                          cenrep->CleanupCancelTransactionPushL();
-                          
-                          connMethodId = connectionMethodId;
-                          err = cenrep->Set( KIAUpdateAccessPoint, connMethodId );
-                          User::LeaveIfError( err );
-                          TUint32 ignore = KErrNone;
-                          User::LeaveIfError( cenrep->CommitTransaction( ignore ) );
-                          CleanupStack::PopAndDestroy(); // CleanupCancelTransactionPushL()
-                          CleanupStack::PopAndDestroy( cenrep );            
-                          }
-                      }
-
-                  TIAUpdateConnectionMethod connectionMethod( 
-                      connectionMethodId, 
-                      static_cast< TIAUpdateConnectionMethod::TConnectionMethodType >( connectionMethodType ) );
-
-                  iController->SetDefaultConnectionMethodL( connectionMethod );
-
-                  IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::SetDefaultConnectionMethodL() end");
-        }
-
-    }
-
-
-// ---------------------------------------------------------------------------
-// CIAUpdateAppUi::GetBestIAPInAllSNAPsL
-// Sets the best IAP from all snaps
-// ---------------------------------------------------------------------------
-//
-TUint32 CIAUpdateAppUi::GetBestIAPInAllSNAPsL( RCmManagerExt& aCmManagerExt  )
-    { 
-    //go with internet SNAP first.
-    TUint32 IAPID = 0;
-    IAPID = GetBestIAPInInternetSNAPL( aCmManagerExt );
-    
-    if ( IAPID )
-        {
-        return IAPID;
-        }
-    
-    //select IAP from rest of the SNAPs
-    iDestIdArray.Reset();
-    aCmManagerExt.AllDestinationsL( iDestIdArray );
-    
-    for ( TInt i = 0; i< iDestIdArray.Count(); i++ )
-        {
-        TUint32 SNAPID = iDestIdArray[i];                   
-        IAPID = GetBestIAPInThisSNAPL( aCmManagerExt, SNAPID );
-        if ( IAPID )
-            {
-            break;
-            }
-         }
-    iDestIdArray.Reset();
-    return IAPID;
-    }
-
-
-
-// ---------------------------------------------------------------------------
-// CIAUpdateAppUi::GetBestIAPInInternetSNAPL
-// Sets the best IAP from internet snap
-// ---------------------------------------------------------------------------
-//
-TUint32 CIAUpdateAppUi::GetBestIAPInInternetSNAPL( RCmManagerExt& aCmManagerExt  )
-    {
-    //select IAP from Internet SNAP
-    iDestIdArray.Reset();
-    aCmManagerExt.AllDestinationsL( iDestIdArray );
-    TUint32 InternetSNAPID = 0;
-    for ( TInt i = 0; i< iDestIdArray.Count(); i++ )
-        {
-        RCmDestinationExt dest = aCmManagerExt.DestinationL( iDestIdArray[i] );
-        CleanupClosePushL( dest );
-                                     
-        if ( dest.MetadataL( CMManager::ESnapMetadataInternet ) )
-            {
-            InternetSNAPID = iDestIdArray[i];
-            CleanupStack::PopAndDestroy( &dest ); 
-            break;
-            }                     
-         CleanupStack::PopAndDestroy( &dest ); 
-         }
-    iDestIdArray.Reset();
-    
-    return GetBestIAPInThisSNAPL( aCmManagerExt, InternetSNAPID );
-    }
-
-
-
-// ---------------------------------------------------------------------------
-// CIAUpdateAppUi::GetBestIAPInThisSNAPL
-// Sets the best IAP from the given snap
-// ---------------------------------------------------------------------------
-//
-TUint32 CIAUpdateAppUi::GetBestIAPInThisSNAPL( RCmManagerExt& aCmManagerExt, TUint32 aSNAPID  )
-    {
-    //get all usable IAPs
-    TConnMonIapInfoBuf iapInfo;
-    TRequestStatus status;
-                       
-    RConnectionMonitor connMon;
-    connMon.ConnectL();
-    CleanupClosePushL( connMon );
-    
-    connMon.GetPckgAttribute( EBearerIdAll, 0, KIapAvailability,iapInfo, status );
-    User::WaitForRequest( status );
-    User::LeaveIfError( status.Int() );
-    
-    CleanupStack::PopAndDestroy( &connMon ); 
-    
-    RCmDestinationExt dest = aCmManagerExt.DestinationL( aSNAPID );
-    CleanupClosePushL( dest );
-    
-    // Check whether the SNAP contains any IAP.
-    for  (TInt i = 0; i < dest.ConnectionMethodCount(); i++ )
-        {
-        RCmConnectionMethodExt cm =  dest.ConnectionMethodL( i );
-        CleanupClosePushL( cm );
-        
-        TUint32 iapid= cm.GetIntAttributeL( CMManager::ECmIapId );
-        
-        for ( TInt i = 0; i < iapInfo().iCount; i++ )
-            {
-            if ( iapInfo().iIap[i].iIapId == iapid )
-                {
-                CleanupStack::PopAndDestroy( 2 ); //cm & dest;
-                return iapid;
-                }
-            }    
-                                                                                 
-        CleanupStack::PopAndDestroy( &cm );
-        }
-    
-    CleanupStack::PopAndDestroy( &dest ); 
-    return 0;
-    }
-
-
-
-// ---------------------------------------------------------------------------
-// CIAUpdateAppUi::ShowStatusDialogCallbackL
-// ---------------------------------------------------------------------------
-//
-TInt CIAUpdateAppUi::ShowStatusDialogCallbackL( TAny* aPtr )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowStatusDialogCallbackL() begin");
-    CIAUpdateAppUi* appUI= static_cast<CIAUpdateAppUi*>( aPtr ); 
-    TRAPD( err, appUI->ShowStatusDialogL() );
-    appUI->HandleLeaveErrorL( err );
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowStatusDialogCallbackL() end");
-    return KErrNone;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::SetVisibleL
-// 
-// -----------------------------------------------------------------------------
-//  
-void CIAUpdateAppUi::SetVisibleL( TBool aVisible )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::SetVisibleL() begin");
-    IAUPDATE_TRACE_1("[IAUPDATE] visible: %d", aVisible );
-    if ( aVisible )
-        {
-        if ( iEikonEnv->RootWin().OrdinalPosition() != 0 || iEikonEnv->RootWin().OrdinalPriority() != ECoeWinPriorityNormal )
-            {
-            iEikonEnv->RootWin().SetOrdinalPosition( 0, ECoeWinPriorityNormal );
-            }
-        
-    	StatusPane()->MakeVisible( ETrue );
-        iMainView  = CIAUpdateMainView::NewL( ClientRect() ); 
-        AddViewL( iMainView );
-        ActivateLocalViewL( TUid::Uid( EIAUpdateMainViewId ) );
-        }
-    else
-        {
-        iEikonEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNeverAtFront );
-        StatusPane()->MakeVisible( EFalse );
-        }
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::SetVisibleL() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::Controller()
-// 
-// -----------------------------------------------------------------------------
-//      
-CIAUpdateUiController* CIAUpdateAppUi::Controller() const
-    {
-	return iController;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::PotentialCancel
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateAppUi::PotentialCancel() 
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::PotentialCancel() begin");
-    iController->DoCancelIfAllowed();
-    HandleObserverRemoval();
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::PotentialCancel() end");
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::HandleClientToForegroundL
-// 
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateAppUi::HandleClientToForegroundL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleClientToForegroundL() begin");
-    if ( !iForegroundTimer )
-        {
-        iForegroundTimer = CIAUpdateUITimer::NewL( *this, CIAUpdateUITimer::EForegroundDelay );
-        }
-    if ( !iForegroundTimer->IsActive() )
-        {
-        iForegroundTimer->After( 700000 );
-        }
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleClientToForegroundL() end");
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::HandleAllClientsClosedL
-// 
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateAppUi::HandleAllClientsClosedL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleAllClientsClosedL() begin");
-	HideApplicationInFSWL( EFalse );
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleAllClientsClosedL() end");
-    }
-    
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::ShowStatusDialogAgain
-// 
-// -----------------------------------------------------------------------------
-//  
-TBool CIAUpdateAppUi::ShowStatusDialogAgain() const
-    {
-    return iShowStatusDialogAgain;	
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::StartWGListChangeMonitoring
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateAppUi::StartWGListChangeMonitoring()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::StartWGListChangeMonitoring() begin");
-    iInstUiOnTop = EFalse;
-	iEikonEnv->RootWin().EnableGroupListChangeEvents();
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::StartWGListChangeMonitoring() end");
-    }
- 
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::StopWGListChangeMonitoring
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateAppUi::StopWGListChangeMonitoring()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::StopWGListChangeMonitoring() begin");
-	iEikonEnv->RootWin().DisableGroupListChangeEvents();
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::StopWGListChangeMonitoring() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::SetClientWgId
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateAppUi::SetClientWgId( TInt aWgId )
-    {
-	IAUPDATE_TRACE_1("[IAUPDATE] CIAUpdateAppUi::SetClientWgId() wgId %d", aWgId );
-	iWgId = aWgId;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::ClientInBackgroundL
-// 
-// -----------------------------------------------------------------------------
-// 
-TInt CIAUpdateAppUi::ClientInBackgroundL() const
-    {
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ClientInBackgroundL() begin");
-	TBool inBackground = EFalse;
-	if ( iWgId > 0 )
-	    {
-		CArrayFixFlat<TInt>*  wgArray = new( ELeave ) CArrayFixFlat<TInt>(10);  
-        CleanupStack::PushL( wgArray );
-        User::LeaveIfError( iEikonEnv->WsSession().WindowGroupList( 0, wgArray ) );  
-        TInt ownWgId = iEikonEnv->RootWin().Identifier();
-        if ( ( wgArray->At( 0 ) != ownWgId ) && ( wgArray->At( 0 ) != iWgId  ) )
-            {
-        	inBackground = ETrue;
-            }
-        CleanupStack::PopAndDestroy( wgArray );  
-	    }
-	IAUPDATE_TRACE_1("[IAUPDATE] CIAUpdateAppUi::ClientInBackgroundL() inBackground: %d", inBackground );
-    return inBackground;  
-    }
-
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::ShowUpdateQueryL
-// 
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateAppUi::ShowUpdateQueryL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowUpdateQueryL() begin");
-	CIAUpdateQueryHistory* updateQueryHistory = CIAUpdateQueryHistory::NewL();
-	// Get the delay information from the controller that has read it from
-	// the config file.
-	updateQueryHistory->SetDelay( iController->ConfigData().QueryHistoryDelayHours() );
-    CleanupStack::PushL( updateQueryHistory );
-    if ( !updateQueryHistory->IsDelayedL( iUpdatequeryUid ) )
-        {
-        if ( ClientInBackgroundL() )
-            {
-    	    iEikonEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNormal );
-            }
-        else
-            {
-            iEikonEnv->RootWin().SetOrdinalPosition( 0, ECoeWinPriorityNormal );	
-            }
-   	    TInt ret = IAUpdateDialogUtil::ShowConfirmationQueryL( 
-   	                                  R_IAUPDATE_PROGRAM_UPDATE, 
-	                                  R_IAUPDATE_SOFTKEYS_NOW_LATER__NOW );
-	    switch ( ret )
-	        {
-	        case EIAUpdateSoftkeyNow:
-	            IAUPDATE_TRACE("[IAUPDATE] EIAUpdateSoftkeyNow");
-	            iUpdateNow = ETrue;
-	            break;
-
-	        case EIAUpdateSoftkeyLater:
-	            IAUPDATE_TRACE("[IAUPDATE] EIAUpdateSoftkeyLater");
-	        	updateQueryHistory->SetTimeL( iUpdatequeryUid );
-	            break;
-	            
-	        default: //case of cancel (eq. End key)
-	            break;
-	        }     
-        }
-    CleanupStack::PopAndDestroy( updateQueryHistory );
-	InformRequestObserver( KErrNone );	
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ShowUpdateQueryL() end");
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::HideApplicationInFSWL
-// 
-// -----------------------------------------------------------------------------
-//  
-void CIAUpdateAppUi::HideApplicationInFSWL( TBool aHide )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HideApplicationInFSW() begin");
-    IAUPDATE_TRACE_1("[IAUPDATE] hide: %d", aHide );
-    TInt id = iEikonEnv->RootWin().Identifier();
-
-    CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC( 
-                                                    iEikonEnv->WsSession(), id );
-    
-    wgName->SetHidden( aHide );
-    wgName->SetWindowGroupName( iEikonEnv->RootWin() );    
-    CleanupStack::PopAndDestroy( wgName ); 
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HideApplicationInFSW() end");
-    }
- 
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::ShowGlobalErrorNoteL
-// 
-// -----------------------------------------------------------------------------
-//     
-void CIAUpdateAppUi::ShowGlobalErrorNoteL( TInt aError ) const
-    {
-    CErrorUI* errorUI = CErrorUI::NewLC( );     
-    errorUI->ShowGlobalErrorNoteL( aError );        
-    CleanupStack::PopAndDestroy( errorUI ); 	
-    }
-
-
-
-// ---------------------------------------------------------------------------
-// CIAUpdateAppUi::UpdateQueryCallbackL
-// ---------------------------------------------------------------------------
-//
-TInt CIAUpdateAppUi::UpdateQueryCallbackL( TAny* aPtr )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::UpdateQueryCallbackL() begin");
-    CIAUpdateAppUi* appUI= static_cast<CIAUpdateAppUi*>( aPtr ); 
-    TRAPD( err, appUI->ShowUpdateQueryL() );
-    if ( err != KErrNone )
-        {
-    	appUI->HandleLeaveErrorL( err );
-        }
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::UpdateQueryCallbackL() end");
-    return KErrNone;
-    }    
-
-    
-// ---------------------------------------------------------------------------
-// CIAUpdateAppUi::AutomaticCheckCallbackL
-// ---------------------------------------------------------------------------
-//    
-    
-TInt CIAUpdateAppUi::AutomaticCheckCallbackL( TAny* aPtr )    
-    {
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::AutomaticCheckCallbackL() begin");
-	CIAUpdateAppUi* appUI= static_cast<CIAUpdateAppUi*>( aPtr ); 
-	
-	TInt err = KErrNone;
-	CIAUpdateAutomaticCheck* automaticCheck = NULL;
-	TRAP( err, automaticCheck = CIAUpdateAutomaticCheck::NewL() ); 
-    if ( err != KErrNone )
-        {
-    	appUI->HandleLeaveErrorL( err );
-        }
-    else
-        {
-        CleanupStack::PushL( automaticCheck );
-        TRAP( err, automaticCheck->AcceptAutomaticCheckL() );
-        if ( err != KErrNone )
-            {
-    	    appUI->HandleLeaveErrorL( err );
-            }	
-        } 
-    
-    CleanupStack::PopAndDestroy( automaticCheck );
-	
-	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::AutomaticCheckCallbackL() end");
-	return KErrNone;
-    }
-    
-    
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::HandleTextLinkL
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateAppUi::HandleTextLinkL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleTextLinkL() begin");
-    if ( !iHistoryView )
-        {
-        iHistoryView = CIAUpdateHistoryView::NewL( iController->HistoryL() );
-         
-        AddViewL( iHistoryView );
-        }
-    ActivateLocalViewL( TUid::Uid( EIAUpdateHistoryViewId ) );
-    iShowStatusDialogAgain = ETrue;
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::HandleTextLinkL() end");
-    }
-
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::SetDMSupport
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateAppUi::SetDMSupport( TBool aDMSupport )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::SetDMSupport begin");
-    iIsDMSupported  = aDMSupport;
-    iIsDMSet = ETrue;;
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::SetDMSupport end");
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::IsDMSupport
-// 
-// -----------------------------------------------------------------------------
-//
-TBool CIAUpdateAppUi::IsDMSupport()
-    {
-    return iIsDMSupported;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAppUi::IsDMSupportSet
-// 
-// -----------------------------------------------------------------------------
-//
-TBool CIAUpdateAppUi::IsDMSupportSet()
-    {
-    return iIsDMSet;
-    }
-
-TBool CIAUpdateAppUi::UiRefreshAllowed()
-    {
-    return iUiRefreshAllowed;
-    }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateAppUi::ForegroundDelayComplete
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateAppUi::ForegroundDelayComplete( TInt aError )
-    {
-    IAUPDATE_TRACE_1("[IAUPDATE] CIAUpdateAppUi::ForegroundDelayComplete() begin: %d",
-                     aError);
-
-    delete iForegroundTimer;
-    iForegroundTimer = NULL;
-    
-    iEikonEnv->RootWin().SetOrdinalPosition( 0 );
-
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::ForegroundDelayComplete() end");
-    }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateAppUi::BackgroundDelayComplete
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateAppUi::BackgroundDelayComplete( TInt aError )
-    {
-    IAUPDATE_TRACE_1("[IAUPDATE] CIAUpdateAppUi::BackgroundDelayComplete() begin: %d",
-                     aError);
-
-   delete iBackgroundTimer;
-    iBackgroundTimer = NULL;
-    
-    iEikonEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNeverAtFront );
-
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateAppUi::BackgroundDelayComplete() end");
-    }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateAppUi::ProcessStartDelayComplete
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateAppUi::ProcessStartDelayComplete( TInt /*aError*/ )
-    {
-    }
-    
-
-// End of File  
--- a/iaupdate/IAD/ui/src/iaupdateautomaticcheck.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdateautomaticcheck.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -21,16 +21,13 @@
 //INCLUDES
 
 #include "iaupdateautomaticcheck.h"
-#include "iaupdatedialogutil.h"
 #include "iaupdatefirsttimeinfo.h"
 #include "iaupdate.hrh"
 #include "iaupdateprivatecrkeys.h"
-#include "iaupdateapplication.h"
+#include "iaupdatedialogutil.h"
 
-#include <avkon.rsg>
-#include <avkon.hrh>
-#include <iaupdate.rsg>
 #include <centralrepository.h> 
+#include <hbaction.h>
 
 
 // ---------------------------------------------------------------------------
@@ -83,6 +80,10 @@
 //
 CIAUpdateAutomaticCheck::~CIAUpdateAutomaticCheck()
     {
+    if ( mDialogUtil )
+        {
+        delete mDialogUtil;
+        }
     }
 
 
@@ -91,9 +92,8 @@
 // 
 // ---------------------------------------------------------------------------
 //
-TBool CIAUpdateAutomaticCheck::AcceptAutomaticCheckL()
+void CIAUpdateAutomaticCheck::AcceptAutomaticCheckL()
     {
-    TBool acceptChecks = ETrue;
 	CIAUpdateFirstTimeInfo* firstTimeInfo = CIAUpdateFirstTimeInfo::NewLC();
 	if ( !firstTimeInfo->AutomaticUpdateChecksAskedL() )
 	    {
@@ -104,18 +104,21 @@
 	        }
 	    else
 	        {
-	        TInt ret = IAUpdateDialogUtil::ShowConfirmationQueryL( 
-	                                          R_IAUPDATE_TURN_ON_AUTOUPD_CHECKS, 
-	                                          R_AVKON_SOFTKEYS_YES_NO );    
-	        firstTimeInfo->SetAutomaticUpdatesAskedL();
-	        if ( ret == EAknSoftkeyYes )
-                {
-	            EnableAutoUpdateCheckL( ETrue );
+	        if ( !mDialogUtil )
+	            {
+	        	mDialogUtil = new IAUpdateDialogUtil(NULL, this);
 	            }
-	        }
+	        if ( mDialogUtil )
+	            {
+	            mPrimaryAction = NULL;
+	            mPrimaryAction = new HbAction("Yes");
+	            HbAction *secondaryAction = NULL;
+	            secondaryAction = new HbAction("No");
+	            mDialogUtil->showQuestion(QString("Turn on setting for Automatic update checks?"), mPrimaryAction, secondaryAction);
+	            }
+ 	        }
 	    }
 	CleanupStack::PopAndDestroy( firstTimeInfo ); 
-    return acceptChecks;
     }
 
 // ---------------------------------------------------------------------------
@@ -169,5 +172,19 @@
     CleanupStack::PopAndDestroy( cenrep );
     }
 
-    
+// ---------------------------------------------------------------------------
+// CIAUpdateAutomaticCheck::dialogFinished
+// 
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateAutomaticCheck::dialogFinished(HbAction *action)
+    {
+    if ( action == mPrimaryAction )
+        {
+        EnableAutoUpdateCheckL( ETrue ); 
+        }
+    CIAUpdateFirstTimeInfo* firstTimeInfo = CIAUpdateFirstTimeInfo::NewLC();
+    firstTimeInfo->SetAutomaticUpdatesAskedL();
+    CleanupStack::PopAndDestroy( firstTimeInfo );
+    }
 // End of File  
--- a/iaupdate/IAD/ui/src/iaupdatedeputils.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdatedeputils.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -21,7 +21,6 @@
 // INCLUDES
 #include "iaupdatedeputils.h"
 #include "iaupdatebasenode.h"
-#include "iaupdateanynode.h"
 #include "iaupdatenode.h"
 
 
@@ -31,7 +30,7 @@
 // ---------------------------------------------------------------------------
 //
 void IAUpdateDepUtils::GetDependenciesL( const MIAUpdateNode& aNode,
-                                         const RPointerArray<MIAUpdateAnyNode>& aAllNodes,  
+                                         const RPointerArray<MIAUpdateNode>& aAllNodes,  
                                          RPointerArray<MIAUpdateNode>& aDependencyNodes ) 
     {
     RPointerArray<MIAUpdateNode> dependencies;
@@ -81,7 +80,7 @@
 // ---------------------------------------------------------------------------
 //    
 void IAUpdateDepUtils::GetDependantsL( const MIAUpdateNode& aNode, 
-                                       const RPointerArray<MIAUpdateAnyNode>& aAllNodes,  
+                                       const RPointerArray<MIAUpdateNode>& aAllNodes,  
                                        RPointerArray<MIAUpdateNode>& aDependantNodes ) 
     {
     RPointerArray<MIAUpdateNode> dependants;
--- a/iaupdate/IAD/ui/src/iaupdatedetailsdialog.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,301 +0,0 @@
-/*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:    
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "iaupdatedetailsdialog.h"
-#include "iaupdatedialogutil.h"
-#include "iaupdatebasenode.h"
-#include "iaupdatenode.h"  
-#include "iaupdatedebug.h"
-#include <iaupdate.rsg>
-
-#include <aknmessagequerydialog.h>      // CAknMessageQueryDialog
-
-#include <StringLoader.h>
-
-// CONSTANTS
-const TInt KKiloByte = 1024;
-const TInt KMegaByte = 1024 * 1024;
-const TInt KMaxShownInKiloBytes = 10 * KMegaByte;
-
-
-/*******************************************************************************
- * class CIAUpdateDetailsDialog
- *******************************************************************************/
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateDetailsDialog::ShowDialogL
-// 
-// -----------------------------------------------------------------------------
-TBool CIAUpdateDetailsDialog::ShowDialogL( TIAUpdateDialogParam* aParam )
-	{
-	CIAUpdateDetailsDialog* dialog = CIAUpdateDetailsDialog::NewL( aParam );
-	CleanupStack::PushL( dialog );
-
-	dialog->ShowDialogL();
-
-	CleanupStack::PopAndDestroy( dialog );
-    
-    return ETrue;
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateDetailsDialog::NewL
-//
-// -----------------------------------------------------------------------------
-CIAUpdateDetailsDialog* CIAUpdateDetailsDialog::NewL( TIAUpdateDialogParam* aParam )
-    {
-    CIAUpdateDetailsDialog* self = new ( ELeave ) CIAUpdateDetailsDialog( aParam );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateDetailsDialog::CIAUpdateDetailsDialog
-// 
-// -----------------------------------------------------------------------------
-//
-CIAUpdateDetailsDialog::CIAUpdateDetailsDialog( TIAUpdateDialogParam* aParam )
-	{
-	iParam = aParam;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateDetailsDialog::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateDetailsDialog::ConstructL()
-    {
-    if ( !iParam->iNode )
-        {
-    	User::Leave( KErrNotFound );
-        }
-        
-    TInt size = BufferSize();
-
- 	iBuf = HBufC::NewL( size );
-    } 
-
-
-
-// ----------------------------------------------------------------------------
-// Destructor
-//
-// ----------------------------------------------------------------------------
-//
-CIAUpdateDetailsDialog::~CIAUpdateDetailsDialog()
-    {
-    delete iBuf;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateDetailsDialog::BufferSize
-//
-// -----------------------------------------------------------------------------
-//
-TInt CIAUpdateDetailsDialog::BufferSize()
-    {
-    const TInt KExtraSize = 512;
-    
-    TPtrC ptr1 = iParam->iNode->Base().Name();
-    TPtrC ptr2 = iParam->iNode->Base().Description();
-    
-    TInt len = ptr1.Length() + ptr2.Length() + KExtraSize;
-    
-    return len;
-    } 
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateDetailsDialog::ConstructTextL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateDetailsDialog::ConstructTextL()
-    {
-    _LIT(KNewLine, "\n");
-
-    TPtr ptr = iBuf->Des();
-    
-    TPtrC name =         iParam->iNode->Base().Name();
-    TPtrC description =  iParam->iNode->Base().Description();
-    TIAUpdateVersion version = iParam->iNode->Base().Version();
-    TInt contentSize =   iParam->iNode->Base().ContentSizeL();
-    
-    
-    HBufC* hBuf = StringLoader::LoadLC( R_IAUPDATE_DETAILS_DIALOG_APP_NAME );
-    ptr.Append( KOpeningBoldTag );
-    ptr.Append( *hBuf );
-    ptr.Append( KClosingBoldTag );
-    CleanupStack::PopAndDestroy( hBuf );
-    
-    ptr.Append( KNewLine );
-    ptr.Append( name );
-    ptr.Append( KNewLine );
-    ptr.Append( KNewLine );
-       
-    hBuf = StringLoader::LoadLC( R_IAUPDATE_DETAILS_DIALOG_DESCRIPTION );
-    ptr.Append( KOpeningBoldTag );
-    ptr.Append( *hBuf );
-    ptr.Append( KClosingBoldTag );
-    CleanupStack::PopAndDestroy( hBuf );
-    
-    ptr.Append( KNewLine );
-    ptr.Append( description );
-    ptr.Append( KNewLine );
-    ptr.Append( KNewLine );
-    
-    
-    if( iParam->iNode->Type() != MIAUpdateNode::EPackageTypeServicePack )
-        {
-        hBuf = StringLoader::LoadLC( R_IAUPDATE_DETAILS_DIALOG_VERSION );
-        ptr.Append( KOpeningBoldTag );
-        ptr.Append( *hBuf );
-        ptr.Append( KClosingBoldTag );
-        CleanupStack::PopAndDestroy( hBuf );
-        
-        ptr.Append( KNewLine );
-        hBuf = VersionTextLC( version );
-        ptr.Append( *hBuf );
-        ptr.Append( KNewLine );
-        ptr.Append( KNewLine );
-        CleanupStack::PopAndDestroy( hBuf );
-        }
-   
-    
-    hBuf = StringLoader::LoadLC( R_IAUPDATE_DETAILS_DIALOG_FILE_SIZE );
-    ptr.Append( KOpeningBoldTag );
-    ptr.Append( *hBuf );
-    ptr.Append( KClosingBoldTag );
-    CleanupStack::PopAndDestroy( hBuf );
-    
-    ptr.Append( KNewLine );
-    
-    hBuf = FileSizeTextLC( contentSize );
-    ptr.Append( *hBuf );
-    CleanupStack::PopAndDestroy( hBuf );
-    } 
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateDetailsDialog::ShowDialogL
-// 
-// -----------------------------------------------------------------------------
-TBool CIAUpdateDetailsDialog::ShowDialogL()
-	{
-	ConstructTextL();
-
-	HBufC* hBuf = StringLoader::LoadLC( R_IAUPDATE_DETAILS_DIALOG_TITLE );
-	IAUpdateDialogUtil::ShowMessageQueryL( *hBuf, *iBuf );
-	CleanupStack::PopAndDestroy( hBuf );
-    
-    return ETrue;
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateDetailsDialog::FileSizeTextLC
-// 
-// -----------------------------------------------------------------------------
-//
-HBufC* CIAUpdateDetailsDialog::FileSizeTextLC( TInt aFileSize )
-	{
-    TInt resourceId = 0;
-	TInt size = 0;
-	
-	if ( aFileSize >= KMaxShownInKiloBytes )
-	    {
-	    resourceId = R_IAUPDATE_DETAILS_DIALOG_SIZE_MEGABYTE;
-	    size = aFileSize / KMegaByte;
-   	    if ( aFileSize % KMegaByte != 0 )
-	        {
-	        size++;
-	        }
-	    }
-	else
-	    {
-	    resourceId = R_IAUPDATE_DETAILS_DIALOG_SIZE_KILOBYTE;
-	    size = aFileSize / KKiloByte;
-   	    if ( aFileSize % KKiloByte != 0 )
-	        {
-	        size++;
-	        }	
-	    }
-	    
-	HBufC* sizeAsString = StringLoader::LoadLC( resourceId, size );
-	TPtr ptr = sizeAsString->Des();
-    AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
-    return sizeAsString;
-	}
-
-// -----------------------------------------------------------------------------
-// CIAUpdateDetailsDialog::VersionTextLC
-// 
-// Version format is '%1N.%2N(%3N)' where
-//
-// %0N is major version number
-// %1N is minor version number
-// %2N is build number
-// -----------------------------------------------------------------------------
-//
-HBufC* CIAUpdateDetailsDialog::VersionTextLC( TIAUpdateVersion aVersion )
-    {
-    const TInt KVersionSize = 64;
-    
-    TInt major = aVersion.iMajor;
-    TInt minor = aVersion.iMinor;
-    TInt build = aVersion.iBuild;
-    
-    TBuf<KVersionSize> buf1;
-    TBuf<KVersionSize> buf2;
-    
-    HBufC* hBuf   = HBufC::NewLC( KVersionSize );
-    TPtr ptr = hBuf->Des();
-    
-    HBufC* versionFormat = 
-    StringLoader::LoadLC( R_IAUPDATE_DETAILS_DIALOG_VERSION_FORMAT );
-   
-    // replace  %0N with major number
-    StringLoader::Format( buf1, versionFormat->Des(), 0, major );
-    
-    // replace  %1N with minor number
-    StringLoader::Format( buf2, buf1, 1, minor );
-
-    // replace  %2N with build number
-    StringLoader::Format( ptr, buf2, 2, build );
-
-    AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );
-    
-    CleanupStack::PopAndDestroy( versionFormat );
-    
-    return hBuf;
-    }
-
-   
-//  End of File  
--- a/iaupdate/IAD/ui/src/iaupdatedialogutil.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdatedialogutil.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,147 +11,114 @@
 *
 * Contributors:
 *
-* Description:    
+* Description:   This module contains the implementation of IAUpdateDialogUtil class 
+*                member functions.
 *
 */
+#include <hblabel.h>
+#include <hbmessagebox.h>
+
+#include "iaupdatedialogutil.h"
+#include "iaupdatedialogobserver.h"
+#include "iaupdatedebug.h"
 
 
 
-// INCLUDE FILES
-
-#include "iaupdatedialogutil.h"
-#include "iaupdatedebug.h"
-#include <iaupdate.rsg>
+IAUpdateDialogUtil::IAUpdateDialogUtil(QObject *parent, IAUpdateDialogObserver *observer)
+: QObject(parent),
+  mObserver(observer)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateDialogUtil::IAUpdateDialogUtil()");
+}
 
-#include <aknmessagequerydialog.h>      // CAknMessageQueryDialog
-#include <aknnotewrappers.h>    // CAknInformationNote
-#include <StringLoader.h>
-
-
-/*******************************************************************************
- * class TIAUpdateDialogParam
- *******************************************************************************/
+IAUpdateDialogUtil::~IAUpdateDialogUtil()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateDialogUtil::~IAUpdateDialogUtil()");
+}
 
 
-// -------------------------------------------------------------------------------
-// TIAUpdateDialogParam::TIAUpdateDialogParam
-//
-// -------------------------------------------------------------------------------
-//
-TIAUpdateDialogParam::TIAUpdateDialogParam()
- : iCountSuccessfull( KErrNotFound ), iCountCancelled( KErrNotFound ),
-   iCountFailed( KErrNotFound ), iResourceId( KErrNotFound ), iNode( NULL ), 
-   iLinkObserver( NULL )
-    {
+void IAUpdateDialogUtil::showInformation(const QString &text, HbAction *primaryAction)
+{    
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation); 
+    messageBox->setText(text);
+    int actionCount = messageBox->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        messageBox->removeAction(messageBox->actions().at(i));
     }
-
-
-/*******************************************************************************
- * class IAUpdateDialogUtil
- *******************************************************************************/
-
-
-//------------------------------------------------------------------------------
-// IAUpdateDialogUtil::ShowMessageQueryL
-//
-//------------------------------------------------------------------------------
-//
-void IAUpdateDialogUtil::ShowMessageQueryL(const TDesC& aTitle, const TDesC& aText)
-	{
-	TPtrC ptr = aText;
-	CAknMessageQueryDialog* query = CAknMessageQueryDialog::NewL( ptr );
-	query->PrepareLC( R_IAUPDATE_MESSAGE_QUERY );
-
-	if ( aTitle.Length() != 0 )
-		{
-		CAknPopupHeadingPane* headingPane = query->Heading();
-		headingPane->SetTextL( aTitle );
-		}
-	query->RunLD();
-	}
+    if (primaryAction)
+    {    
+        messageBox->addAction(primaryAction);
+    }  
+    messageBox->setTimeout(HbPopup::NoTimeout); 
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    messageBox->open(this,SLOT(finished(HbAction*)));
+}
 
 
-//------------------------------------------------------------------------------
-// IAUpdateDialogUtil::ShowMessageQueryL
-//
-//------------------------------------------------------------------------------
-//
-void IAUpdateDialogUtil::ShowMessageQueryL( const TDesC& aTitle, TInt aResource )
-	{
-	HBufC* hBuf = StringLoader::LoadLC( aResource );
-	ShowMessageQueryL( aTitle, hBuf->Des() );
-	CleanupStack::PopAndDestroy( hBuf );
-	}
-
-
-//------------------------------------------------------------------------------
-// IAUpdateDialogUtil::ShowInformationQueryL
-//
-//------------------------------------------------------------------------------
-//
-void IAUpdateDialogUtil::ShowInformationQueryL(const TDesC& aText)
-	{
-	CAknQueryDialog* queryDialog = new (ELeave) CAknQueryDialog;
-	queryDialog->ExecuteLD(R_IAUPDATE_INFORMATION_QUERY, aText);
-	}
+void IAUpdateDialogUtil::showQuestion(const QString &text, HbAction *primaryAction, HbAction *secondaryAction)
+{
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion); 
+    messageBox->setIconVisible(false);
+    messageBox->setText(text);
+    int actionCount = messageBox->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        messageBox->removeAction(messageBox->actions().at(i));
+    }
+    if (primaryAction)
+    {    
+        messageBox->addAction(primaryAction);
+    }
+    if (secondaryAction)
+    {    
+        messageBox->addAction(secondaryAction);
+    } 
+    messageBox->setTimeout(HbPopup::NoTimeout); 
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    messageBox->open(this,SLOT(finished(HbAction*)));
+}
 
 
-//------------------------------------------------------------------------------
-// IAUpdateDialogUtil::ShowInformationQueryL
-//
-//------------------------------------------------------------------------------
-//
-void IAUpdateDialogUtil::ShowInformationQueryL(TInt aResource)
-	{
-	HBufC* hBuf = StringLoader::LoadLC(aResource);
-	ShowInformationQueryL( hBuf->Des() );
-	CleanupStack::PopAndDestroy( hBuf );
-	}
+void IAUpdateDialogUtil::showAgreement(HbAction *primaryAction, HbAction *secondaryAction)
+{
+    HbMessageBox *agreementDialog = new HbMessageBox(HbMessageBox::MessageTypeQuestion); 
+    HbLabel *label = new HbLabel(agreementDialog);
+    label->setHtml(QString("Disclaimer"));
+    agreementDialog->setHeadingWidget(label);
+    agreementDialog->setIconVisible(false);
+    agreementDialog->setText("This application allows you to download and use applications and services provided by Nokia or third parties. Service Terms and Privacy Policy will apply. Nokia will not assume any liability or responsibility for the availability or third party applications or services. Before using the third party application or service, read the applicable terms of use.<br /><br />Use of this application involves transmission of data. Contact your network service provider for information about data transmission charges.<br /><br />(c) 2007-2010 Nokia. All rights reserved.");
 
-//------------------------------------------------------------------------------
-// IAUpdateDialogUtil::ShowConfirmationQueryL
-//
-//------------------------------------------------------------------------------
-//
-TInt IAUpdateDialogUtil::ShowConfirmationQueryL( const TDesC& aText, 
-                                          TInt aSoftkeyResourceId )
-	{
-	CAknQueryDialog* queryDialog = CAknQueryDialog::NewL( 
-	                               CAknQueryDialog::EConfirmationTone );
+    int actionCount = agreementDialog->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        agreementDialog->removeAction(agreementDialog->actions().at(i));
+    }
+    if (primaryAction)
+    {    
+        agreementDialog->addAction(primaryAction);
+    }    
+    if (secondaryAction)
+    {
+        agreementDialog->addAction(secondaryAction);
+    }
+    agreementDialog->setTimeout(HbPopup::NoTimeout);
+    agreementDialog->setAttribute(Qt::WA_DeleteOnClose);
+    agreementDialog->open(this,SLOT(finished(HbAction*)));
+}
 
-    queryDialog->PrepareLC( R_IAUPDATE_CONFIRMATION_QUERY );
-    queryDialog->SetPromptL( aText );
-    queryDialog->ButtonGroupContainer().SetCommandSetL( aSoftkeyResourceId );
-    return ( queryDialog->RunLD() );
-	}
+
 
-//------------------------------------------------------------------------------
-// IAUpdateDialogUtil::ShowConfirmationQueryL
-//
-//------------------------------------------------------------------------------
-//
-TInt IAUpdateDialogUtil::ShowConfirmationQueryL( TInt aResource, 
-                                          TInt aSoftkeyResourceId )
-	{
-	HBufC* hBuf = StringLoader::LoadLC( aResource) ;
-	TInt ret = ShowConfirmationQueryL( *hBuf, aSoftkeyResourceId );
-	CleanupStack::PopAndDestroy( hBuf );
-	return ret;
-	}
+void IAUpdateDialogUtil::finished(HbAction *action)
+{
+    if (mObserver)
+    {
+        mObserver->dialogFinished(action);
+    }
+}
 
 
 
 
-// -----------------------------------------------------------------------------
-// IAUpdateDialogUtil::Panic
-//
-// -----------------------------------------------------------------------------
-//
-void IAUpdateDialogUtil::Panic( TInt aReason ) 
-    {
-	_LIT(KPanicCategory, "IAUpdateDialogUtil");
-	
-	User::Panic(KPanicCategory, aReason); 
-    }
-    
-//  End of File  
+
+
--- a/iaupdate/IAD/ui/src/iaupdatedocument.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of CIAUpdateDocument class 
-*                member functions.
-*
-*/
-
-
-//INCLUDES
-#include <e32property.h>
-#include "iaupdateappui.h"
-#include "iaupdatedocument.h"
-#include "iaupdatefwnsmlpskeys.h"
-#include "iaupdatedebug.h"
-#include "iaupdateuids.h"
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------------------------
-// CIAUpdateDocument::NewL
-// Two-phased constructor.
-// ---------------------------------------------------------------------------
-//
-CIAUpdateDocument* CIAUpdateDocument::NewL(CEikApplication& aApp)
-    {
-    CIAUpdateDocument* self = NewLC(aApp);
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateDocument::NewLC
-// 
-// ---------------------------------------------------------------------------
-//
-CIAUpdateDocument* CIAUpdateDocument::NewLC(CEikApplication& aApp)
-    {
-    CIAUpdateDocument* self = new (ELeave) CIAUpdateDocument(aApp);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// void CCIAUpdateDocument::ConstructL()
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateDocument::ConstructL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateDocument::ConstructL() begin");
-    TInt err  = RProperty::Define( KPSUidNSmlDMSyncApp,
-            KFotaDLStatus,
-            RProperty::EInt); //Policies removed as FOTA to write     
-    
-    err =  RProperty::Set( KPSUidNSmlDMSyncApp,
-            KFotaDLStatus,KErrNotFound );  
-    
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateDocument::ConstructL() end");
-    }    
-
-
-// ---------------------------------------------------------------------------
-// CIAUpdateDocument::CIAUpdateDocument(CEikApplication& aApp)
-// constructor
-// ---------------------------------------------------------------------------
-//
-CIAUpdateDocument::CIAUpdateDocument(CEikApplication& aApp) : CAknDocument(aApp) 
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateDocument::~CIAUpdateDocument()
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CIAUpdateDocument::~CIAUpdateDocument()
-    {
-    TInt err = RProperty::Delete(KPSUidNSmlDMSyncApp, KFotaDLStatus);
-    }
-
-// ----------------------------------------------------
-// CIAUpdateDocument::CreateAppUiL()
-// constructs CIAUpdateAppUi
-// ----------------------------------------------------
-//
-CEikAppUi* CIAUpdateDocument::CreateAppUiL()
-    {
-    // Create the application user interface, and return a pointer to it,
-    // the framework takes ownership of this object
-    CEikAppUi* appUi = new (ELeave) CIAUpdateAppUi;
-    return appUi;
-    }
- 
-// End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/src/iaupdateengine.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1223 @@
+/*
+ * Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:   This module contains the implementation of IAUpdateEngine
+ *                class member functions.
+ *
+ */
+
+#include <qapplication.h>
+#include <hbmessagebox.h>
+#include <hbaction.h>
+#include <eikenv.h>
+#include <centralrepository.h>
+#include <cmmanager.h>
+#include <cmdestination.h>
+#include <rconnmon.h>
+#include <apgwgnam.h>
+#include <starterclient.h>
+
+#include "iaupdateengine.h"
+#include "iaupdateserviceprovider.h"
+#include "iaupdateuicontroller.h"
+#include "iaupdatefwupdatehandler.h"
+#include "iaupdategloballockhandler.h"
+#include "iaupdatenodefilter.h"
+#include "iaupdateresult.h"
+#include "iaupdateprivatecrkeys.h"
+#include "iaupdateuiconfigdata.h"
+#include "iaupdatequeryhistory.h"
+#include "iaupdateparameters.h"
+#include "iaupdateagreement.h"
+#include "iaupdateautomaticcheck.h"
+#include "iaupdateresultsdialog.h"
+#include "iaupdatedebug.h"
+
+IAUpdateEngine::IAUpdateEngine(QObject *parent) :
+    QObject(parent)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::IAUpdateEngine() begin");
+    iController = NULL;
+    iFwUpdateHandler = NULL;
+    iGlobalLockHandler = NULL;
+    iAutomaticCheck = NULL;
+    iIdle = NULL;
+    iIdleAutCheck = NULL;
+    iEikEnv = CEikonEnv::Static();
+    mUpdateNow = false;
+    mRequestIssued = false;
+    mStartedFromApplication = false;
+    mUiRefreshAllowed = true;
+    mWgId = 0;
+    mUpdatequeryUid = 0;
+    mDialogState = NoDialog;
+    mResultsDialog = NULL;
+    mServiceProvider = NULL;
+    mServiceProvider = new IAUpdateServiceProvider(*this);
+    connect(mServiceProvider, SIGNAL(clientDisconnected()), this,
+            SLOT(handleAllClientsClosed()));
+    TRAP_IGNORE( iController = CIAUpdateUiController::NewL( *this ));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::IAUpdateEngine() end");
+    }
+
+IAUpdateEngine::~IAUpdateEngine()
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::~IAUpdateEngine() begin");
+    InformRequestObserver(KErrCancel);
+    if (iIdle)
+        {
+        delete iIdle;
+        }
+    if (iIdleAutCheck)
+        {
+        delete iIdleAutCheck;
+        }
+    if (iGlobalLockHandler)
+        {
+        delete iGlobalLockHandler;
+        }
+    if (iAutomaticCheck)
+        {
+        delete iAutomaticCheck;
+        }
+    if (iController)
+        {
+        delete iController;
+        }
+    if (iFwUpdateHandler)
+        {
+        delete iFwUpdateHandler;
+        }
+    if (mServiceProvider)
+        {
+        delete mServiceProvider;
+        }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::~IAUpdateEngine() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::StartedByLauncherL
+// 
+// -----------------------------------------------------------------------------
+//
+void IAUpdateEngine::StartedByLauncherL(bool aRefreshFromNetworkDenied)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartedByLauncherL() begin");
+    mRequestIssued = true;
+    mRequestType = IAUpdateUiDefines::ENoRequest;
+    iController->SetRequestType(mRequestType);
+    SetVisibleL(true);
+    CIAUpdateParameters* params = iController->ParamsReadAndRemoveFileL();
+    iController->CheckUpdatesDeferredL(params, aRefreshFromNetworkDenied);
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::CheckUpdatesRequestL
+// 
+// -----------------------------------------------------------------------------
+//
+void IAUpdateEngine::CheckUpdatesRequestL(int wgid,
+        CIAUpdateParameters* aFilterParams, bool aForcedRefresh)
+
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::CheckUpdatesRequestL() begin");
+    SetClientWgId(wgid);
+    mRequestIssued = true;
+    mStartedFromApplication = true;
+    CleanupStack::PushL(aFilterParams);
+    if (wgid > 0)
+        {
+        HideApplicationInFSWL(true);
+        }
+    CleanupStack::Pop(aFilterParams);
+
+    if (!aFilterParams->ShowProgress())
+        {
+        iEikEnv->RootWin().SetOrdinalPosition(-1, ECoeWinPriorityNeverAtFront);
+        }
+
+    mRequestType = IAUpdateUiDefines::ECheckUpdates;
+    iController->SetRequestType(mRequestType);
+    iController->SetForcedRefresh(aForcedRefresh);
+
+    iController->CheckUpdatesDeferredL(aFilterParams, false);
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::CheckUpdatesRequestL() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::ShowUpdatesRequestL
+// 
+// -----------------------------------------------------------------------------
+// 
+void IAUpdateEngine::ShowUpdatesRequestL(int wgid,
+        CIAUpdateParameters* aFilterParams)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdatesRequestL() begin");
+    SetClientWgId(wgid);
+    mRequestIssued = true;
+    //    delete iBackgroundTimer;
+    //    iBackgroundTimer = NULL;
+    mStartedFromApplication = true;
+    CleanupStack::PushL(aFilterParams);
+    if (wgid > 0)
+        {
+        HideApplicationInFSWL(true);
+        }
+
+    //StatusPane()->MakeVisible( true );
+    iEikEnv->RootWin().SetOrdinalPosition(0, ECoeWinPriorityNormal);
+
+    //iRequestObserver = &aObserver;
+    mRequestType = IAUpdateUiDefines::EShowUpdates;
+    iController->SetRequestType(mRequestType);
+
+    //if ( !iMainView )
+    //    {
+    //    iMainView  = CIAUpdateMainView::NewL( ClientRect() ); 
+    //    AddViewL( iMainView );
+    //    }
+
+
+    // by pushing object to cleanup stack its destructor is called if leave happens
+    // so global lock issued by this instance can be released in destructor of CIAUpdateGlobalLockHandler
+    CIAUpdateGlobalLockHandler* globalLockHandler =
+            CIAUpdateGlobalLockHandler::NewLC();
+    if (!globalLockHandler->InUseByAnotherInstanceL())
+        {
+        globalLockHandler->SetToInUseForAnotherInstancesL(true);
+        CleanupStack::Pop(globalLockHandler);
+        CleanupStack::Pop(aFilterParams);
+        CleanupStack::PushL(globalLockHandler);
+        iController->CheckUpdatesDeferredL(aFilterParams, false);
+        CleanupStack::Pop(globalLockHandler);
+        delete iGlobalLockHandler;
+        iGlobalLockHandler = globalLockHandler;
+        //now possible deletion of iGlobalLockHandler in leave situation is handled
+        //in HandleLeaveErrorL() and HandleLeaveErrorWithoutLeave methods. 
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy(globalLockHandler);
+        CleanupStack::PopAndDestroy(aFilterParams);
+        // locked by another IAD instance, nothing else to do than just complete client's request.  
+        InformRequestObserver(KErrNone);
+        }
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdatesRequestL() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::ShowUpdateQueryRequestL
+// 
+// -----------------------------------------------------------------------------
+//     
+void IAUpdateEngine::ShowUpdateQueryRequestL(int wgid, uint aUid)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdateQueryRequestL begin");
+    SetClientWgId(wgid);
+    mRequestIssued = true;
+    mStartedFromApplication = true;
+    mUpdatequeryUid = aUid;
+    mUpdateNow = false;
+    if (wgid > 0)
+        {
+        HideApplicationInFSWL(true);
+        }
+    mRequestType = IAUpdateUiDefines::EUpdateQuery;
+
+    delete iIdle;
+    iIdle = NULL;
+    iIdle = CIdle::NewL(CActive::EPriorityIdle);
+    iIdle->Start(TCallBack(UpdateQueryCallbackL, this));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdateQueryRequestL end")
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::StartUpdate
+// 
+// -----------------------------------------------------------------------------
+//
+void IAUpdateEngine::StartUpdate(bool aFirmwareUpdate)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartUpdate() begin");
+    if (aFirmwareUpdate)
+        {
+        if (!iFwUpdateHandler)
+            {
+            TRAP_IGNORE( CIAUpdateFWUpdateHandler::NewL() );
+            }
+        if (iFwUpdateHandler)
+            {
+            iFwUpdateHandler->FirmWareUpdatewithFOTA();
+            }
+        }
+    else
+        {
+        // by pushing object to cleanup stack it's destructor is called if leave happens
+        // so global lock issued by this instance can be released in destructor of CIAUpdateGlobalLockHandler
+        CIAUpdateGlobalLockHandler* globalLockHandler =
+                CIAUpdateGlobalLockHandler::NewLC();
+        if (!globalLockHandler->InUseByAnotherInstanceL())
+            {
+            globalLockHandler->SetToInUseForAnotherInstancesL(true);
+            // No need to be totally silent since the updating is started
+            // by user.
+            SetDefaultConnectionMethodL(false);
+            iController->StartUpdateL();
+            CleanupStack::Pop(globalLockHandler);
+            delete iGlobalLockHandler;
+            iGlobalLockHandler = globalLockHandler;
+            //now possible deletion of iGlobalLockHandler in leave situation is handled
+            //in HandleLeaveErrorL() and HandleLeaveErrorWithoutLeave methods. 
+            }
+        else
+            {
+            CleanupStack::PopAndDestroy(globalLockHandler);
+            }
+        }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartUpdate() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::SetVisibleL
+// 
+// -----------------------------------------------------------------------------
+//  
+void IAUpdateEngine::SetVisibleL(bool /*aVisible*/)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetVisibleL() begin");
+    //IAUPDATE_TRACE_1("[IAUPDATE] visible: %d", aVisible );
+    /*if ( aVisible )
+     {
+     if ( iEikonEnv->RootWin().OrdinalPosition() != 0 || iEikonEnv->RootWin().OrdinalPriority() != ECoeWinPriorityNormal )
+     {
+     iEikonEnv->RootWin().SetOrdinalPosition( 0, ECoeWinPriorityNormal );
+     }
+     
+     StatusPane()->MakeVisible( ETrue );
+     iMainView  = CIAUpdateMainView::NewL( ClientRect() ); 
+     AddViewL( iMainView );
+     ActivateLocalViewL( TUid::Uid( EIAUpdateMainViewId ) );
+     }
+     else
+     {
+     iEikonEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNeverAtFront );
+     StatusPane()->MakeVisible( EFalse );
+     }*/
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetVisibleL() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::SetClientWgId
+// 
+// -----------------------------------------------------------------------------
+// 
+void IAUpdateEngine::SetClientWgId(int aWgId)
+    {
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateEngine::SetClientWgId() wgId %d", aWgId );
+    mWgId = aWgId;
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::ClientInBackgroundL
+// 
+// -----------------------------------------------------------------------------
+// 
+bool IAUpdateEngine::ClientInBackgroundL() const
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ClientInBackgroundL() begin");
+    bool inBackground = false;
+    if (mWgId > 0)
+        {
+        CArrayFixFlat<int>* wgArray = new (ELeave) CArrayFixFlat<int> (10);
+        CleanupStack::PushL(wgArray);
+        User::LeaveIfError(iEikEnv->WsSession().WindowGroupList(0, wgArray));
+        int ownWgId = iEikEnv->RootWin().Identifier();
+        if ((wgArray->At(0) != ownWgId) && (wgArray->At(0) != mWgId))
+            {
+            inBackground = true;
+            }
+        CleanupStack::PopAndDestroy(wgArray);
+        }
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateEngine::ClientInBackgroundL() inBackground: %d", inBackground );
+    return inBackground;
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::handleAllClientsClosed()
+// 
+// -----------------------------------------------------------------------------
+//
+void IAUpdateEngine::handleAllClientsClosed()
+    {
+    qApp->quit();
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::dialogFinished
+// Called when dialog is finished.
+// -----------------------------------------------------------------------------
+//
+void IAUpdateEngine::dialogFinished(HbAction *action)
+    {
+    DialogState dialogState = mDialogState;
+    mDialogState = NoDialog;
+
+    switch (dialogState)
+        {
+        case Results:
+            mUiRefreshAllowed = true;
+            if (iController->ResultsInfo().iRebootAfterInstall)
+                {
+                ShowRebootDialogL();
+                }
+            else
+                {
+                if (!DoPossibleApplicationClose())
+                    {
+                    iController->RefreshNodeList();
+                    RefreshUI();
+                    }
+                }
+            break;
+        case RebootQuery:
+            if (action == mPrimaryAction)
+                {
+                RStarterSession startersession;
+                if (startersession.Connect() == KErrNone)
+                    {
+                    startersession.Reset(RStarterSession::EUnknownReset);
+                    startersession.Close();
+                    }
+                }
+            else
+                {
+                if (!DoPossibleApplicationClose())
+                    {
+                    iController->RefreshNodeList();
+                    RefreshUI();
+                    }
+                }
+            break;
+        case ShowUpdateQuery:
+            if (action == mPrimaryAction)
+                {
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::dialogFinished() Now");
+                mUpdateNow = true;
+                }
+            else if (action == mSecondaryAction)
+                {
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::dialogFinished() Later");
+                CIAUpdateQueryHistory* updateQueryHistory =
+                        CIAUpdateQueryHistory::NewL();
+                CleanupStack::PushL(updateQueryHistory);
+                updateQueryHistory->SetTimeL(mUpdatequeryUid);
+                CleanupStack::PopAndDestroy(updateQueryHistory);
+                }
+            InformRequestObserver(KErrNone);
+            break;
+        default:
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::StartupComplete
+// 
+// -----------------------------------------------------------------------------
+//    
+void IAUpdateEngine::StartupComplete(TInt aError)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupComplete() begin");
+    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError);
+
+    if (aError != KErrNone)
+        {
+        HandleLeaveErrorWithoutLeave(aError);
+        }
+    else
+        {
+        TRAPD( err, StartupCompleteL() );
+        if (err != KErrNone)
+            {
+            HandleLeaveErrorWithoutLeave(err);
+            }
+        }
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupComplete() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::StartupCompleteL
+// 
+// -----------------------------------------------------------------------------
+//    
+void IAUpdateEngine::StartupCompleteL()
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupCompleteL() begin");
+
+    delete iGlobalLockHandler;
+    iGlobalLockHandler = NULL;
+    iGlobalLockHandler = CIAUpdateGlobalLockHandler::NewL();
+    if (!iGlobalLockHandler->InUseByAnotherInstanceL())
+        {
+        bool totalSilent(false);
+        if (mRequestType == IAUpdateUiDefines::ECheckUpdates)
+            {
+            if (iController->Filter())
+                {
+                if (iController->Filter()->FilterParams())
+                    {
+                    if (iController->Filter()->FilterParams()->Refresh())
+                        {
+                        if (!iController->ForcedRefresh())
+                            {
+                            //from bgchecker, make it silent
+                            totalSilent = true;
+                            }
+                        }
+                    }
+                }
+            }
+        SetDefaultConnectionMethodL(totalSilent);
+        iGlobalLockHandler->SetToInUseForAnotherInstancesL(true);
+        iController->StartRefreshL();
+        }
+    else
+        {
+        RefreshCompleteL(true, KErrServerBusy);
+        }
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupCompleteL() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::HandleLeaveErrorL
+// 
+// -----------------------------------------------------------------------------
+//        
+void IAUpdateEngine::HandleLeaveErrorL(TInt aError)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HandleLeaveErrorL() begin");
+    //removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
+    delete iGlobalLockHandler;
+    iGlobalLockHandler = NULL;
+    // client request is completed before leave in case of leave error
+    if (aError != KErrNone)
+        {
+        InformRequestObserver(aError);
+        User::Leave(aError);
+        }
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HandleLeaveErrorL() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::HandleLeaveErrorWithoutLeave
+// 
+// -----------------------------------------------------------------------------
+//  
+void IAUpdateEngine::HandleLeaveErrorWithoutLeave(TInt aError)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HandleLeaveErrorWithoutLeave() begin");
+    //removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
+    delete iGlobalLockHandler;
+    iGlobalLockHandler = NULL;
+    if (aError != KErrNone)
+        {
+        InformRequestObserver(aError);
+        }
+    if (aError == KErrDiskFull)
+        {
+        //TRAP_IGNORE( ShowGlobalErrorNoteL( aError ) );
+        }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HandleLeaveErrorWithoutLeave end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::RefreshUI
+// 
+// -----------------------------------------------------------------------------
+// 
+void IAUpdateEngine::RefreshUI()
+    {
+    emit refresh(iController->Nodes(), iController->FwNodes(), KErrNone);
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::RefreshCompleteL
+// 
+// -----------------------------------------------------------------------------
+//      
+void IAUpdateEngine::RefreshCompleteL(TBool /*aWithViewActivation*/,
+        TInt aError)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::RefreshCompleteL() begin");
+    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError );
+    //removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
+    delete iGlobalLockHandler;
+    iGlobalLockHandler = NULL;
+
+    if (mRequestType == IAUpdateUiDefines::ECheckUpdates)
+        {
+        InformRequestObserver(aError);
+        }
+    else
+        {
+        emit refresh(iController->Nodes(), iController->FwNodes(), aError);
+        //if ( aWithViewActivation)
+        //  {
+        //  ActivateLocalViewL( TUid::Uid( EIAUpdateMainViewId ) );
+        //  }
+        CIAUpdateAgreement* agreement = CIAUpdateAgreement::NewLC();
+        bool agreementAccepted = agreement->AgreementAcceptedL();
+        if (iController->ForcedRefresh())
+            {
+            if (!agreementAccepted)
+                {
+                agreement->SetAgreementAcceptedL();
+                }
+            }
+        CleanupStack::PopAndDestroy(agreement);
+        // By calling CIdle possible waiting dialog can be closed before
+        // automatic check where a new dialog may be launched
+        delete iIdleAutCheck;
+        iIdleAutCheck = NULL;
+        iIdleAutCheck = CIdle::NewL(CActive::EPriorityIdle);
+        iIdleAutCheck->Start(TCallBack(AutomaticCheckCallbackL, this));
+        }
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::RefreshCompleteL() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::UpdateCompleteL
+// 
+// -----------------------------------------------------------------------------
+//     
+void IAUpdateEngine::UpdateCompleteL(TInt aError)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::UpdateCompleteL begin");
+    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError );
+    //removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
+    delete iGlobalLockHandler;
+    iGlobalLockHandler = NULL;
+    if (mRequestType != IAUpdateUiDefines::ENoRequest)
+        {
+        InformRequestObserver(aError);
+        }
+
+    ShowResultsDialogL();
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::UpdateCompleteL end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::ShowResultsDialogL
+// 
+// -----------------------------------------------------------------------------
+//   
+void IAUpdateEngine::ShowResultsDialogL()
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowResultsDialogL() begin");
+
+    mUiRefreshAllowed = false;
+    mResultsDialog = new IAUpdateResultsDialog(this);
+    mResultsDialog->showResults(iController->ResultsInfo(), this,
+            SLOT(dialogFinished(HbAction*)));
+    mDialogState = Results;
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowResultsDialogL() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::ShowRebootDialogL
+// 
+// -----------------------------------------------------------------------------
+//
+void IAUpdateEngine::ShowRebootDialogL()
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowRebootDialogL() begin");
+
+    HbMessageBox *messageBox = new HbMessageBox(
+            HbMessageBox::MessageTypeQuestion);
+    messageBox->setText(QString("Phone restart needed. Restart now?"));
+    int actionCount = messageBox->actions().count();
+    for (int i = actionCount - 1; i >= 0; i--)
+        {
+        messageBox->removeAction(messageBox->actions().at(i));
+        }
+    mPrimaryAction = NULL;
+    mPrimaryAction = new HbAction("Ok");
+    HbAction *secondaryAction = NULL;
+    secondaryAction = new HbAction("Cancel");
+
+    messageBox->addAction(mPrimaryAction);
+    messageBox->addAction(secondaryAction);
+    messageBox->setTimeout(HbPopup::NoTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    messageBox->open(this, SLOT(dialogFinished(HbAction*)));
+    mDialogState = RebootQuery;
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowRebootDialogL() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::InformRequestObserver
+// 
+// -----------------------------------------------------------------------------
+//      
+void IAUpdateEngine::InformRequestObserver(int aError)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::InformRequestObserver() begin");
+
+    //if ( iRequestObserver )
+    if (mRequestIssued)
+        {
+        if (iController->ClosingAllowedByClient())
+            {
+            if (mRequestType != IAUpdateUiDefines::ENoRequest)
+                {
+                //                if ( iRequestType == IAUpdateUiDefines::EUpdateQuery && iUpdateNow )
+                //                    {
+                //                  if ( !iBackgroundTimer )
+                //                        {
+                //                        iBackgroundTimer = CIAUpdateUITimer::NewL( *this, CIAUpdateUITimer::EBackgroundDelay );
+                //                        }
+                //                 if ( !iBackgroundTimer->IsActive() )
+                //                        {
+                //                        iBackgroundTimer->After( 500000 );
+                //                        }
+                //                    }
+                //                 else
+                //                    {
+                iEikEnv->RootWin().SetOrdinalPosition(-1,
+                        ECoeWinPriorityNeverAtFront);
+                //                    }
+                }
+            }
+
+        switch (mRequestType)
+            {
+            case IAUpdateUiDefines::ENoRequest:
+                {
+                mServiceProvider->completeLauncherLaunch(aError);
+                break;
+                }
+            case IAUpdateUiDefines::ECheckUpdates:
+                {
+                mServiceProvider->completeCheckUpdates(
+                        iController->CountOfAvailableUpdates(), aError);
+                break;
+                }
+            case IAUpdateUiDefines::EShowUpdates:
+                {
+                CIAUpdateResult* result(NULL);
+                TRAPD( error, result = CIAUpdateResult::NewL() )
+                if (result)
+                    {
+                    TIAUpdateResultsInfo resultsInfo(
+                            iController->ResultsInfo());
+                    IAUPDATE_TRACE_3("[IAUPDATE] IAUpdateEngine::InformRequestObserver succeed: %d failed: %d  cancelled: %d",
+                            resultsInfo.iCountSuccessfull,
+                            resultsInfo.iCountFailed,
+                            resultsInfo.iCountCancelled );
+                    result->SetSuccessCount(resultsInfo.iCountSuccessfull);
+                    result->SetFailCount(resultsInfo.iCountFailed);
+                    result->SetCancelCount(resultsInfo.iCountCancelled);
+                    mServiceProvider->completeShowUpdates(result, aError);
+                    // Ownership of result is transferred here.
+                    }
+                else
+                    {
+                    mServiceProvider->completeShowUpdates(NULL, error);
+                    }
+                break;
+                }
+            case IAUpdateUiDefines::EUpdateQuery:
+                {
+                mServiceProvider->completeUpdateQuery(mUpdateNow, aError);
+                break;
+                }
+            default:
+                {
+                break;
+                }
+            }
+
+        mRequestIssued = false;
+        }
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::InformRequestObserver() end");
+    }
+
+// ---------------------------------------------------------------------------
+// IAUpdateEngine::SetDefaultConnectionMethodL
+// Sets the connection method for the update network connection.
+// ---------------------------------------------------------------------------
+//
+void IAUpdateEngine::SetDefaultConnectionMethodL(bool aTotalSilent)
+    {
+    if (aTotalSilent)
+        {
+        // from back ground checker, choose the IAP to make the internet access silent
+        IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetDefaultConnectionMethodL() begin");
+
+        uint connectionMethodId(0);
+        int connMethodId(0);
+
+        // Let's first check whether cenrep contains SNAP id other than zero
+        CRepository* cenrep(CRepository::NewLC(KCRUidIAUpdateSettings));
+        User::LeaveIfError(cenrep->Get(KIAUpdateAccessPoint, connMethodId));
+        CleanupStack::PopAndDestroy(cenrep);
+        cenrep = NULL;
+
+        RCmManager cmManager;
+        cmManager.OpenL();
+        CleanupClosePushL(cmManager);
+
+        if (connMethodId == -1)
+            {
+            IAUPDATE_TRACE("[IAUPDATE] user chooses default connection, use IAP logic");
+
+            //check what is the default connection by users     
+
+            TCmDefConnValue DCSetting;
+            cmManager.ReadDefConnL(DCSetting);
+
+            switch (DCSetting.iType)
+                {
+                case ECmDefConnAlwaysAsk:
+                case ECmDefConnAskOnce:
+                    {
+                    //go with the best IAP under internet snap
+                    connectionMethodId = GetBestIAPInAllSNAPsL(cmManager);
+                    break;
+                    }
+                case ECmDefConnDestination:
+                    {
+                    //go with the best IAP under this snap
+                    connectionMethodId = GetBestIAPInThisSNAPL(cmManager,
+                            DCSetting.iId);
+                    break;
+                    }
+                case ECmDefConnConnectionMethod:
+                    {
+                    //go with the best IAP under this snap
+                    connectionMethodId = DCSetting.iId;
+                    break;
+                    }
+                }
+            }
+        else if (connMethodId == 0)
+            {
+            //no choice from user, we go with the best IAP under Internent SNAP
+            connectionMethodId = GetBestIAPInAllSNAPsL(cmManager);
+            }
+        else
+            {
+            IAUPDATE_TRACE("[IAUPDATE] use chooses a snap");
+            // It was some SNAP value
+            connectionMethodId = GetBestIAPInThisSNAPL(cmManager,
+                    connMethodId);
+            }
+
+        CleanupStack::PopAndDestroy(&cmManager);
+
+        if (connectionMethodId != 0)
+            {
+            TIAUpdateConnectionMethod
+                    connectionMethod(
+                            connectionMethodId,
+                            TIAUpdateConnectionMethod::EConnectionMethodTypeAccessPoint);
+
+            iController->SetDefaultConnectionMethodL(connectionMethod);
+            }
+        else
+            {
+            //In the totally silent case, if no usable IAP, we complete the check update with 0 updates.
+            //the bgchecker will try again later after 1 month. 
+            //The LEAVE will be catched up later and complete the request from background checker.
+            User::LeaveIfError(KErrNotFound);
+            }
+        IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetDefaultConnectionMethodL() end");
+        }
+    else
+        {
+        // from grid, use the old logic
+        IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetDefaultConnectionMethodL() begin");
+        uint connectionMethodId(0);
+        int connMethodId(0);
+
+        // Set initial value to always ask
+        int connectionMethodType(
+                TIAUpdateConnectionMethod::EConnectionMethodTypeAlwaysAsk);
+        bool needSaving(false);
+
+        // Let's first check whether cenrep contains SNAP id other than zero
+        CRepository* cenrep(CRepository::NewLC(KCRUidIAUpdateSettings));
+        User::LeaveIfError(cenrep->Get(KIAUpdateAccessPoint, connMethodId));
+        CleanupStack::PopAndDestroy(cenrep);
+        cenrep = NULL;
+
+        if (connMethodId == -1)
+            {
+            IAUPDATE_TRACE("[IAUPDATE] user chooses default connection, use IAP logic");
+
+            connectionMethodId = 0;
+            connectionMethodType
+                    = TIAUpdateConnectionMethod::EConnectionMethodTypeDefault;
+            }
+        else if (connMethodId == 0)
+            {
+            IAUPDATE_TRACE("[IAUPDATE] use chooses nothing, use internal IAP logic");
+            //if nothing is set by user, use our new logic
+            //SetDefaultConnectionMethod2L();
+            //return;
+            // CenRep didn't contain any SNAP id. Let's try Internet SNAP then.
+
+            RCmManager cmManager;
+            cmManager.OpenL();
+            CleanupClosePushL(cmManager);
+            iDestIdArray.Reset();
+            cmManager.AllDestinationsL(iDestIdArray);
+
+            for (int i = 0; i < iDestIdArray.Count(); i++)
+                {
+                RCmDestination dest = cmManager.DestinationL(iDestIdArray[i]);
+                CleanupClosePushL(dest);
+
+                if (dest.MetadataL(CMManager::ESnapMetadataInternet))
+                    {
+                    // Check whether Internet SNAP contains any IAP.
+                    if (dest.ConnectionMethodCount() > 0)
+                        {
+                        connectionMethodId = iDestIdArray[i];
+                        needSaving = true;
+                        IAUPDATE_TRACE_1("[IAUPDATE] connectionMethodId: %d", connectionMethodId );
+                        }
+                    CleanupStack::PopAndDestroy(&dest);
+                    break;
+                    }
+
+                CleanupStack::PopAndDestroy(&dest);
+                }
+            iDestIdArray.Reset();
+            CleanupStack::PopAndDestroy(&cmManager);
+            }
+        else
+            {
+            IAUPDATE_TRACE("[IAUPDATE] use chooses a snap");
+            // It was some SNAP value
+            connectionMethodId = connMethodId;
+            }
+
+        if (connectionMethodId > 0)
+            {
+            // We have now some valid SNAP id, either from CenRep or Internet SNAP
+            connectionMethodType
+                    = TIAUpdateConnectionMethod::EConnectionMethodTypeDestination;
+            // Save to cenrep if needed
+            if (needSaving)
+                {
+                cenrep = CRepository::NewLC(KCRUidIAUpdateSettings);
+                int err = cenrep->StartTransaction(
+                        CRepository::EReadWriteTransaction);
+                User::LeaveIfError(err);
+                cenrep->CleanupCancelTransactionPushL();
+
+                connMethodId = connectionMethodId;
+                err = cenrep->Set(KIAUpdateAccessPoint, connMethodId);
+                User::LeaveIfError(err);
+                TUint32 ignore = KErrNone;
+                User::LeaveIfError(cenrep->CommitTransaction(ignore));
+                CleanupStack::PopAndDestroy(); // CleanupCancelTransactionPushL()
+                CleanupStack::PopAndDestroy(cenrep);
+                }
+            }
+
+        TIAUpdateConnectionMethod
+                connectionMethod(
+                        connectionMethodId,
+                        static_cast<TIAUpdateConnectionMethod::TConnectionMethodType> (connectionMethodType));
+
+        iController->SetDefaultConnectionMethodL(connectionMethod);
+
+        IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetDefaultConnectionMethodL() end");
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// IAUpdateEngine::GetBestIAPInAllSNAPsL
+// Sets the best IAP from all snaps
+// ---------------------------------------------------------------------------
+//
+uint IAUpdateEngine::GetBestIAPInAllSNAPsL(RCmManager& aCmManager)
+    {
+    //go with internet SNAP first.
+    uint IAPID = 0;
+    IAPID = GetBestIAPInInternetSNAPL(aCmManager);
+
+    if (IAPID)
+        {
+        return IAPID;
+        }
+
+    //select IAP from rest of the SNAPs
+    iDestIdArray.Reset();
+    aCmManager.AllDestinationsL(iDestIdArray);
+
+    for (int i = 0; i < iDestIdArray.Count(); i++)
+        {
+        uint SNAPID = iDestIdArray[i];
+        IAPID = GetBestIAPInThisSNAPL(aCmManager, SNAPID);
+        if (IAPID)
+            {
+            break;
+            }
+        }
+    iDestIdArray.Reset();
+    return IAPID;
+    }
+
+// ---------------------------------------------------------------------------
+// IAUpdateEngine::GetBestIAPInInternetSNAPL
+// Sets the best IAP from internet snap
+// ---------------------------------------------------------------------------
+//
+uint IAUpdateEngine::GetBestIAPInInternetSNAPL(RCmManager& aCmManager)
+    {
+    //select IAP from Internet SNAP
+    iDestIdArray.Reset();
+    aCmManager.AllDestinationsL(iDestIdArray);
+    uint InternetSNAPID = 0;
+    for (int i = 0; i < iDestIdArray.Count(); i++)
+        {
+        RCmDestination dest = aCmManager.DestinationL(iDestIdArray[i]);
+        CleanupClosePushL(dest);
+
+        if (dest.MetadataL(CMManager::ESnapMetadataInternet))
+            {
+            InternetSNAPID = iDestIdArray[i];
+            CleanupStack::PopAndDestroy(&dest);
+            break;
+            }
+        CleanupStack::PopAndDestroy(&dest);
+        }
+    iDestIdArray.Reset();
+
+    return GetBestIAPInThisSNAPL(aCmManager, InternetSNAPID);
+    }
+
+// ---------------------------------------------------------------------------
+// IAUpdateEngine::GetBestIAPInThisSNAPL
+// Sets the best IAP from the given snap
+// ---------------------------------------------------------------------------
+//
+uint IAUpdateEngine::GetBestIAPInThisSNAPL(RCmManager& aCmManager,
+        uint aSNAPID)
+    {
+    //get all usable IAPs
+    TConnMonIapInfoBuf iapInfo;
+    TRequestStatus status;
+
+    RConnectionMonitor connMon;
+    connMon.ConnectL();
+    CleanupClosePushL(connMon);
+
+    connMon.GetPckgAttribute(EBearerIdAll, 0, KIapAvailability, iapInfo,
+            status);
+    User::WaitForRequest(status);
+    User::LeaveIfError(status.Int());
+
+    CleanupStack::PopAndDestroy(&connMon);
+
+    RCmDestination dest = aCmManager.DestinationL(aSNAPID);
+    CleanupClosePushL(dest);
+
+    // Check whether the SNAP contains any IAP.
+    for (int i = 0; i < dest.ConnectionMethodCount(); i++)
+        {
+        RCmConnectionMethod cm = dest.ConnectionMethodL(i);
+        CleanupClosePushL(cm);
+
+        uint iapid = cm.GetIntAttributeL(CMManager::ECmIapId);
+
+        for (int i = 0; i < iapInfo().iCount; i++)
+            {
+            if (iapInfo().iIap[i].iIapId == iapid)
+                {
+                CleanupStack::PopAndDestroy(2); //cm & dest;
+                return iapid;
+                }
+            }
+
+        CleanupStack::PopAndDestroy(&cm);
+        }
+
+    CleanupStack::PopAndDestroy(&dest);
+    return 0;
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::ShowUpdateQueryL
+// 
+// -----------------------------------------------------------------------------
+//    
+void IAUpdateEngine::ShowUpdateQueryL()
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdateQueryL() begin");
+    CIAUpdateQueryHistory* updateQueryHistory = CIAUpdateQueryHistory::NewL();
+    // Get the delay information from the controller that has read it from
+    // the config file.
+    updateQueryHistory->SetDelay(
+            iController->ConfigData().QueryHistoryDelayHours());
+    CleanupStack::PushL(updateQueryHistory);
+    bool isDelayed(updateQueryHistory->IsDelayedL(mUpdatequeryUid));
+    CleanupStack::PopAndDestroy(updateQueryHistory);
+    if (!isDelayed)
+        {
+        if (ClientInBackgroundL())
+            {
+            iEikEnv->RootWin().SetOrdinalPosition(-1, ECoeWinPriorityNormal);
+            }
+        else
+            {
+            iEikEnv->RootWin().SetOrdinalPosition(0, ECoeWinPriorityNormal);
+            }
+
+        HbMessageBox *messageBox = new HbMessageBox(
+                HbMessageBox::MessageTypeQuestion);
+        messageBox->setText(QString(
+                "Application update is available from Nokia. Update?"));
+        int actionCount = messageBox->actions().count();
+        for (int i = actionCount - 1; i >= 0; i--)
+            {
+            messageBox->removeAction(messageBox->actions().at(i));
+            }
+        mPrimaryAction = NULL;
+        mPrimaryAction = new HbAction("Now");
+        mSecondaryAction = NULL;
+        mSecondaryAction = new HbAction("Later");
+        messageBox->addAction(mPrimaryAction);
+        messageBox->addAction(mSecondaryAction);
+        messageBox->setTimeout(HbPopup::NoTimeout);
+        messageBox->setAttribute(Qt::WA_DeleteOnClose);
+        messageBox->open(this, SLOT(dialogFinished(HbAction*)));
+        mDialogState = ShowUpdateQuery;
+        }
+    else
+        {
+        InformRequestObserver(KErrNone);
+        }
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdateQueryL() end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::HideApplicationInFSWL
+// 
+// -----------------------------------------------------------------------------
+//  
+void IAUpdateEngine::HideApplicationInFSWL(bool aHide) const
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HideApplicationInFSW() begin");
+    IAUPDATE_TRACE_1("[IAUPDATE] hide: %d", aHide );
+    int id = iEikEnv->RootWin().Identifier();
+
+    CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(
+            iEikEnv->WsSession(), id);
+
+    wgName->SetHidden(aHide);
+    wgName->SetWindowGroupName(iEikEnv->RootWin());
+    CleanupStack::PopAndDestroy(wgName);
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HideApplicationInFSW() end");
+    }
+
+// ---------------------------------------------------------------------------
+// IAUpdateEngine::UpdateQueryCallbackL
+// ---------------------------------------------------------------------------
+//
+TInt IAUpdateEngine::UpdateQueryCallbackL(TAny* aPtr)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::UpdateQueryCallbackL() begin");
+    IAUpdateEngine* engine = static_cast<IAUpdateEngine*> (aPtr);
+    //TRAPD( err, engine->ShowUpdateQueryL() );
+    TRAP_IGNORE( engine->ShowUpdateQueryL() );
+    //if ( err != KErrNone )
+    //    {
+    //    appUI->HandleLeaveErrorL( err );
+    //    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::UpdateQueryCallbackL() end");
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// IAUpdateEngine::AutomaticCheckCallbackL
+// ---------------------------------------------------------------------------
+//    
+
+TInt IAUpdateEngine::AutomaticCheckCallbackL(TAny* aPtr)
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::AutomaticCheckCallbackL() begin");
+    IAUpdateEngine* engine = static_cast<IAUpdateEngine*> (aPtr);
+
+    int err = KErrNone;
+    if (!engine->iAutomaticCheck)
+        {
+        TRAP( err, engine->iAutomaticCheck = CIAUpdateAutomaticCheck::NewL() );
+        }
+    if (err != KErrNone)
+        {
+        engine->HandleLeaveErrorL(err);
+        }
+    else
+        {
+        TRAP( err, engine->iAutomaticCheck->AcceptAutomaticCheckL() );
+        if (err != KErrNone)
+            {
+            engine->HandleLeaveErrorL(err);
+            }
+        }
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::AutomaticCheckCallbackL() end");
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// IAUpdateEngine::DoPossibleApplicationClose()
+// ---------------------------------------------------------------------------
+//  
+bool IAUpdateEngine::DoPossibleApplicationClose()
+    {
+    //exit from result view if there are no update left
+    bool toBeClosed = false;
+    if (iController->Nodes().Count() == 0 && iController->FwNodes().Count()
+            == 0)
+        {
+        toBeClosed = true;
+        }
+    else if (mStartedFromApplication
+            && iController->ResultsInfo().iCountCancelled == 0
+            && iController->ResultsInfo().iCountFailed == 0)
+        {
+        toBeClosed = true;
+        }
+    if (toBeClosed)
+        {
+        qApp->quit();
+        }
+    return toBeClosed;
+    }
+
--- a/iaupdate/IAD/ui/src/iaupdatefirsttimedatefile.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of CIAUpdateFirstTimeDateFile 
-*                class  member functions.
-*
-*/
-
-
-
-
-#include <bautils.h>
-#include <s32file.h>
-#include <sysutil.h>
-
-#include "iaupdatefirsttimedatefile.h"
-
-
-const TInt KDrive( EDriveC );
-const TInt KSizeOfFile( 8 );
-    
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::NewL
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateFirstTimeDateFile* CIAUpdateFirstTimeDateFile::NewL( 
-    const TDesC& aFile )
-    {
-    CIAUpdateFirstTimeDateFile* self =
-        CIAUpdateFirstTimeDateFile::NewLC( aFile );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::NewLC
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateFirstTimeDateFile* CIAUpdateFirstTimeDateFile::NewLC( 
-    const TDesC& aFile )
-    {
-    CIAUpdateFirstTimeDateFile* self =
-        new( ELeave) CIAUpdateFirstTimeDateFile();
-    CleanupStack::PushL( self );
-    self->ConstructL( aFile );
-    return self;    
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::CIAUpdateFirstTimeDateFile
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateFirstTimeDateFile::CIAUpdateFirstTimeDateFile()
-: CBase(),
-  iFirstTime( 0 )
-    {
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeDateFile::ConstructL( const TDesC& aFile )
-    {
-    User::LeaveIfError( iFsSession.Connect() );
-    User::LeaveIfError( 
-        iFsSession.SetSessionToPrivate( KDrive ) );
-    
-    User::LeaveIfError( iFsSession.SessionPath( iPath ) );
-    BaflUtils::EnsurePathExistsL( iFsSession, iPath );
-    iPath.Append( aFile );
-    
-    // Read data from the file if the file exists.
-    // Otherwise, let default values remain.
-    ReadDataL(); 
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::~CIAUpdateFirstTimeDateFile
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateFirstTimeDateFile::~CIAUpdateFirstTimeDateFile()
-    {
-    iFsSession.Close();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::ReadDataL
-//
-// -----------------------------------------------------------------------------
-//
-TBool CIAUpdateFirstTimeDateFile::ReadDataL()
-	{
-	RFile file;
-    TInt err = file.Open( iFsSession, iPath, EFileRead|EFileShareAny );
-    if ( err == KErrNotFound )
-    	{
-    	// File did not exist. 
-    	// So, nothing to do here anymore.
-    	return EFalse;
-    	}
-    User::LeaveIfError( err );
-    	
-    CleanupClosePushL( file );
-    
-    RFileReadStream stream( file, 0 );
-    CleanupClosePushL( stream );
-
-    InternalizeL( stream );
-
-    CleanupStack::PopAndDestroy( &stream );
-    CleanupStack::PopAndDestroy( &file );
-
-    return ETrue;
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::WriteDataL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeDateFile::WriteDataL()
-	{
-	TDriveUnit driveUnit( KDrive );
-	if ( SysUtil::DiskSpaceBelowCriticalLevelL( 
-	        &iFsSession, KSizeOfFile, driveUnit ) )
-	    {
-		User::Leave( KErrDiskFull );
-	    }
-	
-	RFile file;
-    User::LeaveIfError( 
-        file.Replace( iFsSession, iPath, EFileWrite|EFileShareAny ) );
-    CleanupClosePushL( file );
-    
-    RFileWriteStream stream( file, 0 );
-    CleanupClosePushL( stream );
-
-    ExternalizeL( stream );
-    
-    stream.CommitL();
-    
-    CleanupStack::PopAndDestroy( &stream );
-    CleanupStack::PopAndDestroy( &file );
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::FirstTime
-//
-// -----------------------------------------------------------------------------
-//
-const TTime& CIAUpdateFirstTimeDateFile::FirstTime() const
-    {
-    return iFirstTime;
-    }
-    
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::SetCurrentFirstTime
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeDateFile::SetCurrentFirstTime()
-    {
-    TTime universalTime;
-    universalTime.UniversalTime();
-    iFirstTime = universalTime;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::InternalizeL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeDateFile::InternalizeL( RReadStream& aStream )
-	{
-	// If you make changes here, 
-	// remember to update ExternalizeL accordingly!!!
-
-	TInt64 firstTime( 0 );
-	aStream >> firstTime;
-    iFirstTime = firstTime;
- 	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::ExternalizeL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeDateFile::ExternalizeL( RWriteStream& aStream )
-	{
-	// If you make changes here, 
-	// remember to update InternalizeL accordingly!!!
-
-	TInt64 firstTime( FirstTime().Int64() );
-	aStream << firstTime;
-	}
--- a/iaupdate/IAD/ui/src/iaupdatefirsttimeinfo.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdatefirsttimeinfo.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -20,7 +20,6 @@
 
 //INCLUDES
 #include "iaupdatefirsttimeinfo.h"
-#include "iaupdatefirsttimedatefile.h"
 
 #include <bautils.h>  // bafl.lib 
 #include <s32file.h>  // estor.lib
@@ -108,19 +107,8 @@
     iAgreementAccepted = ETrue;
     WriteDataL();
     }
-    
-// ---------------------------------------------------------------------------
-// CIAUpdateFirstTimeInfo::SetAgreementAskedL
-// Set Nokia agreement as asked (prompted) to an user
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeInfo::SetAgreementAskedL()
-    {
-    ReadDataL();
-    iAgreementAsked = ETrue;
-    WriteDataL();
-    }
-        
+  
+       
 // ---------------------------------------------------------------------------
 // CIAUpdateFirstTimeInfo::SetAutomaticUpdatesAskedL
 // Set automatic update checks as prompted to an use
@@ -132,26 +120,6 @@
 	iAutomaticUpdateChecksAsked = ETrue;
     WriteDataL();
     }
-    
-// ---------------------------------------------------------------------------
-// CIAUpdateFirstTimeInfo::SetFirstTimeIfNotSetL
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeInfo::SetFirstTimeIfNotSetL()
-    {
-	if ( !AutomaticUpdateChecksAskedL() )
-	    {
-		CIAUpdateFirstTimeDateFile* firstTimeDateFile = 
-		      CIAUpdateFirstTimeDateFile::NewLC( KIAUpdateFirstTimeDateFile );
-		if ( firstTimeDateFile->FirstTime().Int64() == 0 )
-		    {
-			firstTimeDateFile->SetCurrentFirstTime();
-			firstTimeDateFile->WriteDataL();
-		    }
-		CleanupStack::PopAndDestroy( firstTimeDateFile );   
-	    }
-    }
 
 // ---------------------------------------------------------------------------
 // CIAUpdateFirstTimeInfo::AgreementAcceptedL
@@ -164,18 +132,6 @@
     return iAgreementAccepted;
     }
 
-
-// ---------------------------------------------------------------------------
-// CIAUpdateFirstTimeInfo::AgreementAskedL
-// Is Nokia agreement of Application Update already asked 
-// ---------------------------------------------------------------------------
-//
-TBool CIAUpdateFirstTimeInfo::AgreementAskedL()
-    {
-	ReadDataL();
-	return iAgreementAsked;
-    }
-
 // ---------------------------------------------------------------------------
 // CIAUpdateFirstTimeInfo::AutomaticUpdateChecksAskedL
 // Is activation for automatic update cheks from network already asked 
@@ -187,37 +143,6 @@
     return iAutomaticUpdateChecksAsked;
     }
 
-// ---------------------------------------------------------------------------
-// CIAUpdateFirstTimeInfo::FirstTimeDelayL
-// 
-// ---------------------------------------------------------------------------
-//    
-TBool CIAUpdateFirstTimeInfo::FirstTimeDelayL()
-    {
-    TBool firstTimeDelay = EFalse;
-    if ( !AutomaticUpdateChecksAskedL() )
-	    {
-		CIAUpdateFirstTimeDateFile* firstTimeDateFile = 
-		      CIAUpdateFirstTimeDateFile::NewL( KIAUpdateFirstTimeDateFile );
-    
-        TTime firstTime( firstTimeDateFile->FirstTime() );
-  
-        delete firstTimeDateFile;
-  
-        TTime expireTime( firstTime );
-
-        expireTime += KFirstTimeDelayInDays;
-    
-        TTime universalTime;
-        universalTime.UniversalTime();
-
-        if ( universalTime < expireTime && universalTime >= firstTime )
-            {
-        	firstTimeDelay = ETrue;
-            }
-	    }
-    return firstTimeDelay;	
-    }
 
 // -----------------------------------------------------------------------------
 // CIAUpdateFirstTimeInfo::ReadDataL
@@ -231,7 +156,6 @@
     if ( err == KErrNotFound )
     	{
     	iAgreementAccepted = EFalse;
-	    iAgreementAsked = EFalse;
 	    iAutomaticUpdateChecksAsked = EFalse; 
     	}
     else
@@ -282,7 +206,6 @@
 void CIAUpdateFirstTimeInfo::InternalizeL( RReadStream& aStream )
 	{
 	iAgreementAccepted = aStream.ReadInt32L();
-	iAgreementAsked = aStream.ReadInt32L();
 	iAutomaticUpdateChecksAsked = aStream.ReadInt32L();
 	}
 
@@ -295,7 +218,6 @@
 void CIAUpdateFirstTimeInfo::ExternalizeL( RWriteStream& aStream )
 	{
 	aStream.WriteInt32L( iAgreementAccepted );
-	aStream.WriteInt32L( iAgreementAsked );	
 	aStream.WriteInt32L( iAutomaticUpdateChecksAsked );
 	}
     
--- a/iaupdate/IAD/ui/src/iaupdatefwdetailsdialog.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,264 +0,0 @@
-/*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:    
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "iaupdatefwdetailsdialog.h"
-#include "iaupdatedialogutil.h"
-#include "iaupdatebasenode.h"
-#include "iaupdatefwnode.h"
-#include "iaupdatedebug.h"
-#include <iaupdate.rsg>
-
-#include <aknmessagequerydialog.h>      // CAknMessageQueryDialog
-
-#include <StringLoader.h>
-
-// CONSTANTS
-const TInt KKiloByte = 1024;
-const TInt KMegaByte = 1024 * 1024;
-const TInt KMaxShownInKiloBytes = 10 * KMegaByte;
-
-_LIT( KSpace, " ");
-
-
-/*******************************************************************************
- * class CIAUpdateDetailsDialog
- *******************************************************************************/
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateDetailsDialog::ShowDialogL
-// 
-// -----------------------------------------------------------------------------
-TBool CIAUpdateFwDetailsDialog::ShowDialogL( MIAUpdateFwNode* aFwNode )
-	{
-	CIAUpdateFwDetailsDialog* dialog = CIAUpdateFwDetailsDialog::NewL( aFwNode );
-	CleanupStack::PushL( dialog );
-
-	dialog->ShowDialogL();
-
-	CleanupStack::PopAndDestroy( dialog );
-    
-    return ETrue;
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFwDetailsDialog::NewL
-//
-// -----------------------------------------------------------------------------
-CIAUpdateFwDetailsDialog* CIAUpdateFwDetailsDialog::NewL( MIAUpdateFwNode* aFwNode )
-    {
-    CIAUpdateFwDetailsDialog* self = new ( ELeave ) CIAUpdateFwDetailsDialog( aFwNode );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFwDetailsDialog::CIAUpdateFwDetailsDialog
-// 
-// -----------------------------------------------------------------------------
-//
-CIAUpdateFwDetailsDialog::CIAUpdateFwDetailsDialog( MIAUpdateFwNode* aFwNode )
-	{
-	iFwNode = aFwNode;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFwDetailsDialog::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFwDetailsDialog::ConstructL()
-    {
-    TInt size = BufferSize();
- 	iBuf = HBufC::NewL( size );
-    } 
-
-
-
-// ----------------------------------------------------------------------------
-// Destructor
-//
-// ----------------------------------------------------------------------------
-//
-CIAUpdateFwDetailsDialog::~CIAUpdateFwDetailsDialog()
-    {
-    delete iBuf;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFwDetailsDialog::BufferSize
-//
-// -----------------------------------------------------------------------------
-//
-TInt CIAUpdateFwDetailsDialog::BufferSize()
-    {
-    const TInt KExtraSize = 512;
-    
-    TPtrC ptr1 = iFwNode->Base().Name();
-    TPtrC ptr2 = iFwNode->Base().Description();
-    
-    TInt len = ptr1.Length() + ptr2.Length() + KExtraSize;
-    
-    return len;
-    } 
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFwDetailsDialog::ConstructTextL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFwDetailsDialog::ConstructTextL()
-    {
-    _LIT(KNewLine, "\n");
-
-    TPtr ptr = iBuf->Des();
- 
-    TInt contentSize =   iFwNode->Base().ContentSizeL();
-     
-    HBufC* hBuf = StringLoader::LoadLC( R_IAUPDATE_DETAILS_DIALOG_APP_NAME );
-    ptr.Append( KOpeningBoldTag );
-    ptr.Append( *hBuf );
-    ptr.Append( KClosingBoldTag );
-    CleanupStack::PopAndDestroy( hBuf );
-    
-    HBufC* firmwareHeader = StringLoader::LoadLC(R_IAUPDATE_MAIN_DEVICE_FW);
-    HBufC* firmwarename = HBufC::NewLC( iFwNode->Base().Name().Length() +
-                                        KSpace.iTypeLength + 
-                                        firmwareHeader->Length() );
-    firmwarename->Des() = iFwNode->Base().Name();
-    firmwarename->Des() += KSpace();
-    firmwarename->Des() += *firmwareHeader;
-     
-    ptr.Append( KNewLine );
-    ptr.Append( *firmwarename );
-    CleanupStack::PopAndDestroy( firmwarename );
-    CleanupStack::PopAndDestroy( firmwareHeader );
-    ptr.Append( KNewLine );
-    ptr.Append( KNewLine );
-  
-    
-    hBuf = StringLoader::LoadLC( R_IAUPDATE_DETAILS_DIALOG_DESCRIPTION );
-    ptr.Append( KOpeningBoldTag );
-    ptr.Append( *hBuf );
-    ptr.Append( KClosingBoldTag );
-    CleanupStack::PopAndDestroy( hBuf );
-    
-    
-    HBufC* description = StringLoader::LoadLC( R_IAUPDATE_FW_DESCRIPTION );
-    ptr.Append( KNewLine );
-    ptr.Append( *description );
-    ptr.Append( KNewLine );
-    ptr.Append( KNewLine );
-    CleanupStack::PopAndDestroy( description );
-    
-    if ( iFwNode->FwVersion1().Length() > 0 )
-        { 
-        hBuf = StringLoader::LoadLC( R_IAUPDATE_DETAILS_DIALOG_VERSION );        
-        ptr.Append( KOpeningBoldTag );
-        ptr.Append( *hBuf );
-        ptr.Append( KClosingBoldTag );
-        CleanupStack::PopAndDestroy( hBuf );
-
-        ptr.Append( KNewLine );
-        ptr.Append( iFwNode->FwVersion1() );
-        ptr.Append( KNewLine );
-        ptr.Append( KNewLine );
-        }
-    
-    
-    if( contentSize > 0 && (iFwNode->FwType() == MIAUpdateFwNode::EFotaDp2) )
-        {
-        hBuf = StringLoader::LoadLC( R_IAUPDATE_DETAILS_DIALOG_FILE_SIZE );
-        ptr.Append( KOpeningBoldTag );
-        ptr.Append( *hBuf );
-        ptr.Append( KClosingBoldTag );
-        CleanupStack::PopAndDestroy( hBuf );
-        
-        ptr.Append( KNewLine );
-        
-        hBuf = FileSizeTextLC( contentSize );
-
-        ptr.Append( *hBuf );
-        CleanupStack::PopAndDestroy( hBuf );
-        }
-   
-    } 
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFwDetailsDialog::ShowDialogL
-// 
-// -----------------------------------------------------------------------------
-TBool CIAUpdateFwDetailsDialog::ShowDialogL()
-	{
-	ConstructTextL();
-	HBufC* hBuf = StringLoader::LoadLC( R_IAUPDATE_DETAILS_DIALOG_TITLE );
-	IAUpdateDialogUtil::ShowMessageQueryL( *hBuf, *iBuf );
-	CleanupStack::PopAndDestroy( hBuf );
-    return ETrue;
-	}
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFwDetailsDialog::FileSizeTextLC
-// 
-// -----------------------------------------------------------------------------
-//
-HBufC* CIAUpdateFwDetailsDialog::FileSizeTextLC( TInt aFileSize )
-	{
-    TInt resourceId = 0;
-	TInt size = 0;
-	
-	if ( aFileSize >= KMaxShownInKiloBytes )
-	    {
-	    resourceId = R_IAUPDATE_DETAILS_DIALOG_SIZE_MEGABYTE;
-	    size = aFileSize / KMegaByte;
-   	    if ( aFileSize % KMegaByte != 0 )
-	        {
-	        size++;
-	        }
-	    }
-	else
-	    {
-	    resourceId = R_IAUPDATE_DETAILS_DIALOG_SIZE_KILOBYTE;
-	    size = aFileSize / KKiloByte;
-   	    if ( aFileSize % KKiloByte != 0 )
-	        {
-	        size++;
-	        }	
-	    }
-	    
-	HBufC* sizeAsString = StringLoader::LoadLC( resourceId, size );
-	TPtr ptr = sizeAsString->Des();
-    AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
-    return sizeAsString;
-	}
-
-
-   
-//  End of File  
--- a/iaupdate/IAD/ui/src/iaupdatehistorycontainer.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,505 +0,0 @@
-/*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of 
-*                CIAUpdateHistoryContainer class member functions.
-*
-*/
-
-
-
-
-#include <coemain.h>
-#include <aknlists.h> // For the listbox
-#include <barsread.h> // TResourceReader
-#include <avkon.mbg>
-#include <AknIconArray.h> 
-#include <gulicon.h>
-#include <AknsUtils.h>
-#include <StringLoader.h> 
-#include <e32std.h>
-#include <data_caging_path_literals.hrh>
-#include <iaupdate.rsg>
-#include <iaupdate.mbg>
-
-#include "iaupdatehistorycontainer.h"
-#include "iaupdatehistory.h"
-#include "iaupdatehistoryitem.h"
-#include "iaupdateutils.h"
-
-
-// MACROS
-_LIT(KIAUpdateIconFileName, "IAUpdate.mif");
-// Format for TTime
-// See: C++ API reference » Date and Time Handling » Using TTime 
-_LIT( KDateFormat, "%*D%*M%Y%/0%4%/1%5" );
-_LIT( KTimeFormat, "%-B%:0%J%:1%T%+B" );
-_LIT( KIconIndexFormat, "%d" );
-_LIT( KTabulator, "\t" );
-
-//CONSTANTS
-// Item list granularity
-const TInt KListGranularity( 8 );
-// There will be two images. One for error and for success.
-const TInt KListIconGranularity( 2 );
-const TInt KTimeLength( 48 );
-// Icon index length is always one because an index is either zero or one
-const TInt iconIndexLength( 1 );
-
-// -----------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateHistoryContainer* CIAUpdateHistoryContainer::NewL( const TRect& aRect )
-    {
-    CIAUpdateHistoryContainer* self = 
-        CIAUpdateHistoryContainer::NewLC( aRect );
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::NewLC
-// 
-// -----------------------------------------------------------------------------
-//
-CIAUpdateHistoryContainer* CIAUpdateHistoryContainer::NewLC( const TRect& aRect )
-    {
-    CIAUpdateHistoryContainer* self = 
-        new (ELeave) CIAUpdateHistoryContainer();
-    CleanupStack::PushL( self );
-    self->ConstructL( aRect );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::CIAUpdateHistoryContainer
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateHistoryContainer::CIAUpdateHistoryContainer() 
-: CCoeControl()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::~CIAUpdateHistoryContainer
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CIAUpdateHistoryContainer::~CIAUpdateHistoryContainer()
-    {
-    delete iListBox;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateHistoryContainer::ConstructL( const TRect& aRect )
-    {
-    // Create a window for this application view
-    CreateWindowL();
-
-    // Create list box
-    iListBox = new( ELeave ) CAknDoubleGraphicStyleListBox();
-    iListBox->SetContainerWindowL( *this );
-    
-    TResourceReader reader;
-    // Inserts reader into the cleanupstack.
-    iEikonEnv->CreateResourceReaderLC( reader, R_IAUPDATE_HISTORY_LIST );
-    iListBox->ConstructFromResourceL( reader );
-    CleanupStack::PopAndDestroy();
-
-    iListBox->EnableStretching( EFalse );
-    iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
-
-    // Setup scroll bars
-    iListBox->CreateScrollBarFrameL( ETrue );
-    iListBox->
-        ScrollBarFrame()->
-            SetScrollBarVisibilityL( 
-                CEikScrollBarFrame::EOff, 
-                CEikScrollBarFrame::EOff );    
-    // Create item text array
-    iItemTextArray = new( ELeave ) CDesCArrayFlat( KListGranularity );    
-    iListBox->Model()->SetItemTextArray( iItemTextArray );
-    // Ownership of the array is transferred.
-    iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
-        
-    HBufC* text = StringLoader::LoadLC( R_IAUPDATE_NO_UPDATES_DONE );    
-    iListBox->View()->SetListEmptyTextL( *text );
-    CleanupStack::PopAndDestroy( text );
-
-    // Create icon array
-    
-    CFbsBitmap* bitmap( NULL );
-    CFbsBitmap* mask( NULL );
-
-    CArrayPtr<CGulIcon>* iconArray = 
-        new( ELeave ) CAknIconArray( KListIconGranularity );    
-    CleanupStack::PushL( iconArray );
-    
-    HBufC* iconFilePath = HBufC::NewLC( KDC_APP_BITMAP_DIR().Length() + 
-                                        KIAUpdateIconFileName().Length() );
-    TPtr ptr = iconFilePath->Des();
-    ptr.Append( KDC_APP_BITMAP_DIR );
-    ptr.Append( KIAUpdateIconFileName );
-    
-    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-    
-        
-    // This method puts both aBitmap and aMask in the cleanup stack.
-    AknsUtils::CreateIconLC(
-        skin,
-        KAknsIIDQgnPropCaleAccepted,
-        bitmap, 
-        mask, 
-        *iconFilePath, 
-        EMbmIaupdateQgn_prop_cale_accepted, 
-        EMbmIaupdateQgn_prop_cale_accepted_mask );
-    CGulIcon* icon = CGulIcon::NewLC();
-    icon->SetBitmap( bitmap );
-    icon->SetMask( mask );
-    icon->SetBitmapsOwnedExternally( EFalse );
-    iconArray->AppendL( icon );
-    CleanupStack::Pop( icon );
-    CleanupStack::Pop( mask );
-    CleanupStack::Pop( bitmap );
-
-    // This method puts both aBitmap and aMask in the cleanup stack.
-    AknsUtils::CreateIconLC(
-        skin,
-        KAknsIIDQgnPropSwupdFailed,
-        bitmap, 
-        mask, 
-        *iconFilePath, 
-        EMbmIaupdateQgn_prop_swupd_failed, 
-        EMbmIaupdateQgn_prop_swupd_failed_mask);
-    icon = CGulIcon::NewLC();
-    icon->SetBitmap( bitmap );
-    icon->SetMask( mask );
-    icon->SetBitmapsOwnedExternally( EFalse );
-    iconArray->AppendL( icon );
-    CleanupStack::Pop( icon );
-    CleanupStack::Pop( mask );
-    CleanupStack::Pop( bitmap );
-    
-    CleanupStack::PopAndDestroy( iconFilePath );    
-    CleanupStack::Pop( iconArray );
-    iListBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray );
-
-    // Set the windows size
-    SetRect( aRect );
-
-    // Activate the window, which makes it ready to be drawn
-    ActivateL();
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::RefreshL
-// 
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateHistoryContainer::RefreshL( MIAUpdateHistory& aHistory )
-    {
-    iItemTextArray->Reset();
-    
-    MIAUpdateHistoryItem* item( NULL ); 
-    const RPointerArray< MIAUpdateHistoryItem >& items =
-        aHistory.Items();
-    TInt iconIndex( 0 );
-    for( TInt i = 0; i < items.Count(); ++i ) 
-        {
-        item = items[i];                
-        iconIndex = 0;
-        if ( item->LastOperationErrorCode() != KErrNone
-             || item->StateL() != MIAUpdateHistoryItem::EInstalled )
-            {
-            // If there was an error in the last operation
-            // or if the node has not been installed, 
-            // then use the second icon that is for
-            // error situations.
-            iconIndex = 1;
-            }
-        HBufC* nodeStateDescription = NodeStateDescriptionLC( *item );
-        TPtr ptr = nodeStateDescription->Des();
-        AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
- 
-        HBufC* name = item->Name().AllocLC();
-        TBuf<iconIndexLength> iconIndexBuf;
-        iconIndexBuf.Format( KIconIndexFormat, iconIndex );
-
-        HBufC* buffer = HBufC::NewLC( iconIndexBuf.Length() +
-                                      KTabulator.iTypeLength + 
-                                      name->Length() + 
-                                      KTabulator.iTypeLength +
-                                      nodeStateDescription->Length() );  
-
-        buffer->Des() = iconIndexBuf;
-        buffer->Des() += KTabulator();
-        buffer->Des() += *name;
-        buffer->Des() += KTabulator();
-        buffer->Des() += *nodeStateDescription;        
-         
-        iItemTextArray->AppendL( *buffer );
-                 
-        CleanupStack::PopAndDestroy( buffer );
-        CleanupStack::PopAndDestroy( name );
-        CleanupStack::PopAndDestroy( nodeStateDescription );
-        }    
-    
-    if ( items.Count() > 0 )
-        {
-    	iListBox->
-        ScrollBarFrame()->
-            SetScrollBarVisibilityL( 
-                CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto ); 
-        }
-    else
-        {
-        iListBox->
-        ScrollBarFrame()->
-            SetScrollBarVisibilityL( 
-                CEikScrollBarFrame::EOff,CEikScrollBarFrame::EOff );	
-        }     
-    iListBox->HandleItemAdditionL();        
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::OfferKeyEventL
-// 
-// -----------------------------------------------------------------------------
-//
-TKeyResponse CIAUpdateHistoryContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, 
-                                                        TEventCode aType )
-    {
-    TKeyResponse response = EKeyWasNotConsumed;    
-
-    if( aType == EEventKey )
-        {
-        switch( aKeyEvent.iCode )
-            {
-            // Up and down arrow actions are delegated to the listbox
-            case EKeyUpArrow:
-            case EKeyDownArrow:
-                response = iListBox->OfferKeyEventL( aKeyEvent, aType );        
-                break;
-                
-            case EKeyOK:
-                // Nothing to do here
-                break;
-                
-            default:
-                // Nothing to do here
-                break;
-            }
-        }
-
-    return response;        
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::SizeChanged
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateHistoryContainer::SizeChanged()
-    {
-    iListBox->SetRect( Rect() );
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::CountComponentControls
-// 
-// -----------------------------------------------------------------------------
-//
-TInt CIAUpdateHistoryContainer::CountComponentControls() const
-    {
-    return 1;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::ComponentControl
-// 
-// -----------------------------------------------------------------------------
-//
-CCoeControl* CIAUpdateHistoryContainer::ComponentControl( TInt aIndex ) const
-    {
-    CCoeControl* control( NULL );
-
-    switch( aIndex )
-        {
-        case 0:
-            control = iListBox;
-            break;
-            
-        default:
-            break;
-        }
-
-    return control;
-    }
-    
-    
-// ---------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::HandleResourceChange
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateHistoryContainer::HandleResourceChange( TInt aType )
-    {
-	CCoeControl::HandleResourceChange( aType );
-
-    if ( aType == KEikDynamicLayoutVariantSwitch ) //Handle change in layout orientation
-        {
-        TRect mainPaneRect;
-        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
-        SetRect( mainPaneRect );
-		DrawNow();
-		}
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateHistoryContainer::NodeStateDescriptionLC
-// 
-// -----------------------------------------------------------------------------
-//
-HBufC* CIAUpdateHistoryContainer::NodeStateDescriptionLC( const MIAUpdateHistoryItem& aItem )
-    {
-    HBufC* stateDescription( NULL );
-
-    MIAUpdateHistoryItem::TIAHistoryItemState state( aItem.StateL() );
-    TInt errorCode( aItem.LastOperationErrorCode() );
-
-    HBufC* timeDes = HBufC::NewLC( KTimeLength );
-    TPtr tmpDes = timeDes->Des();
-    
-    // Get the current local time
-    TTime currentTime( 0 );
-    currentTime.HomeTime();
-
-    TTime lastOperationTime = aItem.LastOperationTime();
-    // Get the local time from the unviversal time.
-    TLocale locale;
-    lastOperationTime += locale.UniversalTimeOffset();
-    
-    if ( lastOperationTime - locale.UniversalTimeOffset() == 0 )
-        {
-        // Because the origianal universal operation time was zero, the given time
-        // is not correct. Set the time string empty. So, we will not give wrong information.
-        tmpDes.Copy( KNullDesC() );
-        }
-    else if ( currentTime.DayNoInYear() != lastOperationTime.DayNoInYear()
-         || currentTime.DaysFrom( lastOperationTime ).Int() > 0 )
-        {
-        // Day has changed.
-        // Just to be sure, other checking is done because year may have also changed.
-        lastOperationTime.FormatL( tmpDes, KDateFormat() );       
-        }
-    else
-        {
-        // Same day
-        lastOperationTime.FormatL( tmpDes, KTimeFormat() );       
-        }      
-    
-    if ( errorCode == KErrNoMemory )
-        {
-        // Last operation could not be completed because we were out of memory.
-        // Show this error text.
-        stateDescription = StringLoader::LoadLC( R_IAUPDATE_TEXT_UPDATE_NO_MEMORY,
-                                                 *timeDes ); 
-        }
-    else 
-        {
-        switch( state )
-            {
-            case MIAUpdateHistoryItem::EInstalled:
-                if ( errorCode == KErrNone )
-                    {
-                    // Because item is installed successfully, everything has gone ok.
-                    stateDescription = StringLoader::LoadLC( R_IAUPDATE_TEXT_UPDATE_SUCCESSFULL,
-                                                             *timeDes );                    
-                    }
-                else if ( errorCode == KErrCancel )
-                    {
-                    // For some reason, the state says that an item has been installed,
-                    // but the error code is cancel. In this case, trust the error code.
-                    stateDescription = StringLoader::LoadLC( R_IAUPDATE_TEXT_INSTALL_CANCELLED,
-                                                             *timeDes );
-                    }
-                else
-                    {
-                    // If everything goes ok, then the item should be installed.
-                    // So, something has gone wrong because we are here. So,
-                    // give the install failed message
-                    stateDescription = StringLoader::LoadLC( R_IAUPDATE_TEXT_INSTALL_FAILED,
-                                                             *timeDes );
-                    }                
-                break;
-
-            case MIAUpdateHistoryItem::EDownloaded:
-                if ( errorCode == KErrCancel )
-                    {
-                    // Because item has been downloaded but the error code is cancel
-                    // this means that the install has been cancelled
-                    stateDescription = StringLoader::LoadLC( R_IAUPDATE_TEXT_INSTALL_CANCELLED,
-                                                             *timeDes );
-                    }
-                else
-                    {
-                    // If everything goes ok, then the item should be installed.
-                    // So, something has gone wrong because we are here. So,
-                    // give the install failed message
-                    stateDescription = StringLoader::LoadLC( R_IAUPDATE_TEXT_INSTALL_FAILED,
-                                                             *timeDes );
-                    }
-                break;
-
-            case MIAUpdateHistoryItem::EPurchased:
-                if ( errorCode == KErrCancel )
-                    {
-                    // Because item has been purchased but the error code is cancel
-                    // this means that the download has been cancelled
-                    stateDescription = StringLoader::LoadLC( R_IAUPDATE_TEXT_DOWNLOAD_CANCELLED,
-                                                             *timeDes );
-                    }
-                else
-                    {
-                    // If everything goes ok, then the item should be installed.
-                    // So, something has gone wrong because we are here. So,
-                    // give the download failed message
-                    stateDescription = StringLoader::LoadLC( R_IAUPDATE_TEXT_DOWNLOAD_FAILED,
-                                                             *timeDes );
-                    }
-                break;
-                                
-            default:
-                // We should never come here.
-                stateDescription = KNullDesC().AllocLC();
-                break;
-            }        
-        }
-   
-    CleanupStack::Pop( stateDescription );
-    CleanupStack::PopAndDestroy( timeDes );
-    CleanupStack::PushL( stateDescription );
-         
-    return stateDescription;
-    }
-
-
--- a/iaupdate/IAD/ui/src/iaupdatehistoryview.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of CIAUpdateHistoryView 
-*                class  member functions.
-*
-*/
-
-
-
-#include <aknViewAppUi.h> 
-#include <eikmenup.h> 
-#include <eikspane.h> 
-#include <akntitle.h> 
-#include <akncontext.h>
-#include <StringLoader.h> 
-#include <iaupdate.rsg>
-
-#include "iaupdatehistoryview.h"
-#include "iaupdatehistorycontainer.h"
-#include "iaupdatehistory.h"
-#include "iaupdateappui.h"
-#include "iaupdate.hrh"
-
-
-// Standard construction sequence
-CIAUpdateHistoryView* CIAUpdateHistoryView::NewL( MIAUpdateHistory& aHistory )
-    {
-    CIAUpdateHistoryView* self = 
-        CIAUpdateHistoryView::NewLC( aHistory );
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-CIAUpdateHistoryView* CIAUpdateHistoryView::NewLC( MIAUpdateHistory& aHistory )
-    {
-    CIAUpdateHistoryView* self = 
-        new( ELeave ) CIAUpdateHistoryView( aHistory );
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    return self;
-    }
-
-CIAUpdateHistoryView::CIAUpdateHistoryView( MIAUpdateHistory& aHistory ) 
-: CAknView(),
-  iHistory( aHistory )
-    {
-	// no implementation required
-    }
-
-CIAUpdateHistoryView::~CIAUpdateHistoryView()
-    {
-    delete iContainer;
-    }
-
-void CIAUpdateHistoryView::ConstructL()
-    {
-    // Initializes the view with the given resources
-    BaseConstructL( R_IAUPDATE_HISTORY_VIEW );
-    }
-
-    
-void  CIAUpdateHistoryView::RefreshL()
-    {
-    if( !iContainer )
-        {    
-        // Create the container if it does not already exist.
-        // Also, add it to the app ui control stack 
-        iContainer = CIAUpdateHistoryContainer::NewL( ClientRect() );
-        AppUi()->AddToStackL( iContainer );
-        }
-
-    UpdateStatusPaneL();
-
-    // Container does the actual refreshing by using the current history
-    // information.
-    // Also, refresh the history first, because it may have changed since
-    // last time.
-    History().RefreshL();
-    iContainer->RefreshL( History() );
-    }
-
-    
-TUid CIAUpdateHistoryView::Id() const
-    {
-    return TUid::Uid( EIAUpdateHistoryViewId );
-    }
-
-
-void CIAUpdateHistoryView::HandleCommandL( TInt aCommand )
-    {
-    switch( aCommand ) 
-        {
-        // All the exit type of softkey commands will be interpret as
-        // the exit from the history view.
-        case EAknSoftkeyBack:
-        case EAknSoftkeyExit:
-        case EAknSoftkeyClose:
-            aCommand = EIAUpdateCmdHistoryViewExit; 
-            break;
-            
-        default:
-            break;
-        }
-
-    // Let the app ui handle all the commands
-    AppUi()->HandleCommandL( aCommand );
-    }
-    
-    
-void  CIAUpdateHistoryView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, 
-                                         TUid /*aCustomMessageId*/, 
-                                         const TDesC8& /*aCustomMessage*/ )
-    {
-    // Refresh everything.
-    RefreshL();
-    }
-
-void CIAUpdateHistoryView::DoDeactivate()
-    {
-    if ( iContainer )
-        {
-        // Remove container from the control stack and delete
-        // the container.
-        AppUi()->RemoveFromStack( iContainer );
-        delete iContainer;
-        iContainer = NULL;
-        }
-    if ( static_cast<CIAUpdateAppUi*>(AppUi())->ShowStatusDialogAgain() )
-        {
-    	TRAP_IGNORE( static_cast<CIAUpdateAppUi*>(AppUi())->ShowStatusDialogDeferredL() );
-        }
-    }
-
-
-MIAUpdateHistory& CIAUpdateHistoryView::History() const
-    {
-    return iHistory;
-    }
-
-
-void CIAUpdateHistoryView::UpdateStatusPaneL()
-    {
-    // Also update title pane text
-    // Gets a pointer to the status pane. 
-    // Notice, that the ownership is not transferred here.
-    CEikStatusPane* statusPane = 
-                 static_cast< CAknAppUi* >( AppUi() )->StatusPane();
-          
-    // Check if title pane is in current layout.
-    TBool isTitlePaneInLayout( 
-        statusPane->
-            PaneCapabilities( 
-                TUid::Uid( EEikStatusPaneUidTitle ) ).
-                    IsInCurrentLayout() );
-
-    // Change title text if title pane is in the curent layout.
-    if ( isTitlePaneInLayout )
-        {
-        // Fetch pointer to the title pane control. Notice, that the ownership is not
-        // transferred here.
-        CAknTitlePane* titlePane = 
-            static_cast< CAknTitlePane* >( statusPane->ControlL(
-                                           TUid::Uid( EEikStatusPaneUidTitle ) ) );
-        HBufC* text = StringLoader::LoadLC( R_IAUPDATE_TEXT_TITLE_PANE_HISTORY );
-        titlePane->SetTextL( *text );
-        CleanupStack::PopAndDestroy( text );        
-        }         
-    }
-    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/src/iaupdatemain.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This module contains the implementation of main function
+*
+*/
+
+#include "iaupdateapplication.h"
+#include "iaupdatedebug.h"
+
+int main(int argc, char *argv[])
+{
+    IAUPDATE_TRACE("[IAUPDATE] main begin");
+    IAUpdateApplication app(argc, argv);
+    return app.exec();
+}
--- a/iaupdate/IAD/ui/src/iaupdatemaincontainer.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,768 +0,0 @@
-/*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of CIAUpdateMainContainer class 
-*                member functions.
-*
-*/
-
-
-
-//INCLUDES
-#include <barsread.h>
-#include <coemain.h>
-#include <aknlists.h>
-#include <badesca.h> // CDesCArray
-#include <iaupdate.rsg>
-#include <avkon.mbg>
-#include <iaupdate.mbg>
-#include <AknIconArray.h> 
-#include <gulicon.h>
-#include <StringLoader.h>
-#include <data_caging_path_literals.hrh>
-#include <e32property.h>
-#include <featmgr.h>
-
-#include "iaupdatefwnode.h"
-#include "iaupdatemaincontainer.h"
-#include "iaupdatecontainerobserver.h"
-#include "iaupdateapplication.h"
-#include "iaupdatenode.h"
-#include "iaupdatebasenode.h"
-#include "iaupdateversion.h"
-#include "iaupdatefwnsmlpskeys.h"
-
-//MACROS
-_LIT( KTabulator, "\t" );
-_LIT( KOne, "1");
-_LIT( KTwo, "2");
-_LIT( KSpace, " ");
-
-//CONSTANTS
-const TInt KKiloByte = 1024;
-const TInt KMegaByte = 1024 * 1024;
-const TInt KMaxShownInKiloBytes = 10 * KMegaByte;
-
-_LIT( KSWUPDATE_HLP_MAIN, "SWUPDATE_HLP_MAIN" ); 
-
-// MACROS
-_LIT(KIAUpdateIconFileName, "IAUpdate.mif");
-
-//CONST
-
-const TUid KFOTAUid = {0x102072C4};
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainContainer* CIAUpdateMainContainer::NewL( 
-                                         const TRect& aRect, 
-                                         MIAUpdateContainerObserver& aObserver )
-    {
-    CIAUpdateMainContainer* self = CIAUpdateMainContainer::NewLC(aRect,aObserver);
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::NewLC
-// 
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainContainer* CIAUpdateMainContainer::NewLC( 
-                                          const TRect& aRect, 
-                                          MIAUpdateContainerObserver& aObserver )
-    {
-    CIAUpdateMainContainer* self = new (ELeave) CIAUpdateMainContainer(aObserver);
-    CleanupStack::PushL(self);
-    self->ConstructL(aRect);
-    return self;
-    }
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::CIAUpdateMainContainer
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainContainer::CIAUpdateMainContainer(MIAUpdateContainerObserver& aObserver)
-    : iObserver( aObserver )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::~CIAUpdateMainContainer
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainContainer::~CIAUpdateMainContainer()
-    {
-	delete iListBox;
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainContainer::ConstructL(const TRect& aRect )
-    {
-    // Create a window for this application view
-    CreateWindowL();
-
-    // Create list box
-    iListBox = new (ELeave) CAknDoubleGraphicStyleListBox();
-    iListBox->SetContainerWindowL( *this );
-    
-    TResourceReader reader;
-    iEikonEnv->CreateResourceReaderLC( reader, R_IAUPDATE_UPDATES_LIST );
-    iListBox->ConstructFromResourceL( reader );
-    CleanupStack::PopAndDestroy();
-
-    iListBox->EnableStretching( EFalse );
-    iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
-
-    // Setup scroll bars
-    iListBox->CreateScrollBarFrameL( ETrue );
-    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( 
-        CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto );    
-
-    // Create item text array
-    iItemTextArray = new (ELeave) CDesCArrayFlat(2);    
-    iListBox->Model()->SetItemTextArray( iItemTextArray );
-    iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray) ;
-    
-    HBufC* text = KNullDesC().AllocLC();    
-    iListBox->View()->SetListEmptyTextL( *text );
-    CleanupStack::PopAndDestroy( text );
-   
-    // Create icon array
-    
-    CFbsBitmap* bitmap = 0;
-    CFbsBitmap* mask = 0;
-
-    CArrayPtr<CGulIcon>* iconArray = new (ELeave) CAknIconArray( 3 );    
-    CleanupStack::PushL( iconArray );
-    
-    AknIconUtils::CreateIconLC(
-        bitmap, 
-        mask, 
-        AknIconUtils::AvkonIconFileName(), 
-        EMbmAvkonQgn_prop_checkbox_on, 
-        EMbmAvkonQgn_prop_checkbox_on_mask );
-    CGulIcon* icon = CGulIcon::NewLC();
-    icon->SetBitmap( bitmap );
-    icon->SetMask( mask );
-    icon->SetBitmapsOwnedExternally( EFalse );
-    iconArray->AppendL( icon );
-    
-    CleanupStack::Pop( icon );
-    CleanupStack::Pop( mask );
-    CleanupStack::Pop( bitmap );
-
-    AknIconUtils::CreateIconLC(
-        bitmap, 
-        mask, 
-        AknIconUtils::AvkonIconFileName(), 
-        EMbmAvkonQgn_prop_checkbox_off, 
-        EMbmAvkonQgn_prop_checkbox_off_mask );
-    icon = CGulIcon::NewLC();
-    icon->SetBitmap( bitmap );
-    icon->SetMask( mask );
-    icon->SetBitmapsOwnedExternally( EFalse );
-    iconArray->AppendL( icon );
-    
-    CleanupStack::Pop( icon );
-    CleanupStack::Pop( mask );
-    CleanupStack::Pop( bitmap );
-    
-    HBufC* iconFilePath = HBufC::NewLC( KDC_APP_BITMAP_DIR().Length() + 
-                                        KIAUpdateIconFileName().Length() +2 );
-    TPtr ptr = iconFilePath->Des();
-    ptr.Append( KDC_APP_BITMAP_DIR );
-    ptr.Append( KIAUpdateIconFileName );
-          
-    TRAPD( err, CreateIconL( bitmap, 
-                             mask, 
-                             *iconFilePath, 
-                             EMbmIaupdateQgn_indi_important_add, 
-                             EMbmIaupdateQgn_indi_important_add_mask ) ); 
-    if ( err == KErrNone ) 
-        {
-        CleanupStack::PushL( bitmap );
-        CleanupStack::PushL( mask );
-        }
-    else if ( err == KErrEof )
-        {
-        // icon does not exist in Z drive. I.e IAD eclipsed over phase 1 version.
-        // So icon to be retrieved from C drive. 
-        ptr.Zero();
-    	ptr.Append( _L("C:") );
-    	ptr.Append( KDC_APP_BITMAP_DIR );
-        ptr.Append( KIAUpdateIconFileName );
-        AknIconUtils::CreateIconLC(
-                      bitmap, 
-                      mask, 
-                      *iconFilePath, 
-                      EMbmIaupdateQgn_indi_important_add, 
-                      EMbmIaupdateQgn_indi_important_add_mask );
-        }
-    else
-        {
-        User::Leave( err );	
-        }
-
-    icon = CGulIcon::NewLC();
-    icon->SetBitmap( bitmap );
-    icon->SetMask( mask );
-    icon->SetBitmapsOwnedExternally( EFalse );
-    iconArray->AppendL( icon );
-    
-    CleanupStack::Pop( icon );
-    CleanupStack::Pop( mask );
-    CleanupStack::Pop( bitmap );
-    CleanupStack::PopAndDestroy( iconFilePath );
-    
-    CleanupStack::Pop( iconArray ); 
-    iListBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray );
-
-    iListBox->SetListBoxObserver( this );
-    
-    // Set the windows size
-    SetRect( aRect );
-
-    // Activate the window, which makes it ready to be drawn
-    ActivateL();
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::HandleMarkCommandL
-// Handles Mark/Unmark commnds
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainContainer::HandleMarkCommandL( TInt aCommand )
-    {
-    TInt index = iListBox->CurrentItemIndex();
-       
-    TBool markingAccepted = EFalse;
-    if( !iListBox->View()->ItemIsSelected( index ) )                                                                                             
-        {
-        // aCommand is set to EAknCmdMark if current item is not selected.
-        // That's because passed command id may be wrong when using touch UI 
-        aCommand = EAknCmdMark;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
-        markingAccepted = iObserver.MarkListItemL( ETrue, index );
-        }
-    else 
-        {
-        // aCommand is set to EAknCmdUnmark if current item is selected.
-        // That's because passed command id may be wrong when using touch UI    
-        aCommand = EAknCmdUnmark;
-        markingAccepted = iObserver.MarkListItemL( EFalse, index ); 
-        }
-        
-	if ( markingAccepted )
-	    {
-        AknSelectionService::HandleMarkableListProcessCommandL( aCommand, iListBox );
-	    }
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::RefreshL
-// Refresh list
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainContainer::RefreshL( const RPointerArray<MIAUpdateAnyNode>& aNodes,
-                                       TInt aError )
-    {
-    iItemTextArray->Reset();
-        
-    for( TInt i = 0; i < aNodes.Count(); ++i ) 
-        {
-        MIAUpdateAnyNode* node = aNodes[i];
-        TInt sizeInBytes = node->Base().ContentSizeL();
-
-        TInt size = 0;
-        TBool shownInMegabytes = EFalse;        
-        if ( sizeInBytes >= KMaxShownInKiloBytes )
-            {
-    	    shownInMegabytes = ETrue;
-    	    size = sizeInBytes / KMegaByte;
-    	    if ( sizeInBytes % KMegaByte != 0 )
-    	        {
-    	    	size++;
-    	        }
-            }
-        else 
-            {
-    	    size = sizeInBytes / KKiloByte;
-    	    if ( sizeInBytes % KKiloByte != 0 )
-    	        {
-    	    	size++;
-    	        }  
-            }
-            
-        HBufC* importanceDescription( NULL );        
-        switch( node->Base().Importance() )
-        {        
-        case MIAUpdateBaseNode::EMandatory:
-            {
-            if ( shownInMegabytes )
-                {
-                importanceDescription = StringLoader::LoadLC(
-                                   R_IAUPDATE_DES_REQUIRED_UPDATE_MB, size );
-                }
-            else 
-                {
-                importanceDescription = StringLoader::LoadLC(
-                                   R_IAUPDATE_DES_REQUIRED_UPDATE_KB, size );   
-                }  
-            break;
-            }
-        
-        
-        case MIAUpdateBaseNode::ECritical:
-            {
-            TBool isNSU = EFalse;
-            if( node->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-                {
-                MIAUpdateFwNode* fwnode = static_cast<MIAUpdateFwNode*>( node );          
-                if ( fwnode->FwType() == MIAUpdateFwNode::EFotiNsu )
-                    {
-                    isNSU = ETrue;
-                    }
-                }
-
-            if ( isNSU )
-                {
-                //for NSU firmware 
-                importanceDescription = StringLoader::LoadLC(
-                                       R_IAUPDATE_UPDATE_WITH_PC );
-                }
-            else if ( size == 0 )
-                {
-                //for FOTA firmware when size info is not provided by server
-                importanceDescription = StringLoader::LoadLC(
-                                                       R_IAUPDATE_DES_CRITICAL_UPDATE_NO_SIZE );
-                }
-            else
-                {
-                if ( shownInMegabytes )
-                    {
-                    importanceDescription = StringLoader::LoadLC(
-                                       R_IAUPDATE_DES_CRITICAL_UPDATE_MB, size );
-                    }
-                else 
-                    {
-                    importanceDescription = StringLoader::LoadLC(
-                                       R_IAUPDATE_DES_CRITICAL_UPDATE_KB, size );   
-                    } 
-                }
- 
-            break;
-            }
-    
-        case MIAUpdateBaseNode::ERecommended:
-            {
-            if ( shownInMegabytes )
-                {
-            	importanceDescription = StringLoader::LoadLC(
-            	                   R_IAUPDATE_DES_RECOMMENDED_UPDATE_MB, size );
-                }
-            else 
-                {
-                importanceDescription = StringLoader::LoadLC(
-            	                   R_IAUPDATE_DES_RECOMMENDED_UPDATE_KB, size );	
-                }  
-            break;
-            }
-    
-        case MIAUpdateBaseNode::ENormal:
-            {
-            if ( shownInMegabytes )
-                {
-            	importanceDescription = StringLoader::LoadLC(
-            	                   R_IAUPDATE_DES_NORMAL_UPDATE_MB, size );
-                }
-            else 
-                {
-                importanceDescription = StringLoader::LoadLC(
-            	                   R_IAUPDATE_DES_NORMAL_UPDATE_KB, size );	
-                }  
-            break;
-            }
-
-        default:
-            {
-            importanceDescription = KNullDesC().AllocLC();
-            break;
-            }
-        }
-        
-        TPtr ptr = importanceDescription->Des();
-        AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );    
-        
-        
-        
-        if ( node->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal )  
-            {       
-            HBufC* name = node->Base().Name().AllocLC();
-            HBufC* buffer = HBufC::NewLC( KOne.iTypeLength +
-                                          KTabulator.iTypeLength + 
-                                          name->Length() + 
-                                          KTabulator.iTypeLength +
-                                          importanceDescription->Length() );
-            buffer->Des() = KOne();
-            buffer->Des() += KTabulator();
-            buffer->Des() += *name;
-            buffer->Des() += KTabulator();
-            buffer->Des() += *importanceDescription;        
-            
-            iItemTextArray->AppendL( *buffer );
-            
-            CleanupStack::PopAndDestroy( buffer );
-            CleanupStack::PopAndDestroy( name );
-            }
-        
-        if ( node->NodeType() == MIAUpdateAnyNode::ENodeTypeFw ) 
-            {
-            HBufC* firmwareHeader = StringLoader::LoadLC(R_IAUPDATE_MAIN_DEVICE_FW);
-            HBufC* firmwarename = HBufC::NewLC( node->Base().Name().Length() +
-                                                KSpace.iTypeLength + 
-                                                firmwareHeader->Length() );
-            firmwarename->Des() = node->Base().Name();
-            firmwarename->Des() += KSpace();
-            firmwarename->Des() += *firmwareHeader;
-                     
-            HBufC* buffer = HBufC::NewLC( KOne.iTypeLength +
-                                          KTabulator.iTypeLength + 
-                                          firmwarename->Length() + 
-                                          KTabulator.iTypeLength +
-                                          importanceDescription->Length() +
-                                          KTabulator.iTypeLength +
-                                          KTwo.iTypeLength );
-            buffer->Des() = KOne();
-            buffer->Des() += KTabulator();
-            buffer->Des() += *firmwarename;
-            buffer->Des() += KTabulator();
-            buffer->Des() += *importanceDescription;        
-            buffer->Des() += KTabulator();
-            buffer->Des() += KTwo();
-            
-            iItemTextArray->AppendL( *buffer );
-            CleanupStack::PopAndDestroy( buffer );
-            CleanupStack::PopAndDestroy( firmwarename );
-            CleanupStack::PopAndDestroy( firmwareHeader );
-            }
-        
-        CleanupStack::PopAndDestroy( importanceDescription );
-        }    
-    
-    if ( aNodes.Count() == 0 )
-        {
-    	HBufC* emptyText = NULL;
-        if ( aError )
-            {
-            if ( aError == KErrCancel || aError == KErrAbort )
-                {
-        	    emptyText = KNullDesC().AllocLC();
-                }
-            else
-                {
-                emptyText = StringLoader::LoadLC( R_IAUPDATE_REFRESH_FAILED );	
-                }
-    	    }
-        else
-            {
-            emptyText = StringLoader::LoadLC( R_IAUPDATE_TEXT_NO_UPDATES );	
-            }
-        
-        iListBox->View()->SetListEmptyTextL( *emptyText );
-        CleanupStack::PopAndDestroy( emptyText );
-        iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( 
-                CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff );  
-        }
-    else
-        {
-        if ( iListBox->CurrentItemIndex() == KErrNotFound )
-            {
-           	iListBox->SetCurrentItemIndex( aNodes.Count() - 1 );
-            }
-        }
-        
-    iListBox->HandleItemAdditionL();
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::GetCurrentNode
-// 
-// -----------------------------------------------------------------------------
-//
-MIAUpdateAnyNode* CIAUpdateMainContainer::GetCurrentNode( 
-                                    const RPointerArray<MIAUpdateAnyNode>& aNodes )    
-    {
-    MIAUpdateAnyNode* currentNode = NULL;
-    
-    TInt currentIndex = iListBox->CurrentItemIndex();
-    
-    if( currentIndex != -1 )
-        {
-        
-        currentNode = aNodes[currentIndex];
-        
-        }
-    return currentNode;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::SetSelectedIndicesL
-// 
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateMainContainer::SetSelectedIndicesL( 
-                            const RArray<TInt>& aIndices )
-    {    
-    CArrayFixFlat<TInt>* indexes = new(ELeave) CArrayFixFlat<TInt>( aIndices.Count() + 1 );
-    
-    CleanupStack::PushL( indexes );
-    
-    for( TInt i = 0; i < aIndices.Count(); ++i )
-        {
-        indexes->AppendL( aIndices[i] );
-        }
-        
-    iListBox->View()->SetSelectionIndexesL( indexes );
-    
-    UpdateMSKTextL();  
-    CleanupStack::PopAndDestroy( indexes );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::CleanAllSelectionL
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateMainContainer::CleanAllSelection()
-    {
-    iListBox->View()->ClearSelection();
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::OfferKeyEventL
-// Some key events are passed to the list componenent 
-// -----------------------------------------------------------------------------
-//       
-TKeyResponse CIAUpdateMainContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, 
-                                                     TEventCode aType )
-    {
-    TKeyResponse response = EKeyWasNotConsumed;    
-
-
-    if( FeatureManager::FeatureSupported( KFeatureIdSyncMlDmFota ) ) //NFUI
-        {
-        if (aKeyEvent.iScanCode == EStdKeyDevice0 
-                || aKeyEvent.iScanCode == EStdKeyDevice3 
-                || aKeyEvent.iScanCode ==   EStdKeyHash )
-            {
-         
-            TBool value (EFalse);
-            TInt err = RProperty::Get( KPSUidNSmlDMSyncApp, KFotaDLStatus, value );
-            if (!err && value == 1)
-                {
-    
-                TApaTaskList taskList(CEikonEnv::Static()->WsSession());
-                TApaTask task=taskList.FindApp( KFOTAUid );
-           
-                if(task.Exists())
-                    {
-                    task.BringToForeground();
-                    }
-                return EKeyWasConsumed;
-                }
-            }
-        }
- 
-    if( aType == EEventKey )
-        {
-        switch( aKeyEvent.iCode )
-            {
-            case EKeyUpArrow:
-            case EKeyDownArrow:
-                {                    
-                response = iListBox->OfferKeyEventL(aKeyEvent, aType); 
-                UpdateMSKTextL();   
-                break;    
-                }
-            default:
-                {
-                break;
-                }
-             
-            }
-        }
-    return response;        
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::SizeChanged
-//  
-// -----------------------------------------------------------------------------
-//  
-void CIAUpdateMainContainer::SizeChanged()
-    {
-    iListBox->SetRect( Rect() );
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::CountComponentControls
-//  
-// -----------------------------------------------------------------------------
-//  
-TInt CIAUpdateMainContainer::CountComponentControls() const
-    {
-    if ( iListBox )
-        {
-    	return 1;
-        }
-    else
-        {
-        return 0;	
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::ComponentControl
-//  
-// -----------------------------------------------------------------------------
-// 
-CCoeControl* CIAUpdateMainContainer::ComponentControl( TInt aIndex ) const
-    {
-    CCoeControl* control = 0;
-
-    switch( aIndex )
-        {
-        case 0:
-            control = iListBox;
-            break;
-        default:
-            break;
-        }
-    return control;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CIAUpdateMainContainer::GetHelpContext
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateMainContainer::GetHelpContext( TCoeHelpContext& aContext ) const
-    {
-    aContext.iMajor = KUidIAUpdateApp;
-    aContext.iContext = KSWUPDATE_HLP_MAIN;    
-    }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateMainContainer::HandleResourceChange
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateMainContainer::HandleResourceChange( TInt aType )
-    {
-	CCoeControl::HandleResourceChange( aType );
-
-    if ( aType == KEikDynamicLayoutVariantSwitch ) //Handle change in layout orientation
-        {
-        TRect mainPaneRect;
-        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
-        SetRect( mainPaneRect );
-		DrawNow();
-		}
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::UpdateMSKTextL
-//  
-// -----------------------------------------------------------------------------
-//        
-void CIAUpdateMainContainer::UpdateMSKTextL()
-	{
-	TInt index = iListBox->CurrentItemIndex();
-	if (index < 0 )
-	    {
-		iObserver.SetMiddleSKTextL( EFalse, EFalse );
-	    }
-	else if ( iListBox->View()->ItemIsSelected( index ) )
-	    {
-		iObserver.SetMiddleSKTextL( ETrue, ETrue );
-	    }
-	else
-	    {
-	    iObserver.SetMiddleSKTextL( ETrue, EFalse );	
-	    }    
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::HandleListBoxEventL
-//  
-// -----------------------------------------------------------------------------
-//  
-void CIAUpdateMainContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/,
-                                                  TListBoxEvent aEventType )
-    {
-
-    switch  ( aEventType )
-        {
-        case EEventItemSingleClicked:
-        case EEventEnterKeyPressed:
-            {
-            TInt index = iListBox->CurrentItemIndex();
-            if( iListBox->View()->ItemIsSelected( index ) )
-                {
-                HandleMarkCommandL( EAknCmdUnmark );
-                }
-            else
-                {
-                HandleMarkCommandL( EAknCmdMark );
-                }            
-            break;
-            }        
-        default:
-            {
-            break;
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainContainer::CreateIconL
-//  
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateMainContainer::CreateIconL( CFbsBitmap*& aBitmap,
-                                          CFbsBitmap*& aMask,
-                                          const TDesC& aFileName,
-                                          TInt aBitmapId,
-                                          TInt aMaskId )
-    {
-	AknIconUtils::CreateIconLC( aBitmap,
-                                aMask, 
-                                aFileName,  
-                                aBitmapId,
-                                aMaskId );
-    CleanupStack::Pop( aMask );
-    CleanupStack::Pop( aBitmap );
-    }
--- a/iaupdate/IAD/ui/src/iaupdatemainview.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdatemainview.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,1021 +11,1183 @@
 *
 * Contributors:
 *
-* Description:   This module contains the implementation of CIAUpdateMainView class 
-*                member functions.
+* Description:   This module contains the implementation of IAUpdateMainView
+*                class member functions.
 *
 */
 
+#include <hbaction.h>
+#include <QGraphicsWidget>
+#include <QGraphicsLayout>
+#include <QGraphicsLayoutItem>
+#include <QGraphicsLinearLayout>
 
- 
-#include <eikmenup.h>
-#include <aknViewAppUi.h> 
-#include <akntitle.h> 
-#include <aknnavi.h> // CAknNavigationControlContainer
-#include <aknnavide.h> // CAknNavigationDecorator
-#include <AknUtils.h>
-#include <aknmessagequerydialog.h>      // CAknMessageQueryDialog
-#include <akntoolbar.h> 
-#include <StringLoader.h>
-#include <featmgr.h>  
-#include <iaupdate.rsg>
+#include <hbdockwidget.h>
+#include <hblistwidget.h>
+#include <hblistviewitem.h>
+#include <hblistwidgetitem.h>
+#include <hbtoolbar.h>
+#include <hbmenu.h>
+#include <hbdocumentloader.h>
+#include <xqconversions.h>
+#include <hbmessagebox.h>
+#include <hblabel.h>
+#include <hbgroupbox.h>
+#include <hbdataform.h>
+#include <hbtranslator.h>
 
-#include "iaupdate.hrh"
 #include "iaupdatemainview.h"
-#include "iaupdatemaincontainer.h"
-#include "iaupdatenode.h"
-#include "iaupdatefwnode.h"
-#include "iaupdatebasenode.h"
+#include "iaupdateengine.h"
+#include "iaupdateagreement.h"
+#include "iaupdatedeputils.h"
 #include "iaupdatedialogutil.h"
-#include "iaupdatestatusdialog.h"
-#include "iaupdateappui.h"
-#include "iaupdateuicontroller.h"
-#include "iaupdatedeputils.h"
+#include "iaupdateversion.h"
+
 #include "iaupdatedebug.h"
-#include "iaupdatefwupdatehandler.h"
-
-//CONSTANTS
-const TInt KKiloByte = 1024;
-const TInt KMegaByte = 1024 * 1024;
-const TInt KMaxShownInKiloBytes = 10 * KMegaByte;
-const TInt KSelInfoArrayGranularity = 3;
-
-//MACROS
-_LIT( KSpace, " " );
-
-// ============================ MEMBER FUNCTIONS ===============================
 
 
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainView* CIAUpdateMainView::NewL( const TRect& aRect )
-    {
-    CIAUpdateMainView* self = CIAUpdateMainView::NewLC( aRect );
-    CleanupStack::Pop(self);
-    return self;
-    }
+const int KKiloByte = 1024;
+const int KMegaByte = 1024 * 1024;
+const int KMaxShownInKiloBytes = 10 * KMegaByte;
+const QString KTranslationsPath = "/resource/qt/translations/";
+const QString KTranslationsFile = "swupdate";
+
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::NewLC
-// 
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainView* CIAUpdateMainView::NewLC( const TRect& aRect )
-    {
-    CIAUpdateMainView* self = new (ELeave) CIAUpdateMainView();
-    CleanupStack::PushL( self );
-    self->ConstructL( aRect );
-    return self;
-    }
+IAUpdateMainView::IAUpdateMainView(IAUpdateEngine *engine):
+mEngine(engine)        
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::IAUpdateMainView() begin");
+    mFwListView = NULL;
+    mApplicationUpdatesGroupBox = NULL;;
+    mFwNSUGroupBox = NULL;
+    mContentDataForm = NULL;
+    mDialogUtil = NULL;
+    mDialogState = NoDialog;
+    mPrimaryAction = NULL;
+    mNode = NULL;
+    mSelectionUpdate = false;
+    mSelectionConnect = false;
+    mTranslator = NULL;
+        
+    //mTranslator = new HbTranslator(KTranslationsPath, KTranslationsFile);
+    
+    HbDocumentLoader loader;
+    bool ok = false;
+    loader.load(":/xml/iaupdate_mainview.docml", &ok);
+        
+    // Exit if the file format is invalid
+    Q_ASSERT_X(ok, "Software update", "Invalid docml file");
+    // Create the view from DocML
+    
+    HbView* loadedWidget = qobject_cast<HbView*>(loader.findWidget("view"));
+    Q_ASSERT_X(loadedWidget != 0, "Software update", "View not found");
+    QString viewTitle(loadedWidget->title());
+    // Set the IAUpdateMainView view to be the widget that was loaded from the xml
+    setWidget(loadedWidget);
+    setTitle(viewTitle);
+      
+    HbToolBar *toolBar = qobject_cast< HbToolBar*>( loader.findWidget("viewToolbar") );
+    //setToolBar(toolBar);
+    
+    HbMenu *menu = qobject_cast< HbMenu*>( loader.findWidget("viewMenu") );
+    setMenu(menu);
+    
+    //Get the Action objects from the docml file
+    HbAction *action = qobject_cast<HbAction*>(loader.findObject("action"));
+    HbAction *action_1 = qobject_cast<HbAction*>(loader.findObject("action_1"));
+    HbAction *action_2 = qobject_cast<HbAction*>(loader.findObject("action_2"));
+    
+    connect(action, SIGNAL(triggered()), this, SLOT(handleStartUpdate()));
+    connect(action_1, SIGNAL(triggered()), this, SLOT(handleSettings()));
+    connect(action_2, SIGNAL(triggered()), this, SLOT(handleDisclaimer()));
+        
+    mContent = qobject_cast< HbWidget*>( loader.findWidget("content") );
+           
+    mListView = qobject_cast<HbListWidget*>( loader.findWidget("listWidget") );
+    mListView->setSelectionMode( HbAbstractItemView::MultiSelection );
+    
+    connect( mListView, SIGNAL( longPressed( HbAbstractViewItem *, const QPointF & ) ),
+            this, SLOT( handleDetails( HbAbstractViewItem *, const QPointF & ) ) ); 
+        
+    HbListViewItem *prototype = mListView->listItemPrototype();
+
+    prototype->setGraphicsSize(HbListViewItem::LargeIcon);
+    
+    HbDockWidget *dock = new HbDockWidget(this);
+    HbWidget *dockContainer = new HbWidget(dock);
+    QGraphicsLinearLayout *dockLayout = new QGraphicsLinearLayout(dockContainer);
+    dockLayout->setOrientation(Qt::Vertical);
+    dockContainer->setLayout(dockLayout);
+    
+    mSelections = new HbGroupBox(dockContainer);
+    mSelections->setHeading("Selected 0/0 (0 kB)");
+    //QString selectedString = QString(hbTrId("txt_software_subhead_selected_1l_2l_3l_kb")).arg(0).arg(0).arg(0);
+    //mSelections->setHeading(selectedString);                                            
+    
+    dockLayout->addItem( mSelections);
+    
+    dockLayout->addItem(toolBar);
+    
+    dock->setWidget(dockContainer);
+    
+    setDockWidget(dock);
+
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::IAUpdateMainView() end");
+}
+    
+IAUpdateMainView::~IAUpdateMainView()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::~IAUpdateMainView() begin");
+    //delete mTranslator;
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::~IAUpdateMainView() end");
+}
 
 // -----------------------------------------------------------------------------
-// CIAUpdateMainView::CIAUpdateMainView
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainView::CIAUpdateMainView()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::~CIAUpdateMainView
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainView::~CIAUpdateMainView()
-    {
-    delete iDecorator;
-    iAllNodes.Close();
-    if ( iContainer )
-        {
-    	AppUi()->RemoveFromStack( iContainer );
-    	delete iContainer;
-        }
-    delete iFwUpdateHandler;
-    }
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainView::ConstructL( const TRect& /*aRect*/ )
-    {
-    BaseConstructL( R_IAUPDATE_MAIN_VIEW );
-    Toolbar()->SetItemDimmed( EIAUpdateCmdStartUpdate, ETrue, ETrue );
-    Toolbar()->SetItemDimmed( EIAUpdateCmdMarkedUpdateDetails, ETrue, ETrue );
-    Toolbar()->SetItemDimmed( EIAUpdateCmdUpdateHistory, ETrue, ETrue );
-    Toolbar()->SetToolbarObserver( this ); 
-    iFwUpdateHandler = CIAUpdateFWUpdateHandler::NewL();
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::RefreshL
+// IAUpdateMainView::refresh
 // Refreshes update list
 // -----------------------------------------------------------------------------
 //    
-void CIAUpdateMainView::RefreshL( const RPointerArray<MIAUpdateNode>& aNodes,
-                                  const RPointerArray<MIAUpdateFwNode>& aFwNodes,
-                                  TInt aError  )
-    {   
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateMainView::RefreshL begin");
-    iRefreshError = aError;    
-    iAllNodes.Reset();
+void IAUpdateMainView::refresh(const RPointerArray<MIAUpdateNode> &nodes,
+                               const RPointerArray<MIAUpdateFwNode> &fwNodes,
+                               int error)
+{   
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refresh() begin");
+    removeCurrentContentLayout();
         
-    if ( aFwNodes.Count() > 0 )
+    refreshFirmwareUpdates(fwNodes);
+    
+    refreshApplicationUpdates(nodes);
+    
+    if (nodes.Count() == 0 && fwNodes.Count() == 0 && 
+        error != KErrCancel && error != KErrAbort)
+    {    
+        if (!mContentDataForm)
+        {
+            mContentDataForm  = new HbDataForm(mContent); 
+        }
+        QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+        linearLayout->addItem(mContentDataForm);
+        QString formText;
+        
+        if (error == KErrNone)
+        {
+            formText = QString("Applications are up to date");
+            //formText = hbTrId("txt_software_formlabel_applications_are_up_to_date");
+        }
+        else
         {
-        IAUPDATE_TRACE("[IAUPDATE] CIAUpdateMainView::RefreshL hard code importance");
-        //hardcode the importance of firmware as Critical
-        for ( TInt i = 0; i < aFwNodes.Count(); i++ )
-             {
-             aFwNodes[i]->Base().SetImportance( MIAUpdateBaseNode::ECritical );
-             }
-         
-        //either NSU or FOTA available
-        if ( aFwNodes.Count() == 1 )
-            {
-            IAUPDATE_TRACE("[IAUPDATE] CIAUpdateMainView::RefreshL either NSU or FOTA available");
-            MIAUpdateAnyNode* node = aFwNodes[0];
-            User::LeaveIfError( iAllNodes.Append( node ) );
-            }
-        
-        //both NSU and FOTA available, show only FOTA node
-        if ( aFwNodes.Count() == 2 )
-            {
-            IAUPDATE_TRACE("[IAUPDATE] CIAUpdateMainView::RefreshL both NSU and FOTA available");
-            MIAUpdateAnyNode* node1 = aFwNodes[0];
-            MIAUpdateFwNode* fwnode = static_cast<MIAUpdateFwNode*>( node1 );
-            if ( fwnode->FwType() == MIAUpdateFwNode::EFotaDp2  )
-                {
-                User::LeaveIfError( iAllNodes.Append( node1 ) );
-                }
-            else
-                {
-                MIAUpdateAnyNode* node2 = aFwNodes[1];
-                User::LeaveIfError( iAllNodes.Append( node2 ) );
-                }
+            formText = QString("Refreshing failed. Try again later.");
+        }
+        mContentDataForm->setDescription(formText);
+    }
+    updateSelectionInfoInDock();  
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refresh() end");
+}
+
+
+
+
+void IAUpdateMainView::handleStartUpdate()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleStartUpdate() begin");
+    mEngine->StartUpdate(fotaSelected());
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleStartUpdate() end");
+}
+
+
+void IAUpdateMainView::handleSettings()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSettings() begin");
+    emit toSettingView();
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSettings() end");
+}
+
+void IAUpdateMainView::handleDisclaimer()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDisclaimer() begin");
+    if (!mDialogUtil)
+    {
+        mDialogUtil = new IAUpdateDialogUtil(this);
+    }
+    if (mDialogUtil)
+    {
+        HbAction *primaryAction = new HbAction(hbTrId("txt_common_button_ok"));
+        mDialogUtil->showAgreement(primaryAction);
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDisclaimer() end");
+}
+
+void IAUpdateMainView::handleDetails(HbAbstractViewItem * item, const QPointF &)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDetails() begin");
+    int ind = item->modelIndex().row();
+    if (getApplicationNode(ind) != NULL)
+    {    
+        showDetails(*getApplicationNode(ind));
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDetails() end");
+}
+
+void IAUpdateMainView::handleFotaDetails(HbAbstractViewItem *, const QPointF &)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFotaDetails begin");
+    //only one FOTA item in a list, just use it
+    for (int i = 0; i < mFwNodes.Count(); i++)
+    {
+        if (mFwNodes[i]->FwType() == MIAUpdateFwNode::EFotaDp2)
+        {
+            showDetails(*mFwNodes[i]);
+        }
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFotaDetails end");
+}
+
+
+void IAUpdateMainView::handleSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSelectionChanged begin");
+    if (!mSelectionUpdate)
+    {
+        bool changedItemFound = false; 
+        QModelIndexList indexList = selected.indexes();
+        for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+        {    
+            changedItemFound = true;
+            markListItem(true, indexList.at(i).row());
+        }
+        if (!changedItemFound)
+        {
+            indexList = deselected.indexes();
+            for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+            {    
+                changedItemFound = true;
+                markListItem(false, indexList.at(i).row());
             }
         }
-    
-   
-    for( TInt i = 0; i < aNodes.Count(); ++i ) 
-        {
-        MIAUpdateAnyNode* node = aNodes[i];
-        User::LeaveIfError( iAllNodes.Append( node ) );
-        }
-        
-    if( iContainer )
-        {        
-        iContainer->RefreshL( iAllNodes, iRefreshError );  
-        SetSelectedIndicesL();     
-        DynInitToolbarL( R_IAUPDATE_MAIN_TOOLBAR, Toolbar() );
-        }    
-     Toolbar()->SetItemDimmed( EIAUpdateCmdUpdateHistory, EFalse, ETrue );
-     }
-    
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::GetCurrentNode
-// 
-// -----------------------------------------------------------------------------
-//    
-MIAUpdateAnyNode* CIAUpdateMainView::GetCurrentNode()
-   {
-   if ( iContainer )
-      {
-   	  return iContainer->GetCurrentNode( iAllNodes ); 	 
-      }
-   return NULL;   
-   }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::GetSelectedNode
-// 
-// -----------------------------------------------------------------------------
-//    
-MIAUpdateAnyNode* CIAUpdateMainView::GetSelectedNode()
-   {
-   MIAUpdateAnyNode* selectedNode = NULL;
-   for( TInt i = 0; i < iAllNodes.Count() && !selectedNode ; ++i )
-       {
-       if ( iAllNodes[i]->Base().IsSelected() )
-           {
-           selectedNode = iAllNodes[i];
-           }
-       }
-    return selectedNode;   
-   }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::Id
-// Get Uid of this view
-// -----------------------------------------------------------------------------
-//       
-TUid CIAUpdateMainView::Id() const
-    {
-    return TUid::Uid( EIAUpdateMainViewId );
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSelectionChanged end");
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::HandleCommandL
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateMainView::HandleCommandL( TInt aCommand )
+void IAUpdateMainView::handleFwSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFwSelectionChanged begin");
+    if (!mSelectionUpdate)
     {
-    switch( aCommand ) 
-        {  
-        case EIAUpdateCmdStartUpdate:
-            {
-            RPointerArray<MIAUpdateAnyNode> selectedNodes;
-            CleanupClosePushL( selectedNodes );
-            GetSelectedNodesL( selectedNodes ); 
-            if ( selectedNodes[0]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-                {
-                //the marking logic will make sure firmware won't be marked with normal sis updates
-                //at the same time.
-                iFwUpdateHandler->FirmWareUpdatewithFOTA();
-                }
-            else
-                {
-                AppUi()->HandleCommandL( aCommand );
-                }
-            CleanupStack::PopAndDestroy( &selectedNodes );
-            break;    
-            }
-        case EIAUpdateCmdUpdateWithPC:
-            {
-            iFwUpdateHandler->FirmWareUpdatewithNSU();
-            break;
-            }
-        case EIAUpdateCmdSettings:
-            {
-            Toolbar()->SetToolbarVisibility( EFalse );
-            AppUi()->HandleCommandL( aCommand );
-            Toolbar()->SetToolbarVisibility( ETrue );
-            break;
-            }
-        case EAknSoftkeyMark:
-            {
-            iContainer->HandleMarkCommandL( EAknCmdMark );
-            break;	
-            }
-        case EAknSoftkeyUnmark:
-            {
-            iContainer->HandleMarkCommandL( EAknCmdUnmark );
-            break;	
-            }
-        case EAknCmdMark:        
-        case EAknCmdUnmark:
-            {
-            iContainer->HandleMarkCommandL( aCommand );
-            break;	
-            }
-        default:
-            { 
-            AppUi()->HandleCommandL( aCommand );
-            break;
+        bool changedItemFound = false; 
+        QModelIndexList indexList = selected.indexes();
+        for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+        {    
+            changedItemFound = true;
+            markFotaItem(true);
+        }
+        if (!changedItemFound)
+        {
+            indexList = deselected.indexes();
+            for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+            {    
+                changedItemFound = true;
+                markFotaItem(false);
             }
         }
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFwSelectionChanged end");
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::DynInitMenuPaneL
-// Dim options which are not availble in empty list.
-// Set Mark/Unmark option
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateMainView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+
+void IAUpdateMainView::dialogFinished(HbAction *action)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::dialogFinished begin");
+    DialogState dialogState = mDialogState;
+    mDialogState = NoDialog;
+    
+    switch ( dialogState )
     {
-    if( aResourceId == R_IAUPDATE_MAIN_MENU ) 
-        {
-        if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+        case Dependencies:
+            if (action == mPrimaryAction)
             {
-            aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+                updateSelectionsToNodeArray(*mNode,mMark);
             }
-        RPointerArray<MIAUpdateAnyNode> selectedNodes;
-        CleanupClosePushL( selectedNodes );
-        GetSelectedNodesL( selectedNodes ); 
-                    
-        if ( selectedNodes.Count() )
+            updateSelectionsToList();
+            updateSelectionInfoInDock();
+            break;
+        case CannotOmit:    
+            break;
+        case Details:
+            break; 
+        default: 
+            break;
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::dialogFinished end");
+}
+
+bool IAUpdateMainView::fotaSelected() const
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fotaSelected() begin");
+    bool selected = false;
+    for (int i = 0; i < mFwNodes.Count() && !selected; ++i)
+    {
+        if ( mFwNodes[i]->FwType() == MIAUpdateFwNode::EFotaDp2 && mFwNodes[i]->Base().IsSelected() )
+        {    
+            selected = true;
+        }
+    }
+    if (selected)
+        {
+        IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fotaSelected() Fota item is selected");
+        }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fotaSelected() end");
+    return selected;
+}
+
+
+
+void IAUpdateMainView::markListItem(bool mark, int index)
+{
+    IAUPDATE_TRACE_2("[IAUPDATE] IAUpdateMainView::markListItem() begin mark: %d index %d", mark, index);
+    if (mark)
+    {
+        //It's Mark Command
+        if (fotaSelected())
+        {    
+            //FOTA item is selected, unmark FOTA item
+            //FOTA item and application update items can't be selected at the same time 
+            markFotaItem(false);
+        }    
+    }
+       
+    bool accepted = false;
+        
+    if(index > -1)
+    {
+        accepted = true;
+        MIAUpdateNode* node = mNodes[index];
+        RPointerArray<MIAUpdateNode> mands;
+        RPointerArray<MIAUpdateNode> deps;
+           
+        if (mark)
+        {
+            TRAPD(err,IAUpdateDepUtils::GetDependenciesL(*node, mNodes, deps));
+            if (err != KErrNone)
             {
-            if ( selectedNodes[0]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
+                deps.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+            }
+            if (!getMandatoryNodes(mands))
                 {
-                //firmware is selected
-                MIAUpdateFwNode* node = static_cast<MIAUpdateFwNode*>( selectedNodes[0] );
-            
-                if ( node->FwType() == MIAUpdateFwNode::EFotaDp2 )
-                    {
-                    aMenuPane->SetItemDimmed( EIAUpdateCmdUpdateWithPC, ETrue );
-                    }
-                    
-                if ( node->FwType() == MIAUpdateFwNode::EFotiNsu )
-                    {
-                    aMenuPane->SetItemDimmed( EIAUpdateCmdStartUpdate, ETrue );
+                // error when creating mandatory node list
+                mands.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+                }
+        }
+        else
+        {
+            //mandatory item is not allowed to be unmarked
+            if (mNodes[index]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
+            {
+                //show dialog  
+                showUpdateCannotOmitDialog();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+            }
+            TRAPD(err,IAUpdateDepUtils::GetDependantsL(*node, mNodes, deps));  
+            if (err != KErrNone)
+            {
+                deps.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+            }
+            // item is not allowed to be unmarked if its dependant is mandatory
+            bool mandatoryDependantFound = false;
+            for(int i = 0; i < deps.Count() && !mandatoryDependantFound; i++)
+            {
+                if (deps[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
+                {
+                    mandatoryDependantFound = true;
+                }
+            }
+            if (mandatoryDependantFound)
+            {
+                showUpdateCannotOmitDialog();
+                deps.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+            }
+        }
+             
+        int depCount = deps.Count();
+           
+        if (depCount > 0)
+        {
+            QString text;
+            QString names;
+            MIAUpdateNode* depNode = NULL;
+            QString separator(",");
+                       
+            for(int i = 0; i < depCount; i++)  
+            {
+                depNode = deps[i];
+                if (i > 0)
+                {
+                    names.append(separator);
+                    names.append(QString(" "));
+                }
+                names.append(XQConversions::s60DescToQString(depNode->Base().Name()));
+            }
+
+            if (mark)
+            {
+                if (depCount > 1) 
+                {
+                    text.append("This update needs also updates "); 
+                    text.append(names);
+                    text.append(" for working");
+                } 
+                else
+                {
+                    text.append("This update needs also \""); 
+                    text.append(names);
+                    text.append("\" for working");
                     }
                 }
             else
+            {
+                if (depCount > 1) 
                 {
-                //firmware is not selected, only sis
-                aMenuPane->SetItemDimmed( EIAUpdateCmdUpdateWithPC, ETrue );
-                }
+                    text.append("Updates "); 
+                    text.append(names);
+                    text.append(" need this update for working");
+                } 
+                else
+                {
+                    text.append("Update \""); 
+                    text.append(names);
+                    text.append("\" needs this update for working");
+                }   
             }
-        else
+                
+            if (mark && mNodes[index]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
+            {
+                // depencencies of mandatory update are also selected without showing dialog
+                accepted = true;
+            }
+            else
             {
-            aMenuPane->SetItemDimmed( EIAUpdateCmdStartUpdate, ETrue );
-            aMenuPane->SetItemDimmed( EIAUpdateCmdUpdateWithPC, ETrue );
+                mNode = node;
+                mMark = mark;
+                accepted = false;
+                showDependenciesFoundDialog(text);
             }
-        CleanupStack::PopAndDestroy( &selectedNodes );
+        }
+        if (accepted)
+        {    
+            updateSelectionsToNodeArray(*node, mark);   
         }
     }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::DoActivateL
-// Activate view
-// -----------------------------------------------------------------------------
-// 
-void  CIAUpdateMainView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, 
-                                      TUid /*aCustomMessageId*/, 
-                                      const TDesC8& /*aCustomMessage*/ )
-    {
-    UpdateStatusPaneL();
-    Toolbar()->SetToolbarVisibility( ETrue );
-    if( !iContainer )
-        {    
-        iContainer = CIAUpdateMainContainer::NewL( ClientRect(), *this );
-   
-        if( iAllNodes.Count() > 0 )
-            {            
-            iContainer->RefreshL( iAllNodes, iRefreshError );
-            }
-  
-        SetSelectedIndicesL();  
-        DynInitToolbarL( R_IAUPDATE_MAIN_TOOLBAR, Toolbar() );
-        AppUi()->AddToStackL( iContainer ); 
-        }
-    else
-        {
-        UpdateSelectionInfoInNaviPaneL();	
-        }
+    if (accepted)
+    {    
+        updateSelectionsToList();
+        updateSelectionInfoInDock();
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() end");
+}       
+
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::DoDeactivate()
-// Container is deleted in deactivation
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainView::DoDeactivate()
-    {
-    RemoveSelectionInfoInNaviPane();
-    Toolbar()->SetToolbarVisibility( EFalse );
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::DynInitToolbarL()
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainView::DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar )
+void IAUpdateMainView::markFotaItem(bool mark)
+{
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateMainView::markFotaItem() begin mark: %d", mark);
+    if (mark)
     {
-    if ( aResourceId == R_IAUPDATE_MAIN_TOOLBAR )
+        //It's Mark Command
+                
+        //if some of application update item(s) are selected, unmark them
+        //FOTA item and application update items can't be selected at the same time 
+        bool deselected = false;
+        for (int i = 0; i < mNodes.Count(); ++i)
         {
-        if ( iContainer )
+            if (mNodes[i]->Base().IsSelected())
             {
-            if ( CountOfSelectedItems() > 0 )
-                {
-                aToolbar->SetItemDimmed( EIAUpdateCmdStartUpdate, EFalse, ETrue );
-                }
+                mNodes[i]->Base().SetSelected(false);
+            }
+        } 
+        if (deselected)
+        {    
+            // umnmarked items to be updated also to UI
+            updateSelectionsToList();
+        }    
+    }
+    for (int j = 0; j < mFwNodes.Count(); ++j)
+    {    
+        if (mFwNodes[j]->FwType() == MIAUpdateFwNode::EFotaDp2)
+        {
+            mFwNodes[j]->Base().SetSelected(mark);
+            if (mark)
+            {
+                mFwListView->selectionModel()->select(mFwListView->model()->index(0,0),QItemSelectionModel::Select);
+            }
             else
-                {
-                aToolbar->SetItemDimmed( EIAUpdateCmdStartUpdate, ETrue, ETrue );
-                }
-            if ( CountOfSelectedItems() == 1 )
-                {
-                aToolbar->SetItemDimmed( EIAUpdateCmdMarkedUpdateDetails, EFalse, ETrue );
-                }
-            else
-                {
-                aToolbar->SetItemDimmed( EIAUpdateCmdMarkedUpdateDetails, ETrue, ETrue );
-                }
+            {
+                mFwListView->selectionModel()->select(mFwListView->model()->index(0,0),QItemSelectionModel::Deselect);
             }
         }
     }
+    updateSelectionInfoInDock();
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markFotaItem() end");
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::OfferToolbarEventL()
-//
-// -----------------------------------------------------------------------------
-//            
-void CIAUpdateMainView::OfferToolbarEventL( TInt aCommand )
-    {
-    if ( aCommand == EIAUpdateCmdStartUpdate )
-        {
-        RPointerArray<MIAUpdateAnyNode> selectedNodes;
-        CleanupClosePushL( selectedNodes );
-        GetSelectedNodesL( selectedNodes ); 
-        
-        if ( selectedNodes.Count() )
-            {
-            if ( selectedNodes[0]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-                {
-                //firmware is selected
-                MIAUpdateFwNode* node = static_cast<MIAUpdateFwNode*>( selectedNodes[0] );
-            
-                if ( node->FwType() == MIAUpdateFwNode::EFotaDp2 )
-                    {
-                    aCommand = EIAUpdateCmdStartUpdate;
-                    }
-                    
-                if ( node->FwType() == MIAUpdateFwNode::EFotiNsu )
-                    {
-                    aCommand = EIAUpdateCmdUpdateWithPC;
-                    }
-                }
-            else
-                {
-                //firmware is not selected, only sis
-                aCommand = EIAUpdateCmdStartUpdate;
-                }
-            }
-        else
-            {
-             MIAUpdateAnyNode* currentNode = GetCurrentNode(); 
-             if ( currentNode->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-                 {
-                 MIAUpdateFwNode* node = static_cast<MIAUpdateFwNode*>( currentNode );
-                 if ( node->FwType() == MIAUpdateFwNode::EFotiNsu )
-                     {
-                     aCommand = EIAUpdateCmdUpdateWithPC;
-                     }
-                 } 
-            }
 
-        CleanupStack::PopAndDestroy( &selectedNodes );   
-        }
-    HandleCommandL( aCommand );
-    }
 
 
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::MarkListItemL
-// Mark list item
-// -----------------------------------------------------------------------------
-//    
-TBool CIAUpdateMainView::MarkListItemL( TBool aMark, TInt aIndex )
+void IAUpdateMainView::updateSelectionsToNodeArray(MIAUpdateNode &node, bool mark)   
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToNodeArray() begin");
+    RPointerArray<MIAUpdateNode> deps;  
+    TInt err = KErrNone;
+    if (mark)
     {
-    if ( aMark )
+        TRAP(err,IAUpdateDepUtils::GetDependenciesL(node, mNodes, deps));
+    }
+    else
+    {
+        TRAP(err,IAUpdateDepUtils::GetDependantsL(node, mNodes, deps)); 
+    }
+    if (err  == KErrNone )
+    {    
+        int depCount = deps.Count(); 
+        for(int i = 0; i < depCount; i++)
         {
-        //It's Mark Command
-        RPointerArray<MIAUpdateAnyNode> selectedNodes;
-        CleanupClosePushL( selectedNodes );
-        GetSelectedNodesL( selectedNodes ); 
-        
-        //There are selected items already and type are different with the current one
-        if ( selectedNodes.Count() > 0 && (iAllNodes[aIndex]->NodeType() != selectedNodes[0]->NodeType() ) )
-            {       
-            /*HBufC* msgText = StringLoader::LoadLC(R_IAUPDATE_FIRMWARE_WITH_OTHERS);
-
-            CAknQueryDialog* dlg = CAknQueryDialog::NewL();
-       
-            dlg->ExecuteLD( R_IAUPDATE_INFORMATION_QUERY, *msgText );
-            
-            CleanupStack::PopAndDestroy( msgText );*/
-            
-            //clean all of the current selection(s)
-            iContainer->CleanAllSelection();
-            
-            // firmware item and normal sis items can't be selected at the same time
-            // unmark the selected nodes.
-            for ( TInt i = 0; i < selectedNodes.Count(); i++ )
-                {                
-                TInt index = iAllNodes.Find( selectedNodes[i]);
-                iAllNodes[index]->Base().SetSelected( EFalse );
-                }
-            }
-        
-        CleanupStack::PopAndDestroy( &selectedNodes );
+            int depNodeInd = mNodes.Find(deps[i]);
+            mNodes[depNodeInd]->Base().SetSelected(mark);
         }
+        deps.Close();
+        int nodeInd = mNodes.Find(&node);
+        mNodes[nodeInd]->Base().SetSelected(mark);
+    }                
     
-    //there is no selected items or the type is the same with the current one
-    
-    if ( iAllNodes[aIndex]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
+    //mark all of the mandatory items
+    if ( mark )
+    {    
+        RPointerArray<MIAUpdateNode> mands;    
+        if (getMandatoryNodes(mands))
         {
-        iAllNodes[aIndex]->Base().SetSelected( aMark );       
-        
-        if ( aMark )
-            {
-            SetMiddleSKTextL( ETrue, ETrue );
-            }
-        else
+            int mandCount = mands.Count();
+            if (mandCount > 0)
             {
-            SetMiddleSKTextL( ETrue, EFalse );  
-            }  
-        UpdateSelectionInfoInNaviPaneL();
-        DynInitToolbarL( R_IAUPDATE_MAIN_TOOLBAR, Toolbar() );
-        return ETrue;
-        }
-    
-    if ( iAllNodes[aIndex]->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal )
-        {
-        TBool accepted = EFalse;
-        
-        if( aIndex > -1 )
-            {
-            accepted = ETrue;
-            
-            MIAUpdateNode* node = static_cast<MIAUpdateNode*>( iAllNodes[aIndex] );
-            RPointerArray<MIAUpdateAnyNode> mands;
-            RPointerArray<MIAUpdateNode> deps;
-           
-            if ( aMark )
+                for(int i = 0; i < mandCount; i++)
                 {
-                CleanupClosePushL( mands );
-                CleanupClosePushL( deps );
-                IAUpdateDepUtils::GetDependenciesL( *node, iAllNodes, deps );
-                GetMandatoryNodesL( mands );
-                }
-            else
-                {
-                //mandatory item is not allowed to be unmarked
-                if ( iAllNodes[aIndex]->Base().Importance() == MIAUpdateBaseNode::EMandatory )
+                    int mandNodeInd = mNodes.Find(mands[i]);
+                    mNodes[mandNodeInd]->Base().SetSelected(mark);
+                    if (mNodes[mandNodeInd]->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal)
                     {
-                    //show dialog  
-                    ShowUpdateCannotOmitDialogL();
-                    return EFalse;
-                    }
-                
-                CleanupClosePushL( deps );
-                IAUpdateDepUtils::GetDependantsL( *node, iAllNodes, deps );  
-                // item is not allowed to be unmarked if its dependant is mandatory
-                TBool mandatoryDependantFound = EFalse;
-                for( TInt i = 0; i < deps.Count() && !mandatoryDependantFound; i++ )
-                     {
-                     if ( deps[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory )
-                         {
-                         mandatoryDependantFound = ETrue;
-                         }
-                     }
-                if ( mandatoryDependantFound )
-                    {
-                    ShowUpdateCannotOmitDialogL();
-                    CleanupStack::PopAndDestroy( &deps );
-                    return EFalse;
+                        // mark also all dependencies of a mandatory item
+                        MIAUpdateNode* dependencyNode = mNodes[mandNodeInd];
+                        RPointerArray<MIAUpdateNode> dependencies;
+                        TRAPD(err,IAUpdateDepUtils::GetDependenciesL(*dependencyNode, mNodes, dependencies));
+                        if (err)
+                        {
+                            dependencies.Close(); 
+                            mands.Close();
+                            return;
+                        }
+                        for(int j = 0; j < dependencies.Count(); j++)
+                        {
+                            int depNodeInd = mNodes.Find(dependencies[j]);
+                            mNodes[depNodeInd]->Base().SetSelected(true);
+                        }
+                        dependencies.Close();
                     }
                 }
-             
-            TInt depCount = deps.Count();
-           
-            if ( depCount > 0 )
-                {
-                HBufC* text = NULL;
-                HBufC* names = NULL;
-                MIAUpdateNode* depNode = NULL;
-                HBufC* separator = NULL;
-                
-                if ( depCount > 1 )
-                    {                                 
-                    separator = StringLoader::LoadLC( R_IAUPDATE_SEPARATOR );
-                    }
-                
-                names = HBufC::NewLC( 0 );
-                       
-                for( TInt i = 0; i < depCount; i++ )  
-                    {
-                    depNode = deps[i];
-                    HBufC* temp = NULL;
-                    if ( separator )
-                        {
-                        temp = names->ReAllocL( names->Length() + 
-                                                depNode->Base().Name().Length() +
-                                                separator->Length() +
-                                                KSpace.iTypeLength );
-                        }
-                    else
-                        {
-                        temp = names->ReAllocL( names->Length() + 
-                                                depNode->Base().Name().Length() +
-                                                KSpace.iTypeLength );
-                        }
-                   
-                    CleanupStack::Pop( names );
-                    names = temp; 
-                    CleanupStack::PushL( names ); 
-                    
-                    if (  i > 0 )
-                        {
-                        names->Des() += *separator;
-                        names->Des() += KSpace; 
-                        }
-                    names->Des() += depNode->Base().Name();
-                    }
-                
-                TInt resourceId = 0;    
-                if ( aMark )
-                    {
-                    if ( depCount > 1 ) 
-                        {
-                        resourceId = R_IAUPDATE_DEPENDENCY_MARK_MANY;
-                        } 
-                    else
-                        {
-                        resourceId = R_IAUPDATE_DEPENDENCY_MARK_ONE;    
-                        }
-                    }
-                else
-                    {
-                    if ( depCount > 1 ) 
-                        {
-                        resourceId = R_IAUPDATE_DEPENDENCY_UNMARK_MANY;
-                        } 
-                    else
-                        {
-                        resourceId = R_IAUPDATE_DEPENDENCY_UNMARK_ONE;  
-                        }   
-                    }
-                text = StringLoader::LoadLC( resourceId, *names );
-                
-                if ( aMark && iAllNodes[aIndex]->Base().Importance() == MIAUpdateBaseNode::EMandatory )
-                    {
-                    // depencencies of mandatory update are also selected without showing dialog
-                    accepted = ETrue;
-                    }
-                else
-                    {
-                    accepted = ShowDependenciesFoundDialogL( *text );
-                    }
-                CleanupStack::PopAndDestroy( text );
-                CleanupStack::PopAndDestroy( names );
-                
-                if ( separator )
-                    {
-                    CleanupStack::PopAndDestroy( separator );
-                    }
-                }
-            
-            if ( accepted )
-                {
-                for( TInt j = 0; j < depCount; j++ )
-                    {
-                    TInt depNodeInd = iAllNodes.Find( deps[j] );
-                    iAllNodes[depNodeInd]->Base().SetSelected( aMark );
-                    }
-                CleanupStack::PopAndDestroy( &deps );
-                
-                TInt nodeInd = iAllNodes.Find( node );
-                iAllNodes[nodeInd]->Base().SetSelected( aMark );
-                }
-            else
-                {
-                //user rejects the dependency dialog
-                CleanupStack::PopAndDestroy( &deps );
-                if ( aMark )
-                    {
-                    CleanupStack::PopAndDestroy( &mands );
-                    }
-                return EFalse;
-                }
-                
-            //mark all of the mandatory items
-            TInt mandCount = mands.Count();
-            if ( mandCount > 0 && aMark )
-                {
-                for( TInt j = 0; j < mandCount; j++ )
-                    {
-                    TInt mandNodeInd = iAllNodes.Find( mands[j] );
-                    iAllNodes[mandNodeInd]->Base().SetSelected( aMark );
-                    if ( iAllNodes[mandNodeInd]->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal )
-                        {
-                        // mark also all dependencies of a mandatory item
-                        MIAUpdateNode* dependencyNode = static_cast<MIAUpdateNode*>( iAllNodes[mandNodeInd] );
-                        RPointerArray<MIAUpdateNode> dependencies;
-                        CleanupClosePushL( dependencies );
-                        IAUpdateDepUtils::GetDependenciesL( *dependencyNode, iAllNodes, dependencies );
-                        for( TInt k = 0; k < dependencies.Count(); k++ )
-                            {
-                            TInt depNodeInd = iAllNodes.Find( dependencies[k] );
-                            iAllNodes[depNodeInd]->Base().SetSelected( ETrue );
-                            }
-                        CleanupStack::PopAndDestroy( &dependencies );
-                        }
-                    }
-                }
-            if ( aMark )
-                {
-                CleanupStack::PopAndDestroy( &mands );
-                }
-            
-            if ( depCount > 0 || mandCount > 0 )
-                {
-                SetSelectedIndicesL();
-                }
-            else
-                {
-                UpdateSelectionInfoInNaviPaneL();   
-                }
-               
-            if ( aMark )
-                {
-                SetMiddleSKTextL( ETrue, ETrue );
-                }
-            else
-                {
-                SetMiddleSKTextL( ETrue, EFalse );  
-                }        
-            }  
-        DynInitToolbarL( R_IAUPDATE_MAIN_TOOLBAR, Toolbar() );
-        return ETrue;
+            }
         }
-    return EFalse;
+        mands.Close();
     }
-    
-    
-   
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::SetMiddleSKTextL
-// Middle soft key label to be set 
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateMainView::SetMiddleSKTextL( TBool aVisible, TBool aSelected )
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToNodeArray() end");
+}
+
+
+bool IAUpdateMainView::getMandatoryNodes(RPointerArray<MIAUpdateNode> &mandNodes) const
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::getMandatoryNodes() begin");
+    bool ret = true;
+    for(int i = 0; i < mNodes.Count(); ++i)
     {
-	CEikButtonGroupContainer* cbaGroup = Cba();
-	if ( cbaGroup )
+        if (mNodes[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
         {
-        cbaGroup->RemoveCommandFromStack( CEikButtonGroupContainer::EMiddleSoftkeyPosition, iLastCommandId );
-        if ( aVisible )
+            if (mandNodes.Append(mNodes[i]) != KErrNone)
             {
-        	HBufC* middleSKText = NULL;
-    	    if ( aSelected )
-        	    {
-        	    middleSKText = StringLoader::LoadLC( R_IAUPDATE_MSK_UNMARK );
-                TPtr mskPtr = middleSKText->Des();
-    	        cbaGroup->AddCommandToStackL(  
-    	                    CEikButtonGroupContainer::EMiddleSoftkeyPosition, 
-    	                    EAknSoftkeyUnmark, 
-    	                    mskPtr );
-    	        iLastCommandId = EAknSoftkeyUnmark;            
-                }
-            else
-                {
-                middleSKText = StringLoader::LoadLC( R_IAUPDATE_MSK_MARK );
-        	    TPtr mskPtr = middleSKText->Des();
-    	        cbaGroup->AddCommandToStackL( 
-    	                  CEikButtonGroupContainer::EMiddleSoftkeyPosition, 
-    	                  EAknSoftkeyMark, 
-    	                  mskPtr );
-    	        iLastCommandId = EAknSoftkeyMark;
-        	    }
-        	CleanupStack::PopAndDestroy( middleSKText );
+                ret = false; 
             }
         }
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::getMandatoryNodes() end");
+    return ret;
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::GetSelectedNodesL
-// Get selected (marked) nodes
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainView::GetSelectedNodesL( RPointerArray<MIAUpdateAnyNode>& aSelectedNodes ) const
+void IAUpdateMainView::showUpdateCannotOmitDialog()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showUpdateCannotOmitDialog() begin");
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+    messageBox->setText(QString("This required update cannot be omitted"));
+    int actionCount = messageBox->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        messageBox->removeAction(messageBox->actions().at(i));
+    }
+    HbAction *okAction = NULL;
+    okAction = new HbAction("Ok");
+    messageBox->addAction(okAction);
+    messageBox->setTimeout(HbPopup::StandardTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    mDialogState = CannotOmit;
+    messageBox->open(this, SLOT(dialogFinished(HbAction*)));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showUpdateCannotOmitDialog() end");
+}
+
+void IAUpdateMainView::showDependenciesFoundDialog(QString &text)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDependenciesFoundDialog() begin");
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+    HbLabel *label = new HbLabel(messageBox);
+    label->setHtml(QString("Depencencies"));
+    messageBox->setHeadingWidget(label);
+    //messageBox->setIconVisible(false);
+        
+    messageBox->setText(text);
+    int actionCount = messageBox->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        messageBox->removeAction(messageBox->actions().at(i));
+    }
+    mPrimaryAction = NULL;
+    mPrimaryAction = new HbAction("Continue");
+    HbAction *secondaryAction = NULL;
+    secondaryAction = new HbAction("Cancel");
+    messageBox->addAction(mPrimaryAction);
+    messageBox->addAction(secondaryAction);
+    messageBox->setTimeout(HbPopup::NoTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    mDialogState = Dependencies;
+    messageBox->open(this, SLOT(dialogFinished(HbAction*)));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDependenciesFoundDialog() end");
+}
+
+void IAUpdateMainView::updateSelectionsToList()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToList() begin");
+    mSelectionUpdate = true;
+    for(int i = 0; i < mNodes.Count(); ++i)
     {
-    for( TInt i = 0; i < iAllNodes.Count(); ++i )
-        {
-        if ( iAllNodes[i]->Base().IsSelected() )
+        if ( mNodes[i]->Base().IsSelected() != mListView->selectionModel()->isSelected(mListView->model()->index(i,0)))
+        {    
+            QItemSelectionModel::SelectionFlag selectionFlag;
+            if ( mNodes[i]->Base().IsSelected())
             {
-        	User::LeaveIfError( aSelectedNodes.Append( iAllNodes[i] ) );
+                selectionFlag = QItemSelectionModel::Select;
             }
+            else
+            {
+                selectionFlag = QItemSelectionModel::Deselect;
+            }
+            mListView->selectionModel()->select(mListView->model()->index(i,0),selectionFlag);   
         }
     }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::GetMandatoryItemsL
-// Get selected (marked) nodes
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainView::GetMandatoryNodesL( RPointerArray<MIAUpdateAnyNode>& aMandNodes ) const
-    {
-    for( TInt i = 0; i < iAllNodes.Count(); ++i )
-        {
-        if ( iAllNodes[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory )
-            {
-            User::LeaveIfError( aMandNodes.Append( iAllNodes[i] ) );
-            }
-        }
-    }
-
+    mSelectionUpdate = false;
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToList() end");
+}
 
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::SetSelectedIndicesL
-// Indices of selected items are passed to container 
-// -----------------------------------------------------------------------------
-//  
-void CIAUpdateMainView::SetSelectedIndicesL()
+MIAUpdateNode* IAUpdateMainView::getApplicationNode(int index) const
+{
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateMainView::getApplicationNode() begin index: %d", index);
+    MIAUpdateNode *currentNode = NULL;
+     
+    if (index >= 0 && index < mNodes.Count())
     {
-    RArray<TInt> indices;
+        currentNode = mNodes[index];
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::getApplicationNode() end");
+    return currentNode;
+}
+                
+void IAUpdateMainView::showDetails(MIAUpdateAnyNode& node)
+{  
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDetails() begin");
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+    HbLabel *label = new HbLabel(messageBox);
+    label->setHtml(QString("Details"));
+    messageBox->setHeadingWidget(label);
+       
+    messageBox->setIconVisible(false);
+            
+    QString text;
+    constructDetailsText(node,text); 
+    messageBox->setText(text);
+    messageBox->setTimeout(HbPopup::NoTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    mDialogState = Details;
+    messageBox->open(this, SLOT(dialogFinished(HbAction*)));    
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDetails() end");
+}                
         
-    CleanupClosePushL( indices );
 
-    for( TInt i = 0; i < iAllNodes.Count(); ++i )
-        {
-    	if ( iAllNodes[i]->Base().IsSelected() )
-    	    {
-    		User::LeaveIfError( indices.Append( i ) );
-    	    }
-        }
+void IAUpdateMainView::constructDetailsText(MIAUpdateAnyNode &node, QString &text)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::constructDetailsText() begin");
+    text.append(QString("Name:"));
+    text.append(QString("<br />"));
+    QString name = XQConversions::s60DescToQString(node.Base().Name());
+    text.append(name);
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+    {    
+        name.append(QString(" Device software"));
+    }
         
-    iContainer->SetSelectedIndicesL( indices );
-    UpdateSelectionInfoInNaviPaneL();
- 
-    CleanupStack::PopAndDestroy( &indices );
+    text.append(QString("<br />"));
+    text.append(QString("<br />"));
+    
+    text.append(QString("Description:"));
+    text.append(QString("<br />"));
+    QString description;
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+    {
+        description = QString("This update improves your device performance and brings you latest features.");
     }
+    else
+    {    
+        description = XQConversions::s60DescToQString(node.Base().Description());
+    }    
+    text.append(description);
+    text.append(QString("<br />"));
+    text.append(QString("<br />"));
+    
+    
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeNormal)
+    {
+        MIAUpdateNode *iaupdateNode = static_cast<MIAUpdateNode*> (&node);
+        if (iaupdateNode->Type()!= MIAUpdateNode::EPackageTypeServicePack)
+        {
+            text.append(QString("Version:"));
+            text.append(QString("<br />"));
+            QString textVersion;
+            versionText(node.Base().Version(), textVersion);
+            text.append(textVersion);
+            text.append(QString("<br />"));
+            text.append(QString("<br />"));
+        }
+    }
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+    {    
+        MIAUpdateFwNode *fwNode = static_cast<MIAUpdateFwNode*> (&node);
+        text.append(QString("Version:"));
+        text.append(QString("<br />"));
+        QString textVersion = XQConversions::s60DescToQString(fwNode->FwVersion1());
+        text.append(textVersion);
+        text.append(QString("<br />"));
+        text.append(QString("<br />"));
+    }
+    
+    int contentSize = node.Base().ContentSizeL();
+    if (contentSize > 0)
+    {
+        text.append(QString("Size:"));
+        text.append(QString("<br />"));
+        QString textFileSize;
+        fileSizeText(contentSize, textFileSize);
+        text.append(textFileSize);
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::constructDetailsText() end");
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::NodeIndex
-// Get index of node 
-// -----------------------------------------------------------------------------
-//  
-TInt CIAUpdateMainView::NodeIndex( const MIAUpdateAnyNode& aNode ) const
-    {
-    TInt result = -1;
+void IAUpdateMainView::versionText(const TIAUpdateVersion &version, QString &versionText)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::versionText() begin");
+    QString stringMajor;
+    stringMajor.setNum(version.iMajor);
+    versionText.append(stringMajor);
+    versionText.append(QString("."));
+    QString stringMinor;
+    stringMinor.setNum(version.iMinor);
+    versionText.append(stringMinor);
+    versionText.append(QString("("));
+    QString stringBuild;
+    stringBuild.setNum(version.iBuild);
+    versionText.append(stringBuild);
+    versionText.append(QString(")"));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::versionText() end");
+}
+
+void IAUpdateMainView::fileSizeText(int fileSize, QString &text)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fileSizeText() begin");
+    int size = 0;
+    QString stringUnit;
     
-    for( TInt i = 0; i < iAllNodes.Count(); ++i )
+    if (fileSize >= KMaxShownInKiloBytes )
         {
-        if( &aNode == iAllNodes[i] )
+        stringUnit.append(" MB");
+        size = fileSize / KMegaByte;
+        if ( fileSize % KMegaByte != 0 )
             {
-            result = i;
-            break;
+            size++;
             }
         }
-    return result;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::UpdateStatusPaneL
-// Update title in status pane
-// -----------------------------------------------------------------------------
-// 
-    
-void CIAUpdateMainView::UpdateStatusPaneL()
-    {
-    CAknTitlePane* titlePane = 
-            static_cast< CAknTitlePane* >( StatusPane()->ControlL(
-                                           TUid::Uid( EEikStatusPaneUidTitle ) ) );
-    HBufC* text = StringLoader::LoadLC( R_IAUPDATE_TEXT_TITLE_MAIN_VIEW );
-    titlePane->SetTextL( *text );
-    CleanupStack::PopAndDestroy( text );        
-    }
-
+    else
+        {
+        stringUnit.append(" kB");
+        size = fileSize / KKiloByte;
+        if ( fileSize % KKiloByte != 0 )
+            {
+            size++;
+            }   
+        }
+    text.setNum(size);
+    text.append(stringUnit); 
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fileSizeText() end");
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::UpdateSelectionInfoInNaviPaneL
-// Update selection information in status pane
-// -----------------------------------------------------------------------------
-// 
-//
-void CIAUpdateMainView::UpdateSelectionInfoInNaviPaneL()
+void IAUpdateMainView::setImportance(MIAUpdateAnyNode *node, QString &importanceDescription)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::setImportance() begin");
+    int sizeInBytes = node->Base().ContentSizeL();
+    int size = 0;
+    bool shownInMegabytes = false;        
+    if (sizeInBytes >= KMaxShownInKiloBytes)
+    {
+        shownInMegabytes = true;
+        size = sizeInBytes / KMegaByte;
+        if (sizeInBytes % KMegaByte != 0)
+        {
+           size++;
+        }
+    }
+    else 
     {
-    RemoveSelectionInfoInNaviPane();
-    
-    if ( iAllNodes.Count() > 0 )
+        size = sizeInBytes / KKiloByte;
+        if (sizeInBytes % KKiloByte != 0)
+        {
+            size++;
+        }  
+    }
+    QString sizeString;
+    sizeString.setNum(size);     
+    switch(node->Base().Importance())
+    {        
+        case MIAUpdateBaseNode::EMandatory:
         {
-        //show empty navi pane when firmware is selected but no size info or it is NSU
-        if ( (iAllNodes[0]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw) && iAllNodes[0]->Base().IsSelected() )
+            importanceDescription = "Required ";
+            importanceDescription.append(sizeString);
+            if (shownInMegabytes)
+            {
+                importanceDescription.append(" MB" );
+            }
+            else 
             {
-            MIAUpdateFwNode* fwnode = static_cast<MIAUpdateFwNode*>( iAllNodes[0] );
-            if ( (iAllNodes[0]->Base().ContentSizeL() == 0) || (fwnode->FwType() == MIAUpdateFwNode::EFotiNsu)  )
+                importanceDescription.append(" kB" );
+            }  
+            break;
+        }
+                
+        case MIAUpdateBaseNode::ECritical:
+        {
+            bool isNSU = false;
+            if(node->NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+            {
+                MIAUpdateFwNode *fwnode = static_cast<MIAUpdateFwNode*>(node);          
+                if (fwnode->FwType() == MIAUpdateFwNode::EFotiNsu)
                 {
-                return;
+                   isNSU = true;
                 }
             }
-        
-        if ( !iNaviPane )
+            importanceDescription = "Important ";
+            if (!size || isNSU)
             {
-    	    iNaviPane = static_cast<CAknNavigationControlContainer*>
-               ( StatusPane()->ControlL( TUid::Uid(EEikStatusPaneUidNavi ) ) );
+                //for firmware when size info is not provided by server
             }
-        TInt selectedSizeInBytes = 0;
-        for( TInt i = 0; i < iAllNodes.Count(); ++i )
+            else
             {
-            if ( iAllNodes[i]->Base().IsSelected() )
+                importanceDescription.append(sizeString);
+                if (shownInMegabytes)
                 {
-            	selectedSizeInBytes += iAllNodes[i]->Base().ContentSizeL();
+                    importanceDescription.append(" MB" );
                 }
-            }
-                
-        
-        TInt resourceId = 0;
-        TInt selectedSize;
-        if ( selectedSizeInBytes >= KMaxShownInKiloBytes )
-            {
-    	    resourceId = R_IAUPDATE_NAVIPANE_MEGABYTE;
-    	    selectedSize = selectedSizeInBytes / KMegaByte;
-    	    if ( selectedSizeInBytes % KMegaByte != 0 )
-    	        {
-    	    	selectedSize++;
-    	        }
+                else 
+                {
+                    importanceDescription.append(" kB" );
+                } 
             }
-        else 
+            break;
+        }
+            
+        case MIAUpdateBaseNode::ERecommended:
+        {
+            importanceDescription = "Recommended ";
+            importanceDescription.append(sizeString);
+            if (shownInMegabytes)
             {
-    	    resourceId = R_IAUPDATE_NAVIPANE_KILOBYTE;
-    	    selectedSize = selectedSizeInBytes / KKiloByte;
-    	    if ( selectedSizeInBytes % KKiloByte != 0 )
-    	        {
-    	    	selectedSize++;
-    	        }
+                importanceDescription.append(" MB" );
             }
-     
-        CArrayFix<TInt>* numberArray = 
-                 new ( ELeave ) CArrayFixFlat<TInt>( KSelInfoArrayGranularity );
-        CleanupStack::PushL( numberArray );
-        numberArray->AppendL( CountOfSelectedItems() ); 
-        numberArray->AppendL( iAllNodes.Count() );
-        numberArray->AppendL( selectedSize );
-    
-        HBufC* selectionInfo = StringLoader::LoadLC( resourceId, 
-                                                     *numberArray );
-        TPtr ptr = selectionInfo->Des();
-        AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
+            else 
+            {
+                importanceDescription.append(" kB" );
+            }  
+            break;
+        }
             
-        iDecorator = iNaviPane->CreateNavigationLabelL( *selectionInfo );
+        case MIAUpdateBaseNode::ENormal:
+        {
+            importanceDescription = "Optional ";
+            importanceDescription.append(sizeString);
+            if (shownInMegabytes)
+            {
+                importanceDescription.append(" MB" );
+            }
+            else 
+            {
+                importanceDescription.append(" kB" );
+            }  
+            break;
+        }
 
-        iNaviPane->PushL( *iDecorator );
-        
-        CleanupStack::PopAndDestroy( selectionInfo ); 
-        CleanupStack::PopAndDestroy( numberArray );	
+        default:
+        {
+            break;
         }
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::setImportance() end");
+}    
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::RemoveSelectionInfoInNaviPane
-// Remove existing selection info (created by main view) from navi pane
-// -----------------------------------------------------------------------------
-// 
+void IAUpdateMainView::removeCurrentContentLayout()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::removeCurrentContentLayout() begin");
+    int itemCount = mContent->layout()->count();
+    for (int i = 0; i < itemCount; i++)    
+    {
+        mContent->layout()->removeAt(i);
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::removeCurrentContentLayout() end");    
+}
+
+void IAUpdateMainView::refreshFirmwareUpdates(const RPointerArray<MIAUpdateFwNode> &fwNodes)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFirmwareUpdates() begin");
+    mFwNodes.Reset();
+            
+    for (int i = 0; i < fwNodes.Count(); i++)
+    {
+        MIAUpdateFwNode *fwnode = (fwNodes[i]);
+        mFwNodes.Append(fwnode);
+        fwnode->Base().SetImportance(MIAUpdateBaseNode::ECritical);
+        if (fwnode->FwType() == MIAUpdateFwNode::EFotaDp2)
+        {
+            refreshFotaUpdate(*fwnode );
+        }
+        else if (fwNodes.Count() == 1 && fwnode->FwType() == MIAUpdateFwNode::EFotiNsu)
+        {
+            refreshNsuUpdate();
+        }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFirmwareUpdates() end");    
+    }    
+}
+
+void IAUpdateMainView::refreshFotaUpdate(MIAUpdateFwNode& fwNode)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFotaUpdate() begin");
+    if (!mFwListView)
+    {
+        mFwListView  = new HbListWidget(mContent);
+        mFwListView->setSelectionMode( HbAbstractItemView::MultiSelection );
+        connect( mFwListView, SIGNAL( longPressed( HbAbstractViewItem *, const QPointF & ) ),
+        this, SLOT( handleFotaDetails( HbAbstractViewItem *, const QPointF & ) ) ); 
+        mFwListView->listItemPrototype()->setGraphicsSize(HbListViewItem::LargeIcon);   
+        mFwListView->listItemPrototype()->setStretchingStyle(HbListViewItem::NoStretching);
+        connect(mFwListView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+        this, SLOT(handleFwSelectionChanged(QItemSelection,QItemSelection)));     
+    }
+    QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+    linearLayout->addItem(mFwListView);
+    mFwListView->clear();
+    QItemSelectionModel *selectionModel = mFwListView->selectionModel();  
+    selectionModel->clear();
+    HbListWidgetItem *fwItem = new HbListWidgetItem();
+    QString name(XQConversions::s60DescToQString(fwNode.Base().Name()));
+    name.append(" DEVICE SOFTWARE");
+    fwItem->setText(name);
+    QString importanceDescription;
+    setImportance(&fwNode, importanceDescription);
+    fwItem->setSecondaryText(importanceDescription);
+    HbIcon icon(QString(":/icons/qgn_menu_swupdate"));
+    fwItem->setIcon(icon);
+    if (fwNode.Base().IsSelected())
+    {
+        QModelIndex modelIndex = mFwListView->model()->index(0,0);
+        selectionModel->select(modelIndex, QItemSelectionModel::Select);
+    }
+    mFwListView->addItem(fwItem); 
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFotaUpdate() end");
+}
 
-void CIAUpdateMainView::RemoveSelectionInfoInNaviPane()
+void IAUpdateMainView::refreshNsuUpdate()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshNsuUpdate() begin");
+    if (!mFwNSUGroupBox)
     {
-    if ( iNaviPane && iDecorator )
+        mFwNSUGroupBox = new HbGroupBox(mContent);
+        mFwNSUGroupBox->setHeading("Device software available");
+        HbDataForm *dataForm  = new HbDataForm(mFwNSUGroupBox); 
+        mFwNSUGroupBox->setContentWidget(dataForm);
+        dataForm->setDescription("Use your PC to update the device software ([version %L]) from address www.nokia.com/softwareupdate");
+    }
+    QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+    linearLayout->addItem(mFwNSUGroupBox);
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshNsuUpdate() end");
+}
+
+void IAUpdateMainView::refreshApplicationUpdates(const RPointerArray<MIAUpdateNode> &nodes)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshApplicationUpdates() begin");
+    if (nodes.Count() > 0)
+    {
+        if (!mApplicationUpdatesGroupBox)
         {
-    	iNaviPane->Pop( iDecorator );
-    	delete iDecorator;
-    	iDecorator = NULL;
+            mApplicationUpdatesGroupBox = new HbGroupBox(mContent);
+            mApplicationUpdatesGroupBox->setHeading("Application updates");
+        }
+        QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+        linearLayout->addItem(mApplicationUpdatesGroupBox);
+        linearLayout->addItem(mListView);
+    }
+    mListView->clear();
+    QItemSelectionModel *selectionModel = mListView->selectionModel();  
+    selectionModel->clear();
+    HbIcon icon(QString(":/icons/qgn_menu_swupdate"));
+    mNodes.Reset();
+    for(int i = 0; i < nodes.Count(); ++i) 
+    {
+        MIAUpdateNode *node = nodes[i];
+        mNodes.Append(node);
+        QString importanceDescription;
+        MIAUpdateNode::TUIUpdateState uiState = node->UiState();
+        if (uiState == MIAUpdateNode::ENormal)
+        {
+            setImportance(node, importanceDescription);
+        }
+        else if (uiState == MIAUpdateNode::EUpdated)
+        {
+            importanceDescription = "Updated";
+        }
+        else if (uiState == MIAUpdateNode::EFailed)
+        {
+            importanceDescription = "Failed";
+        }
+        else if (uiState == MIAUpdateNode::EDownloaded)
+        {
+            importanceDescription = "Downloaded";
+        }
+        HbListWidgetItem *item = new HbListWidgetItem();    
+        QString name;
+        if (uiState == MIAUpdateNode::EDownloading)
+        {
+            name = QString("Downloading ");
+        }
+        else if (uiState == MIAUpdateNode::EInstalling)
+        {
+            name = QString("Installing ");
+        }
+        name.append(XQConversions::s60DescToQString(node->Base().Name()));
+        item->setText(name);
+        item->setSecondaryText(importanceDescription);
+        item->setIcon(icon);
+        mListView->addItem(item); 
+         
+        if (node->Base().IsSelected())
+        {
+            int count = mListView->count();
+            QModelIndex modelIndex = mListView->model()->index(count-1,0);
+            selectionModel->select(modelIndex, QItemSelectionModel::Select);
         }
     }
- 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::ShowDependenciesFoundDialogL
-// 
-// -----------------------------------------------------------------------------
-//  
-TBool CIAUpdateMainView::ShowDependenciesFoundDialogL( TDesC& aText ) const
+    if (!mSelectionConnect)
+    {    
+        mSelectionConnect = connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+                        this, SLOT(handleSelectionChanged(QItemSelection,QItemSelection)));     
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshApplicationUpdates() end");
+}
+
+void IAUpdateMainView::updateSelectionInfoInDock()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionInfoInDock() begin");
+    int countOfSelectedItems = 0;
+    int countOfAllItems = 0;
+    int selectedSizeInBytes = 0;
+    for (int i = 0; i < mFwNodes.Count(); ++i)
     {
-	CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( aText );
-    dlg->PrepareLC( R_IAUPDATE_MESSAGE_QUERY );
-    CAknPopupHeadingPane* headingPane = dlg->Heading();
-    HBufC* title = StringLoader::LoadLC( R_IAUPDATE_DEPENDENCY_TITLE );
-    headingPane->SetTextL( *title );
-    CleanupStack::PopAndDestroy( title );
-  
-    dlg->ButtonGroupContainer().SetCommandSetL( 
-                                  R_IAUPDATE_SOFTKEYS_CONTINUE_CANCEL__CONTINUE );
-
-    return( dlg->RunLD() == EAknSoftkeyOk );
-    }
-    
-// ---------------------------------------------------------------------------
-// CIAUpdateMainView::CountOfSelectedItems
-// 
-// ---------------------------------------------------------------------------
-//     
-TInt CIAUpdateMainView::CountOfSelectedItems() const
-    {
-    TInt countOfSelectedItems = 0; 
-    for( TInt i = 0; i < iAllNodes.Count(); ++i )
+        if (mFwNodes[i]->FwType() == MIAUpdateFwNode::EFotaDp2)
         {
-        if ( iAllNodes[i]->Base().IsSelected() )
+            countOfAllItems++;
+            if (mFwNodes[i]->Base().IsSelected())
             {
-        	countOfSelectedItems++;
+                countOfSelectedItems++;
+                selectedSizeInBytes += mFwNodes[i]->Base().ContentSizeL();
             }
         }
-    return countOfSelectedItems;   	
+    } 
+    countOfAllItems += mNodes.Count();
+    for (int j = 0; j < mNodes.Count(); ++j)
+    {    
+        if (mNodes[j]->Base().IsSelected())
+        {
+            countOfSelectedItems++;
+            selectedSizeInBytes += mNodes[j]->Base().ContentSizeL();
+        }
+    }    
+    
+    int selectedSize = 0;
+    QString unit;
+    if (selectedSizeInBytes >= KMaxShownInKiloBytes)
+    {
+        unit = "MB";
+        selectedSize = selectedSizeInBytes / KMegaByte;
+        if (selectedSizeInBytes % KMegaByte != 0)
+        {
+            selectedSize++;
+        }
     }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateMainView::ShowUpdateCannotOmitDialogL
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateMainView::ShowUpdateCannotOmitDialogL() const
+    else 
     {
-    HBufC* msgText = StringLoader::LoadLC( R_IAUPDATE_CANNOT_OMIT );
-    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
-    dlg->ExecuteLD( R_IAUPDATE_INFORMATION_QUERY, *msgText  );         
-    CleanupStack::PopAndDestroy( msgText );
+        unit = "kB";
+        selectedSize = selectedSizeInBytes / KKiloByte;
+        if (selectedSizeInBytes % KKiloByte != 0)
+        {
+            selectedSize++;
+        }
     }
-    
-// End of File
-    
+    QString selectionString; 
+    selectionString.append("Selected ");
+    QString numText;
+    numText.setNum(countOfSelectedItems);
+    selectionString.append(numText);
+    selectionString.append("/");
+    numText.setNum(countOfAllItems);
+    selectionString.append(numText);
+    if (selectedSize > 0)
+    {
+        selectionString.append(" (");
+        numText.setNum(selectedSize);
+        selectionString.append(numText);
+        selectionString.append(" ");
+        selectionString.append(unit);
+        selectionString.append(")");
+    }
+    mSelections->setHeading(selectionString);
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionInfoInDock() end");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/src/iaupdatemainwindow.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This module contains the implementation of IAUpdateMainWindow 
+*                class member functions.
+*
+*/
+
+#include <hbdocumentloader.h>
+
+#include "iaupdatemainwindow.h"
+#include "iaupdateengine.h"
+#include "iaupdatemainview.h"
+#include "iaupdatesettingdialog.h"
+
+
+// ViewManager Constructor
+IAUpdateMainWindow::IAUpdateMainWindow(IAUpdateEngine *engine)
+{
+    // Add the views to the main window
+    addMainView(engine);
+    addSettingView();
+    
+    // show the main window (which will display the last view that was added)
+    show();   //temp
+}
+
+// Destructor
+IAUpdateMainWindow::~IAUpdateMainWindow()
+{
+}
+
+// Methods to add views to the main window
+void IAUpdateMainWindow::addMainView(IAUpdateEngine *engine)
+{
+    mMainView = new IAUpdateMainView(engine);
+    addView(mMainView);
+}
+
+
+void IAUpdateMainWindow::addSettingView()
+{
+    
+    mSettingView = new CIAUpdateSettingDialog(mMainView);
+    addView(mSettingView);
+}
+
+// Slots to handle view change
+void IAUpdateMainWindow::toMainView()
+{
+    setCurrentView(mMainView);
+}
+
+void IAUpdateMainWindow::toSettingView()
+{
+    setCurrentView(mSettingView);
+}
+void IAUpdateMainWindow::refreshMainView(const RPointerArray<MIAUpdateNode>& nodes,
+                                         const RPointerArray<MIAUpdateFwNode>& fwNodes,
+                                         int error)
+{
+    mMainView->refresh(nodes,fwNodes,error);  
+    show(); 
+} 
+
+
+
+
+IAUpdateMainView* IAUpdateMainWindow::GetMainView()
+{
+    return mMainView;    
+}
+   
+CIAUpdateSettingDialog* IAUpdateMainWindow::GetSettingView()
+{
+    return mSettingView;}
+
+
--- a/iaupdate/IAD/ui/src/iaupdatenavipanehandler.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:    
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "iaupdatenavipanehandler.h"
-#include "iaupdatedebug.h"
-#include <aknnavilabel.h>
-#include <eikspane.h>
-#include <avkon.hrh>
-
-/*******************************************************************************
- * class CIAUpdateNaviPaneHandler
- *******************************************************************************/
-
-
-// -----------------------------------------------------------------------------
-// Destructor
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateNaviPaneHandler::~CIAUpdateNaviPaneHandler()
-    {
-   	if (iNaviDecorator)
-		{
-		if (iNaviPane && iNavidecoratorPushed)
-			{
-			iNaviPane->Pop(iNaviDecorator);
-			}
-	
-		delete iNaviDecorator;
-		}
-		
-	if (iNaviPane && iNavipanePushed)
-		{
-		iNaviPane->Pop(); // restore previous navi pane
-		}
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateNaviPaneHandler::CIAUpdateNaviPaneHandler
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateNaviPaneHandler::CIAUpdateNaviPaneHandler(CEikStatusPane* aStatusPane) 
-    : iStatusPane(aStatusPane)
-	{
-	iNavidecoratorPushed = EFalse;
-	iNavipanePushed = EFalse;
-	
-	if (iStatusPane)
-		{
-		TRAP_IGNORE( 
-		 iNaviPane = (CAknNavigationControlContainer*)iStatusPane->ControlL( 
-		                                 TUid::Uid(EEikStatusPaneUidNavi) ) );
-		}
-	}
-
-
-// ----------------------------------------------------------------------------
-// CIAUpdateNaviPaneHandler::SetNaviPaneTitleL
-// 
-// ----------------------------------------------------------------------------
-//
-void CIAUpdateNaviPaneHandler::SetNaviPaneTitleL(const TDesC& aTitle)
-	{
-	if (!iStatusPane || !iNaviPane)
-		{
-		return;
-		}
-
-    if (iNaviDecorator)
-        {
-        CAknNaviLabel* naviLabel = static_cast<CAknNaviLabel*>(iNaviDecorator->DecoratedControl());
-        if (naviLabel)
-        	{
-        	naviLabel->SetTextL(aTitle);
-        	iNaviDecorator->DrawDeferred();
-        	}
-        }
-     else
-    	{
-    	iNaviDecorator = iNaviPane->CreateNavigationLabelL(aTitle);
-    	iNaviPane->PushL(*iNaviDecorator); // activate navi label in navi pane
-    	iNavidecoratorPushed = ETrue;
-    	}
-	}
-
-
-    
-//  End of File  
--- a/iaupdate/IAD/ui/src/iaupdatenodefilter.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdatenodefilter.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -72,6 +72,7 @@
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::~CIAUpdateNodeFilter() begin");
 
     delete iFilterParams;
+    iStoredNodes.Reset();
 
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::~CIAUpdateNodeFilter() end");
     }
@@ -212,7 +213,14 @@
                     {
                     for ( TInt i = 0; i < aFwNodes.Count(); ++i )   
                         {
-                        aFwNodes[i]->Base().SetSelected( ETrue );
+                        if ( aFwNodes[i]->FwType() == MIAUpdateFwNode::EFotiNsu )
+                            {
+                            aFwNodes[i]->Base().SetSelected( EFalse ); 
+                            }
+                        else
+                            {
+                            aFwNodes[i]->Base().SetSelected( ETrue );
+                            }
                         }
                     for ( TInt i = 0; i < aNodes.Count(); ++i )   
                         {
@@ -231,7 +239,14 @@
                 {
                 for ( TInt i = 0; i < aFwNodes.Count(); ++i )   
                     {
-                    aFwNodes[i]->Base().SetSelected( ETrue );
+                    if ( aFwNodes[i]->FwType() == MIAUpdateFwNode::EFotiNsu )
+                        {
+                        aFwNodes[i]->Base().SetSelected( EFalse ); 
+                        }
+                    else
+                        {
+                        aFwNodes[i]->Base().SetSelected( ETrue );
+                        }
                     }
                 for ( TInt i = 0; i < aNodes.Count(); ++i )   
                     {
@@ -400,16 +415,9 @@
     RPointerArray<MIAUpdateNode> deps;
     CleanupClosePushL( deps );
     
-    RPointerArray<MIAUpdateAnyNode> allNodes;
-    CleanupClosePushL( allNodes );
-    for( TInt i = 0; i < aAllNodes.Count(); ++i ) 
-        {
-        MIAUpdateAnyNode* node = aAllNodes[i];
-        User::LeaveIfError( allNodes.Append( node ) );
-        }
-    
-    IAUpdateDepUtils::GetDependenciesL( aNode, allNodes, deps );    
-    CleanupStack::PopAndDestroy( &allNodes );
+        
+    IAUpdateDepUtils::GetDependenciesL( aNode, aAllNodes, deps );    
+
     TInt depCount = deps.Count();
     for( TInt i = 0; i < depCount; i++ )
         {
@@ -421,7 +429,80 @@
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::SetDependenciesSelectedL() end");
     }
 
+// -----------------------------------------------------------------------------
+// CIAUpdateNodeFilter::StoreNodeListL
+// 
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateNodeFilter::StoreNodeListL( const RPointerArray< MIAUpdateNode >& aNodes )
+    {
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::StoreNodeListL() begin");
+    iStoredNodes.Reset();
+    for( TInt i = 0; i < aNodes.Count(); ++i )
+        {
+        iStoredNodes.AppendL( aNodes[i] ); 
+        }
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::StoreNodeListL() end");
+    }
 
+// -----------------------------------------------------------------------------
+// CIAUpdateNodeFilter::RestoreNodeListL
+// 
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateNodeFilter::RestoreNodeListL( RPointerArray< MIAUpdateNode >& aNodes) const
+    {
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::RestoreNodeListL() begin");   
+    aNodes.Reset();
+    for( TInt i = 0; i < iStoredNodes.Count(); ++i )
+        {
+        aNodes.AppendL( iStoredNodes[i] ); 
+        }
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::RestoreNodeListL() end");   
+    }
+
+// -----------------------------------------------------------------------------
+// CIAUpdateNodeFilter::SortSelectedNodesFirstL
+// 
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateNodeFilter::SortSelectedNodesFirstL( 
+                          const RPointerArray<MIAUpdateNode>& aSelectedNodes, 
+                          RPointerArray< MIAUpdateNode >& aNodes )
+    {
+    for ( TInt i = aNodes.Count() - 1 ; i >= 0 ; --i )
+        {
+        MIAUpdateNode* node( aNodes[ i ] );
+        if ( node->Base().IsSelected() )
+            {
+            aNodes.Remove( i );        
+            }
+        }
+    for ( TInt j = aSelectedNodes.Count() -1 ; j >= 0 ; --j )
+        {
+        aNodes.InsertL( aSelectedNodes[j], 0 ); 
+        }
+    }
+ 
+// -----------------------------------------------------------------------------
+// CIAUpdateNodeFilter::SortThisNodeFirstL
+// 
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateNodeFilter::SortThisNodeFirstL( const MIAUpdateNode* aFirstNode, 
+                                              RPointerArray< MIAUpdateNode >& aNodes)
+    {
+    TBool removed = EFalse; 
+    for ( TInt i = aNodes.Count() - 1 ; i >= 0 && !removed ; --i )
+        {
+        if ( aNodes[ i ] == aFirstNode )
+            {
+            aNodes.Remove( i );      
+            removed = ETrue;
+            }
+        }
+    aNodes.InsertL( aFirstNode, 0 );
+    }
 
 
 // -----------------------------------------------------------------------------
--- a/iaupdate/IAD/ui/src/iaupdateprogressdialog.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This file contains the implementation of CIAUpdateProgressDialog
-*                class member functions.
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <eikprogi.h>
-
-#include "iaupdateprogressdialog.h"
-#include "iaupdatewaitdialogobserver.h"
-
-
-
-// ========================= MEMBER FUNCTIONS ================================
-
-// -----------------------------------------------------------------------------
-// CIAUpdateProgressDialog::CIAUpdateProgressDialog
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateProgressDialog::CIAUpdateProgressDialog( CEikDialog** aSelfPtr, 
-                                                  TBool aVisibilityDelayOff )
-    :CAknProgressDialog( aSelfPtr, aVisibilityDelayOff )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateProgressDialog::~CIAUpdateProgressDialog
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CIAUpdateProgressDialog::~CIAUpdateProgressDialog()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateProgressDialog::OkToExitL()
-// called by framework when the Softkey is pressed. 
-// On cancel either stop installation or exit 
-// ---------------------------------------------------------------------------
-//
-TBool CIAUpdateProgressDialog::OkToExitL( TInt aButtonId )
-    {
-    TBool result( ETrue );
-    
-    if ( iCallback )
-        {
-        result = iCallback->HandleDialogExitL( aButtonId );
-        }
-
-    return result;
-    }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateProgressDialog::SetCallback
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateProgressDialog::SetCallback( MIAUpdateWaitDialogObserver* aCallback )
-    {
-    iCallback = aCallback;
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateProgressDialog::SetProgressDialogFinalValueL
-// Set final value for the progress bar in progress dialog.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateProgressDialog::SetProgressDialogFinalValueL( TInt aValue )
-    {
-    if ( aValue != iMaxProgress )
-        {
-    	CEikProgressInfo* progressInfo = GetProgressInfoL();
-        progressInfo->SetFinalValue( aValue );
-        iMaxProgress = aValue;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateProgressDialog::UpdateProgressDialogValueL
-// Increments the progress bar in progress dialog.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateProgressDialog::UpdateProgressDialogValueL( TInt aValue )
-    {
-    CEikProgressInfo* progressInfo = GetProgressInfoL();
-    progressInfo->SetAndDraw( aValue );
-    }
-
-// End of File
--- a/iaupdate/IAD/ui/src/iaupdatequeryhistory.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdatequeryhistory.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -21,7 +21,6 @@
 
 #include "iaupdatequeryhistory.h"
 #include "iaupdatedebug.h"
-#include "iaupdatedialogutil.h"
 
 #include <bautils.h>  // bafl.lib 
 #include <s32file.h>  // estor.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/src/iaupdateresultsdialog.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:    
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include <hbmessagebox.h>
+#include <hblabel.h>
+
+#include "iaupdateresultsdialog.h"
+#include "iaupdateresultsinfo.h"
+#include "iaupdatedebug.h"
+
+
+IAUpdateResultsDialog::IAUpdateResultsDialog(QObject *parent)
+    : QObject(parent)
+{
+    
+}
+
+IAUpdateResultsDialog::~IAUpdateResultsDialog()
+{
+}
+
+void IAUpdateResultsDialog::showResults(const TIAUpdateResultsInfo &param, QObject *receiver, const char *member)
+{
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+    
+    HbLabel *label = new HbLabel(messageBox);
+    label->setHtml(QString("Update results"));
+    messageBox->setHeadingWidget(label);
+    
+    messageBox->setIconVisible(false);
+            
+    QString buf;
+    constructText(param,buf);
+    messageBox->setText(buf);
+    messageBox->setTimeout(HbPopup::NoTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    messageBox->open(receiver, member);
+    return;  
+}
+
+// -----------------------------------------------------------------------------
+// IAUpdateResultsDialog::constructText
+//
+// -----------------------------------------------------------------------------
+//
+void IAUpdateResultsDialog::constructText(const TIAUpdateResultsInfo &param, QString &buf)
+{ 
+    if (param.iCountSuccessfull == 0 && param.iCountCancelled == 0 &&
+        param.iCountFailed == 0)
+    {
+        QString stringCount;
+        stringCount.setNum(param.iCountSuccessfull);    
+        buf.append(stringCount);
+        buf.append(" updates successful");
+        buf.append("<br />");
+        return;
+    } 
+  
+    if (param.iCountSuccessfull != 0)
+    {
+        QString stringCount;
+        stringCount.setNum(param.iCountSuccessfull);    
+        buf.append(stringCount);
+        if (param.iCountSuccessfull == 1)
+        {
+            buf.append(" application updated"); 
+        }
+        else
+        {
+            buf.append(" applications updated"); 
+        }
+        buf.append("<br />");
+    }
+    
+    if (param.iCountCancelled != 0)
+    {
+        QString stringCount;
+        stringCount.setNum(param.iCountCancelled);    
+        buf.append(stringCount);
+        if (param.iCountCancelled == 1)
+        {
+            buf.append(" update cancelled");
+        }
+        else
+        {
+            buf.append(" updates cancelled");
+        }
+        buf.append("<br />");
+    }
+
+    if (param.iCountFailed != 0)
+    {
+        QString stringCount;
+        stringCount.setNum(param.iCountFailed);    
+        buf.append(stringCount);
+        if (param.iCountFailed == 1)
+        {
+            buf.append(" update failed");
+        }
+        else
+        {
+            buf.append(" updates failed");
+        }
+        buf.append("<br />");
+    }
+    
+    if (param.iFileInUseError)
+    {
+    	buf.append("Close all applications and try again.");
+    	buf.append("<br />");
+    }
+} 
+
+//  End of File  
--- a/iaupdate/IAD/ui/src/iaupdateroaminghandler.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdateroaminghandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -20,16 +20,13 @@
 
 //INCLUDES
 #include <centralrepository.h>
-#include <avkon.hrh>
-#include <avkon.rsg>
-#include <iaupdate.rsg>
 
 #include "iaupdateroaminghandler.h"
 #include "iaupdateroaminghandlerobserver.h"
 #include "iaupdatenetworkregistration.h"
 #include "iaupdateprivatecrkeys.h"
-#include "iaupdatedialogutil.h"
-#include "iaupdate.hrh"
+
+
 
 // ================= MEMBER FUNCTIONS =======================
 
--- a/iaupdate/IAD/ui/src/iaupdateserver.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-/*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of CIAUpdateServer class 
-*                member functions.
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <coemain.h>
-
-#include "iaupdateserver.h"
-#include "iaupdatesession.h"
-#include "iaupdateappui.h"
-#include "iaupdateuicontroller.h"
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CIAUpdateServer::CIAUpdateServer
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateServer::CIAUpdateServer()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateServer::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateServer::ConstructL()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateServer::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateServer* CIAUpdateServer::NewL()
-    {
-    CIAUpdateServer* self = new (ELeave) CIAUpdateServer();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );    
-    return self;
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateServer::~CIAUpdateServer
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CIAUpdateServer::~CIAUpdateServer()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateServer::CreateServiceL
-// Service creation function.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-CApaAppServiceBase* CIAUpdateServer::CreateServiceL( TUid /*aServiceType*/ ) const
-    {
-   	return new (ELeave) CIAUpdateSession();	
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateServer::HandleAllClientsClosed
-// All clients are closed. 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateServer::HandleAllClientsClosed()
-    {
-    TBool closingAllowed = ETrue;
-    CIAUpdateAppUi* appUi = 
-        static_cast<CIAUpdateAppUi*>( CEikonEnv::Static()->EikAppUi() );   
-    if ( appUi )
-        {
-    	if ( appUi->Controller() )
-    	    {
-    		closingAllowed = appUi->Controller()->ClosingAllowedByClient();
-    	    }
-        }
-    if ( closingAllowed ) 
-        {
-    	CAknAppServer::HandleAllClientsClosed();
-        }
-    else
-        {
-        if ( appUi )
-            {
-    	    TRAP_IGNORE( appUi->HandleAllClientsClosedL() );
-            }	
-        }
-    }
-    
-
-	
-//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/src/iaupdateserviceprovider.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This module contains the implementation of IAUpdateServiceProvider class 
+*                member functions.
+*
+*/
+
+#include <iaupdateparameters.h>
+#include <iaupdateresult.h>
+#include "iaupdateserviceprovider.h"
+#include "iaupdateengine.h"
+#include "iaupdatedebug.h"
+
+const TSecureId KSIDBackgroundChecker = 0x200211f4;
+const TSecureId KSIDCwrtWidget = 0x200267C0;
+
+
+IAUpdateServiceProvider::IAUpdateServiceProvider(IAUpdateEngine& engine)
+: XQServiceProvider( QString("com.nokia.services.swupdate.swupdate_interface")),
+  mEngine(&engine),
+  mCurrentRequest(NoOperation)
+    
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::IAUpdateServiceProvider() begin");
+    publishAll();
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::IAUpdateServiceProvider() end");
+}
+
+IAUpdateServiceProvider::~IAUpdateServiceProvider()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::~IAUpdateServiceProvider()");
+}
+
+void IAUpdateServiceProvider::startedByLauncher(QString refreshFromNetworkDenied)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::startedByLauncher() begin");
+    mAsyncReqId = setCurrentRequestAsync();
+    mEngine->StartedByLauncherL(refreshFromNetworkDenied.toInt());
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::startedByLauncher() end");
+}
+
+void IAUpdateServiceProvider::checkUpdates(QString stringWgId, 
+                                           QString stringUid,  
+                                           QString searchCriteria, 
+                                           QString commandLineExecutable,
+                                           QString commandLineArguments,
+                                           QString stringShowProgress,
+                                           QString stringImportance,
+                                           QString stringType,
+                                           QString stringRefresh)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::checkUpdates() begin");
+    mAsyncReqId = setCurrentRequestAsync();
+    mCurrentRequest = CheckUpdates;
+    CIAUpdateParameters* params = NULL;
+    TRAP_IGNORE(params = CIAUpdateParameters::NewL());
+    if (params)
+    {
+        SetParams(*params, 
+                  stringUid,
+                  searchCriteria,
+                  commandLineExecutable,
+                  commandLineArguments,
+                  stringShowProgress,
+                  stringImportance,
+                  stringType,
+                  stringRefresh);
+  
+        if ((requestInfo().clientSecureId() != KSIDBackgroundChecker) && (requestInfo().clientSecureId() != KSIDCwrtWidget))      
+        {
+            // other processes than backroundchecker are not allowed to cause refresh from network 
+            params->SetRefresh( EFalse );
+        }
+    mEngine->CheckUpdatesRequestL(stringWgId.toInt(),params, params->Refresh() && requestInfo().clientSecureId() == KSIDCwrtWidget);
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::checkUpdates() end");
+    }
+    
+}
+
+void IAUpdateServiceProvider::showUpdates(QString stringWgId, 
+                                          QString stringUid,  
+                                          QString searchCriteria, 
+                                          QString commandLineExecutable,
+                                          QString commandLineArguments,
+                                          QString stringShowProgress,
+                                          QString stringImportance,
+                                          QString stringType,
+                                          QString stringRefresh)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::showUpdates() begin");
+    mAsyncReqId = setCurrentRequestAsync();
+    mCurrentRequest = ShowUpdates;
+    CIAUpdateParameters* params = NULL;
+    TRAP_IGNORE(params = CIAUpdateParameters::NewL());
+    if (params)
+    {
+        SetParams(*params, 
+                  stringUid,
+                  searchCriteria,
+                  commandLineExecutable,
+                  commandLineArguments,
+                  stringShowProgress,
+                  stringImportance,
+                  stringType,
+                  stringRefresh);
+    } 
+    mEngine->ShowUpdatesRequestL(stringWgId.toInt(),params);
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::showUpdates() end");
+}
+
+
+
+void IAUpdateServiceProvider::updateQuery(QString stringWgId)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::updateQuery() begin");
+    mAsyncReqId = setCurrentRequestAsync();
+    mCurrentRequest = UpdateQuery;
+    mEngine->ShowUpdateQueryRequestL( stringWgId.toInt(), requestInfo().clientSecureId() );        
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::updateQuery() end");
+}
+
+
+
+void IAUpdateServiceProvider::completeLauncherLaunch(int error)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::completeLauncherLaunch() begin");
+    completeRequest(mAsyncReqId, QVariant(error));    
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::completeLauncherLaunch() end");
+}
+
+void IAUpdateServiceProvider::completeCheckUpdates(int countOfAvailableUpdates, int error)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::completeCheckUpdates() begin");
+    QList<QVariant> resultList;
+    resultList.append(QVariant(error));
+    resultList.append(QVariant(countOfAvailableUpdates));
+    completeRequest(mAsyncReqId, QVariant(resultList));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::completeCheckUpdates() end");
+}
+
+void IAUpdateServiceProvider::completeShowUpdates(const CIAUpdateResult* updateResult, int error)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::completeShowUpdates() begin");
+    QList<QVariant> resultList;
+    resultList.append(QVariant(error));
+    if (updateResult)
+    {    
+        resultList.append(QVariant(updateResult->SuccessCount()));
+        resultList.append(QVariant(updateResult->FailCount()));
+        resultList.append(QVariant(updateResult->CancelCount()));
+        delete updateResult;
+    }    
+    else
+    {
+        resultList.append(QVariant(0));
+        resultList.append(QVariant(0));
+        resultList.append(QVariant(0));
+    }
+    completeRequest(mAsyncReqId, QVariant(resultList));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::completeShowUpdates() end");
+}
+
+void IAUpdateServiceProvider::completeUpdateQuery(bool updateNow, int error)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::completeUpdateQuery() begin");
+    QList<QVariant> resultList;
+    resultList.append(QVariant(error));
+    resultList.append(QVariant(updateNow));
+    completeRequest(mAsyncReqId, QVariant(resultList));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::completeUpdateQuery() end");
+}
+
+
+void IAUpdateServiceProvider::SetParams(CIAUpdateParameters& params,
+                                        QString& stringUid,  
+                                        QString& searchCriteria, 
+                                        QString& commandLineExecutable,
+                                        QString& commandLineArguments,
+                                        QString& stringShowProgress,
+                                        QString& stringImportance,
+                                        QString& stringType,
+                                        QString& stringRefresh) const
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::SetParams() begin");
+    params.SetUid(TUid::Uid(stringUid.toInt()));
+    TPtrC ptr(reinterpret_cast<const TText*>(searchCriteria.constData()));
+    params.SetSearchCriteriaL(ptr);
+    ptr.Set(reinterpret_cast<const TText*>(commandLineExecutable.constData()));
+    params.SetCommandLineExecutableL(ptr);
+    ptr.Set(reinterpret_cast<const TText*>(commandLineArguments.constData()));
+    HBufC8* arguments8 = HBufC8::NewL(ptr.Length());
+    TPtr8 ptr8(arguments8->Des());
+    ptr8.Copy(ptr);
+    params.SetCommandLineArgumentsL(ptr8);
+    params.SetShowProgress(stringShowProgress.toInt());
+    params.SetImportance(stringImportance.toUInt());
+    params.SetType(stringType.toUInt());
+    params.SetRefresh(stringRefresh.toInt());
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateServiceProvider::SetParams() end");
+}
+
+
--- a/iaupdate/IAD/ui/src/iaupdatesession.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,399 +0,0 @@
-/*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   This module contains the implementation of CIAUpdateSession class 
-*                member functions.
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <w32std.h>
-#include <apgtask.h>
-#include <iaupdateparameters.h>
-#include <iaupdateresult.h>
-
-#include "iaupdatesession.h"
-#include "iaupdateserver.h"
-
-// Parameters are transmitted from the client side to the server
-#include "iaupdatetools.h"
-#include "iaupdateclientdefines.h"
-#include "iaupdateappui.h"
-#include "iaupdatelauncheruids.h"
-#include "iaupdatedebug.h"
-
-// CONSTANTS
-const TSecureId KSIDBackgroundChecker = 0x200211f4;
-const TSecureId KSIDCwrtWidget = 0x200267C0;
-const TSecureId KSIDLauncher = KIAUpdateLauncherUid;
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSession::CIAUpdateSession
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateSession::CIAUpdateSession()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::CIAUpdateSession()");
-    iEikEnv = CEikonEnv::Static();
-    }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateSession::CIAUpdateSession
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateSession::~CIAUpdateSession()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::~CIAUpdateSession() begin");    
-    CIAUpdateAppUi* appUi = 
-        static_cast<CIAUpdateAppUi*>( iEikEnv->EikAppUi() );
-    if ( appUi ) 
-        {
-    	appUi->HandleObserverRemoval();
-        }
-    delete iMessage;
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::~CIAUpdateSession() end");  
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSession::ServiceL
-// Handles the received message.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSession::ServiceL( const RMessage2& aMessage )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::ServiceL() begin");
-    // Dispatch the message in trap harness.
-    TRAPD( result, HandleRequestL( aMessage ) );
-    // If HandleRequest Left, the message has to be completed
-    // here. Otherwise, the RequestCompleted callback will be called
-    // when the operations finishes
-    if ( result != KErrNone )   
-        {
-        IAUPDATE_TRACE_1("[IAUPDATE] HandleRequestL leave with error: %d", result );
-        aMessage.Complete( result );
-        } 
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::ServiceL() end");
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSession::ServiceError
-// Called back by the server framework if this sessions RunL function returns an
-// error.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSession::ServiceError( const RMessage2& aMessage, TInt aError )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::ServiceError() begin");
-    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError );
-    // A bad descriptor error implies a badly programmed client, so panic it;
-    // otherwise use the default handling (report the error to the client)
-    if ( aError == KErrBadDescriptor )
-        {
-        //PanicClient( aMessage, ECIAUpdatePanicBadDescriptor );
-        }
-    CAknAppServiceBase::ServiceError( aMessage, aError );   
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::ServiceError() end");
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSession::CreateL
-// Completes construction of this server-side client session object.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSession::CreateL()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::CreateL() begin");
-    CAknAppServiceBase::CreateL();   
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::CreateL() end");
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSession::RequestCompleted
-// @see MIAUpdateRequestObserver::RequestCompleted
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSession::RequestCompleted( CIAUpdateResult* aResult, 
-                                         TInt aCountOfAvailableUpdates,  
-                                         TBool aUpdateNow, 
-                                         TInt aError )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::RequestCompleted() begin");
-    IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError );
-
-    if ( !iMessage ) //be sure that there is still message to complete
-        {
-        IAUPDATE_TRACE("[IAUPDATE] No message to complete");
-        IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::RequestCompleted() end");
-        return;
-        }
-
-    IAUpdateClientDefines::TIAUpdateServerFunctions functionId =
-        static_cast<IAUpdateClientDefines::TIAUpdateServerFunctions>( iMessage->Function() );
- 
-    TInt error( KErrNone );       
-
-    switch( functionId )
-        {
-        case IAUpdateClientDefines::EIAUpdateServerCheckUpdates:
-            {
-            TPckg<TInt> availableUpdates( aCountOfAvailableUpdates ); 
-            TPtr8 ptr1( availableUpdates );
-            TRAP( error, iMessage->WriteL( 1, ptr1 ) );
-            break;	
-            }
-             
-        case IAUpdateClientDefines:: EIAUpdateServerShowUpdateQuery:
-            {
-            TPckg<TInt> updateNow( aUpdateNow ); 
-            TPtr8 ptr1( updateNow );
-            TRAP( error, iMessage->WriteL( 1, ptr1 ) );
-            break;	
-            }
-
-        case IAUpdateClientDefines::EIAUpdateServerShowUpdates:
-            {
-            TPckg<TInt> successCount( aResult->SuccessCount() ); 
-            TPtr8 ptr1( successCount ); 
-  
-            TPckg<TInt> failCount( aResult->FailCount() );
-            TPtr8 ptr2( failCount );
-         	
-            TPckg<TInt> cancelCount( aResult->CancelCount() );
-            TPtr8 ptr3( cancelCount );
-    
-            TRAP( error,
-                  iMessage->WriteL( 1, ptr1 );
-                  iMessage->WriteL( 2, ptr2 );
-                  iMessage->WriteL( 3, ptr3 ); );            
-            break;	
-            }
-        case IAUpdateClientDefines::EIAUpdateServerStartedByLauncher:
-            break;    
-        default:
-            // We should never come here.
-            break;
-        }            
-
-    if ( error == KErrNone )
-        {
-        // Writing of the data in to the message went ok.
-        // So, nothing to inform about that.
-        // Insert possible error code of the update operation.
-        error = aError;
-        }
-
-    delete aResult;
-    aResult = NULL;
-
-    iMessage->Complete( error );
-    delete iMessage;
-    iMessage = NULL;
-                
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::RequestCompleted() end");
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSession::Server
-// Returns reference to the server.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CIAUpdateServer& CIAUpdateSession::Server()
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::Server()");
-    return *static_cast<CIAUpdateServer*>( const_cast<CServer2*>
-                                         ( CSession2::Server() ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSession::HandleRequestL
-// Handles the request.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSession::HandleRequestL( const RMessage2& aMessage )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::HandleRequestL() begin");    
-    
-    CIAUpdateAppUi* appUi = 
-        static_cast<CIAUpdateAppUi*>( iEikEnv->EikAppUi() );     
-    // First value is the function number
-    IAUpdateClientDefines::TIAUpdateServerFunctions functionId =
-        static_cast<IAUpdateClientDefines::TIAUpdateServerFunctions>( aMessage.Function() );
-    IAUPDATE_TRACE_1("[IAUPDATE] function id: %d", functionId );
-      
-    if ( functionId == IAUpdateClientDefines::EIAUpdateServerCancel )  
-        {
-        appUi->PotentialCancel();
-        if ( iMessage ) //complete possible ongoing request
-            {
-        	iMessage->Complete( KErrCancel );
-        	delete iMessage;
-        	iMessage = NULL;  
-            }
-        // Because cancel is sent synchronously from the client side,
-        // aMessage is different than the iMessage for other operation
-        // that is currently going on asynchronously.
-        // So, RequestCompleted above closed that connection.
-        // Now, inform the caller of the cancel operation
-        // that cancellation was success.
-        aMessage.Complete( KErrNone );
-        IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::HandleRequestL() end");
-    	return;
-        }
-    
-    if ( functionId == IAUpdateClientDefines::EIAUpdateServerToForeground )  
-        {
-        appUi->HandleClientToForegroundL();
-        aMessage.Complete( KErrNone );
-        IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::HandleRequestL() end");
-        return;
-        }
-    
-    if ( functionId == IAUpdateClientDefines::EIAUpdateServerSendWgId )  
-        {
-        TPckgBuf<TInt> wgIdPkg( 0 );
-        aMessage.ReadL( 0, wgIdPkg ); 
-        TInt wgId = wgIdPkg(); 
-        appUi->SetClientWgId( wgId );
-        aMessage.Complete( KErrNone );
-        IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::HandleRequestL() end");
-        return;
-        }
-    
-        
-    if ( iMessage )
-        {
-        // This session is used in a wrong way because the
-        // old operation has not been completed before new one is
-        // started.
-        User::Leave( KErrInUse );
-        }
-        
-    iMessage = new( ELeave ) RMessage2( aMessage );
-    if ( functionId == IAUpdateClientDefines::EIAUpdateServerStartedByLauncher )
-        {
-        TPckgBuf<TBool> refreshFromNetworkDeniedPkg( 0 );
-        aMessage.ReadL( 0, refreshFromNetworkDeniedPkg ); 
-        TBool refreshFromNetworkDenied = refreshFromNetworkDeniedPkg(); 
-    	appUi->StartedByLauncherL( *this, refreshFromNetworkDenied );
-        }
-    else if ( functionId == IAUpdateClientDefines::EIAUpdateServerShowUpdateQuery )  
-        {
-        // Handle the update query dialog request
-        TUint id = aMessage.SecureId().iId;
-    	appUi->ShowUpdateQueryRequestL( *this, id ); 
-        }
-    else
-        {
-        // Handle update operation related requests.
-        HBufC8* data = NULL;
-        data = HBufC8::NewLC( aMessage.GetDesLength( 0 ) );
-        TPtr8 ptr( data->Des() );            
-        aMessage.ReadL( 0, ptr );
-    
-        CIAUpdateParameters* params( CIAUpdateParameters::NewLC() );
-        IAUpdateTools::InternalizeParametersL( *params, *data );
-        // Do not destroy, because ownership of params is transferred
-        // below.
-        CleanupStack::Pop( params );
-        CleanupStack::PopAndDestroy( data );
-        
-        if ( ( aMessage.SecureId() != KSIDBackgroundChecker ) && ( aMessage.SecureId() != KSIDCwrtWidget ) )      
-            {
-            // other processes than backroundchecker are not allowed to cause refresh from network 
-            params->SetRefresh( EFalse );
-            }
-        switch( functionId )
-            {
-            case IAUpdateClientDefines::EIAUpdateServerCheckUpdates:
-                appUi->CheckUpdatesRequestL( *this, params, params->Refresh() && aMessage.SecureId() == KSIDCwrtWidget );
-                break;
-
-            case IAUpdateClientDefines::EIAUpdateServerShowUpdates:
-                appUi->ShowUpdatesRequestL( *this, params );
-                break;
-                    
-            default:
-            // We should never come here
-                delete params;
-                params = NULL;
-                break;
-            }    
-        }
-     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::HandleRequestL() end"); 
-     }    
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSession::SecurityCheckL
-// Virtual framework function that is called on receipt of a message from the
-// client. This allows the service implementation to define a security policy
-// for messages from the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CPolicyServer::TCustomResult CIAUpdateSession::SecurityCheckL( const RMessage2& aMsg,
-                                                             TInt& /*aAction*/,
-                                                             TSecurityInfo& /*aMissing*/ )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::SecurityCheckL() begin");
-    
-    CPolicyServer::TCustomResult result = CPolicyServer::EFail; 
-    switch ( aMsg.Function() )
-        {
-        case IAUpdateClientDefines::EIAUpdateServerStartedByLauncher:
-            if ( aMsg.SecureId() == KSIDLauncher )  
-                {
-                result = CPolicyServer::EPass;
-                }
-            break;
-        case IAUpdateClientDefines::EIAUpdateServerCheckUpdates:
-        case IAUpdateClientDefines::EIAUpdateServerShowUpdates:
-        // no capability check is needed because SID is checked later
-        // that means that only bacgkroundchecker is allowed to initiate network refresh
-            
-        case IAUpdateClientDefines::EIAUpdateServerShowUpdateQuery:
-        case IAUpdateClientDefines::EIAUpdateServerCancel:
-        case IAUpdateClientDefines::EIAUpdateServerToForeground:
-        case IAUpdateClientDefines::EIAUpdateServerSendWgId:
-        // No capabilities needed
-            result = CPolicyServer::EPass;
-            break;
-
-        default:
-            // Not recognized message
-            result = CPolicyServer::EFail;
-        }
-    IAUPDATE_TRACE_1("[IAUPDATE] result: %d", result );
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSession::SecurityCheckL() end");
-    return result; 
-    }
-
-
-//  End of File  
--- a/iaupdate/IAD/ui/src/iaupdatesettingdialog.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdatesettingdialog.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010-2011 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,695 +11,396 @@
 *
 * Contributors:
 *
-* Description:    
+* Description:   This module contains the implementation of IAUpdateSettingDialog 
+*                class member functions.
 *
 */
 
-
-
-
-// INCLUDE FILES
+#include <hbdataform.h>
+#include <hbdataformmodel.h>
+#include <centralrepository.h>
+#include <cmconnectionmethoddef.h>
+#include <cmdestination.h>
+#include <xqconversions.h>
+#include <hbaction.h> 
 
 #include "iaupdatesettingdialog.h"
-#include "iaupdateaccesspointhandler.h"  
-#include "iaupdatestatuspanehandler.h"
-#include "iaupdateapplication.h"
+#include "iaupdateprivatecrkeys.h"
 #include "iaupdate.hrh"
-#include "iaupdateprivatecrkeys.h"
-#include "iaupdatedebug.h"
-#include <iaupdate.rsg>
-
-#include <centralrepository.h>
-#include <featmgr.h> 
-#include <hlplch.h>
-
-
-_LIT( KSWUPDATE_HLP_SETTINGS, "SWUPDATE_HLP_SETTINGS" ); 
-
-
-
-
-// cenrep in emulator:
-// copy 2000F85A.txt to '\epoc32\release\winscw\udeb\Z\private\10202be9\'
-// delete 2000F85A.txt from 'epoc32\winscw\c\private\10202be9\persists'
-//
-// cenrep in hardware:
-// copy 2000F85A.txt to '\epoc32\data\Z\private\10202be9'
-//
-
-
-
-/******************************************************************************
- * class CIAUpdateSettingDialog
- ******************************************************************************/
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingDialog::ShowDialogL
-// 
-// -----------------------------------------------------------------------------
-TBool CIAUpdateSettingDialog::ShowDialogL()
-	{
-	//__UHEAP_MARK;
-	
-	CIAUpdateSettingDialog* dialog = CIAUpdateSettingDialog::NewL();
-
-	TBool ret = dialog->ExecuteLD( R_IAUPDATE_SETTING_DIALOG );
-
-   	//__UHEAP_MARKEND;
-   	
-    return ret;
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingDialog::NewL
-//
-// -----------------------------------------------------------------------------
-CIAUpdateSettingDialog* CIAUpdateSettingDialog::NewL()
-    {
-    CIAUpdateSettingDialog* self = new ( ELeave ) CIAUpdateSettingDialog();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingDialog::CIAUpdateSettingDialog
-// 
-// -----------------------------------------------------------------------------
-//
-CIAUpdateSettingDialog::CIAUpdateSettingDialog()
-	{
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingDialog::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSettingDialog::ConstructL()
-    {
- 	CAknDialog::ConstructL( R_IAUPDATE_SETTING_DIALOG_MENU );
-    
-    // get previous title so it can be restored
-	iStatusPaneHandler = CIAUpdateStatusPaneHandler::NewL( iAvkonAppUi );
-	iStatusPaneHandler->StoreOriginalTitleL();
-    } 
-
-
-// ----------------------------------------------------------------------------
-// Destructor
-//
-// ----------------------------------------------------------------------------
-//
-CIAUpdateSettingDialog::~CIAUpdateSettingDialog()
-    {
-	delete iStatusPaneHandler;
-	
-    if (iAvkonAppUi)
-    	{
-    	iAvkonAppUi->RemoveFromStack( this );
-    	}
-    }
-
-
-// ---------------------------------------------------------
-// CIAUpdateSettingDialog::CreateCustomControlL
-// ---------------------------------------------------------
-//
-SEikControlInfo CIAUpdateSettingDialog::CreateCustomControlL( TInt aControlType )
-    {
-    SEikControlInfo controlInfo;
-    controlInfo.iControl = NULL;
-    controlInfo.iTrailerTextId = 0;
-    controlInfo.iFlags = 0;
-    
-    switch ( aControlType )
-        {
-        case EAknCtLastControlId:
-            {
-            controlInfo.iControl = new (ELeave) CIAUpdateSettingItemList();
-            break;
-            }
-
-        default:
-            {
-            break;
-            }
-        }
-    return controlInfo;
-    }
 
 
-//------------------------------------------------------------------------------
-// CIAUpdateSettingDialog::ActivateL
-//
-// Called by system when dialog is activated.
-//------------------------------------------------------------------------------
-//
-void CIAUpdateSettingDialog::ActivateL()
-	{
-    CAknDialog::ActivateL();
-
-	// this cannot be in ConstructL which is executed before dialog is launched
-	iAvkonAppUi->AddToStackL(this);
-    }
-
+const TInt KAutoUpdateOn( 0 );
+const TInt KAutoUpdateOff( 1 );
+const TInt KAutoUpdateOnInHomeNetwork( 2 );
 
-//------------------------------------------------------------------------------
-// CIAUpdateSettingDialog::GetHelpContext
-//
-//------------------------------------------------------------------------------
-//
-void CIAUpdateSettingDialog::GetHelpContext( TCoeHelpContext& aContext ) const
-	{
-	aContext.iMajor = KUidIAUpdateApp;
-    aContext.iContext = KSWUPDATE_HLP_SETTINGS;        
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingDialog::HandleListBoxEventL
-// 
-// -----------------------------------------------------------------------------
-void CIAUpdateSettingDialog::HandleListBoxEventL( CEikListBox* /*aListBox*/,
-                                                  TListBoxEvent /*aEventType*/ )
+/*
+Constructor. It creates a formwidget on the view. 
+*/
+CIAUpdateSettingDialog::CIAUpdateSettingDialog(QGraphicsItem* parent):HbView(parent)
     {
-    }
-
+    
+    //setTitle("Software update");
+    
+    mSettingsForm = new HbDataForm(this);
+            
 
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingDialog::PreLayoutDynInitL
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSettingDialog::PreLayoutDynInitL()
-    {
-    iList = (CIAUpdateSettingItemList*) ControlOrNull ( EIAUpdateSettingDialogList );
+    // open connection manager 
+    TRAPD(err,  mCmManager.OpenL()); 
+    qt_symbian_throwIfError(err);
     
-    iList->LoadSettingsL(); // from CAknSettingItemList
+    // destination field flag inititializations 
+    mSetByNwQuery = false; // dest set by user/by destination query
+    mConnected = false;    // already connected to query
+    mInitialized = false;  // field initialized ?
     
-	iStatusPaneHandler->SetTitleL( R_IAUPDATE_SETTING_DIALOG_TITLE );
-	iStatusPaneHandler->SetNaviPaneTitleL(KNullDesC);
-    }
-
+    // Initialize view
+    initializeView();
+    
+    //setWidget(mSettingsForm);
+    setWidget(mSettingsForm);
+    
+    // Create application settings ui
+    mApplSett = new CmApplSettingsUi(this);
 
-//------------------------------------------------------------------------------
-// CIAUpdateSettingDialog::DynInitMenuPaneL
-//
-// Called by system before menu is shown.
-//------------------------------------------------------------------------------
-//
-void CIAUpdateSettingDialog::DynInitMenuPaneL(TInt aResourceID, CEikMenuPane* aMenuPane )
-	{
-    if( aResourceID == R_IAUPDATE_SETTING_DIALOG_MENU_PANE ) 
-        {
-        if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
-            {
-            aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
-            }
-        }
+    // Create a back key action and set it as the default navigation
+    // action once the back key is pressed
+    mBackKey = new HbAction(Hb::BackNaviAction, this);
+    this->setNavigationAction(mBackKey);
+
+    connect(mBackKey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
+
     }
 
-
-//------------------------------------------------------------------------------
-// CIAUpdateSettingDialog::ProcessCommandL
-//
-// Handle commands from menu.
-//------------------------------------------------------------------------------
-//
-void CIAUpdateSettingDialog::ProcessCommandL(TInt aCommandId)
-	{
-    if ( MenuShowing() ) 
-        {
-        HideMenu();
-        }
-
-
-	switch ( aCommandId )
-		{
-		case EAknCmdHelp:
-			{
-			HlpLauncher::LaunchHelpApplicationL( 
-			                     iEikonEnv->WsSession(), 
-			                     iEikonEnv->EikAppUi()->AppHelpContextL() );
-		    break;
-			}
- 
-		case EAknCmdOpen:
-			{
-			EditItemL();
-			break;
-			}
-		    
-        case EAknCmdExit:
-        case EEikCmdExit:
-			{
-			// close dialog and exit calling application
-			iAvkonAppUi->ProcessCommandL( EAknCmdExit );
-			break;
-			}
-
-		default:			
-		    break;
-		}
-	}
-
-
-//------------------------------------------------------------------------------
-// CIAUpdateSettingDialog::OkToExitL
-//
-//------------------------------------------------------------------------------
-//
-TBool CIAUpdateSettingDialog::OkToExitL(TInt aButtonId)
-	{
-	if ( aButtonId == EEikBidCancel )
-		{
-		TRAP_IGNORE( SaveSettingsL() );  //potential leave trapped 
-		                                 //because IAD is not closed if SaveSettingsL() leaves 
-		return ETrue; // close dialog
-		}
-
-	if ( aButtonId == EAknSoftkeyOpen )
-		{
-		EditItemL();
-
-		return EFalse; // leave dialog open
-		}
-
-	if ( aButtonId == EAknSoftkeyBack )
-        {
-		SaveSettingsL();
-		
-		return ETrue; // close dialog
-		}
-
-	return CAknDialog::OkToExitL(aButtonId);
-	}
-
-
+/*
+Destructor
+*/
+CIAUpdateSettingDialog::~CIAUpdateSettingDialog()
+    {
+    // close connection manager 
+    mCmManager.Close();
+    }
 
 // ----------------------------------------------------------------------------
-// CIAUpdateSettingDialog::OfferKeyEventL
+// CIAUpdateSettingDialog::toggleChange
 // 
 // ----------------------------------------------------------------------------
 //
-TKeyResponse CIAUpdateSettingDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
-	{
-	if (aType == EEventKey)
-		{
-		switch (aKeyEvent.iCode)
-			{
-			case EKeyEscape:  // framework calls this when dialog must shut down
-				{
-				return CAknDialog::OfferKeyEventL(aKeyEvent, aType);
-        		}
-			case EKeyUpArrow:
-			case EKeyDownArrow:
-			    {
-    		    break;
-			    }
-            default:
-				{
-			    break;
-				}
-			}
-		}
+void CIAUpdateSettingDialog::toggleChange(QModelIndex startIn, QModelIndex /*endIn*/)
+{
+    // HLa: this should work
+    HbDataFormModelItem *itm = mModel->itemFromIndex(startIn);
 
-	return CAknDialog::OfferKeyEventL( aKeyEvent, aType);
-	}
-
-
+    // Destination ?
+    if ( startIn.row() == 0 )
+        {
+        // no query when initializing fields
+        if ( mInitialized )
+            {
+            // no query if field value set by destination query
+            if (!mSetByNwQuery )
+                {
+                queryDestination();
+                mSetByNwQuery = true;
+                }
+                else
+                {
+                mSetByNwQuery = false;
+                }
+            }
+        else
+            {
+            mInitialized = true;
+            }
+           
+        }
+    // Auto update ?
+    if ( startIn.row() == 1 )
+        {
+         int currentIndex = mAutoUpdateItem->contentWidgetData(QString("currentIndex")).toInt();
+        }
+}
 // ----------------------------------------------------------------------------
-// CIAUpdateSettingDialog::HandleResourceChange
+// CIAUpdateSettingDialog::queryDestination
 // 
 // ----------------------------------------------------------------------------
 //
-void CIAUpdateSettingDialog::HandleResourceChange(TInt aType)
-    {   
-    if (aType == KEikDynamicLayoutVariantSwitch) //Handle change in layout orientation
-        {
-        TRect mainPaneRect;
-        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
-        SetRect( mainPaneRect );
-    
-        iList->HandleResourceChange( aType );
-    
-        CCoeControl::HandleResourceChange( aType );
-		DrawDeferred();
-	    return;
-		}
-		
-    if ( aType == KAknsMessageSkinChange )
-        {
-        }
-		
-    CCoeControl::HandleResourceChange( aType );
-    }
+void CIAUpdateSettingDialog::queryDestination()
+  {
+        QFlags<CmApplSettingsUi::SelectionDialogItems> listItems;
+        QSet<CmApplSettingsUi::BearerTypeFilter> filter;
+        
+        // Show only destinations
+       listItems |= CmApplSettingsUi::ShowDestinations;
+       // listItems |= CmApplSettingsUi::ShowConnectionMethods;
 
+        mApplSett->setOptions(listItems, filter);
+        mApplSett->setSelection(mSelection);
+        
+        // Connect finished(uint) signal and handle result via it
+        if (!mConnected)
+            {
+            connect(mApplSett, SIGNAL(finished(uint)), this, SLOT(showResults(uint)));
+            mConnected = true;
+            }
+        
+        // Start CmApplSettingsUi
+        mApplSett->open();
 
+  }
 // ----------------------------------------------------------------------------
-// CIAUpdateSettingDialog::EditItemL
+// CIAUpdateSettingDialog::showResults
 // 
 // ----------------------------------------------------------------------------
 //
-void CIAUpdateSettingDialog::EditItemL()
-	{
-	TInt currentIndex = iList->ListBox()->CurrentItemIndex();
-	TBool calledFromMenu = ETrue;
-	
-	iList->EditItemL( currentIndex, calledFromMenu );
-	}
-
+void CIAUpdateSettingDialog::showResults(uint retval)
+{
+    if (retval == CmApplSettingsUi::ApplSettingsErrorNone) {
+        mSelection = mApplSett->selection();
+        
+        uint destinationId = mSelection.id;
+        
+        QString idString;
+        
+        TRAPD( err, getDestinationNameL( destinationId, idString ) );
+        qt_symbian_throwIfError(err);
 
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingDialog::SetVisibility
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSettingDialog::SetVisibility()
-	{
-	}
-
-
-// -----------------------------------------------------------------------------
-// CAspContentDialog::SetAllReadOnly
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSettingDialog::SetAllReadOnly()
-	{
-	}
-
+        // Destination changed ?
+        if ( idString != mCurrentDest )
+            {
+            mCurrentDest = idString;
+            }
+    }
+   // inform toggleChange that change is not made by user
+    mSetByNwQuery = true;
+    mDestinationItem->setContentWidgetData(QString("text"), mCurrentDest);
+}
 
 // ----------------------------------------------------------------------------
 // CIAUpdateSettingDialog::SaveSettingsL
 // 
 // ----------------------------------------------------------------------------
 //
-void CIAUpdateSettingDialog::SaveSettingsL()
-	{
-    iList->StoreSettingsL();  // from CAknSettingItemList
-    
+void CIAUpdateSettingDialog::saveSettingsL()
+    {
     CRepository* cenrep = CRepository::NewLC( KCRUidIAUpdateSettings );
     TInt err = cenrep->StartTransaction( CRepository::EReadWriteTransaction );
     User::LeaveIfError( err );
+    
     cenrep->CleanupCancelTransactionPushL();
-
+    
+    // Set destination
+    TInt value = mSelection.id;
+    err = cenrep->Set( KIAUpdateAccessPoint, value ) ;
+    User::LeaveIfError( err );
+    
+    // Set auto update check
+    value = mAutoUpdateItem->contentWidgetData(QString("currentIndex")).toInt();
     
-    TInt num = iList->Attribute( EAccessPoint );
-    if ( num == 0 )
-        {
-        // O means default destination. Let's save it as -1 so that we know later on 
-        // whether cenrep really contained the default or just nothing.
-        num = -1;
-        }
-    err = cenrep->Set( KIAUpdateAccessPoint, num );
+    // Convert ist index index to setting value
+    switch ( value )
+         {
+         case KAutoUpdateOn:
+             value = EIAUpdateSettingValueDisableWhenRoaming;
+             break;
+         case KAutoUpdateOff:
+             value = EIAUpdateSettingValueDisable;
+             break;
+         case KAutoUpdateOnInHomeNetwork:
+             value = EIAUpdateSettingValueEnable;
+             break;
+         default: 
+             break;
+         }
+    err = cenrep->Set( KIAUpdateAutoUpdateCheck, value ); 
+    
     User::LeaveIfError( err );
-
-    num = iList->Attribute( EAutoUpdateCheck );
-    err = cenrep->Set( KIAUpdateAutoUpdateCheck, num );
-    User::LeaveIfError( err );
-           
+    
     TUint32 ignore = KErrNone;
     User::LeaveIfError( cenrep->CommitTransaction( ignore ) );
     CleanupStack::PopAndDestroy(); // CleanupCancelTransactionPushL()
     CleanupStack::PopAndDestroy( cenrep );
-	}
-	
-	
-
-
-
-/******************************************************************************
- * class CIAUpdateSettingItemList
- ******************************************************************************/
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingItemList::CreateSettingItemL
-// 
-// -----------------------------------------------------------------------------
-//
-CAknSettingItem* CIAUpdateSettingItemList::CreateSettingItemL( TInt aSettingId )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSettingItemList::CreateSettingItemL begin");
-    CRepository* cenrep = CRepository::NewLC( KCRUidIAUpdateSettings );
-    CAknSettingItem* item = NULL;
-    
-    switch ( aSettingId )
-        {
-        case EIAUpdateSettingAccessPoint:
-            {
-            User::LeaveIfError( cenrep->Get( KIAUpdateAccessPoint, iAccessPoint ) );
-            IAUPDATE_TRACE_1("[IAUPDATE] CIAUpdateSettingItemList::CreateSettingItemL iAccessPoint: %d", iAccessPoint);
-            if ( iAccessPoint == -1 )
-                {
-                // -1 was just our private representation in cenrep of the default destination  
-                // Let's handle it as it was 0
-                iAccessPoint = 0;
-                }
-            item = CIAUpdateAccessPointSettingItem::NewL( aSettingId, iAccessPoint );
-            break;
-            }
-
-        case EIAUpdateSettingAutoUpdateCheck:
-            {
-            User::LeaveIfError( cenrep->Get( KIAUpdateAutoUpdateCheck, iAutoUpdateCheck ) );
-            item = new (ELeave) CAknEnumeratedTextPopupSettingItem
-                               ( aSettingId, iAutoUpdateCheck );
-            break;
-            }
-
-        default:
-            {
-            item = new (ELeave) CAknSettingItem( aSettingId );
-            break;
-            }
-        }
-    CleanupStack::PopAndDestroy( cenrep ); 
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateSettingItemList::CreateSettingItemL end");
-    return item;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingItemList::LoadSettingsL
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSettingItemList::LoadSettingsL()
-    {
-    CAknSettingItemList::LoadSettingsL();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingItemList::EditItemL
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSettingItemList::EditItemL( TInt aIndex, TBool aCalledFromMenu )
-    {
-    CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingItemList::SetAttribute
-// 
-// -----------------------------------------------------------------------------
-//
-
-// -----------------------------------------------------------------------------
-// CIAUpdateSettingItemList::Attribute
-// 
-// -----------------------------------------------------------------------------
-//
-TInt CIAUpdateSettingItemList::Attribute( TInt aKey )
-    {
-    TInt ret = KErrNotFound;
-    
-    switch ( aKey )
-        {
-        case CIAUpdateSettingDialog::EAccessPoint:
-            {
-            ret = iAccessPoint;
-            break;
-            }
-        case CIAUpdateSettingDialog::EAutoUpdateCheck:
-            {
-            ret = iAutoUpdateCheck;
-            break;
-            }
-        default:
-            {
-            IAUpdateDialogUtil::Panic( KErrNotSupported );
-            break;
-            }
-        }
-        
-    return ret;
     }
 
 
 // -----------------------------------------------------------------------------
-// CIAUpdateSettingItemList::CheckSettings
-// 
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateSettingItemList::CheckSettings()
-    {
-    if ( iAutoUpdateCheck != EIAUpdateSettingValueDisable &&
-         iAutoUpdateCheck != EIAUpdateSettingValueDisableWhenRoaming &&
-         iAutoUpdateCheck != EIAUpdateSettingValueEnable )
-        {
-        iAutoUpdateCheck = EIAUpdateSettingValueEnable;
-        }
-    }
-
-
-
-/******************************************************************************
- * class CIAUpdateAccessPointSettingItem
- ******************************************************************************/
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAccessPointSettingItem::NewL
-//
+// CIAUpdateSettingDialog::initializeFieldsL
 // -----------------------------------------------------------------------------
 //
-CIAUpdateAccessPointSettingItem* CIAUpdateAccessPointSettingItem::NewL(
-                   TInt aSettingId, TInt& aAccessPointId )
+void CIAUpdateSettingDialog::initializeFieldsL()
     {
-    CIAUpdateAccessPointSettingItem* item = 
-    new (ELeave) CIAUpdateAccessPointSettingItem( aSettingId, aAccessPointId );
-    CleanupStack::PushL(item);
-    item->ConstructL();
-    CleanupStack::Pop(item);
-    return item;
-	}
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAccessPointSettingItem::CIAUpdateAccessPointSettingItem
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateAccessPointSettingItem::CIAUpdateAccessPointSettingItem( 
-                                 TInt aSettingId, TInt& aAccessPointId )
-:   CAknSettingItem( aSettingId ), 
-    iAccessPointId ( aAccessPointId )
-    {
-    }
-
+    CRepository* cenrep = CRepository::NewLC( KCRUidIAUpdateSettings );
+    int destId = 0;
+    
+    // get access point id
+    User::LeaveIfError( cenrep->Get( KIAUpdateAccessPoint, destId ) );
+    
+    // save id
+    mSelection.id = destId;
+    
+    // On first time: show internet access point
+    if ( mSelection.id == 0 )
+        {
+        User::LeaveIfError(mSelection.id = getInternetSnapIdL());
+        }
 
-// -----------------------------------------------------------------------------
-// CIAUpdateAccessPointSettingItem::~CIAUpdateAccessPointSettingItem
-// 
-// -----------------------------------------------------------------------------
-//
-CIAUpdateAccessPointSettingItem::~CIAUpdateAccessPointSettingItem()
-    {
-    delete iSettingText;
-    delete iApHandler;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateAccessPointSettingItem::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateAccessPointSettingItem::ConstructL()
-    {
-    iApHandler = CIAUpdateAccessPointHandler::NewL();
-     
-    if ( iAccessPointId == 0 )
-        {
-    	iApHandler->GetDefaultConnectionLabelL( iSettingText );
+    // set destination name
+    TRAPD( err, getDestinationNameL( mSelection.id, mCurrentDest ) );
+   
+    if ( err == KErrNotFound )
+        { 
+        mSelection.id = 0;
         }
     else
         {
-        TRAPD( err, iApHandler->GetApNameL( iAccessPointId, iSettingText ) );
-        if ( err == KErrNotFound )
-            { // destination stored by IAD may be removed
-            iAccessPointId = 0;
-            iApHandler->GetDefaultConnectionLabelL( iSettingText );
-            }
-        else
-            {
-            User::LeaveIfError( err );
-            }
+         // nothing to do ?
+         User::LeaveIfError( err );
         }
+    mDestinationItem->setContentWidgetData(QString("text"), mCurrentDest);
+    
+    // set auto update value
+    int value = 0;
+    User::LeaveIfError( cenrep->Get( KIAUpdateAutoUpdateCheck, value ) );
+    
+    // map cenrep value to index
+    switch ( value )
+         {
+         case EIAUpdateSettingValueEnable:
+             value = KAutoUpdateOn; // On 
+             break;
+         case EIAUpdateSettingValueDisable:
+             value = KAutoUpdateOff; // Off
+             break;
+         case EIAUpdateSettingValueDisableWhenRoaming:
+             value = KAutoUpdateOnInHomeNetwork; // On in home network
+             break;
+         default: 
+             break;
+         }
+    
+    mAutoUpdateItem->setContentWidgetData("currentIndex", value);
+    
+   
+    CleanupStack::PopAndDestroy( cenrep ); 
+
     } 
 
 
 // -----------------------------------------------------------------------------
-// CIAUpdateAccessPointSettingItem::EditItemL
-// 
+// CIAUpdateSettingDialog::getDestinationNameL
+//
 // -----------------------------------------------------------------------------
 //
-void CIAUpdateAccessPointSettingItem::EditItemL( TBool /*aCalledFromMenu*/ )
+void CIAUpdateSettingDialog::getDestinationNameL( uint aItemUid, QString& aItemName )
     {
-    EditAccessPointItemL();
-    }
-
+    
+    if ( aItemUid == 0 )
+        {
+        aItemUid = getInternetSnapIdL();
+        }
 
-// -----------------------------------------------------------------------------
-// CIAUpdateAccessPointSettingItem::SettingTextL
-// 
-// -----------------------------------------------------------------------------
-//
-const TDesC& CIAUpdateAccessPointSettingItem::SettingTextL()
-    {
-    if ( !iSettingText )
+    RCmDestination dest = mCmManager.DestinationL( aItemUid );
+    CleanupClosePushL( dest );
+    HBufC* temp = dest.NameLC();    
+    CleanupStack::Pop( temp );
+    CleanupStack::PopAndDestroy( &dest ); 
+    
+    aItemName = XQConversions::s60DescToQString( temp->Des() );
+
+    if ( aItemName.size() == 0 ) 
         {
-    	return CAknSettingItem::SettingTextL();
+        User::Leave(KErrNotFound);
         }
-    else if ( iSettingText->Length() == 0 )
-        {
-        return CAknSettingItem::SettingTextL();
-        }
-        
-    return *iSettingText;
     }
 
-
-//------------------------------------------------------------------------------
-// CIAUpdateAccessPointSettingItem::EditAccessPointItemL
+// -----------------------------------------------------------------------------
+// ActionView::initializeView
+// -----------------------------------------------------------------------------
 //
-//------------------------------------------------------------------------------
-//	
-TBool CIAUpdateAccessPointSettingItem::EditAccessPointItemL()
+void CIAUpdateSettingDialog::initializeView()
     {
-	TInt itemUid = iAccessPointId;
-	
-	TInt ret = KErrNone;
-	
-	delete iSettingText;
-	iSettingText = NULL;
-	TRAPD( err, ret = iApHandler->ShowApSelectDialogL( itemUid, iSettingText ) );
-	
-	if ( err != KErrNone )
-	    {
-	    iAccessPointId = KErrNotFound;
-	    UpdateListBoxTextL(); // from CAknSettingItem
-	    return EFalse;
-	    }
-	
-	if ( ret == CIAUpdateAccessPointHandler::EDialogSelect )
-		{
-		iAccessPointId = itemUid;
- 	    UpdateListBoxTextL(); // from CAknSettingItem
-	    return ETrue;
-		}
-		
-	return EFalse;
+    
+    setTitle("Software update"); // txt_software_title_software_update
+    mSettingsForm->setHeading("Settings"); // txt_software_subhead_settings
+
+     //create a model class
+     HbDataFormModel *mModel = new HbDataFormModel();
+
+     // add Destination item
+     mDestinationItem = mModel->appendDataFormItem(
+         HbDataFormModelItem::ToggleValueItem, QString("Network connection")); // txt_software_formlabel_access_point
+
+     // add auto update item
+     mAutoUpdateItem = mModel->appendDataFormItem(
+        HbDataFormModelItem::ComboBoxItem, QString("Auto-check for updates")); // txt_software_setlabel_autocheck_for_updates
+     
+     // auto update selection values
+     QStringList list;
+     list.insert(0, QString("On")); // txt_software_setlabel_val_on
+     list.append(QString("Off")); // txt_software_setlabel_val_off
+     list.append(QString("On in home network")); // txt_software_setlabel_val_on_in_home_network
+     mAutoUpdateItem->setContentWidgetData("items", list);
+
+     // connect data changes for launching the access point selection dialog
+     connect(mModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), 
+                 this, SLOT(toggleChange(QModelIndex, QModelIndex)));
+
+     // connect to function called when data items are displayed
+     connect(mSettingsForm, SIGNAL(activated(QModelIndex)), 
+                      this, SLOT(activated(QModelIndex)));
+     
+     mSettingsForm->setModel(mModel);
+         
+     // set values for items
+     TRAPD(err, initializeFieldsL());
+     qt_symbian_throwIfError(err);
+}
+
+// -----------------------------------------------------------------------------
+// ActionView::getInternetSnapIdL
+// -----------------------------------------------------------------------------
+//
+uint CIAUpdateSettingDialog::getInternetSnapIdL()
+    {
+    TUint internetSnapId( 0 );
+    
+    RArray<TUint32> destinationIdArray;
+    mCmManager.AllDestinationsL( destinationIdArray );
+    
+    for ( TInt i = 0; i < destinationIdArray.Count(); i++ )
+        {
+        RCmDestination destination = mCmManager.DestinationL( destinationIdArray[i] );
+        CleanupClosePushL( destination );
+        
+        TUint32 metadata = destination.MetadataL( CMManager::ESnapMetadataPurpose );
+        if ( metadata == CMManager::ESnapPurposeInternet )
+            {
+            internetSnapId = destinationIdArray[i];
+            // Get the destination name with destination.NameLC() if need.
+            CleanupStack::PopAndDestroy( &destination );
+            break;
+            }
+        CleanupStack::PopAndDestroy( &destination );
+        }
+    destinationIdArray.Close();
+    
+    return internetSnapId;
+    
     }
 
-	
-//  End of File  
+void CIAUpdateSettingDialog::showPreviousView()
+{
+    // Save settings    
+    TRAPD(err,  saveSettingsL()); 
+    qt_symbian_throwIfError(err);
+    
+    // Switch view
+    emit toMainView();
+}
+
+void CIAUpdateSettingDialog::activated(const QModelIndex& index)
+{
+    if ( this->isActiveWindow() && index.row() == 0 )
+        {
+        }
+
+}
--- a/iaupdate/IAD/ui/src/iaupdatestatusdialog.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,278 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:    
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "iaupdatestatusdialog.h"
-#include "iaupdatedialogutil.h"
-#include "iaupdatedebug.h"
-
-#include <iaupdate.rsg>
-#include <aknmessagequerydialog.h>      // CAknMessageQueryDialog
-#include <StringLoader.h>
-#include <AknUtils.h>
-
-
-
-/*******************************************************************************
- * class CIAUpdateStatusDialog
- *******************************************************************************/
-
-/*
-A message query can contain a link text which can be highlighted and opened.
-When a query is opened and it has a link text in the beginning (visible without
-scrolling the query) the link is not highlighted. When a link becomes visible by
-scrolling the query, the link is highlighted.
-There can be multiple link texts in the query. It is highly recommended, not to
-use more than 3 link texts in one query.
-A link text can open for example a help view or another message query.
-The default softkeys are:
-SK1 OK text.softkey.ok
-
-SK1 changes to View text.softkey.view when a link text is highlighted.
-SK2 does not have a default text.
-*/
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateStatusDialog::ShowDialogL
-// 
-// -----------------------------------------------------------------------------
-TInt CIAUpdateStatusDialog::ShowDialogL( TIAUpdateDialogParam* aParam )
-	{
-	CIAUpdateStatusDialog* dialog = CIAUpdateStatusDialog::NewL( aParam );
-	CleanupStack::PushL( dialog );
-
-	TInt ret = dialog->ShowDialogL();
-
-	CleanupStack::PopAndDestroy( dialog );
-    
-    return ret;
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateStatusDialog::NewL
-//
-// -----------------------------------------------------------------------------
-CIAUpdateStatusDialog* CIAUpdateStatusDialog::NewL( TIAUpdateDialogParam* aParam )
-    {
-    CIAUpdateStatusDialog* self = new ( ELeave ) CIAUpdateStatusDialog( aParam );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateStatusDialog::CIAUpdateStatusDialog
-// 
-// -----------------------------------------------------------------------------
-//
-CIAUpdateStatusDialog::CIAUpdateStatusDialog( TIAUpdateDialogParam* aParam )
-	{
-	iParam = aParam;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateStatusDialog::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateStatusDialog::ConstructL()
-    {
-    } 
-
-
-// ----------------------------------------------------------------------------
-// Destructor
-//
-// ----------------------------------------------------------------------------
-//
-CIAUpdateStatusDialog::~CIAUpdateStatusDialog()
-    {
-    delete iBuf;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateStatusDialog::ConstructTextL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateStatusDialog::ConstructTextL()
-    {
-    _LIT(KNewLine, "\n");
-    
-    const TInt KBufSize = 1024;
-
-    delete iBuf;
-    iBuf = NULL;
-    iBuf = HBufC::NewL( KBufSize );
-    TPtr ptr = iBuf->Des();
-    
-    HBufC* hBuf = NULL;
-
-    
-    if ( iParam->iCountSuccessfull == 0 && iParam->iCountCancelled == 0 &&
-         iParam->iCountFailed == 0 )
-        {
-        hBuf = StringLoader::LoadLC( 
-        R_IAUPDATE_STATUS_DIALOG_SUCCESSFUL, iParam->iCountSuccessfull );
-        
-        ptr.Append( *hBuf );
-        ptr.Append( KNewLine );
-        CleanupStack::PopAndDestroy( hBuf );
-
-        hBuf = StringLoader::LoadLC( R_IAUPDATE_STATUS_DIALOG_TEXT_LINK );
-        ptr.Append( KOpeningLinkTag );
-        ptr.Append( *hBuf );
-        ptr.Append( KClosingLinkTag );
-        CleanupStack::PopAndDestroy( hBuf );
-        return;
-        }
-    
-    
-        
-    if ( iParam->iCountSuccessfull != 0 )
-        {
-        if ( iParam->iCountSuccessfull == 1 )
-            {
-            hBuf = StringLoader::LoadLC( R_IAUPDATE_STATUS_DIALOG_SUCCESSFUL_ONE );
-            }
-        else
-            {
-            hBuf = StringLoader::LoadLC( 
-            R_IAUPDATE_STATUS_DIALOG_SUCCESSFUL, iParam->iCountSuccessfull );
-            }
-        ptr.Append( *hBuf );
-        ptr.Append( KNewLine );
-        CleanupStack::PopAndDestroy( hBuf );
-        }
-    
-    if ( iParam->iCountCancelled != 0 )
-        {
-        if ( iParam->iCountCancelled == 1 )
-            {
-            hBuf = StringLoader::LoadLC( R_IAUPDATE_STATUS_DIALOG_CANCELLED_ONE );
-            }
-        else
-            {
-            hBuf = StringLoader::LoadLC( 
-            R_IAUPDATE_STATUS_DIALOG_CANCELLED, iParam->iCountCancelled  );
-            }
-        ptr.Append( *hBuf );
-        ptr.Append( KNewLine );
-        CleanupStack::PopAndDestroy( hBuf );
-        }
-
-    if ( iParam->iCountFailed != 0 )
-        {
-        if ( iParam->iCountFailed == 1 )
-            {
-            hBuf = StringLoader::LoadLC( R_IAUPDATE_STATUS_DIALOG_FAILED_ONE );
-            }
-        else
-            {
-            hBuf = StringLoader::LoadLC( 
-            R_IAUPDATE_STATUS_DIALOG_FAILED, iParam->iCountFailed );
-            }
-    
-        ptr.Append( *hBuf );
-        ptr.Append( KNewLine );
-        CleanupStack::PopAndDestroy( hBuf );
-        }
-    
-    if ( iParam->iShowCloseAllText )
-        {
-    	hBuf = StringLoader::LoadLC( R_IAUPDATE_CLOSE_ALL );
-    	ptr.Append( *hBuf );
-    	ptr.Append( KNewLine );
-        CleanupStack::PopAndDestroy( hBuf );
-        }
-
-
-    hBuf = StringLoader::LoadLC( R_IAUPDATE_STATUS_DIALOG_TEXT_LINK );
-    ptr.Append( KOpeningLinkTag );
-    ptr.Append( *hBuf );
-    ptr.Append( KClosingLinkTag );
-    AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
-    CleanupStack::PopAndDestroy( hBuf );
-    } 
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateStatusDialog::ShowDialogL
-// 
-// -----------------------------------------------------------------------------
-TInt CIAUpdateStatusDialog::ShowDialogL()
-	{
-	ConstructTextL();
-	
-	CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *iBuf );
-	dlg->PrepareLC( R_IAUPDATE_MESSAGE_QUERY );
-
-	HBufC* title = StringLoader::LoadLC( R_IAUPDATE_STATUS_DIALOG_TITLE );
-	CAknPopupHeadingPane* headingPane = dlg->Heading();
-	headingPane->SetTextL( *title );
-	CleanupStack::PopAndDestroy( title );
-
-	TCallBack LinkCallback( HandleLink, this );
-	dlg->SetLink( LinkCallback );
-	
-	return ( dlg->RunLD() );
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateStatusDialog::HandleLink
-//
-// Used as a callback function in message query.
-// -----------------------------------------------------------------------------
-//
-TInt CIAUpdateStatusDialog::HandleLink( TAny* aPtr )
-    {
-    TInt err = KErrNone;
-        
-    CIAUpdateStatusDialog* self = static_cast<CIAUpdateStatusDialog*>(aPtr);
-    
-    TRAP( err, self->HandleLinkL() );
-    return err;    
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateStatusDialog::HandleLink
-//
-// Used as a callback function in message query.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateStatusDialog::HandleLinkL()
-    {
-    if ( iParam->iLinkObserver )
-        {
-        iParam->iLinkObserver->TextLinkL( 0 );
-        }
-    }
-
-    
-//  End of File  
--- a/iaupdate/IAD/ui/src/iaupdatestatuspanehandler.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,212 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:    
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "iaupdatestatuspanehandler.h"
-#include "iaupdatenavipanehandler.h"
-#include "iaupdatedebug.h"
-#include "iaupdatedialogutil.h"
-
-#include <akntitle.h>           // CAknTitlePane
-#include <StringLoader.h>
-
-
-/*******************************************************************************
- * class CIAUpdateStatusPaneHandler
- *******************************************************************************/
-
-// -----------------------------------------------------------------------------
-// CIAUpdateStatusPaneHandler::NewL
-//
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateStatusPaneHandler* CIAUpdateStatusPaneHandler::NewL( CAknAppUi* aAppUi )
-    {
-    CIAUpdateStatusPaneHandler* self = new (ELeave) CIAUpdateStatusPaneHandler( aAppUi );
-	CleanupStack::PushL( self );
-	self->ConstructL();
-	CleanupStack::Pop( self );
-	return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// Destructor
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateStatusPaneHandler::~CIAUpdateStatusPaneHandler()
-    {
-	TRAP_IGNORE( RestoreOriginalTitleL() );
-	
-	delete iNaviPaneHandler;
-	delete iOriginalTitle;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateStatusPaneHandler::ConstructL
-//
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateStatusPaneHandler::ConstructL()
-    {
-    iNaviPaneHandler = new (ELeave) CIAUpdateNaviPaneHandler( iAppUi->StatusPane() );
-    iOriginalTitle = KNullDesC().AllocL();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateStatusPaneHandler::CIAUpdateStatusPaneHandler
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateStatusPaneHandler::CIAUpdateStatusPaneHandler( CAknAppUi* aAppUi ) : iAppUi(aAppUi )
-	{
-	iOriginalTitleStored = EFalse;
-	}
-
-
-// ----------------------------------------------------------------------------
-// CIAUpdateStatusPaneHandler::GetTitleL
-// 
-// ----------------------------------------------------------------------------
-//
-TBool CIAUpdateStatusPaneHandler::GetTitleL( CAknAppUi* aAppUi, HBufC*& aTitle )
-	{
-	aTitle = NULL;
-
-	CEikStatusPane* statusPane = aAppUi->StatusPane();
-    if (statusPane && statusPane->PaneCapabilities( 
-                            TUid::Uid( EEikStatusPaneUidTitle ) ).IsPresent() )
-		{
-        CAknTitlePane* titlePane = static_cast<CAknTitlePane*>
-            ( statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
-        if ( titlePane->Text() ) 
-			{
-		    aTitle = titlePane->Text()->AllocL();
-			return ETrue;
-    		}
-		}
-
-	return EFalse;
-	}
-
-
-// ----------------------------------------------------------------------------
-// CIAUpdateStatusPaneHandler::SetTitleL
-// 
-// ----------------------------------------------------------------------------
-//
-TBool CIAUpdateStatusPaneHandler::SetTitleL( CAknAppUi* aAppUi, const TDesC& aTitle )
-	{
-	CEikStatusPane* statusPane = aAppUi->StatusPane();
-    if ( statusPane && statusPane->PaneCapabilities( 
-                              TUid::Uid( EEikStatusPaneUidTitle ) ).IsPresent() )
-		{
-        CAknTitlePane* titlePane = static_cast<CAknTitlePane*>
-            ( statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
-        if ( titlePane->Text() ) 
-			{
-	   		titlePane->SetTextL( aTitle );
-			return ETrue;
-			}
-		}
-	return EFalse;
-	}
-
-
-// ----------------------------------------------------------------------------
-// CIAUpdateStatusPaneHandler::SetNaviPaneTitleL
-// 
-// ----------------------------------------------------------------------------
-//
-void CIAUpdateStatusPaneHandler::SetNaviPaneTitleL( const TDesC& aTitle )
-	{
-	iNaviPaneHandler->SetNaviPaneTitleL( aTitle );
-	}
-
-
-
-// ----------------------------------------------------------------------------
-// CIAUpdateStatusPaneHandler::StoreOriginalTitleL
-// 
-// ----------------------------------------------------------------------------
-//
-void CIAUpdateStatusPaneHandler::StoreOriginalTitleL()
-	{
-	delete iOriginalTitle;
-	iOriginalTitle = NULL;
-	TBool ret = GetTitleL( iAppUi, iOriginalTitle );
-	if ( !iOriginalTitle )
-	    {
-		iOriginalTitle = KNullDesC().AllocL();
-	    }
-	if ( ret )
-		{
-		iOriginalTitleStored = ETrue;
-		}
-	}
-
-
-// ----------------------------------------------------------------------------
-// CIAUpdateStatusPaneHandler::RestoreOriginalTitleL
-// 
-// ----------------------------------------------------------------------------
-//
-void CIAUpdateStatusPaneHandler::RestoreOriginalTitleL()
-	{
-	if ( iOriginalTitleStored )
-		{
-		SetTitleL( iAppUi, *iOriginalTitle );
-		}
-	}
-
-
-// ----------------------------------------------------------------------------
-// CIAUpdateStatusPaneHandler::SetTitleL
-// 
-// ----------------------------------------------------------------------------
-//
-void CIAUpdateStatusPaneHandler::SetTitleL( const TDesC& aText )
-	{
-	if ( iOriginalTitleStored )
-		{
-		SetTitleL( iAppUi, aText );
-		}
-	}
-
-
-// ----------------------------------------------------------------------------
-// CIAUpdateStatusPaneHandler::SetTitleL
-// 
-// ----------------------------------------------------------------------------
-//
-void CIAUpdateStatusPaneHandler::SetTitleL( TInt aResourceId )
-	{
-	HBufC* hBuf = StringLoader::LoadLC( aResourceId );
-	SetTitleL( hBuf->Des() );
-	CleanupStack::PopAndDestroy( hBuf );
-	}
-
-    
-//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/src/iaupdatetools.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,252 @@
+/*
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This module contains the implementation of IAUpdateTools functions
+*
+*/
+
+
+
+
+
+
+#include <s32mem.h>
+#include <iaupdateparameters.h>
+
+#include "iaupdatetools.h"
+#include "iaupdatedebug.h"
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::ExternalizeParametersL
+// 
+// -----------------------------------------------------------------------------
+// 
+void IAUpdateTools::ExternalizeParametersL( HBufC8*& aTarget,
+                                            const CIAUpdateParameters& aSource )
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::ExternalizeParametersL begin");
+    // Notice!
+    // If you make changes here. Also, remember to make corresponding
+    // changes to the InternalizeParametersL
+
+    // The size of the buffer will contain:
+    // - 1 TInt for UIDs,
+    // - 1 TBool for ShowProgress boolean
+    // - 1 TUint for importance
+    // - 1 TUint for type
+    // - 1 TBool for Refresh boolean
+    
+    // - 3 TInt for descriptor lengths
+    // --> bytes for 5 + 3 = 8 TInt values are needed 
+    //     (sizeof( TInt ) * KNumberOfTInts)
+    // - 3 descriptor TDesC texts
+    const TInt KNumberOfTInts( 8 );
+
+    // Notice, that because descriptor texts that are included
+    // here are TDesC, their Size-information has to be used
+    // instead of Length.
+    HBufC8* tmp = 
+        HBufC8::NewLC( sizeof( TInt ) * KNumberOfTInts
+                       + aSource.SearchCriteria().Size()
+                       + aSource.CommandLineExecutable().Size()
+                       + aSource.CommandLineArguments().Size() );
+
+    // Create stream that uses the buffer created above.
+    // By using the stream, the values are easier to insert into the buffer.
+    TPtr8 ptr( tmp->Des() );    
+    RDesWriteStream stream( ptr );
+    CleanupClosePushL( stream );
+
+    // These are integers for uids
+    IAUPDATE_TRACE_1("[IAUPDATE] uid: %x", aSource.Uid().iUid );
+    stream.WriteInt32L( aSource.Uid().iUid );
+
+    // These are length and data pairs for descriptors
+    IAUPDATE_TRACE_1("[IAUPDATE] search criteria: %S", &aSource.SearchCriteria() );
+    ExternalizeDesL( aSource.SearchCriteria(), stream );
+    IAUPDATE_TRACE_1("[IAUPDATE] command line executable: %S", &aSource.CommandLineExecutable() );
+    ExternalizeDesL( aSource.CommandLineExecutable(), stream );
+#ifdef _DEBUG
+    HBufC* temp = HBufC::NewL( aSource.CommandLineArguments().Length() );
+    temp->Des().Copy( aSource.CommandLineArguments()) ;
+    IAUPDATE_TRACE_1("[IAUPDATE] command line arguments: %S", temp );
+    delete temp;
+#endif //_DEBUG
+    ExternalizeDes8L( aSource.CommandLineArguments(), stream );
+    
+    // Boolean for ShowProgress
+    stream.WriteInt32L( aSource.ShowProgress() );
+    
+    // TUint for importance
+    stream.WriteInt32L( aSource.Importance() );
+    
+    // TUint for type
+    stream.WriteInt32L( aSource.Type() );
+    
+    // Boolean for Refresh
+    stream.WriteInt32L( aSource.Refresh() );
+
+    // Stream is not needed anymore
+    CleanupStack::PopAndDestroy( &stream );
+
+    // Remove tmp from the stack but do not delete it because it will be
+    // assigned to the aTarget below.
+    CleanupStack::Pop( tmp );
+    
+    // Replace aTarget with new value
+    delete aTarget;
+    aTarget = tmp;
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::ExternalizeParametersL end");
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::InternalizeParametersL
+// 
+// -----------------------------------------------------------------------------
+// 
+void IAUpdateTools::InternalizeParametersL( CIAUpdateParameters& aTarget, 
+                                            const TDesC8& aSource )
+    {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::InternalizeParametersL begin");
+    // Notice!
+    // If you make changes here. Also, remember to make corresponding
+    // changes to the ExternalizeParametersL
+
+    // InternalizeDesL function will set values into this tmp descriptor.
+    HBufC* tmp( NULL );
+    
+    // Create stream that uses the given buffer.
+    RDesReadStream stream( aSource );
+    CleanupClosePushL( stream );
+
+    aTarget.SetUid( TUid::Uid( stream.ReadInt32L() ) );
+    IAUPDATE_TRACE_1("[IAUPDATE] uid: %x", aTarget.Uid().iUid );
+    
+    InternalizeDesL( tmp, stream );
+    CleanupStack::PushL( tmp );
+    aTarget.SetSearchCriteriaL( *tmp );
+    IAUPDATE_TRACE_1("[IAUPDATE] search criteria: %S", tmp );
+    CleanupStack::PopAndDestroy( tmp );
+    tmp = NULL;
+        
+    InternalizeDesL( tmp, stream );
+    CleanupStack::PushL( tmp );
+    aTarget.SetCommandLineExecutableL( *tmp );
+    IAUPDATE_TRACE_1("[IAUPDATE] command line executable: %S", tmp );
+    CleanupStack::PopAndDestroy( tmp );
+    tmp = NULL;
+
+    HBufC8* tmp8( NULL );        
+    InternalizeDes8L( tmp8, stream );
+    CleanupStack::PushL( tmp8 );
+    aTarget.SetCommandLineArgumentsL( *tmp8 );
+#ifdef _DEBUG
+    tmp = HBufC::NewL( tmp8->Length() );
+    tmp->Des().Copy( *tmp8 ) ;
+    IAUPDATE_TRACE_1("[IAUPDATE] command line arguments: %S", tmp );
+    delete tmp;
+    tmp = NULL;
+#endif //_DEBUG
+    CleanupStack::PopAndDestroy( tmp8 );
+    tmp8 = NULL;
+    
+    aTarget.SetShowProgress( stream.ReadInt32L() );
+
+    // new parameters (in phase 2 IAD) do not always exist. Parameters may have written by old IAD in selfupdate case.
+    TRAPD( err, aTarget.SetImportance( stream.ReadInt32L() ) );
+    if ( err != KErrEof )
+        {
+        User::LeaveIfError( err );
+        aTarget.SetType( stream.ReadInt32L() );
+        aTarget.SetRefresh( stream.ReadInt32L() );
+        }
+     
+    IAUPDATE_TRACE_1("[IAUPDATE] show progress: %d", aTarget.ShowProgress() );
+    CleanupStack::PopAndDestroy( &stream );   
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::InternalizeParametersL end");
+    }
+
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::ExternalizeDesL
+// 
+// -----------------------------------------------------------------------------
+// 
+void IAUpdateTools::ExternalizeDesL( const TDesC& aDes, 
+                                     RWriteStream& aStream )
+    {
+    aStream.WriteInt32L( aDes.Length() );
+    aStream.WriteL( aDes );
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::InternalizeDesL
+// 
+// -----------------------------------------------------------------------------
+// 
+TInt IAUpdateTools::InternalizeDesL( HBufC*& aDes, 
+                                     RReadStream& aStream )
+    {
+    TInt length = aStream.ReadInt32L();
+    if ( length > 0 ) 
+        {
+        HBufC* target = HBufC::NewLC( length );
+        TPtr ptr( target->Des() );        
+        aStream.ReadL( ptr, length );
+        delete aDes;
+        aDes = target;
+        CleanupStack::Pop( target );
+        }
+    else
+        {
+        delete aDes;
+        aDes = KNullDesC().AllocL();
+        }
+    return length;
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::ExternalizeDes8L
+// 
+// -----------------------------------------------------------------------------
+// 
+void IAUpdateTools::ExternalizeDes8L( const TDesC8& aDes, RWriteStream& aStream )
+    {
+    aStream.WriteInt32L( aDes.Length() );
+    aStream.WriteL( aDes );
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::InternalizeDes8L
+// 
+// -----------------------------------------------------------------------------
+// 
+TInt IAUpdateTools::InternalizeDes8L( HBufC8*& aDes, RReadStream& aStream )
+    {
+    TInt length = aStream.ReadInt32L();
+    if ( length > 0 ) 
+        {
+        HBufC8* target = HBufC8::NewLC( length );
+        TPtr8 ptr( target->Des() );        
+        aStream.ReadL( ptr, length );
+        delete aDes;
+        aDes = target;
+        CleanupStack::Pop( target );
+        }
+    else
+        {
+        delete aDes;
+        aDes = KNullDesC8().AllocL();
+        }
+    return length;
+    }
--- a/iaupdate/IAD/ui/src/iaupdateuicontroller.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdateuicontroller.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -19,23 +19,18 @@
 
 
 // INCLUDES
-#include <avkon.hrh>
-#include <StringLoader.h> 
 #include <centralrepository.h>
-#include <AknUtils.h>
 #include <SWInstDefs.h>
-#include <avkon.rsg>
 #include <featurecontrol.h>
 #include <cmmanager.h>
-#include <iaupdate.rsg>
+#include <qapplication.h>
+#include <hbaction.h>
+#include <hbprogressdialog.h>
 #include <iaupdateparameters.h>
 
 #include "iaupdateuicontroller.h"
 #include "iaupdateuicontrollerobserver.h"
-#include "iaupdateappui.h"
 #include "iaupdate.hrh"
-#include "iaupdatewaitdialog.h"
-#include "iaupdateprogressdialog.h"
 #include "iaupdatenode.h"
 #include "iaupdatefwnode.h"
 #include "iaupdatebasenode.h"
@@ -45,7 +40,6 @@
 #include "iaupdateprivatecrkeys.h"
 #include "iaupdatecontrollerfile.h"
 #include "iaupdateuiconfigdata.h"
-#include "iaupdatedialogutil.h"
 #include "iaupdateutils.h"
 #include "iaupdateagreement.h"
 #include "iaupdateautomaticcheck.h"
@@ -57,13 +51,14 @@
 #include "iaupdateridentifier.h"
 #include "iaupdateruids.h"
 #include "iaupdaterdefs.h"
-#include "iaupdatetools.h"
 #include "iaupdateparametersfilemanager.h"
 #include "iaupdateerrorcodes.h"
 #include "iaupdatefileconsts.h"
 #include "iaupdatefirsttimeinfo.h"
 #include "iaupdaterefreshhandler.h"
 #include "iaupdatenodeid.h"
+#include "iaupdatewaitdialog.h"
+#include "iaupdatedialogutil.h"
 #include "iaupdatedebug.h"
 
 
@@ -252,6 +247,7 @@
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::~CIAUpdateUiController() begin");
 
     CancelOperation();
+    delete mWaitDialog;
     delete iController;
     iNodes.Reset();
     iFwNodes.Reset();
@@ -266,13 +262,14 @@
     delete iRoamingHandler;
     delete iParams;
     delete iRefreshHandler;
+    delete mDialogUtil;
 
     // If dialogs have not been released yet, release them now.
     // ProcessFinishedL() should normally be used for dialogs but
     // here just use non-leaving delete. In normal cases, dialogs should
     // already be released in the end of the update flow before coming here.
-    delete iWaitDialog;
-    delete iProgressDialog;
+    //delete iWaitDialog;
+    //delete iProgressDialog;
         
 	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::~CIAUpdateUiController() end");
     }        
@@ -313,7 +310,7 @@
 void CIAUpdateUiController::CheckUpdatesL()
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::CheckUpdatesL() begin");
-
+    
     iCountOfAvailableUpdates = 0;
     
     if ( iParams )
@@ -322,7 +319,7 @@
     	iParams = NULL;
         }
      
-    TBool agreementAccepted( EFalse ); 
+    TBool agreementAccepted( EFalse );
     if ( !ForcedRefresh() )
         {
         CIAUpdateAgreement* agreement = CIAUpdateAgreement::NewLC();
@@ -334,10 +331,47 @@
             // Refresh from network is allowed when first time case 
             iRefreshFromNetworkDenied = EFalse;
             agreementAccepted = agreement->AcceptAgreementL();  
+            if (!agreementAccepted)
+                {
+                if ( !mDialogUtil )
+                    {
+                    mDialogUtil = new IAUpdateDialogUtil(NULL, this);
+                    }
+                if ( mDialogUtil )
+                    {
+                    mPrimaryAction = NULL;
+                    //mPrimaryAction = new HbAction(hbTrId("txt_software_button_accept"));
+					mPrimaryAction = new HbAction("Accept");
+                    HbAction *secondaryAction = NULL;
+                    //secondaryAction = new HbAction(hbTrId("txt_software_button_decline"));
+					secondaryAction = new HbAction("Decline");
+                    mDialogUtil->showAgreement(mPrimaryAction,secondaryAction);
+                    iDialogState = EAgreement;
+                    }
+                }
             }
         CleanupStack::PopAndDestroy( agreement );
         }
-  	             
+    if ( iDialogState != EAgreement )
+        {
+        AgreementHandledL();
+        }
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::CheckUpdatesL() end");
+    return;
+    }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateUiController:: AgreementHandledL
+// Updates the update item list.
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateUiController::AgreementHandledL()
+    {
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::AgreementHandledL() begin");
+    TBool agreementAccepted( EFalse );
+    CIAUpdateAgreement* agreement = CIAUpdateAgreement::NewLC();
+    agreementAccepted = agreement->AgreementAcceptedL();
+    CleanupStack::PopAndDestroy( agreement );        
     if ( !agreementAccepted && !ForcedRefresh() )
         {
         if ( iRequestType == IAUpdateUiDefines::ECheckUpdates )
@@ -358,9 +392,7 @@
        	    }
        	else
        	    {
-       	    CIAUpdateAppUi* appUi = 
-       	            static_cast< CIAUpdateAppUi* >( iEikEnv->EikAppUi() );
-            appUi->Exit();
+       	    qApp->quit();
        	    return;	
        	    }
         }
@@ -401,7 +433,7 @@
             }	
         }
 
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::CheckUpdatesL() end");
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::AgreementHandledL() end");
     }
 
 
@@ -423,10 +455,18 @@
                 
     if ( !IAUpdateUtils::SpaceAvailableInInternalDrivesL( iSelectedNodesArray ) )
         {
-  	    HBufC* noteText = NULL;
-        noteText = StringLoader::LoadLC( R_IAUPDATE_INSUFFICIENT_MEMORY );
-        IAUpdateDialogUtil::ShowInformationQueryL( *noteText ); 
-        CleanupStack::PopAndDestroy( noteText );
+        if ( !mDialogUtil )
+            {
+            mDialogUtil = new IAUpdateDialogUtil(NULL, this);
+            }
+        if ( mDialogUtil )
+            {
+            mPrimaryAction = NULL;
+            mPrimaryAction = new HbAction(hbTrId("txt_common_button_ok"));
+            //mDialogUtil->showInformation(hbTrId("txt_software_info_insufficient_memory_free_some_m"), mPrimaryAction);
+			mDialogUtil->showInformation(QString("Insufficient memory. Free some memory and try again."), mPrimaryAction);
+            iDialogState = EInsufficientMemory;
+            }
         }
     else
         {
@@ -445,7 +485,12 @@
         // controller can handle situations as a whole and not as one item at the
         // time.
         iController->StartingUpdatesL();
-            
+        
+        //Store current node list before update
+        iFilter->StoreNodeListL( iNodes );
+        
+        iFilter->SortSelectedNodesFirstL( iSelectedNodesArray, iNodes );
+                    
         iFileInUseError = EFalse;
         // Set the node index to -1 because ContinueUpdateL increases it by one
         // in the beginning of the function. So, we can use the ContinueUpdateL
@@ -509,7 +554,8 @@
             // Only update items that have not been installed yet.
             if ( !selectedNode->IsInstalled() )
                 {
-                IAUPDATE_TRACE("[IAUPDATE] Item not installed yet");    
+                IAUPDATE_TRACE("[IAUPDATE] Item not installed yet"); 
+                iFilter->SortThisNodeFirstL( selectedNode, iNodes );
                 if ( !selectedNode->IsDownloaded() )
                     {
                     // Because content has not been downloaded or installed yet,
@@ -518,10 +564,8 @@
                     selectedNode->DownloadL( *this );
                     iState = EDownloading;
                     iClosingAllowedByClient = ETrue;
-                    ShowUpdatingDialogL( R_IAUPDATE_DOWNLOADING_NOTE,
-                                         selectedNode->Base().Name(),
-                                         iNodeIndex + 1,
-                                         iSelectedNodesArray.Count() ); 
+                    selectedNode->SetUiState( MIAUpdateNode::EDownloading );
+                    iObserver.RefreshUI();
                     nextUpdate = EFalse;
                     }
                 else
@@ -532,13 +576,8 @@
                     selectedNode->InstallL( *this );
                     iState = EInstalling;
                     iClosingAllowedByClient = EFalse;
-                    CIAUpdateAppUi* appUi = 
-                        static_cast< CIAUpdateAppUi* >( iEikEnv->EikAppUi() );
-                    appUi->StartWGListChangeMonitoring();
-                    ShowUpdatingDialogL( R_IAUPDATE_INSTALLING_NOTE,
-                                         selectedNode->Base().Name(),
-                                         iNodeIndex + 1,
-                                         iSelectedNodesArray.Count() ); 
+                    selectedNode->SetUiState( MIAUpdateNode::EInstalling );
+                    iObserver.RefreshUI();
                     nextUpdate = EFalse;                     
                     }      
                 }
@@ -572,14 +611,9 @@
             
     aNode.InstallL( *this );
     iState = EInstalling;
-    CIAUpdateAppUi* appUi = static_cast<CIAUpdateAppUi*>( iEikEnv->EikAppUi() );
-    appUi->StartWGListChangeMonitoring();
-    iClosingAllowedByClient = EFalse;
-    ShowUpdatingDialogL( R_IAUPDATE_INSTALLING_NOTE,
-                         aNode.Base().Name(),
-                         iNodeIndex + 1,
-                         iSelectedNodesArray.Count()  );
-    
+    aNode.SetUiState( MIAUpdateNode::EInstalling );
+    iObserver.RefreshUI();
+        
 	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::StartInstallL() end");
     }
 
@@ -614,17 +648,13 @@
                 if ( allowNetworkRefresh )
                     {
                     iEikEnv->RootWin().SetOrdinalPosition( 0, ECoeWinPriorityNormal );
-                    HBufC* noteText = StringLoader::LoadLC( R_IAUPDATE_REFRESHING_UPDATE_LIST );
-                    ShowWaitDialogL( *noteText, ETrue );
-                    CleanupStack::PopAndDestroy( noteText );
+                    ShowWaitDialogL( "Refreshing updates list", ETrue );
                     }
                 }
             }
         else
             {
-            HBufC* noteText = StringLoader::LoadLC( R_IAUPDATE_REFRESHING_UPDATE_LIST );
-            ShowWaitDialogL( *noteText, EFalse );
-            CleanupStack::PopAndDestroy( noteText );
+            ShowWaitDialogL( "Refreshing updates list", ETrue );
             }
         }
     
@@ -1303,8 +1333,8 @@
 
     if ( aErrorCode == IAUpdaterDefs::KIAUpdaterShutdownRequest )
         {
-        CIAUpdateAppUi* appUi = static_cast<CIAUpdateAppUi*>( iEikEnv->EikAppUi() );
-    	appUi->Exit();
+        //CIAUpdateAppUi* appUi = static_cast<CIAUpdateAppUi*>( iEikEnv->EikAppUi() );
+    	//appUi->Exit();
         }
 
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::SelfUpdaterComplete() end");
@@ -1356,15 +1386,15 @@
 // -----------------------------------------------------------------------------
 //
 void CIAUpdateUiController::DownloadProgress( MIAUpdateNode& /*aNode*/, 
-                                              TUint aProgress,
-                                              TUint aMaxProgress )
+                                              TUint /*aProgress*/,
+                                              TUint /*aMaxProgress*/ )
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::DownloadProgress() begin");  
 
     if ( iProgressDialog )
         {
-    	TRAP_IGNORE ( iProgressDialog->SetProgressDialogFinalValueL( aMaxProgress ) );
-        TRAP_IGNORE ( iProgressDialog->UpdateProgressDialogValueL( aProgress ) );
+    	//TRAP_IGNORE ( iProgressDialog->SetProgressDialogFinalValueL( aMaxProgress ) );
+        //TRAP_IGNORE ( iProgressDialog->UpdateProgressDialogValueL( aProgress ) );
         }
 
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::DownloadProgress() end");  
@@ -1420,8 +1450,8 @@
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::InstallComplete() begin");
 
     iState = EIdle;
-    CIAUpdateAppUi* appUi = static_cast<CIAUpdateAppUi*>( iEikEnv->EikAppUi() );
-    appUi->StopWGListChangeMonitoring();
+    //CIAUpdateAppUi* appUi = static_cast<CIAUpdateAppUi*>( iEikEnv->EikAppUi() );
+    //appUi->StopWGListChangeMonitoring();
     if ( aError == SwiUI::KSWInstErrFileInUse )
         {
     	iFileInUseError = ETrue;
@@ -1535,29 +1565,52 @@
 
 
 // -----------------------------------------------------------------------------
-// CIAUpdateUiController::HandleDialogExitL
-// Called when wait/progress dialog is about to be cancelled.
+// CIAUpdateUiController::HandleWaitDialogCancel
+// Called when wait dialog is cancelled.
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 //
-TBool CIAUpdateUiController::HandleDialogExitL( TInt aButtonId )
+void CIAUpdateUiController::HandleWaitDialogCancel()
     {
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::HandleDialogExitL() begin");
-    IAUPDATE_TRACE_1("[IAUPDATE] button id: %d", aButtonId );
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::HandleWaitDialogCancel() begin");
     
-    TInt ret( ETrue );
-    if ( aButtonId == EAknSoftkeyCancel )
-        {  
-        TRAPD ( err, HandleUserCancelL() );
-        if ( err != KErrNone )
-            {
-        	iObserver.HandleLeaveErrorL( err );
-            }
-        }   
+    TRAPD ( err, HandleUserCancelL() );
+    if ( err != KErrNone )
+        {
+      	iObserver.HandleLeaveErrorL( err );
+        }
+
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::HandleWaitDialogCancel() end");
+
+    }
 
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::HandleDialogExitL() end");
+// -----------------------------------------------------------------------------
+// CIAUpdateUiController::dialogFinished
+// Called when dialog is finished.
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateUiController::dialogFinished(HbAction *action)
+    {
+    TDialogState dialogState = iDialogState;
+    iDialogState = ENoDialog;
+    
+    switch ( dialogState )
+        {
+        case EAgreement:
+            if ( action == mPrimaryAction )
+                 {
+                CIAUpdateAgreement* agreement = CIAUpdateAgreement::NewLC();
+                agreement->SetAgreementAcceptedL();
 
-    return ret;    
+                CleanupStack::PopAndDestroy(agreement);
+                }
+            AgreementHandledL();        
+            break;
+        case EInsufficientMemory:    
+            break;
+        default: 
+            break;
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -1575,8 +1628,8 @@
 	    }
 	else if ( iState == EIdle )
 	    {
-	    CIAUpdateAppUi* appUi = static_cast< CIAUpdateAppUi* >( iEikEnv->EikAppUi() );
-        if ( appUi->UiRefreshAllowed() )
+	    //CIAUpdateAppUi* appUi = static_cast< CIAUpdateAppUi* >( iEikEnv->EikAppUi() );
+        //if ( appUi->UiRefreshAllowed() )
 		    {
 	    	iState = EUiRefreshing;
 	        // store node identification (Id and namespace) of currently selected nodes
@@ -1594,10 +1647,10 @@
                 CleanupStack::Pop( nodeId );
                 
                 }
-
-            if ( iFwNodes.Count() > 0 )
+            
+	    	for ( TInt j = 0; j < iFwNodes.Count(); ++j )
                 {
-                MIAUpdateFwNode* fwNode( iFwNodes[ 0 ] );
+                MIAUpdateFwNode* fwNode( iFwNodes[ j ] );
                 CIAUpdateNodeId* nodeId = CIAUpdateNodeId::NewLC();
                 nodeId->SetIdL( fwNode->Base().MetaId() );
                 nodeId->SetNamespaceL( fwNode->Base().MetaNamespace() );
@@ -1880,10 +1933,16 @@
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::InstallCompleteL() begin");
     IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError );
 
-    // In release mode, we do not need the aError info, because
-    // success counters are counted by using the last operation error info
-    // when counter info is asked. In debug mode the error code is logged above.
-    (void)aError;
+    if ( aError == KErrNone )
+        {
+        aNode.SetUiState( MIAUpdateNode::EUpdated );   
+        iObserver.RefreshUI();
+        }
+    else
+        {
+        aNode.SetUiState( MIAUpdateNode::EFailed );
+        iObserver.RefreshUI();
+        }
     
     // pass UID of installed package to starter
     if ( iStarter )
@@ -1928,17 +1987,7 @@
 
     iState = EIdle;
     iClosingAllowedByClient = EFalse;
-
-    // Remove installed nodes from the node array.
-	for ( TInt i = iNodes.Count() - 1; i >= 0; --i ) 
-        {   
-        MIAUpdateNode* node = iNodes[ i ];
-        if ( node->IsInstalled() ) 
-            {
-            iNodes.Remove( i );
-            }
-        }
-    
+       
     TInt error( aError );
     TBool selfUpdaterStarted( EFalse );
 
@@ -1997,9 +2046,12 @@
         // completion or timer will call the callback later. But, that callback
         // will be ignored in CIAUpdateUiController::ServerReportSent because
         // iState is already then changed from ESendingReport to something else. 
-        const TInt KServerReportMaxWaitTime( 10000000 );
-        iController->FinishedUpdatesL( ETrue, KServerReportMaxWaitTime );
-        iState = ESendingReport;
+        
+        //const TInt KServerReportMaxWaitTime( 10000000 );         //Commented TEMP 
+        //iController->FinishedUpdatesL( ETrue, KServerReportMaxWaitTime ); //Commented TEMP
+        //iState = ESendingReport;  //Commented temporarily
+        EndUpdateFlowL( KErrNone );  //TEMP
+        return;                      //TEMP  
         }
 
     // When reports are sent, EndUpdateFlowL is called via the callback functions
@@ -2097,6 +2149,7 @@
 // 
 // ---------------------------------------------------------------------------
 //
+/*
 void CIAUpdateUiController::ShowUpdatingDialogL( TInt aTextResourceId,
                                                  const TDesC& aName,
                                                  TInt aNumber,
@@ -2117,18 +2170,18 @@
     numberArray->AppendL( aNumber ); 
     numberArray->AppendL( aTotalCount );
     HBufC* noteText = NULL;
-    noteText = StringLoader::LoadLC( aTextResourceId, 
-                                     *stringArray, 
-                                     *numberArray );
+    //noteText = StringLoader::LoadLC( aTextResourceId, 
+    //                                 *stringArray, 
+    //                                 *numberArray );
     TPtr ptr = noteText->Des();
-    AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
+    //AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
     if ( iState == EDownloading )
         {
     	ShowProgressDialogL( *noteText, ETrue );
         }
     else
         {
-        ShowWaitDialogL( *noteText, ETrue );	
+        //ShowWaitDialogL( *noteText, ETrue );	
         }
     
     CleanupStack::PopAndDestroy( noteText ); 
@@ -2136,7 +2189,7 @@
     CleanupStack::PopAndDestroy( stringArray );
 
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::ShowUpdatingDialogL() end");
-    }
+    }*/
  
 
 // ---------------------------------------------------------------------------
@@ -2144,39 +2197,48 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CIAUpdateUiController::ShowWaitDialogL( const TDesC& aDisplayString, 
-                                             TBool aVisibilityDelayOff ) 
+void CIAUpdateUiController::ShowWaitDialogL( const QString& aDisplayString, 
+                                             TBool /*aVisibilityDelayOff*/ ) 
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::ShowWaitDialogL() begin");
-
-    if ( iWaitDialog )
+    if ( !mWaitDialog )
+        {
+        mWaitDialog = new IAUpdateWaitDialog();
+        mWaitDialog->SetCallback( this );
+        mWaitDialog->showDialog( aDisplayString );
+        }
+    
+    
+    
+    
+    /*if ( iWaitDialog )
         {
         IAUPDATE_TRACE("[IAUPDATE] Wait dialog already existed. Remove it first");
         // in some rare cases previous dialog still exists
         // it's now just deleted (not recommended way) to avoid forwarding problem(s). 
-        delete iWaitDialog;
+        //delete iWaitDialog;
         iWaitDialog = NULL;
-        }
-    iWaitDialog = 
+        }*/
+ /*   iWaitDialog = 
         new( ELeave ) CIAUpdateWaitDialog( 
             reinterpret_cast< CEikDialog** >( &iWaitDialog ),
             aVisibilityDelayOff );
                 
     iWaitDialog->SetTextL( aDisplayString );
     iWaitDialog->SetCallback( this );        
-    iWaitDialog->ExecuteLD( R_IAUPDATE_WAIT_DIALOG );
+    iWaitDialog->ExecuteLD( R_IAUPDATE_WAIT_DIALOG ); */
 
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::ShowWaitDialogL() end");
     }
 
 
-// ---------------------------------------------------------------------------
+// --------------------------------------------------------------------------
 // CIAUpdateUiController::ShowProgressDialogL
 // 
 // ---------------------------------------------------------------------------
 //
-void CIAUpdateUiController::ShowProgressDialogL( const TDesC& aDisplayString, 
-                                                 TBool aVisibilityDelayOff ) 
+void CIAUpdateUiController::ShowProgressDialogL( const TDesC& /*aDisplayString*/, 
+                                                 TBool /*aVisibilityDelayOff*/ ) 
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::ShowProgressDialogL() begin");
 
@@ -2185,17 +2247,17 @@
         IAUPDATE_TRACE("[IAUPDATE] Progress dialog already existed. Remove it first");
         // in some rare cases previous dialog still exists
         // it's now just deleted (not recommended way) to avoid forwarding problem(s). 
-        delete iProgressDialog;
+        //delete iProgressDialog;
         iProgressDialog = NULL;
         }
-    iProgressDialog = 
+/*    iProgressDialog = 
         new( ELeave ) CIAUpdateProgressDialog( 
             reinterpret_cast< CEikDialog** >( &iProgressDialog ),
             aVisibilityDelayOff );
                 
     iProgressDialog->SetTextL( aDisplayString );
     iProgressDialog->SetCallback( this );        
-    iProgressDialog->ExecuteLD( R_IAUPDATE_PROGRESS_DIALOG );
+    iProgressDialog->ExecuteLD( R_IAUPDATE_PROGRESS_DIALOG ); */
 
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::ShowProgressDialogL() end");
     }
@@ -2225,15 +2287,18 @@
 void CIAUpdateUiController::RemoveWaitDialogL()
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::RemoveWaitDialogL() begin");
-
-    if ( !iCancelling )  //that's needed because AVKON  in 3.2.3 wk12, returning
+    if ( mWaitDialog )
+        {
+        mWaitDialog->close();  
+        }
+    /*if ( !iCancelling )  //that's needed because AVKON  in 3.2.3 wk12, returning
                          //EFalse in TryToExitL() causes a crash   
         {
     	if ( iWaitDialog )
             {
     	    iWaitDialog->ProcessFinishedL();
             }
-        }
+        }*/
     
 	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::RemoveWaitDialogL() end");
     }
@@ -2253,7 +2318,7 @@
         {
     	if ( iProgressDialog )
             {
-    	    iProgressDialog->ProcessFinishedL();
+    	    //iProgressDialog->ProcessFinishedL();
             }
         }
     
@@ -2657,6 +2722,32 @@
     }
 
 // ---------------------------------------------------------------------------
+// CIAUpdateUiController::RefreshNodeList
+// 
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateUiController::RefreshNodeList()
+    {
+    // Restore list after update, that nodes are shown in original sequence
+    iFilter->RestoreNodeListL( iNodes );
+    // Remove installed nodes from the node array.
+    // Set temp UI state to normal for remaining nodes 
+    for ( TInt i = iNodes.Count() - 1; i >= 0; --i ) 
+        {   
+        MIAUpdateNode* node = iNodes[ i ];
+        if ( node->IsInstalled() ) 
+            {
+            iNodes.Remove( i );
+            }
+        else
+            {
+            node->SetUiState( MIAUpdateNode::ENormal );        
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
 // CIAUpdateUiController::ParamsWriteFileL
 // 
 // ---------------------------------------------------------------------------
--- a/iaupdate/IAD/ui/src/iaupdatewaitdialog.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdatewaitdialog.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:   This file contains the implementation of CIAUpdateWaitDialog
+* Description:   This file contains the implementation of IAUpdateWaitDialog
 *                class member functions.
 *
 */
@@ -19,6 +19,8 @@
 
 
 // INCLUDE FILES
+#include <hbprogressdialog.h>
+
 #include "iaupdatewaitdialog.h"
 #include "iaupdatewaitdialogobserver.h"
 
@@ -27,51 +29,66 @@
 // ========================= MEMBER FUNCTIONS ================================
 
 // -----------------------------------------------------------------------------
-// CIAUpdateDialogs::CIAUpdateDialogs
-// C++ default constructor can NOT contain any code, that
-// might leave.
+// IAUpdateWaitDialog::IAUpdateWaitDialog
 // -----------------------------------------------------------------------------
 //
-CIAUpdateWaitDialog::CIAUpdateWaitDialog( CEikDialog** aSelfPtr, 
-                                TBool aVisibilityDelayOff )
-    :CAknWaitDialog( aSelfPtr, aVisibilityDelayOff )
-    {
-    }
+IAUpdateWaitDialog::IAUpdateWaitDialog() 
+{
+    mCallback = NULL;
+    mWaitDialog = NULL;
+}
 
 // -----------------------------------------------------------------------------
-// CIAUpdateDialogs::~CIAUpdateDialogs
+// IAUpdateWaitDialog::~IAUpdateWaitDialog
 // Destructor
 // -----------------------------------------------------------------------------
 //
-CIAUpdateWaitDialog::~CIAUpdateWaitDialog()
+IAUpdateWaitDialog::~IAUpdateWaitDialog()
+{
+    if (mWaitDialog)
     {
+        //mWaitDialog->close();  //TODO: is there need to close/delete progressdialog, it's selfdeleted in close()
     }
+}
 
 // ---------------------------------------------------------------------------
-// CIAUpdateWaitDialog::OkToExitL()
-// called by framework when the Softkey is pressed. 
-// On cancel either stop installation or exit 
+// IAUpdateWaitDialog::showDialog()
 // ---------------------------------------------------------------------------
 //
-TBool CIAUpdateWaitDialog::OkToExitL( TInt aButtonId )
+int IAUpdateWaitDialog::showDialog(const QString& text)
+{
+    if (!mWaitDialog)
     {
-    TBool result( ETrue );
-    
-    if ( iCallback )
-        {
-        result = iCallback->HandleDialogExitL( aButtonId );
-        }
-
-    return result;
+        mWaitDialog = new HbProgressDialog(HbProgressDialog::WaitDialog);
+        connect(mWaitDialog, SIGNAL(cancelled()), this, SLOT(dialogCancelled()));
     }
-
+    mWaitDialog->setText(text);
+    mWaitDialog->setTimeout(HbPopup::NoTimeout);
+    mWaitDialog->show();
+    return 0;
+}
 // ---------------------------------------------------------------------------
-// CIAUpdateWaitDialog::SetCallback
+// IAUpdateWaitDialog::SetCallback
 // ---------------------------------------------------------------------------
 //
-void CIAUpdateWaitDialog::SetCallback( MIAUpdateWaitDialogObserver* aCallback )
+void IAUpdateWaitDialog::SetCallback(MIAUpdateWaitDialogObserver* callback)
+{
+    mCallback = callback;
+}
+
+void IAUpdateWaitDialog::close()
+{
+    if (mWaitDialog)  
     {
-    iCallback = aCallback;
+       mWaitDialog->close();     
     }
+}
 
+void IAUpdateWaitDialog::dialogCancelled()
+{
+    if (mCallback)
+    {
+        mCallback->HandleWaitDialogCancel();        
+    }
+}
 // End of File
--- a/iaupdate/IAD/updater/group/iaupdater.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/updater/group/iaupdater.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -34,6 +34,10 @@
 
 MW_LAYER_SYSTEMINCLUDE
 
+SYSTEMINCLUDE     /epoc32/include/mw/hb
+SYSTEMINCLUDE     /epoc32/include/mw/hb/hbcore 
+SYSTEMINCLUDE     /epoc32/include/mw/hb/hbwidgets
+
 USERINCLUDE     ../inc
 USERINCLUDE     ../updaterfiles/inc
 USERINCLUDE     ../../loc
@@ -55,34 +59,23 @@
 LIBRARY         apmime.lib
 LIBRARY         apparc.lib
 LIBRARY         sisregistryclient.lib
-LIBRARY         swinstcli.lib
-LIBRARY         aknnotify.lib
-LIBRARY         bafl.lib 
 LIBRARY         estor.lib
 LIBRARY         commonengine.lib
-LIBRARY         avkon.lib
 LIBRARY         ws32.lib 
 LIBRARY         ecom.lib
 
+LIBRARY         sif.lib
+LIBRARY         hbcore.lib
+LIBRARY         hbwidgets.lib
+
 // Updater files dll
 LIBRARY         iaupdaterfiles.lib
 
 DEBUGLIBRARY    flogger.lib
 
-START RESOURCE  ../src/iaupdater.rss
-HEADER
-TARGETPATH      APP_RESOURCE_DIR
-#ifdef __S60_32__
-LANG            SC
-#else
-LANGUAGE_IDS
-#endif
-END
-
 // This is required to allow iaupdate to start the updater
 // by finding the updater EXE file name by using the UID value.
 START RESOURCE  ../src/iaupdater_reg.rss
-DEPENDS iaupdater.rsg
 TARGETPATH	    /private/10003a3f/apps
 END //RESOURCE
 
--- a/iaupdate/IAD/updater/inc/iaupdaterdialog.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/updater/inc/iaupdaterdialog.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -24,32 +24,27 @@
 #include <e32base.h>
 #include <f32file.h>
 #include <barsc.h>
-#include <AknGlobalNote.h>
+
+#include <hbdeviceprogressdialogsymbian.h>
 
 // FORWARD DECLARATIONS
 class MIAUpdaterCancelObserver;
-
 /**
 * Class for showing the global note dialog when installing self update.
-* 
-*  @code   
-*  @endcode
-*  @lib 
-*  @since S60 
 */
-class CIAUpdaterDialog : public CActive
+class CIAUpdaterDialog : public CBase,
+                         public MHbDeviceProgressDialogObserver
     {
 public:  
         
     /**
      * Two-phased constructor.
      */
-    static CIAUpdaterDialog* NewL( RFs& aFs, MIAUpdaterCancelObserver& aObserver ); 
-
+    static CIAUpdaterDialog* NewL( MIAUpdaterCancelObserver& aObserver );
     /**
      * Two-phased constructor.
      */
-    static CIAUpdaterDialog* NewLC( RFs& aFs, MIAUpdaterCancelObserver& aObserver );
+    static CIAUpdaterDialog* NewLC( MIAUpdaterCancelObserver& aObserver );
 
             
     /**
@@ -74,60 +69,59 @@
      */
     void CancelWaitingNoteL();
 
+    /**
+     * From base class MHbDeviceProgressDialogObserver
+     */
+    void ProgressDialogCancelled(
+        const CHbDeviceProgressDialogSymbian* aProgressDialog);
+    
+    /**
+    * From base class MHbDeviceProgressDialogObserver
+    */
+    void ProgressDialogClosed(
+         const CHbDeviceProgressDialogSymbian* aProgressDialog);
+
+
 
 private:
 
     /**
      * Constructor.
      */  
-    CIAUpdaterDialog( RFs& aFs, MIAUpdaterCancelObserver& aObserver );
+    CIAUpdaterDialog( MIAUpdaterCancelObserver& aObserver );
      
     /**
      * 2nd phase constructor.
      */
     void ConstructL();
 
-
-    /**
-     * Read resource string.
-     * @since 
-     * @param aResourceId Id of the resource.
-     * @return Resource buffer.
-     */
-    HBufC* ReadResourceLC( TInt aResourceId );    
-        
-private: // from CActive
-
+    
     /**
-     * Cancels async request 
-     * @see CActive::DoCancel
-     *
+     * Destroy wait note.
      */
-    void DoCancel();
-
-    /**
-     * When the server side has finished operation, the CActive object will
-     * be informed about it, and as a result RunL will be called. This function
-     * well inform the observer that the operation has been completed.
-     * @see CActive::RunL
-     *
-     */
-    void RunL();
+    void CIAUpdaterDialog::DestroyGlobalWaitNote();
+    
 
 private: // data
 
-    // Resource file.
-    RResourceFile iResourceFile;
-
-    // File server handle.        
-    RFs& iFs;        
-                   
-    CAknGlobalNote* iNote;
+    /**
+     * Not owned, install observer.
+     */
+    MIAUpdaterCancelObserver* iObserver; 
+    /**
+    * Own, Global wait note.
+    */
+    CHbDeviceProgressDialogSymbian* iGlobalWaitNote;
     
-    // Dialog id for canceling dialog. 
-    TInt iNoteId;
-        
-    MIAUpdaterCancelObserver* iObserver; //not owned
+    /**
+    * Own, resouce of global note.
+    */
+    HBufC* iGlobalResource;
+    
+    /**
+     * Check Load Success .ts file successfully or not
+     */
+    TBool iIsResolverSuccess;
         
     };
 
--- a/iaupdate/IAD/updater/inc/iaupdatersilentlauncher.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/updater/inc/iaupdatersilentlauncher.h	Tue Aug 31 15:21:33 2010 +0300
@@ -24,14 +24,12 @@
 #include <f32file.h>
 #include <SWInstApi.h>
 
+#include <usif/sif/sif.h>
+
 
 /**
  * Class that handles the launching of silent installation.
  *
- *  @code   
- *  @endcode
- *  @lib 
- *  @since S60 
  */ 
 class CIAUpdaterSilentLauncher : public CBase
     {
@@ -81,13 +79,13 @@
      * @return SwiUI::TInstallOptions Options that are used for
      * silent installation.
      */
-    SwiUI::TInstallOptions SilentInstallOptionsL() const;
+    void  UsifSilentInstallOptionsL( Usif::COpaqueNamedParams * aOptions );
 
 private: //  Data
-        
-    SwiUI::RSWInstSilentLauncher iLauncher;   
     
-    SwiUI::TInstallOptionsPckg iOptionsPckg;   
+    Usif::RSoftwareInstall iLauncher;
+    Usif::COpaqueNamedParams* iOptionsPckg; 
+    Usif::COpaqueNamedParams* iResults;
 
     RFs& iFs;        
     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/updater/sis/Rd.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICzDCCAjWgAwIBAgIBADANBgkqhkiG9w0BAQUFADArMRAwDgYDVQQKEwdSRCBD
+ZXJ0MRcwFQYDVQQDEw5SRCBDZXJ0aWZpY2F0ZTAeFw0wNDExMTUxMjQyMDZaFw0z
+NzA5MjMxMjQyMDZaMCsxEDAOBgNVBAoTB1JEIENlcnQxFzAVBgNVBAMTDlJEIENl
+cnRpZmljYXRlMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDLRF+r1FGGkCwT
+rb420kbnAps7gi1yYUcXYUdWeFTuBeQe5eW46Y+LWaA8HMlDdoHRB0FgASisYcFa
+gwno9+oFf4AJka4H1gWEs5XTGwAA1s0d8XGh7W7Dt9F5FZij8F7/9Pi6+FhhxZFI
+f1DD+yry9D7+Sp+BgdNALe4XOpf25QIBA6OCAQAwgf0wDAYDVR0TBAUwAwEB/zAL
+BgNVHQ8EBAMCAoQwHQYDVR0OBBYEFFi/kuGzxhVpjGxe9ZwlxC3fH9jFMFMGA1Ud
+IwRMMEqAFFi/kuGzxhVpjGxe9ZwlxC3fH9jFoS+kLTArMRAwDgYDVQQKEwdSRCBD
+ZXJ0MRcwFQYDVQQDEw5SRCBDZXJ0aWZpY2F0ZYIBADBsBgNVHSAEZTBjMGEGBFUd
+IAAwWTATBggrBgEFBQcCARYHaHR0cDovLzBCBggrBgEFBQcCAjA2GjRGb3IgUiZE
+IHVzYWdlIG9ubHkuIFRoaXMgY2VydGlmaWNhdGUgaXMgbm90IHRydXN0ZWQuMA0G
+CSqGSIb3DQEBBQUAA4GBAHGB4RQMAgBdeT2hxfOr6f2nA/dZm+M5yX5daUtZnET9
+Ed0A9sazLawfN2G1KFQT9kxEParAyoAkpbMAsRrnRz/9cM3OHgFm/NiKRnf50DpT
+7oCx0I/65mVD2kt+xXE62/Ii5KPnTufIkPi2uLvURCia1tTS8JmJ8dtxDGyQt8BR
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/updater/sis/Rd.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQDLRF+r1FGGkCwTrb420kbnAps7gi1yYUcXYUdWeFTuBeQe5eW4
+6Y+LWaA8HMlDdoHRB0FgASisYcFagwno9+oFf4AJka4H1gWEs5XTGwAA1s0d8XGh
+7W7Dt9F5FZij8F7/9Pi6+FhhxZFIf1DD+yry9D7+Sp+BgdNALe4XOpf25QIBAwKB
+gQCHgupyjYuvCsgNHn7PNtnvVxInrB5MQNoPli+O+uNJWUK/Q+57Rl+yO8AoEzDX
+pFaLWiuVVhsdloDnAgabT/FXzYncs6uOHyEUV+dSXb78vtLPJqAX+Fg2i3hOXreB
+yskcZ13/OsKVOu5wgrJkx2baZufkqMwOSytf5y9nwjEIKwJBAP+inobagVNrN62j
+KQva3cC+UN/6XnKdTc0CA6bHyLOaJoH1xiMwG/VS2PGjHI0tiSMNtLn/QPpHJ003
+iabGhdUCQQDLjp/9UjFT6K6CF66Chqf30pZXhx+GTSQZmv/gvZiMly7X9fX9BGX3
+2MbJohBC4yI21XKTbisWywkF73Hwh+TRAkEAqmxprzxWN5zPyRdwspHpKymLP/w+
+9xOJM1atGdqFzRFvAU6EF3Vn+OHl9my9s3OwwgkjJqorUYTE3iUGby8D4wJBAIe0
+aqjhdjfwdFa6dFcEb/qMZDpaFQQzbWZnVUB+ZbMPdI/5TqitmU/l2dvBYCyXbCSO
+TGJJcg8yBgP09qBamIsCQFL7j1tM0XPVQJQ89WpKCld7O9ORxRGVj1eG0tWijrH8
+mGbYh8SGCVoWV3vrKSS8GBrFVgQnqUaHuEdtM7tpCAQ=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/updater/sis/iaupdater.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+makesis -d%EPOCROOT% iaupdater.pkg
+signsis iaupdater.sis iaupdater_RD.SISX Rd.cer Rd.pem
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/updater/sis/iaupdater.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description: 
+;
+&EN
+
+;Header
+#{"iaupdater"},(0x2000F85D),1,0,0
+
+;Localised Vendor name
+%{"Nokia IAUpdater"}
+
+;Unique Vendor name
+:"Nokia IAUpdater"
+
+"\epoc32\release\armv5\urel\iaupdater.exe" - "!:\sys\bin\iaupdater.exe"
+"\epoc32\data\z\resource\apps\iaupdater.rsc" - "!:\resource\apps\iaupdater.rsc"
+"\epoc32\data\z\private\10003a3f\import\apps\iaupdater_reg.rsc" - "!:\private\10003a3f\import\apps\iaupdater_reg.rsc"
+
+; Updater files DLL
+"\epoc32\release\armv5\urel\iaupdaterfiles.dll" - "!:\sys\bin\iaupdaterfiles.dll"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/updater/sis/iaupdater_debug.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+makesis -d%EPOCROOT% iaupdater_debug.pkg
+signsis iaupdater_debug.sis iaupdater_debug_RD.SISX Rd.cer Rd.pem
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/updater/sis/iaupdater_debug.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description: 
+;
+&EN
+
+;Header
+#{"iaupdater"},(0x2000F85D),1,0,0
+
+;Localised Vendor name
+%{"Nokia IAUpdater"}
+
+;Unique Vendor name
+:"Nokia IAUpdater"
+
+"\epoc32\release\armv5\udeb\iaupdater.exe" - "!:\sys\bin\iaupdater.exe"
+"\epoc32\data\z\resource\apps\iaupdater.rsc" - "!:\resource\apps\iaupdater.rsc"
+"\epoc32\data\z\private\10003a3f\import\apps\iaupdater_reg.rsc" - "!:\private\10003a3f\import\apps\iaupdater_reg.rsc"
+
+; Updater files DLL
+"\epoc32\release\armv5\udeb\iaupdaterfiles.dll" - "!:\sys\bin\iaupdaterfiles.dll"
\ No newline at end of file
--- a/iaupdate/IAD/updater/src/iaupdaterdialog.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/updater/src/iaupdaterdialog.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -17,19 +17,17 @@
 
 
 
-#include <AknGlobalNote.h>
-#include <avkon.rsg>
-#include <bautils.h>
-#include <data_caging_path_literals.hrh> 
-#include <iaupdater.rsg>
-#include <StringLoader.h>
-#include <AknUtils.h>   //For AknTextUtils
-
 #include "iaupdaterdialog.h"
 #include "iaupdaterdefs.h"
 #include "iaupdatercancelobserver.h"
 #include "iaupdatedebug.h"
 
+#include <hbtextresolversymbian.h>
+
+
+_LIT(KFilename, "iaupdate.ts");
+_LIT(KPath, "z://data");
+_LIT(KInstalling, "txt_software_info_installing_1"); 
 
 // ======== LOCAL FUNCTIONS ========
 
@@ -41,26 +39,23 @@
 // C++ default constructor 
 // -----------------------------------------------------------------------------
 //
-CIAUpdaterDialog::CIAUpdaterDialog( RFs& aFs, 
-                                    MIAUpdaterCancelObserver& aObserver )
-: CActive( CActive::EPriorityStandard ),
-  iFs( aFs ),
-  iObserver ( &aObserver ) 
+CIAUpdaterDialog::CIAUpdaterDialog( MIAUpdaterCancelObserver& aObserver )
+: iObserver ( &aObserver ) 
     {
-    CActiveScheduler::Add( this );
+
     }
 
 
+
 // -----------------------------------------------------------------------------
 // CIAUpdaterDialog::NewL
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-CIAUpdaterDialog* CIAUpdaterDialog::NewL( RFs& aFs, 
-                                          MIAUpdaterCancelObserver& aObserver )
+CIAUpdaterDialog* CIAUpdaterDialog::NewL( MIAUpdaterCancelObserver& aObserver )
     {
     CIAUpdaterDialog* self =
-        CIAUpdaterDialog::NewLC( aFs, aObserver );
+        CIAUpdaterDialog::NewLC( aObserver );
     CleanupStack::Pop( self );
     return self;    
     }
@@ -71,11 +66,10 @@
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-CIAUpdaterDialog* CIAUpdaterDialog::NewLC( RFs& aFs, 
-                                           MIAUpdaterCancelObserver& aObserver )
+CIAUpdaterDialog* CIAUpdaterDialog::NewLC( MIAUpdaterCancelObserver& aObserver )
     {
     CIAUpdaterDialog* self = 
-        new( ELeave ) CIAUpdaterDialog( aFs, aObserver );
+        new( ELeave ) CIAUpdaterDialog( aObserver );
     CleanupStack::PushL( self );
     self->ConstructL();
     return self;    
@@ -92,18 +86,8 @@
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::ConstructL begin");
     
     // Get resource file path
-    TFileName fileName;
-    fileName.Copy( TParsePtrC( RProcess().FileName() ).Drive() );
-    fileName.Append( KDC_APP_RESOURCE_DIR );
-    fileName.Append( IAUpdaterDefs::KIAUpdaterResourceFile );
+    iIsResolverSuccess = HbTextResolverSymbian::Init(KFilename, KPath);
     
-    // Get language of resource file        
-    BaflUtils::NearestLanguageFile( iFs, fileName );
-
-    // Open resource file
-    iResourceFile.OpenL( iFs, fileName );
-    iResourceFile.ConfirmSignatureL();    
-
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::ConstructL end");
     }
 
@@ -115,9 +99,7 @@
 //
 CIAUpdaterDialog::~CIAUpdaterDialog()
     {
-    Cancel();
-    delete iNote;
-    iResourceFile.Close();    
+    DestroyGlobalWaitNote();
     }
 
 
@@ -126,54 +108,30 @@
 // Show global waiting note during installing.
 // -----------------------------------------------------------------------------
 // 
-void CIAUpdaterDialog::ShowWaitingNoteL( const TDesC& aName, TInt aIndex, TInt aTotalCount )
+void CIAUpdaterDialog::ShowWaitingNoteL( const TDesC& aName, TInt /*aIndex*/, TInt /*aTotalCount*/ )
 	{	
 	IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::ShowWaitingNoteL begin");
-	if ( iNoteId == 0 )
-		{ 		                             
-	    IAUPDATE_TRACE("[IAUpdater] Creating global waiting note.");
 	
-        // Get localiced string from resc. file. 
-        HBufC* string = ReadResourceLC( R_IAUPDATER_INSTALLING ); 
-                                          
-        HBufC* temp1 = HBufC::NewLC( string->Length() + aName.Length() );          
-        TPtr temp1Ptr = temp1->Des();
-        
-        // Add pkg's name to string (U0).
-        StringLoader::Format( temp1Ptr, *string, 0, aName );
-                                        
-        // Increase buffer length for the number.        
-        HBufC* temp2 = 
-            HBufC::NewLC( temp1->Length() + IAUpdaterDefs::KIAUpdaterParamLen );        
-        TPtr temp2Ptr = temp2->Des();
-         
-        // Add index number to string (N1) 
-        StringLoader::Format( temp2Ptr, *temp1, 1, aIndex );
-                        
-        // Increase buffer length for the number.  
-        HBufC* finalString = 
-            HBufC::NewLC( temp2->Length() + IAUpdaterDefs::KIAUpdaterParamLen );        
-        TPtr finalPtr = finalString->Des();
-        
-        // Add max count number to string (N2) 
-        StringLoader::Format( finalPtr, *temp2, 2, aTotalCount );
-        
-        AknTextUtils::DisplayTextLanguageSpecificNumberConversion( finalPtr );         
-        if ( !iNote )
-            {
-        	iNote = CAknGlobalNote::NewL();   
-    	    iNote->SetSoftkeys( R_AVKON_SOFTKEYS_CANCEL );
-            }
-     	
-	    IAUPDATE_TRACE("[IAUpdater] Showing global waiting note.");
-    	iNoteId = iNote->ShowNoteL( iStatus, EAknGlobalWaitNote, *finalString );
-    	SetActive();    	    	
-     
-    	CleanupStack::PopAndDestroy( finalString );
-    	CleanupStack::PopAndDestroy( temp2 );
-    	CleanupStack::PopAndDestroy( temp1 );
-    	CleanupStack::PopAndDestroy( string );
-		}
+	DestroyGlobalWaitNote();
+    
+    iGlobalWaitNote = CHbDeviceProgressDialogSymbian::NewL(
+            CHbDeviceProgressDialogSymbian::EWaitDialog );
+    
+    // loc: Load string 
+    iGlobalResource = HbTextResolverSymbian::LoadL( KInstalling, aName );
+    if ( iGlobalResource )
+        iGlobalWaitNote->SetTextL( iGlobalResource->Des() );
+
+    // Icon ?
+    //iGlobalWaitNote->SetIconNameL(const TDesC& aIconName);
+    
+    // Button ?
+    iGlobalWaitNote->SetButton(ETrue);
+    
+    iGlobalWaitNote->SetObserver( this );
+    iGlobalWaitNote->SetAutoClose(EFalse);
+    iGlobalWaitNote->ShowL();
+    
 	IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::ShowWaitingNoteL end");
 	}
 
@@ -186,65 +144,39 @@
 void CIAUpdaterDialog::CancelWaitingNoteL()
 	{
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::CancelWaitingNoteL begin");
-	
-	if ( iNoteId != 0 )
-		{
-        IAUPDATE_TRACE("[IAUpdater] Cancel waiting note.");
-	    iNote->CancelNoteL( iNoteId );
-	    iNoteId = 0;
-		}
-
+    
+    DestroyGlobalWaitNote();
+    
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::CancelWaitingNoteL end");
 	}
 
-	
-// -----------------------------------------------------------------------------	
-// CIAUpdaterDialog::LoadResourceLC
-// Read resource string.
-// -----------------------------------------------------------------------------
-// 
-HBufC* CIAUpdaterDialog::ReadResourceLC( TInt aResourceId )
+void CIAUpdaterDialog::ProgressDialogCancelled(
+    const CHbDeviceProgressDialogSymbian* /*aProgressDialog*/ )
+    {
+    
+    iObserver->UserCancel();
+    
+    }
+
+void CIAUpdaterDialog::ProgressDialogClosed(
+    const CHbDeviceProgressDialogSymbian* /*aProgressDialog*/ )
     {
-    TResourceReader reader;
-    HBufC8* buff = iResourceFile.AllocReadLC( aResourceId );    
-    reader.SetBuffer( buff );
-    HBufC* text = reader.ReadHBufCL();
-    CleanupStack::PopAndDestroy( buff );
-    CleanupStack::PushL( text );
+    
+    }
 
-    return text;
+// -----------------------------------------------------------------------------
+// CIAUpdaterDialog::DestroyGlobalWaitNote
+// -----------------------------------------------------------------------------
+void CIAUpdaterDialog::DestroyGlobalWaitNote()
+    {
+    if ( iGlobalWaitNote )
+        {
+        iGlobalWaitNote->Close();
+        delete iGlobalWaitNote;
+        iGlobalWaitNote = NULL;
+        delete iGlobalResource;
+        iGlobalResource = NULL;
+        }
     }
     
-    
-// ---------------------------------------------------------------------------
-// CIAUpdaterDialog:::DoCancel
-// 
-// ---------------------------------------------------------------------------
-// 
-void CIAUpdaterDialog::DoCancel()
-    {
-    TRAP_IGNORE( CancelWaitingNoteL() );
-    }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateNetworkRegistration::RunL()
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdaterDialog::RunL()
-    {
-    IAUPDATE_TRACE_1("[IAUpdater] CIAUpdaterDialog::RunL() iStatus : %d", iStatus.Int() );
-    iNoteId = 0;
-    if ( iStatus.Int() == EAknSoftkeyCancel )
-        {
-    	iObserver->UserCancel();
-        }
-    else
-        {
-        iObserver->UserExit();	
-        }
-    }
-
-// ======== GLOBAL FUNCTIONS ========
-
 //  EOF  
--- a/iaupdate/IAD/updater/src/iaupdatermngr.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/updater/src/iaupdatermngr.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -166,7 +166,8 @@
     TBool showing( EFalse );
     User::LeaveIfError( iFs.Connect() );
     User::LeaveIfError( iWsSession.Connect( iFs ) );
-    CIAUpdaterDialog* dialogs( CIAUpdaterDialog::NewLC( iFs, *this ) );
+    //CIAUpdaterDialog* dialogs( CIAUpdaterDialog::NewLC( iFs, *this ) );
+    CIAUpdaterDialog* dialogs( CIAUpdaterDialog::NewLC( *this ) );
     if ( count > 0 )
         {
         TInt nameIndex( 0 );
--- a/iaupdate/IAD/updater/src/iaupdatersilentlauncher.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/updater/src/iaupdatersilentlauncher.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -43,7 +43,12 @@
 //
 void CIAUpdaterSilentLauncher::ConstructL()
     {
-    iOptionsPckg = SilentInstallOptionsL();
+    
+    iOptionsPckg = Usif::COpaqueNamedParams::NewL();
+    iResults = Usif::COpaqueNamedParams::NewL();
+    
+    UsifSilentInstallOptionsL( iOptionsPckg );    
+
     }
 
 // -----------------------------------------------------------------------------
@@ -68,6 +73,10 @@
 CIAUpdaterSilentLauncher::~CIAUpdaterSilentLauncher()
     {
     iLauncher.Close();
+    
+    delete iOptionsPckg;
+    delete iResults;
+    
     }
 
 // -----------------------------------------------------------------------------
@@ -88,7 +97,7 @@
 
     // Launch the installation   
     IAUPDATE_TRACE("[IAUpdater] Launch silent install");                    
-    iLauncher.SilentInstall( aStatus, aFile, iOptionsPckg );    
+    iLauncher.Install( aFile, *iOptionsPckg, *iResults, aStatus );
 
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterSilentLauncher::InstallL() end"); 
     }
@@ -102,71 +111,64 @@
     {
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterSilentLauncher::Cancel() begin");       
 
-    iLauncher.CancelAsyncRequest( SwiUI::ERequestSilentInstall );   
+    iLauncher.CancelOperation();
 
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterSilentLauncher::Cancel() end"); 
     }
 
-
 // ---------------------------------------------------------------------------
-// CIAUpdaterSilentLauncher::SilentInstallOptionsL
+// IAUpdateUtils::UsifSilentInstallOptionsL
 // 
 // ---------------------------------------------------------------------------
-//
-SwiUI::TInstallOptions CIAUpdaterSilentLauncher::SilentInstallOptionsL() const
+
+void  CIAUpdaterSilentLauncher::UsifSilentInstallOptionsL( 
+        Usif::COpaqueNamedParams * aOptions )
     {
-    IAUPDATE_TRACE("[IAUpdater] CIAUpdaterSilentLauncher::SilentInstallOptionsL() begin"); 
-    
-    SwiUI::TInstallOptions options;
+
+    aOptions->AddIntL( Usif::KSifInParam_InstallSilently, ETrue );
 
-    // Upgrades are allowed        
-    options.iUpgrade = SwiUI::EPolicyAllowed;
-
+    // Upgrades are allowed 
+    aOptions->AddIntL( Usif::KSifInParam_AllowUpgrade, Usif::EAllowed );
+    
     // Install all if optional packets exist.
-    options.iOptionalItems = SwiUI::EPolicyAllowed;
-
+    aOptions->AddIntL( Usif::KSifInParam_InstallOptionalItems, Usif::EAllowed );
+    
     // Prevent online cert revocation check.
-    options.iOCSP = SwiUI::EPolicyNotAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_PerformOCSP, Usif::ENotAllowed );
     
     // See iOCSP setting above
-    options.iIgnoreOCSPWarnings = SwiUI::EPolicyAllowed;
-
+    aOptions->AddIntL( Usif::KSifInParam_IgnoreOCSPWarnings, Usif::EAllowed );
+    
     // Do not allow installation of uncertified packages.
-    options.iUntrusted = SwiUI::EPolicyNotAllowed;
-
-    // If filetexts are included in SIS package. Then, show them.
-    options.iPackageInfo = SwiUI::EPolicyUserConfirm;
+    aOptions->AddIntL( Usif::KSifInParam_AllowUntrusted, Usif::ENotAllowed );
+    
+    // If filetexts are included in SIS package, show them.
+    aOptions->AddIntL( Usif::KSifInParam_PackageInfo, Usif::EAllowed );
     
     // Automatically grant user capabilities.
-    // See also iUntrusted above.
-    options.iCapabilities = SwiUI::EPolicyAllowed;
-
+    // See also KSifInParam_AllowUntrusted above.
+    aOptions->AddIntL( Usif::KSifInParam_GrantCapabilities, Usif::EAllowed );
+    
     // Open application will be closed.
-    options.iKillApp = SwiUI::EPolicyAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_AllowAppShutdown, Usif::EAllowed );
     
     // Files can be overwritten.
-    options.iOverwrite = SwiUI::EPolicyAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_AllowOverwrite, Usif::EAllowed  );
+    
+    // Incompatible allowed
+    aOptions->AddIntL( Usif::KSifInParam_AllowIncompatible, Usif::EAllowed  );
     
     // This only affects Java applications.
-    options.iDownload = SwiUI::EPolicyAllowed;
-
-    // Notice! Here we use always the same drive for the IAD.
-    // So, this will not change automatically according to the disk spaces 
-    // and when new memory cards are inserted into the phone.    
-    options.iDrive = IAUpdaterDefs::KIAUpdaterDrive;
+    aOptions->AddIntL( Usif::KSifInParam_AllowDownload, Usif::EAllowed  );
+    
+    // Where to save.
+    //aOptions->AddIntL( Usif::KSifInParam_Drive, EDriveC );
     
     // Choose the phone language.
-    options.iLang = User::Language();
-    
-    // If language is asked, then use the current phone language.
-    options.iUsePhoneLang = ETrue;
+    TLanguage lang = User::Language();
+    //aOptions->AddIntL( Usif::KSifInParam_Languages, lang ); // User::Language() );
     
-    // Does not affect SISX. This is for Java.
-    options.iUpgradeData = SwiUI::EPolicyAllowed;
-
-    IAUPDATE_TRACE("[IAUpdater] CIAUpdaterSilentLauncher::SilentInstallOptionsL() end"); 
-    
-    return options;
+    //aOptions->AddIntL( Usif::KSifInParam_Drive, IAUpdateUtils::DriveToInstallL( aUid, aSize ) );
     }
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/group/backup_registration.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="yes"?>
+<backup_registration version="1.0">
+    <proxy_data_manager sid = "0x10202BE9" />
+    <restore requires_reboot = "no"/>
+</backup_registration>
--- a/iaupdate/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -11,10 +11,12 @@
 *
 * Contributors:
 *
-* Description:    Build information file for IA Update Client and NCD engine
+* Description:    Build information file for SWUpdate Client 
 *
 */
 
+#ifdef FF_IAUPDATE
+
 #include <platform_paths.hrh>
 
 PRJ_PLATFORMS
@@ -29,6 +31,13 @@
 #include "../help/group/bld.inf"
 
 PRJ_EXPORTS
+// backup registration
+backup_registration.xml        /epoc32/release/winscw/udeb/z/private/2000F85A/backup_registration.xml
+backup_registration.xml        /epoc32/release/winscw/urel/z/private/2000F85A/backup_registration.xml
+backup_registration.xml        /epoc32/data/z/private/2000F85A/backup_registration.xml
+
+// ROM sis stubs
+
 ../rom/iaupdate_stub.SIS     /epoc32/data/z/system/install/iaupdate_stub.sis
 ../rom/iaupdater_stub.SIS    /epoc32/data/z/system/install/iaupdater_stub.sis
 
@@ -36,5 +45,6 @@
 ../rom/iaupdate.iby            CORE_MW_LAYER_IBY_EXPORT_PATH( iaupdate.iby )
 ../rom/iaupdateresources.iby   LANGUAGE_MW_LAYER_IBY_EXPORT_PATH( iaupdateresources.iby )
 
+#endif //FF_IAUPDATE
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/iaupdate.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description:
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += IAD/bgcindicatorplugin/bgcindicatorplugin.pro
+SUBDIRS += IAD/api/iaupdateapi.pro
+SUBDIRS += IAD/ui/iaupdate.pro
+SUBDIRS += IAD/launcher/iaupdatelauncher.pro
+
--- a/iaupdate/rom/iaupdate.iby	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/rom/iaupdate.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -24,16 +24,12 @@
 #ifdef FF_IAUPDATE
 
 S60_APP_EXE(iaupdate)
-S60_APP_BITMAP(iaupdate)
-S60_APP_AIF_ICONS(iaupdate)
-S60_UPGRADABLE_APP_REG_RSC(iaupdate)
+data=ZPRIVATE\10003a3f\import\apps\iaupdate_reg.rsc           PRIVATE\10003a3f\import\apps\iaupdate_reg.rsc
 S60_APP_EXE(iaupdater)
 S60_UPGRADABLE_APP_REG_RSC(iaupdater)
 S60_APP_EXE(iaupdatelauncher)
-S60_UPGRADABLE_APP_REG_RSC(iaupdatelauncher)
+data=ZPRIVATE\10003a3f\import\apps\iaupdatelauncher_reg.rsc   PRIVATE\10003a3f\import\apps\iaupdatelauncher_reg.rsc
 
-
-file=ABI_DIR\BUILD_DIR\iaupdatetools.dll         SHARED_LIB_DIR\iaupdatetools.dll
 file=ABI_DIR\BUILD_DIR\iaupdateapi.dll           SHARED_LIB_DIR\iaupdateapi.dll
 file=ABI_DIR\BUILD_DIR\iaupdateengine.dll        SHARED_LIB_DIR\iaupdateengine.dll
 file=ABI_DIR\BUILD_DIR\iaupdaterfiles.dll        SHARED_LIB_DIR\iaupdaterfiles.dll
@@ -41,18 +37,12 @@
 file=ABI_DIR\BUILD_DIR\iaupdatebg.exe            SHARED_LIB_DIR\iaupdatebg.exe 
 file=ABI_DIR\BUILD_DIR\iaupdatefwupdate.dll      SHARED_LIB_DIR\iaupdatefwupdate.dll
 
-#ifdef _IMAGE_TYPE_RND
-data=ZPRIVATE\2000F85A\iaupdateengineconfig_testing.xml  PRIVATE\2000F85A\iaupdateengineconfig.xml
-#else
 data=ZPRIVATE\2000F85A\iaupdateengineconfig.xml  PRIVATE\2000F85A\iaupdateengineconfig.xml
-#endif //_IMAGE_TYPE_RND
-
 data=ZPRIVATE\2000F85A\backup_registration.xml   PRIVATE\2000F85A\backup_registration.xml
 
 data=ZSYSTEM\install\iaupdate_stub.sis           system\install\iaupdate_stub.sis
 data=ZSYSTEM\install\iaupdater_stub.sis          system\install\iaupdater_stub.sis
 
-
 #endif //FF_IAUPDATE
 
 #endif //__IAUPDATE_IBY__
Binary file iaupdate/rom/iaupdate_stub.SIS has changed
--- a/iaupdate/rom/iaupdate_stub.pkg	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/rom/iaupdate_stub.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 ;
-; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 ; All rights reserved.
 ; This component and the accompanying materials are made available
 ; under the terms of "Eclipse Public License v1.0"
@@ -31,9 +31,10 @@
 
 ;DLLs
 ""-"z:\sys\bin\iaupdateengine.dll"
-""-"z:\sys\bin\iaupdatetools.dll"
 ""-"z:\sys\bin\iaupdateapi.dll"
 ""-"z:\sys\bin\iaupdatefwupdate.dll"
+""-"z:\sys\bin\bgcindicatorplugin.dll"
+
 
 
 ;Resources
@@ -43,9 +44,7 @@
 ""-"z:\resource\apps\iaupdatelauncher.r*"
 
 ;Icons
-""-"z:\resource\apps\iaupdate_aif.mif"
-""-"z:\resource\apps\iaupdate.mif"
-""-"z:\resource\apps\iaupdatelauncher_aif.mif"
+""-"z:\private\200211f4\qgn_note_swupdate_notification.svg"
 
 ;Other Files
 ""-"z:\private\2000F85A\iaupdateengineconfig.xml"
--- a/iaupdate/rom/iaupdateresources.iby	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/rom/iaupdateresources.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -24,7 +24,6 @@
 
 #ifdef FF_IAUPDATE
 S60_APP_RESOURCE(iaupdate)
-S60_APP_RESOURCE(iaupdater)
 S60_APP_RESOURCE(iaupdatelauncher)
 #endif //FF_IAUPDATE
 
Binary file iaupdateapi_stub/conf/iaupdate.confml has changed
Binary file iaupdateapi_stub/conf/iaupdate_2000F85A.crml has changed
--- a/iaupdateapi_stub/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdateapi_stub/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -28,9 +28,12 @@
 
 ../rom/iaupdateapi.iby             CORE_MW_LAYER_IBY_EXPORT_PATH( iaupdateapi.iby )
 
-../sis/iaupdate_stub.SIS        /epoc32/data/z/system/install/stub_iaupdate_stub.sis
+#ifndef FF_IAUPDATE
+../sis/iaupdate_stub.SIS        /epoc32/data/z/system/install/iaupdate_stub.sis
+#endif //FF_IAUPDATE
 
 PRJ_MMPFILES
-iaupdateapi_stub.mmp
+#ifndef FF_IAUPDATE
+iaupdateapi.mmp
+#endif //FF_IAUPDATE
 
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdateapi_stub/group/iaupdateapi.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Project definition file 
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+
+CAPABILITY      CAP_GENERAL_DLL
+
+#if defined(WINS) || defined(WINSCW)
+TARGET          iaupdateapi.dll
+#else
+TARGET          iaupdateapi_stub.dll
+#endif
+
+LINKAS          iaupdateapi.dll
+EXPORTLIBRARY   iaupdateapi.lib
+
+TARGETTYPE      dll
+UID             0x1000008d 0x2000F85C
+
+
+// API stub source files
+SOURCEPATH      ../src
+SOURCE          iaupdate.cpp
+SOURCE          iaupdateparameters.cpp
+SOURCE          iaupdateresult.cpp
+
+
+MW_LAYER_SYSTEMINCLUDE
+
+LIBRARY         euser.lib
--- a/iaupdateapi_stub/group/iaupdateapi_stub.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   Project definition file 
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-
-CAPABILITY      CAP_GENERAL_DLL
-
-TARGET          iaupdateapi_stub.dll
-
-LINKAS          iaupdateapi.dll
-EXPORTLIBRARY   iaupdateapi_stub.lib
-
-TARGETTYPE      dll
-UID             0x1000008d 0x2000F85C
-
-
-// API stub source files
-SOURCEPATH      ../src
-SOURCE          iaupdate.cpp
-SOURCE          iaupdateparameters.cpp
-SOURCE          iaupdateresult.cpp
-
-
-MW_LAYER_SYSTEMINCLUDE
-
-LIBRARY         euser.lib
--- a/iaupdateapi_stub/rom/iaupdateapi.iby	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdateapi_stub/rom/iaupdateapi.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -23,7 +23,7 @@
 
 #ifndef FF_IAUPDATE 
 file=ABI_DIR\BUILD_DIR\iaupdateapi_stub.dll    SHARED_LIB_DIR\iaupdateapi.dll
-data=ZSYSTEM\install\stub_iaupdate_stub.sis    System\Install\iaupdate_stub.sis
+data=ZSYSTEM\install\iaupdate_stub.sis    System\Install\iaupdate_stub.sis
 #endif //FF_IAUPDATE 
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refsoftwareappmgr/group/appmanager.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* using relative paths for sourcepath and user includes
+*
+*/
+
+
+TARGET			refappmanager.exe
+TARGETTYPE		exe
+
+UID				0xE8000047
+VENDORID		0x70000001   
+
+// ReadUserData is required to access the list of components installed by the user
+CAPABILITY ReadUserData
+
+SOURCEPATH		../source
+SOURCE			appmanager.cpp command.cpp
+
+USERINCLUDE		../source
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib efsrv.lib bafl.lib scrclient.lib sif.lib
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refsoftwareappmgr/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* @ SIF Reference Application Manager
+*
+*/
+
+
+/**
+ @file
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_TESTEXPORTS
+
+PRJ_MMPFILES
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+../group/appmanager.mmp
+
+#endif // TOOLS2
+#endif // TOOLS
+
+PRJ_TESTMMPFILES
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+#endif // TOOLS2
+#endif // TOOLS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refsoftwareappmgr/group/security_referenceapplicationmanager.history.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="Reference Application Manager">
+  <purpose>
+    Provides a reference implementation of Application Manager for browsing and removing installed components through the Universal Software Install Framework APIs.
+  </purpose>
+
+  <defect number="DEF131875" title="SMPSAFE MMP file updates for SWI and USIF" revision="003">
+    updated MMP files for SWI and USIF components to declare them SMPSAFE 
+  </defect>
+
+  <defect number="DEF130796" title="PREQ1269: Can set the component size negative" revision="002"> 
+	 The API wasn't changed to Uint, as this would require the DB also to support unsigned values in the relevant column, and I couldn't see an option for doing it without disrupting the schema. 
+  </defect> 
+
+  <deliverystep number="1116" name="PREQ1269: Security and Data Privacy: Universal Software Install Framework (Phase 1)" osproject="Diran" revision="001">
+	  <milestone project="GT0433" number="3.1"/>
+	  <preq number="1269" title="Universal Software Install Framework">
+		   Delivers a console based Application Manager that provides for browsing and removing installed components. These commands demonstrate basic SIF and SCR software management operations.
+	  </preq>
+  </deliverystep>
+
+</relnotes>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refsoftwareappmgr/group/security_referenceapplicationmanager.mrp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+component	security_referenceapplicationmanager
+source	\sf\mw\appinstall\installationservices\refsoftwareappmgr
+binary	\sf\mw\appinstall\installationservices\refsoftwareappmgr\group	all
+exports	\sf\mw\appinstall\installationservices\refsoftwareappmgr\group
+notes_source	\component_defs\release.src
+
+ipr T
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refsoftwareappmgr/source/appmanager.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <usif/scr/scr.h>
+#include <e32cons.h>
+#include "command.h"
+
+using namespace Usif;
+
+_LIT(KTxtAppTitle, "Reference Application Manager\n");
+_LIT(KTxtAppVersion, "Version 1.00(0)\n");
+_LIT(KTxtCopyright, "Copyright (c) Symbian Software Ltd 2008. All rights reserved.\n");
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtFormatFailed,"\nFailed with leave code = %d\n");
+_LIT(KTxtPressToExit, "Press any key to exit...");
+_LIT(KTxtPressToContinue, "\nPress any key to continue...\n\n");
+
+_LIT(KTxtHelp01, "\nThe syntax of the command is incorrect. Use the following options:\n\n");
+_LIT(KTxtHelp02, "--list [--name name] [--vendor vendor] [--type type] [--removable|nonremovable]\n");
+_LIT(KTxtHelp03, "[--activated|deactivated] [--drives drivelist] [--property name value [language]]\n");
+_LIT(KTxtHelp04, "[--intproperty name value] [--file path] [--locale language]\n\n");
+
+_LIT(KTxtHelp05, "OPTIONS\n\n");
+_LIT(KTxtHelp06, "    --name NAME\n");
+_LIT(KTxtHelp07, "        lists components with name NAME\n\n");
+_LIT(KTxtHelp08, "    --vendor VENDOR\n");
+_LIT(KTxtHelp09, "        lists components with vendor VENDOR\n\n");
+_LIT(KTxtHelp10, "    --type TYPE\n");
+_LIT(KTxtHelp11, "        lists components with software type TYPE\n\n");
+_LIT(KTxtHelp12, "    --removable\n");
+_LIT(KTxtHelp13, "        lists removable components only\n\n");
+_LIT(KTxtHelp16, "    --activated\n");
+_LIT(KTxtHelp17, "        lists components with SCOMO state Activated\n\n");
+_LIT(KTxtHelp18, "    --deactivated\n");
+_LIT(KTxtHelp19, "        lists components with SCOMO state Deactivated\n\n");
+_LIT(KTxtHelp20, "    --drives DRIVES\n");
+_LIT(KTxtHelp21, "        lists components whose files were installed to DRIVES\n\n");
+_LIT(KTxtHelp22, "    --property N V L\n");
+_LIT(KTxtHelp23, "        lists components with string property name N and value V and optional language code L, for example English=1, French=2, German=3\n\n");
+_LIT(KTxtHelp26, "    --locale LANGUAGE\n");
+_LIT(KTxtHelp27, "        defines language LANGUAGE to be used to find the component info, for example English=1, French=2, German=3\n\n");
+
+_LIT(KTxtHelp30, "--delete ComponentID\n");
+_LIT(KTxtHelp31, "    deletes component with ComponentID. The ID of a component to be removed can be obtained using the 'list' command.\n\n");
+
+_LIT(KTxtHelp40, "EXAMPLES\n\n");
+_LIT(KTxtHelp41, "    refappmanager --list\n\n");
+_LIT(KTxtHelp42, "    refappmanager --list --type native\n\n");
+_LIT(KTxtHelp43, "    refappmanager --list --vendor Symbian\n\n");
+_LIT(KTxtHelp44, "    refappmanager --list --type java --drives cef --activated --locale 2\n\n");
+_LIT(KTxtHelp45, "    refappmanager --delete 6\n\n");
+
+// ==================================================================================
+
+// Start-up functions and helpers
+LOCAL_C void InitL();
+LOCAL_C void ExecCommandL(CConsoleBase& aConsole);
+LOCAL_C void DisplayHelp(CConsoleBase& aConsole);
+
+// Main function called by E32
+GLDEF_C TInt E32Main() 
+	{
+	// Get clean-up stack
+	CTrapCleanup* cleanup=CTrapCleanup::New();
+
+	__UHEAP_MARK;
+
+	// Call InitL() and catch all leaves
+	TRAPD(error,InitL());
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+
+	__UHEAP_MARKEND;
+
+	// Destroy clean-up stack
+	delete cleanup;
+
+	return 0;
+    }
+
+// ==================================================================================
+
+LOCAL_C void InitL()
+	{
+	// Create console
+	CConsoleBase* console = Console::NewL(KTxtAppTitle,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+
+	// Call ExecCommandL() and catch all leaves
+	TRAPD(err, ExecCommandL(*console));
+	if (err == KErrArgument)
+		{
+		DisplayHelp(*console);
+		}
+	else if (err != KErrNone)
+		{
+		console->Printf(KTxtFormatFailed, err);
+		}
+
+	// Wait for any key
+	console->Printf(KTxtPressToExit);
+	console->Getch();
+
+	CleanupStack::PopAndDestroy(console);
+	}
+
+// ==================================================================================
+
+LOCAL_C void ExecCommandL(CConsoleBase& aConsole)
+	{
+	// Display info
+	aConsole.Printf(KTxtAppTitle);
+	aConsole.Printf(KTxtAppVersion);
+	aConsole.Printf(KTxtCopyright);
+
+	// Create parser
+	CCommandLineParser* parser = CCommandLineParser::NewLC();
+
+	// Instantiate and register the 'list' and 'delete' commands. If we had
+	// more commands it could be more efficient to implement a command factory
+	// in order to instantiate only a single command on demand. This example
+	// application provides only two commands and therefore the above mentioned
+	// optimisation isn't needed here.
+	parser->RegisterCommandL(*CListCommand::NewLC());
+	parser->RegisterCommandL(*CDeleteCommand::NewLC());
+
+	// Parse input and find the matching command
+	CConsoleCommand& cmd = parser->ParseL();
+
+	// Execute the command
+	cmd.ExecuteL(aConsole);
+
+	// Cleanup the parser and commands
+	CleanupStack::PopAndDestroy(3, parser);
+	}
+
+// ==================================================================================
+
+LOCAL_C void DisplayHelp(CConsoleBase& aConsole)
+	{
+	aConsole.Printf(KTxtHelp01);
+	aConsole.Printf(KTxtHelp02);
+	aConsole.Printf(KTxtHelp03);
+	aConsole.Printf(KTxtHelp04);
+	aConsole.Printf(KTxtHelp05);
+	aConsole.Printf(KTxtHelp06);
+	aConsole.Printf(KTxtHelp07);
+	aConsole.Printf(KTxtHelp08);
+	aConsole.Printf(KTxtHelp09);
+
+	aConsole.Printf(KTxtPressToContinue);
+	aConsole.Getch();
+
+	aConsole.Printf(KTxtHelp10);
+	aConsole.Printf(KTxtHelp11);
+	aConsole.Printf(KTxtHelp12);
+	aConsole.Printf(KTxtHelp13);
+	aConsole.Printf(KTxtHelp16);
+	aConsole.Printf(KTxtHelp17);
+	aConsole.Printf(KTxtHelp18);
+	aConsole.Printf(KTxtHelp19);
+	aConsole.Printf(KTxtHelp20);
+	aConsole.Printf(KTxtHelp21);
+
+	aConsole.Printf(KTxtPressToContinue);
+	aConsole.Getch();
+
+	aConsole.Printf(KTxtHelp22);
+	aConsole.Printf(KTxtHelp23);
+	aConsole.Printf(KTxtHelp26);
+	aConsole.Printf(KTxtHelp27);
+	aConsole.Printf(KTxtHelp30);
+	aConsole.Printf(KTxtHelp31);
+
+	aConsole.Printf(KTxtPressToContinue);
+	aConsole.Getch();
+
+	aConsole.Printf(KTxtHelp40);
+	aConsole.Printf(KTxtHelp41);
+	aConsole.Printf(KTxtHelp42);
+	aConsole.Printf(KTxtHelp43);
+	aConsole.Printf(KTxtHelp44);
+	aConsole.Printf(KTxtHelp45);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refsoftwareappmgr/source/command.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,439 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <usif/scr/scr.h>
+#include <usif/sif/sif.h>
+#include <e32cons.h>
+#include "command.h"
+
+using namespace Usif;
+
+_LIT(KTxtOptionPrefix, "--");
+_LIT(KTxtDeleteCommand, "delete");
+_LIT(KTxtListCommand, "list");
+_LIT(KTxtListOptName, "name");
+_LIT(KTxtListOptVendor, "vendor");
+_LIT(KTxtListOptType, "type");
+_LIT(KTxtListOptActivated, "activated");
+_LIT(KTxtListOptDeactivated, "deactivated");
+_LIT(KTxtListOptRemovable, "removable");
+_LIT(KTxtListOptProperty, "property");
+_LIT(KTxtListOptIntProperty, "intproperty");
+_LIT(KTxtListOptDrives, "drives");
+_LIT(KTxtListOptLocale, "locale");
+_LIT(KTxtActivated, "Activated");
+_LIT(KTxtDeactivated, "Deactivated");
+_LIT(KTxtPressToContinue, "\nPress any key to continue...");
+_LIT(KTxtSifConnectionFailure, "\nFailed to connect to the SIF server\n");
+_LIT(KTxtDeleting, "Deleting...\n");
+
+// ==================================================================================
+
+CConsoleCommand::CConsoleCommand()
+	{
+	}
+
+CConsoleCommand::~CConsoleCommand()
+	{
+	}
+
+// ==================================================================================
+
+CListCommand* CListCommand::NewLC()
+	{
+
+	CListCommand* self = new (ELeave) CListCommand;
+	CleanupStack::PushL(self);
+	self->iFilter = CComponentFilter::NewL();
+	return self;
+	}
+
+CListCommand::CListCommand(): iLocale(KUnspecifiedLocale)
+	{
+	}
+
+CListCommand::~CListCommand()
+	{
+	delete iFilter;
+	}
+
+const TDesC& CListCommand::Name()
+	{
+	return KTxtListCommand;
+	}
+
+namespace
+	{
+	// Leave if the number of values differs from aCount
+	void AssertNumValuesL(const RArray<TPtrC>& aValues, TInt aCount)
+		{
+		if (aValues.Count() != aCount)
+			{
+			User::Leave(KErrArgument);
+			}
+		}
+	}
+
+void CListCommand::OptionHandlerL(const TPtrC& aName, const RArray<TPtrC>& aValues)
+	{
+	// Configure the component query filter:
+	
+	// Component name
+	if (aName == KTxtListOptName)
+		{
+		AssertNumValuesL(aValues, 1);
+		iFilter->SetNameL(aValues[0]);
+		}
+
+	// Vendor
+	else if (aName == KTxtListOptVendor)
+		{
+		AssertNumValuesL(aValues, 1);
+		iFilter->SetVendorL(aValues[0]);
+		}
+
+	// Software type
+	else if (aName == KTxtListOptType)
+		{
+		AssertNumValuesL(aValues, 1);
+		iFilter->SetSoftwareTypeL(aValues[0]);
+		}
+
+	// SCOMO state - Activated
+	else if (aName == KTxtListOptActivated)
+		{
+		AssertNumValuesL(aValues, 0);
+
+		// The activated and deactivated options are mutually exclusive
+		if (iScomoStateSet)
+			{
+			User::Leave(KErrArgument);
+			}
+		iScomoStateSet = ETrue;
+
+		iFilter->SetScomoStateL(EActivated);
+		}
+
+	// SCOMO state - Deactivated
+	else if (aName == KTxtListOptDeactivated)
+		{
+		AssertNumValuesL(aValues, 0);
+
+		// The activated and deactivated options are mutually exclusive
+		if (iScomoStateSet)
+			{
+			User::Leave(KErrArgument);
+			}
+		iScomoStateSet = ETrue;
+
+		iFilter->SetScomoStateL(EDeactivated);
+		}
+
+	// Removable
+	else if (aName == KTxtListOptRemovable)
+		{
+		AssertNumValuesL(aValues, 0);
+		iFilter->SetRemovable(ETrue);
+		}
+
+	// String property
+	else if (aName == KTxtListOptProperty)
+		{
+		const TInt numValues = aValues.Count();
+		if (numValues < 2 || numValues > 3)
+			{
+			User::Leave(KErrArgument);
+			}
+
+		// Convert language from string to int if specified
+		TInt language = KUnspecifiedLocale;
+		if (numValues == 3)
+			{
+			TLex lex(aValues[2]);
+			if (lex.Val(language) != KErrNone || language < ELangEnglish || language >= ELangMaximum)
+				{
+				User::Leave(KErrArgument);
+				}
+			}
+
+		// Add the property to the filter
+		iFilter->AddPropertyL(aValues[0], aValues[1], static_cast<TLanguage>(language));
+		}
+
+	// Integer property
+	else if (aName == KTxtListOptIntProperty)
+		{
+		AssertNumValuesL(aValues, 2);
+		TLex lex(aValues[1]);
+		TInt64 val;
+		if (lex.Val(val) != KErrNone)
+			{
+			User::Leave(KErrArgument);
+			}
+		iFilter->AddPropertyL(aValues[0], val);
+		}
+
+	// Drives
+	else if (aName == KTxtListOptDrives)
+		{
+ 	 	AssertNumValuesL(aValues, 1);
+ 	 	TPtrC drives = aValues[0];
+ 	 	TDriveList driveList;
+ 	 	driveList.FillZ(KMaxDrives);
+ 	 	for (TInt i=0; i<drives.Length(); ++i)
+ 	 	   	{
+ 	 	  	TChar driveLetter = static_cast<TChar>(drives[i]);
+ 	 	   	TInt driveNumber = 0;
+ 	 	   	User::LeaveIfError(RFs::CharToDrive(driveLetter, driveNumber));
+ 	 	   	driveList[driveNumber] = ETrue;
+ 	 	   	}
+ 	 	iFilter->SetInstalledDrivesL(driveList);
+		}
+
+	// Locale
+	else if (aName == KTxtListOptLocale)
+		{
+		AssertNumValuesL(aValues, 1);
+		TLex lex(aValues[0]);
+		TInt val;
+		if (lex.Val(val) != KErrNone || val < ELangEnglish || val >= ELangNone)
+			{
+			User::Leave(KErrArgument);
+			}
+		iLocale = static_cast<TLanguage>(val);
+		}
+	
+	// Unknown
+	else
+		{
+		User::Leave(KErrArgument);
+		}
+	}
+
+void CListCommand::ExecuteL(CConsoleBase& aConsole)
+	{
+	// Connect to the SCR server
+	RSoftwareComponentRegistry scr;
+	TInt err = scr.Connect();
+	if (err != KErrNone)
+		{
+		aConsole.Printf(_L("\nFailed to connect to the SCR server"));
+		User::Leave(err);
+		}
+	CleanupClosePushL(scr);
+
+	// Create an SCR view
+	RSoftwareComponentRegistryView scrView;
+	scrView.OpenViewL(scr, iFilter);
+	CleanupClosePushL(scrView);
+
+	// Iterate over the matching components
+	CComponentEntry* entry = CComponentEntry::NewLC();
+	TBool first(ETrue);
+	while (scrView.NextComponentL(*entry, iLocale))
+		{
+		if (first)
+			{
+			first = EFalse;
+			}
+		else
+			{
+			aConsole.Printf(KTxtPressToContinue);
+			aConsole.Getch();
+			aConsole.ClearScreen();
+			}
+
+		aConsole.Printf(_L("\n============= Component Info =============\n"));
+		aConsole.Printf(_L("\nComponent ID     : %d"), entry->ComponentId());
+		aConsole.Printf(_L("\nComponent name   : %S"), &entry->Name());
+		aConsole.Printf(_L("\nVendor name      : %S"), &entry->Vendor());
+		aConsole.Printf(_L("\nSoftware type    : %S"), &entry->SoftwareType());
+		aConsole.Printf(_L("\nSCOMO state      : %S"), entry->ScomoState() == EActivated ? &KTxtActivated : &KTxtDeactivated );
+		aConsole.Printf(_L("\nComponent size   : %d"), entry->ComponentSize());
+		aConsole.Printf(_L("\nInstalled drives : %S"), &entry->InstalledDrives());
+		aConsole.Printf(_L("\nVersion          : %S"), &entry->Version());
+		aConsole.Printf(_L("\n\n=========================================\n"));
+		}
+
+	// Disconnect from the SCR server and cleanup the entry
+	CleanupStack::PopAndDestroy(3, &scr);
+	}
+
+// ==================================================================================
+
+CDeleteCommand* CDeleteCommand::NewLC()
+	{
+	CDeleteCommand* self = new (ELeave) CDeleteCommand;
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+CDeleteCommand::CDeleteCommand(): iComponentId(EInvalidComponentId)
+	{
+	}
+
+CDeleteCommand::~CDeleteCommand()
+	{
+	}
+
+const TDesC& CDeleteCommand::Name()
+	{
+	return KTxtDeleteCommand;
+	}
+
+void CDeleteCommand::OptionHandlerL(const TPtrC& aName, const RArray<TPtrC>& aValues)
+	{
+	// The delete command takes only the id of a component
+	if (aName.Length() || aValues.Count() != 1)
+		{
+		User::Leave(KErrArgument);
+		}
+
+	// Convert the id of the component from string to int
+	TLex lex(aValues[0]);
+	if (lex.Val(iComponentId) != KErrNone)
+		{
+		User::Leave(KErrArgument);
+		}
+	}
+
+void CDeleteCommand::ExecuteL(CConsoleBase& aConsole)
+	{
+	// Connect to the SIF server
+	RSoftwareInstall sif;
+	TInt err = sif.Connect();
+	if (err != KErrNone)
+		{
+		aConsole.Printf(KTxtSifConnectionFailure);
+		User::Leave(err);
+		}
+	CleanupClosePushL(sif);
+
+	// Delete the component
+	TRequestStatus status;
+	sif.Uninstall(iComponentId, status);
+	aConsole.Printf(KTxtDeleting);
+	User::WaitForRequest(status);
+	if (status.Int() != KErrNone)
+		{
+		User::Leave(status.Int());
+		}
+
+	// Disconnect from the SIF server
+	CleanupStack::PopAndDestroy(&sif);
+	}
+
+// ==================================================================================
+
+CCommandLineParser* CCommandLineParser::NewLC()
+	{
+	CCommandLineParser* self = new (ELeave) CCommandLineParser;
+	CleanupStack::PushL(self);
+	self->iCmdLineArgs = CCommandLineArguments::NewL();
+	return self;
+	}
+
+CCommandLineParser::CCommandLineParser()
+	{
+	}
+
+CCommandLineParser::~CCommandLineParser()
+	{
+	delete iCmdLineArgs;
+	iCommands.Close();
+	}
+	
+void CCommandLineParser::RegisterCommandL(CConsoleCommand& aCommand)
+	{
+	iCommands.Append(&aCommand);
+	}
+
+CConsoleCommand& CCommandLineParser::ParseL()
+	{
+	const TInt numArgs = iCmdLineArgs->Count();
+
+	// There must be at least two arguments: the name of the program and the name of a command
+	if (numArgs <= 1)
+		{
+		User::Leave(KErrArgument);
+		}
+
+	// Extract the name of the command
+	TPtrC arg0 = iCmdLineArgs->Arg(1);
+	if (arg0.Left(KTxtOptionPrefix.iTypeLength) != KTxtOptionPrefix)
+		{
+		User::Leave(KErrArgument);
+		}
+	TPtrC cmdName = arg0.Mid(KTxtOptionPrefix.iTypeLength);
+	
+	// Look for the command in iCommands
+	CConsoleCommand* cmd = NULL;
+	for (TInt i=0; i<iCommands.Count(); ++i)
+		{
+		if (cmdName == iCommands[i]->Name())
+			{
+			cmd = iCommands[i];
+			}
+		}
+	if (cmd == NULL)
+		{
+		User::Leave(KErrArgument);
+		}
+
+	// Iterate over the command's options and build pairs of optName and optValues
+	TPtrC optName;
+	RArray<TPtrC> optValues;
+	CleanupClosePushL(optValues);
+	for (TInt i=2; i<numArgs; ++i)
+		{
+		TPtrC arg = iCmdLineArgs->Arg(i);
+		// Option name
+		if (arg.Left(KTxtOptionPrefix.iTypeLength) == KTxtOptionPrefix)
+			{
+			// Process the previous option
+			if (optName.Length())
+				{
+				cmd->OptionHandlerL(optName, optValues);
+				}
+
+			// Set new option
+			optName.Set(arg.Mid(KTxtOptionPrefix.iTypeLength));
+			if (optName.Length() == 0)
+				{
+				User::Leave(KErrArgument);
+				}
+			optValues.Reset();
+			}
+		else
+			{
+			// Store the option's value
+			optValues.AppendL(arg);
+			}
+		}
+
+	// Process the last option
+	if (optName.Length() || optValues.Count())
+		{
+		cmd->OptionHandlerL(optName, optValues);
+		}
+
+	CleanupStack::PopAndDestroy(&optValues);
+
+	// Return the current command
+	return *cmd;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refsoftwareappmgr/source/command.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines a parser and console commands for the reference Application Manager
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ exampleCode
+*/
+
+#ifndef COMMAND_H
+#define COMAMND_H
+
+#include <e32base.h>
+#include <f32file.h>
+#include <bacline.h>
+
+namespace Usif
+	{
+	class CComponentFilter;
+
+	/**
+	The CConsoleCommand class defines a pure virtual interface for console commands.
+	Each software management operation provided by the Reference Application Manager
+	must implement this interface.
+	*/
+	class CConsoleCommand: public CBase
+		{
+	public:
+		/**
+		Returns the name of the command. The CCommandLineParser class uses this method
+		to find an appropriate command object whilst parsing the console input.
+		*/
+		virtual const TDesC& Name() = 0;
+
+		/**
+		CCommandLineParser uses this method to hand over the recognition of command's options
+		to an appropriate command object.
+		
+		@param aName The name of an option.
+		@param aValues The values of option's parameters.
+		*/
+		virtual void OptionHandlerL(const TPtrC& aName, const RArray<TPtrC>& aValues) = 0;
+
+		/**
+		CCommandLineParser uses this method to execute a command.
+		
+		@param aConsole The console the command writes its output to.
+		*/
+		virtual void ExecuteL(CConsoleBase& aConsole) = 0;
+
+		virtual ~CConsoleCommand();
+
+	protected:
+		CConsoleCommand();
+		CConsoleCommand(const CConsoleCommand&);
+		CConsoleCommand& operator=(const CConsoleCommand&);
+		};
+
+	/**
+	A 'list' command. It displays to the user a list of installed software components.
+	Please @see appmanager.cpp for the list of supported filtering options.
+	*/
+	class CListCommand: public CConsoleCommand
+		{
+	public:
+		static CListCommand* NewLC();
+
+		// Implement CConsoleCommand
+		virtual const TDesC& Name();
+		virtual void OptionHandlerL(const TPtrC& aName, const RArray<TPtrC>& aValues);
+		virtual void ExecuteL(CConsoleBase& aConsole);
+		virtual ~CListCommand();
+
+	private:
+		CListCommand();
+		CComponentFilter* iFilter;
+		TLanguage iLocale;
+		TBool iScomoStateSet;
+		};
+
+	/**
+	A 'delete' command. It deletes a component specified by id from the system. The id of a component
+	to be deleted can be retrieved with the aid of the 'list' command.
+	*/
+	class CDeleteCommand: public CConsoleCommand
+		{
+	public:
+		static CDeleteCommand* NewLC();
+
+		// Implement CConsoleCommand
+		virtual const TDesC& Name();
+		virtual void OptionHandlerL(const TPtrC& aName, const RArray<TPtrC>& aValues);
+		virtual void ExecuteL(CConsoleBase& aConsole);
+		virtual ~CDeleteCommand();
+
+	private:
+		CDeleteCommand();
+		
+		enum { EInvalidComponentId = -1 };
+		TInt iComponentId;
+		};
+
+	/**
+	A user input parser. The Reference Application Manager uses this class to recognize
+	and execute console commands entred by the user. A command must be registered with
+	the RegisterCommandL() method so the parser may use it.
+	The parser uses the CCommandLineArguments class to read user input from the console.
+	*/
+	class CCommandLineParser: public CBase
+		{
+	public:
+		/**
+		Creates a new instance of the Parser.
+		*/
+		static CCommandLineParser* NewLC();
+
+		/**
+		Registers a command to the parser.
+		
+		@param aCommand A command to be registered.
+		*/
+		void RegisterCommandL(CConsoleCommand& aCommand);
+
+		/**
+		Parses user input from the console and returns a command that has been found.
+		*/
+		CConsoleCommand& ParseL();
+
+		virtual ~CCommandLineParser();
+
+	private:
+		CCommandLineParser();
+		CCommandLineParser(const CCommandLineParser&);
+		CCommandLineParser& operator=(const CCommandLineParser&);
+
+		CCommandLineArguments* iCmdLineArgs;
+		RPointerArray<CConsoleCommand> iCommands;
+		};
+	}
+
+#endif //  COMAMND_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* @ SIF Reference Installer
+*
+*/
+
+
+/**
+ @file
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+// ROMKIT includes
+../inc/sifrefinstaller.iby				/epoc32/rom/include/sifrefinstaller.iby
+
+PRJ_TESTEXPORTS
+
+// TEF test scripts
+../test/scripts/tsifrefinstaller.ini				z:/tusif/tsifrefinstaller/tsifrefinstaller.ini
+../test/scripts/tsifrefinstaller.script				z:/tusif/tsifrefinstaller/tsifrefinstaller.script
+
+// ROMKIT includes
+../inc/tsifrefinstaller.iby				/epoc32/rom/include/tsifrefinstaller.iby
+
+PRJ_MMPFILES
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+../group/sifrefpkgrec.mmp
+../group/sifrefplugin.mmp
+../group/sifrefinstallerserver.mmp
+
+#endif // TOOLS2
+#endif // TOOLS
+
+PRJ_TESTMMPFILES
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+#endif // TOOLS2
+#endif // TOOLS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/group/security_sifrefplugin.mrp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,8 @@
+component	security_sifrefplugin
+source	\sf\mw\appinstall\installationservices\refswinstallationplugin\
+binary	\sf\mw\appinstall\installationservices\refswinstallationplugin\group	all
+exports	\sf\mw\appinstall\installationservices\refswinstallationplugin\group
+notes_source	\component_defs\release.src
+
+ipr T
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/group/sifrefinstallerserver.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET				sifrefinstallerserver.exe
+TARGETTYPE			exe
+
+CAPABILITY			ProtServ ReadUserData WriteDevicedata
+
+VENDORID			0x70000001
+
+UID					0x0 0x1028634E
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE			../inc
+USERINCLUDE			../../swinstallationfw/common/inc
+SOURCEPATH			../source
+SOURCE				sifrefinstallerserver.cpp
+SOURCE				sifrefinstallertask.cpp
+SOURCE				sifrefpkgparser.cpp
+SOURCE				sifrefbinpkgextractor.cpp
+SOURCE				sifrefuihandler.cpp
+
+LIBRARY				estor.lib efsrv.lib euser.lib ecom.lib apgrfx.lib apmime.lib
+LIBRARY				scrclient.lib stsclient.lib sif.lib siftransport.lib
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/group/sifrefpkgrec.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Mime type recogniser for SIF reference package
+*
+*/
+
+
+/**
+ @file
+*/
+
+TARGET			sifrefpkgrec.dll
+CAPABILITY		TrustedUI ProtServ
+
+TARGETTYPE		PLUGIN
+UID				0x10009D8D 0x10286351
+VENDORID 		0x70000001
+
+SOURCEPATH		../source
+
+SOURCE			sifrefpkgrec.cpp
+START RESOURCE	10286351.rss
+TARGET			sifrefpkgrec.rsc
+END
+
+USERINCLUDE		../inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib apmime.lib efsrv.lib
+
+START WINS
+BASEADDRESS		0x44700000
+END
+
+START MARM
+END
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/group/sifrefplugin.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Project specification file for a SIF non-native reference plugin
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+TARGET				sifrefplugin.dll
+TARGETTYPE			PLUGIN
+
+UID 0x10009D8D 0x1028634F
+
+
+CAPABILITY			ProtServ TrustedUI ReadUserData WriteDeviceData
+
+SOURCEPATH			../source
+SOURCE				sifrefplugin.cpp
+SOURCE				sifrefinstallerclient.cpp
+
+USERINCLUDE			../inc
+USERINCLUDE			../../swinstallationfw/common/inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+START RESOURCE 1028634f.rss
+	TARGET sifrefplugin.rsc
+END
+
+LIBRARY euser.lib efsrv.lib
+LIBRARY sif.lib siftransport.lib
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/inc/sifrefbinpkgextractor.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines a class responsible for extracting files from a compound package.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ exampleCode
+*/
+
+#ifndef SIFREFBINPKGEXTRACTOR_H
+#define SIFREFBINPKGEXTRACTOR_H
+
+#include <e32base.h>
+#include <f32file.h>
+#include <bacline.h>
+#include <usif/sts/sts.h>
+#include <usif/sts/sts.h>
+#include <usif/sif/sifcommon.h>
+
+namespace Usif
+	{
+	namespace SifRefBinPkgExtractor
+		{
+	
+		/**
+		CAuxNode is an auxiliary node class used for the processing of reference embedded packages
+		without implementing a walk-tree algorithm. The BuildPkgTreeL() function takes a list of CAuxNode
+		objects as an argument and fills it with extracted packages.
+		*/
+		class CAuxNode : public CBase
+			{
+		public:
+			/**
+			Creates an instance of the CAuxNode object.
+			*/
+			static CAuxNode* NewLC(const TDesC& aFileName, TBool aForeign, CAuxNode& aParent);
+			static CAuxNode* NewLC(const RFile& aFile, TBool aForeign, CAuxNode& aParent);
+			/**
+			Destructor.
+			*/
+			virtual ~CAuxNode();
+
+			/**
+			Returns the name of the extracted package associated with this auxiliary node.
+			*/
+			const TDesC& FileNameL() const { return *iFileName; }
+
+			/**
+			Checks if the extracted package associated with this node it a root component.
+			*/
+			TBool Root() const { return iParent == NULL; }
+
+			/**
+			Checks if the extracted package associated with this node is of the reference type.
+			*/
+			TBool Foreign() const { return iForeign; }
+
+			/**
+			Associates aCompInfo with this auxiliary node.
+			*/
+			void SetCompInfoL(CComponentInfo* aCompInfo);
+
+			/**
+			Associates aNode with this auxiliary node.
+			*/
+			void SetNodeL(CComponentInfo::CNode* aNode);
+
+			/**
+			Sets the CNode object associated with this auxiliary node as a root node of aCompInfo.
+			*/
+			void SetAsRootNodeL(CComponentInfo& aCompInfo);
+
+			/**
+			Registers a child CNode object associated with this auxiliary node to its parrent.
+			This method is provided for build a tree of CComponentInfo nodes from a flat tree
+			of auxiliary nodes. After this call the auxiliary node is no longer associated with its
+			CNode object.
+			*/
+			void RegisterChildToParentL();
+			
+		private:
+			CAuxNode();
+			CAuxNode& operator=(const CAuxNode& other);
+			CAuxNode(const CAuxNode& other);
+
+			TBool iForeign;
+			HBufC* iFileName;
+			CAuxNode* iParent;
+			CComponentInfo::CNode* iNode;
+			CComponentInfo* iCompInfo;
+			};
+		
+		/**
+		Builds a tree of the files embedded in the reference binary package specified by aInFileName.
+		The paths to the extracted embedded packages are returned in aFlatTree. This flat list can be
+		simply processed asynchronously without implementing a walk-tree algorithm in the Active Object
+		context. However, it contains the information needed to build a real tree of the
+		CComponentInfo::CNode objects.
+		*/
+		void BuildPkgTreeL(RStsSession& aSts, const TDesC& aInFileName, const TDesC& aTempDir, RPointerArray<CAuxNode>& aFlatTree, CAuxNode* aParent = NULL);
+
+		/**
+		Builds a tree of the files embedded in the reference binary package specified by aInFile.
+		The paths to the extracted embedded packages are returned in aFlatTree. This flat list can be
+		simply processed asynchronously without implementing a walk-tree algorithm in the Active Object
+		context. However, it contains the information needed to build a real tree of the
+		CComponentInfo::CNode objects.
+		*/
+		void BuildPkgTreeL(RStsSession& aSts, RFile& aInFile, const TDesC& aTempDir, RPointerArray<CAuxNode>& aFlatTree, CAuxNode* aParent = NULL);
+		}
+	}
+
+#endif //  SIFREFBINPKGEXTRACTOR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/inc/sifrefinstaller.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef SIFREFINSTALLER_IBY
+#define SIFREFINSTALLER_IBY
+
+define ZDRIVE EPOCROOT##epoc32\data\Z
+
+REM SIF Reference Installer
+
+ECOM_PLUGIN(sifrefpkgrec.dll,10286351.rsc)
+ECOM_PLUGIN(sifrefplugin.dll,1028634f.rsc)
+
+file=ABI_DIR\BUILD_DIR\sifrefinstallerserver.exe	\sys\bin\sifrefinstallerserver.exe
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/inc/sifrefinstallerclient.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* siftransportclient.h
+* This file defines the client side of the Reference Installer.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ exampleCode
+*/
+
+#ifndef SIFREFINSTALLERCLIENT_H
+#define SIFREFINSTALLERCLIENT_H
+
+#include <usif/sif/siftransportclient.h>
+
+namespace Usif
+	{
+	/**
+	The client side of the Reference Installer. This class uses the SIF Transport to send
+	software management requests to the Reference Installer Server that resides in a separate
+	process. The Reference SIF Plug-in is a client of the Reference Installer Server so it
+	uses this class to connect to the Server process and send SIF requests .
+	 */
+	class RSifRefInstallerClient
+		{
+	public:
+		RSifRefInstallerClient();
+
+		/**
+		Connects a client to the Reference Installer Server.
+		 
+		@return	Symbian OS error code where KErrNone indicates
+				success and any other value indicates failure.
+		*/
+		TInt Connect();
+
+		/**
+		Disconnects a client from the Reference Installer Server.
+		*/
+		void Close();
+
+		/**
+		Returns the details of a component to be installed by file name
+		
+		@param aFileName, The file name of a component to be queried
+		@param aComponentInfo On return, contains the details of a component
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		void GetComponentInfo(const TDesC& aFileName, CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+
+		/**
+		Returns the details of a component to be installed by file handle
+		
+		@param aFileHandle, The file handle of a component to be queried
+		@param aComponentInfo On return, contains the details of a component
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		void GetComponentInfo(RFile& aFileHandle, CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+
+		/**
+		Installs a component by file name
+		
+		@param aFileName The file name of a component to be installed
+		@param aArguments The array of opaque params for the Reference Installer Server.
+		An empty array may be passed. The following param is defined for the "SCOMO
+		Install Inactive" operation:
+		Name: InstallInactive, Type: Int, Value: ETrue
+		@param aResults The array of opaque params returned from the Reference Installer
+		Server.
+		The following return param is defined for the id of an installed component:
+		Name: ComponentId, Type: Int
+		For packages containing embedded components, the returned param contains
+		the id of the last/most embedded component.
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		void Install(const TDesC& aFileName, const COpaqueNamedParams& aArguments,
+								COpaqueNamedParams& aResults, TRequestStatus& aStatus);
+
+		/**
+		Installs a component by file handle
+		
+		@param aFileHandle The file handle of a component to be installed
+		@param aArguments The array of opaque params for the Reference Installer Server.
+		An empty array may be passed.  The following param is defined for the "SCOMO
+		Install Inactive" operation:
+		Name: InstallInactive, Type: Int, Value: ETrue
+		@param aResults The array of opaque params returned from the Reference Installer
+		Server.
+		The following return param is defined for the id of an installed component:
+		Name: ComponentId, Type: Int
+		For packages containing embedded components, the returned param contains
+		the id of the last/most embedded component.
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		void Install(RFile& aFileHandle, const COpaqueNamedParams& aArguments,
+								COpaqueNamedParams& aResults, TRequestStatus& aStatus);
+
+		/**
+		Uninstalls a component
+		
+		@param aComponentId The id of a component to be uninstalled
+		@param aArguments The array of opaque params for the Reference Installer
+		Server. An empty array may be passed.
+		@param aResults The array of opaque results returned from a SIF plug-in.
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		void Uninstall(TComponentId aComponentId, const COpaqueNamedParams& aArguments,
+								COpaqueNamedParams& aResults, TRequestStatus& aStatus);
+
+		/**
+		Activates a component
+		
+		@param aComponentId The id of a component to be activated
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		void Activate(TComponentId aComponentId, TRequestStatus& aStatus);
+
+		/**
+		Deactivates a component
+		
+		@param aComponentId The id of a component to be deactivated
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		void Deactivate(TComponentId aComponentId, TRequestStatus& aStatus);
+
+		/**
+		Cancels an ongoing asynchronous request
+		
+		This is a synchronous call. When it returns the original asynchronous call is completed.
+		*/
+		void CancelOperation();
+
+	private:
+		RSifRefInstallerClient(const RSifRefInstallerClient&);
+		RSifRefInstallerClient& operator=(const RSifRefInstallerClient&);
+
+		RSifTransportClient iTransporter;
+		};
+
+	} // namespace Usif
+
+#endif // SIFREFINSTALLERCLIENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/inc/sifrefinstallerclientserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines constants for the Refrence Installer client/server layer.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ exampleCode
+*/
+
+#ifndef SIFREFINSTALLERCLIENTSERVER_H
+#define SIFREFINSTALLERCLIENTSERVER_H
+
+#include <e32uid.h>
+
+namespace Usif
+	{
+	/**
+	The name of the Reference Installer Server.
+	*/
+	_LIT(KSifRefInstallerServerName,"!SifRefInstallerServer");
+
+	/**
+	The version of the Reference Installer Server.
+	*/
+	const TInt KSifRefServerVerMajor = 1;	///< SIF Reference Installer Server version major component.
+	const TInt KSifRefServerVerMinor = 0;	///< SIF Reference Installer Server version minor component.
+	const TInt KSifRefServerVerBuild = 0;	///< SIF Reference Installer Server version build number.
+
+	/**
+	Returns the version of the Reference Installer Server as a TVersion object.
+
+	This function is defined because there is no literal constructor for TVersion.
+	*/
+	TVersion Version()
+		{
+		TVersion v(KSifRefServerVerMajor, KSifRefServerVerMinor, KSifRefServerVerBuild);
+		return v;
+		}
+
+	} // End of namespace Usif
+
+#endif	// #ifndef SIFREFINSTALLERCLIENTSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/inc/sifrefinstallertask.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,281 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines tasks for the Reference Installer. These tasks implement the CSifTransportTask
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ exampleCode
+ interface. Please @see siftransporttask.h for details of this interface.
+*/
+
+#ifndef SIFREFINSTALLERTASK_H
+#define SIFREFINSTALLERTASK_H
+
+#include <usif/scr/scr.h>
+#include <usif/sts/sts.h>
+#include <usif/sif/sif.h>
+#include <usif/sif/siftransporttask.h>
+#include "sifrefbinpkgextractor.h"
+#include "sifrefpkgparser.h"
+
+namespace Usif
+	{
+
+	/**
+	The MInstallerUIHandler class defines an interface for UI callbacks. The Reference
+	Installer tasks uses a concrete implementation of this interface to interact with the user.
+	
+	This interface defines four arbitrary chosen callbacks. A real installer may define
+	its own interface when these callbacks aren't sufficient.
+	*/
+	class MInstallerUIHandler
+		{
+	public:
+		/**
+		Gets called when an installer needs a confirmation dialog to be displayed to the user.
+		*/
+		virtual TBool ConfirmationUIHandler(const TDesC& aQuestion) = 0;
+
+		/**
+		Gets called when an installer needs an error description to be displayed to the user.
+		*/
+		virtual void ErrorDescriptionUIHandler(const TDesC& aDescription) = 0;
+		};
+
+	/**
+	A factory function. The Reference Installer Server uses this function to instantiate a UI handler object.
+	*/
+	typedef MInstallerUIHandler* (*TInstallerUIHandlerFactory)();
+
+// ===========================================================================================================
+
+	/**
+	An auxiliary data structure used by the Reference Installer tasks for SCR search results.
+	*/
+	struct TComponentSearchData
+		{
+		const TDesC* iName;
+		const TDesC* iVendor;
+		TVersionName iVersion;
+		TScomoState iScomoState;
+		TInstallStatus iInstallStatus;
+		TComponentId iComponentId;
+		};
+
+// ===========================================================================================================
+
+	/**
+	A Reference Installer task that implements the 'GetComponentInfo' SIF request.
+	*/
+	class CSifRefGetComponentInfoTask : public CSifTransportTask
+		{
+	public:
+		static CSifRefGetComponentInfoTask* NewL(TTransportTaskParams& aParams);
+		virtual ~CSifRefGetComponentInfoTask();
+
+	protected:
+		virtual TBool ExecuteImplL();
+
+	private:
+		CSifRefGetComponentInfoTask(TTransportTaskParams& aParams);
+
+		// GetComponentInfo steps
+		void ExtractEmbeddedPkgsL();
+		TInt ParsePkgFileL();
+		void CheckAndSetComponentInfoL();
+		TInt CreateComponentInfoNodeL();
+		void SetComponentInfoL();
+
+		// Installer's tools
+		RSoftwareComponentRegistry iScr;
+		RStsSession iSts; // used for temporary files
+		CSifRefPkgParser* iParser;
+
+		// Interstate data
+		TComponentSearchData iCompSearchData;
+
+		// Embedded components extracted from a compound package
+		RCPointerArray<SifRefBinPkgExtractor::CAuxNode> iEmbeddedComponents;
+		TInt iCurrentComponent;
+
+		// Stuff needed for processing packages of different types
+		RSoftwareInstall iSif;
+		TBool iSifRequestInProgress;
+		CComponentInfo* iComponentInfo;
+		RFs iFs;
+		RFile iFile;
+
+		// The GetComponentInfo task consists of the following steps
+		enum TGetComponentInfoSteps
+			{
+			EExtractEmbeddedPkgs = 1,
+			EParsePkgFile,
+			EFindComponent,
+			ECreateComponentInfoNode,
+			ESetComponentInfo
+			};
+		TInt iStep;
+		};
+
+// ===========================================================================================================
+
+	/**
+	A Reference Installer task that implements the 'Install' SIF request.
+	*/
+	class CSifRefInstallTask : public CSifTransportTask
+		{
+	public:
+		static CSifRefInstallTask* NewL(TTransportTaskParams& aParams, TInstallerUIHandlerFactory aUiHandlerFactory);
+		virtual ~CSifRefInstallTask();
+
+	protected:
+		virtual TBool ExecuteImplL();
+
+	private:
+		CSifRefInstallTask(TTransportTaskParams& aParams);
+		void ConstructL(TInstallerUIHandlerFactory aUiHandlerFactory);
+
+		// Installation steps
+		void ExtractEmbeddedPkgsL();
+		TInt ParsePkgFileImplL();
+		TInt ParsePkgFileL();
+		void LaunchForeignInstallL();
+		void FinishForeignInstallL();
+		TInt FindAndCheckComponentL();
+		void GetInstalledFileListL();
+		TBool UnregisterAndDeleteFileL();
+		void RegisterComponentL();
+		TBool CopyFileL();
+		TInt SetScomoStateL();
+		void CommitL();
+
+		// Installer's tools
+		RSoftwareComponentRegistry iScr;
+		RStsSession iSts;
+		CSifRefPkgParser* iParser;
+		TBool iScrTransaction;
+
+		// UI interaction
+		MInstallerUIHandler* iUiHandler;
+
+		// Interstate data
+		TComponentSearchData iCompSearchData;
+		RSoftwareComponentRegistryFilesList iFileList;
+
+		// Embedded components extracted from a compound package
+		RCPointerArray<SifRefBinPkgExtractor::CAuxNode> iEmbeddedComponents;
+		TInt iCurrentComponent;
+
+		// Stuff needed for processing packages of different types
+		RSoftwareInstall iSif;
+		COpaqueNamedParams* iOpaqueArguments;
+		COpaqueNamedParams* iOpaqueResults;
+		TBool iSifRequestInProgress;
+		RFs iFs;
+		RFile iFile;
+
+		// The Install task consists of the following steps
+		enum TInstallSteps
+			{
+			EExtractEmbeddedPkgs = 1,
+			EParsePkgFile,
+			ELaunchForeignInstall,
+			EFinishForeignInstall,
+			EFindAndCheckComponent,
+			EGetInstalledFileList,
+			EUnregisterAndDeleteFile,
+			ERegisterComponent,
+			ECopyFile,
+			ESetScomoState,
+			ECommit
+			};
+		TInt iStep;
+
+		// File index for the state machine in the ECopyFile step
+		TInt iCopyFileIndex;
+		// Component size will be calculated and set in the SCR
+		TInt64 iComponentSize; 
+		};
+
+// ===========================================================================================================
+
+	/**
+	A Reference Installer task that implements the 'Uninstall' SIF request.
+	*/
+	class CSifRefUninstallTask : public CSifTransportTask
+		{
+	public:
+		static CSifRefUninstallTask* NewL(TTransportTaskParams& aParams, TInstallerUIHandlerFactory aUiHandlerFactory);
+		virtual ~CSifRefUninstallTask();
+
+	protected:
+		virtual TBool ExecuteImplL();
+
+	private:
+		CSifRefUninstallTask(TTransportTaskParams& aParams);
+		void ConstructL(TInstallerUIHandlerFactory aUiHandlerFactory);
+
+		void GetFileListL();
+		TBool UnregisterAndDeleteFileL();
+		void CommitL();
+
+		// UI interaction
+		MInstallerUIHandler* iUiHandler;
+
+		// Installer's tools
+		RSoftwareComponentRegistry iScr;
+		RStsSession iSts;
+		
+		// Interstate data
+		RSoftwareComponentRegistryFilesList iFileList;
+
+		// The Uninstall task consists of the following steps
+		enum TUninstallSteps
+			{
+			EGetFileList = 1,
+			EUnregisterAndDeleteFile,
+			ECommit
+			};
+		TInt iStep;
+		};
+
+// ===========================================================================================================
+
+	/**
+	A Reference Installer task that implements the 'Activate' and 'Deactivate' SIF requests.
+	*/
+	class CSifRefActivateDeactivateTask : public CSifTransportTask
+		{
+	public:
+		CSifRefActivateDeactivateTask(TTransportTaskParams& aParams, TScomoState aScomoState);
+		virtual ~CSifRefActivateDeactivateTask();
+
+	protected:
+		virtual TBool ExecuteImplL();
+
+	private:
+		// Installer's tools
+		RSoftwareComponentRegistry iScr;
+
+		TScomoState iScomoState;
+		};
+
+	} // namespace Usif
+
+#endif // SIFREFINSTALLERTASK_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/inc/sifrefpkgparser.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines a file package parser for the Reference Installer.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ exampleCode
+*/
+
+#ifndef __SIFREFPKGPARSER_H__
+#define __SIFREFPKGPARSER_H__
+
+#include <scs/scsclient.h>
+#include <f32file.h>
+#include <usif/sif/sifcommon.h>
+
+namespace Usif
+	{
+	// Helpful typedefs
+	typedef RArray<TLanguage> RLanguageArray;
+	typedef RCPointerArray<HBufC> RCHBufCArray;
+
+	/**
+	A package file parser. This refrence implementation reads an entire file into a buffer
+	and then parses it line by line. The parser operates synchronously and therefore
+	the processing of a package cannot be cancelled.
+	*/
+	class CSifRefPkgParser: public CBase
+		{
+	public:
+		/**
+		Creates an instance of the parser and parses a package file by file name.
+		
+		@param aFileName The name of a package file to be parsed.
+		@return Pointer to an instance of the parser.
+		*/
+		static CSifRefPkgParser* NewL(const TDesC& aFileName);
+
+		/**
+		Destroys an instance of the parser.
+		*/
+		virtual ~CSifRefPkgParser();
+
+		/**
+		Gets a reference to an array of languages supported by the package.
+		*/
+		const RLanguageArray& Languages() const;
+
+		/**
+		Gets a reference to an array of localized names of a component in the package.
+		The sequence of the names in the array corresponds to the sequence of
+		the languages returned by Languages().
+		*/
+		const RCHBufCArray& ComponentNames() const;
+
+		/**
+		Gets a reference to an array of localized names of the vendor of a component in
+		the package. The sequence of the names in the array corresponds to the sequence of
+		the languages returned by Languages().
+		*/
+		const RCHBufCArray& VendorNames() const;
+
+		/**
+		Gets a reference to an array of files of a component in the package.
+		*/
+		const RCHBufCArray& Files() const;
+
+		/**
+		Gets the version of a component in the package.
+		*/
+		const TVersion& Version() const;
+
+		/**
+		A helper method. Gets the index of aLanguage in the array of languages supported by
+		a component in the package.
+		
+		@param aLanguage Language to be found.
+		@return The index of aLanguage in the array of supported languages.
+		*/
+		TInt GetLanguageIndex(TLanguage aLanguage) const;
+
+	private:
+		CSifRefPkgParser();
+		CSifRefPkgParser(const CSifRefPkgParser&);
+		CSifRefPkgParser& operator=(const CSifRefPkgParser&);
+
+		void ParseL(const TDesC& aFileName);
+		void ParseL(RFile& aFileHandle);
+		void LineHandlerL(const TPtrC8& aName, const TPtrC8& aValue);
+		void CheckInvariantL() const;
+
+		RLanguageArray iLanguages;
+		RCHBufCArray iComponentNames;
+		RCHBufCArray iVendorNames;
+		RCHBufCArray iFiles;
+		TVersion iVersion;
+		};
+
+	} // namespace Usif
+
+#endif // __SIFREFPKGPARSER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/inc/sifrefpkgrec.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines a package recognizer for the Reference Installer.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ exampleCode
+*/
+
+#ifndef SIFREFPKGREC_H
+#define SIFREFPKGREC_H
+
+/**
+A reference package recognizer. This class implements the CApaDataRecognizerType interface.
+Please see the description of @see CApaDataRecognizerType for details. 
+
+The SIF Server uses this class through the AppArc APIs to recognize reference packages.
+*/
+class CSifRefPkgRecognizer : public CApaDataRecognizerType
+	{
+public:
+	/**
+	Gets the size of buffer preferred for the purpose of recognizing the data type.
+	*/
+	TUint PreferredBufSize();
+
+	/**
+	Gets one of the data (MIME) types that the recognizer can recognize.
+	
+	@param aIndex An index that identifies the data type.
+	@return The data (MIME) type.
+	*/
+	TDataType SupportedDataTypeL(TInt aIndex) const;
+
+	/**
+	Creates an instance of the recognizer.
+	*/
+	static CApaDataRecognizerType* CreateRecognizerL();
+
+private:
+	CSifRefPkgRecognizer();
+
+	/**
+	Implements the recognition algorithm for the Reference Installer.
+	*/
+	void DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer);
+	};
+
+#endif // SIFREFPKGREC_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/inc/sifrefplugin.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines a SIF plug-in for the Reference Installer.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ exampleCode
+*/
+
+#ifndef SIFREFPLUGIN_H
+#define SIFREFPLUGIN_H
+
+#include <usif/sif/sifplugin.h>
+#include <e32base.h>
+#include <e32std.h>
+#include "sifrefinstallerclient.h"
+
+namespace Usif
+	{
+	/**
+	An active object used by the CSifRefPlugin class to submit asynchronous requests.
+	
+	ECOM objects and CActive do not interact well - especially since SIFPlugin inherits
+	from CBase and double C-inheritance is impossible. So, a separate class is used to drive
+	asynchronous software management requests.
+	*/
+	NONSHARABLE_CLASS(CSifRefPluginActiveImpl) : public CActive
+	{
+	public:
+		static CSifRefPluginActiveImpl* NewL();
+		~CSifRefPluginActiveImpl();
+
+		/* CActive interface */
+		void RunL();
+		void DoCancel();
+
+		/* CSifPlugin interface */
+		void GetComponentInfo(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+							CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+
+		void GetComponentInfo(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+							CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+
+		void Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+					const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+					TRequestStatus& aStatus);
+
+		void Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+					const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+					TRequestStatus& aStatus);
+
+		void Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+						const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, 
+						TRequestStatus& aStatus);
+
+		void Activate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+						TRequestStatus& aStatus);
+
+		void Deactivate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+						TRequestStatus& aStatus);
+
+	private:
+		CSifRefPluginActiveImpl() : CActive(EPriorityStandard) {}
+		CSifRefPluginActiveImpl(const CSifRefPluginActiveImpl&);
+		CSifRefPluginActiveImpl& operator =(const CSifRefPluginActiveImpl&);
+		void ConstructL();
+		TBool CommonRequestPreamble(const TSecurityContext& aSecurityContext, const COpaqueNamedParams& aInputParams, 
+									COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus);
+	private:
+		RSifRefInstallerClient iTransporter;
+		TRequestStatus* iClientStatus;
+		const COpaqueNamedParams* iInputParams;
+		COpaqueNamedParams* iOutputParams;
+		};
+
+	/*
+	An implementation of the CSifPlugin interface for the Reference Installer.
+	
+	The SIF Server loads and uses this plug-in when the MIME type of a package is 'binary/sif-refpkg'.
+	*/
+	NONSHARABLE_CLASS(CSifRefPlugin) : public CSifPlugin
+		{
+	public:
+		static CSifRefPlugin* NewL();
+		~CSifRefPlugin();
+
+		/* CSifPlugin interface */
+		void GetComponentInfo(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+							CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+
+		void GetComponentInfo(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+							CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+		
+		void Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+							const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+							TRequestStatus& aStatus);
+
+		void Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+							const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+							TRequestStatus& aStatus);
+
+		virtual void Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+								TRequestStatus& aStatus);
+
+		virtual void Activate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								TRequestStatus& aStatus);
+
+		virtual void Deactivate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								TRequestStatus& aStatus);
+
+		void CancelOperation();
+
+	private:
+		CSifRefPlugin() {}
+		void ConstructL();
+		CSifRefPlugin(const CSifRefPlugin &);
+		CSifRefPlugin& operator =(const CSifRefPlugin &);
+
+		CSifRefPluginActiveImpl *iImpl;
+		};
+	} // end namespace Usif
+
+#endif // SIFREFPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/inc/sifrefuihandler.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines an example implementation of the MInstallerUIHandler interface.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ exampleCode
+*/
+
+#ifndef SIFREFUIHANDLER_H
+#define SIFREFUIHANDLER_H
+
+#include "sifrefinstallertask.h"
+#include "sifrefpkgparser.h"
+
+namespace Usif
+	{
+	/**
+	A dummy implementation of the @see MInstallerUIHandler interface for the Reference
+	Installer. It doesn't interact with a real UI subsystem but returns hardcoded values only.
+	
+	Please see @see sifrefinstallertask.h for details of @see MInstallerUIHandler.
+	*/
+	class MSifRefUIHandler : public MInstallerUIHandler
+		{
+	public:
+		// MInstallerUIHandler interface
+		virtual TBool ConfirmationUIHandler(const TDesC& aQuestion);
+		virtual void ErrorDescriptionUIHandler(const TDesC& aDescription);
+		};
+	} // namespace Usif
+
+#endif // SIFREFUIHANDLER_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/inc/tsifrefinstaller.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef TSIFREFINSTALLER_IBY
+#define TSIFREFINSTALLER_IBY
+
+REM Tests for SIF Reference Installer
+
+define ZDRIVE EPOCROOT##epoc32\data\Z
+
+data=ZDRIVE\tusif\tsifrefinstaller\data\base.sifrefbinpkg					\tusif\tsifrefinstaller\data\base.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\base3.sifrefbinpkg					\tusif\tsifrefinstaller\data\base3.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\upgrade.sifrefbinpkg				\tusif\tsifrefinstaller\data\upgrade.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid3.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid3.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid4.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid4.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid5.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid5.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid6.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid6.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid7.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid7.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid8.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid8.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid9.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid9.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid10.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid10.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid11.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid11.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\invalid12.sifrefbinpkg				\tusif\tsifrefinstaller\data\invalid12.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\homogeneouscompound.sifrefbinpkg	\tusif\tsifrefinstaller\data\homogeneouscompound.sifrefbinpkg
+data=ZDRIVE\tusif\tsifrefinstaller\data\fileinusetest.sifrefbinpkg	\tusif\tsifrefinstaller\data\fileinusetest.sifrefbinpkg
+
+REM executables used by integration tests
+file=ABI_DIR\BUILD_DIR\siftestintegrationlockfile.exe					\sys\bin\siftestintegrationlockfile.exe
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/sample/base.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF"
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
+File: c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/sample/invalid.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
+File: c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/sample/makebinpkg.pl	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,101 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# This script belongs to the SIF Reference Installer. It builds a binary reference package that
+# contains a pkg file describing the (base) component to be installed and (optionally) embedded
+# components.
+# The structure of an output file is as follows:
+# 36 bytes				header
+# 4 bytes 					the size of a pkg file describing the component (pkgSize)
+# pkgSize bytes				the content of a pkg file describing the component
+# 4 bytes					the number of embedded components in a package (numEmbComps)
+# 4 bytes						the length of the name of an embedded component (embCompFileNameLen)   \
+# embCompFileNameLen bytes	the name of an embedded component								       } this block repeats numEmbComps times
+# 4 bytes					the size of an embedded component (embCompFileSize)				     /
+# embCompFileSize bytes		the content of an embedded component								  /
+# 45 bytes - footer
+# 
+#
+
+use Getopt::Long;
+use File::Basename;
+
+my $KCopyChunkSize = 65536;
+
+my $header = '_SifReferenceInstallerPackageHeader_';
+my $footer = '_SifReferenceInstallerPackageFooter_';
+
+# Read and check arguments
+my $help = "\nExample usage:\nmakebinpkg.pl --pkg base.sifrefpkg --emb simple.sis --binpkg compound.sifrefbinpkg\n";
+my $inPkg = '';
+my @embComps = ();
+my $outPkg = '';
+GetOptions("pkg=s" => \$inPkg, "emb=s" => \@embComps, "binpkg=s" => \$outPkg) or die "GetOptions failed.\n$help";
+$outPkg or die "Output file not defined\n$help";
+my $numEmbComps = @embComps;
+$numEmbComps <= 16 or die "Too many embedded components.\n$help";
+
+# Create the output file
+unlink($outPkg);
+open OUTFILE, ">$outPkg" or die "\nCan't open $outPkg for writing: $!\n";
+binmode OUTFILE;
+
+# Write the header
+print OUTFILE $header;
+
+# Write the size of the input pkg file
+my $inPkgFileSize = -s $inPkg;
+print "Input pkg file: $inPkg, size: $inPkgFileSize\n";
+print OUTFILE pack("i", $inPkgFileSize);
+
+# Write the content of the input pkg file
+open INPKGFILE, $inPkg or die "\nCan't open $inPkg file for reading: $!\n";
+binmode INPKGFILE;
+my $buffer;
+while (read (INPKGFILE, $buffer, $KCopyChunkSize) and print OUTFILE $buffer) # read in (up to) 64k chunks, write, exit if read or write fails
+	{}; die "Problem copying: $!\n" if $!;
+close INPKGFILE;
+
+# Write the number of input files
+print OUTFILE pack("i", $numEmbComps);
+
+# Iterate over the embedded components adding them into the output file
+foreach (@embComps)
+	{
+	my $baseName = basename($_);
+	
+	# Write the length of the file name
+	print "Processing file: $_";
+	print OUTFILE pack("i", length($baseName));
+	
+	# Write the file name
+	print OUTFILE $baseName;
+	
+	# Write the size of the file
+	my $embCompFileSize = -s $_;
+	print ", size: $embCompFileSize\n";
+	print OUTFILE pack("i", $embCompFileSize);
+	
+	# Write the content of the file
+	open EMBFILE, $_ or die "\nCan't open $srcfile for reading: $!\n";
+	binmode EMBFILE;
+	my $buffer;
+	while ( read (EMBFILE, $buffer, $KCopyChunkSize) and print OUTFILE $buffer) # read in (up to) 64k chunks, write, exit if read or write fails
+		{}; die "Problem copying: $!\n" if $!;
+	close EMBFILE;
+	}
+
+# Write the footer and close the output file
+print OUTFILE $footer;
+close OUTFILE;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/sample/upgrade.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF"
+ComponentVersion: 1.23(4)
+ComponentVendor: "Symbian" "Symbian"
+File: c:\RefComponent\file3.ref
+File: c:\RefComponent\file4.ref
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/source/1028634f.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* ECOM DLL UID:			0x1028634F
+* ECOM interface UID:		0x10285BC2 (KUidSifPlugin)
+* ECOM Implementation:		0x10286350
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+
+RESOURCE REGISTRY_INFO so_registry
+	{
+	dll_uid = 0x1028634F;
+	interfaces =
+		{
+		INTERFACE_INFO
+			{
+			interface_uid = 0x10285BC2;
+			
+			implementations =
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x10286350;
+					version_no = 1;
+					default_data = "";
+					opaque_data = "";
+					}
+				};
+			}
+		};
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/source/10286351.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* 102031FB.rss
+* UIDs quick-ref
+* ECOM DLL UID:			0x10286351
+* ECOM interface UID:		0x101F7D87
+* ECOM Implementation:		0x10286352
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+RESOURCE REGISTRY_INFO r_registry
+{
+	dll_uid = 0x10286351;
+	interfaces =
+	{
+		INTERFACE_INFO
+		{
+		interface_uid = 0x101F7D87;	// Const for all data recognisers
+		implementations = 
+			{
+			IMPLEMENTATION_INFO
+				{
+				implementation_uid = 0x10286352;
+				version_no = 1;
+				display_name = "sifrefpkgrec";
+				default_data = ""; // This means it accepts ALL types
+				opaque_data = "";
+				}
+			};
+		}
+	};
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/source/sifrefbinpkgextractor.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,426 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* filemerger.cpp
+*
+*/
+
+
+#include <e32cons.h>
+#include <scs/cleanuputils.h>
+#include <apmstd.h> 
+#include <apgcli.h>
+#include "usiflog.h"
+#include "sifrefbinpkgextractor.h"
+
+_LIT8(KCompoundPackageHeader, "_SifReferenceInstallerPackageHeader_");
+_LIT8(KCompoundPackageFooter, "_SifReferenceInstallerPackageFooter_");
+_LIT(KPkgFileExt, ".sifrefpkg");
+_LIT(KRefBinPkgMimeType, "binary/sif-refpkg");
+_LIT(KEmbCompMidDir, "children\\");
+_LIT(KDirSeparator, "\\");
+
+const TInt KBufferLength = 0x3FFC; // 16kB
+const TInt KMaxNumFiles = 16;
+const TInt KMaxEmbCompSize = 0xFFFFFF; // 16MB
+
+using namespace Usif;
+
+namespace
+	{
+	TInt ReadInt32L(RFile& file)
+		{
+		TBuf8<4> buf;
+		User::LeaveIfError(file.Read(buf, sizeof(TInt)));
+		return buf[0] | buf[1]<<8 | buf[2]<<16 | buf[3]<<24;
+		}
+
+	HBufC* BuildPkgFileNameLC(const TDesC& aTempDir, const TDesC& aBinPkgPath)
+		{
+		TParsePtrC parser(aBinPkgPath);
+		TPtrC binPkgfileName = parser.Name();
+		HBufC* pkgfileName = HBufC::NewLC(aTempDir.Length() + binPkgfileName.Length() + KPkgFileExt.iTypeLength);
+		TPtr pkgfileNamePtr =  pkgfileName->Des();
+		pkgfileNamePtr += aTempDir;
+		pkgfileNamePtr += binPkgfileName;
+		pkgfileNamePtr += KPkgFileExt;
+		
+		return pkgfileName;
+		}
+
+	HBufC* BuildPkgFileNameLC(const TDesC& aTempDir, const RFile& aFile)
+		{
+		HBufC* name = HBufC::NewLC(KMaxFileName);
+		TPtr namePtr(name->Des());
+		User::LeaveIfError(aFile.Name(namePtr));
+		
+		HBufC* pkgName = BuildPkgFileNameLC(aTempDir, *name);
+		
+		CleanupStack::Pop(pkgName);
+		CleanupStack::PopAndDestroy(name);
+		CleanupStack::PushL(pkgName);
+		
+		return pkgName;
+		}
+
+	void ExtractBinPkgFileL(RStsSession& aSts, RFile& aInFile, const TDesC& aOutPath, RPointerArray<HBufC>& aOutFiles)
+		{
+		// Check file size
+		TInt size(0);
+		User::LeaveIfError(aInFile.Size(size));
+		if (size < KCompoundPackageHeader.iTypeLength+KCompoundPackageFooter.iTypeLength+sizeof(TInt))
+			{
+			User::Leave(KErrCorrupt);
+			}
+		
+		// Create a buffer
+		HBufC8* buffer = HBufC8::NewLC(KBufferLength);
+		TPtr8 bufPtr = buffer->Des();
+		
+		// Read header
+		User::LeaveIfError(aInFile.Read(bufPtr, KCompoundPackageHeader.iTypeLength));
+		if (bufPtr != KCompoundPackageHeader)
+			{
+			User::Leave(KErrCorrupt);
+			}
+		bufPtr.Zero();
+		
+		// Read the size of a pkg content
+		const TInt pkgSize = ReadInt32L(aInFile);
+		if (pkgSize > KBufferLength)
+			{
+			User::Leave(KErrCorrupt);
+			}
+
+		// Build the name of the pkg file
+		HBufC* inFileNameWithExt = HBufC::NewLC(KMaxFileName);
+		TPtr inFileNameWithExtPtr = inFileNameWithExt->Des();
+		User::LeaveIfError(aInFile.Name(inFileNameWithExtPtr));
+		HBufC* pkgFileName = BuildPkgFileNameLC(aOutPath, *inFileNameWithExt);
+
+		// Create the pkg file
+		RFile pkgFile;
+		aSts.CreateTemporaryL(*pkgFileName, pkgFile, EFileWrite);
+		CleanupClosePushL(pkgFile);
+		
+		// Copy the content of the pkg file
+		User::LeaveIfError(aInFile.Read(bufPtr, pkgSize));
+		User::LeaveIfError(pkgFile.Write(bufPtr));
+		CleanupStack::PopAndDestroy(&pkgFile);
+		bufPtr.Zero();
+		
+		// Read the number of embedded components
+		const TInt numEmbComps = ReadInt32L(aInFile);
+		if (numEmbComps > KMaxNumFiles)
+			{
+			User::Leave(KErrCorrupt);
+			}
+		
+		// Create a directory for embedded components
+		HBufC* embCompPath = NULL;
+		if (numEmbComps > 0)
+			{
+			embCompPath = HBufC::NewLC(aOutPath.Length() + KEmbCompMidDir.iTypeLength);
+			embCompPath->Des().Copy(aOutPath);
+			embCompPath->Des().Append(KEmbCompMidDir);
+			}
+		
+		// Iterate over the components and extract them
+		for (TInt i=0; i<numEmbComps; ++i)
+			{
+			// Read the length of the name of an embedded component
+			const TInt strLen = ReadInt32L(aInFile);
+			if (strLen > KMaxPath)
+				{
+				User::Leave(KErrCorrupt);
+				}
+			
+			// Read the name of an embedded component and build its target path
+			User::LeaveIfError(aInFile.Read(bufPtr, strLen));
+			HBufC* embFileName = ConvertBufferTo16bitL(bufPtr);
+			CleanupStack::PushL(embFileName);
+			bufPtr.Zero();
+			HBufC* embFileTargetPath = HBufC::NewLC(embCompPath->Length() + 2*embFileName->Length() + KDirSeparator.iTypeLength);
+			TPtr embFileTargetPathPtr(embFileTargetPath->Des());
+			embFileTargetPathPtr.Copy(*embCompPath);
+			embFileTargetPathPtr += *embFileName;
+			embFileTargetPathPtr += KDirSeparator;
+			embFileTargetPathPtr += *embFileName;
+			
+			// Read the size of an embedded component
+			const TInt fileSize = ReadInt32L(aInFile);
+			if (fileSize > KMaxEmbCompSize)
+				{
+				User::Leave(KErrCorrupt);
+				}
+			
+			// Create an output file
+			RFile outFile;
+			aSts.CreateTemporaryL(*embFileTargetPath, outFile, EFileWrite);
+			CleanupClosePushL(outFile);
+			
+			// Copy the content of the output file
+			const TInt numChunks = fileSize / KBufferLength;
+			for (TInt c=0; c<numChunks; ++c)
+				{
+				User::LeaveIfError(aInFile.Read(bufPtr, KBufferLength));
+				User::LeaveIfError(outFile.Write(bufPtr));
+				bufPtr.Zero();
+				}
+			const TInt remainder = fileSize % KBufferLength;
+			User::LeaveIfError(aInFile.Read(bufPtr, remainder));
+			User::LeaveIfError(outFile.Write(bufPtr));
+			bufPtr.Zero();
+			
+			CleanupStack::PopAndDestroy(&outFile);
+			aOutFiles.AppendL(embFileTargetPath);
+			CleanupStack::Pop(embFileTargetPath);
+			CleanupStack::PopAndDestroy(embFileName);
+			}
+		
+		if (embCompPath != NULL)
+			{
+			CleanupStack::PopAndDestroy(embCompPath);
+			}
+		
+		// Read footer
+		User::LeaveIfError(aInFile.Read(bufPtr, KCompoundPackageFooter.iTypeLength));
+		if (bufPtr != KCompoundPackageFooter)
+			{
+			User::Leave(KErrCorrupt);
+			}
+		bufPtr.Zero();
+		
+		CleanupStack::PopAndDestroy(3, buffer); // inFileNameWithExt, pkgFileName
+		}
+		
+	void ExtractBinPkgFileL(RStsSession& aSts, const TDesC& aInFileName, const TDesC& aOutPath, RPointerArray<HBufC>& aOutFiles)
+		{
+		RFs fs;
+		RFile file;
+		User::LeaveIfError(fs.Connect());
+		CleanupClosePushL(fs);
+		TInt err = file.Open(fs, aInFileName, EFileShareReadersOnly);
+		if (err != KErrNone)
+			{
+			DEBUG_PRINTF3(_L8("Failed to open file: %S with error: %d"), &aInFileName, err);
+			User::Leave(err);
+			}
+		CleanupClosePushL(file);
+		
+		ExtractBinPkgFileL(aSts, file, aOutPath, aOutFiles);
+		
+		CleanupStack::PopAndDestroy(2, &fs);
+		}
+
+	TBool IsForeignL(RFile& aFileHandle)
+		{
+		// Get the MIME type of the component to be installed from AppArc
+		TDataType dataType;
+		RApaLsSession apa;
+		User::LeaveIfError(apa.Connect());
+		CleanupClosePushL(apa);
+		TUid appUid = TUid::Null();
+		User::LeaveIfError(apa.AppForDocument(aFileHandle, appUid, dataType));
+		// A possible problem with recognizers is returning a successful result, but forgetting to set the MIME type
+		if (dataType.Des8().Ptr() == NULL) 
+			{
+			User::Leave(KErrCompletion);
+			}
+		CleanupStack::PopAndDestroy(&apa);
+		
+		return dataType.Des() != KRefBinPkgMimeType;
+		}
+
+	TBool IsForeignL(const TDesC& aFileName)
+		{
+		RFs fs;
+		RFile file;
+		User::LeaveIfError(fs.Connect());
+		CleanupClosePushL(fs);
+		User::LeaveIfError(fs.ShareProtected());
+		TInt err = file.Open(fs, aFileName, EFileShareReadersOnly);
+		if (err != KErrNone)
+			{
+			DEBUG_PRINTF3(_L8("Failed to open file: %S with error: %d"), &aFileName, err);
+			User::Leave(err);
+			}
+		CleanupClosePushL(file);
+		
+		const TBool result = IsForeignL(file);
+
+		CleanupStack::PopAndDestroy(2, &fs); // file
+
+		return result;
+		}
+	}
+
+namespace Usif
+	{
+	namespace SifRefBinPkgExtractor
+		{
+		CAuxNode* CAuxNode::NewLC(const TDesC& aFileName, TBool aForeign, CAuxNode& aParent)
+			{
+			CAuxNode* self = new (ELeave) CAuxNode;
+			CleanupStack::PushL(self);
+			
+			self->iFileName = aFileName.AllocL();
+			self->iForeign = aForeign;
+			self->iParent = &aParent;
+			
+			return self;
+			}
+		CAuxNode* CAuxNode::NewLC(const RFile& aFile, TBool aForeign, CAuxNode& aParent)
+		    {
+	        CAuxNode* self = new (ELeave) CAuxNode;
+	        CleanupStack::PushL(self);
+	                    
+	        HBufC* name = HBufC::NewLC(KMaxFileName);
+	        TPtr namePtr(name->Des());
+	        User::LeaveIfError(aFile.Name(namePtr));
+	                    
+	        self->iFileName = name->AllocL();
+	        self->iForeign = aForeign;
+	        self->iParent = &aParent;
+	        
+	        CleanupStack::PopAndDestroy(name); 
+	        return self;
+	        }
+
+		CAuxNode::CAuxNode()
+			{
+			}
+		
+		CAuxNode::~CAuxNode()
+			{
+			delete iFileName;
+			delete iNode;
+			delete iCompInfo;
+			}
+
+		void CAuxNode::SetNodeL(CComponentInfo::CNode* aNode)
+			{
+			if (iNode != NULL)
+				{
+				User::Leave(KErrAlreadyExists);
+				}
+			iNode = aNode;
+			}
+
+		void CAuxNode::SetCompInfoL(CComponentInfo* aCompInfo)
+			{
+			if (iCompInfo != NULL)
+				{
+				User::Leave(KErrAlreadyExists);
+				}
+			iCompInfo = aCompInfo;
+			}
+		
+		void CAuxNode::RegisterChildToParentL()
+			{
+			ASSERT (iCompInfo != NULL || iNode != NULL);
+			
+			if (iCompInfo != NULL)
+				{
+				iCompInfo->SetRootNodeAsChildL(*iParent->iNode);
+				delete iCompInfo;
+				iCompInfo = NULL;
+				}
+			else
+				{
+				iParent->iNode->AddChildL(iNode);
+				iNode = NULL;
+				}
+			}
+		
+		void CAuxNode::SetAsRootNodeL(CComponentInfo& aCompInfo)
+			{
+			if (iNode == NULL)
+				{
+				User::Leave(KErrNotFound);
+				}
+			aCompInfo.SetRootNodeL(iNode);
+			iNode = NULL;
+			}
+
+//-------------------------------------------------------------------------------------------------------
+
+		void BuildPkgTreeImplL(RStsSession& aSts, const TDesC* aInFileName, RFile* aInFile, const TDesC& aTempDir, RPointerArray<CAuxNode>& aFlatTree, CAuxNode* aParent)
+			{
+			__ASSERT_ALWAYS(aInFileName != NULL || aInFile != NULL, User::Leave(KErrArgument));
+			
+			RCPointerArray<HBufC> embFiles;
+			CleanupClosePushL(embFiles);
+			CAuxNode* node = NULL;
+			HBufC* pkgFileName = NULL;
+			const TBool foreign = aInFile ? IsForeignL(*aInFile) : IsForeignL(*aInFileName);
+			if (!foreign)
+				{
+				if (aInFile != NULL)
+					{
+					ExtractBinPkgFileL(aSts, *aInFile, aTempDir, embFiles);
+					}
+				else
+					{
+					ExtractBinPkgFileL(aSts, *aInFileName, aTempDir, embFiles);
+					}
+				
+				pkgFileName = aInFile ? BuildPkgFileNameLC(aTempDir, *aInFile) : BuildPkgFileNameLC(aTempDir, *aInFileName);
+				node = CAuxNode::NewLC(*pkgFileName, EFalse, *aParent);
+				aFlatTree.AppendL(node);
+				CleanupStack::Pop(node);
+				for (TInt i=0; i<embFiles.Count(); ++i)
+					{
+					const TDesC& fileName = *embFiles[i];
+					TParsePtrC parser(fileName);
+					BuildPkgTreeImplL(aSts, &fileName, NULL, parser.DriveAndPath(), aFlatTree, node);
+					}
+				}
+			else
+				{
+				if (aParent == NULL)
+					{
+					User::Leave(KErrCorrupt);
+					}
+				if (aInFileName != NULL)
+				    {
+				    node = CAuxNode::NewLC(*aInFileName, ETrue, *aParent);
+				    }
+				else
+				    {
+				    node = CAuxNode::NewLC(*aInFile, ETrue, *aParent);
+				    }			
+				aFlatTree.AppendL(node);
+				CleanupStack::Pop(node);
+				}
+			
+				if (pkgFileName != NULL)
+					{
+					CleanupStack::PopAndDestroy(pkgFileName);
+					}
+			
+			CleanupStack::PopAndDestroy(&embFiles);
+			}
+		
+		void BuildPkgTreeL(RStsSession& aSts, RFile& aInFile, const TDesC& aTempDir, RPointerArray<CAuxNode>& aFlatTree, CAuxNode* aParent)
+			{
+			BuildPkgTreeImplL(aSts, NULL, &aInFile, aTempDir, aFlatTree, aParent);
+			}
+		
+		void BuildPkgTreeL(RStsSession& aSts, const TDesC& aInFileName, const TDesC& aTempDir, RPointerArray<CAuxNode>& aFlatTree, CAuxNode* aParent)
+			{
+			BuildPkgTreeImplL(aSts, &aInFileName, NULL, aTempDir, aFlatTree, aParent);
+			}
+		} // namespace SifRefBinPkgExtractor
+	} //namespace Usif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/source/sifrefinstallerclient.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements the client side of the Reference Installer.
+*
+*/
+
+
+#include <f32file.h>
+#include <scs/scscommon.h>
+#include <scs/scsclient.h>
+#include "sifrefinstallerclientserver.h"
+#include "sifrefinstallerclient.h"
+
+using namespace Usif;
+
+namespace
+	{
+	/** SIF server SID. */
+	const TUid KSifRefInstallerServerUid = {0x1028634E};
+
+	/** Executable image which runs the server process. */
+	_LIT(KRefInstallerServerImageName, "sifrefinstallerserver.exe");
+	}
+
+RSifRefInstallerClient::RSifRefInstallerClient()
+	{
+	}
+
+TInt RSifRefInstallerClient::Connect()
+	{
+	return iTransporter.Connect(KSifRefInstallerServerName, Version(), KRefInstallerServerImageName, KSifRefInstallerServerUid);
+	}
+
+void RSifRefInstallerClient::Close()
+	{
+	iTransporter.Close();
+	}
+
+void RSifRefInstallerClient::GetComponentInfo(const TDesC& aFileName, CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	iTransporter.GetComponentInfo(aFileName, aComponentInfo, aStatus);
+	}
+
+void RSifRefInstallerClient::GetComponentInfo(RFile& aFileHandle, CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	iTransporter.GetComponentInfo(aFileHandle, aComponentInfo, aStatus);
+	}
+
+void RSifRefInstallerClient::Install(const TDesC& aFileName, const COpaqueNamedParams& aArguments,
+										COpaqueNamedParams& aResults, TRequestStatus& aStatus)
+	{
+	// Fifth argument of the SifTransportClient::Install() and SifTransportClient::Uninstall() methods,
+	// if set to ETrue, instructs an instance of CSifTransportServer to work in the ExclusiveOperation
+	// mode. In this mode only one request may be processed at a time. In our case an instance of
+	// CSifTransportServer means the Refrence Installer Server. Hence, we have to set this param to
+	// ETrue because the Reference Installer doesn't support concurrent operations.
+	iTransporter.Install(aFileName, aArguments, aResults, aStatus, ETrue);
+	}
+
+void RSifRefInstallerClient::Install(RFile& aFileHandle, const COpaqueNamedParams& aArguments,
+										COpaqueNamedParams& aResults, TRequestStatus& aStatus)
+	{
+	// Please see above for a comment about ETrue passed as a fifth param.
+	iTransporter.Install(aFileHandle, aArguments, aResults, aStatus, ETrue);
+	}
+
+void RSifRefInstallerClient::Uninstall(TComponentId aComponentId, const COpaqueNamedParams& aArguments,
+											COpaqueNamedParams& aResults, TRequestStatus& aStatus)
+	{
+	// Please see above for a comment about ETrue passed as a fifth param.
+	iTransporter.Uninstall(aComponentId, aArguments, aResults, aStatus, ETrue);
+	}
+
+void RSifRefInstallerClient::Activate(TComponentId aComponentId, TRequestStatus& aStatus)
+	{
+	iTransporter.Activate(aComponentId, aStatus);
+	}
+
+void RSifRefInstallerClient::Deactivate(TComponentId aComponentId, TRequestStatus& aStatus)
+	{
+	iTransporter.Deactivate(aComponentId, aStatus);
+	}
+
+void RSifRefInstallerClient::CancelOperation()
+	{
+	iTransporter.CancelOperation();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/source/sifrefinstallerserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements a server for the Reference Installer.
+*
+*/
+
+
+#include <usif/sif/siftransportserverstartup.h>
+#include "sifrefinstallerclientserver.h"
+#include "sifrefinstallertask.h"
+#include "sifrefuihandler.h"
+
+using namespace Usif;
+
+namespace
+	{
+
+	/**
+	A factory function that instantiates a UI handler. Reference Installer tasks
+	call this function when they need UI interaction.
+	
+	@return Pointer to a MInstallerUIHandler object.
+	@leave System wide error code
+	*/
+	MInstallerUIHandler* NewSifRefUiHandlerL()
+		{
+		return new (ELeave) MSifRefUIHandler;
+		}
+
+	/**
+	A factory function that instantiates Reference Installer tasks. The CSifTransportRequest
+	class calls this function in order to process incoming software management requests.
+	*/
+	CSifTransportTask* RefInstallerTaskFactoryL(TransportTaskFactory::TTaskType aTaskType, TTransportTaskParams& aParams)
+		{
+		// Security check - the client must have the SIF Server SID
+		if (aParams.iSecurityContext->SecureId() != KSifServerUid)
+			{
+			User::Leave(KErrPermissionDenied);
+			}
+
+		// Instantiate an appropriate task
+		switch (aTaskType)
+			{
+			case TransportTaskFactory::EGetComponentInfo:
+				return CSifRefGetComponentInfoTask::NewL(aParams);
+
+			case TransportTaskFactory::EInstall:
+				return CSifRefInstallTask::NewL(aParams, NewSifRefUiHandlerL);
+
+			case TransportTaskFactory::EUninstall:
+				return CSifRefUninstallTask::NewL(aParams, NewSifRefUiHandlerL);
+
+			case TransportTaskFactory::EActivate:
+				return new (ELeave) CSifRefActivateDeactivateTask(aParams, EActivated);
+
+			case TransportTaskFactory::EDeactivate:
+				return new (ELeave) CSifRefActivateDeactivateTask(aParams, EDeactivated);
+
+			default:
+				User::Leave(KErrArgument);
+			}
+		return NULL;
+		}
+
+	}
+
+/**
+Executable entrypoint of the Reference Installer Server.
+
+@return	Symbian OS error code where KErrNone indicates
+		success and any other value indicates failure.
+ */
+TInt E32Main()
+{
+return StartTransportServer(KSifRefInstallerServerName, Version(), RefInstallerTaskFactoryL);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/source/sifrefinstallertask.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1017 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This  file implements Reference Install tasks for getting ComponentInfo, installation, uninstallation and activation/deactivation.
+*
+*/
+
+
+#include "sifrefinstallertask.h"
+#include "sifrefbinpkgextractor.h"
+#include "usiflog.h"
+#include <usif/usiferror.h>
+
+using namespace Usif;
+
+_LIT(KRefInstPrivateDir, "c:\\private\\1028634e\\");
+
+/**
+A set of helper functions for Reference Installer tasks.
+*/
+namespace InstallHelper
+	{
+	_LIT(KSifReferenceSoftwareType, "reference");
+	_LIT(KUiConfirmationQuestion, "Are you sure you want to %S component: %S, vendor: %S");
+	_LIT(KParamNameErrDesc, "Error Description");
+	_LIT(KErrFileAlreadyExists, "File already exists: ");
+	_LIT(KUiConfirmationTypeInstall, "install");
+	_LIT(KUiConfirmationTypeUpgrade, "upgrade");
+	_LIT(KUiConfirmationTypeUninstall, "uninstall");
+	_LIT(KUiParserErrorDesc, "Installer encountered a problem when parsing a package file.");
+	const TInt KMaxConfirmationTypeLengh = KUiConfirmationTypeUninstall.iTypeLength;
+
+	// This Reference Installer uses Component Name and Vendor Name in order to
+	// identify a component in the SCR database. This identification scheme doesn't provide
+	// unique ids and its results depend on the current language. Hence, a real installer
+	// must use the Unique Id mechanism provided by the SCR.
+	void FindComponentL(RSoftwareComponentRegistry& aScr, TComponentSearchData& aCompSearchData, const CSifRefPkgParser& aParser)
+		{
+		DEBUG_PRINTF(_L8("InstallHelper::FindComponentL()"));
+		
+		// Get the index of the current language
+		const TLanguage curLang = User::Language();
+		TInt langIndex = aParser.GetLanguageIndex(curLang);
+		if (langIndex == KErrNotFound)
+			{
+			ASSERT(aParser.Languages().Count() > 0); // The parser should have already rejected packages without languages
+			langIndex = 0;
+			}
+
+		// Data for CComponentInfo
+		aCompSearchData.iName = aParser.ComponentNames()[langIndex];
+		aCompSearchData.iVersion = aParser.Version().Name();
+		aCompSearchData.iVendor = aParser.VendorNames()[langIndex];
+		aCompSearchData.iScomoState = EDeactivated;
+		aCompSearchData.iInstallStatus = ENewComponent;
+		aCompSearchData.iComponentId = 0;
+
+		RSoftwareComponentRegistryView scrView;
+		CComponentFilter* filter = CComponentFilter::NewLC();
+		filter->SetNameL(*aCompSearchData.iName);
+		filter->SetVendorL(*aCompSearchData.iVendor);
+		filter->SetSoftwareTypeL(KSifReferenceSoftwareType);
+
+		scrView.OpenViewL(aScr, filter);
+		CleanupClosePushL(scrView);
+
+		// Iterate over matching components in order to determine the status of the package being processed.
+		CComponentEntry* component = NULL;
+		while ((component = scrView.NextComponentL()) != NULL)
+			{
+			const TDesC& installedVersion = component->Version();
+			const TInt cmp = RSoftwareComponentRegistry::CompareVersionsL(installedVersion, aCompSearchData.iVersion);
+			if (cmp > 0)
+				{
+				aCompSearchData.iInstallStatus = ENewerVersionAlreadyInstalled;
+				aCompSearchData.iScomoState = component->ScomoState();
+				aCompSearchData.iComponentId = component->ComponentId();
+				delete component;
+				break;
+				}
+			else if (cmp == 0 && aCompSearchData.iInstallStatus < EAlreadyInstalled)
+				{
+				aCompSearchData.iInstallStatus = EAlreadyInstalled;
+				aCompSearchData.iScomoState = component->ScomoState();
+				aCompSearchData.iComponentId = component->ComponentId();
+				}
+			else if (cmp < 0 && aCompSearchData.iInstallStatus < EUpgrade)
+				{
+				aCompSearchData.iInstallStatus = EUpgrade;
+				aCompSearchData.iScomoState = component->ScomoState();
+				aCompSearchData.iComponentId = component->ComponentId();
+				}
+			delete component;
+			}
+		CleanupStack::PopAndDestroy(2, filter);
+		}
+
+	TBool UnregisterAndDeleteFileL(RSoftwareComponentRegistry& aScr, RSoftwareComponentRegistryFilesList& aFileList, RStsSession& aSts, TComponentId aComponentId)
+		{
+		DEBUG_PRINTF(_L8("InstallHelper::UnregisterAndDeleteFileL()"));
+		
+		// Get next file
+		HBufC* file = aFileList.NextFileL();
+		if (file != NULL)
+			{
+			// and remove it from the file system
+			CleanupStack::PushL(file);
+			aSts.RemoveL(*file);
+			CleanupStack::PopAndDestroy(file);
+			}
+		else
+			{
+			// Remove the component from the SCR if there are no files left
+			aFileList.Close();
+			aScr.DeleteComponentL(aComponentId);
+			
+			// Copying complete
+			return ETrue;
+			}
+
+		// Copying in progress
+		return EFalse;
+		}
+
+	MInstallerUIHandler* CreateUiHandlerL(const COpaqueNamedParams* aCustomArguments, TInstallerUIHandlerFactory aUiHandlerFactory)
+		{
+		DEBUG_PRINTF(_L8("InstallHelper::CreateUiHandlerL()"));
+		
+		// Instantiate a UI handler for non-silent requests
+		if (aCustomArguments != NULL)
+			{
+			TInt silent = EFalse;
+			aCustomArguments->GetIntByNameL(_L("Silent"), silent);
+			if (silent)
+				{
+				return NULL;
+				}
+			}
+
+		return aUiHandlerFactory();
+		}
+
+	enum TConfirmationType
+		{
+		EConfirmationInstall,
+		EConfirmationUpgrade,
+		EConfirmationUninstall
+		};
+
+	void userConfirmationL(TConfirmationType aType, MInstallerUIHandler& uiHandler, const TDesC& aComponent, const TDesC& aVendor)
+		{
+		DEBUG_PRINTF(_L8("InstallHelper::userConfirmationL()"));
+		
+		const TInt maxLen = KUiConfirmationQuestion.iTypeLength + KMaxConfirmationTypeLengh + aComponent.Length() + aVendor.Length();
+		HBufC* info = HBufC::NewLC(maxLen);
+		TPtr bufInfo(info->Des());
+		
+		switch (aType)
+			{
+			case EConfirmationInstall:
+				bufInfo.Format(KUiConfirmationQuestion, &KUiConfirmationTypeInstall, &aComponent, &aVendor);
+				break;
+
+			case EConfirmationUpgrade:
+				bufInfo.Format(KUiConfirmationQuestion, &KUiConfirmationTypeUpgrade, &aComponent, &aVendor);
+				break;
+
+			case EConfirmationUninstall:
+				bufInfo.Format(KUiConfirmationQuestion, &KUiConfirmationTypeUninstall, &aComponent, &aVendor);
+				break;
+
+			default:
+				User::Leave(KErrArgument);
+			}
+
+		if (!uiHandler.ConfirmationUIHandler(*info))
+			{
+			User::Leave(KErrCancel);
+			}
+
+		CleanupStack::PopAndDestroy(info);
+		}
+	}
+
+// =============================================================================================================
+
+CSifRefGetComponentInfoTask* CSifRefGetComponentInfoTask::NewL(TTransportTaskParams& aParams)
+	{
+	DEBUG_PRINTF(_L8("CSifRefGetComponentInfoTask::NewL()"));
+	
+	// Validate the arguments first.
+	if ((aParams.iFileName == NULL && aParams.iFileHandle == NULL) || aParams.iComponentInfo == NULL)
+		{
+		User::Leave(KErrArgument);
+		}
+		
+	CSifRefGetComponentInfoTask* self = new (ELeave) CSifRefGetComponentInfoTask(aParams);
+	return self;
+	}
+
+CSifRefGetComponentInfoTask::CSifRefGetComponentInfoTask(TTransportTaskParams& aParams)
+: CSifTransportTask(aParams, EFalse), iStep(EExtractEmbeddedPkgs)
+	{
+	}
+
+CSifRefGetComponentInfoTask::~CSifRefGetComponentInfoTask()
+	{
+	DEBUG_PRINTF(_L8("CSifRefGetComponentInfoTask::~CSifRefGetComponentInfoTask()"));
+	
+	iFile.Close();
+	iFs.Close();
+	iScr.Close();
+	iSts.Close();
+	iEmbeddedComponents.Close();
+	if (iSifRequestInProgress)
+		{
+		iSif.CancelOperation();
+		}
+	iSif.Close();
+	delete iParser;
+	delete iComponentInfo;
+	}
+
+TBool CSifRefGetComponentInfoTask::ExecuteImplL()
+	{
+	DEBUG_PRINTF2(_L8("Exiting from CSifRefGetComponentInfoTask::ExecuteImplL(), iStep = %d"), iStep);
+	
+	TBool done = EFalse;
+	
+	switch (iStep)
+		{
+		case EExtractEmbeddedPkgs:
+			ExtractEmbeddedPkgsL();
+			++iStep;
+			break;
+
+		case EParsePkgFile:
+			iStep = ParsePkgFileL();
+			break;
+
+		case EFindComponent:
+			InstallHelper::FindComponentL(iScr, iCompSearchData, *iParser);
+			++iStep;
+			break;
+
+		case ECreateComponentInfoNode:
+			iStep = CreateComponentInfoNodeL();
+			break;
+
+		case ESetComponentInfo:
+			SetComponentInfoL();
+			done = ETrue;
+			break;
+
+		default:
+			User::Leave(KErrGeneral);
+		}
+
+	if (!iSifRequestInProgress)
+		{
+		TRequestStatus* status(RequestStatus());
+		User::RequestComplete(status, KErrNone);
+		}
+	
+	DEBUG_PRINTF3(_L8("Exiting from CSifRefGetComponentInfoTask::ExecuteImplL(), done = %d, iStep = %d"), done, iStep);
+	
+	return done;
+	}
+
+void CSifRefGetComponentInfoTask::ExtractEmbeddedPkgsL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefGetComponentInfoTask::ExtractEmbeddedPkgsL()"));
+	
+	// Start an STS transaction. The extraction of a package requires creation of temporary
+	// files that must be deleted when the GetComponentInfo requiest is complete. This is why
+	// we need this STS transaction here.
+	iSts.CreateTransactionL();
+
+	if (FileName())
+		{
+		SifRefBinPkgExtractor::BuildPkgTreeL(iSts, *FileName(), KRefInstPrivateDir, iEmbeddedComponents);
+		}
+	else if (FileHandle())
+		{
+		SifRefBinPkgExtractor::BuildPkgTreeL(iSts, *FileHandle(), KRefInstPrivateDir, iEmbeddedComponents);
+		}
+	else
+		{
+		ASSERT(0);
+		}
+	
+	// Connect to the SCR. The installer needs this session to check if a component being queried
+	// is already installed and, if yes, obtain its detials.
+	User::LeaveIfError(iScr.Connect());
+	}
+
+TInt CSifRefGetComponentInfoTask::ParsePkgFileL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefGetComponentInfoTask::ParsePkgFileL()"));
+	
+	delete iParser;
+	iParser = NULL;
+
+	// Check if the next component is of the type our installer supports. If yes, add it to the list of
+	// the components to be processed. If not, use the SIF API to obtain its details.
+	const SifRefBinPkgExtractor::CAuxNode& node = *iEmbeddedComponents[iCurrentComponent];
+	if (node.Foreign())
+		{
+		// Connect to the SIF server
+		iComponentInfo = CComponentInfo::NewL();
+		User::LeaveIfError(iSif.Connect());
+
+		// Our installer keeps temporary files under its private folder and therefore we have to
+		// pass a file handle to the SIF API.
+		User::LeaveIfError(iFs.Connect());
+		iFs.ShareProtected();
+		User::LeaveIfError(iFile.Open(iFs, node.FileNameL(), EFileShareReadersOnly));
+
+		// Submit a SIF request 
+		iSif.GetComponentInfo(iFile, *iComponentInfo, *RequestStatus());
+		
+		iSifRequestInProgress = ETrue;
+
+		return ECreateComponentInfoNode;
+		}
+	else
+		{
+		iParser = CSifRefPkgParser::NewL(node.FileNameL());
+		return EFindComponent;
+		}
+	}
+
+TInt CSifRefGetComponentInfoTask::CreateComponentInfoNodeL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefGetComponentInfoTask::CreateComponentInfoNodeL()"));
+	
+	SifRefBinPkgExtractor::CAuxNode& auxNode = *iEmbeddedComponents[iCurrentComponent];
+
+	if (iSifRequestInProgress)
+		{
+		iSif.Close();
+		iFile.Close();
+		iFs.Close();
+		
+		iSifRequestInProgress = EFalse;
+		
+		// Add the root node of iComponentInfo to the tree
+		User::LeaveIfError(RequestStatus()->Int());
+		auxNode.SetCompInfoL(iComponentInfo);
+		iComponentInfo = NULL;
+		}
+	else
+		{
+		// This reference installer uses the KExampleFileSize const value to calculate the maximum size of the installed
+		// component on a phone. This is because the reference package file carries only the list of the files to be installed
+		// without the files themselves. A real installer should use the size of the files to be installed.
+		const TInt KExampleFileSize = 1024;
+		const TInt maxInstalledSize = iParser->Files().Count() * KExampleFileSize;
+		const TBool hasExe = EFalse;
+		const TBool driveSelectionRequired = EFalse;
+		RPointerArray<Usif::CComponentInfo::CApplicationInfo>* applications = NULL;
+		// The example capabilities below are hardcoded due to the same reason. The reference package file doesn't contain
+		// user grantable capabilities but a real package file should provide them.
+		TCapabilitySet userGrantableCaps(ECapabilityReadUserData, ECapabilityWriteUserData);
+	
+		// Create a ComponentInfo node and set it as a root node.
+		CComponentInfo::CNode* compInfoNode = CComponentInfo::CNode::NewLC(InstallHelper::KSifReferenceSoftwareType,
+							*iCompSearchData.iName, iCompSearchData.iVersion, *iCompSearchData.iVendor,
+							iCompSearchData.iScomoState, iCompSearchData.iInstallStatus, iCompSearchData.iComponentId,
+							*iCompSearchData.iName, ENotAuthenticated, userGrantableCaps, maxInstalledSize, hasExe, driveSelectionRequired, applications);
+		
+		auxNode.SetNodeL(compInfoNode);
+		CleanupStack::Pop(compInfoNode);
+		}
+	
+	return (++iCurrentComponent < iEmbeddedComponents.Count()) ? EParsePkgFile : ESetComponentInfo;
+	}
+
+void CSifRefGetComponentInfoTask::SetComponentInfoL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefGetComponentInfoTask::SetComponentInfoL()"));
+	
+	// At least one node must exist, otherwise we can't reach this point.
+	ASSERT (iEmbeddedComponents.Count() > 0);
+	
+	// Build a real tree of the nodes from iEmbeddedComponents which is a flat list
+	for (TInt i=iEmbeddedComponents.Count()-1; i>=1; --i)
+		{
+		iEmbeddedComponents[i]->RegisterChildToParentL();
+		}
+	
+	// Set the tree built above as the root node of ComponentInfo().
+	iEmbeddedComponents[0]->SetAsRootNodeL(*ComponentInfo());
+	}
+
+// =============================================================================================================
+
+CSifRefInstallTask* CSifRefInstallTask::NewL(TTransportTaskParams& aParams, TInstallerUIHandlerFactory aUiHandlerFactory)
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::NewL()"));
+	
+	CSifRefInstallTask* self = new (ELeave) CSifRefInstallTask(aParams);
+	CleanupStack::PushL(self);
+	self->ConstructL(aUiHandlerFactory);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CSifRefInstallTask::CSifRefInstallTask(TTransportTaskParams& aParams)
+: CSifTransportTask(aParams, EFalse), iStep(EExtractEmbeddedPkgs)
+	{
+	}
+
+CSifRefInstallTask::~CSifRefInstallTask()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::~CSifRefInstallTask()"));
+	
+	iFileList.Close();
+	iFile.Close();
+	iFs.Close();
+	iScr.Close();
+	iSts.Close();
+	iEmbeddedComponents.Close();
+	if (iSifRequestInProgress)
+		{
+		iSif.CancelOperation();
+		}
+	iSif.Close();
+	delete iParser;
+	delete iUiHandler;
+	delete iOpaqueArguments;
+	delete iOpaqueResults;
+	}
+
+void CSifRefInstallTask::ConstructL(TInstallerUIHandlerFactory aUiHandlerFactory)
+	{
+	if ((FileName() == NULL && FileHandle() == NULL) ||
+		CustomArguments() == NULL ||
+		CustomResults() == NULL)
+		{
+		User::Leave(KErrArgument);
+		}
+
+	iUiHandler = InstallHelper::CreateUiHandlerL(CustomArguments(), aUiHandlerFactory);
+	}
+
+TBool CSifRefInstallTask::ExecuteImplL()
+	{
+	DEBUG_PRINTF2(_L8("Exiting from CSifRefInstallTask::ExecuteImplL(), iStep = %d"), iStep);
+	
+	TBool done = EFalse;
+	
+	switch (iStep)
+		{
+		case EExtractEmbeddedPkgs:
+			ExtractEmbeddedPkgsL();
+			++iStep;
+			break;
+
+		case EParsePkgFile:
+			iStep = ParsePkgFileL();
+			break;
+
+		case ELaunchForeignInstall:
+			LaunchForeignInstallL();
+			++iStep;
+			break;
+
+		case EFinishForeignInstall:
+			FinishForeignInstallL();
+			iStep = EParsePkgFile;
+			break;
+
+		case EFindAndCheckComponent:
+			// Next step differs for ENewComponent and EUpgrade
+			iStep = FindAndCheckComponentL();
+			break;
+
+		case EGetInstalledFileList:
+			GetInstalledFileListL();
+			++iStep;
+			break;
+
+		case EUnregisterAndDeleteFile:
+			if (UnregisterAndDeleteFileL())
+				{
+				++iStep;
+				}
+			break;
+
+		case ERegisterComponent:
+			RegisterComponentL();
+			++iStep;
+			break;
+
+		case ECopyFile:
+			if (CopyFileL())
+				{
+				++iStep;
+				}
+			break;
+
+		case ESetScomoState:
+			iStep = SetScomoStateL();
+			break;
+
+		case ECommit:
+			CommitL();
+			done = ETrue;
+			break;
+
+		default:
+			User::Leave(KErrGeneral);
+		}
+
+	if (!iSifRequestInProgress)
+		{
+		TRequestStatus* status(RequestStatus());
+		User::RequestComplete(status, KErrNone);
+		}
+	
+	DEBUG_PRINTF3(_L8("Exiting from CSifRefInstallTask::ExecuteImplL(), done = %d, iStep = %d"), done, iStep);
+	
+	return done;
+	}
+
+namespace
+	{
+	TInt AuxNodeSorter(const SifRefBinPkgExtractor::CAuxNode& aLeft, const SifRefBinPkgExtractor::CAuxNode& aRight)
+		{
+		const TBool l = aLeft.Foreign();
+		const TBool r = aRight.Foreign();
+		if (l == r)
+			{
+			return 0;
+			}
+		else if (!l && r)
+			{
+			return 1;
+			}
+		else
+			{
+			return -1;
+			}
+		}
+	}
+
+void CSifRefInstallTask::ExtractEmbeddedPkgsL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::ExtractEmbeddedPkgsL()"));
+	
+	// Start an STS transaction
+	iSts.CreateTransactionL();
+
+	if (FileName())
+		{
+		SifRefBinPkgExtractor::BuildPkgTreeL(iSts, *FileName(), KRefInstPrivateDir, iEmbeddedComponents);
+		}
+	else if (FileHandle())
+		{
+		SifRefBinPkgExtractor::BuildPkgTreeL(iSts, *FileHandle(), KRefInstPrivateDir, iEmbeddedComponents);
+		}
+	else
+		{
+		ASSERT(0);
+		}
+	
+	// Sort the list of the embedded components in order to install foreign packages first
+	 const TLinearOrder<SifRefBinPkgExtractor::CAuxNode> sortOrder(AuxNodeSorter);
+	iEmbeddedComponents.Sort(sortOrder);
+	}
+
+TInt CSifRefInstallTask::ParsePkgFileL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::ParsePkgFileL()"));
+	
+	TInt nextStep = -1;
+	TRAPD(err, nextStep = ParsePkgFileImplL());
+	if (err != KErrNone)
+		{
+		if (iUiHandler)
+			{
+			iUiHandler->ErrorDescriptionUIHandler(InstallHelper::KUiParserErrorDesc);
+			}
+		User::Leave(err);
+		}
+	
+	return nextStep;
+	}
+
+TInt CSifRefInstallTask::ParsePkgFileImplL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::ParsePkgFileImplL()"));
+	
+	delete iParser;
+	iParser = NULL;
+
+	// Check if the next component is of the type our installer supports. If yes, add it to the list of
+	// the components to be processed. If not, use the SIF API to install it.
+	const SifRefBinPkgExtractor::CAuxNode& node = *iEmbeddedComponents[iCurrentComponent];
+	if (node.Foreign())
+		{
+		return ELaunchForeignInstall;
+		}
+	else
+		{
+		iParser = CSifRefPkgParser::NewL(node.FileNameL());
+		return EFindAndCheckComponent;
+		}
+	}
+
+void CSifRefInstallTask::LaunchForeignInstallL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::LaunchForeignInstallL()"));
+	
+	const SifRefBinPkgExtractor::CAuxNode& node = *iEmbeddedComponents[iCurrentComponent];
+	
+	// Connect to the SIF server
+	User::LeaveIfError(iSif.Connect());
+
+	// Our installer keeps temporary files under its private folder and therefore we have to
+	// pass a file handle to the SIF API.
+	User::LeaveIfError(iFs.Connect());
+	iFs.ShareProtected();
+	User::LeaveIfError(iFile.Open(iFs, node.FileNameL(), EFileShareReadersOnly));
+
+	// Submit a SIF request 
+	iOpaqueArguments = COpaqueNamedParams::NewL();
+	iOpaqueResults = COpaqueNamedParams::NewL();
+	iSif.Install(iFile, *iOpaqueArguments, *iOpaqueResults, *RequestStatus(), EFalse);
+
+	iSifRequestInProgress = ETrue;
+	}
+
+void CSifRefInstallTask::FinishForeignInstallL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::FinishForeignInstallL()"));
+	
+	iSif.Close();
+	iFile.Close();
+	iFs.Close();
+	delete iOpaqueArguments;
+	iOpaqueArguments = NULL;
+	delete iOpaqueResults;
+	iOpaqueResults = NULL;
+	
+	// Check the result of the concurrent installation
+	iSifRequestInProgress = EFalse;
+	User::LeaveIfError(RequestStatus()->Int());
+	
+	// There must be at least one component left because we install foreign components first
+	++iCurrentComponent;
+	}
+
+TInt CSifRefInstallTask::FindAndCheckComponentL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::FindAndCheckComponentL()"));
+	
+	// Connect to the SCR and create a new transaction to continue the installation of our own type
+	if (!iScrTransaction)
+		{
+		User::LeaveIfError(iScr.Connect());
+		iScr.CreateTransactionL();
+		iScrTransaction = ETrue;
+		}
+	
+	// Exit code
+	TInt nextStep = ERegisterComponent;
+	
+	// Check if already installed
+	InstallHelper::FindComponentL(iScr, iCompSearchData, *iParser);
+	switch (iCompSearchData.iInstallStatus)
+		{
+		case ENewComponent:
+			// nextStep already set to ERegisterComponent
+			break;
+
+		case EUpgrade:
+			// Uninstall the previous version
+			nextStep = EGetInstalledFileList;
+			break;
+
+		case EAlreadyInstalled:
+			User::Leave(KErrSifSameVersionAlreadyInstalled);
+			break;
+
+		case ENewerVersionAlreadyInstalled:
+			User::Leave(KErrSifNewerVersionAlreadyInstalled);
+			break;
+
+		default:
+			ASSERT(0);
+		}
+
+	// Ask the user for the confirmation
+	if (iUiHandler != NULL)
+		{
+		userConfirmationL(iCompSearchData.iInstallStatus == ENewComponent ? InstallHelper::EConfirmationInstall : InstallHelper::EConfirmationUpgrade, *iUiHandler, *iCompSearchData.iName, *iCompSearchData.iVendor);
+		}
+
+	return nextStep;
+	}
+
+void CSifRefInstallTask::GetInstalledFileListL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::GetInstalledFileListL()"));
+	
+	// Get a list of files to be deleted
+	iFileList.OpenListL(iScr, iCompSearchData.iComponentId);
+	}
+
+TBool CSifRefInstallTask::UnregisterAndDeleteFileL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::UnregisterAndDeleteFileL()"));
+	
+	return InstallHelper::UnregisterAndDeleteFileL(iScr, iFileList, iSts, iCompSearchData.iComponentId);
+	}
+
+void CSifRefInstallTask::RegisterComponentL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::RegisterComponentL()"));
+	
+	// Register a new component in the SCR
+	RCPointerArray<CLocalizableComponentInfo> componentInfoArray;
+	CleanupClosePushL(componentInfoArray);
+
+	// ...for each language
+	const RLanguageArray& languages = iParser->Languages();
+	const TInt langCount = languages.Count();
+	for (TInt i=0; i<langCount; ++i)
+		{
+		const TDesC& locName = *iParser->ComponentNames()[i];
+		const TDesC& locVendor = *iParser->VendorNames()[i];
+		CLocalizableComponentInfo* componentInfo = CLocalizableComponentInfo::NewLC(locName, locVendor, languages[i]);
+		componentInfoArray.AppendL(componentInfo);
+		CleanupStack::Pop(componentInfo);
+		}
+	iCompSearchData.iComponentId = iScr.AddComponentL(componentInfoArray, InstallHelper::KSifReferenceSoftwareType);
+
+	// Set the version of a new component
+	iScr.SetComponentVersionL(iCompSearchData.iComponentId, iCompSearchData.iVersion);
+
+	CleanupStack::PopAndDestroy(&componentInfoArray);
+
+	iCopyFileIndex = 0;
+	iComponentSize = 0;
+	
+	// Send the id if the installed component to the client. If this is a compound package we send the id of the root component only.
+	if (iEmbeddedComponents[iCurrentComponent]->Root())
+		{
+		CustomResults()->AddIntL(KSifOutParam_ComponentId, iCompSearchData.iComponentId);
+		}
+	}
+
+namespace
+	{
+	TBool CheckPathExistenceL(const TDesC& filePath)
+		{
+		TBool exists = EFalse;
+
+		RFs fs;
+		User::LeaveIfError(fs.Connect());
+		CleanupClosePushL(fs);
+		TEntry entry;
+		TInt error = fs.Entry(filePath, entry);
+		if (error == KErrNone)
+			{
+			exists = ETrue;
+			}
+		else if (error != KErrPathNotFound && error != KErrNotFound)
+			{
+			User::Leave(error);
+			}
+		
+		CleanupStack::PopAndDestroy(&fs);
+		
+		return exists;
+		}
+	}
+
+TBool CSifRefInstallTask::CopyFileL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::CopyFileL()"));
+	
+	// List of files to be copied from a package file 
+	const RCHBufCArray& files = iParser->Files();
+
+	// Register and copy a file if any left
+	if (iCopyFileIndex < files.Count())
+		{
+		// The name of the current file
+		const TDesC& filePath = *files[iCopyFileIndex];
+
+		// Check if filePath already exists
+		if (CheckPathExistenceL(filePath))
+			{
+			// Add a custom result describing the error
+			HBufC* desc = HBufC::NewLC(InstallHelper::KErrFileAlreadyExists.iTypeLength + filePath.Length());
+			TPtr bufDesc = desc->Des();
+			bufDesc.Copy(InstallHelper::KErrFileAlreadyExists);
+			bufDesc.Copy(filePath);
+			CustomResults()->AddStringL(InstallHelper::KParamNameErrDesc, *desc);
+			CleanupStack::PopAndDestroy(desc);
+			}
+
+		// Register the file in the SCR
+		iScr.RegisterComponentFileL(iCompSearchData.iComponentId, filePath);
+
+		// Copy the current file
+		RFile file;
+		iSts.CreateNewL(filePath, file, TFileMode(EFileShareExclusive |EFileWrite));
+		_LIT8(KReferenceFootprint, "This file belongs to the SIF reference component.\n");
+		const TInt numLines = 100; // The operation must take a while to simulate real copying
+		for (TInt i=0; i<numLines; ++i)
+			{
+			User::LeaveIfError(file.Write(KReferenceFootprint));
+			}
+		iComponentSize += KReferenceFootprint.iTypeLength*numLines;
+		file.Close();
+
+		++iCopyFileIndex;
+		}
+	else
+		{
+		// Set the size of the component in the SCR
+		iScr.SetComponentSizeL(iCompSearchData.iComponentId, iComponentSize);
+
+		// Step complete, all the files have been copied
+		return ETrue;
+		}
+
+	// Step not complete, there are still files left
+	
+	DEBUG_PRINTF(_L8("Exiting from CSifRefInstallTask::CopyFileL()"));
+	
+	return EFalse;
+	}
+
+TInt CSifRefInstallTask::SetScomoStateL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::SetScomoStateL()"));
+	
+	// Activate the newly added component
+	TInt inactive = EFalse;
+	if (!CustomArguments()->GetIntByNameL(_L("InstallInactive"), inactive) || !inactive)
+		{
+		iScr.SetScomoStateL(iCompSearchData.iComponentId, EActivated);
+		}
+	
+	// Check if there are any components to be installed left
+	return (++iCurrentComponent < iEmbeddedComponents.Count()) ? EParsePkgFile : ECommit;
+	}
+
+void CSifRefInstallTask::CommitL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefInstallTask::CommitL()"));
+	
+	// Commit the STS & SCR transactions
+	iSts.CommitL();
+	iScr.CommitTransactionL();
+	}
+
+// =============================================================================================================
+
+CSifRefUninstallTask* CSifRefUninstallTask::NewL(TTransportTaskParams& aParams, TInstallerUIHandlerFactory aUiHandlerFactory)
+	{
+	DEBUG_PRINTF(_L8("CSifRefUninstallTask::NewL()"));
+	
+	CSifRefUninstallTask* self = new (ELeave) CSifRefUninstallTask(aParams);
+	CleanupStack::PushL(self);
+	self->ConstructL(aUiHandlerFactory);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CSifRefUninstallTask::CSifRefUninstallTask(TTransportTaskParams& aParams)
+: CSifTransportTask(aParams), iStep(EGetFileList)
+	{
+	}
+
+void CSifRefUninstallTask::ConstructL(TInstallerUIHandlerFactory aUiHandlerFactory)
+	{
+	if (ComponentId() == NULL || CustomArguments() == NULL || CustomResults() == NULL)
+		{
+		User::Leave(KErrArgument);
+		}
+
+	iUiHandler = InstallHelper::CreateUiHandlerL(CustomArguments(), aUiHandlerFactory);
+	}
+
+CSifRefUninstallTask::~CSifRefUninstallTask()
+	{
+	DEBUG_PRINTF(_L8("CSifRefUninstallTask::~CSifRefUninstallTask()"));
+	
+	// Make sure to close sub-session before the session
+	iFileList.Close();	
+	iScr.Close();
+	iSts.Close();
+	delete iUiHandler;
+	}
+
+TBool CSifRefUninstallTask::ExecuteImplL()
+	{
+	DEBUG_PRINTF2(_L8("CSifRefInstallTask::ExecuteImplL(), iStep = %d"), iStep);
+	
+	switch (iStep)
+		{
+		case EGetFileList:
+			GetFileListL();
+			break;
+
+		case EUnregisterAndDeleteFile:
+			if (!UnregisterAndDeleteFileL())
+				{
+				return EFalse;
+				}
+			break;
+
+		case ECommit:
+			CommitL();
+			return ETrue;
+
+		default:
+			User::Leave(KErrGeneral);
+		}
+
+	++iStep;
+
+	DEBUG_PRINTF2(_L8("Exiting from CSifRefInstallTask::ExecuteImplL(), iStep = %d"), iStep);
+	
+	return EFalse;
+	}
+
+void CSifRefUninstallTask::GetFileListL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefUninstallTask::GetFileListL()"));
+	
+	// Connect to the SCR and start a transaction
+	User::LeaveIfError(iScr.Connect());
+	iScr.CreateTransactionL();
+
+	// Ask the user for confirmation
+	if (iUiHandler != NULL)
+		{
+		CComponentEntry* entry = CComponentEntry::NewLC();
+		if (!iScr.GetComponentL(ComponentId(), *entry))
+			{
+			User::Leave(KErrNotFound);
+			}
+		userConfirmationL(InstallHelper::EConfirmationUninstall, *iUiHandler, entry->Name(), entry->Vendor());
+		CleanupStack::PopAndDestroy(entry);
+		}
+
+	// Get a list of files to be deleted
+	iFileList.OpenListL(iScr, ComponentId());
+
+	// Start an STS transaction
+	iSts.CreateTransactionL();
+	}
+
+TBool CSifRefUninstallTask::UnregisterAndDeleteFileL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefUninstallTask::UnregisterAndDeleteFileL()"));
+	
+	return InstallHelper::UnregisterAndDeleteFileL(iScr, iFileList, iSts, ComponentId());
+	}
+
+void CSifRefUninstallTask::CommitL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefUninstallTask::CommitL()"));
+	
+	// Commit the STS & SCR transactions
+	iSts.CommitL();
+	iScr.CommitTransactionL();
+	}
+
+// =============================================================================================================
+
+CSifRefActivateDeactivateTask::CSifRefActivateDeactivateTask(TTransportTaskParams& aParams, TScomoState aScomoState)
+: CSifTransportTask(aParams), iScomoState(aScomoState)
+	{
+	DEBUG_PRINTF(_L8("CSifRefActivateDeactivateTask::CSifRefActivateDeactivateTask()"));
+	}
+
+CSifRefActivateDeactivateTask::~CSifRefActivateDeactivateTask()
+	{
+	DEBUG_PRINTF(_L8("CSifRefActivateDeactivateTask::~CSifRefActivateDeactivateTask()"));
+	
+	iScr.Close();
+	}
+
+TBool CSifRefActivateDeactivateTask::ExecuteImplL()
+	{
+	DEBUG_PRINTF(_L8("CSifRefActivateDeactivateTask::ExecuteImplL()"));
+	
+	if (ComponentId() == NULL)
+		{
+		User::Leave(KErrArgument);
+		}
+
+	// Connect to SCR and activate/deactivate component
+	User::LeaveIfError(iScr.Connect());
+	iScr.SetScomoStateL(ComponentId(), iScomoState);
+
+	return ETrue;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/source/sifrefpkgparser.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,349 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements a package file parser for the Reference Installer.
+*
+*/
+
+
+#include "sifrefpkgparser.h"
+#include <f32file.h>
+#include "usiflog.h"
+#include <usif/usiferror.h>
+
+using namespace Usif;
+
+/**
+A set of helper functions for the parser.
+*/
+namespace
+	{
+	_LIT8(KTxtCRLF, "\r\n");
+	_LIT8(KTxtLanguages, "Languages");
+	_LIT8(KTxtComponentName, "ComponentName");
+	_LIT8(KTxtComponentVendor, "ComponentVendor");
+	_LIT8(KTxtComponentVersion, "ComponentVersion");
+	_LIT8(KTxtFile, "File");
+
+	/** Maximum length of a value string in a package file */
+	const TInt KMaxValueLength = 0xFF;
+
+	void SplitLineL(const TPtrC8& aLine, TPtrC8& aName, TPtrC8& aValue)
+		{
+		const TInt colon = aLine.Locate(':');
+		if (colon == KErrNotFound)
+			{
+			DEBUG_PRINTF2(_L8("Missing colon in line: %S"), &aLine);
+			User::Leave(KErrCorrupt);
+			}
+
+		aName.Set(aLine.Left(colon));
+		aValue.Set(aLine.Mid(colon+1));
+		}
+
+	void SplitValuesL(const TPtrC8& aValues, RCHBufCArray& aValueArray)
+		{
+		TPtrC8 values(aValues);
+		while (values.Size() > 0)
+			{
+			TInt quot = values.Locate('"');
+			if (quot == KErrNotFound)
+				{
+				return;
+				}
+			values.Set(values.Mid(quot+1));
+			quot = values.Locate('"');
+			if (quot == KErrNotFound)
+				{
+				DEBUG_PRINTF2(_L8("Missing closing quotation mark in line: %S"), &aValues);
+				User::Leave(KErrCorrupt);
+				}
+			TPtrC8 token(values.Left(quot));
+
+			HBufC* value = HBufC::NewLC(KMaxValueLength);
+			TPtr valPtr(value->Des());
+			valPtr.Copy(token);
+			aValueArray.AppendL(value);
+			CleanupStack::Pop(value);
+
+			values.Set(values.Mid(quot+1));
+			}
+		}
+
+	void ParseComponentVersionL(const TPtrC8& aStringVersion, TVersion& aVersion)
+		{
+		// Check if already defined
+		if (aVersion.iMajor || aVersion.iMinor || aVersion.iBuild)
+			{
+			DEBUG_PRINTF(_L8("Multiple definition of Component Version"));
+			User::Leave(KErrCorrupt);
+			}
+
+		// Convert the major version number of Component Version
+		TLex8 lex(aStringVersion);
+		lex.SkipSpace();
+		TInt err = lex.Val(aVersion.iMajor);
+		if (err != KErrNone)
+			{
+			DEBUG_PRINTF(_L8("Failed parsing the major version number of Component Version"));
+			User::LeaveIfError(err);
+			}
+		lex.Inc();
+
+		// Convert the minor version number of Component Version
+		err = lex.Val(aVersion.iMinor);
+		if (err != KErrNone)
+			{
+			DEBUG_PRINTF(_L8("Failed parsing the minor version number of Component Version"));
+			User::LeaveIfError(err);
+			}
+		lex.Inc();
+
+		// Convert the build version number of Component Version
+		err = lex.Val(aVersion.iBuild);
+		if (err != KErrNone)
+			{
+			DEBUG_PRINTF(_L8("Failed parsing the build version number of Component Version"));
+			User::LeaveIfError(err);
+			}
+		}
+
+	TLanguage LanguageMapL(TDesC& aLanguage)
+		{
+		if (aLanguage == _L("EN"))
+			{
+			return ELangEnglish;
+			}
+		else if (aLanguage == _L("HU"))
+			{
+			return ELangHungarian;
+			}
+		else if (aLanguage == _L("PL"))
+			{
+			return ELangPolish;
+			}
+
+		DEBUG_PRINTF2(_L8("Language %S is not supported by this Reference Installer"), &aLanguage);
+		User::Leave(KErrSifUnsupportedLanguage);
+		return ELangNone;// Suppress warning
+		}
+	}
+
+CSifRefPkgParser* CSifRefPkgParser::NewL(const TDesC& aFileName)
+	{
+	CSifRefPkgParser* self = new (ELeave) CSifRefPkgParser;
+	CleanupStack::PushL(self);
+	self->ParseL(aFileName);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CSifRefPkgParser::CSifRefPkgParser(): iVersion(0, 0, 0)
+	{
+	}
+
+CSifRefPkgParser::~CSifRefPkgParser()
+	{
+	iLanguages.Close();
+	iComponentNames.Close();
+	iVendorNames.Close();
+	iFiles.Close();
+	}
+
+const RLanguageArray& CSifRefPkgParser::Languages() const
+	{
+	return iLanguages;
+	}
+
+const RCHBufCArray& CSifRefPkgParser::ComponentNames() const
+	{
+	return iComponentNames;
+	}
+
+const RCHBufCArray& CSifRefPkgParser::VendorNames() const
+	{
+	return iVendorNames;
+	}
+
+const TVersion& CSifRefPkgParser::Version() const
+	{
+	return iVersion;
+	}
+
+const RCHBufCArray& CSifRefPkgParser::Files() const
+	{
+	return iFiles;
+	}
+
+void CSifRefPkgParser::ParseL(const TDesC& aFileName)
+	{
+	RFs fs;
+	RFile file;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+	TInt err = file.Open(fs, aFileName, EFileShareReadersOnly);
+	if (err != KErrNone)
+		{
+		DEBUG_PRINTF3(_L8("Failed to open file: %S with error: %d"), &aFileName, err);
+		User::Leave(err);
+		}
+	CleanupClosePushL(file);
+
+	ParseL(file);
+
+	CleanupStack::PopAndDestroy(2, &fs);
+	}
+
+void CSifRefPkgParser::ParseL(RFile& aFileHandle)
+	{
+	// Read the file into the buffer 
+	TInt fileSize = 0;
+	User::LeaveIfError(aFileHandle.Size(fileSize));
+	HBufC8* buffer = HBufC8::NewLC(fileSize);
+	TPtr8 bufPtr = buffer->Des();
+	TInt err = aFileHandle.Read(bufPtr);
+	if (err != KErrNone)
+		{
+		DEBUG_PRINTF2(_L8("Failed to read reference package file with err %d"), err);
+		User::LeaveIfError(err);
+		}
+
+	// Iterate over the lines
+	TPtrC8 lines(*buffer);
+	const TInt crlfLen = TPtrC8(KTxtCRLF).Size();
+	while (lines.Size() > 0)
+		{
+		// Find next line
+		TPtrC8 line;
+		const TInt crlfPos = lines.Find(KTxtCRLF);
+		if (crlfPos != KErrNotFound)
+			{
+			line.Set(lines.Left(crlfPos));
+			lines.Set(lines.Mid(crlfPos+crlfLen));
+			}
+		else
+			{
+			if (lines.Size() > 0)
+				{
+				line.Set(lines);
+				lines.Set(TPtrC8());
+				}
+			}
+		
+		// Split the line into a pair of the name of a tag and its value
+		TPtrC8 name, value;
+		SplitLineL(line, name, value);
+		
+		// Hand over the pair to recognition
+		LineHandlerL(name, value);
+		}
+	CleanupStack::PopAndDestroy(buffer);
+	
+	// Check whether the file we have just parsed wasn't corrupted
+	CheckInvariantL();
+	}
+
+void CSifRefPkgParser::LineHandlerL(const TPtrC8& aName, const TPtrC8& aValue)
+	{
+	if (aName == KTxtLanguages)
+		{
+		if (iLanguages.Count() > 0)
+			{
+			DEBUG_PRINTF(_L8("Multiple definition of languages"));
+			User::Leave(KErrCorrupt);
+			}
+		RCHBufCArray languages;
+		CleanupClosePushL(languages);
+		SplitValuesL(aValue, languages);
+		const TInt count = languages.Count();
+		for (TInt i=0; i<count; ++i)
+			{
+			iLanguages.AppendL(LanguageMapL(*languages[i]));
+			}
+		CleanupStack::PopAndDestroy(&languages);
+		}
+	else if (aName == KTxtComponentName)
+		{
+		if (iComponentNames.Count() > 0)
+			{
+			DEBUG_PRINTF(_L8("Multiple definition of Component Name"));
+			User::Leave(KErrCorrupt);
+			}
+		SplitValuesL(aValue, iComponentNames);
+		}
+	else if (aName == KTxtComponentVendor)
+		{
+		if (iVendorNames.Count() > 0)
+			{
+			DEBUG_PRINTF(_L8("Multiple definition of Component Vendor"));
+			User::Leave(KErrCorrupt);
+			}
+		SplitValuesL(aValue, iVendorNames);
+		}
+	else if (aName == KTxtComponentVersion)
+		{
+		ParseComponentVersionL(aValue, iVersion);
+		}
+	else if (aName == KTxtFile)
+		{
+		HBufC* file = HBufC::NewLC(aValue.Size());
+		TPtr fileBuf = file->Des();
+		fileBuf.Copy(aValue);
+		fileBuf.Trim();
+		iFiles.AppendL(file);
+		CleanupStack::Pop(file);
+		}
+	else
+		{
+		DEBUG_PRINTF2(_L8("Failed due to unrecognized token: %S"), &aName);
+		User::Leave(KErrCorrupt);
+		}
+	}
+
+TInt CSifRefPkgParser::GetLanguageIndex(TLanguage aLanguage) const
+	{
+	const TInt count = iLanguages.Count();
+	for (TInt i=0; i<count; ++i)
+		{
+		if (iLanguages[i] == aLanguage)
+			{
+			return i;
+			}
+		}
+	return KErrNotFound;
+	}
+
+void CSifRefPkgParser::CheckInvariantL() const
+	{
+	if (iVersion.iMajor == 0 && iVersion.iMinor == 0 && iVersion.iBuild == 0)
+		{
+		DEBUG_PRINTF(_L8("Version not specified!"));
+		User::Leave(KErrCorrupt);
+		}
+	if (iLanguages.Count() == 0)
+		{
+		DEBUG_PRINTF(_L8("Language not specified!"));
+		User::Leave(KErrCorrupt);
+		}
+	if (iLanguages.Count() != iComponentNames.Count())
+		{
+		DEBUG_PRINTF(_L8("The number of languages and component names don't match!"));
+		User::Leave(KErrCorrupt);
+		}
+	if (iLanguages.Count() != iVendorNames.Count())
+		{
+		DEBUG_PRINTF(_L8("The number of languages and vendor names don't match!"));
+		User::Leave(KErrCorrupt);
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/source/sifrefpkgrec.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements a package file recognizer for the Reference Installer.
+*
+*/
+
+
+#include <apmrec.h>
+#include <apmstd.h>
+#include <ecom/ecom.h>
+#include <ecom/implementationproxy.h>
+#include "sifrefpkgrec.h"
+
+const TUid KUidSifRefRecognizer = {0x10286351};
+const TInt KSifRefNumMimeTypes = 1;
+const TInt KMaxBufferLength = 0xf;
+
+/**
+A file extension and MIME type for reference package files.
+*/
+_LIT(KSifRefBinPkgFileExt, ".sifrefbinpkg");
+_LIT8(KDataTestMimeType, "binary/sif-refpkg");
+
+CSifRefPkgRecognizer::CSifRefPkgRecognizer()
+	: CApaDataRecognizerType(KUidSifRefRecognizer, CApaDataRecognizerType::EHigh)
+	{
+	iCountDataTypes = KSifRefNumMimeTypes;
+	}
+
+TUint CSifRefPkgRecognizer::PreferredBufSize()
+	{
+	return KMaxBufferLength;
+	}
+
+TDataType CSifRefPkgRecognizer::SupportedDataTypeL(TInt /*aIndex*/) const
+	{
+	return TDataType(KDataTestMimeType);
+	}
+
+void CSifRefPkgRecognizer::DoRecognizeL(const TDesC& aName, const TDesC8& /*aBuffer*/)
+	{
+	// This recognition is based only on the file extension
+	const TInt dotPos = aName.LocateReverse('.');
+	if (dotPos == KErrNotFound)
+		{
+		iConfidence = ENotRecognized;
+		return;
+		}
+	TInt extLen = aName.Length() - dotPos;
+	if (aName.Right(extLen).CompareF(KSifRefBinPkgFileExt) == 0)
+		{
+		iDataType = TDataType(KDataTestMimeType);
+		iConfidence = ECertain;
+		}
+	}
+
+CApaDataRecognizerType* CSifRefPkgRecognizer::CreateRecognizerL()
+	{
+	return new (ELeave) CSifRefPkgRecognizer();
+	}
+
+const TImplementationProxy ImplementationTable[] = 
+	{
+		IMPLEMENTATION_PROXY_ENTRY(0x10286352, CSifRefPkgRecognizer::CreateRecognizerL)
+	};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/source/sifrefplugin.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,270 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements a SIF plug-in for the Reference Installer.
+*
+*/
+
+
+#include "usiflog.h"
+#include "sifrefplugin.h"
+#include <usif/sif/sif.h>
+#include <usif/sif/sifcommon.h>
+#include <usif/usiferror.h>
+#include <usif/sif/sifplugin.h>
+#include <e32property.h>
+#include <f32file.h>
+
+using namespace Usif;
+
+static const TInt KSifRefPluginImpId = 0x10286350;
+
+static const TImplementationProxy ImplementationTable[] = 
+	{
+	IMPLEMENTATION_PROXY_ENTRY(KSifRefPluginImpId, CSifRefPlugin::NewL)
+	};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
+
+CSifRefPlugin* CSifRefPlugin::NewL()
+	{
+	DEBUG_PRINTF(_L8("Constructing CSifRefPlugin"));
+	CSifRefPlugin* self = new (ELeave) CSifRefPlugin();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CSifRefPlugin::ConstructL()
+	{
+	iImpl = CSifRefPluginActiveImpl::NewL();
+	}
+
+CSifRefPlugin::~CSifRefPlugin()
+	{
+	delete iImpl;
+	}
+
+void CSifRefPlugin::CancelOperation()
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Cancel"));
+	iImpl->Cancel();
+	}
+
+void CSifRefPlugin::GetComponentInfo(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+										 CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - GetComponentInfo by filename"));
+	iImpl->GetComponentInfo(aFileName, aSecurityContext, aComponentInfo, aStatus);
+	}
+
+void CSifRefPlugin::GetComponentInfo(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+						 				CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - GetComponentInfo by file handle"));
+	iImpl->GetComponentInfo(aFileHandle, aSecurityContext, aComponentInfo, aStatus);
+	}
+
+void CSifRefPlugin::Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+								TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Install by file name"));
+	iImpl->Install(aFileName, aSecurityContext, aInputParams, aOutputParams, aStatus);
+	}
+
+void CSifRefPlugin::Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+								TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Install by file handle"));
+	iImpl->Install(aFileHandle, aSecurityContext, aInputParams, aOutputParams, aStatus);
+	}
+
+void CSifRefPlugin::Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Uninstall"));
+	iImpl->Uninstall(aComponentId, aSecurityContext, aInputParams, aOutputParams, aStatus);
+	}
+
+void CSifRefPlugin::Activate(TComponentId aComponentId, const TSecurityContext& aSecurityContext, TRequestStatus& aStatus)
+
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Activate"));
+	iImpl->Activate(aComponentId, aSecurityContext, aStatus);
+	}
+
+void CSifRefPlugin::Deactivate(TComponentId aComponentId, const TSecurityContext& aSecurityContext, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Deactivate"));
+	iImpl->Deactivate(aComponentId, aSecurityContext, aStatus);
+	}
+
+//------------------CSifRefPluginActiveImpl---------------------
+
+CSifRefPluginActiveImpl* CSifRefPluginActiveImpl::NewL()
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Constructing CSifRefPluginActiveImpl"));
+	CSifRefPluginActiveImpl* self = new (ELeave) CSifRefPluginActiveImpl();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(1, self);
+	return self;
+	}
+
+void CSifRefPluginActiveImpl::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	User::LeaveIfError(iTransporter.Connect());
+	}
+
+CSifRefPluginActiveImpl::~CSifRefPluginActiveImpl()
+	{
+	iTransporter.Close();
+	}
+
+void CSifRefPluginActiveImpl::RunL()
+	{
+	TInt res = iStatus.Int();
+	DEBUG_PRINTF2(_L8("Reference Installer plug-in - Operation finished with result %d"), res);
+
+	User::RequestComplete(iClientStatus, res);
+	iClientStatus = NULL;
+	}
+
+void CSifRefPluginActiveImpl::DoCancel()
+	{
+	ASSERT(iClientStatus);
+	
+	iTransporter.CancelOperation();
+	User::RequestComplete(iClientStatus, iStatus.Int());
+	iClientStatus = NULL;
+	}
+
+TBool CSifRefPluginActiveImpl::CommonRequestPreamble(const TSecurityContext& aSecurityContext, const COpaqueNamedParams& aInputParams, 
+				COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	iInputParams = &aInputParams;
+	iOutputParams = &aOutputParams;
+
+	// Check required capabilities here
+	TInt silent = EFalse;
+	TRAP_IGNORE(aInputParams.GetIntByNameL(_L("Silent"), silent));
+	if (silent)
+		{
+		if (!aSecurityContext.HasCapability(ECapabilityTrustedUI))
+			{
+			User::RequestComplete(iClientStatus, KErrPermissionDenied);
+			return EFalse;
+			}
+		}
+
+	return ETrue;
+	}
+
+void CSifRefPluginActiveImpl::GetComponentInfo(const TDesC& aFileName, const TSecurityContext& /*aSecurityContext*/,
+												CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	iTransporter.GetComponentInfo(aFileName, aComponentInfo, iStatus);
+	
+	SetActive();
+	}
+
+void CSifRefPluginActiveImpl::GetComponentInfo(RFile& aFileHandle, const TSecurityContext& /*aSecurityContext*/,
+												CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	iTransporter.GetComponentInfo(aFileHandle, aComponentInfo, iStatus);
+	
+	SetActive();
+	}
+
+void CSifRefPluginActiveImpl::Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+										const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+										TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF2(_L("Reference Installer plug-in - install for %S"), &aFileName);
+
+	if (CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus))
+		{
+		iTransporter.Install(aFileName, aInputParams, aOutputParams, iStatus);
+
+		SetActive();
+		}
+	}
+
+void CSifRefPluginActiveImpl::Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+										const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+										TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - install by file handle"));
+
+	if (CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus))
+		{
+		iTransporter.Install(aFileHandle, aInputParams, aOutputParams, iStatus);
+
+		SetActive();
+		}
+	}
+
+void CSifRefPluginActiveImpl::Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+		  const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - uninstall"));
+
+	if (CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus))
+		{
+		iTransporter.Uninstall(aComponentId, aInputParams, aOutputParams, iStatus);
+
+		SetActive();
+		}
+	}
+
+void CSifRefPluginActiveImpl::Activate(TComponentId aComponentId, const TSecurityContext& /*aSecurityContext*/, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - activate"));
+	
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	iTransporter.Activate(aComponentId, iStatus);
+
+	SetActive();
+	}
+
+void CSifRefPluginActiveImpl::Deactivate(TComponentId aComponentId, const TSecurityContext& /*aSecurityContext*/, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - deactivate"));
+
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	iTransporter.Deactivate(aComponentId, iStatus);
+
+	SetActive();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/source/sifrefuihandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements UI callbacks for the SIF Reference Installer
+*
+*/
+
+
+#include "sifrefuihandler.h"
+
+using namespace Usif;
+
+TBool MSifRefUIHandler::ConfirmationUIHandler(const TDesC& aQuestion)
+	{
+	TPtrC QuestionToBeDisplayed(aQuestion);
+	return ETrue;
+	}
+
+void MSifRefUIHandler::ErrorDescriptionUIHandler(const TDesC& /*aDescription*/)
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/base2.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component 2" "Przykladowy komponent SIF"
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
+File: c:\RefComponent2\file1.ref
+File: c:\RefComponent2\file2.ref
+File: c:\RefComponent2\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/base3.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,4 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component 3" "Przykladowy komponent SIF 3"
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/fileinusetest.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,5 @@
+Languages: "HU"
+ComponentName: "File in use - reference component"
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian"
+File: c:\refpckg.inuse
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/invalid10.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+Languages: EN PL
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
+File: c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/invalid11.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
+Files: c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/invalid12.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
+File c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/invalid2.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+Languages: "EN" "PL"
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
+File: c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/invalid3.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+Languages: "EN" "GE"
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF"
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
+File: c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/invalid4.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF"
+ComponentVendor: "Symbian" "Symbian"
+File: c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/invalid5.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF"
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
+File: c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/invalid6.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component"
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
+File: c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/invalid7.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF"
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian"
+File: c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/invalid8.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF
+ComponentVersion: 1.00
+ComponentVendor: "Symbian" "Symbian"
+File: c:\RefComponent\file1.ref
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/data/invalid9.sifrefpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+Languages: "EN" "PL"
+ComponentName: "SIF Reference Component" "Przykladowy komponent SIF
+ComponentVersion: 1.00(0)
+ComponentVendor: "Symbian" "Symbian"
+File: 
+File: c:\RefComponent\file2.ref
+File: c:\RefComponent\file3.ref
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/tsifrefinstaller.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,429 @@
+
+[GetComponentInfoByFileNameForUninstalledComponent]
+packageFile=z:\tusif\tsifrefinstaller\data\base.sifrefbinpkg
+operationByFileHandle=False
+root.softwareTypeName=reference
+root.componentName=SIF Reference Component
+root.componentVersion=1.00(0)
+root.componentVendor=Symbian
+root.scomoState=0
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=SIF Reference Component
+root.authenticity=0
+root.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=3072
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetComponentInfoByFileHandleForInstalledComponent]
+packageFile=z:\tusif\tsifrefinstaller\data\base.sifrefbinpkg
+operationByFileHandle=True
+root.softwareTypeName=reference
+root.componentName=SIF Reference Component
+root.componentVersion=1.00(0)
+root.componentVendor=Symbian
+root.scomoState=1
+root.installStatus=2
+root.componentId=1
+root.globalComponentId=SIF Reference Component
+root.authenticity=0
+root.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=3072
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetComponentInfoByFileHandleForUninstalledUpgrade]
+packageFile=z:\tusif\tsifrefinstaller\data\upgrade.sifrefbinpkg
+operationByFileHandle=True
+root.softwareTypeName=reference
+root.componentName=SIF Reference Component
+root.componentVersion=1.23(4)
+root.componentVendor=Symbian
+root.scomoState=1
+root.installStatus=1
+root.componentId=1
+root.globalComponentId=SIF Reference Component
+root.authenticity=0
+root.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=2048
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetComponentInfoByFileHandleForInstalledUpgrade]
+packageFile=z:\tusif\tsifrefinstaller\data\upgrade.sifrefbinpkg
+operationByFileHandle=True
+root.softwareTypeName=reference
+root.componentName=SIF Reference Component
+root.componentVersion=1.23(4)
+root.componentVendor=Symbian
+root.scomoState=1
+root.installStatus=2
+root.componentId=4
+root.globalComponentId=SIF Reference Component
+root.authenticity=0
+root.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=2048
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetComponentInfoByFileHandleForActivatedComponent]
+packageFile=z:\tusif\tsifrefinstaller\data\base.sifrefbinpkg
+operationByFileHandle=True
+root.softwareTypeName=reference
+root.componentName=SIF Reference Component
+root.componentVersion=1.00(0)
+root.componentVendor=Symbian
+root.scomoState=1
+root.installStatus=2
+root.componentId=3
+root.globalComponentId=SIF Reference Component
+root.authenticity=0
+root.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=3072
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetComponentInfoByFileHandleForInstalledInactiveComponent]
+packageFile=z:\tusif\tsifrefinstaller\data\base.sifrefbinpkg
+operationByFileHandle=True
+root.softwareTypeName=reference
+root.componentName=SIF Reference Component
+root.componentVersion=1.00(0)
+root.componentVendor=Symbian
+root.scomoState=0
+root.installStatus=2
+root.componentId=3
+root.globalComponentId=SIF Reference Component
+root.authenticity=0
+root.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=3072
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[InstallByFileName]
+packageFile=z:\tusif\tsifrefinstaller\data\base.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallFilelessByFileName]
+packageFile=z:\tusif\tsifrefinstaller\data\base3.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallByFileHandle]
+packageFile=z:\tusif\tsifrefinstaller\data\base.sifrefbinpkg
+operationByFileHandle=True
+useEnhancedApi=False
+
+[InstallInactiveByFileName]
+packageFile=z:\tusif\tsifrefinstaller\data\base.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=True
+pluginOpaqueArgumentName0=InstallInactive
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+pluginRefOpaqueResultName0=ComponentId
+pluginRefOpaqueResultType0=String
+pluginRefOpaqueResultValue0=__ANY_VALUE_PERMITTED__
+
+[InstallUpgradeByFileName]
+packageFile=z:\tusif\tsifrefinstaller\data\upgrade.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallHomogeneousCompoundByFileName]
+packageFile=z:\tusif\tsifrefinstaller\data\homogeneouscompound.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallHomogeneousCompoundByFileHandle]
+packageFile=z:\tusif\tsifrefinstaller\data\homogeneouscompound.sifrefbinpkg
+operationByFileHandle=True
+useEnhancedApi=False
+
+[UninstallByNameAndVendor]
+componentName=SIF Reference Component
+componentVendor=Symbian
+useEnhancedApi=False
+
+[UninstallFilelessByNameAndVendor]
+componentName=SIF Reference Component 3
+componentVendor=Symbian
+useEnhancedApi=False
+
+[AsynchronousCancelInstallByFileName]
+packageFile=z:\tusif\tsifrefinstaller\data\homogeneouscompound.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+cancelAfter=100
+
+[InstallInvalidPackage]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallInvalid2Package]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallInvalid3Package]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallInvalid4Package]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallInvalid5Package]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallInvalid6Package]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallInvalid7Package]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallInvalid8Package]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallInvalid9Package]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallInvalid10Package]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallInvalid11Package]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallInvalid12Package]
+packageFile=z:\tusif\tsifrefinstaller\data\invalid2.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[ActivateByNameAndVendor]
+componentName=SIF Reference Component
+componentVendor=Symbian
+
+[DeactivateByNameAndVendor]
+componentName=SIF Reference Component
+componentVendor=Symbian
+
+[VerifyBasePackageExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file1.ref
+packageFile1=c:\RefComponent\file2.ref
+packageFile2=c:\RefComponent\file3.ref
+scomoState=1
+
+[VerifyFilelessPackageExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component 3
+componentVendor=Symbian
+scomoState=1
+
+[VerifyInactiveBasePackageExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file1.ref
+packageFile1=c:\RefComponent\file2.ref
+packageFile2=c:\RefComponent\file3.ref
+scomoState=0
+
+[VerifyUpgradePackageExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file3.ref
+packageFile1=c:\RefComponent\file4.ref
+scomoState=1
+
+[VerifyPackageNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file1.ref
+packageFile1=c:\RefComponent\file2.ref
+packageFile2=c:\RefComponent\file3.ref
+packageFile3=c:\RefComponent\file4.ref
+
+[VerifyFilelessPackageNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=SIF Reference Component 3
+componentVendor=Symbian
+
+[VerifyPackageNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file1.ref
+packageFile1=c:\RefComponent\file2.ref
+packageFile2=c:\RefComponent\file3.ref
+packageFile3=c:\RefComponent\file4.ref
+
+[VerifyRootPackageExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component 2
+componentVendor=Symbian
+packageFile0=c:\RefComponent2\file1.ref
+packageFile1=c:\RefComponent2\file2.ref
+packageFile2=c:\RefComponent2\file3.ref
+scomoState=1
+
+[VerifyRootChild0PackageExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file1.ref
+packageFile1=c:\RefComponent\file2.ref
+packageFile2=c:\RefComponent\file3.ref
+scomoState=1
+
+[VerifyRootChild1PackageExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component 3
+componentVendor=Symbian
+scomoState=1
+
+[VerifyRootPackageNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=SIF Reference Component 2
+componentVendor=Symbian
+packageFile0=c:\RefComponent2\file1.ref
+packageFile1=c:\RefComponent2\file2.ref
+packageFile2=c:\RefComponent2\file3.ref
+
+[VerifyRootChild0PackageNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file1.ref
+packageFile1=c:\RefComponent\file2.ref
+packageFile2=c:\RefComponent\file3.ref
+
+[VerifyRootChild1PackageNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=SIF Reference Component 3
+componentVendor=Symbian
+
+[UninstallRootByNameAndVendor]
+componentName=SIF Reference Component 2
+componentVendor=Symbian
+useEnhancedApi=False
+
+[UninstallRootChild0ByNameAndVendor]
+componentName=SIF Reference Component
+componentVendor=Symbian
+useEnhancedApi=False
+
+[UninstallRootChild1ByNameAndVendor]
+componentName=SIF Reference Component 3
+componentVendor=Symbian
+useEnhancedApi=False
+
+[GetComponentInfoByFileNameForHomogeneousCompoundPartiallyInstalledComponent]
+packageFile=z:\tusif\tsifrefinstaller\data\homogeneouscompound.sifrefbinpkg
+operationByFileHandle=False
+root.softwareTypeName=reference
+root.componentName=SIF Reference Component 2
+root.componentVersion=1.00(0)
+root.componentVendor=Symbian
+root.scomoState=0
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=SIF Reference Component 2
+root.authenticity=0
+root.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=3072
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+root.numChildren=2
+root.child0.softwareTypeName=reference
+root.child0.componentName=SIF Reference Component 3
+root.child0.componentVersion=1.00(0)
+root.child0.componentVendor=Symbian
+root.child0.scomoState=1
+root.child0.installStatus=2
+root.child0.componentId=5
+root.child0.globalComponentId=SIF Reference Component 3
+root.child0.authenticity=0
+root.child0.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.child0.maxInstalledSize=0
+root.child0.hasExecutable=False
+root.child0.driveSelectionRequired=False
+root.child0.noOfApps=0
+root.child1.softwareTypeName=reference
+root.child1.componentName=SIF Reference Component
+root.child1.componentVersion=1.00(0)
+root.child1.componentVendor=Symbian
+root.child1.scomoState=0
+root.child1.installStatus=0
+root.child1.componentId=0
+root.child1.globalComponentId=SIF Reference Component
+root.child1.authenticity=0
+root.child1.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.child1.maxInstalledSize=3072
+root.child1.hasExecutable=False
+root.child1.driveSelectionRequired=False
+root.child1.noOfApps=0
+
+[InstallFileInUsePckg]
+packageFile=z:\tusif\tsifrefinstaller\data\fileinusetest.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[UninstallFileInUsePckg]
+componentName=File in use - reference component
+componentVendor=Symbian
+useEnhancedApi=False
+
+[InstallSilentByFilename]
+packageFile=z:\tusif\tsifrefinstaller\data\base.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=True
+pluginOpaqueArgumentName0=Silent
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+pluginRefOpaqueResultName0=ComponentId
+pluginRefOpaqueResultType0=String
+pluginRefOpaqueResultValue0=__ANY_VALUE_PERMITTED__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/test/scripts/tsifrefinstaller.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,168 @@
+//
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+//
+//
+
+PRINT Run SIF reference plugin tests
+
+// Delete the SCR Database file
+LOAD_SUITE tscr
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+
+LOAD_SUITE tUsifSuite
+
+// Test GetComponentInfo and Install (use Uninstall)
+// !@file
+//! @SYMTestCaseID		API-SEC-USIF-tsifrefinstaller-0001
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifrefinstaller-0001
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini GetComponentInfoByFileNameForUninstalledComponent
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyPackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini InstallByFileHandle
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyBasePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini GetComponentInfoByFileHandleForInstalledComponent
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini GetComponentInfoByFileHandleForUninstalledUpgrade
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini UninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyPackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini InstallFilelessByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyFilelessPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini UninstallFilelessByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyFilelessPackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifrefinstaller-0001
+
+
+//! @SYMTestCaseID		API-SEC-USIF-tsifrefinstaller-0002
+//! @SYMTestStatus		3. Released
+// Test InstallInactive, Activate, InstallUpgrade, Uninstall (use GetComponentInfo)
+
+START_TESTCASE API-SEC-USIF-tsifrefinstaller-0002
+
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini InstallInactiveByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyInactiveBasePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini GetComponentInfoByFileHandleForInstalledInactiveComponent
+// Activate-deactivate the package
+RUN_TEST_STEP 100 tUsifSuite SifActivateStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini ActivateByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini GetComponentInfoByFileHandleForActivatedComponent
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyBasePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifDeactivateStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini DeactivateByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyInactiveBasePackageExistence
+// And activate again
+RUN_TEST_STEP 100 tUsifSuite SifActivateStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini ActivateByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini InstallUpgradeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini GetComponentInfoByFileHandleForInstalledUpgrade
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyUpgradePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini UninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini GetComponentInfoByFileNameForUninstalledComponent
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyPackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifrefinstaller-0002
+
+
+//! @SYMTestCaseID		API-SEC-USIF-tsifrefinstaller-0003
+//! @SYMTestStatus		3. Released
+// Test CancelOperation
+
+START_TESTCASE API-SEC-USIF-tsifrefinstaller-0003
+
+RUN_TEST_STEP !Result=-3 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini AsynchronousCancelInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootPackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild0PackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild1PackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifrefinstaller-0003
+
+
+//! @SYMTestCaseID		API-SEC-USIF-tsifrefinstaller-0004
+//! @SYMTestStatus		3. Released
+// Test InstallInvalidPackage
+
+START_TESTCASE API-SEC-USIF-tsifrefinstaller-0004
+
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalidPackage
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalid2Package
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalid3Package
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalid4Package
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalid5Package
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalid6Package
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalid7Package
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalid8Package
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalid9Package
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalid10Package
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalid11Package
+RUN_TEST_STEP !Result=-20 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini  InstallInvalid12Package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyPackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifrefinstaller-0004
+
+
+//! @SYMTestCaseID		API-SEC-USIF-tsifrefinstaller-B-0004
+//! @SYMTestStatus		3. Released
+
+// Test GetComponentInfo for homogeneous compound package with installed child
+START_TESTCASE API-SEC-USIF-tsifrefinstaller-B-0004
+
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootPackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild0PackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild1PackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini InstallFilelessByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyFilelessPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini GetComponentInfoByFileNameForHomogeneousCompoundPartiallyInstalledComponent
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini UninstallFilelessByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyFilelessPackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifrefinstaller-B-0004
+
+
+//! @SYMTestCaseID		API-SEC-USIF-tsifrefinstaller-0005
+//! @SYMTestStatus		3. Released
+
+// Test Install for homogeneous compound packages
+START_TESTCASE API-SEC-USIF-tsifrefinstaller-0005
+
+// by file name
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootPackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild0PackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild1PackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini InstallHomogeneousCompoundByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild0PackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild1PackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini UninstallRootByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini UninstallRootChild0ByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini UninstallRootChild1ByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootPackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild0PackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild1PackageNonExistence
+// by file handle
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini InstallHomogeneousCompoundByFileHandle
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild0PackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild1PackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini UninstallRootByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini UninstallRootChild0ByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini UninstallRootChild1ByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootPackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild0PackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini VerifyRootChild1PackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifrefinstaller-0005
+
+// Wait 3 seconds in order to let the SIF server shutdown itself
+DELAY 3000
+
+PRINT Complate_te_Sif_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/bwins/scrclientu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,361 @@
+EXPORTS
+	?SetComponentNameL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@W4TLanguage@@@Z @ 1 NONAME ; void Usif::RSoftwareComponentRegistry::SetComponentNameL(int, class TDesC16 const &, enum TLanguage)
+	?CompareVersionsL@RSoftwareComponentRegistry@Usif@@SAHABVTDesC16@@0@Z @ 2 NONAME ; int Usif::RSoftwareComponentRegistry::CompareVersionsL(class TDesC16 const &, class TDesC16 const &)
+	?CommitTransactionL@RSoftwareComponentRegistry@Usif@@QAEXXZ @ 3 NONAME ; void Usif::RSoftwareComponentRegistry::CommitTransactionL(void)
+	?GetDependantComponentsL@RSoftwareComponentRegistry@Usif@@QBEXABVCGlobalComponentId@2@AAV?$RPointerArray@VCVersionedComponentId@Usif@@@@@Z @ 4 NONAME ; void Usif::RSoftwareComponentRegistry::GetDependantComponentsL(class Usif::CGlobalComponentId const &, class RPointerArray<class Usif::CVersionedComponentId> &) const
+	?SetIsComponentPresentL@RSoftwareComponentRegistry@Usif@@QAEXHH@Z @ 5 NONAME ; void Usif::RSoftwareComponentRegistry::SetIsComponentPresentL(int, int)
+	?OpenListL@RSoftwareComponentRegistryFilesList@Usif@@QAEXABVRSoftwareComponentRegistry@2@H@Z @ 6 NONAME ; void Usif::RSoftwareComponentRegistryFilesList::OpenListL(class Usif::RSoftwareComponentRegistry const &, int)
+	?SetFileL@CComponentFilter@Usif@@QAEXABVTDesC16@@@Z @ 7 NONAME ; void Usif::CComponentFilter::SetFileL(class TDesC16 const &)
+	?NewL@CGlobalComponentId@Usif@@SAPAV12@AAVRReadStream@@@Z @ 8 NONAME ; class Usif::CGlobalComponentId * Usif::CGlobalComponentId::NewL(class RReadStream &)
+	?NewL@CComponentEntry@Usif@@SAPAV12@AAVRReadStream@@@Z @ 9 NONAME ; class Usif::CComponentEntry * Usif::CComponentEntry::NewL(class RReadStream &)
+	?ExternalizeL@CLocalizableComponentInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 10 NONAME ; void Usif::CLocalizableComponentInfo::ExternalizeL(class RWriteStream &) const
+	?AddPropertyL@CComponentFilter@Usif@@QAEXABVTDesC16@@ABVTDesC8@@W4TDbOperator@12@2@Z @ 11 NONAME ; void Usif::CComponentFilter::AddPropertyL(class TDesC16 const &, class TDesC8 const &, enum Usif::CComponentFilter::TDbOperator, enum Usif::CComponentFilter::TDbOperator)
+	?ComponentId@CComponentEntry@Usif@@QBEABHXZ @ 12 NONAME ; int const & Usif::CComponentEntry::ComponentId(void) const
+	?BinaryValue@CBinaryPropertyEntry@Usif@@QAEABVTDesC8@@XZ @ 13 NONAME ; class TDesC8 const & Usif::CBinaryPropertyEntry::BinaryValue(void)
+	?VersionTo@CVersionedComponentId@Usif@@QBEPBVTDesC16@@XZ @ 14 NONAME ; class TDesC16 const * Usif::CVersionedComponentId::VersionTo(void) const
+	?InternalizeL@CLocalizedSoftwareTypeName@Usif@@AAEXAAVRReadStream@@@Z @ 15 NONAME ; void Usif::CLocalizedSoftwareTypeName::InternalizeL(class RReadStream &)
+	?SetKnownRevoked@CComponentFilter@Usif@@QAEXH@Z @ 16 NONAME ; void Usif::CComponentFilter::SetKnownRevoked(int)
+	?SetRemovable@CComponentFilter@Usif@@QAEXH@Z @ 17 NONAME ; void Usif::CComponentFilter::SetRemovable(int)
+	?SetIsComponentOriginVerifiedL@RSoftwareComponentRegistry@Usif@@QAEXHH@Z @ 18 NONAME ; void Usif::RSoftwareComponentRegistry::SetIsComponentOriginVerifiedL(int, int)
+	?Locale@CLocalizableCommonData@Usif@@QBE?AW4TLanguage@@XZ @ 19 NONAME ; enum TLanguage Usif::CLocalizableCommonData::Locale(void) const
+	?VendorL@CLocalizableComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 20 NONAME ; class TDesC16 const & Usif::CLocalizableComponentInfo::VendorL(void) const
+	??0RSoftwareComponentRegistryView@Usif@@QAE@XZ @ 21 NONAME ; Usif::RSoftwareComponentRegistryView::RSoftwareComponentRegistryView(void)
+	?IsOriginVerified@CComponentEntry@Usif@@QBEHXZ @ 22 NONAME ; int Usif::CComponentEntry::IsOriginVerified(void) const
+	?SoftwareTypeName@CScrLogEntry@Usif@@QBEABVTDesC16@@XZ @ 23 NONAME ; class TDesC16 const & Usif::CScrLogEntry::SoftwareTypeName(void) const
+	?NewLC@CLocalizedSoftwareTypeName@Usif@@SAPAV12@ABVTDesC16@@W4TLanguage@@@Z @ 24 NONAME ; class Usif::CLocalizedSoftwareTypeName * Usif::CLocalizedSoftwareTypeName::NewLC(class TDesC16 const &, enum TLanguage)
+	?GetPluginUidL@RSoftwareComponentRegistry@Usif@@QBE?AVTUid@@ABVTDesC16@@@Z @ 25 NONAME ; class TUid Usif::RSoftwareComponentRegistry::GetPluginUidL(class TDesC16 const &) const
+	??1CPropertyEntry@Usif@@UAE@XZ @ 26 NONAME ; Usif::CPropertyEntry::~CPropertyEntry(void)
+	?NewLC@CIntPropertyEntry@Usif@@SAPAV12@ABVTDesC16@@_J@Z @ 27 NONAME ; class Usif::CIntPropertyEntry * Usif::CIntPropertyEntry::NewLC(class TDesC16 const &, long long)
+	?SetComponentPropertyL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@_J@Z @ 28 NONAME ; void Usif::RSoftwareComponentRegistry::SetComponentPropertyL(int, class TDesC16 const &, long long)
+	?SetComponentPropertyL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@0W4TLanguage@@@Z @ 29 NONAME ; void Usif::RSoftwareComponentRegistry::SetComponentPropertyL(int, class TDesC16 const &, class TDesC16 const &, enum TLanguage)
+	?OperationTime@CScrLogEntry@Usif@@QBE?BVTTime@@XZ @ 30 NONAME ; class TTime const Usif::CScrLogEntry::OperationTime(void) const
+	?IsComponentOrphanedL@RSoftwareComponentRegistry@Usif@@QAEHH@Z @ 31 NONAME ; int Usif::RSoftwareComponentRegistry::IsComponentOrphanedL(int)
+	?UnregisterComponentFileL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@@Z @ 32 NONAME ; void Usif::RSoftwareComponentRegistry::UnregisterComponentFileL(int, class TDesC16 const &)
+	?NewLC@CBinaryPropertyEntry@Usif@@SAPAV12@ABVTDesC16@@ABVTDesC8@@@Z @ 33 NONAME ; class Usif::CBinaryPropertyEntry * Usif::CBinaryPropertyEntry::NewLC(class TDesC16 const &, class TDesC8 const &)
+	?SetScomoStateL@CComponentFilter@Usif@@QAEXW4TScomoState@2@@Z @ 34 NONAME ; void Usif::CComponentFilter::SetScomoStateL(enum Usif::TScomoState)
+	?NewL@CVersionedComponentId@Usif@@SAPAV12@AAVRReadStream@@@Z @ 35 NONAME ; class Usif::CVersionedComponentId * Usif::CVersionedComponentId::NewL(class RReadStream &)
+	??1CGlobalComponentId@Usif@@UAE@XZ @ 36 NONAME ; Usif::CGlobalComponentId::~CGlobalComponentId(void)
+	?SetVendorNameL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@W4TLanguage@@@Z @ 37 NONAME ; void Usif::RSoftwareComponentRegistry::SetVendorNameL(int, class TDesC16 const &, enum TLanguage)
+	?RollbackTransactionL@RSoftwareComponentRegistry@Usif@@QAEXXZ @ 38 NONAME ; void Usif::RSoftwareComponentRegistry::RollbackTransactionL(void)
+	?ComponentId@CScrLogEntry@Usif@@QBEHXZ @ 39 NONAME ; int Usif::CScrLogEntry::ComponentId(void) const
+	?GlobalIdName@CGlobalComponentId@Usif@@QBEABVTDesC16@@XZ @ 40 NONAME ; class TDesC16 const & Usif::CGlobalComponentId::GlobalIdName(void) const
+	?Close@RSoftwareComponentRegistry@Usif@@QAEXXZ @ 41 NONAME ; void Usif::RSoftwareComponentRegistry::Close(void)
+	?DeleteSoftwareTypeL@RSoftwareComponentRegistry@Usif@@QAEXABVTDesC16@@AAV?$RPointerArray@VHBufC16@@@@@Z @ 42 NONAME ; void Usif::RSoftwareComponentRegistry::DeleteSoftwareTypeL(class TDesC16 const &, class RPointerArray<class HBufC16> &)
+	?NewLC@CGlobalComponentId@Usif@@SAPAV12@XZ @ 43 NONAME ; class Usif::CGlobalComponentId * Usif::CGlobalComponentId::NewLC(void)
+	?InternalizeL@CGlobalComponentId@Usif@@QAEXAAVRReadStream@@@Z @ 44 NONAME ; void Usif::CGlobalComponentId::InternalizeL(class RReadStream &)
+	?NextComponentL@RSoftwareComponentRegistryView@Usif@@QBEPAVCComponentEntry@2@W4TLanguage@@@Z @ 45 NONAME ; class Usif::CComponentEntry * Usif::RSoftwareComponentRegistryView::NextComponentL(enum TLanguage) const
+	?LocaleL@CLocalizablePropertyEntry@Usif@@QBE?AW4TLanguage@@XZ @ 46 NONAME ; enum TLanguage Usif::CLocalizablePropertyEntry::LocaleL(void) const
+	?IsDrmProtected@CComponentEntry@Usif@@QBEHXZ @ 47 NONAME ; int Usif::CComponentEntry::IsDrmProtected(void) const
+	?PropertyType@CLocalizablePropertyEntry@Usif@@UBE?AW4TPropertyType@CPropertyEntry@2@XZ @ 48 NONAME ; enum Usif::CPropertyEntry::TPropertyType Usif::CLocalizablePropertyEntry::PropertyType(void) const
+	?InstallTimeL@CComponentEntry@Usif@@QBE?AVTTime@@XZ @ 49 NONAME ; class TTime Usif::CComponentEntry::InstallTimeL(void) const
+	??1CVersionedComponentId@Usif@@UAE@XZ @ 50 NONAME ; Usif::CVersionedComponentId::~CVersionedComponentId(void)
+	?GetComponentsL@RSoftwareComponentRegistry@Usif@@QBEXABVTDesC16@@AAV?$RArray@H@@@Z @ 51 NONAME ; void Usif::RSoftwareComponentRegistry::GetComponentsL(class TDesC16 const &, class RArray<int> &) const
+	?OperationType@CScrLogEntry@Usif@@QBE?AW4TScrComponentOperationType@2@XZ @ 52 NONAME ; enum Usif::TScrComponentOperationType Usif::CScrLogEntry::OperationType(void) const
+	?IntValue@CIntPropertyEntry@Usif@@QAEHXZ @ 53 NONAME ; int Usif::CIntPropertyEntry::IntValue(void)
+	?ScomoState@CComponentEntry@Usif@@QBEABW4TScomoState@2@XZ @ 54 NONAME ; enum Usif::TScomoState const & Usif::CComponentEntry::ScomoState(void) const
+	?ExternalizeL@CGlobalComponentId@Usif@@QBEXAAVRWriteStream@@@Z @ 55 NONAME ; void Usif::CGlobalComponentId::ExternalizeL(class RWriteStream &) const
+	?SetIsComponentHiddenL@RSoftwareComponentRegistry@Usif@@QAEXHH@Z @ 56 NONAME ; void Usif::RSoftwareComponentRegistry::SetIsComponentHiddenL(int, int)
+	?SetFilePropertyL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@0ABVTDesC8@@@Z @ 57 NONAME ; void Usif::RSoftwareComponentRegistry::SetFilePropertyL(int, class TDesC16 const &, class TDesC16 const &, class TDesC8 const &)
+	?SetHidden@CComponentFilter@Usif@@QAEXH@Z @ 58 NONAME ; void Usif::CComponentFilter::SetHidden(int)
+	?DeleteComponentPropertyL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@@Z @ 59 NONAME ; void Usif::RSoftwareComponentRegistry::DeleteComponentPropertyL(int, class TDesC16 const &)
+	?NewL@CScrLogEntry@Usif@@SAPAV12@ABVTDesC16@@000W4TScrComponentOperationType@2@@Z @ 60 NONAME ; class Usif::CScrLogEntry * Usif::CScrLogEntry::NewL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, enum Usif::TScrComponentOperationType)
+	?NewL@CComponentFilter@Usif@@SAPAV12@AAVRReadStream@@@Z @ 61 NONAME ; class Usif::CComponentFilter * Usif::CComponentFilter::NewL(class RReadStream &)
+	?NewL@CPropertyEntry@Usif@@SAPAV12@AAVRReadStream@@@Z @ 62 NONAME ; class Usif::CPropertyEntry * Usif::CPropertyEntry::NewL(class RReadStream &)
+	?InternalizeL@CVersionedComponentId@Usif@@QAEXAAVRReadStream@@@Z @ 63 NONAME ; void Usif::CVersionedComponentId::InternalizeL(class RReadStream &)
+	?InternalizeL@CLocalizableComponentInfo@Usif@@AAEXAAVRReadStream@@@Z @ 64 NONAME ; void Usif::CLocalizableComponentInfo::InternalizeL(class RReadStream &)
+	?ComponentSize@CComponentEntry@Usif@@QBE_JXZ @ 65 NONAME ; long long Usif::CComponentEntry::ComponentSize(void) const
+	?ExternalizeL@CPropertyEntry@Usif@@QBEXAAVRWriteStream@@@Z @ 66 NONAME ; void Usif::CPropertyEntry::ExternalizeL(class RWriteStream &) const
+	?GlobalId@CVersionedComponentId@Usif@@QBEABVCGlobalComponentId@2@XZ @ 67 NONAME ; class Usif::CGlobalComponentId const & Usif::CVersionedComponentId::GlobalId(void) const
+	?CreateTransactionL@RSoftwareComponentRegistry@Usif@@QAEXXZ @ 68 NONAME ; void Usif::RSoftwareComponentRegistry::CreateTransactionL(void)
+	?NewLC@CScrLogEntry@Usif@@SAPAV12@ABVTDesC16@@000W4TScrComponentOperationType@2@@Z @ 69 NONAME ; class Usif::CScrLogEntry * Usif::CScrLogEntry::NewLC(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, enum Usif::TScrComponentOperationType)
+	?SetSoftwareTypeL@CComponentFilter@Usif@@QAEXABVTDesC16@@@Z @ 70 NONAME ; void Usif::CComponentFilter::SetSoftwareTypeL(class TDesC16 const &)
+	?AddSoftwareTypeL@RSoftwareComponentRegistry@Usif@@QAEXABVCSoftwareTypeRegInfo@2@@Z @ 71 NONAME ; void Usif::RSoftwareComponentRegistry::AddSoftwareTypeL(class TDesC16 const &, class TUid, class RArray<TSecureId>, class RPointerArray<class HBufC16> const &, class TDesC16 const &, class RPointerArray<class Usif::CLocalizedSoftwareTypeName> const *)
+	?NewL@CBinaryPropertyEntry@Usif@@SAPAV12@ABVTDesC16@@ABVTDesC8@@@Z @ 72 NONAME ; class Usif::CBinaryPropertyEntry * Usif::CBinaryPropertyEntry::NewL(class TDesC16 const &, class TDesC8 const &)
+	?IsKnownRevoked@CComponentEntry@Usif@@QBEHXZ @ 73 NONAME ; int Usif::CComponentEntry::IsKnownRevoked(void) const
+	?RetrieveLogEntriesL@RSoftwareComponentRegistry@Usif@@QBEXAAV?$RPointerArray@VCScrLogEntry@Usif@@@@PBVTDesC16@@@Z @ 74 NONAME ; void Usif::RSoftwareComponentRegistry::RetrieveLogEntriesL(class RPointerArray<class Usif::CScrLogEntry> &, class TDesC16 const *) const
+	?SetFilePropertyL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@0H@Z @ 75 NONAME ; void Usif::RSoftwareComponentRegistry::SetFilePropertyL(int, class TDesC16 const &, class TDesC16 const &, int)
+	?SetVendorL@CComponentFilter@Usif@@QAEXABVTDesC16@@@Z @ 76 NONAME ; void Usif::CComponentFilter::SetVendorL(class TDesC16 const &)
+	?GetSupplierComponentsL@RSoftwareComponentRegistry@Usif@@QBEXABVCGlobalComponentId@2@AAV?$RPointerArray@VCVersionedComponentId@Usif@@@@@Z @ 77 NONAME ; void Usif::RSoftwareComponentRegistry::GetSupplierComponentsL(class Usif::CGlobalComponentId const &, class RPointerArray<class Usif::CVersionedComponentId> &) const
+	?PropertyType@CBinaryPropertyEntry@Usif@@UBE?AW4TPropertyType@CPropertyEntry@2@XZ @ 78 NONAME ; enum Usif::CPropertyEntry::TPropertyType Usif::CBinaryPropertyEntry::PropertyType(void) const
+	?NameL@CLocalizableComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 79 NONAME ; class TDesC16 const & Usif::CLocalizableComponentInfo::NameL(void) const
+	?SetIsComponentDrmProtectedL@RSoftwareComponentRegistry@Usif@@QAEXHH@Z @ 80 NONAME ; void Usif::RSoftwareComponentRegistry::SetIsComponentDrmProtectedL(int, int)
+	?ComponentVersion@CScrLogEntry@Usif@@QBEABVTDesC16@@XZ @ 81 NONAME ; class TDesC16 const & Usif::CScrLogEntry::ComponentVersion(void) const
+	?NextComponentSetL@RSoftwareComponentRegistryView@Usif@@QBEXHAAV?$RPointerArray@VCComponentEntry@Usif@@@@W4TLanguage@@@Z @ 82 NONAME ; void Usif::RSoftwareComponentRegistryView::NextComponentSetL(int, class RPointerArray<class Usif::CComponentEntry> &, enum TLanguage) const
+	?ExternalizeL@CComponentFilter@Usif@@QBEXAAVRWriteStream@@@Z @ 83 NONAME ; void Usif::CComponentFilter::ExternalizeL(class RWriteStream &) const
+	?PropertyName@CPropertyEntry@Usif@@QBEABVTDesC16@@XZ @ 84 NONAME ; class TDesC16 const & Usif::CPropertyEntry::PropertyName(void) const
+	?InstalledDrives@CComponentEntry@Usif@@QBEABV?$TBuf8@$0BK@@@XZ @ 85 NONAME ; class TBuf8<26> const & Usif::CComponentEntry::InstalledDrives(void) const
+	?NewL@CVersionedComponentId@Usif@@SAPAV12@ABVCGlobalComponentId@2@PBVTDesC16@@1@Z @ 86 NONAME ; class Usif::CVersionedComponentId * Usif::CVersionedComponentId::NewL(class Usif::CGlobalComponentId const &, class TDesC16 const *, class TDesC16 const *)
+	?SetIsComponentKnownRevokedL@RSoftwareComponentRegistry@Usif@@QAEXHH@Z @ 87 NONAME ; void Usif::RSoftwareComponentRegistry::SetIsComponentKnownRevokedL(int, int)
+	??1CComponentEntry@Usif@@UAE@XZ @ 88 NONAME ; Usif::CComponentEntry::~CComponentEntry(void)
+	?AddPropertyL@CComponentFilter@Usif@@QAEXABVTDesC16@@_JW4TDbOperator@12@2@Z @ 89 NONAME ; void Usif::CComponentFilter::AddPropertyL(class TDesC16 const &, long long, enum Usif::CComponentFilter::TDbOperator, enum Usif::CComponentFilter::TDbOperator)
+	?NewLC@CComponentEntry@Usif@@SAPAV12@ABHABVTDesC16@@111H_JABW4TScomoState@2@ABV?$TBuf8@$0BK@@@11HHHH@Z @ 90 NONAME ; class Usif::CComponentEntry * Usif::CComponentEntry::NewLC(int const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, int, long long, enum Usif::TScomoState const &, class TBuf8<26> const &, class TDesC16 const &, class TDesC16 const &, int, int, int, int)
+	?NextFileSetL@RSoftwareComponentRegistryFilesList@Usif@@QBEXHAAV?$RPointerArray@VHBufC16@@@@@Z @ 91 NONAME ; void Usif::RSoftwareComponentRegistryFilesList::NextFileSetL(int, class RPointerArray<class HBufC16> &) const
+	?ConstructL@CLocalizedSoftwareTypeName@Usif@@AAEXABVTDesC16@@@Z @ 92 NONAME ; void Usif::CLocalizedSoftwareTypeName::ConstructL(class TDesC16 const &)
+	?IsComponentOnReadOnlyDriveL@RSoftwareComponentRegistry@Usif@@QBEHH@Z @ 93 NONAME ; int Usif::RSoftwareComponentRegistry::IsComponentOnReadOnlyDriveL(int) const
+	?GetComponentPropertiesL@RSoftwareComponentRegistry@Usif@@QBEXHAAV?$RPointerArray@VCPropertyEntry@Usif@@@@W4TLanguage@@@Z @ 94 NONAME ; void Usif::RSoftwareComponentRegistry::GetComponentPropertiesL(int, class RPointerArray<class Usif::CPropertyEntry> &, enum TLanguage) const
+	?ExternalizeL@CLocalizedSoftwareTypeName@Usif@@QBEXAAVRWriteStream@@@Z @ 95 NONAME ; void Usif::CLocalizedSoftwareTypeName::ExternalizeL(class RWriteStream &) const
+	?SetOriginVerified@CComponentFilter@Usif@@QAEXH@Z @ 96 NONAME ; void Usif::CComponentFilter::SetOriginVerified(int)
+	?NewL@CLocalizableComponentInfo@Usif@@SAPAV12@AAVRReadStream@@@Z @ 97 NONAME ; class Usif::CLocalizableComponentInfo * Usif::CLocalizableComponentInfo::NewL(class RReadStream &)
+	?SetComponentSizeL@RSoftwareComponentRegistry@Usif@@QAEXH_J@Z @ 98 NONAME ; void Usif::RSoftwareComponentRegistry::SetComponentSizeL(int, long long)
+	?NewLC@CComponentFilter@Usif@@SAPAV12@XZ @ 99 NONAME ; class Usif::CComponentFilter * Usif::CComponentFilter::NewLC(void)
+	?GetComponentIdL@RSoftwareComponentRegistry@Usif@@QBEHABVTDesC16@@0@Z @ 100 NONAME ; int Usif::RSoftwareComponentRegistry::GetComponentIdL(class TDesC16 const &, class TDesC16 const &) const
+	?NewL@CLocalizablePropertyEntry@Usif@@SAPAV12@ABVTDesC16@@0W4TLanguage@@@Z @ 101 NONAME ; class Usif::CLocalizablePropertyEntry * Usif::CLocalizablePropertyEntry::NewL(class TDesC16 const &, class TDesC16 const &, enum TLanguage)
+	?StrValue@CLocalizablePropertyEntry@Usif@@QBEABVTDesC16@@XZ @ 102 NONAME ; class TDesC16 const & Usif::CLocalizablePropertyEntry::StrValue(void) const
+	?NewL@CLocalizedSoftwareTypeName@Usif@@SAPAV12@AAVRReadStream@@@Z @ 103 NONAME ; class Usif::CLocalizedSoftwareTypeName * Usif::CLocalizedSoftwareTypeName::NewL(class RReadStream &)
+	?NewLC@CVersionedComponentId@Usif@@SAPAV12@ABVCGlobalComponentId@2@PBVTDesC16@@1@Z @ 104 NONAME ; class Usif::CVersionedComponentId * Usif::CVersionedComponentId::NewLC(class Usif::CGlobalComponentId const &, class TDesC16 const *, class TDesC16 const *)
+	?Connect@RSoftwareComponentRegistry@Usif@@QAEHXZ @ 105 NONAME ; int Usif::RSoftwareComponentRegistry::Connect(void)
+	?GetComponentIdsL@RSoftwareComponentRegistry@Usif@@QBEXAAV?$RArray@H@@PAVCComponentFilter@2@@Z @ 106 NONAME ; void Usif::RSoftwareComponentRegistry::GetComponentIdsL(class RArray<int> &, class Usif::CComponentFilter *) const
+	?NewL@CGlobalComponentId@Usif@@SAPAV12@ABVTDesC16@@0@Z @ 107 NONAME ; class Usif::CGlobalComponentId * Usif::CGlobalComponentId::NewL(class TDesC16 const &, class TDesC16 const &)
+	?NewL@CLocalizableComponentInfo@Usif@@SAPAV12@ABVTDesC16@@0W4TLanguage@@@Z @ 108 NONAME ; class Usif::CLocalizableComponentInfo * Usif::CLocalizableComponentInfo::NewL(class TDesC16 const &, class TDesC16 const &, enum TLanguage)
+	?Close@RSoftwareComponentRegistryView@Usif@@QAEXXZ @ 109 NONAME ; void Usif::RSoftwareComponentRegistryView::Close(void)
+	??1CBinaryPropertyEntry@Usif@@UAE@XZ @ 110 NONAME ; Usif::CBinaryPropertyEntry::~CBinaryPropertyEntry(void)
+	?AddComponentL@RSoftwareComponentRegistry@Usif@@QAEHABV?$RPointerArray@VCLocalizableComponentInfo@Usif@@@@ABVTDesC16@@PBV4@W4TScrComponentOperationType@2@@Z @ 111 NONAME ; int Usif::RSoftwareComponentRegistry::AddComponentL(class RPointerArray<class Usif::CLocalizableComponentInfo> const &, class TDesC16 const &, class TDesC16 const *, enum Usif::TScrComponentOperationType)
+	?GetComponentL@RSoftwareComponentRegistry@Usif@@QBEPAVCComponentEntry@2@ABVTDesC16@@0W4TLanguage@@@Z @ 112 NONAME ; class Usif::CComponentEntry * Usif::RSoftwareComponentRegistry::GetComponentL(class TDesC16 const &, class TDesC16 const &, enum TLanguage) const
+	??0RSoftwareComponentRegistryFilesList@Usif@@QAE@XZ @ 113 NONAME ; Usif::RSoftwareComponentRegistryFilesList::RSoftwareComponentRegistryFilesList(void)
+	?GlobalId@CScrLogEntry@Usif@@QBEABVTDesC16@@XZ @ 114 NONAME ; class TDesC16 const & Usif::CScrLogEntry::GlobalId(void) const
+	?SetDrmProtected@CComponentFilter@Usif@@QAEXH@Z @ 115 NONAME ; void Usif::CComponentFilter::SetDrmProtected(int)
+	?GetPluginUidL@RSoftwareComponentRegistry@Usif@@QBE?AVTUid@@H@Z @ 116 NONAME ; class TUid Usif::RSoftwareComponentRegistry::GetPluginUidL(int) const
+	?SetScomoStateL@RSoftwareComponentRegistry@Usif@@QBEXHW4TScomoState@2@@Z @ 117 NONAME ; void Usif::RSoftwareComponentRegistry::SetScomoStateL(int, enum Usif::TScomoState) const
+	?IsComponentPresentL@RSoftwareComponentRegistry@Usif@@QBEHH@Z @ 118 NONAME ; int Usif::RSoftwareComponentRegistry::IsComponentPresentL(int) const
+	?Name@CComponentEntry@Usif@@QBEABVTDesC16@@XZ @ 119 NONAME ; class TDesC16 const & Usif::CComponentEntry::Name(void) const
+	?DeleteFilePropertyL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@0@Z @ 120 NONAME ; void Usif::RSoftwareComponentRegistry::DeleteFilePropertyL(int, class TDesC16 const &, class TDesC16 const &)
+	?InternalizeL@CScrLogEntry@Usif@@QAEXAAVRReadStream@@@Z @ 121 NONAME ; void Usif::CScrLogEntry::InternalizeL(class RReadStream &)
+	??1CIntPropertyEntry@Usif@@UAE@XZ @ 122 NONAME ; Usif::CIntPropertyEntry::~CIntPropertyEntry(void)
+	?AddPropertyL@CComponentFilter@Usif@@QAEXABVTDesC16@@0W4TLanguage@@W4TDbOperator@12@2@Z @ 123 NONAME ; void Usif::CComponentFilter::AddPropertyL(class TDesC16 const &, class TDesC16 const &, enum TLanguage, enum Usif::CComponentFilter::TDbOperator, enum Usif::CComponentFilter::TDbOperator)
+	?ExternalizeL@CComponentEntry@Usif@@QBEXAAVRWriteStream@@@Z @ 124 NONAME ; void Usif::CComponentEntry::ExternalizeL(class RWriteStream &) const
+	?DeleteComponentL@RSoftwareComponentRegistry@Usif@@QAEXH@Z @ 125 NONAME ; void Usif::RSoftwareComponentRegistry::DeleteComponentL(int)
+	?SoftwareTypeName@CGlobalComponentId@Usif@@QBEABVTDesC16@@XZ @ 126 NONAME ; class TDesC16 const & Usif::CGlobalComponentId::SoftwareTypeName(void) const
+	?NewL@CLocalizedSoftwareTypeName@Usif@@SAPAV12@ABVTDesC16@@W4TLanguage@@@Z @ 127 NONAME ; class Usif::CLocalizedSoftwareTypeName * Usif::CLocalizedSoftwareTypeName::NewL(class TDesC16 const &, enum TLanguage)
+	?NewL@CIntPropertyEntry@Usif@@SAPAV12@ABVTDesC16@@_J@Z @ 128 NONAME ; class Usif::CIntPropertyEntry * Usif::CIntPropertyEntry::NewL(class TDesC16 const &, long long)
+	?NameL@CLocalizedSoftwareTypeName@Usif@@QBEABVTDesC16@@XZ @ 129 NONAME ; class TDesC16 const & Usif::CLocalizedSoftwareTypeName::NameL(void) const
+	?NewL@CComponentEntry@Usif@@SAPAV12@XZ @ 130 NONAME ; class Usif::CComponentEntry * Usif::CComponentEntry::NewL(void)
+	?SetInstalledDrivesL@CComponentFilter@Usif@@QAEXABV?$TBuf8@$0BK@@@@Z @ 131 NONAME ; void Usif::CComponentFilter::SetInstalledDrivesL(class TBuf8<26> const &)
+	?ExternalizeL@CVersionedComponentId@Usif@@QBEXAAVRWriteStream@@@Z @ 132 NONAME ; void Usif::CVersionedComponentId::ExternalizeL(class RWriteStream &) const
+	?SetComponentPropertyL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@ABVTDesC8@@@Z @ 133 NONAME ; void Usif::RSoftwareComponentRegistry::SetComponentPropertyL(int, class TDesC16 const &, class TDesC8 const &)
+	?GetComponentPropertyL@RSoftwareComponentRegistry@Usif@@QBEPAVCPropertyEntry@2@HABVTDesC16@@W4TLanguage@@@Z @ 134 NONAME ; class Usif::CPropertyEntry * Usif::RSoftwareComponentRegistry::GetComponentPropertyL(int, class TDesC16 const &, enum TLanguage) const
+	?IsHidden@CComponentEntry@Usif@@QBEHXZ @ 135 NONAME ; int Usif::CComponentEntry::IsHidden(void) const
+	?NextFileL@RSoftwareComponentRegistryFilesList@Usif@@QBEPAVHBufC16@@XZ @ 136 NONAME ; class HBufC16 * Usif::RSoftwareComponentRegistryFilesList::NextFileL(void) const
+	?AddComponentL@RSoftwareComponentRegistry@Usif@@QAEHABVTDesC16@@00PBV3@W4TScrComponentOperationType@2@@Z @ 137 NONAME ; int Usif::RSoftwareComponentRegistry::AddComponentL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const *, enum Usif::TScrComponentOperationType)
+	?ComponentName@CScrLogEntry@Usif@@QBEABVTDesC16@@XZ @ 138 NONAME ; class TDesC16 const & Usif::CScrLogEntry::ComponentName(void) const
+	?InternalizeL@CComponentEntry@Usif@@QAEXAAVRReadStream@@@Z @ 139 NONAME ; void Usif::CComponentEntry::InternalizeL(class RReadStream &)
+	?ExternalizeL@CScrLogEntry@Usif@@QBEXAAVRWriteStream@@@Z @ 140 NONAME ; void Usif::CScrLogEntry::ExternalizeL(class RWriteStream &) const
+	?OpenViewL@RSoftwareComponentRegistryView@Usif@@QAEXABVRSoftwareComponentRegistry@2@PAVCComponentFilter@2@@Z @ 141 NONAME ; void Usif::RSoftwareComponentRegistryView::OpenViewL(class Usif::RSoftwareComponentRegistry const &, class Usif::CComponentFilter *)
+	?Version@CComponentEntry@Usif@@QBEABVTDesC16@@XZ @ 142 NONAME ; class TDesC16 const & Usif::CComponentEntry::Version(void) const
+	?NewLC@CScrLogEntry@Usif@@SAPAV12@AAVRReadStream@@@Z @ 143 NONAME ; class Usif::CScrLogEntry * Usif::CScrLogEntry::NewLC(class RReadStream &)
+	?SetIsComponentRemovableL@RSoftwareComponentRegistry@Usif@@QAEXHH@Z @ 144 NONAME ; void Usif::RSoftwareComponentRegistry::SetIsComponentRemovableL(int, int)
+	?ConstructL@CLocalizableComponentInfo@Usif@@AAEXABVTDesC16@@0@Z @ 145 NONAME ; void Usif::CLocalizableComponentInfo::ConstructL(class TDesC16 const &, class TDesC16 const &)
+	?GetComponentFilesCountL@RSoftwareComponentRegistry@Usif@@QBEIH@Z @ 146 NONAME ; unsigned int Usif::RSoftwareComponentRegistry::GetComponentFilesCountL(int) const
+	?IsRemovable@CComponentEntry@Usif@@QBEHXZ @ 147 NONAME ; int Usif::CComponentEntry::IsRemovable(void) const
+	?NewL@CComponentFilter@Usif@@SAPAV12@XZ @ 148 NONAME ; class Usif::CComponentFilter * Usif::CComponentFilter::NewL(void)
+	?GlobalId@CComponentEntry@Usif@@QBEABVTDesC16@@XZ @ 149 NONAME ; class TDesC16 const & Usif::CComponentEntry::GlobalId(void) const
+	?IsMediaPresentL@RSoftwareComponentRegistry@Usif@@QBEHH@Z @ 150 NONAME ; int Usif::RSoftwareComponentRegistry::IsMediaPresentL(int) const
+	?Vendor@CComponentEntry@Usif@@QBEABVTDesC16@@XZ @ 151 NONAME ; class TDesC16 const & Usif::CComponentEntry::Vendor(void) const
+	?RegisterComponentFileL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@H@Z @ 152 NONAME ; void Usif::RSoftwareComponentRegistry::RegisterComponentFileL(int, class TDesC16 const &, TBool)
+	?NewLC@CVersionedComponentId@Usif@@SAPAV12@XZ @ 153 NONAME ; class Usif::CVersionedComponentId * Usif::CVersionedComponentId::NewLC(void)
+	?GetFilePropertyL@RSoftwareComponentRegistry@Usif@@QBEPAVCPropertyEntry@2@HABVTDesC16@@0@Z @ 154 NONAME ; class Usif::CPropertyEntry * Usif::RSoftwareComponentRegistry::GetFilePropertyL(int, class TDesC16 const &, class TDesC16 const &) const
+	?VersionFrom@CVersionedComponentId@Usif@@QBEPBVTDesC16@@XZ @ 155 NONAME ; class TDesC16 const * Usif::CVersionedComponentId::VersionFrom(void) const
+	?GetComponentL@RSoftwareComponentRegistry@Usif@@QBEHHAAVCComponentEntry@2@W4TLanguage@@@Z @ 156 NONAME ; int Usif::RSoftwareComponentRegistry::GetComponentL(int, class Usif::CComponentEntry &, enum TLanguage) const
+	??1CLocalizablePropertyEntry@Usif@@UAE@XZ @ 157 NONAME ; Usif::CLocalizablePropertyEntry::~CLocalizablePropertyEntry(void)
+	?DeleteComponentDependencyL@RSoftwareComponentRegistry@Usif@@QAEXABVCGlobalComponentId@2@0@Z @ 158 NONAME ; void Usif::RSoftwareComponentRegistry::DeleteComponentDependencyL(class Usif::CGlobalComponentId const &, class Usif::CGlobalComponentId const &)
+	?NewLC@CLocalizablePropertyEntry@Usif@@SAPAV12@ABVTDesC16@@0W4TLanguage@@@Z @ 159 NONAME ; class Usif::CLocalizablePropertyEntry * Usif::CLocalizablePropertyEntry::NewLC(class TDesC16 const &, class TDesC16 const &, enum TLanguage)
+	?Int64Value@CIntPropertyEntry@Usif@@QAE_JXZ @ 160 NONAME ; long long Usif::CIntPropertyEntry::Int64Value(void)
+	?NewLC@CComponentEntry@Usif@@SAPAV12@XZ @ 161 NONAME ; class Usif::CComponentEntry * Usif::CComponentEntry::NewLC(void)
+	?NewLC@CLocalizableComponentInfo@Usif@@SAPAV12@ABVTDesC16@@0W4TLanguage@@@Z @ 162 NONAME ; class Usif::CLocalizableComponentInfo * Usif::CLocalizableComponentInfo::NewLC(class TDesC16 const &, class TDesC16 const &, enum TLanguage)
+	?GetFilePropertiesL@RSoftwareComponentRegistry@Usif@@QBEXHABVTDesC16@@AAV?$RPointerArray@VCPropertyEntry@Usif@@@@@Z @ 163 NONAME ; void Usif::RSoftwareComponentRegistry::GetFilePropertiesL(int, class TDesC16 const &, class RPointerArray<class Usif::CPropertyEntry> &) const
+	??0RSoftwareComponentRegistry@Usif@@QAE@XZ @ 164 NONAME ; Usif::RSoftwareComponentRegistry::RSoftwareComponentRegistry(void)
+	?NewL@CComponentEntry@Usif@@SAPAV12@ABHABVTDesC16@@111H_JABW4TScomoState@2@ABV?$TBuf8@$0BK@@@11HHHH@Z @ 165 NONAME ; class Usif::CComponentEntry * Usif::CComponentEntry::NewL(int const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, int, long long, enum Usif::TScomoState const &, class TBuf8<26> const &, class TDesC16 const &, class TDesC16 const &, int, int, int, int)
+	?SetNameL@CComponentFilter@Usif@@QAEXABVTDesC16@@@Z @ 166 NONAME ; void Usif::CComponentFilter::SetNameL(class TDesC16 const &)
+	?SetComponentVersionL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@@Z @ 167 NONAME ; void Usif::RSoftwareComponentRegistry::SetComponentVersionL(int, class TDesC16 const &)
+	?AddComponentDependencyL@RSoftwareComponentRegistry@Usif@@QAEXABVCVersionedComponentId@2@ABVCGlobalComponentId@2@@Z @ 168 NONAME ; void Usif::RSoftwareComponentRegistry::AddComponentDependencyL(class Usif::CVersionedComponentId const &, class Usif::CGlobalComponentId const &)
+	?NewLC@CGlobalComponentId@Usif@@SAPAV12@ABVTDesC16@@0@Z @ 169 NONAME ; class Usif::CGlobalComponentId * Usif::CGlobalComponentId::NewLC(class TDesC16 const &, class TDesC16 const &)
+	?SoftwareType@CComponentEntry@Usif@@QBEABVTDesC16@@XZ @ 170 NONAME ; class TDesC16 const & Usif::CComponentEntry::SoftwareType(void) const
+	?PropertyType@CIntPropertyEntry@Usif@@UBE?AW4TPropertyType@CPropertyEntry@2@XZ @ 171 NONAME ; enum Usif::CPropertyEntry::TPropertyType Usif::CIntPropertyEntry::PropertyType(void) const
+	?Close@RSoftwareComponentRegistryFilesList@Usif@@QAEXXZ @ 172 NONAME ; void Usif::RSoftwareComponentRegistryFilesList::Close(void)
+	?NextComponentL@RSoftwareComponentRegistryView@Usif@@QBEHAAVCComponentEntry@2@W4TLanguage@@@Z @ 173 NONAME ; int Usif::RSoftwareComponentRegistryView::NextComponentL(class Usif::CComponentEntry &, enum TLanguage) const
+	?GetComponentSupportedLocalesListL@RSoftwareComponentRegistry@Usif@@QBEXHAAV?$RArray@W4TLanguage@@@@@Z @ 174 NONAME ; void Usif::RSoftwareComponentRegistry::GetComponentSupportedLocalesListL(int, class RArray<enum TLanguage> &) const
+	?GetComponentLocalizedInfoL@RSoftwareComponentRegistry@Usif@@QBEXHAAV?$RPointerArray@VCLocalizableComponentInfo@Usif@@@@@Z @ 175 NONAME ; void Usif::RSoftwareComponentRegistry::GetComponentLocalizedInfoL(int, class RPointerArray<class Usif::CLocalizableComponentInfo> &) const
+	?Close@RApplicationRegistryView@Usif@@QAEXXZ @ 176 NONAME ; void Usif::RApplicationRegistryView::Close(void)
+	?NewL@CAppViewData@Usif@@SAPAV12@XZ @ 177 NONAME ; class Usif::CAppViewData * Usif::CAppViewData::NewL(void)
+	?NewLC@CApplicationRegistrationData@Usif@@SAPAV12@AAV?$RPointerArray@VHBufC16@@@@AAV?$RPointerArray@VCServiceInfo@Usif@@@@AAV?$RPointerArray@VCLocalizableAppInfo@Usif@@@@AAV?$RPointerArray@VCPropertyEntry@Usif@@@@VTUid@@ABVTDesC16@@@Z @ 178 NONAME ; class Usif::CApplicationRegistrationData * Usif::CApplicationRegistrationData::NewLC(class RPointerArray<class HBufC16> &, class RPointerArray<class Usif::CServiceInfo> &, class RPointerArray<class Usif::CLocalizableAppInfo> &, class RPointerArray<class Usif::CPropertyEntry> &, class TUid, class TDesC16 const &)
+	?AddEmbeddability@TEmbeddableFilter@Usif@@QAEXW4TAppEmbeddability@TApplicationCharacteristics@2@@Z @ 179 NONAME ; void Usif::TEmbeddableFilter::AddEmbeddability(enum Usif::TApplicationCharacteristics::TAppEmbeddability)
+	?GetApplicationLaunchersL@RSoftwareComponentRegistry@Usif@@QBEXAAV?$RPointerArray@VCLauncherExecutable@Usif@@@@@Z @ 180 NONAME ; void Usif::RSoftwareComponentRegistry::GetApplicationLaunchersL(class RPointerArray<class Usif::CLauncherExecutable> &) const
+	?NewL@COpaqueData@Usif@@SAPAV12@AAVTDesC8@@W4TLanguage@@@Z @ 181 NONAME ; class Usif::COpaqueData * Usif::COpaqueData::NewL(class TDesC8 &, enum TLanguage)
+	?TypeId@CLauncherExecutable@Usif@@QBEHXZ @ 182 NONAME ; int Usif::CLauncherExecutable::TypeId(void) const
+	?AppUid@CApplicationRegistrationData@Usif@@QBE?BVTUid@@XZ @ 183 NONAME ; class TUid const Usif::CApplicationRegistrationData::AppUid(void) const
+	?OpenViewL@RApplicationInfoView@Usif@@QAEXABVRSoftwareComponentRegistry@2@PAVCAppInfoFilter@2@W4TLanguage@@@Z @ 184 NONAME ; void Usif::RApplicationInfoView::OpenViewL(class Usif::RSoftwareComponentRegistry const &, class Usif::CAppInfoFilter *, enum TLanguage)
+	?Caption@TAppRegInfo@Usif@@QBE?AV?$TBuf@$0BAA@@@XZ @ 185 NONAME ; class TBuf<256> Usif::TAppRegInfo::Caption(void) const
+	?SetAppUidForServiceInfo@CAppServiceInfoFilter@Usif@@QAEXVTUid@@@Z @ 186 NONAME ; void Usif::CAppServiceInfoFilter::SetAppUidForServiceInfo(class TUid)
+	?NewL@CServiceInfo@Usif@@SAPAV12@AAVRReadStream@@@Z @ 187 NONAME ; class Usif::CServiceInfo * Usif::CServiceInfo::NewL(class RReadStream &)
+	?ExternalizeL@CCaptionAndIconInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 188 NONAME ; void Usif::CCaptionAndIconInfo::ExternalizeL(class RWriteStream &) const
+	?NewL@CDataType@Usif@@SAPAV12@HABVTDesC16@@@Z @ 189 NONAME ; class Usif::CDataType * Usif::CDataType::NewL(int, class TDesC16 const &)
+	?NewL@CAppServiceInfoFilter@Usif@@SAPAV12@XZ @ 190 NONAME ; class Usif::CAppServiceInfoFilter * Usif::CAppServiceInfoFilter::NewL(void)
+	?ExternalizeL@CAppInfoFilter@Usif@@QBEXAAVRWriteStream@@@Z @ 191 NONAME ; void Usif::CAppInfoFilter::ExternalizeL(class RWriteStream &) const
+	?OwnedFileArray@CApplicationRegistrationData@Usif@@QBEABV?$RPointerArray@VHBufC16@@@@XZ @ 192 NONAME ; class RPointerArray<class HBufC16> const & Usif::CApplicationRegistrationData::OwnedFileArray(void) const
+	?NewL@CServiceInfo@Usif@@SAPAV12@VTUid@@AAV?$RPointerArray@VCOpaqueData@Usif@@@@AAV?$RPointerArray@VCDataType@Usif@@@@@Z @ 193 NONAME ; class Usif::CServiceInfo * Usif::CServiceInfo::NewL(class TUid, class RPointerArray<class Usif::COpaqueData> &, class RPointerArray<class Usif::CDataType> &)
+	?ExternalizeL@CAppServiceInfoFilter@Usif@@QBEXAAVRWriteStream@@@Z @ 194 NONAME ; void Usif::CAppServiceInfoFilter::ExternalizeL(class RWriteStream &) const
+	??0TAppRegInfo@Usif@@QAE@XZ @ 195 NONAME ; Usif::TAppRegInfo::TAppRegInfo(void)
+	?Type@CDataType@Usif@@QBEABVTDesC16@@XZ @ 196 NONAME ; class TDesC16 const & Usif::CDataType::Type(void) const
+	?ViewDataList@CLocalizableAppInfo@Usif@@QBEABV?$RPointerArray@VCAppViewData@Usif@@@@XZ @ 197 NONAME ; class RPointerArray<class Usif::CAppViewData> const & Usif::CLocalizableAppInfo::ViewDataList(void) const
+	?DataTypes@CServiceInfo@Usif@@QBEABV?$RPointerArray@VCDataType@Usif@@@@XZ @ 198 NONAME ; class RPointerArray<class Usif::CDataType> const & Usif::CServiceInfo::DataTypes(void) const
+	?NewL@CAppViewData@Usif@@SAPAV12@AAVRReadStream@@@Z @ 199 NONAME ; class Usif::CAppViewData * Usif::CAppViewData::NewL(class RReadStream &)
+	?NewL@CDataType@Usif@@SAPAV12@AAVRReadStream@@@Z @ 200 NONAME ; class Usif::CDataType * Usif::CDataType::NewL(class RReadStream &)
+	?TypeId@CApplicationRegistrationData@Usif@@QBEHXZ @ 201 NONAME ; int Usif::CApplicationRegistrationData::TypeId(void) const
+	?SetCapabilityAttributeMaskAndValue@CAppInfoFilter@Usif@@QAEXHH@Z @ 202 NONAME ; void Usif::CAppInfoFilter::SetCapabilityAttributeMaskAndValue(int, int)
+	??0TAppRegInfo@Usif@@QAE@VTUid@@ABV?$TBuf@$0BAA@@@1@Z @ 203 NONAME ; Usif::TAppRegInfo::TAppRegInfo(class TUid, class TBuf<256> const &, class TBuf<256> const &)
+	?SetServerApps@CAppInfoFilter@Usif@@QAEXVTUid@@H@Z @ 204 NONAME ; void Usif::CAppInfoFilter::SetServerApps(class TUid, int)
+	?MatchesEmbeddability@TEmbeddableFilter@Usif@@QBEHW4TAppEmbeddability@TApplicationCharacteristics@2@@Z @ 205 NONAME ; int Usif::TEmbeddableFilter::MatchesEmbeddability(enum Usif::TApplicationCharacteristics::TAppEmbeddability) const
+	?CaptionAndIconInfo@CLocalizableAppInfo@Usif@@QBEPBVCCaptionAndIconInfo@2@XZ @ 206 NONAME ; class Usif::CCaptionAndIconInfo const * Usif::CLocalizableAppInfo::CaptionAndIconInfo(void) const
+	?Close@RRegistrationInfoForApplication@Usif@@QAEXXZ @ 207 NONAME ; void Usif::RRegistrationInfoForApplication::Close(void)
+	?NewL@CApplicationRegistrationData@Usif@@SAPAV12@AAV?$RPointerArray@VHBufC16@@@@AAV?$RPointerArray@VCServiceInfo@Usif@@@@AAV?$RPointerArray@VCLocalizableAppInfo@Usif@@@@AAV?$RPointerArray@VCPropertyEntry@Usif@@@@AAV?$RPointerArray@VCOpaqueData@Usif@@@@VTUid@@ABVTDesC16@@AAVTApplicationCharacteristics@2@HH@Z @ 208 NONAME ; class Usif::CApplicationRegistrationData * Usif::CApplicationRegistrationData::NewL(class RPointerArray<class HBufC16> &, class RPointerArray<class Usif::CServiceInfo> &, class RPointerArray<class Usif::CLocalizableAppInfo> &, class RPointerArray<class Usif::CPropertyEntry> &, class RPointerArray<class Usif::COpaqueData> &, class TUid, class TDesC16 const &, class Usif::TApplicationCharacteristics &, int, int)
+	?ApplicationLanguage@CLocalizableAppInfo@Usif@@QBE?AW4TLanguage@@XZ @ 209 NONAME ; enum TLanguage Usif::CLocalizableAppInfo::ApplicationLanguage(void) const
+	?AppProperties@CApplicationRegistrationData@Usif@@QBEABV?$RPointerArray@VCPropertyEntry@Usif@@@@XZ @ 210 NONAME ; class RPointerArray<class Usif::CPropertyEntry> const & Usif::CApplicationRegistrationData::AppProperties(void) const
+	?NewL@CLocalizableAppInfo@Usif@@SAPAV12@AAVRReadStream@@@Z @ 211 NONAME ; class Usif::CLocalizableAppInfo * Usif::CLocalizableAppInfo::NewL(class RReadStream &)
+	?InternalizeL@CServiceInfo@Usif@@QAEXAAVRReadStream@@@Z @ 212 NONAME ; void Usif::CServiceInfo::InternalizeL(class RReadStream &)
+	?DefaultScreenNumber@CApplicationRegistrationData@Usif@@QBEHXZ @ 213 NONAME ; int Usif::CApplicationRegistrationData::DefaultScreenNumber(void) const
+	?InternalizeL@CAppViewData@Usif@@QAEXAAVRReadStream@@@Z @ 214 NONAME ; void Usif::CAppViewData::InternalizeL(class RReadStream &)
+	?LocalizableAppInfoList@CApplicationRegistrationData@Usif@@QBEABV?$RPointerArray@VCLocalizableAppInfo@Usif@@@@XZ @ 215 NONAME ; class RPointerArray<class Usif::CLocalizableAppInfo> const & Usif::CApplicationRegistrationData::LocalizableAppInfoList(void) const
+	?NewL@COpaqueData@Usif@@SAPAV12@XZ @ 216 NONAME ; class Usif::COpaqueData * Usif::COpaqueData::NewL(void)
+	?NewL@CServiceInfo@Usif@@SAPAV12@XZ @ 217 NONAME ; class Usif::CServiceInfo * Usif::CServiceInfo::NewL(void)
+	?NumOfAppIcons@CCaptionAndIconInfo@Usif@@QBEHXZ @ 218 NONAME ; int Usif::CCaptionAndIconInfo::NumOfAppIcons(void) const
+	?NewLC@CAppViewData@Usif@@SAPAV12@XZ @ 219 NONAME ; class Usif::CAppViewData * Usif::CAppViewData::NewLC(void)
+	?InternalizeL@CDataType@Usif@@QAEXAAVRReadStream@@@Z @ 220 NONAME ; void Usif::CDataType::InternalizeL(class RReadStream &)
+	?InternalizeL@CLauncherExecutable@Usif@@QAEXAAVRReadStream@@@Z @ 221 NONAME ; void Usif::CLauncherExecutable::InternalizeL(class RReadStream &)
+	?Uid@TAppRegInfo@Usif@@QBE?AVTUid@@XZ @ 222 NONAME ; class TUid Usif::TAppRegInfo::Uid(void) const
+	?NewL@CLocalizableAppInfo@Usif@@SAPAV12@ABVTDesC16@@W4TLanguage@@0PAVCCaptionAndIconInfo@2@AAV?$RPointerArray@VCAppViewData@Usif@@@@@Z @ 223 NONAME ; class Usif::CLocalizableAppInfo * Usif::CLocalizableAppInfo::NewL(class TDesC16 const &, enum TLanguage, class TDesC16 const &, class Usif::CCaptionAndIconInfo *, class RPointerArray<class Usif::CAppViewData> &)
+	?ScreenMode@CAppViewData@Usif@@QBEHXZ @ 224 NONAME ; int Usif::CAppViewData::ScreenMode(void) const
+	??0RApplicationInfoView@Usif@@QAE@XZ @ 225 NONAME ; Usif::RApplicationInfoView::RApplicationInfoView(void)
+	?OpenViewL@RApplicationRegistryView@Usif@@QAEXABVRSoftwareComponentRegistry@2@W4TLanguage@@@Z @ 226 NONAME ; void Usif::RApplicationRegistryView::OpenViewL(class Usif::RSoftwareComponentRegistry const &, enum TLanguage)
+	?NewLC@CAppInfoFilter@Usif@@SAPAV12@XZ @ 227 NONAME ; class Usif::CAppInfoFilter * Usif::CAppInfoFilter::NewLC(void)
+	?GetComponentIdForAppL@RSoftwareComponentRegistry@Usif@@QBEHVTUid@@@Z @ 228 NONAME ; int Usif::RSoftwareComponentRegistry::GetComponentIdForAppL(class TUid) const
+	?NewLC@CDataType@Usif@@SAPAV12@HABVTDesC16@@@Z @ 229 NONAME ; class Usif::CDataType * Usif::CDataType::NewLC(int, class TDesC16 const &)
+	?NewL@COpaqueData@Usif@@SAPAV12@AAVRReadStream@@@Z @ 230 NONAME ; class Usif::COpaqueData * Usif::COpaqueData::NewL(class RReadStream &)
+	?NewL@CAppViewData@Usif@@SAPAV12@VTUid@@HPAVCCaptionAndIconInfo@2@@Z @ 231 NONAME ; class Usif::CAppViewData * Usif::CAppViewData::NewL(class TUid, int, class Usif::CCaptionAndIconInfo *)
+	?NewL@CApplicationRegistrationData@Usif@@SAPAV12@AAV?$RPointerArray@VHBufC16@@@@AAV?$RPointerArray@VCServiceInfo@Usif@@@@AAV?$RPointerArray@VCLocalizableAppInfo@Usif@@@@AAV?$RPointerArray@VCPropertyEntry@Usif@@@@VTUid@@ABVTDesC16@@@Z @ 232 NONAME ; class Usif::CApplicationRegistrationData * Usif::CApplicationRegistrationData::NewL(class RPointerArray<class HBufC16> &, class RPointerArray<class Usif::CServiceInfo> &, class RPointerArray<class Usif::CLocalizableAppInfo> &, class RPointerArray<class Usif::CPropertyEntry> &, class TUid, class TDesC16 const &)
+	?Embeddability@CApplicationRegistrationData@Usif@@QBE?AW4TAppEmbeddability@TApplicationCharacteristics@2@XZ @ 233 NONAME ; enum Usif::TApplicationCharacteristics::TAppEmbeddability Usif::CApplicationRegistrationData::Embeddability(void) const
+	?ShortCaption@CLocalizableAppInfo@Usif@@QBEABVTDesC16@@XZ @ 234 NONAME ; class TDesC16 const & Usif::CLocalizableAppInfo::ShortCaption(void) const
+	?IconFileName@CCaptionAndIconInfo@Usif@@QBEABVTDesC16@@XZ @ 235 NONAME ; class TDesC16 const & Usif::CCaptionAndIconInfo::IconFileName(void) const
+	?OpenL@RApplicationRegistrationInfo@Usif@@QAEXABVRSoftwareComponentRegistry@2@@Z @ 236 NONAME ; void Usif::RApplicationRegistrationInfo::OpenL(class Usif::RSoftwareComponentRegistry const &)
+	?NewLC@CAppServiceInfoFilter@Usif@@SAPAV12@XZ @ 237 NONAME ; class Usif::CAppServiceInfoFilter * Usif::CAppServiceInfoFilter::NewLC(void)
+	?NewL@CAppInfoFilter@Usif@@SAPAV12@XZ @ 238 NONAME ; class Usif::CAppInfoFilter * Usif::CAppInfoFilter::NewL(void)
+	?NewLC@COpaqueData@Usif@@SAPAV12@XZ @ 239 NONAME ; class Usif::COpaqueData * Usif::COpaqueData::NewLC(void)
+	??0TAppRegInfo@Usif@@QAE@VTUid@@ABV?$TBuf@$0BAA@@@11@Z @ 240 NONAME ; Usif::TAppRegInfo::TAppRegInfo(class TUid, class TBuf<256> const &, class TBuf<256> const &, class TBuf<256> const &)
+	?InternalizeL@CApplicationRegistrationData@Usif@@QAEXAAVRReadStream@@@Z @ 241 NONAME ; void Usif::CApplicationRegistrationData::InternalizeL(class RReadStream &)
+	?Connect@RScrInternalClient@Usif@@QAEHXZ @ 242 NONAME ; int Usif::RScrInternalClient::Connect(void)
+	?Hidden@CApplicationRegistrationData@Usif@@QBEHXZ @ 243 NONAME ; int Usif::CApplicationRegistrationData::Hidden(void) const
+	?NewLC@CLocalizableAppInfo@Usif@@SAPAV12@ABVTDesC16@@W4TLanguage@@0PAVCCaptionAndIconInfo@2@AAV?$RPointerArray@VCAppViewData@Usif@@@@@Z @ 244 NONAME ; class Usif::CLocalizableAppInfo * Usif::CLocalizableAppInfo::NewLC(class TDesC16 const &, enum TLanguage, class TDesC16 const &, class Usif::CCaptionAndIconInfo *, class RPointerArray<class Usif::CAppViewData> &)
+	?NewLC@CLauncherExecutable@Usif@@SAPAV12@XZ @ 245 NONAME ; class Usif::CLauncherExecutable * Usif::CLauncherExecutable::NewLC(void)
+	?InternalizeL@CCaptionAndIconInfo@Usif@@QAEXAAVRReadStream@@@Z @ 246 NONAME ; void Usif::CCaptionAndIconInfo::InternalizeL(class RReadStream &)
+	?GetAppServicesUidsL@RRegistrationInfoForApplication@Usif@@QBEXAAV?$RArray@VTUid@@@@@Z @ 247 NONAME ; void Usif::RRegistrationInfoForApplication::GetAppServicesUidsL(class RArray<class TUid> &) const
+	?Close@RApplicationRegistrationInfo@Usif@@QAEXXZ @ 248 NONAME ; void Usif::RApplicationRegistrationInfo::Close(void)
+	?NewLC@CDataType@Usif@@SAPAV12@XZ @ 249 NONAME ; class Usif::CDataType * Usif::CDataType::NewLC(void)
+	?SetServiceUidAndDatatTypeForServiceImplementationsL@CAppServiceInfoFilter@Usif@@QAEXVTUid@@ABVTDesC16@@@Z @ 250 NONAME ; void Usif::CAppServiceInfoFilter::SetServiceUidAndDatatTypeForServiceImplementationsL(class TUid, class TDesC16 const &)
+	?NumberOfOwnDefinedIconsL@RRegistrationInfoForApplication@Usif@@QBEHXZ @ 251 NONAME ; int Usif::RRegistrationInfoForApplication::NumberOfOwnDefinedIconsL(void) const
+	?NewL@CLauncherExecutable@Usif@@SAPAV12@XZ @ 252 NONAME ; class Usif::CLauncherExecutable * Usif::CLauncherExecutable::NewL(void)
+	?SetAllApps@CAppInfoFilter@Usif@@QAEXXZ @ 253 NONAME ; void Usif::CAppInfoFilter::SetAllApps(void)
+	??0TApplicationCharacteristics@Usif@@QAE@XZ @ 254 NONAME ; Usif::TApplicationCharacteristics::TApplicationCharacteristics(void)
+	?NewLC@CServiceInfo@Usif@@SAPAV12@XZ @ 255 NONAME ; class Usif::CServiceInfo * Usif::CServiceInfo::NewLC(void)
+	?NewLC@CServiceInfo@Usif@@SAPAV12@VTUid@@AAV?$RPointerArray@VCOpaqueData@Usif@@@@AAV?$RPointerArray@VCDataType@Usif@@@@@Z @ 256 NONAME ; class Usif::CServiceInfo * Usif::CServiceInfo::NewLC(class TUid, class RPointerArray<class Usif::COpaqueData> &, class RPointerArray<class Usif::CDataType> &)
+	?SetEmbeddabilityFilter@CAppInfoFilter@Usif@@QAEXAAVTEmbeddableFilter@2@@Z @ 257 NONAME ; void Usif::CAppInfoFilter::SetEmbeddabilityFilter(class Usif::TEmbeddableFilter &)
+	?Close@RScrInternalClient@Usif@@QAEXXZ @ 258 NONAME ; void Usif::RScrInternalClient::Close(void)
+	?GetNextApplicationRegistrationInfoL@RApplicationRegistryView@Usif@@QBEXHAAV?$RPointerArray@VCApplicationRegistrationData@Usif@@@@@Z @ 259 NONAME ; void Usif::RApplicationRegistryView::GetNextApplicationRegistrationInfoL(int, class RPointerArray<class Usif::CApplicationRegistrationData> &) const
+	??0RRegistrationInfoForApplication@Usif@@QAE@XZ @ 260 NONAME ; Usif::RRegistrationInfoForApplication::RRegistrationInfoForApplication(void)
+	?NewL@CLauncherExecutable@Usif@@SAPAV12@AAVRReadStream@@@Z @ 261 NONAME ; class Usif::CLauncherExecutable * Usif::CLauncherExecutable::NewL(class RReadStream &)
+	?GroupName@CLocalizableAppInfo@Usif@@QBEABVTDesC16@@XZ @ 262 NONAME ; class TDesC16 const & Usif::CLocalizableAppInfo::GroupName(void) const
+	?OpaqueData@COpaqueData@Usif@@QAEAAVHBufC8@@XZ @ 263 NONAME ; class HBufC8 & Usif::COpaqueData::OpaqueData(void)
+	?GetAppUidsForComponentL@RSoftwareComponentRegistry@Usif@@QBEXHAAV?$RArray@VTUid@@@@@Z @ 264 NONAME ; void Usif::RSoftwareComponentRegistry::GetAppUidsForComponentL(int, class RArray<class TUid> &) const
+	?GetAppForDataTypeAndServiceL@RApplicationRegistrationInfo@Usif@@QBE?AVTUid@@ABVTDesC16@@V3@@Z @ 265 NONAME ; class TUid Usif::RApplicationRegistrationInfo::GetAppForDataTypeAndServiceL(class TDesC16 const &, class TUid) const
+	?ExternalizeL@TApplicationCharacteristics@Usif@@QBEXAAVRWriteStream@@@Z @ 266 NONAME ; void Usif::TApplicationCharacteristics::ExternalizeL(class RWriteStream &) const
+	?SetAppUidAndServiceUidForOpaqueData@CAppServiceInfoFilter@Usif@@QAEXVTUid@@0@Z @ 267 NONAME ; void Usif::CAppServiceInfoFilter::SetAppUidAndServiceUidForOpaqueData(class TUid, class TUid)
+	?DeleteApplicationEntryL@RSoftwareComponentRegistry@Usif@@QAEXVTUid@@@Z @ 268 NONAME ; void Usif::RSoftwareComponentRegistry::DeleteApplicationEntryL(class TUid)
+	?ExternalizeL@CLauncherExecutable@Usif@@QBEXAAVRWriteStream@@@Z @ 269 NONAME ; void Usif::CLauncherExecutable::ExternalizeL(class RWriteStream &) const
+	?ExternalizeL@COpaqueData@Usif@@QBEXAAVRWriteStream@@@Z @ 270 NONAME ; void Usif::COpaqueData::ExternalizeL(class RWriteStream &) const
+	?NewFile@CApplicationRegistrationData@Usif@@QBEHXZ @ 271 NONAME ; int Usif::CApplicationRegistrationData::NewFile(void) const
+	??0RApplicationRegistrationInfo@Usif@@QAE@XZ @ 272 NONAME ; Usif::RApplicationRegistrationInfo::RApplicationRegistrationInfo(void)
+	?NewLC@COpaqueData@Usif@@SAPAV12@AAVTDesC8@@W4TLanguage@@@Z @ 273 NONAME ; class Usif::COpaqueData * Usif::COpaqueData::NewLC(class TDesC8 &, enum TLanguage)
+	?AddApplicationEntryL@RSoftwareComponentRegistry@Usif@@QAEXHABVCApplicationRegistrationData@2@@Z @ 274 NONAME ; void Usif::RSoftwareComponentRegistry::AddApplicationEntryL(int, class Usif::CApplicationRegistrationData const &)
+	?NewLC@CApplicationRegistrationData@Usif@@SAPAV12@XZ @ 275 NONAME ; class Usif::CApplicationRegistrationData * Usif::CApplicationRegistrationData::NewLC(void)
+	?Uid@CAppViewData@Usif@@QBE?BVTUid@@XZ @ 276 NONAME ; class TUid const Usif::CAppViewData::Uid(void) const
+	?FullName@TAppRegInfo@Usif@@QBE?AV?$TBuf@$0BAA@@@XZ @ 277 NONAME ; class TBuf<256> Usif::TAppRegInfo::FullName(void) const
+	?AppFile@CApplicationRegistrationData@Usif@@QBEABVTDesC16@@XZ @ 278 NONAME ; class TDesC16 const & Usif::CApplicationRegistrationData::AppFile(void) const
+	?GenerateNewAppUidL@RScrInternalClient@Usif@@QBE?AVTUid@@XZ @ 279 NONAME ; class TUid Usif::RScrInternalClient::GenerateNewAppUidL(void) const
+	?InternalizeL@CLocalizableAppInfo@Usif@@QAEXAAVRReadStream@@@Z @ 280 NONAME ; void Usif::CLocalizableAppInfo::InternalizeL(class RReadStream &)
+	?SetEmbeddableApps@CAppInfoFilter@Usif@@QAEXH@Z @ 281 NONAME ; void Usif::CAppInfoFilter::SetEmbeddableApps(int)
+	?NewL@CAppServiceInfoFilter@Usif@@SAPAV12@AAVRReadStream@@@Z @ 282 NONAME ; class Usif::CAppServiceInfoFilter * Usif::CAppServiceInfoFilter::NewL(class RReadStream &)
+	?OpaqueData@CServiceInfo@Usif@@QBEABV?$RPointerArray@VCOpaqueData@Usif@@@@XZ @ 283 NONAME ; class RPointerArray<class Usif::COpaqueData> const & Usif::CServiceInfo::OpaqueData(void) const
+	?InternalizeL@COpaqueData@Usif@@QAEXAAVRReadStream@@@Z @ 284 NONAME ; void Usif::COpaqueData::InternalizeL(class RReadStream &)
+	?AppOpaqueData@CApplicationRegistrationData@Usif@@QBEABV?$RPointerArray@VCOpaqueData@Usif@@@@XZ @ 285 NONAME ; class RPointerArray<class Usif::COpaqueData> const & Usif::CApplicationRegistrationData::AppOpaqueData(void) const
+	?ApplicationLanguageL@RRegistrationInfoForApplication@Usif@@QBE?AW4TLanguage@@XZ @ 286 NONAME ; enum TLanguage Usif::RRegistrationInfoForApplication::ApplicationLanguageL(void) const
+	?ServiceArray@CApplicationRegistrationData@Usif@@QBEABV?$RPointerArray@VCServiceInfo@Usif@@@@XZ @ 287 NONAME ; class RPointerArray<class Usif::CServiceInfo> const & Usif::CApplicationRegistrationData::ServiceArray(void) const
+	?CaptionAndIconInfo@CAppViewData@Usif@@QBEPBVCCaptionAndIconInfo@2@XZ @ 288 NONAME ; class Usif::CCaptionAndIconInfo const * Usif::CAppViewData::CaptionAndIconInfo(void) const
+	?ExternalizeL@CServiceInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 289 NONAME ; void Usif::CServiceInfo::ExternalizeL(class RWriteStream &) const
+	?SetAllApps@CAppInfoFilter@Usif@@QAEXH@Z @ 290 NONAME ; void Usif::CAppInfoFilter::SetAllApps(int)
+	?NewLC@CLauncherExecutable@Usif@@SAPAV12@HABVTDesC16@@@Z @ 291 NONAME ; class Usif::CLauncherExecutable * Usif::CLauncherExecutable::NewLC(int, class TDesC16 const &)
+	??0RScrInternalClient@Usif@@QAE@XZ @ 292 NONAME ; Usif::RScrInternalClient::RScrInternalClient(void)
+	?ExternalizeL@CApplicationRegistrationData@Usif@@QBEXAAVRWriteStream@@@Z @ 293 NONAME ; void Usif::CApplicationRegistrationData::ExternalizeL(class RWriteStream &) const
+	?Priority@CDataType@Usif@@QBEHXZ @ 294 NONAME ; int Usif::CDataType::Priority(void) const
+	?GetAppInfoL@RApplicationRegistrationInfo@Usif@@QAEHVTUid@@AAVTAppRegInfo@2@W4TLanguage@@@Z @ 295 NONAME ; int Usif::RApplicationRegistrationInfo::GetAppInfoL(class TUid, class Usif::TAppRegInfo &, enum TLanguage)
+	?ExternalizeL@CDataType@Usif@@QBEXAAVRWriteStream@@@Z @ 296 NONAME ; void Usif::CDataType::ExternalizeL(class RWriteStream &) const
+	?GetAppForDataTypeL@RApplicationRegistrationInfo@Usif@@QBE?AVTUid@@ABVTDesC16@@@Z @ 297 NONAME ; class TUid Usif::RApplicationRegistrationInfo::GetAppForDataTypeL(class TDesC16 const &) const
+	?SetCapabilityAttributeMaskAndValue@CAppInfoFilter@Usif@@QAEXHHH@Z @ 298 NONAME ; void Usif::CAppInfoFilter::SetCapabilityAttributeMaskAndValue(int, int, int)
+	?NewL@CLauncherExecutable@Usif@@SAPAV12@HABVTDesC16@@@Z @ 299 NONAME ; class Usif::CLauncherExecutable * Usif::CLauncherExecutable::NewL(int, class TDesC16 const &)
+	?ExternalizeL@CLocalizableAppInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 300 NONAME ; void Usif::CLocalizableAppInfo::ExternalizeL(class RWriteStream &) const
+	?GetServiceInfoL@RApplicationRegistrationInfo@Usif@@QBEXPAVCAppServiceInfoFilter@2@AAV?$RPointerArray@VCServiceInfo@Usif@@@@W4TLanguage@@@Z @ 301 NONAME ; void Usif::RApplicationRegistrationInfo::GetServiceInfoL(class Usif::CAppServiceInfoFilter *, class RPointerArray<class Usif::CServiceInfo> &, enum TLanguage) const
+	?NewLC@CCaptionAndIconInfo@Usif@@SAPAV12@XZ @ 302 NONAME ; class Usif::CCaptionAndIconInfo * Usif::CCaptionAndIconInfo::NewLC(void)
+	?Uid@CServiceInfo@Usif@@QBE?BVTUid@@XZ @ 303 NONAME ; class TUid const Usif::CServiceInfo::Uid(void) const
+	?SetServerApps@CAppInfoFilter@Usif@@QAEXVTUid@@@Z @ 304 NONAME ; void Usif::CAppInfoFilter::SetServerApps(class TUid)
+	?NewLC@CLocalizableAppInfo@Usif@@SAPAV12@XZ @ 305 NONAME ; class Usif::CLocalizableAppInfo * Usif::CLocalizableAppInfo::NewLC(void)
+	?Language@COpaqueData@Usif@@QAE?AW4TLanguage@@XZ @ 306 NONAME ; enum TLanguage Usif::COpaqueData::Language(void)
+	?Close@RApplicationInfoView@Usif@@QAEXXZ @ 307 NONAME ; void Usif::RApplicationInfoView::Close(void)
+	?GroupName@CApplicationRegistrationData@Usif@@QBEABVTDesC16@@XZ @ 308 NONAME ; class TDesC16 const & Usif::CApplicationRegistrationData::GroupName(void) const
+	?NewLC@CApplicationRegistrationData@Usif@@SAPAV12@AAV?$RPointerArray@VHBufC16@@@@AAV?$RPointerArray@VCServiceInfo@Usif@@@@AAV?$RPointerArray@VCLocalizableAppInfo@Usif@@@@AAV?$RPointerArray@VCPropertyEntry@Usif@@@@AAV?$RPointerArray@VCOpaqueData@Usif@@@@VTUid@@ABVTDesC16@@AAVTApplicationCharacteristics@2@HH@Z @ 309 NONAME ; class Usif::CApplicationRegistrationData * Usif::CApplicationRegistrationData::NewLC(class RPointerArray<class HBufC16> &, class RPointerArray<class Usif::CServiceInfo> &, class RPointerArray<class Usif::CLocalizableAppInfo> &, class RPointerArray<class Usif::CPropertyEntry> &, class RPointerArray<class Usif::COpaqueData> &, class TUid, class TDesC16 const &, class Usif::TApplicationCharacteristics &, int, int)
+	?NewL@CApplicationRegistrationData@Usif@@SAPAV12@XZ @ 310 NONAME ; class Usif::CApplicationRegistrationData * Usif::CApplicationRegistrationData::NewL(void)
+	?NewL@CCaptionAndIconInfo@Usif@@SAPAV12@XZ @ 311 NONAME ; class Usif::CCaptionAndIconInfo * Usif::CCaptionAndIconInfo::NewL(void)
+	?NewL@CLocalizableAppInfo@Usif@@SAPAV12@XZ @ 312 NONAME ; class Usif::CLocalizableAppInfo * Usif::CLocalizableAppInfo::NewL(void)
+	?NewLC@CCaptionAndIconInfo@Usif@@SAPAV12@ABVTDesC16@@0H@Z @ 313 NONAME ; class Usif::CCaptionAndIconInfo * Usif::CCaptionAndIconInfo::NewLC(class TDesC16 const &, class TDesC16 const &, int)
+	?SetEmbeddabilityFilterWithScreenMode@CAppInfoFilter@Usif@@QAEXAAVTEmbeddableFilter@2@H@Z @ 314 NONAME ; void Usif::CAppInfoFilter::SetEmbeddabilityFilterWithScreenMode(class Usif::TEmbeddableFilter &, int)
+	?EmbeddabilityFlags@TEmbeddableFilter@Usif@@QBEIXZ @ 315 NONAME ; unsigned int Usif::TEmbeddableFilter::EmbeddabilityFlags(void) const
+	?GetAppCharacteristicsL@RRegistrationInfoForApplication@Usif@@QBEXAAVTApplicationCharacteristics@2@@Z @ 316 NONAME ; void Usif::RRegistrationInfoForApplication::GetAppCharacteristicsL(class Usif::TApplicationCharacteristics &) const
+	?Launch@CApplicationRegistrationData@Usif@@QBEHXZ @ 317 NONAME ; int Usif::CApplicationRegistrationData::Launch(void) const
+	?NewL@CCaptionAndIconInfo@Usif@@SAPAV12@ABVTDesC16@@0H@Z @ 318 NONAME ; class Usif::CCaptionAndIconInfo * Usif::CCaptionAndIconInfo::NewL(class TDesC16 const &, class TDesC16 const &, int)
+	?Launcher@CLauncherExecutable@Usif@@QBEABVTDesC16@@XZ @ 319 NONAME ; class TDesC16 const & Usif::CLauncherExecutable::Launcher(void) const
+	?NewL@CDataType@Usif@@SAPAV12@XZ @ 320 NONAME ; class Usif::CDataType * Usif::CDataType::NewL(void)
+	?SetEmbeddableApps@CAppInfoFilter@Usif@@QAEXXZ @ 321 NONAME ; void Usif::CAppInfoFilter::SetEmbeddableApps(void)
+	??0RApplicationRegistryView@Usif@@QAE@XZ @ 322 NONAME ; Usif::RApplicationRegistryView::RApplicationRegistryView(void)
+	?GetAppIconL@RRegistrationInfoForApplication@Usif@@QBEXAAPAVHBufC16@@@Z @ 323 NONAME ; void Usif::RRegistrationInfoForApplication::GetAppIconL(class HBufC16 * &) const
+	?ExternalizeL@TAppRegInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 324 NONAME ; void Usif::TAppRegInfo::ExternalizeL(class RWriteStream &) const
+	?ExternalizeL@CAppViewData@Usif@@QBEXAAVRWriteStream@@@Z @ 325 NONAME ; void Usif::CAppViewData::ExternalizeL(class RWriteStream &) const
+	?GetAppOwnedFilesL@RRegistrationInfoForApplication@Usif@@QBEXAAV?$RPointerArray@VHBufC16@@@@@Z @ 326 NONAME ; void Usif::RRegistrationInfoForApplication::GetAppOwnedFilesL(class RPointerArray<class HBufC16> &) const
+	?SetServiceUidForServiceImplementations@CAppServiceInfoFilter@Usif@@QAEXVTUid@@@Z @ 327 NONAME ; void Usif::CAppServiceInfoFilter::SetServiceUidForServiceImplementations(class TUid)
+	?Caption@CCaptionAndIconInfo@Usif@@QBEABVTDesC16@@XZ @ 328 NONAME ; class TDesC16 const & Usif::CCaptionAndIconInfo::Caption(void) const
+	?NewL@CAppInfoFilter@Usif@@SAPAV12@AAVRReadStream@@@Z @ 329 NONAME ; class Usif::CAppInfoFilter * Usif::CAppInfoFilter::NewL(class RReadStream &)
+	?NewL@CCaptionAndIconInfo@Usif@@SAPAV12@AAVRReadStream@@@Z @ 330 NONAME ; class Usif::CCaptionAndIconInfo * Usif::CCaptionAndIconInfo::NewL(class RReadStream &)
+	?GetNextAppInfoL@RApplicationInfoView@Usif@@QBEXHAAV?$RPointerArray@VTAppRegInfo@Usif@@@@@Z @ 331 NONAME ; void Usif::RApplicationInfoView::GetNextAppInfoL(int, class RPointerArray<class Usif::TAppRegInfo> &) const
+	??0TEmbeddableFilter@Usif@@QAE@XZ @ 332 NONAME ; Usif::TEmbeddableFilter::TEmbeddableFilter(void)
+	?OpenViewL@RApplicationRegistryView@Usif@@QAEXABVRSoftwareComponentRegistry@2@ABV?$RArray@VTUid@@@@W4TLanguage@@@Z @ 333 NONAME ; void Usif::RApplicationRegistryView::OpenViewL(class Usif::RSoftwareComponentRegistry const &, class RArray<class TUid> const &, enum TLanguage)
+	?GetAppViewIconL@RRegistrationInfoForApplication@Usif@@QBEXVTUid@@AAPAVHBufC16@@@Z @ 334 NONAME ; void Usif::RRegistrationInfoForApplication::GetAppViewIconL(class TUid, class HBufC16 * &) const
+	?DeleteApplicationEntriesL@RSoftwareComponentRegistry@Usif@@QAEXH@Z @ 335 NONAME ; void Usif::RSoftwareComponentRegistry::DeleteApplicationEntriesL(int)
+	?InternalizeL@TAppRegInfo@Usif@@QAEXAAVRReadStream@@@Z @ 336 NONAME ; void Usif::TAppRegInfo::InternalizeL(class RReadStream &)
+	?OpenL@RRegistrationInfoForApplication@Usif@@QAEXABVRSoftwareComponentRegistry@2@VTUid@@W4TLanguage@@@Z @ 337 NONAME ; void Usif::RRegistrationInfoForApplication::OpenL(class Usif::RSoftwareComponentRegistry const &, class TUid, enum TLanguage)
+	?DefaultScreenNumberL@RRegistrationInfoForApplication@Usif@@QBEHXZ @ 338 NONAME ; int Usif::RRegistrationInfoForApplication::DefaultScreenNumberL(void) const
+	?NewLC@CAppViewData@Usif@@SAPAV12@VTUid@@HPAVCCaptionAndIconInfo@2@@Z @ 339 NONAME ; class Usif::CAppViewData * Usif::CAppViewData::NewLC(class TUid, int, class Usif::CCaptionAndIconInfo *)
+	?GetAppViewsL@RRegistrationInfoForApplication@Usif@@QBEXAAV?$RPointerArray@VCAppViewData@Usif@@@@@Z @ 340 NONAME ; void Usif::RRegistrationInfoForApplication::GetAppViewsL(class RPointerArray<class Usif::CAppViewData> &) const
+	?Attributes@CApplicationRegistrationData@Usif@@QBEIXZ @ 341 NONAME ; unsigned int Usif::CApplicationRegistrationData::Attributes(void) const
+	?ShortCaption@TAppRegInfo@Usif@@QBE?AV?$TBuf@$0BAA@@@XZ @ 342 NONAME ; class TBuf<256> Usif::TAppRegInfo::ShortCaption(void) const
+	?NewL@CApplicationRegistrationData@Usif@@SAPAV12@AAVRReadStream@@@Z @ 343 NONAME ; class Usif::CApplicationRegistrationData * Usif::CApplicationRegistrationData::NewL(class RReadStream &)
+	?InternalizeL@TApplicationCharacteristics@Usif@@QAEXAAVRReadStream@@@Z @ 344 NONAME ; void Usif::TApplicationCharacteristics::InternalizeL(class RReadStream &)
+	??1CLauncherExecutable@Usif@@UAE@XZ @ 345 NONAME ; Usif::CLauncherExecutable::~CLauncherExecutable(void)
+	?ExternalizeL@CSoftwareTypeRegInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 346 NONAME ; void Usif::CSoftwareTypeRegInfo::ExternalizeL(class RWriteStream &) const
+	?SetMimeTypeL@CSoftwareTypeRegInfo@Usif@@QAEXABVTDesC16@@@Z @ 347 NONAME ; void Usif::CSoftwareTypeRegInfo::SetMimeTypeL(class TDesC16 const &)
+	?SetLauncherExecutableL@CSoftwareTypeRegInfo@Usif@@QAEXABVTDesC16@@@Z @ 348 NONAME ; void Usif::CSoftwareTypeRegInfo::SetLauncherExecutableL(class TDesC16 const &)
+	?NewL@CSoftwareTypeRegInfo@Usif@@SAPAV12@AAVRReadStream@@@Z @ 349 NONAME ; class Usif::CSoftwareTypeRegInfo * Usif::CSoftwareTypeRegInfo::NewL(class RReadStream &)
+	??1CSoftwareTypeRegInfo@Usif@@UAE@XZ @ 350 NONAME ; Usif::CSoftwareTypeRegInfo::~CSoftwareTypeRegInfo(void)
+	?NewL@CSoftwareTypeRegInfo@Usif@@SAPAV12@ABVTDesC16@@@Z @ 351 NONAME ; class Usif::CSoftwareTypeRegInfo * Usif::CSoftwareTypeRegInfo::NewL(class TDesC16 const &)
+	?SetLocalizedSoftwareTypeNameL@CSoftwareTypeRegInfo@Usif@@QAEXW4TLanguage@@ABVTDesC16@@@Z @ 352 NONAME ; void Usif::CSoftwareTypeRegInfo::SetLocalizedSoftwareTypeNameL(enum TLanguage, class TDesC16 const &)
+	?AccessMode@TCustomAccessInfo@Usif@@QBE?AW4TAccessMode@2@XZ @ 353 NONAME ; enum Usif::TAccessMode Usif::TCustomAccessInfo::AccessMode(void) const
+	?SecureId@TCustomAccessInfo@Usif@@QBE?AVTSecureId@@XZ @ 354 NONAME ; class TSecureId Usif::TCustomAccessInfo::SecureId(void) const
+	??0TCustomAccessInfo@Usif@@QAE@VTSecureId@@W4TAccessMode@1@@Z @ 355 NONAME ; Usif::TCustomAccessInfo::TCustomAccessInfo(class TSecureId, enum Usif::TAccessMode)
+	?NameOperator@TPropertyOperator@CComponentFilter@Usif@@QBE?AW4TDbOperator@23@XZ @ 356 NONAME ; enum Usif::CComponentFilter::TDbOperator Usif::CComponentFilter::TPropertyOperator::NameOperator(void) const
+	?ValueOperator@TPropertyOperator@CComponentFilter@Usif@@QBE?AW4TDbOperator@23@XZ @ 357 NONAME ; enum Usif::CComponentFilter::TDbOperator Usif::CComponentFilter::TPropertyOperator::ValueOperator(void) const
+	?InternalizeL@TPropertyOperator@CComponentFilter@Usif@@QAEXAAVRReadStream@@@Z @ 358 NONAME ; void Usif::CComponentFilter::TPropertyOperator::InternalizeL(class RReadStream &)
+	??0TPropertyOperator@CComponentFilter@Usif@@QAE@W4TDbOperator@12@0@Z @ 359 NONAME ; Usif::CComponentFilter::TPropertyOperator::TPropertyOperator(enum Usif::CComponentFilter::TDbOperator, enum Usif::CComponentFilter::TDbOperator)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/bwins/scrdatabaseu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+EXPORTS
+	??1CDatabase@Usif@@UAE@XZ @ 1 NONAME ; Usif::CDatabase::~CDatabase(void)
+	?BindInt64L@CStatement@Usif@@QAEXH_J@Z @ 2 NONAME ; void Usif::CStatement::BindInt64L(int, long long)
+	?ExecuteStatementL@CStatement@Usif@@QAEXXZ @ 3 NONAME ; void Usif::CStatement::ExecuteStatementL(void)
+	?PrepareStatementLC@CDatabase@Usif@@QAEPAVCStatement@2@ABVTDesC16@@@Z @ 4 NONAME ; class Usif::CStatement * Usif::CDatabase::PrepareStatementLC(class TDesC16 const &)
+	?NewL@CStatement@Usif@@CAPAV12@ABVCDatabase@2@PAVCStatementImplementation@2@@Z @ 5 NONAME ; class Usif::CStatement * Usif::CStatement::NewL(class Usif::CDatabase const &, class Usif::CStatementImplementation *)
+	?LastInsertedIdL@CDatabase@Usif@@QAEHXZ @ 6 NONAME ; int Usif::CDatabase::LastInsertedIdL(void)
+	?IntColumnL@CStatement@Usif@@QBEHH@Z @ 7 NONAME ; int Usif::CStatement::IntColumnL(int) const
+	?ResetL@CStatement@Usif@@QAEXXZ @ 8 NONAME ; void Usif::CStatement::ResetL(void)
+	?BinaryColumnL@CStatement@Usif@@QBE?AVTPtrC8@@H@Z @ 9 NONAME ; class TPtrC8 Usif::CStatement::BinaryColumnL(int) const
+	?BindStrL@CStatement@Usif@@QAEXHABVTDesC16@@@Z @ 10 NONAME ; void Usif::CStatement::BindStrL(int, class TDesC16 const &)
+	?ProcessNextRowL@CStatement@Usif@@QAEHXZ @ 11 NONAME ; int Usif::CStatement::ProcessNextRowL(void)
+	??1CStatement@Usif@@UAE@XZ @ 12 NONAME ; Usif::CStatement::~CStatement(void)
+	?BindBinaryL@CStatement@Usif@@QAEXHABVTDesC8@@@Z @ 13 NONAME ; void Usif::CStatement::BindBinaryL(int, class TDesC8 const &)
+	?IsFieldNullL@CStatement@Usif@@QBEHH@Z @ 14 NONAME ; int Usif::CStatement::IsFieldNullL(int) const
+	?StrColumnL@CStatement@Usif@@QBE?AVTPtrC16@@H@Z @ 15 NONAME ; class TPtrC16 Usif::CStatement::StrColumnL(int) const
+	?BindIntL@CStatement@Usif@@QAEXHH@Z @ 16 NONAME ; void Usif::CStatement::BindIntL(int, int)
+	?Int64ColumnL@CStatement@Usif@@QBE_JH@Z @ 17 NONAME ; long long Usif::CStatement::Int64ColumnL(int) const
+	?NewL@CDatabase@Usif@@SAPAV12@AAVRFile@@0@Z @ 18 NONAME ; class Usif::CDatabase * Usif::CDatabase::NewL(class RFile &, class RFile &)
+	?NewLC@CDatabase@Usif@@SAPAV12@AAVRFile@@0@Z @ 19 NONAME ; class Usif::CDatabase * Usif::CDatabase::NewLC(class RFile &, class RFile &)
+	?BindBinaryL@CStatement@Usif@@QAEXHABVTDesC8@@I@Z @ 20 NONAME ; void Usif::CStatement::BindBinaryL(int, class TDesC8 const &, unsigned int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/bwins/scrhelperclientu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+EXPORTS
+	?RetrieveFileHandlesL@RScrHelper@Usif@@QAEXAAVRFile@@0@Z @ 1 NONAME ; void Usif::RScrHelper::RetrieveFileHandlesL(class RFile &, class RFile &)
+	?Connect@RScrHelper@Usif@@QAEHXZ @ 2 NONAME ; int Usif::RScrHelper::Connect(void)
+	??0RScrHelper@Usif@@QAE@XZ @ 3 NONAME ; Usif::RScrHelper::RScrHelper(void)
+	?Close@RScrHelper@Usif@@QAEXXZ @ 4 NONAME ; void Usif::RScrHelper::Close(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/eabi/scrclientu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,401 @@
+EXPORTS
+	_ZN4Usif12CScrLogEntry12InternalizeLER11RReadStream @ 1 NONAME
+	_ZN4Usif12CScrLogEntry4NewLERK7TDesC16S3_S3_S3_NS_26TScrComponentOperationTypeE @ 2 NONAME
+	_ZN4Usif12CScrLogEntry5NewLCER11RReadStream @ 3 NONAME
+	_ZN4Usif12CScrLogEntry5NewLCERK7TDesC16S3_S3_S3_NS_26TScrComponentOperationTypeE @ 4 NONAME
+	_ZN4Usif14CPropertyEntry4NewLER11RReadStream @ 5 NONAME
+	_ZN4Usif14CPropertyEntryD0Ev @ 6 NONAME
+	_ZN4Usif14CPropertyEntryD1Ev @ 7 NONAME
+	_ZN4Usif14CPropertyEntryD2Ev @ 8 NONAME
+	_ZN4Usif15CComponentEntry12InternalizeLER11RReadStream @ 9 NONAME
+	_ZN4Usif15CComponentEntry4NewLER11RReadStream @ 10 NONAME
+	_ZN4Usif15CComponentEntry4NewLERKiRK7TDesC16S5_S5_S5_ixRKNS_11TScomoStateERK5TBuf8ILi26EES5_S5_iiii @ 11 NONAME
+	_ZN4Usif15CComponentEntry4NewLEv @ 12 NONAME
+	_ZN4Usif15CComponentEntry5NewLCERKiRK7TDesC16S5_S5_S5_ixRKNS_11TScomoStateERK5TBuf8ILi26EES5_S5_iiii @ 13 NONAME
+	_ZN4Usif15CComponentEntry5NewLCEv @ 14 NONAME
+	_ZN4Usif15CComponentEntryD0Ev @ 15 NONAME
+	_ZN4Usif15CComponentEntryD1Ev @ 16 NONAME
+	_ZN4Usif15CComponentEntryD2Ev @ 17 NONAME
+	_ZN4Usif16CComponentFilter10SetVendorLERK7TDesC16 @ 18 NONAME
+	_ZN4Usif16CComponentFilter12AddPropertyLERK7TDesC16RK6TDesC8NS0_11TDbOperatorES7_ @ 19 NONAME
+	_ZN4Usif16CComponentFilter12AddPropertyLERK7TDesC16S3_9TLanguageNS0_11TDbOperatorES5_ @ 20 NONAME
+	_ZN4Usif16CComponentFilter12AddPropertyLERK7TDesC16xNS0_11TDbOperatorES4_ @ 21 NONAME
+	_ZN4Usif16CComponentFilter12SetRemovableEi @ 22 NONAME
+	_ZN4Usif16CComponentFilter14SetScomoStateLENS_11TScomoStateE @ 23 NONAME
+	_ZN4Usif16CComponentFilter15SetDrmProtectedEi @ 24 NONAME
+	_ZN4Usif16CComponentFilter15SetKnownRevokedEi @ 25 NONAME
+	_ZN4Usif16CComponentFilter16SetSoftwareTypeLERK7TDesC16 @ 26 NONAME
+	_ZN4Usif16CComponentFilter17SetOriginVerifiedEi @ 27 NONAME
+	_ZN4Usif16CComponentFilter19SetInstalledDrivesLERK5TBuf8ILi26EE @ 28 NONAME
+	_ZN4Usif16CComponentFilter4NewLER11RReadStream @ 29 NONAME
+	_ZN4Usif16CComponentFilter4NewLEv @ 30 NONAME
+	_ZN4Usif16CComponentFilter5NewLCEv @ 31 NONAME
+	_ZN4Usif16CComponentFilter8SetFileLERK7TDesC16 @ 32 NONAME
+	_ZN4Usif16CComponentFilter8SetNameLERK7TDesC16 @ 33 NONAME
+	_ZN4Usif16CComponentFilter9SetHiddenEi @ 34 NONAME
+	_ZN4Usif17CIntPropertyEntry10Int64ValueEv @ 35 NONAME
+	_ZN4Usif17CIntPropertyEntry4NewLERK7TDesC16x @ 36 NONAME
+	_ZN4Usif17CIntPropertyEntry5NewLCERK7TDesC16x @ 37 NONAME
+	_ZN4Usif17CIntPropertyEntry8IntValueEv @ 38 NONAME
+	_ZN4Usif17CIntPropertyEntryD0Ev @ 39 NONAME
+	_ZN4Usif17CIntPropertyEntryD1Ev @ 40 NONAME
+	_ZN4Usif17CIntPropertyEntryD2Ev @ 41 NONAME
+	_ZN4Usif18CGlobalComponentId12InternalizeLER11RReadStream @ 42 NONAME
+	_ZN4Usif18CGlobalComponentId4NewLER11RReadStream @ 43 NONAME
+	_ZN4Usif18CGlobalComponentId4NewLERK7TDesC16S3_ @ 44 NONAME
+	_ZN4Usif18CGlobalComponentId5NewLCERK7TDesC16S3_ @ 45 NONAME
+	_ZN4Usif18CGlobalComponentId5NewLCEv @ 46 NONAME
+	_ZN4Usif18CGlobalComponentIdD0Ev @ 47 NONAME
+	_ZN4Usif18CGlobalComponentIdD1Ev @ 48 NONAME
+	_ZN4Usif18CGlobalComponentIdD2Ev @ 49 NONAME
+	_ZN4Usif20CBinaryPropertyEntry11BinaryValueEv @ 50 NONAME
+	_ZN4Usif20CBinaryPropertyEntry4NewLERK7TDesC16RK6TDesC8 @ 51 NONAME
+	_ZN4Usif20CBinaryPropertyEntry5NewLCERK7TDesC16RK6TDesC8 @ 52 NONAME
+	_ZN4Usif20CBinaryPropertyEntryD0Ev @ 53 NONAME
+	_ZN4Usif20CBinaryPropertyEntryD1Ev @ 54 NONAME
+	_ZN4Usif20CBinaryPropertyEntryD2Ev @ 55 NONAME
+	_ZN4Usif21CVersionedComponentId12InternalizeLER11RReadStream @ 56 NONAME
+	_ZN4Usif21CVersionedComponentId4NewLER11RReadStream @ 57 NONAME
+	_ZN4Usif21CVersionedComponentId4NewLERKNS_18CGlobalComponentIdEPK7TDesC16S6_ @ 58 NONAME
+	_ZN4Usif21CVersionedComponentId5NewLCERKNS_18CGlobalComponentIdEPK7TDesC16S6_ @ 59 NONAME
+	_ZN4Usif21CVersionedComponentId5NewLCEv @ 60 NONAME
+	_ZN4Usif21CVersionedComponentIdD0Ev @ 61 NONAME
+	_ZN4Usif21CVersionedComponentIdD1Ev @ 62 NONAME
+	_ZN4Usif21CVersionedComponentIdD2Ev @ 63 NONAME
+	_ZN4Usif25CLocalizableComponentInfo10ConstructLERK7TDesC16S3_ @ 64 NONAME
+	_ZN4Usif25CLocalizableComponentInfo12InternalizeLER11RReadStream @ 65 NONAME
+	_ZN4Usif25CLocalizableComponentInfo4NewLER11RReadStream @ 66 NONAME
+	_ZN4Usif25CLocalizableComponentInfo4NewLERK7TDesC16S3_9TLanguage @ 67 NONAME
+	_ZN4Usif25CLocalizableComponentInfo5NewLCERK7TDesC16S3_9TLanguage @ 68 NONAME
+	_ZN4Usif25CLocalizablePropertyEntry4NewLERK7TDesC16S3_9TLanguage @ 69 NONAME
+	_ZN4Usif25CLocalizablePropertyEntry5NewLCERK7TDesC16S3_9TLanguage @ 70 NONAME
+	_ZN4Usif25CLocalizablePropertyEntryD0Ev @ 71 NONAME
+	_ZN4Usif25CLocalizablePropertyEntryD1Ev @ 72 NONAME
+	_ZN4Usif25CLocalizablePropertyEntryD2Ev @ 73 NONAME
+	_ZN4Usif26CLocalizedSoftwareTypeName10ConstructLERK7TDesC16 @ 74 NONAME
+	_ZN4Usif26CLocalizedSoftwareTypeName12InternalizeLER11RReadStream @ 75 NONAME
+	_ZN4Usif26CLocalizedSoftwareTypeName4NewLER11RReadStream @ 76 NONAME
+	_ZN4Usif26CLocalizedSoftwareTypeName4NewLERK7TDesC169TLanguage @ 77 NONAME
+	_ZN4Usif26CLocalizedSoftwareTypeName5NewLCERK7TDesC169TLanguage @ 78 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry13AddComponentLERK13RPointerArrayINS_25CLocalizableComponentInfoEERK7TDesC16PS7_NS_26TScrComponentOperationTypeE @ 79 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry13AddComponentLERK7TDesC16S3_S3_PS2_NS_26TScrComponentOperationTypeE @ 80 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry14SetVendorNameLEiRK7TDesC169TLanguage @ 81 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry16AddSoftwareTypeLERKNS_20CSoftwareTypeRegInfoE @ 82 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry16CompareVersionsLERK7TDesC16S3_ @ 83 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry16DeleteComponentLEi @ 84 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry16SetFilePropertyLEiRK7TDesC16S3_RK6TDesC8 @ 85 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry16SetFilePropertyLEiRK7TDesC16S3_i @ 86 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry17SetComponentNameLEiRK7TDesC169TLanguage @ 87 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry17SetComponentSizeLEix @ 88 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry18CommitTransactionLEv @ 89 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry18CreateTransactionLEv @ 90 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry19DeleteFilePropertyLEiRK7TDesC16S3_ @ 91 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry19DeleteSoftwareTypeLERK7TDesC16R13RPointerArrayI7HBufC16E @ 92 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry20IsComponentOrphanedLEi @ 93 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry20RollbackTransactionLEv @ 94 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry20SetComponentVersionLEiRK7TDesC16 @ 95 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry21SetComponentPropertyLEiRK7TDesC16RK6TDesC8 @ 96 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry21SetComponentPropertyLEiRK7TDesC16S3_9TLanguage @ 97 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry21SetComponentPropertyLEiRK7TDesC16x @ 98 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry21SetIsComponentHiddenLEii @ 99 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry22RegisterComponentFileLEiRK7TDesC16i @ 100 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry22SetIsComponentPresentLEii @ 101 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry23AddComponentDependencyLERKNS_21CVersionedComponentIdERKNS_18CGlobalComponentIdE @ 102 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry24DeleteComponentPropertyLEiRK7TDesC16 @ 103 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry24SetIsComponentRemovableLEii @ 104 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry24UnregisterComponentFileLEiRK7TDesC16 @ 105 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry26DeleteComponentDependencyLERKNS_18CGlobalComponentIdES3_ @ 106 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry27SetIsComponentDrmProtectedLEii @ 107 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry27SetIsComponentKnownRevokedLEii @ 108 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry29SetIsComponentOriginVerifiedLEii @ 109 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry5CloseEv @ 110 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry7ConnectEv @ 111 NONAME
+	_ZN4Usif26RSoftwareComponentRegistryC1Ev @ 112 NONAME
+	_ZN4Usif26RSoftwareComponentRegistryC2Ev @ 113 NONAME
+	_ZN4Usif30RSoftwareComponentRegistryView5CloseEv @ 114 NONAME
+	_ZN4Usif30RSoftwareComponentRegistryView9OpenViewLERKNS_26RSoftwareComponentRegistryEPNS_16CComponentFilterE @ 115 NONAME
+	_ZN4Usif30RSoftwareComponentRegistryViewC1Ev @ 116 NONAME
+	_ZN4Usif30RSoftwareComponentRegistryViewC2Ev @ 117 NONAME
+	_ZN4Usif35RSoftwareComponentRegistryFilesList5CloseEv @ 118 NONAME
+	_ZN4Usif35RSoftwareComponentRegistryFilesList9OpenListLERKNS_26RSoftwareComponentRegistryEi @ 119 NONAME
+	_ZN4Usif35RSoftwareComponentRegistryFilesListC1Ev @ 120 NONAME
+	_ZN4Usif35RSoftwareComponentRegistryFilesListC2Ev @ 121 NONAME
+	_ZNK4Usif12CScrLogEntry11ComponentIdEv @ 122 NONAME
+	_ZNK4Usif12CScrLogEntry12ExternalizeLER12RWriteStream @ 123 NONAME
+	_ZNK4Usif12CScrLogEntry13ComponentNameEv @ 124 NONAME
+	_ZNK4Usif12CScrLogEntry13OperationTimeEv @ 125 NONAME
+	_ZNK4Usif12CScrLogEntry13OperationTypeEv @ 126 NONAME
+	_ZNK4Usif12CScrLogEntry16ComponentVersionEv @ 127 NONAME
+	_ZNK4Usif12CScrLogEntry16SoftwareTypeNameEv @ 128 NONAME
+	_ZNK4Usif12CScrLogEntry8GlobalIdEv @ 129 NONAME
+	_ZNK4Usif14CPropertyEntry12ExternalizeLER12RWriteStream @ 130 NONAME
+	_ZNK4Usif14CPropertyEntry12PropertyNameEv @ 131 NONAME
+	_ZNK4Usif15CComponentEntry10ScomoStateEv @ 132 NONAME
+	_ZNK4Usif15CComponentEntry11ComponentIdEv @ 133 NONAME
+	_ZNK4Usif15CComponentEntry11IsRemovableEv @ 134 NONAME
+	_ZNK4Usif15CComponentEntry12ExternalizeLER12RWriteStream @ 135 NONAME
+	_ZNK4Usif15CComponentEntry12InstallTimeLEv @ 136 NONAME
+	_ZNK4Usif15CComponentEntry12SoftwareTypeEv @ 137 NONAME
+	_ZNK4Usif15CComponentEntry13ComponentSizeEv @ 138 NONAME
+	_ZNK4Usif15CComponentEntry14IsDrmProtectedEv @ 139 NONAME
+	_ZNK4Usif15CComponentEntry14IsKnownRevokedEv @ 140 NONAME
+	_ZNK4Usif15CComponentEntry15InstalledDrivesEv @ 141 NONAME
+	_ZNK4Usif15CComponentEntry16IsOriginVerifiedEv @ 142 NONAME
+	_ZNK4Usif15CComponentEntry4NameEv @ 143 NONAME
+	_ZNK4Usif15CComponentEntry6VendorEv @ 144 NONAME
+	_ZNK4Usif15CComponentEntry7VersionEv @ 145 NONAME
+	_ZNK4Usif15CComponentEntry8GlobalIdEv @ 146 NONAME
+	_ZNK4Usif15CComponentEntry8IsHiddenEv @ 147 NONAME
+	_ZNK4Usif16CComponentFilter12ExternalizeLER12RWriteStream @ 148 NONAME
+	_ZNK4Usif17CIntPropertyEntry12PropertyTypeEv @ 149 NONAME
+	_ZNK4Usif18CGlobalComponentId12ExternalizeLER12RWriteStream @ 150 NONAME
+	_ZNK4Usif18CGlobalComponentId12GlobalIdNameEv @ 151 NONAME
+	_ZNK4Usif18CGlobalComponentId16SoftwareTypeNameEv @ 152 NONAME
+	_ZNK4Usif20CBinaryPropertyEntry12PropertyTypeEv @ 153 NONAME
+	_ZNK4Usif21CVersionedComponentId11VersionFromEv @ 154 NONAME
+	_ZNK4Usif21CVersionedComponentId12ExternalizeLER12RWriteStream @ 155 NONAME
+	_ZNK4Usif21CVersionedComponentId8GlobalIdEv @ 156 NONAME
+	_ZNK4Usif21CVersionedComponentId9VersionToEv @ 157 NONAME
+	_ZNK4Usif22CLocalizableCommonData6LocaleEv @ 158 NONAME
+	_ZNK4Usif25CLocalizableComponentInfo12ExternalizeLER12RWriteStream @ 159 NONAME
+	_ZNK4Usif25CLocalizableComponentInfo5NameLEv @ 160 NONAME
+	_ZNK4Usif25CLocalizableComponentInfo7VendorLEv @ 161 NONAME
+	_ZNK4Usif25CLocalizablePropertyEntry12PropertyTypeEv @ 162 NONAME
+	_ZNK4Usif25CLocalizablePropertyEntry7LocaleLEv @ 163 NONAME
+	_ZNK4Usif25CLocalizablePropertyEntry8StrValueEv @ 164 NONAME
+	_ZNK4Usif26CLocalizedSoftwareTypeName12ExternalizeLER12RWriteStream @ 165 NONAME
+	_ZNK4Usif26CLocalizedSoftwareTypeName5NameLEv @ 166 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry13GetComponentLERK7TDesC16S3_9TLanguage @ 167 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry13GetComponentLEiRNS_15CComponentEntryE9TLanguage @ 168 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry13GetPluginUidLERK7TDesC16 @ 169 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry13GetPluginUidLEi @ 170 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry14GetComponentsLERK7TDesC16R6RArrayIiE @ 171 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry14SetScomoStateLEiNS_11TScomoStateE @ 172 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry15GetComponentIdLERK7TDesC16S3_ @ 173 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry15IsMediaPresentLEi @ 174 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry16GetComponentIdsLER6RArrayIiEPNS_16CComponentFilterE @ 175 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry16GetFilePropertyLEiRK7TDesC16S3_ @ 176 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry18GetFilePropertiesLEiRK7TDesC16R13RPointerArrayINS_14CPropertyEntryEE @ 177 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry19IsComponentPresentLEi @ 178 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry19RetrieveLogEntriesLER13RPointerArrayINS_12CScrLogEntryEEPK7TDesC16 @ 179 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry21GetComponentPropertyLEiRK7TDesC169TLanguage @ 180 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry22GetSupplierComponentsLERKNS_18CGlobalComponentIdER13RPointerArrayINS_21CVersionedComponentIdEE @ 181 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry23GetComponentFilesCountLEi @ 182 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry23GetComponentPropertiesLEiR13RPointerArrayINS_14CPropertyEntryEE9TLanguage @ 183 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry23GetDependantComponentsLERKNS_18CGlobalComponentIdER13RPointerArrayINS_21CVersionedComponentIdEE @ 184 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry27IsComponentOnReadOnlyDriveLEi @ 185 NONAME
+	_ZNK4Usif30RSoftwareComponentRegistryView14NextComponentLE9TLanguage @ 186 NONAME
+	_ZNK4Usif30RSoftwareComponentRegistryView14NextComponentLERNS_15CComponentEntryE9TLanguage @ 187 NONAME
+	_ZNK4Usif30RSoftwareComponentRegistryView17NextComponentSetLEiR13RPointerArrayINS_15CComponentEntryEE9TLanguage @ 188 NONAME
+	_ZNK4Usif35RSoftwareComponentRegistryFilesList12NextFileSetLEiR13RPointerArrayI7HBufC16E @ 189 NONAME
+	_ZNK4Usif35RSoftwareComponentRegistryFilesList9NextFileLEv @ 190 NONAME
+	_ZTIN4Usif14CPropertyEntryE @ 191 NONAME
+	_ZTIN4Usif15CComponentEntryE @ 192 NONAME
+	_ZTIN4Usif17CIntPropertyEntryE @ 193 NONAME
+	_ZTIN4Usif20CBinaryPropertyEntryE @ 194 NONAME
+	_ZTIN4Usif22CLocalizableCommonDataE @ 195 NONAME
+	_ZTVN4Usif14CPropertyEntryE @ 196 NONAME
+	_ZTVN4Usif15CComponentEntryE @ 197 NONAME
+	_ZTVN4Usif17CIntPropertyEntryE @ 198 NONAME
+	_ZTVN4Usif20CBinaryPropertyEntryE @ 199 NONAME
+	_ZTVN4Usif22CLocalizableCommonDataE @ 200 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry33GetComponentSupportedLocalesListLEiR6RArrayI9TLanguageE @ 201 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry26GetComponentLocalizedInfoLEiR13RPointerArrayINS_25CLocalizableComponentInfoEE @ 202 NONAME
+	_ZN4Usif11COpaqueData10OpaqueDataEv @ 203 NONAME
+	_ZN4Usif11COpaqueData12InternalizeLER11RReadStream @ 204 NONAME
+	_ZN4Usif11COpaqueData4NewLER11RReadStream @ 205 NONAME
+	_ZN4Usif11COpaqueData4NewLER6TDesC89TLanguage @ 206 NONAME
+	_ZN4Usif11COpaqueData4NewLEv @ 207 NONAME
+	_ZN4Usif11COpaqueData5NewLCER6TDesC89TLanguage @ 208 NONAME
+	_ZN4Usif11COpaqueData5NewLCEv @ 209 NONAME
+	_ZN4Usif11COpaqueData8LanguageEv @ 210 NONAME
+	_ZN4Usif11TAppRegInfo12InternalizeLER11RReadStream @ 211 NONAME
+	_ZN4Usif11TAppRegInfoC1E4TUidRK4TBufILi256EES5_ @ 212 NONAME
+	_ZN4Usif11TAppRegInfoC1E4TUidRK4TBufILi256EES5_S5_ @ 213 NONAME
+	_ZN4Usif11TAppRegInfoC1Ev @ 214 NONAME
+	_ZN4Usif11TAppRegInfoC2E4TUidRK4TBufILi256EES5_ @ 215 NONAME
+	_ZN4Usif11TAppRegInfoC2E4TUidRK4TBufILi256EES5_S5_ @ 216 NONAME
+	_ZN4Usif11TAppRegInfoC2Ev @ 217 NONAME
+	_ZN4Usif12CAppViewData12InternalizeLER11RReadStream @ 218 NONAME
+	_ZN4Usif12CAppViewData4NewLE4TUidiPNS_19CCaptionAndIconInfoE @ 219 NONAME
+	_ZN4Usif12CAppViewData4NewLER11RReadStream @ 220 NONAME
+	_ZN4Usif12CAppViewData4NewLEv @ 221 NONAME
+	_ZN4Usif12CAppViewData5NewLCE4TUidiPNS_19CCaptionAndIconInfoE @ 222 NONAME
+	_ZN4Usif12CAppViewData5NewLCEv @ 223 NONAME
+	_ZN4Usif12CServiceInfo12InternalizeLER11RReadStream @ 224 NONAME
+	_ZN4Usif12CServiceInfo4NewLE4TUidR13RPointerArrayINS_11COpaqueDataEERS2_INS_9CDataTypeEE @ 225 NONAME
+	_ZN4Usif12CServiceInfo4NewLER11RReadStream @ 226 NONAME
+	_ZN4Usif12CServiceInfo4NewLEv @ 227 NONAME
+	_ZN4Usif12CServiceInfo5NewLCE4TUidR13RPointerArrayINS_11COpaqueDataEERS2_INS_9CDataTypeEE @ 228 NONAME
+	_ZN4Usif12CServiceInfo5NewLCEv @ 229 NONAME
+	_ZN4Usif14CAppInfoFilter10SetAllAppsEi @ 230 NONAME
+	_ZN4Usif14CAppInfoFilter10SetAllAppsEv @ 231 NONAME
+	_ZN4Usif14CAppInfoFilter13SetServerAppsE4TUid @ 232 NONAME
+	_ZN4Usif14CAppInfoFilter13SetServerAppsE4TUidi @ 233 NONAME
+	_ZN4Usif14CAppInfoFilter17SetEmbeddableAppsEi @ 234 NONAME
+	_ZN4Usif14CAppInfoFilter17SetEmbeddableAppsEv @ 235 NONAME
+	_ZN4Usif14CAppInfoFilter22SetEmbeddabilityFilterERNS_17TEmbeddableFilterE @ 236 NONAME
+	_ZN4Usif14CAppInfoFilter34SetCapabilityAttributeMaskAndValueEii @ 237 NONAME
+	_ZN4Usif14CAppInfoFilter34SetCapabilityAttributeMaskAndValueEiii @ 238 NONAME
+	_ZN4Usif14CAppInfoFilter36SetEmbeddabilityFilterWithScreenModeERNS_17TEmbeddableFilterEi @ 239 NONAME
+	_ZN4Usif14CAppInfoFilter4NewLER11RReadStream @ 240 NONAME
+	_ZN4Usif14CAppInfoFilter4NewLEv @ 241 NONAME
+	_ZN4Usif14CAppInfoFilter5NewLCEv @ 242 NONAME
+	_ZN4Usif17TEmbeddableFilter16AddEmbeddabilityENS_27TApplicationCharacteristics17TAppEmbeddabilityE @ 243 NONAME
+	_ZN4Usif17TEmbeddableFilterC1Ev @ 244 NONAME
+	_ZN4Usif17TEmbeddableFilterC2Ev @ 245 NONAME
+	_ZN4Usif18RScrInternalClient5CloseEv @ 246 NONAME
+	_ZN4Usif18RScrInternalClient7ConnectEv @ 247 NONAME
+	_ZN4Usif18RScrInternalClientC1Ev @ 248 NONAME
+	_ZN4Usif18RScrInternalClientC2Ev @ 249 NONAME
+	_ZN4Usif19CCaptionAndIconInfo12InternalizeLER11RReadStream @ 250 NONAME
+	_ZN4Usif19CCaptionAndIconInfo4NewLER11RReadStream @ 251 NONAME
+	_ZN4Usif19CCaptionAndIconInfo4NewLERK7TDesC16S3_i @ 252 NONAME
+	_ZN4Usif19CCaptionAndIconInfo4NewLEv @ 253 NONAME
+	_ZN4Usif19CCaptionAndIconInfo5NewLCERK7TDesC16S3_i @ 254 NONAME
+	_ZN4Usif19CCaptionAndIconInfo5NewLCEv @ 255 NONAME
+	_ZN4Usif19CLauncherExecutable12InternalizeLER11RReadStream @ 256 NONAME
+	_ZN4Usif19CLauncherExecutable4NewLER11RReadStream @ 257 NONAME
+	_ZN4Usif19CLauncherExecutable4NewLEiRK7TDesC16 @ 258 NONAME
+	_ZN4Usif19CLauncherExecutable4NewLEv @ 259 NONAME
+	_ZN4Usif19CLauncherExecutable5NewLCEiRK7TDesC16 @ 260 NONAME
+	_ZN4Usif19CLauncherExecutable5NewLCEv @ 261 NONAME
+	_ZN4Usif19CLocalizableAppInfo12InternalizeLER11RReadStream @ 262 NONAME
+	_ZN4Usif19CLocalizableAppInfo4NewLER11RReadStream @ 263 NONAME
+	_ZN4Usif19CLocalizableAppInfo4NewLERK7TDesC169TLanguageS3_PNS_19CCaptionAndIconInfoER13RPointerArrayINS_12CAppViewDataEE @ 264 NONAME
+	_ZN4Usif19CLocalizableAppInfo4NewLEv @ 265 NONAME
+	_ZN4Usif19CLocalizableAppInfo5NewLCERK7TDesC169TLanguageS3_PNS_19CCaptionAndIconInfoER13RPointerArrayINS_12CAppViewDataEE @ 266 NONAME
+	_ZN4Usif19CLocalizableAppInfo5NewLCEv @ 267 NONAME
+	_ZN4Usif20RApplicationInfoView5CloseEv @ 268 NONAME
+	_ZN4Usif20RApplicationInfoView9OpenViewLERKNS_26RSoftwareComponentRegistryEPNS_14CAppInfoFilterE9TLanguage @ 269 NONAME
+	_ZN4Usif20RApplicationInfoViewC1Ev @ 270 NONAME
+	_ZN4Usif20RApplicationInfoViewC2Ev @ 271 NONAME
+	_ZN4Usif21CAppServiceInfoFilter23SetAppUidForServiceInfoE4TUid @ 272 NONAME
+	_ZN4Usif21CAppServiceInfoFilter35SetAppUidAndServiceUidForOpaqueDataE4TUidS1_ @ 273 NONAME
+	_ZN4Usif21CAppServiceInfoFilter38SetServiceUidForServiceImplementationsE4TUid @ 274 NONAME
+	_ZN4Usif21CAppServiceInfoFilter4NewLER11RReadStream @ 275 NONAME
+	_ZN4Usif21CAppServiceInfoFilter4NewLEv @ 276 NONAME
+	_ZN4Usif21CAppServiceInfoFilter51SetServiceUidAndDatatTypeForServiceImplementationsLE4TUidRK7TDesC16 @ 277 NONAME
+	_ZN4Usif21CAppServiceInfoFilter5NewLCEv @ 278 NONAME
+	_ZN4Usif24RApplicationRegistryView5CloseEv @ 279 NONAME
+	_ZN4Usif24RApplicationRegistryView9OpenViewLERKNS_26RSoftwareComponentRegistryE9TLanguage @ 280 NONAME
+	_ZN4Usif24RApplicationRegistryView9OpenViewLERKNS_26RSoftwareComponentRegistryERK6RArrayI4TUidE9TLanguage @ 281 NONAME
+	_ZN4Usif24RApplicationRegistryViewC1Ev @ 282 NONAME
+	_ZN4Usif24RApplicationRegistryViewC2Ev @ 283 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry20AddApplicationEntryLEiRKNS_28CApplicationRegistrationDataE @ 284 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry23DeleteApplicationEntryLE4TUid @ 285 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry25DeleteApplicationEntriesLEi @ 286 NONAME
+	_ZN4Usif27TApplicationCharacteristics12InternalizeLER11RReadStream @ 287 NONAME
+	_ZN4Usif27TApplicationCharacteristicsC1Ev @ 288 NONAME
+	_ZN4Usif27TApplicationCharacteristicsC2Ev @ 289 NONAME
+	_ZN4Usif28CApplicationRegistrationData12InternalizeLER11RReadStream @ 290 NONAME
+	_ZN4Usif28CApplicationRegistrationData4NewLER11RReadStream @ 291 NONAME
+	_ZN4Usif28CApplicationRegistrationData4NewLER13RPointerArrayI7HBufC16ERS1_INS_12CServiceInfoEERS1_INS_19CLocalizableAppInfoEERS1_INS_14CPropertyEntryEE4TUidRK7TDesC16 @ 292 NONAME
+	_ZN4Usif28CApplicationRegistrationData4NewLER13RPointerArrayI7HBufC16ERS1_INS_12CServiceInfoEERS1_INS_19CLocalizableAppInfoEERS1_INS_14CPropertyEntryEERS1_INS_11COpaqueDataEE4TUidRK7TDesC16RNS_27TApplicationCharacteristicsEii @ 293 NONAME
+	_ZN4Usif28CApplicationRegistrationData4NewLEv @ 294 NONAME
+	_ZN4Usif28CApplicationRegistrationData5NewLCER13RPointerArrayI7HBufC16ERS1_INS_12CServiceInfoEERS1_INS_19CLocalizableAppInfoEERS1_INS_14CPropertyEntryEE4TUidRK7TDesC16 @ 295 NONAME
+	_ZN4Usif28CApplicationRegistrationData5NewLCER13RPointerArrayI7HBufC16ERS1_INS_12CServiceInfoEERS1_INS_19CLocalizableAppInfoEERS1_INS_14CPropertyEntryEERS1_INS_11COpaqueDataEE4TUidRK7TDesC16RNS_27TApplicationCharacteristicsEii @ 296 NONAME
+	_ZN4Usif28CApplicationRegistrationData5NewLCEv @ 297 NONAME
+	_ZN4Usif28RApplicationRegistrationInfo11GetAppInfoLE4TUidRNS_11TAppRegInfoE9TLanguage @ 298 NONAME
+	_ZN4Usif28RApplicationRegistrationInfo5CloseEv @ 299 NONAME
+	_ZN4Usif28RApplicationRegistrationInfo5OpenLERKNS_26RSoftwareComponentRegistryE @ 300 NONAME
+	_ZN4Usif28RApplicationRegistrationInfoC1Ev @ 301 NONAME
+	_ZN4Usif28RApplicationRegistrationInfoC2Ev @ 302 NONAME
+	_ZN4Usif31RRegistrationInfoForApplication5CloseEv @ 303 NONAME
+	_ZN4Usif31RRegistrationInfoForApplication5OpenLERKNS_26RSoftwareComponentRegistryE4TUid9TLanguage @ 304 NONAME
+	_ZN4Usif31RRegistrationInfoForApplicationC1Ev @ 305 NONAME
+	_ZN4Usif31RRegistrationInfoForApplicationC2Ev @ 306 NONAME
+	_ZN4Usif9CDataType12InternalizeLER11RReadStream @ 307 NONAME
+	_ZN4Usif9CDataType4NewLER11RReadStream @ 308 NONAME
+	_ZN4Usif9CDataType4NewLEiRK7TDesC16 @ 309 NONAME
+	_ZN4Usif9CDataType4NewLEv @ 310 NONAME
+	_ZN4Usif9CDataType5NewLCEiRK7TDesC16 @ 311 NONAME
+	_ZN4Usif9CDataType5NewLCEv @ 312 NONAME
+	_ZNK4Usif11COpaqueData12ExternalizeLER12RWriteStream @ 313 NONAME
+	_ZNK4Usif11TAppRegInfo12ExternalizeLER12RWriteStream @ 314 NONAME
+	_ZNK4Usif11TAppRegInfo12ShortCaptionEv @ 315 NONAME
+	_ZNK4Usif11TAppRegInfo3UidEv @ 316 NONAME
+	_ZNK4Usif11TAppRegInfo7CaptionEv @ 317 NONAME
+	_ZNK4Usif11TAppRegInfo8FullNameEv @ 318 NONAME
+	_ZNK4Usif12CAppViewData10ScreenModeEv @ 319 NONAME
+	_ZNK4Usif12CAppViewData12ExternalizeLER12RWriteStream @ 320 NONAME
+	_ZNK4Usif12CAppViewData18CaptionAndIconInfoEv @ 321 NONAME
+	_ZNK4Usif12CAppViewData3UidEv @ 322 NONAME
+	_ZNK4Usif12CServiceInfo10OpaqueDataEv @ 323 NONAME
+	_ZNK4Usif12CServiceInfo12ExternalizeLER12RWriteStream @ 324 NONAME
+	_ZNK4Usif12CServiceInfo3UidEv @ 325 NONAME
+	_ZNK4Usif12CServiceInfo9DataTypesEv @ 326 NONAME
+	_ZNK4Usif14CAppInfoFilter12ExternalizeLER12RWriteStream @ 327 NONAME
+	_ZNK4Usif17TEmbeddableFilter18EmbeddabilityFlagsEv @ 328 NONAME
+	_ZNK4Usif17TEmbeddableFilter20MatchesEmbeddabilityENS_27TApplicationCharacteristics17TAppEmbeddabilityE @ 329 NONAME
+	_ZNK4Usif18RScrInternalClient18GenerateNewAppUidLEv @ 330 NONAME
+	_ZNK4Usif19CCaptionAndIconInfo12ExternalizeLER12RWriteStream @ 331 NONAME
+	_ZNK4Usif19CCaptionAndIconInfo12IconFileNameEv @ 332 NONAME
+	_ZNK4Usif19CCaptionAndIconInfo13NumOfAppIconsEv @ 333 NONAME
+	_ZNK4Usif19CCaptionAndIconInfo7CaptionEv @ 334 NONAME
+	_ZNK4Usif19CLauncherExecutable12ExternalizeLER12RWriteStream @ 335 NONAME
+	_ZNK4Usif19CLauncherExecutable6TypeIdEv @ 336 NONAME
+	_ZNK4Usif19CLauncherExecutable8LauncherEv @ 337 NONAME
+	_ZNK4Usif19CLocalizableAppInfo12ExternalizeLER12RWriteStream @ 338 NONAME
+	_ZNK4Usif19CLocalizableAppInfo12ShortCaptionEv @ 339 NONAME
+	_ZNK4Usif19CLocalizableAppInfo12ViewDataListEv @ 340 NONAME
+	_ZNK4Usif19CLocalizableAppInfo18CaptionAndIconInfoEv @ 341 NONAME
+	_ZNK4Usif19CLocalizableAppInfo19ApplicationLanguageEv @ 342 NONAME
+	_ZNK4Usif19CLocalizableAppInfo9GroupNameEv @ 343 NONAME
+	_ZNK4Usif20RApplicationInfoView15GetNextAppInfoLEiR13RPointerArrayINS_11TAppRegInfoEE @ 344 NONAME
+	_ZNK4Usif21CAppServiceInfoFilter12ExternalizeLER12RWriteStream @ 345 NONAME
+	_ZNK4Usif24RApplicationRegistryView35GetNextApplicationRegistrationInfoLEiR13RPointerArrayINS_28CApplicationRegistrationDataEE @ 346 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry21GetComponentIdForAppLE4TUid @ 347 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry23GetAppUidsForComponentLEiR6RArrayI4TUidE @ 348 NONAME
+	_ZNK4Usif26RSoftwareComponentRegistry24GetApplicationLaunchersLER13RPointerArrayINS_19CLauncherExecutableEE @ 349 NONAME
+	_ZNK4Usif27TApplicationCharacteristics12ExternalizeLER12RWriteStream @ 350 NONAME
+	_ZNK4Usif28CApplicationRegistrationData10AttributesEv @ 351 NONAME
+	_ZNK4Usif28CApplicationRegistrationData12ExternalizeLER12RWriteStream @ 352 NONAME
+	_ZNK4Usif28CApplicationRegistrationData12ServiceArrayEv @ 353 NONAME
+	_ZNK4Usif28CApplicationRegistrationData13AppOpaqueDataEv @ 354 NONAME
+	_ZNK4Usif28CApplicationRegistrationData13AppPropertiesEv @ 355 NONAME
+	_ZNK4Usif28CApplicationRegistrationData13EmbeddabilityEv @ 356 NONAME
+	_ZNK4Usif28CApplicationRegistrationData14OwnedFileArrayEv @ 357 NONAME
+	_ZNK4Usif28CApplicationRegistrationData19DefaultScreenNumberEv @ 358 NONAME
+	_ZNK4Usif28CApplicationRegistrationData22LocalizableAppInfoListEv @ 359 NONAME
+	_ZNK4Usif28CApplicationRegistrationData6AppUidEv @ 360 NONAME
+	_ZNK4Usif28CApplicationRegistrationData6HiddenEv @ 361 NONAME
+	_ZNK4Usif28CApplicationRegistrationData6LaunchEv @ 362 NONAME
+	_ZNK4Usif28CApplicationRegistrationData6TypeIdEv @ 363 NONAME
+	_ZNK4Usif28CApplicationRegistrationData7AppFileEv @ 364 NONAME
+	_ZNK4Usif28CApplicationRegistrationData7NewFileEv @ 365 NONAME
+	_ZNK4Usif28CApplicationRegistrationData9GroupNameEv @ 366 NONAME
+	_ZNK4Usif28RApplicationRegistrationInfo15GetServiceInfoLEPNS_21CAppServiceInfoFilterER13RPointerArrayINS_12CServiceInfoEE9TLanguage @ 367 NONAME
+	_ZNK4Usif28RApplicationRegistrationInfo18GetAppForDataTypeLERK7TDesC16 @ 368 NONAME
+	_ZNK4Usif28RApplicationRegistrationInfo28GetAppForDataTypeAndServiceLERK7TDesC164TUid @ 369 NONAME
+	_ZNK4Usif31RRegistrationInfoForApplication11GetAppIconLERP7HBufC16 @ 370 NONAME
+	_ZNK4Usif31RRegistrationInfoForApplication12GetAppViewsLER13RPointerArrayINS_12CAppViewDataEE @ 371 NONAME
+	_ZNK4Usif31RRegistrationInfoForApplication15GetAppViewIconLE4TUidRP7HBufC16 @ 372 NONAME
+	_ZNK4Usif31RRegistrationInfoForApplication17GetAppOwnedFilesLER13RPointerArrayI7HBufC16E @ 373 NONAME
+	_ZNK4Usif31RRegistrationInfoForApplication19GetAppServicesUidsLER6RArrayI4TUidE @ 374 NONAME
+	_ZNK4Usif31RRegistrationInfoForApplication20ApplicationLanguageLEv @ 375 NONAME
+	_ZNK4Usif31RRegistrationInfoForApplication20DefaultScreenNumberLEv @ 376 NONAME
+	_ZNK4Usif31RRegistrationInfoForApplication22GetAppCharacteristicsLERNS_27TApplicationCharacteristicsE @ 377 NONAME
+	_ZNK4Usif31RRegistrationInfoForApplication24NumberOfOwnDefinedIconsLEv @ 378 NONAME
+	_ZNK4Usif9CDataType12ExternalizeLER12RWriteStream @ 379 NONAME
+	_ZNK4Usif9CDataType4TypeEv @ 380 NONAME
+	_ZNK4Usif9CDataType8PriorityEv @ 381 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfo12SetMimeTypeLERK7TDesC16 @ 382 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfo22SetLauncherExecutableLERK7TDesC16 @ 383 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfo29SetLocalizedSoftwareTypeNameLE9TLanguageRK7TDesC16 @ 384 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfo4NewLER11RReadStream @ 385 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfo4NewLERK7TDesC16 @ 386 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfoD0Ev @ 387 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfoD1Ev @ 388 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfoD2Ev @ 389 NONAME
+	_ZN4Usif17TCustomAccessInfoC1E9TSecureIdNS_11TAccessModeE @ 390 NONAME
+	_ZN4Usif17TCustomAccessInfoC2E9TSecureIdNS_11TAccessModeE @ 391 NONAME
+	_ZNK4Usif17TCustomAccessInfo10AccessModeEv @ 392 NONAME
+	_ZNK4Usif17TCustomAccessInfo8SecureIdEv @ 393 NONAME
+	_ZNK4Usif20CSoftwareTypeRegInfo12ExternalizeLER12RWriteStream @ 394 NONAME
+	_ZN4Usif16CComponentFilter17TPropertyOperator12InternalizeLER11RReadStream @ 395 NONAME
+	_ZN4Usif16CComponentFilter17TPropertyOperatorC1ENS0_11TDbOperatorES2_ @ 396 NONAME
+	_ZN4Usif16CComponentFilter17TPropertyOperatorC2ENS0_11TDbOperatorES2_ @ 397 NONAME
+	_ZNK4Usif16CComponentFilter17TPropertyOperator12NameOperatorEv @ 398 NONAME
+	_ZNK4Usif16CComponentFilter17TPropertyOperator13ValueOperatorEv @ 399 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/eabi/scrdatabaseu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,30 @@
+EXPORTS
+	_ZN4Usif10CStatement10BindInt64LEix @ 1 NONAME
+	_ZN4Usif10CStatement11BindBinaryLEiRK6TDesC8 @ 2 NONAME
+	_ZN4Usif10CStatement15ProcessNextRowLEv @ 3 NONAME
+	_ZN4Usif10CStatement17ExecuteStatementLEv @ 4 NONAME
+	_ZN4Usif10CStatement4NewLERKNS_9CDatabaseEPNS_24CStatementImplementationE @ 5 NONAME
+	_ZN4Usif10CStatement6ResetLEv @ 6 NONAME
+	_ZN4Usif10CStatement8BindIntLEii @ 7 NONAME
+	_ZN4Usif10CStatement8BindStrLEiRK7TDesC16 @ 8 NONAME
+	_ZN4Usif10CStatementD0Ev @ 9 NONAME
+	_ZN4Usif10CStatementD1Ev @ 10 NONAME
+	_ZN4Usif10CStatementD2Ev @ 11 NONAME
+	_ZN4Usif9CDatabase15LastInsertedIdLEv @ 12 NONAME
+	_ZN4Usif9CDatabase18PrepareStatementLCERK7TDesC16 @ 13 NONAME
+	_ZN4Usif9CDatabaseD0Ev @ 14 NONAME
+	_ZN4Usif9CDatabaseD1Ev @ 15 NONAME
+	_ZN4Usif9CDatabaseD2Ev @ 16 NONAME
+	_ZNK4Usif10CStatement10IntColumnLEi @ 17 NONAME
+	_ZNK4Usif10CStatement10StrColumnLEi @ 18 NONAME
+	_ZNK4Usif10CStatement12Int64ColumnLEi @ 19 NONAME
+	_ZNK4Usif10CStatement12IsFieldNullLEi @ 20 NONAME
+	_ZNK4Usif10CStatement13BinaryColumnLEi @ 21 NONAME
+	_ZTIN4Usif23CDatabaseImplementationE @ 22 NONAME
+	_ZTIN4Usif24CStatementImplementationE @ 23 NONAME
+	_ZTVN4Usif23CDatabaseImplementationE @ 24 NONAME
+	_ZTVN4Usif24CStatementImplementationE @ 25 NONAME
+	_ZN4Usif9CDatabase4NewLER5RFileS2_ @ 26 NONAME
+	_ZN4Usif9CDatabase5NewLCER5RFileS2_ @ 27 NONAME
+	_ZN4Usif10CStatement11BindBinaryLEiRK6TDesC8j @ 28 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/eabi/scrhelperclientu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN4Usif10RScrHelper20RetrieveFileHandlesLER5RFileS2_ @ 1 NONAME
+	_ZN4Usif10RScrHelper5CloseEv @ 2 NONAME
+	_ZN4Usif10RScrHelper7ConnectEv @ 3 NONAME
+	_ZN4Usif10RScrHelperC1Ev @ 4 NONAME
+	_ZN4Usif10RScrHelperC2Ev @ 5 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* @ Software Component Registry
+*
+*/
+
+
+/**
+ @file
+*/
+
+#include "../sqlite_secure/GROUP/BLD.INF"
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+// SCR exported headers
+
+../inc/screntries.h			SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/scr/screntries.h)
+../inc/appregentries.h			SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/scr/appregentries.h)
+../inc/appreginfo.h			SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/scr/appreginfo.h)
+../inc/scr.h 				SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/scr/scr.h)
+../inc/scrcommon.h 			SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(usif/scr/scrcommon.h)
+../inc/screntries_platform.h 			SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(usif/scr/screntries_platform.h)
+../inc/scrcommon.inl 		SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(usif/scr/scrcommon.inl)
+
+// USIF common includes
+../../swinstallationfw/common/inc/usiferror.h		SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/usiferror.h)
+../../swinstallationfw/common/inc/usifcommon.h		SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/usifcommon.h)
+
+// ROMKIT includes
+../inc/scr.iby				/epoc32/rom/include/scr.iby
+
+
+PRJ_MMPFILES
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+scrserver.mmp		// SCR Server
+scrclient.mmp		// SCR Client
+scrdatabase.mmp		// SCR Data Layer
+
+../scrhelper/group/scrhelperserver.mmp // SCR Helper Server
+../scrhelper/group/scrhelperclient.mmp // SCR Helper Client
+
+#endif // TOOLS2
+#endif // TOOLS
+
+PRJ_TESTMMPFILES
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+../test/group/tscr.mmp		// SCR Test Harness
+../test/group/tscrdatalayer.mmp		// SCR Data Layer Test Harness
+../test/group/tscraccessor.mmp		// SCR Accessor
+../test/group/tscrapparc.mmp		// SCR-Apparc Test Harness
+
+#endif // TOOLS2
+#endif // TOOLS
+
+PRJ_TESTEXPORTS
+
+../test/tscr/scripts/tscr.ini				z:/tusif/tscr/tscr.ini
+../test/tscr/scripts/tscr.script			z:/tusif/tscr/tscr.script
+../test/tscr/scripts/tscr_api.script		z:/tusif/tscr/tscr_api.script
+
+../test/tscr/scripts/tscr_performance.ini			z:/tusif/tscr/tscr_performance.ini
+../test/tscr/scripts/tscr_performance.script		z:/tusif/tscr/tscr_performance.script
+../test/tscr/scripts/tscr_performance_cases.script	z:/tusif/tscr/tscr_performance_cases.script
+../test/tscr/scripts/tscr_app_performance_cases.script	z:/tusif/tscr/tscr_app_performance_cases.script
+
+../test/tscr/scripts/tscr_versioning.script		z:/tusif/tscr/tscr_versioning.script
+../test/tscr/scripts/tscr_oom.script		z:/tusif/tscr/tscr_oom.script
+
+../test/tscr/scripts/tscr_appreginfo.ini	z:/tusif/tscr/tscr_appreginfo.ini
+../test/tscr/scripts/tscr_appreginfo.script	z:/tusif/tscr/tscr_appreginfo.script
+../test/tscr/scripts/tscrapparc.script	        z:/tusif/tscr/tscrapparc.script
+
+../test/tscrdatalayer/scripts/tscr_datalayer.script		z:/tusif/tscrdatalayer/tscr_datalayer.script
+../test/tscrdatalayer/scripts/tscr_datalayer_oom.script	z:/tusif/tscrdatalayer/tscr_datalayer_oom.script
+../test/tscrdatalayer/scripts/tscr_datalayer_oom.ini	z:/tusif/tscrdatalayer/tscr_datalayer_oom.ini
+../test/tscrdatalayer/scripts/data/nondb.db				z:/tusif/tscrdatalayer/data/nondb.db
+
+../test/tscr/scripts/data/scr_small.db		z:/tusif/tscr/data/scr_small.db
+../test/tscr/scripts/data/scr_medium.db		z:/tusif/tscr/data/scr_medium.db
+../test/tscr/scripts/data/scr_large.db		z:/tusif/tscr/data/scr_large.db
+
+../test/tscr/scripts/data/scr-noversiontable.db			z:/tusif/tscr/data/scr-noversiontable.db
+../test/tscr/scripts/data/scr-olderminordbversion.db			z:/tusif/tscr/data/scr-olderminordbversion.db
+../test/tscr/scripts/data/scr-differentbuildnumber.db			z:/tusif/tscr/data/scr-differentbuildnumber.db
+../test/tscr/scripts/data/scr-newermajordbversion.db			z:/tusif/tscr/data/scr-newermajordbversion.db
+../test/tscr/scripts/data/scr-noentriesinversiontable.db			z:/tusif/tscr/data/scr-noentriesinversiontable.db
+../test/tscr/scripts/data/scr-newerminordbversion.db 	z:/tusif/tscr/data/scr-newerminordbversion.db
+../test/tscr/scripts/data/scr-oldermajordbversion.db 	z:/tusif/tscr/data/scr-oldermajordbversion.db
+../test/tscr/scripts/data/scr-multiapp.db 	z:/tusif/tscr/data/scr-multiapp.db
+../test/tscr/scripts/data/scr-nodefaultvalues.db 	z:/tusif/tscr/data/scr-nodefaultvalues.db
+
+../test/testdb/scr.db			z:/sys/install/scr/provisioned/scr.db
+
+// The second copy is required for ARMV5 builds, where z:/ does not automatically transfer into the simulated Z drive. The custom steps in ONB take care of copying testscr.db into scr.db before ROM build and test
+../test/testdb/scr.db /epoc32/release/winscw/udeb/z/sys/install/scr/provisioned/testscr.db
+../test/testdb/scr.db /epoc32/release/winscw/urel/z/sys/install/scr/provisioned/testscr.db
+
+// ROMKIT includes
+../inc/tscr.iby								/epoc32/rom/include/tscr.iby
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/group/scrclient.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Software Component Registry Client
+*
+*/
+
+
+TARGET				scrclient.dll
+TARGETTYPE			dll
+
+UID					0x0 0x10285BC1
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE			../inc
+USERINCLUDE			../inc_private
+USERINCLUDE	  		../../swinstallationfw/common/inc
+
+SOURCEPATH			../source/client
+
+SOURCE				scrclient.cpp
+SOURCE				screntries.cpp
+SOURCE				scrclientsubsessions.cpp appregentries.cpp appreginfo.cpp
+
+DEFFILE				../~/scrclient.def
+
+CAPABILITY			all
+
+VENDORID			0x70000001
+
+LIBRARY				euser.lib 
+LIBRARY 			estor.lib 
+LIBRARY				scsclient.lib ipcstream.lib efsrv.lib 
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/group/scrdatabase.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Software Component Registry Data Layer
+*
+*/
+
+
+TARGET			scrdatabase.dll
+TARGETTYPE		dll
+UID				0x0 0x10285BBF
+
+CAPABILITY		ProtServ
+VENDORID 		0x70000001
+
+SOURCEPATH		../source/database
+SOURCE 			scrdatabase.cpp
+
+USERINCLUDE		../inc
+USERINCLUDE		../inc_private
+USERINCLUDE		../../swinstallationfw/common/inc
+USERINCLUDE		../sqlite_secure/SQLite
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+OS_LAYER_LIBC_SYSTEMINCLUDE
+
+DEFFILE			../~/scrdatabase.def
+
+LIBRARY 		euser.lib 
+LIBRARY			estlib.lib 
+LIBRARY			estor.lib
+LIBRARY			efsrv.lib
+LIBRARY			centralrepository.lib 
+LIBRARY 		sqlite3_secure.lib
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/group/scrserver.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Software Component Registry Server
+*
+*/
+
+
+TARGET        scrserver.exe
+TARGETTYPE    exe
+UID           0x0 0x10285BC0
+
+CAPABILITY    ProtServ
+VENDORID 	  0x70000001
+
+SOURCEPATH    ../source/server
+SOURCE 		  startup.cpp
+SOURCE 		  scrserver.cpp
+SOURCE		  scrsession.cpp
+SOURCE        scrsubsession.cpp
+SOURCE		  scrrequestimpl.cpp
+SOURCE		  scrrepository.cpp
+
+USERINCLUDE   ../inc
+USERINCLUDE   ../inc_private
+USERINCLUDE	  ../../swinstallationfw/common/inc
+USERINCLUDE	  ../scrhelper/inc  
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+OS_LAYER_LIBC_SYSTEMINCLUDE
+
+LIBRARY		  bafl.lib
+LIBRARY 	  euser.lib 
+LIBRARY       estlib.lib 
+LIBRARY       efsrv.lib
+LIBRARY       estor.lib
+LIBRARY       ipcstream.lib 
+LIBRARY		  sqlite3.lib 
+LIBRARY		  scrdatabase.lib 
+LIBRARY		  scsserver.lib  
+LIBRARY		  scrclient.lib securityutils.lib
+LIBRARY		  scrhelperclient.lib stsclient.lib
+LIBRARY		  centralrepository.lib 
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/group/security_softwarecomponentregistry.history.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="Software Component Registry">
+  <purpose>
+    Provide APIs and data repository for software management on the device.
+  </purpose>
+
+  <defect number="DEF137187" title="Move SCR OOM tests to a new script" revision="018">
+	Created a new script.
+  </defect>
+
+ <defect number="DEF128695" title="PREQ1269: SetServerHeapFail causing panic in SCRSERVER.EXE" revision="017">
+	panic in SCRSERVER.EXE  is fixed. 
+  </defect>
+  <defect number="DEF131414" title="Performance in RSisRegistryEntry::InstalledDrivesL is low " revision="016">
+	Modified SCR interface to allow avoiding drive management when registering a file. 
+  </defect>
+  <defect number="DEF131875" title="SMPSAFE MMP file updates for SWI and USIF" revision="015">
+    updated MMP files for SWI and USIF components to declare them SMPSAFE 
+  </defect>
+  
+  <defect number="DEF131262" title="Building ROMs results in a file not being found in siflauncherconfig.iby" revision="014"> 
+	 As described in proposed solution in the defect - added EPOCROOT## to the path 	
+  </defect> 
+
+  <defect number="DEF128680" title="PREQ1269: Thread scrserver.exe::Main Panic USER 21" revision="013"> 
+	 Added a check when processing filters in SCR.
+  </defect> 
+
+  <defect number="DEF130740" title="PREQ1269: RSoftwareComponentRegistryView leaving with -4" revision="012"> 
+	 Added validation of input parameters in the SCR 	
+  </defect> 
+
+  <defect number="DEF130796" title="PREQ1269: Can set the component size negative" revision="011"> 
+	 The API wasn't changed to Uint, as this would require the DB also to support unsigned values in the relevant column, and I couldn't see an option for doing it without disrupting the schema. 
+  </defect> 
+
+  <defect number="DEF130814" title="PREQ1269: ALLOC Panic raised in scrserver.exe during uninstallation" revision="010"> 
+	 In ref. installer, fixed the order of closing sub-sessions and sessions in the SCR
+  </defect> 
+
+  <defect number="DEF129121" title="scr.iby references missing files when building Techview" revision="009">
+    Refered to the generic data file's path; and cleanup the iby file. 	
+  </defect>
+
+  <defect number="DEF131245" title="Incorrect date/time handling in the SCR" revision="008">
+	Fixed date/time handling in the SCR, so that CComponentEntry construction won't fail on the last month of the year or last day of the month. 
+  </defect>
+
+  <deliverystep number="1117" name="PREQ1269: Crypto Services: Plugin management and highly desirable features
+ (Phase 2)" osproject="Diran" revision="007">
+	  <milestone project="GT0433" number="3.2"/>
+	  <preq number="1269" title="Universal Software Install Framework">
+		  1) Post-manufacture plugin management 2) Complex queries in the SCR
+			3) Additional smaller requirements and changes and 4) Improved security in the SCR
+	  </preq>
+  </deliverystep>
+
+ <defect number="DEF128602" title="PREQ1269 - Application Manager is unresponsive" revision="006">
+	Added caching for the CComponentEntry object in the subsession. Improved the performance of RSisRegistryEntry::OpenL. Several other minor improvements. 
+  </defect>
+  
+  <defect number="DEF128615" title="PREQ1269 - SCR database consumes much more disk space than SIS Registry" revision="005">
+	As N- series devices tend to have many in ROM components, most settings in the SCR DB were changed to favour ROM components as the default settings. Additionally, more settings were made optional for all components (index etc.) 
+  </defect>
+ 
+  <defect number="DEF128618" title="PREQ1269 - Processing of ROM stubs is very slow" revision="004">
+	Removing queries while adding files. Improving bitmask management for installed drives. Making more properties optional. Made default options to favour ROM components.
+  </defect>
+
+  <defect number="DEF129328" title="PREQ1269: Read-Write lock fails" revision="003">
+	State variables were moved to the sub-session class instead of CRequestImpl class. This way the state is not shared across sub-sessions. 
+  </defect>
+ 
+  <defect number="DEF129120" title="PREQ1269: scrserver.exe::Main Panic KERN-EXEC 3 when listing with locale" revision="002">
+	Fixed a crash while matching downgraded locales for properties.
+  </defect>
+
+  <deliverystep number="1116" name="PREQ1269: Security and Data Privacy: Universal Software Install Framework (Phase 1)" osproject="Diran" revision="001">
+	  <milestone project="GT0433" number="3.1"/>
+	  <preq number="1269" title="Universal Software Install Framework">
+		   Delivers the main set of features for the Diran Early Phase. Includes the new components (SCR, SIF and STS), migration of the native installer to use the new components and most reference code.
+			Excludes non-mandatory features and post-production plugin management.
+	  </preq>
+  </deliverystep>
+
+</relnotes>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/group/security_softwarecomponentregistry.mrp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+component	security_softwarecomponentregistry
+source	\sf\mw\appinstall\installationservices\swcomponentregistry
+source	\sf\mw\appinstall\installationservices\swinstallationfw\common
+binary	\sf\mw\appinstall\installationservices\swcomponentregistry\group	all
+exports	\sf\mw\appinstall\installationservices\swcomponentregistry\group
+notes_source	\component_defs\release.src
+
+ipr D 
+ipr T \sf\mw\appinstall\installationservices\swcomponentregistry\test
+ipr T \sf\mw\appinstall\installationservices\swcomponentregistry\sqlite_secure\test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc/appregentries.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1021 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Declares entry classes for Software Components Registry interface.
+*
+*/
+
+/**
+ @file
+ @publishedAll
+ @prototype 
+*/
+
+#ifndef APPREGENTRIES_H
+#define APPREGENTRIES_H
+
+#include <e32base.h>
+#include <s32strm.h>
+#include <f32file.h> 
+namespace Usif
+    {
+
+    class CScrRequestImpl;
+    class CDataType;
+    class CServiceInfo;
+    class CLocalizableAppInfo;
+    class CAppViewData;
+    class CCaptionAndIconInfo;
+     
+    
+    const TInt KSCRMaxAppGroupName=0x10; // Length of App's logical groupname
+    typedef TBuf<KSCRMaxAppGroupName> TAppGroupName;
+    
+    NONSHARABLE_CLASS (TApplicationCharacteristics)
+    /**
+     Used to store application characteristics like its embeddabilty, group name etc.
+     */
+         {
+     public:
+         /**
+          Creates an empty TApplicationCharacteristics object.
+          */
+         IMPORT_C TApplicationCharacteristics();
+         
+         IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+         
+         IMPORT_C void InternalizeL(RReadStream& aStream);
+             
+     public:
+         /** 
+           Defines an application's support for embeddability. 
+          */
+         enum TAppEmbeddability {
+             /** 
+              An application cannot be embedded. 
+             */
+             ENotEmbeddable=0,
+             /** 
+              An application can be run embedded or standalone and can read/write embedded document-content. 
+             */
+             EEmbeddable=1,
+             /** 
+              An application can only be run embedded and can read/write embedded document-content. 
+             */
+             EEmbeddableOnly=2,
+             /** 
+              An application can be run embedded or standalone and cannot read/write embedded document-content. 
+             */
+             EEmbeddableUiOrStandAlone=5,
+             /** 
+              An application can only be run embedded and cannot read/write embedded document-content. 
+             */
+             EEmbeddableUiNotStandAlone=6 
+             };         
+         /** 
+          Indicates the extent to which the application can be embedded.
+         */
+         TAppEmbeddability iEmbeddability;
+         /** 
+          Indicates whether the application is document-based and supports being asked 
+          to create a new file. 
+         */
+         TBool iSupportsNewFile;
+         /** 
+          Indicates whether the existence of the application should be advertised to the 
+          user. If this is set to ETrue, the application does not appear on the Extras 
+          Bar (or equivalent). 
+         */
+         TBool iAppIsHidden; // not shown in the Shell etc.
+         /** 
+          Allows the application to be launched in the foreground (when set to EFalse) 
+          or in the background (when set to ETrue). 
+         */
+         TBool iLaunchInBackground;  // Series 60 extension to allow apps to be launched in the background   
+         /** 
+          Stores the application's logical group name. 
+         */
+         TAppGroupName iGroupName; // Series 60 extension to allow apps to be categorized according a logical group name, e.g. 'games'
+         /** 
+          Indicates the application attributes. One or more values from TCapabilityAttribute may be specified. 
+         */
+         TUint iAttributes;
+         };    
+    
+    class TEmbeddableFilter
+       {
+    public:
+       /** Constructs an empty embeddability filter. 
+        */
+       IMPORT_C TEmbeddableFilter();
+       
+       /** Adds aEmbeddability value to the EmbeddabilityFlag. 
+        */
+       IMPORT_C void AddEmbeddability(TApplicationCharacteristics::TAppEmbeddability aEmbeddability);
+       
+       /** Compares aEmbeddability with the filter.
+        * @param aEmbeddability TAppEmbeddability value to compare.
+        * @see TAppEmbeddability for more details.
+        * @return True, if aEmbeddability is included in the filter; false, otherwise. 
+        */
+       IMPORT_C TBool MatchesEmbeddability(TApplicationCharacteristics::TAppEmbeddability aEmbeddability) const;
+       
+       /** Sets the value of aEmbeddability with EmbeddabilityFlag's value.
+        */
+       void  SetEmbeddabilityFlags(TUint aEmbeddabilityFlags);
+       
+       /** Return the value of iEmbeddability.
+        */
+       IMPORT_C TUint EmbeddabilityFlags() const;
+    private:
+       TUint iEmbeddabilityFlags;
+       };
+    
+    
+    NONSHARABLE_CLASS(CAppInfoFilter) : public CBase
+    /**
+        A filter class which is used to filter the Application registration Info stored in the SCR.
+        An empty filter object is first created and then required filter keys are set separately.
+     */
+        {
+        friend class CScrRequestImpl;
+      
+    public:
+        /**
+            Creates an empty AppRegistrationInfo filter object.
+            @return A pointer to the newly allocated AppRegistrationInfo filter object, if creation is successful.
+         */
+        IMPORT_C static CAppInfoFilter* NewL();
+        
+        /**
+            Creates an empty AppRegistrationInfo filter object.
+            @return A pointer to the newly allocated AppRegistrationInfo filter object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CAppInfoFilter* NewLC();
+        
+        /**
+            Creates a AppRegistrationInfo filter object from a stream.
+            @param aStream The stream to read the AppRegistrationInfo filter object from
+            @return A pointer to the newly allocated AppRegistrationInfo filter object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CAppInfoFilter* NewL(RReadStream& aStream);
+        
+        IMPORT_C void SetAllApps();
+        IMPORT_C void SetAllApps(const TInt aScreenMode);
+        
+        IMPORT_C void SetEmbeddableApps();
+        IMPORT_C void SetEmbeddableApps(const TInt aScreenMode);
+        
+        IMPORT_C void SetEmbeddabilityFilter(TEmbeddableFilter& aEmbeddabilityFilter);    
+        IMPORT_C void SetEmbeddabilityFilterWithScreenMode(TEmbeddableFilter& aEmbeddabilityFilter, const TInt aScreenMode);  
+        
+        IMPORT_C void SetCapabilityAttributeMaskAndValue(const TInt aCapabilityAttributeMask, const TInt aCapabilityAttributeValue);
+        IMPORT_C void SetCapabilityAttributeMaskAndValue(const TInt aCapabilityAttributeMask, const TInt aCapabilityAttributeValue, const TInt aScreenMode );
+                
+        IMPORT_C void SetServerApps(const TUid aServiceUid);
+        IMPORT_C void SetServerApps(const TUid aServiceUid, const TInt aScreenMode);
+
+        ~CAppInfoFilter();
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+        void InternalizeL(RReadStream& aStream);
+        
+    private:
+        CAppInfoFilter();
+        void ConstructL();
+               
+        enum TAppRegInfoFlag
+            {
+            EAllApps                                                    = 0x0001,
+            EAllAppsWithScreenMode                                      = 0x0002,
+            EGetEmbeddableApps                                          = 0x0004,
+            EGetEmbeddableAppsWithSreenMode                             = 0x0008,
+            EGetFilteredAppsWithEmbeddabilityFilter                     = 0x0010,
+            EGetFilteredAppsWithEmbeddabilityFilterWithScreenMode       = 0x0020,
+            EGetFilteredAppsWithCapabilityMaskAndValue                  = 0x0040,
+            EGetFilteredAppsWithCapabilityMaskAndValueWithScreenMode    = 0x0080,
+            EGetServerApps                                              = 0x0100,
+            EGetServerAppsWithScreenMode                                = 0x0200,
+            };
+        
+    private:
+        TUint16               iSetFlag;                                 ///< Flag variable that shows what fields have been set
+        TInt                  iScreenMode;                              ///< Sreen Mode of the application
+        TEmbeddableFilter     iEmbeddabilityFilter;                     ///< Embeddabilty Filter
+        TUint                 iCapabilityAttributeMask;                 ///< Capability attribute bit mask
+        TUint                 iCapabilityAttributeValue;                ///< Capability attribute bit value
+        TUid                  iServiceUid;                              ///< Service Uid
+        TUid                  iAppUid;                                  ///< Application Uid
+        };
+
+    
+    NONSHARABLE_CLASS(CAppServiceInfoFilter) : public CBase
+    /*
+     * A filter class that determines the information fields that need to be set before a GetServiceInfoL is invoked.
+     * Initially an empty filter is created and subsequently the Set methods are used to set the filter based on the input parameters 
+     * with which the GetServiceInfoL query is made.
+     */
+    	{
+    	friend class CScrRequestImpl;
+    	      
+    public:
+    	    	
+       	/**
+    	Creates an empty CAppServiceInfoFilter filter object.
+    	@return A pointer to the newly allocated CAppServiceInfoFilter filter object, if creation is successful.
+    	*/
+    	IMPORT_C static CAppServiceInfoFilter* NewL();
+    	    	        
+    	/**
+    	Creates an empty CAppServiceInfoFilter filter object.
+    	@return A pointer to the newly allocated CAppServiceInfoFilter filter object, if creation is successful.
+    	The pointer is also put onto the cleanup stack.
+    	*/
+    	IMPORT_C static CAppServiceInfoFilter* NewLC();
+    	    	        
+    	/**
+    	Creates a CAppServiceInfoFilter filter object from a stream.
+    	@param aStream The stream to read the CAppServiceInfoFilter filter object from
+    	@return A pointer to the newly allocated CAppServiceInfoFilter filter object, if creation is successful.
+    	@internalComponent
+    	*/
+    	IMPORT_C static CAppServiceInfoFilter* NewL(RReadStream& aStream);
+    	    	  
+    	IMPORT_C void SetAppUidForServiceInfo (const TUid aAppUid);
+    	IMPORT_C void SetServiceUidForServiceImplementations (const TUid aServiceUid);
+    	IMPORT_C void SetServiceUidAndDatatTypeForServiceImplementationsL (const TUid aServiceUid, const TDesC& aDataType);
+    	IMPORT_C void SetAppUidAndServiceUidForOpaqueData (const TUid aAppUid, const TUid aServiceUid);
+    	
+    	~CAppServiceInfoFilter();
+    	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+    	void InternalizeL(RReadStream& aStream);
+    	    	               
+    private:
+    	CAppServiceInfoFilter();
+    	void ConstructL();
+    	enum TServiceInfoFlag
+            {
+            EGetServiceInfoForApp                                       = 0x0001,
+            EGetServiceImplementationForServiceUid                      = 0x0002,
+            EGetServiceImplementationForServiceUidAndDatatType          = 0x0004,
+            EGetOpaqueDataForAppWithServiceUid                          = 0x0008,
+            };
+    	
+    private:
+    	TUint16 iSetFlag;  
+    	TUid iAppUid;
+    	TUid iServiceUid;
+    	HBufC* iDataType; 
+    	};
+    
+    
+    NONSHARABLE_CLASS(COpaqueData) : public CBase
+        {
+    friend class CScrRequestImpl;
+    public:
+        /**
+            Creates an empty COpaqueData object.
+            @return A pointer to the newly allocated COpaqueData object, if creation is successful.
+         */            
+        IMPORT_C static COpaqueData* NewL();
+        
+        /**
+            Creates an empty COpaqueData object.
+            @return A pointer to the newly allocated COpaqueData object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */          
+        IMPORT_C static COpaqueData* NewLC();
+        
+        /**
+            Creates an empty COpaqueData object.
+            
+            @param aOpaqueData  A 8-bit buffer containing the opaque data.
+            @param aLanguage    The language associated with the opaque data. 
+            @return A pointer to the newly allocated COpaqueData object, if creation is successful.
+         */       
+        IMPORT_C static COpaqueData* NewL(TDesC8& aOpaqueData, TLanguage aLanguage);
+        
+        /**
+            Creates an empty COpaqueData object.
+            
+            @param aOpaqueData  A 8-bit buffer containing the opaque data.
+            @param aLanguage    The language associated with the opaque data. 
+            @return A pointer to the newly allocated COpaqueData object, if creation is successful.
+                     The pointer is also put onto the cleanup stack.
+         */           
+        IMPORT_C static COpaqueData* NewLC(TDesC8& aOpaqueData, TLanguage aLanguage);
+        
+        /**
+            Creates a COpaqueData object from the stream.
+                 
+            @param  aStream   The stream to read the COpaqueData object from.
+            @return A pointer to the newly allocated COpaqueData object, if creation is successful.
+         */           
+        IMPORT_C static COpaqueData* NewL(RReadStream& aStream);
+        
+        /**
+         @return The buffer containing the opaque data.
+         */
+        IMPORT_C HBufC8& OpaqueData();
+       
+        /**
+         @return The language associated with the opaque data.
+         */       
+        IMPORT_C TLanguage Language();
+        
+        ~COpaqueData();
+        
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+        
+        IMPORT_C void InternalizeL(RReadStream& aStream);
+        
+    private:
+        COpaqueData();
+        void ConstructL(const TDesC8& aOpaqueData, TLanguage aLanguage);
+
+    private:
+        HBufC8* iOpaqueData;
+        TLanguage iLanguage;
+        };
+
+    class CPropertyEntry;
+    NONSHARABLE_CLASS(CApplicationRegistrationData) : public CBase
+    /*
+     * This contains the basic information of an application such as application's uid, filename, 
+     * attributes, embeddability, groupname, default screen number, opaque data, 
+     * an array of pointers to localizable info, properties, file ownership info etc.
+     *  
+     * N.B. Mandatory fields associated to an application are AppUid and AppFile
+     *      AppFile should contain the abosulte file path, along with the drive and extension (if any)
+     */
+          {
+          friend class CScrRequestImpl;
+      public:
+          /**
+              Creates an empty CApplicationRegistrationData object.
+              @return A pointer to the newly allocated CApplicationRegistrationData object, if creation is successful.
+           */            
+          IMPORT_C static CApplicationRegistrationData* NewL();
+          
+          /**
+              Creates an empty CApplicationRegistrationData object.
+              @return A pointer to the newly allocated CApplicationRegistrationData object, if creation is successful.
+                      The pointer is also put onto the cleanup stack.
+           */                 
+          IMPORT_C static CApplicationRegistrationData* NewLC();
+          
+          /**
+              Creates a CApplicationRegistrationData object from the stream.
+                   
+              @param  aStream   The stream to read the CApplicationRegistrationData object from.
+              @return A pointer to the newly allocated CApplicationRegistrationData object, if creation is successful.
+           */                        
+          IMPORT_C static CApplicationRegistrationData* NewL(RReadStream& aStream);
+          
+          /**
+              Creates a CApplicationRegistrationData object.
+              
+              @param aOwnedFileArray          An array of files owned by the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aServiceArray            An array of services related information associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aLocalizableAppInfoList  An array of localizable information associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aAppPropertiesArray      An array of properties associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aOpaqueDataArray         An array of opaque data associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aAppUid                  The Uid of the application.
+              @param aAppFile                 The executable file associated with the application.
+              @param aCharacteristics         The attributes associated with the application. @see Usif::TApplicationCharacteristics
+              @param aDefaultScreenNumber
+              @param aTypeId
+              
+              
+              @return A pointer to the newly allocated CApplicationRegistrationData object, if creation is successful.
+           */          
+          IMPORT_C static CApplicationRegistrationData* NewL(
+                        RPointerArray<HBufC>& aOwnedFileArray,
+                        RPointerArray<Usif::CServiceInfo>& aServiceArray,
+                        RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoList,
+                        RPointerArray<CPropertyEntry>& aAppPropertiesArray,
+                        RPointerArray<COpaqueData>& aOpaqueDataArray,
+                        TUid aAppUid, const TDesC& aAppFile, 
+                        TApplicationCharacteristics& aCharacteristics,
+                        TInt aDefaultScreenNumber, TInt aTypeId = 0);
+          /**
+              Creates a CApplicationRegistrationData object.
+              
+              @param aOwnedFileArray          An array of files owned by the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aServiceArray            An array of services related information associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aLocalizableAppInfoList  An array of localizable information associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aAppPropertiesArray      An array of properties associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aOpaqueDataArray         An array of opaque data associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aAppUid                  The Uid of the application.
+              @param aAppFile                 The executable file associated with the application.
+              @param aCharacteristics         The attributes associated with the application. @see Usif::TApplicationCharacteristics
+              @param aDefaultScreenNumber
+              @param aTypeId
+              
+              
+              @return A pointer to the newly allocated CApplicationRegistrationData object, if creation is successful.
+                      The pointer is also put onto the cleanup stack.
+           */            
+          IMPORT_C static CApplicationRegistrationData * NewLC(
+                        RPointerArray<HBufC>& aOwnedFileArray,
+                        RPointerArray<CServiceInfo>& aServiceArray,
+                        RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoList,
+                        RPointerArray<CPropertyEntry>& aAppPropertiesArray,
+                        RPointerArray<COpaqueData>& aOpaqueDataArray,
+                        TUid aAppUid, const TDesC& aAppFile,
+                        TApplicationCharacteristics& aCharacteristics,
+                        TInt aDefaultScreenNumber, TInt aTypeId = 0);
+
+           /**
+              Creates a CApplicationRegistrationData object.
+              
+              @param aOwnedFileArray          An array of files owned by the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aServiceArray            An array of services related information associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aLocalizableAppInfoList  An array of localizable information associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aAppPropertiesArray      An array of properties associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aAppUid                  The Uid of the application.
+              @param aAppFile                 The executable file associated with the application.
+              
+              
+              @return A pointer to the newly allocated CApplicationRegistrationData object, if creation is successful.
+           */            
+          IMPORT_C static CApplicationRegistrationData* NewL(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<CServiceInfo>& aServiceArray, RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                                             RPointerArray<CPropertyEntry>& aAppPropertiesArray, TUid aAppUid, 
+                                                             const TDesC& aAppFile);
+           /**
+              Creates a CApplicationRegistrationData object.
+              
+              @param aOwnedFileArray          An array of files owned by the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aServiceArray            An array of services related information associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aLocalizableAppInfoList  An array of localizable information associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aAppPropertiesArray      An array of properties associated with the application. The ownership is also transferred to CApplicationRegistrationData.
+              @param aAppUid                  The Uid of the application.
+              @param aAppFile                 The executable file associated with the application.
+              
+              
+              @return A pointer to the newly allocated CApplicationRegistrationData object, if creation is successful.
+			          The pointer is also put onto the cleanup stack.
+           */             
+          IMPORT_C static CApplicationRegistrationData* NewLC(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<CServiceInfo>& aServiceArray, RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                                             RPointerArray<CPropertyEntry>& aAppPropertiesArray, TUid aAppUid, 
+                                                             const TDesC& aAppFile);
+          ~CApplicationRegistrationData();
+          IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+		  IMPORT_C void InternalizeL(RReadStream& aStream);
+              
+          IMPORT_C const TUid AppUid() const;
+          IMPORT_C const TDesC& AppFile() const;
+          IMPORT_C TInt TypeId() const;
+          IMPORT_C TUint Attributes() const;
+          IMPORT_C TBool Hidden() const;
+          IMPORT_C TApplicationCharacteristics::TAppEmbeddability Embeddability() const;
+          IMPORT_C TBool NewFile() const;
+          IMPORT_C TBool Launch() const;
+          IMPORT_C const TDesC& GroupName() const;
+          IMPORT_C TInt DefaultScreenNumber() const;
+          IMPORT_C const RPointerArray<HBufC>& OwnedFileArray() const;
+          IMPORT_C const RPointerArray<CServiceInfo>& ServiceArray() const;
+          IMPORT_C const RPointerArray<CLocalizableAppInfo>& LocalizableAppInfoList() const;
+          IMPORT_C const RPointerArray<CPropertyEntry>& AppProperties() const;
+          IMPORT_C const RPointerArray<COpaqueData>& AppOpaqueData() const;
+
+      private:
+          CApplicationRegistrationData();
+          void ConstructL(RPointerArray<HBufC>& aOwnedFileArray,
+                RPointerArray<CServiceInfo>& aServiceArray, 
+                RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoList,
+                RPointerArray<CPropertyEntry>& aAppPropertiesArray,
+                RPointerArray<COpaqueData>& aOpaqueDataArray, TUid aAppUid,
+                const TDesC& aAppFile, TApplicationCharacteristics& aCharacteristics,
+                TInt aDefaultScreenNumber, TInt aTypeId);
+          
+          void ConstructL(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<CServiceInfo>& aServiceArray,
+                                    RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoList, RPointerArray<CPropertyEntry>& aAppPropertiesArray,
+                                    TUid aAppUid, const TDesC& aAppFile);
+          
+          void ConstructL(const TDesC& aAppFile);
+      private:
+      
+          RPointerArray<HBufC> iOwnedFileArray;                               // FileOwnershipInfo
+          RPointerArray<CServiceInfo> iServiceArray;                    // Service Info and Service Data Type
+          RPointerArray<CLocalizableAppInfo> iLocalizableAppInfoList;   //LocalizableAppInfo
+          RPointerArray<CPropertyEntry> iAppPropertiesArray;            // AppProperties
+          RPointerArray<COpaqueData> iOpaqueDataArray;
+          
+          // AppRegistrationInfo Table
+          TUid iAppUid;
+          HBufC* iAppFile;
+          TInt iTypeId;
+          TApplicationCharacteristics iCharacteristics;
+          TInt iDefaultScreenNumber;                          
+          };
+
+    
+  NONSHARABLE_CLASS(CDataType) : public CBase
+  /*
+   * It contains the priority and type information associated to each service provided by the application.
+   */
+      {
+      friend class CScrRequestImpl;
+  public:
+      /**
+          Creates an empty CDataType object.
+          @return A pointer to the newly allocated CDataType object, if creation is successful.
+       */       
+      IMPORT_C static CDataType* NewL();
+      
+      /**
+          Creates an empty CDataType object.
+          @return A pointer to the newly allocated CDataType object, if creation is successful.
+                  The pointer is also put onto the cleanup stack.
+       */          
+      IMPORT_C static CDataType* NewLC();
+      
+      /**
+          Creates a CDataType object from the stream.
+               
+          @param  aStream   The stream to read the CDataType object from.
+          @return A pointer to the newly allocated CDataType object, if creation is successful.
+       */         
+      IMPORT_C static CDataType* NewL(RReadStream& aStream);
+      
+      /**
+          Creates a CDataType object.
+          
+          @param aPriority The priority to be associated with the service.
+          @param aType     The type information to be associated with the service.
+          @return A pointer to the newly allocated CDataType object, if creation is successful.
+       */         
+      IMPORT_C static CDataType* NewL(TInt aPriority, const TDesC& aType);
+      
+      /**
+          Creates a CDataType object.
+          
+          @param aPriority The priority to be associated with the service.
+          @param aType     The type information to be associated with the service.
+          @return A pointer to the newly allocated CDataType object, if creation is successful.
+                  The pointer is also put onto the cleanup stack.          
+       */       
+      IMPORT_C static CDataType* NewLC(TInt aPriority, const TDesC& aType);
+      
+      ~CDataType();
+      
+      IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	  
+      IMPORT_C void InternalizeL(RReadStream& aStream);
+      
+      /**
+       @return The priority associated with the service.
+       */
+      IMPORT_C TInt Priority() const;
+ 
+      /**
+       @return The type information associated with the service.
+       */      
+      IMPORT_C const TDesC& Type() const;
+  private:
+          CDataType();
+          void ConstructL(TInt aPriority, const TDesC& aType);
+  private:    
+          TInt iPriority;
+          HBufC* iType;
+      };
+
+  
+  NONSHARABLE_CLASS(CServiceInfo) : public CBase
+  /*
+   * This contains the service related information such as service Uid, opaque data and data type information associated with an applciation.
+   */
+      {
+      friend class CScrRequestImpl;
+  public:
+      /**
+          Creates an empty CServiceInfo object.
+          @return A pointer to the newly allocated CServiceInfo object, if creation is successful.
+       */       
+      IMPORT_C static CServiceInfo* NewL();
+     
+      /**
+          Creates an empty CServiceInfo object.
+          @return A pointer to the newly allocated CServiceInfo object, if creation is successful.
+                  The pointer is also put onto the cleanup stack.
+       */       
+      IMPORT_C static CServiceInfo* NewLC();
+      
+      /**
+          Creates a CServiceInfo object from the stream.
+               
+          @param  aStream   The stream to read the CServiceInfo object from.
+          @return A pointer to the newly allocated CServiceInfo object, if creation is successful.
+       */        
+      IMPORT_C static CServiceInfo* NewL(RReadStream& aStream);
+      
+      /**
+          Creates a CServiceInfo object.
+          @param  aUid              The Uid associated with the service.
+          @param  aOpaqueDataArray  An array of opaque data associated with the service. The ownership is also transferred to 
+                                    the CServiceInfo object.
+          @param  aDataTypes        An array of data types associated with the service. The ownership is also transferred to 
+                                    the CServiceInfo object.            
+          @return A pointer to the newly allocated CServiceInfo object, if creation is successful.
+       */       
+      IMPORT_C static CServiceInfo* NewL(const TUid aUid, RPointerArray<COpaqueData>& aOpaqueDataArray, RPointerArray<CDataType>& aDataTypes);
+      
+      /**
+          Creates a CServiceInfo object.
+          @param  aUid              The Uid associated with the service.
+          @param  aOpaqueDataArray  An array of opaque data associated with the service. The ownership is also transferred to 
+                                    the CServiceInfo object.
+          @param  aDataTypes        An array of data types associated with the service. The ownership is also transferred to 
+                                    the CServiceInfo object.           
+          @return A pointer to the newly allocated CServiceInfo object, if creation is successful.
+       */         
+      IMPORT_C static CServiceInfo* NewLC(const TUid aUid, RPointerArray<COpaqueData>& aOpaqueDataArray, RPointerArray<CDataType>& aDataTypes);
+      ~CServiceInfo();
+      IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	  IMPORT_C void InternalizeL(RReadStream& aStream);
+	  
+	  /**
+	   @return The Uid associated with the service.
+	   */
+      IMPORT_C const TUid Uid() const;
+      
+      /**
+       @return The array of data types associated with the service.
+       */      
+      IMPORT_C const RPointerArray<CDataType>& DataTypes() const;
+      
+      /**
+       @return The array of opaque data associated with the service.
+       */          
+      IMPORT_C const RPointerArray<COpaqueData>& OpaqueData() const;
+  private:
+          CServiceInfo();
+          void ConstructL(const TUid aUid, RPointerArray<COpaqueData>& aOpaqueDataArray, RPointerArray<CDataType>& aDataTypes);
+  private:    
+          TUid iUid;
+          RPointerArray<CDataType> iDataTypes;
+          RPointerArray<COpaqueData> iOpaqueDataArray;
+      };
+
+  
+  NONSHARABLE_CLASS(CLocalizableAppInfo) : public CBase
+  /*
+   * This contains localizable information associated with an application.
+   */
+      {
+      friend class CScrRequestImpl;
+  public:
+      /**
+          Creates an empty CLocalizableAppInfo object.
+          @return A pointer to the newly allocated CLocalizableAppInfo object, if creation is successful.
+       */         
+      IMPORT_C static CLocalizableAppInfo* NewL();
+      
+      /**
+          Creates an empty CLocalizableAppInfo object.
+          @return A pointer to the newly allocated CLocalizableAppInfo object, if creation is successful.
+                  The pointer is also put onto the cleanup stack.
+       */         
+      IMPORT_C static CLocalizableAppInfo* NewLC();
+      
+      /**
+          Creates a CLocalizableAppInfo object from the stream.
+               
+          @param  aStream   The stream to read the CLocalizableAppInfo object from.
+          @return A pointer to the newly allocated CLocalizableAppInfo object, if creation is successful.
+       */               
+      IMPORT_C static CLocalizableAppInfo* NewL(RReadStream& aStream);
+      
+      /**
+          Creates a CLocalizableAppInfo object.
+          
+          @param  aShortCaption          A locale specific short caption associated with the application. 
+          @param  aApplicationLanguage   A language that the application is localized in. 
+          @param  aGroupName             A group name associated with the application. 
+          @param  aCaptionAndIconInfo    A locale specific caption and icon information associated with the application. The ownership is also transferred
+                                         to the CLocalizableAppInfo object.
+          @param  aViewDataList          An array of view information associated with the application. The ownership is also transferred
+                                         to the CLocalizableAppInfo object.                  
+          @return A pointer to the newly allocated CLocalizableAppInfo object, if creation is successful.
+       */       
+      IMPORT_C static CLocalizableAppInfo* NewL(const TDesC& aShortCaption, TLanguage aApplicationLanguage, const TDesC& aGroupName, CCaptionAndIconInfo* aCaptionAndIconInfo, RPointerArray<CAppViewData>& aViewDataList);
+      
+      /**
+          Creates a CLocalizableAppInfo object.
+          
+          @param  aShortCaption          A locale specific short caption associated with the application.
+          @param  aApplicationLanguage   A language that the application is localized in.
+          @param  aGroupName             A group name associated with the application.
+          @param  aCaptionAndIconInfo    A locale specific caption and icon information associated with the application. The ownership is also transferred
+                                         to the CLocalizableAppInfo object.     
+          @param  aViewDataList          An array of view information associated with the application. The ownership is also transferred
+                                         to the CLocalizableAppInfo object.                       
+          @return A pointer to the newly allocated CLocalizableAppInfo object, if creation is successful.
+                  The pointer is also put onto the cleanup stack.     
+       */        
+      IMPORT_C static CLocalizableAppInfo* NewLC(const TDesC& aShortCaption, TLanguage aApplicationLanguage, const TDesC& aGroupName, CCaptionAndIconInfo* aCaptionAndIconInfo, RPointerArray<CAppViewData>& aViewDataList);
+      
+      ~CLocalizableAppInfo();
+      
+      IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	  
+      IMPORT_C void InternalizeL(RReadStream& aStream);
+     
+      /**
+       @return The short caption associated with the locale for the application.
+       */
+      IMPORT_C const TDesC& ShortCaption() const;
+      
+      /**
+       @return The language that the application is localized in.
+       */      
+      IMPORT_C TLanguage ApplicationLanguage() const;
+      
+      /**
+       @return The group name associated with the application.
+       */        
+      IMPORT_C const TDesC& GroupName() const;
+      
+      /**
+       @return The array of Application view information associated with the application.
+       */        
+      IMPORT_C const RPointerArray<CAppViewData>& ViewDataList() const;
+      
+      /**
+       @return The locale specific caption and icon information associated with the application.
+       */        
+      IMPORT_C const CCaptionAndIconInfo* CaptionAndIconInfo() const;
+
+  private:
+      CLocalizableAppInfo();
+      
+      void ConstructL(const TDesC& aShortCaption, TLanguage aApplicationLanguage, const TDesC& aGroupName, CCaptionAndIconInfo* aCaptionAndIconInfo, RPointerArray<Usif::CAppViewData> aViewDataList);
+
+      void ConstructL(const TDesC& aShortCaption, const TDesC& aGroupName);
+
+  private:
+      HBufC* iShortCaption;                               
+      TLanguage iApplicationLanguage;                     
+      HBufC* iGroupName;                                  
+      CCaptionAndIconInfo* iCaptionAndIconInfo;
+      RPointerArray<CAppViewData> iViewDataList;
+      };
+
+  
+  NONSHARABLE_CLASS(CCaptionAndIconInfo) : public CBase
+  /*
+   * This contains the caption and icon information associated to an application such as caption, icon filename and number of icons.
+   * 
+   * N.B. Icon Filename, if present, should contain the absolute file path, along with the drive and extension (if any).
+   */
+      {
+      friend class CScrRequestImpl;
+          
+  public:
+      /**
+          Creates an empty CCaptionAndIconInfo object.
+          @return A pointer to the newly allocated CCaptionAndIconInfo object, if creation is successful.
+       */           
+      IMPORT_C static CCaptionAndIconInfo* NewL();
+      
+      /**
+          Creates an empty CCaptionAndIconInfo object.
+          @return A pointer to the newly allocated CCaptionAndIconInfo object, if creation is successful.
+                  The pointer is also put onto the cleanup stack.
+       */           
+      IMPORT_C static CCaptionAndIconInfo* NewLC();
+      
+      /**
+          Creates a CCaptionAndIconInfo object from the stream.
+               
+          @param  aStream   The stream to read the CCaptionAndIconInfo object from.
+          @return A pointer to the newly allocated CCaptionAndIconInfo object, if creation is successful.
+       */          
+      IMPORT_C static CCaptionAndIconInfo* NewL(RReadStream& aStream);
+      
+      /**
+          Creates a CCaptionAndIconInfo object.
+          
+          @param  aCaption       The caption associated with the application. The ownership is transferred to the CCaptionAndIconInfo object.
+          @param  aIconFileName  The absolute filename of the icon file. The ownership is transferred to the CCaptionAndIconInfo object.
+          @param  aNumOfAppIcons The number of icons associated with the application.
+          @return A pointer to the newly allocated CCaptionAndIconInfo object, if creation is successful.
+       */         
+      IMPORT_C static CCaptionAndIconInfo* NewL(const TDesC& aCaption, const TDesC& aIconFileName, TInt aNumOfAppIcons);
+      
+      /**
+          Creates a CCaptionAndIconInfo object.
+          
+          @param  aCaption       The caption associated with the application. The ownership is transferred to the CCaptionAndIconInfo object.
+          @param  aIconFileName  The absolute filename of the icon file. The ownership is transferred to the CCaptionAndIconInfo object.
+          @param  aNumOfAppIcons The number of icons associated with the application.
+          @return A pointer to the newly allocated CCaptionAndIconInfo object, if creation is successful.
+                  The pointer is also put onto the cleanup stack.
+       */         
+      IMPORT_C static CCaptionAndIconInfo* NewLC(const TDesC& aCaption, const TDesC& aIconFileName, TInt aNumOfAppIcons);
+     
+      ~CCaptionAndIconInfo();
+      
+      IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	  
+      IMPORT_C void InternalizeL(RReadStream& aStream);
+      
+      /**
+       @return The caption associated with the application.
+       */
+      IMPORT_C const TDesC& Caption() const;
+      
+      /**
+       @return The absolute name of the icon file associated with the application.
+       */      
+      IMPORT_C const TDesC& IconFileName() const;
+      
+      /**
+       @return The number of icons associated with the application.
+       */      
+      IMPORT_C TInt NumOfAppIcons() const;
+  private:
+      CCaptionAndIconInfo();
+      void ConstructL(const TDesC& aCaption, const TDesC& aIconFileName, TInt aNumOfAppIcons);
+      
+  private:
+      HBufC* iCaption;                                    
+      HBufC* iIconFileName;                                
+      TInt iNumOfAppIcons;                                
+      };
+
+  
+  NONSHARABLE_CLASS(CAppViewData) : public CBase
+  /*
+   * This contains view information of an application such as screenmode and an array of caption and icon info associated with each view.
+   */
+      {
+      friend class CScrRequestImpl;
+
+  public:
+      /**
+          Creates an empty CAppViewData object.
+          @return A pointer to the newly allocated CAppViewData object, if creation is successful.
+       */       
+      IMPORT_C static CAppViewData* NewL();
+      
+      /**
+          Creates an empty CAppViewData object.
+          @return A pointer to the newly allocated CAppViewData object, if creation is successful.
+                  The pointer is also put onto the cleanup stack.
+       */       
+      IMPORT_C static CAppViewData* NewLC();
+      
+      /**
+          Creates a CAppViewData object from the stream.
+               
+          @param  aStream   The stream to read the CAppViewData object from.
+          @return A pointer to the newly allocated CAppViewData object, if creation is successful.
+       */       
+      IMPORT_C static CAppViewData* NewL(RReadStream& aStream);
+      
+      /**
+          Creates a CAppViewData object.
+          
+          @param aUid                The Uid of the application.
+          @param aScreenMode         The screen mode associated with the view.
+          @param aCaptionAndIconInfo The caption and icon info associated with the view. The ownership is
+                                     also transferred to the CAppViewData object.
+          @return A pointer to the newly allocated CAppViewData object, if creation is successful.
+       */         
+      IMPORT_C static CAppViewData* NewL(TUid aUid, TInt aScreenMode, CCaptionAndIconInfo* aCaptionAndIconInfo);
+      
+      /**
+          Creates a CAppViewData object.
+          
+          @param aUid                The Uid of the application.
+          @param aScreenMode         The screen mode associated with the view.
+          @param aCaptionAndIconInfo The caption and icon info associated with the view. The ownership is
+                                     also transferred to the CAppViewData object.
+          @return A pointer to the newly allocated CAppViewData object, if creation is successful.
+                  The pointer is also put onto the cleanup stack.     
+       */       
+      IMPORT_C static CAppViewData* NewLC(TUid aUid, TInt aScreenMode, CCaptionAndIconInfo* aCaptionAndIconInfo);
+      
+      ~CAppViewData();
+      
+      IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	  
+      IMPORT_C void InternalizeL(RReadStream& aStream);
+
+      /**
+       @return The Uid of the application.
+       */
+      IMPORT_C const TUid Uid() const;
+      
+      /**
+       @return The screen mode associated with the view.
+       */      
+      IMPORT_C TInt ScreenMode() const;
+     
+      /**
+       @return The caption and icon info associated with the view.
+       */  
+      IMPORT_C const CCaptionAndIconInfo* CaptionAndIconInfo() const;
+      
+  private:
+      CAppViewData();
+      void ConstructL(TUid aUid, TInt aScreenMode, CCaptionAndIconInfo* aCaptionAndIconInfo);
+      
+  private:
+      TUid iUid;
+      TInt iScreenMode;
+      CCaptionAndIconInfo* iCaptionAndIconInfo;
+      };
+
+  
+  NONSHARABLE_CLASS(CLauncherExecutable) : public CBase
+  /**
+   * This contains information regarding the executable used to launch the application.
+   */
+      {
+      friend class CScrRequestImpl;
+  public:
+      /**
+          Creates an empty CLauncherExecutable object.
+          @return A pointer to the newly allocated CLauncherExecutable object, if creation is successful.
+       */
+      IMPORT_C static CLauncherExecutable* NewL();
+      
+      /**
+          Creates an empty CLauncherExecutable object.
+          @return A pointer to the newly allocated CLauncherExecutable object, if creation is successful.
+                  The pointer is also put onto the cleanup stack.
+       */
+      IMPORT_C static CLauncherExecutable* NewLC();
+      
+      /**
+          Creates a CLauncherExecutable object.
+          
+          @param  aTypeId   The Application type id.
+          @param  aLauncher The native executable used to launch the application
+          @return A pointer to the newly allocated CLauncherExecutable object, if creation is successful.
+
+       */
+      IMPORT_C static CLauncherExecutable* NewL(TInt aTypeId, const TDesC& aLauncher);
+      
+      /**
+          Creates a CLauncherExecutable object.
+          
+          @param  aTypeId   The Application type id.
+          @param  aLauncher The native executable used to launch the application
+          @return A pointer to the newly allocated CLauncherExecutable object, if creation is successful.
+                  The pointer is also put onto the cleanup stack.
+       */
+      IMPORT_C static CLauncherExecutable* NewLC(TInt aTypeId, const TDesC& aLauncher);
+      
+      /**
+          Creates a CLauncherExecutable object from the stream.
+               
+          @param  aStream   The stream to read the CLauncherExecutable object from.
+          @return A pointer to the newly allocated CLauncherExecutable object, if creation is successful.
+       */
+      IMPORT_C static CLauncherExecutable* NewL(RReadStream& aStream);
+      
+      IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+      
+      IMPORT_C void InternalizeL(RReadStream& aStream);
+      
+      /**
+         @return The Application type id.
+       */
+      IMPORT_C TInt TypeId() const;
+      
+      /**
+         @return The executable used to launch the application.
+       */      
+      IMPORT_C const TDesC& Launcher() const;
+      
+      IMPORT_C ~CLauncherExecutable();
+        
+  private:
+      CLauncherExecutable();
+      void ConstructL(TInt aTypeId, const TDesC& aLauncher);
+        
+  private:
+      TInt iTypeId;       ///< Application type id (same as the software type id of the component)
+      HBufC* iLauncher;   ///< The native executable used to launch the application
+      };
+
+    
+} // End of USIF Namespace
+
+#endif // APPREGENTRIES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc/appreginfo.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* appreginfo.h
+*
+*/
+
+/**
+ @file
+ @publishedAll
+ @prototype 
+*/
+
+#ifndef __APPREGINFO_H__
+#define __APPREGINFO_H__
+
+#include <e32base.h>
+	
+class RReadStream;
+class RWriteStream;
+
+namespace Usif
+    {
+// Defines a modifiable buffer descriptor to contain the caption or the short caption for an application.
+const TInt KMaxAppCaption=0x100;
+typedef TBuf<KMaxAppCaption> TAppCaption;
+
+/** Basic application information. An object of this type contains four pieces of information:
+ - The application specific Uid
+ - The full path name of the application exe
+ - The application's caption
+ - A short caption
+*/
+NONSHARABLE_CLASS (TAppRegInfo)
+	{
+    friend class CScrRequestImpl;
+public:
+
+    IMPORT_C TAppRegInfo();
+    
+    /** 
+    Constructs an application information object from the specified full application path 
+    name, UID and caption.
+
+    @param aAppUid The application specific UID. 
+    @param aAppName The full path name of the application. 
+    @param aCaption The application caption. 
+    */
+    IMPORT_C TAppRegInfo(TUid aAppUid, const TFileName& aAppName, const TAppCaption& aCaption);
+
+    /** 
+    Constructs an application information object from the specified full application path 
+    name, UID, short caption and caption.
+
+    @param aAppUid The application specific UID. 
+    @param aAppName The full path name of the application. 
+    @param aCaption The application caption. 
+    @param aShortCaption The application short caption.
+    */    
+    IMPORT_C TAppRegInfo(TUid aAppUid, const TFileName& aAppName, const TAppCaption& aCaption, const TAppCaption& aShortCaption);
+    
+    IMPORT_C void ExternalizeL(RWriteStream& aStream)const;
+    
+    IMPORT_C void InternalizeL(RReadStream& aStream);
+    
+    /**    
+     @return The application specific UID.
+     */
+    IMPORT_C TUid Uid() const;
+    
+    /**   
+     @return The full path name of the application executable.
+     */    
+    IMPORT_C TFileName FullName() const;
+    
+    /**   
+     @return The caption for the application.
+     */       
+    IMPORT_C TAppCaption Caption() const;
+    
+    /**   
+     @return The short caption for the application.
+     */       
+    IMPORT_C TAppCaption ShortCaption() const;
+    
+private:
+	/** The application specific UID. */
+	TUid iUid;
+	/** The full path name of the application. */
+	TFileName iFullName;
+	/** The caption for the application. */
+	TAppCaption iCaption;
+	/** The short caption for the application. */
+	TAppCaption iShortCaption;
+	};
+}
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc/scr.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1499 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* RSoftwareComponentRegistry provides interfaces allowing install, uninstall, and update 
+* of software components .
+* Software Components Registry interface is designed to be used by installers, application managers, device managers and the software install framework (SIF).
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef SOFTWARECOMPONENTREGISTRY_H
+#define SOFTWARECOMPONENTREGISTRY_H
+
+#include <e32base.h>
+#include <usif/usifcommon.h>
+#include <usif/scr/screntries.h>
+#include <usif/scr/appregentries.h>
+#include <scs/scsclient.h>
+#include <usif/scr/appreginfo.h>
+#include <usif/scr/screntries_platform.h>
+
+namespace Usif
+	{	 
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+	class CScrLogEntry;
+	class CLocalizedSoftwareTypeName;
+#endif SYMBIAN_ENABLE_SPLIT_HEADERS
+
+	NONSHARABLE_CLASS(RSoftwareComponentRegistry) : public RScsClientBase
+	/*
+		The clients of Software Component Registry (SCR) use this class to communicate 
+		with the SCR server. 
+		
+		This class provides several sets of functionality:
+		(i) Components' management, such as adding and removing components, registering files and other operations
+		(ii) Transaction management, which allows rolling back or committing a set of mutating operations together.
+		(iii) Read-only queries, such as getting component properties, or component information. 
+		
+		Operations which update or create new components in the SCR are restricted to the registered installers or layered execution
+		environments (LEE). For example, only a Java installer or the Java Virtual Machine (JVM) can create new Java components. Additionally,
+		only the same entities can change properties of or delete already existing Java components.
+		
+		Please note that mutating functions of this class can be used if any of the following conditions applies:
+		- There is no active transaction or reading operation with component or file views.
+		- A transaction exists and has been started by this connection.
+		
+		Additionally, please note that SCR limits the size of strings it receives in input to 512 characters, e.g. supplying component names, property names longer than that
+		will result in KErrArgument.
+	 */
+		{
+	
+	public:
+		/**
+			Default constructor of SCR session.
+		 */
+		IMPORT_C RSoftwareComponentRegistry();
+		
+		/**
+			Opens a connection to the SCR server.
+			@return KErrNone, if the connection is successful. Otherwise, a system-wide error code.  
+		 */
+		IMPORT_C TInt Connect();
+		
+		/**
+			Closes the connection with the SCR server.
+		 */
+		IMPORT_C void Close();
+		
+		/**
+			The SCR allows its clients to perform all mutable operations related to a software component management operation
+			(e.g. install, uninstall, upgrade, and replace) within a single transaction. If a software component management operation 
+			fails or is aborted then the SCR will revert to a consistent state.  If mutating operations are not done under a transaction, 
+			it will be impossible to roll them back automatically in conjunction with other operations.
+
+			A transaction is started and persists throughout the connection until the next commit/rollback function call.
+			The transaction automatically rolls back if the server connection is closed without commit/rollback functions 
+			being invoked.  If the device unexpectedly shuts down while a transaction is in progress, the SCR server will 
+			revert to consistent state on next usage. 
+			 
+			Please note that nested/concurrent transactions are NOT supported. 
+			 
+			N.B. It is impossible to start a transaction if at least one component or file view (e.g. RSoftwareComponentRegistryView and
+			RSoftwareComponentRegistryFilesList) owned by another SCR session is in progress. 
+			
+			N.B. Transaction operations are permitted only to registered installers or execution environments.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction is already in progress on the SCR server.
+			@leave KErrScrReadOperationInProgress If one or more component views or file lists owned by other SCR sessions are open.
+			@leave KErrPermissionDenied An unauthorised process attempted a transaction operation. 
+			@leave Or system-wide error codes.
+		 */
+		IMPORT_C void CreateTransactionL();
+		
+		/**
+			Rolls back the transaction started by this session by reverting all the changes made during the transaction. 
+			
+			N.B. Transaction operations are permitted only to registered installers or execution environments.			
+			
+			@leave KErrScrNoActiveTransaction There is no active transaction on the SCR Server started by this connection.
+			@leave KErrPermissionDenied An unauthorised process attempted a transaction operation.
+			@leave Or system-wide error codes.
+		 */ 
+		IMPORT_C void RollbackTransactionL();
+		
+		/**
+			Commits the transaction started by this session.
+			
+			N.B. Transaction operations are permitted only to registered installers or execution environments.			
+			
+			@leave KErrScrNoActiveTransaction There is no active transaction on the SCR Server started by this connection.
+			@leave KErrPermissionDenied An unauthorised process attempted a transaction operation.
+			@leave Or system-wide error codes.
+		 */
+		IMPORT_C void CommitTransactionL();
+		
+		/**
+			Adds a new software component entry to the SCR database.
+			
+			If the component and vendor names of the software component being installed are NOT localizable, 
+			then this API should be used to add a new component.
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+				
+			@param aName The non-localizable name of the component being added.
+			@param aVendor The non-localizable vendor name of the component being added.
+			@param aUniqueSwTypeName The non-localized, unique software type name, such as @see KSoftwareTypeNative and @see KSoftwareTypeJava.
+			@param aGlobalId A named, nullable, case-sensitive string used to specify a deterministic identifier for the component 
+						that is unique within the context of that software type. The global component id might be 
+						the package UID for native applications or the MIDlet name/vendor pair for Java MIDLets, etc. 
+						Note that if KNullDesC is provided, the global identifier will be empty.
+			@param aCompOpType The type of the component operation. Typical operations are install or upgrade. @see TScrComponentOperationType
+			@return  The component ID of the newly added entry.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+		 */
+		IMPORT_C TComponentId AddComponentL(const TDesC& aName, const TDesC& aVendor, const TDesC& aUniqueSwTypeName, const TDesC* aGlobalId=NULL, TScrComponentOperationType aCompOpType=EScrCompInstall);
+		
+		/**
+			Adds a new software component entry to the SCR database.
+			If the component and vendor names of the software component being installed are localizable,
+			then this API should be used to add a new component.
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+					
+			@param aComponentInfo The list of localizable component information (such as vendor and name) with one entry per each supported locale.
+			@param aUniqueSwTypeName The non-localized, unique software type name, e.g. "Native".
+			@param aGlobalId A named, nullable, case-sensitive string used to specify a deterministic identifier for the component 
+							that is unique within the context of that software type. The global component id would be 
+							the package UID for native applications or the midlet-names for Java, etc. 
+							Note that if KNullDesC is provided, the global identifier will be empty.
+			@param aCompOpType The type of the component operation. Typical operations are install or upgrade. @see TScrComponentOperationType
+			@return  The component ID of the newly added entry. 
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+		 */
+		IMPORT_C TComponentId AddComponentL(const RPointerArray<CLocalizableComponentInfo>& aComponentInfo, const TDesC& aUniqueSwTypeName, const TDesC* aGlobalId=NULL, TScrComponentOperationType aCompOpType=EScrCompInstall);
+		
+		/** 
+			Adds a new dependency between two software components (supplier and dependant) of any type.
+			For example, if VNC Viewer is ported to the Symbian OS using the POSIX library, VNC Viewer
+			depends on the POSIX library. Here, VNC Viewer is dependant, whereas the POSIX library is supplier. 
+			
+			A dependency exists on global component ids, since a dependency is a global relation between 
+			two components, regardless to their status on a particular system. While local component ids 
+			(@see TComponentId) are private to a particular device and can change for the same global id 
+			in the case of upgrades or reinstalls, global component ids are unique and equal for the same 
+			component on any device.
+			
+			Since a dependency is defined using global ids, it can be added even if the participant
+			components don't exist in the system. 
+			N.B. A duplicate dependency is not allowed. 
+					
+			@param aSupplierVerCompId The versioned software component identifier of the supplier component. 
+			@param aDependantGlobalCompId The global software component identifier of the dependant component.
+			@leave KErrAlreadyExists If the dependency is already defined in the SCR.
+			@leave Or other system-wide error codes.
+		 */
+		IMPORT_C void AddComponentDependencyL(const CVersionedComponentId& aSupplierVerCompId, const CGlobalComponentId& aDependantGlobalCompId);
+
+		/**
+			Adds a new named 8-bit descriptor property to the registry for a given software component and locale. 
+			If the property already exits, then its value is updated.
+						
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			 	
+			@param aComponentId The unique ID of the given software component.
+			@param aName The name of the software component property.
+			@param aValue The value of the software component property.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes. 
+		 */
+		
+		IMPORT_C void SetComponentPropertyL(TComponentId aComponentId, const TDesC& aName, const TDesC8& aValue);		
+		
+		/**
+			Adds a new named localizable 16-bit string property to the registry for a given software component and locale. 
+			If the property already exists, then its value is updated.
+			
+			N.B. If the property exists with the same value but for a different locale, it is NOT replaced, but instead added for the new locale.
+			N.B. This API should not be used for raw binary data. For binary data, the TDesC8 variant of SetComponentProperty should be used instead.
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			 	
+			@param aComponentId The unique ID of the given software component.
+			@param aName The name of the software component property.
+			@param aValue The value of the software component property.
+			@param aLocale The language code of the property. The default value is non-localized property.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes. 
+		 */
+		
+		IMPORT_C void SetComponentPropertyL(TComponentId aComponentId, const TDesC& aName, const TDesC& aValue, TLanguage aLocale=KNonLocalized);
+		
+		/**
+			Adds a new named numeric property to the registry for a given software component. If the property already
+			exits, then its value is updated. Signed values from -2^63+1 to +2^63-1 are supported. 
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+					 	
+			@param aComponentId The unique ID of the given software component.
+			@param aName The name of the software component property.
+			@param aValue The value of the software component property. Can be TInt; if the value cannot exceed 32-bit range, as TInt64 provides automatic casting from TInt.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+	     */
+		IMPORT_C void SetComponentPropertyL(TComponentId aComponentId, const TDesC& aName, TInt64 aValue);
+						
+		/**
+			Registers a file to a given software component.
+			
+			Before registration, tests whether the provided filename is syntactically correct. 
+			For more information about the syntax, check @see RFs::IsValidName.
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			    
+			@param aComponentId The unique ID of the given software component.
+			@param aFileName The fully qualified name of the file being registered.
+			@param aConsiderForInstalledDrives This parameter specifies whether the list of installed drives ( @see CComponentEntry::InstalledDrives) should be maintained as a result of this operation. 
+			In most cases, this should be left at the default setting, unless a file is registered for uninstall purposes only and is not actually present on the system, for example a possible temporary file which might be created later by the component's application(s)
+			Please note that if UnregisterComponentFileL is later used on the component, this parameter will not apply, and the file registration may still affect the list of installed drives.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave KErrArgument If the file name is invalid or is not fully qualified
+			@leave Or system-wide error codes.
+		 */	
+		IMPORT_C void RegisterComponentFileL(TComponentId aComponentId, const TDesC& aFileName, TBool aConsiderForInstalledDrives = ETrue); 
+		
+		/**
+			Adds a new named 8-bit descriptor property to the registry for a given file and software component. If the property already
+			exits, then its value is updated.
+			
+			A file property allows adding custom information about a component’s file ownership, for example, a native installer 
+			may associate custom operations to be done on uninstall for a particular file.
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			
+			@param aComponentId The unique ID of the given software component.
+			@param aFileName  The fully qualified name of the file.
+			@param aPropName  The name of the file property being added.
+			@param aPropValue The value of the file property being set.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+		*/
+		IMPORT_C void SetFilePropertyL(TComponentId aComponentId, const TDesC& aFileName, const TDesC& aPropName, const TDesC8& aPropValue);
+		
+		/**
+			Adds a new named numeric property to the registry for a given file and software component. 
+			If the property already exists, it is just updated.
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+				
+			@param aComponentId The unique ID of the given software component.	 	
+			@param aFileName  The fully qualified name of the file.
+			@param aPropName  The name of the file property being added.
+			@param aPropValue The value of the file property being added.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+		 */
+		IMPORT_C void SetFilePropertyL(TComponentId aComponentId, const TDesC& aFileName, const TDesC& aPropName, TInt aPropValue);
+		
+		/**
+			Adds a new localized component name for a given software component. 
+			If the localized name already exists for the specified locale, or one of the locales in its downgrade path (@see BaflUtils::GetDowngradePathL),
+			then it is updated. 
+			If no locale is specified, then the default component name is updated (or added if no default name exists).
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			
+			@param aComponentId The unique ID of the given software component.
+			@param aName The new value of the component name for a given locale.
+			@param aLocale The language code of the requested locale. The default value is non-localized.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+		*/
+		IMPORT_C void SetComponentNameL(TComponentId aComponentId, const TDesC& aName, TLanguage aLocale=KNonLocalized);
+		
+		/**
+			Adds a new localized component vendor for a given software component. 
+			If the localized vendor name already exists for the specified locale, or one of the locales in its downgrade path (@see BaflUtils::GetDowngradePathL),
+			then it is updated. 
+			If no locale is specified, then the default vendor name is updated (or added if no default vendor name exists).
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+						
+			@param aComponentId The unique ID of the given software component.
+			@param aVendor The new value of the vendor name for a given locale.
+			@param aLocale The language code of the requested locale. The default value is non-localized.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+	    */
+		IMPORT_C void SetVendorNameL(TComponentId aComponentId, const TDesC& aVendor, TLanguage aLocale=KNonLocalized);
+		
+		/**
+			Updates the version of a given software component.
+			
+			N.B. The default value of component version is NULL.
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+						
+			@param aComponentId The unique ID of the given software component.
+			@param aVersion The new value of the version attribute.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+		 */
+		IMPORT_C void SetComponentVersionL(TComponentId aComponentId, const TDesC& aVersion);
+		
+		/**
+			Sets whether the component is removable.
+			When a component is added, this is set to True by default (i.e. all non-ROM components are removable unless stated otherwise).
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			 
+			@param aComponentId The unique ID of the given software component.
+			@param aValue ETrue to set component as removable. EFalse to set component as unremovable.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+			
+			@capability AllFiles Creating non-removable components requires AllFiles.
+		 */
+		IMPORT_C void SetIsComponentRemovableL(TComponentId aComponentId, TBool aValue);
+		
+		/**
+			Sets whether the component is DRM protected.
+			When a component is added, this is set to False by default (i.e. all components are non-DRM protected unless stated otherwise).
+					
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+					 
+			@param aComponentId The unique ID of the given software component.
+			@param aValue ETrue to set component as DRM protected. EFalse to set component as non-DRM protected.
+					
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+					
+			@capability WriteDeviceData Creating DRM protected components requires WriteDeviceData.
+		 */
+		IMPORT_C void SetIsComponentDrmProtectedL(TComponentId aComponentId, TBool aValue);
+		
+		/**
+			Sets the hidden attribute of a component indicating that the component shouldn't be displayed in the list of installed components.
+			When a component is added, this is set to False by default (i.e. all components are visible unless stated otherwise).
+			
+			N.B. SCR does not enforce usage of this flag, and application managers may ignore it, e.g. in an admin view.
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+							 
+			@param aComponentId The unique ID of the given software component.
+			@param aValue ETrue to set component as hidden. EFalse to set component as non-hidden.
+							
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+							
+			@capability WriteDeviceData Creating hidden components requires WriteDeviceData.
+		 */
+		IMPORT_C void SetIsComponentHiddenL(TComponentId aComponentId, TBool aValue);
+		
+		/**
+			Sets the Known-Revoked attribute of a component. If this attribute is true, then it indicates 
+			a revocation check was performed during or after the installation and the component
+			was found to be revoked. When a component is added, this is set to False by default.
+							
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+							 
+			@param aComponentId The unique ID of the given software component.
+			@param aValue ETrue to set component as known-revoked. EFalse to set component as known-unrevoked.
+							
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+							
+			@capability WriteDeviceData Creating known-revoked components requires WriteDeviceData.
+		 */
+		IMPORT_C void SetIsComponentKnownRevokedL(TComponentId aComponentId, TBool aValue);
+		
+		/**
+			Sets the Origin-Verified attribute of a component. If this attribute is true, then it indicates that 
+			the installer has verified the originator of the software component by using appropriate checking mechanisms (e.g. certificates). 
+			If the attribute is false, it means that such a verification has not been performed, or that the installer does not support origin verification. 
+			When a component is added, this is set to False by default.
+							
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+							 
+			@param aComponentId The unique ID of the given software component.
+			@param aValue ETrue to set component as origin-verified EFalse to set component as origin-non-verified.
+							
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+							
+			@capability WriteDeviceData Creating origin verified components requires WriteDeviceData.
+		 */
+		IMPORT_C void SetIsComponentOriginVerifiedL(TComponentId aComponentId, TBool aValue);
+
+		/**
+			Sets the total size in bytes of the files owned by a given component. Note that SCR doesn't maintain this value.
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+									 	
+			@param aComponentId The unique ID of the given software component.
+			@param aComponentSizeInBytes The size of the component's files in bytes.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+		 */
+		IMPORT_C void SetComponentSizeL(TComponentId aComponentId, TInt64 aComponentSizeInBytes);
+		
+		/**
+			Deletes a specific property entry of a given software component.
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			N.B. If the component or property doesn't exist, the function completes successfully.
+			N.B. If the property is specified for multiple locales, it is deleted for all of them.
+			 	
+			@param aComponentId The unique ID of the given software component.
+			@param aPropName The name of the component property being deleted.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+	     */
+		IMPORT_C void DeleteComponentPropertyL(TComponentId aComponentId, const TDesC& aPropName);
+		
+		/** 
+			Deletes a specific file property entry for a given file and software component.
+						
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			
+			@param aComponentId The unique ID of the given software component.
+			@param aFileName The fully qualified name of the file.
+			@param aPropName The name of the file property being deleted.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+		 */
+		IMPORT_C void DeleteFilePropertyL(TComponentId aComponentId, const TDesC& aFileName, const TDesC& aPropName);
+		
+		/**
+			Unregisters a specific file entry from a given software component.
+			Note that all associated file properties for the same component are removed as well.
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			N.B. This operation also deletes all the corresponding file properties.
+			  	
+			@param aComponentId The unique ID of the given software component.
+			@param aFileName The fully qualified name of the file being deregistered.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+	     */
+		IMPORT_C void UnregisterComponentFileL(TComponentId aComponentId, const TDesC& aFileName);
+		
+		/**
+			Deletes a sofware component entry and all its data from the registry, including properties and file registration records.
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			N.B. If the component doesn't exist, the function completes successfully.
+				
+			@param aComponentId The unique ID of the given software component.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or system-wide error codes.
+		*/
+		IMPORT_C void DeleteComponentL(TComponentId aComponentId);
+		
+		/** 
+			Deletes an existing dependency between two software components (supplier and dependant) of any type.
+			(@see RSoftwareComponentRegistry::AddComponentDependencyL for more information about component dependency.)
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			N.B. If the dependency doesn't exist, the function completes successfully.
+							
+			@param aSupplierGlobalCompId The global software component identifier of the supplier component. 
+			@param aDependantGlobalCompId The global software component identifier of the dependant component.
+			@leave System-wide error codes.
+		 */
+		IMPORT_C void DeleteComponentDependencyL(const CGlobalComponentId& aSupplierGlobalCompId, const CGlobalComponentId& aDependantGlobalCompId);
+		
+		/**
+			Retrieves a specific software component entry with the component name and vendor for a particular locale. 
+							
+			@param aComponentId The unique ID of the given software component.
+			@param aEntry An output parameter for returning information for the component matching the given id. 
+				          If no such component is present, this parameter remains unchanged.
+			@param aLocale The language code of the requested locale. The default value is KUnspecifiedLocale.
+						   If KUnspecifiedLocale is provided, the current locale with its downgraded path (@see BaflUtils::GetDowngradePathL) is used to find
+						   the names. If it fails, then the non-localized names are returned. If non-localized versions
+						   couldn't be found too, the first available language for the component is retrieved.
+						   If KNonLocalized is provided, then the non-localized component and vendor names are returned,
+						   and if non-localized versions don't exist, the function will leave with KErrScrUnsupportedLocale.
+						   If a particular language is provided, then the names are searched for this particular language
+						   and its downgraded languages. If there is no name and vendor with the provided language, then the function leaves with KErrScrUnsupportedLocale.
+		    @return If the requested component is found, then ETrue is returned. Otherwise, EFalse.
+		    @leave KErrScrUnsupportedLocale The requested component name/vendor couldn't be found for the specified locale.
+		    @leave System-wide error codes.
+	     */
+		IMPORT_C TBool GetComponentL(TComponentId aComponentId, CComponentEntry& aEntry, TLanguage aLocale=KUnspecifiedLocale) const;							
+		
+		/**
+		    Retrieves the localized information from ComponentLocalizable table for a given component id.
+							
+			@param aComponentId The unique ID of the given software component.
+			@param aCompLocalizedInfoArray An output parameter for returning localized information for a given component id. 
+			@leave System-wide error codes.
+			@capability  ReadUserData Accessing a component's localized information requires ReadUserData
+		*/
+		IMPORT_C void GetComponentLocalizedInfoL(TComponentId aComponentId, RPointerArray<CLocalizableComponentInfo>& aCompLocalizedInfoArray) const;
+		
+		/**
+			Retrieves the array of all software component IDs in the SCR, optionally matching a particular filter.
+				
+			@param aComponentIdList The component Id list of all sofwtare components.
+			@param aFilter Pointer to the filter object which will be used by the SCR to enumerate the software components.
+						   If no filter is provided, all software components in the SCR are listed.
+		
+			@leave System-wide error codes.
+
+			@capability  ReadUserData Accessing list of components installed by the user requires ReadUserData
+		 */
+		IMPORT_C void GetComponentIdsL(RArray<TComponentId>& aComponentIdList, CComponentFilter* aFilter=NULL) const;
+		
+		/**
+			Retrieves the local component id of a given global component id.
+			
+			@param aGlobalIdName A deterministic identifier for the component that is unique within the context of that software type.
+			@param aUniqueSwTypeName The non-localized, unique software type name, such as @see KSoftwareTypeNative and @see KSoftwareTypeJava.
+			@return The local unique component id.
+			
+			@leave KErrNotFound Software component with this global id is not present in the system.
+			@leave System-wide error codes.
+		 */
+		IMPORT_C TComponentId GetComponentIdL(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName) const;
+					
+		/**
+			Retrieves a specific software component entry with the specified global id and software type name for a given locale. 
+							
+			@param aGlobalIdName A deterministic identifier for the component that is unique within the context of that software type.
+			@param aUniqueSwTypeName The non-localized, unique software type name, such as @see KSoftwareTypeNative and @see KSoftwareTypeJava.
+			@param aLocale The language code of the requested locale. The default value is KUnspecifiedLocale.
+						   If KUnspecifiedLocale is provided, the current locale with its downgraded path (@see BaflUtils::GetDowngradePathL) is used to find
+						   the names. If it fails, then the non-localized names are returned. If non-localized versions
+						   couldn't be found too, the first available language for the component is retrieved.
+						   If KNonLocalized is provided, then the non-localized component and vendor names are returned,
+						   and if non-localized versions don't exist, the function will leave with KErrScrUnsupportedLocale.
+						   If a particular language is provided, then the names are searched for this particular language
+						   and its downgraded languages. If there is no name and vendor with the provided language, then the function leaves with KErrScrUnsupportedLocale.
+		    @return aEntry A pointer to the component entry object for the given global component id. 
+		    
+		    @leave KErrScrUnsupportedLocale The component requested with the global id couldn't be found for the specified locale.
+		    @leave System-wide error codes.
+		 */
+		IMPORT_C CComponentEntry* GetComponentL(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName, TLanguage aLocale=KUnspecifiedLocale) const;
+		
+		/**
+			Retrieves the list of supplier components with the range of versions on which a given 
+			component depends. The range of versions here indicates specific versions of the returned 
+			components (suppliers) which the given component (dependant) depend on.
+
+			@param aDependantGlobalId The global component id of the given software component.
+			@param aSupplierList The versioned component id list of supplier components for the given dependant component.
+			@leave System-wide error codes.
+		 */
+		IMPORT_C void GetSupplierComponentsL(const CGlobalComponentId& aDependantGlobalId, RPointerArray<CVersionedComponentId>& aSupplierList) const;
+				
+		/**
+			Retrieves the list of components (dependants) with the range of versions that depend on 
+			a given component (supplier). The range of versions here indicates specific versions of 
+			the given component which the returned components depend on.
+					
+			@param aSupplierGlobalId The global component id of the given software component.
+			@param aDependantList The versioned component id list of dependant components for the given supplier component.
+			@leave System-wide error codes.
+		 */
+		IMPORT_C void GetDependantComponentsL(const CGlobalComponentId& aSupplierGlobalId, RPointerArray<CVersionedComponentId>& aDependantList) const;
+
+		/**
+			Retrieves the array of properties owned by a specific file registered to a given component.
+			
+			@param aComponentId The unique ID of the given software component.	
+			@param aFileName The fully qualified name of the file.
+			@param aProperties An output parameter for returning the list of properties owned by the given file.
+			@leave System-wide error codes.
+		 */
+		IMPORT_C void GetFilePropertiesL(TComponentId aComponentId, const TDesC& aFileName, RPointerArray<CPropertyEntry>& aProperties) const;
+		
+		/**
+			Retrieves a specified property entry for a given file and software component.
+					
+			@param aComponentId The unique ID of the given software component.
+			@param aFileName The fully qualified name of the file.
+			@param aPropertyName The name of the requested property.
+			@return Returns a pointer to the property object containing the requested file property.
+				    The ownership is transferred. If the property couldn't be found, then NULL is returned.
+			@leave System-wide error codes.	    
+		 */
+		IMPORT_C CPropertyEntry* GetFilePropertyL(TComponentId aComponentId, const TDesC& aFileName, const TDesC& aPropertyName) const;
+		
+		/**
+			Retrieves the number of files registered by a component.
+					
+			@param aComponentId The unique ID of the given software component.
+			@return The number of registered files.
+			@leave System-wide error codes.	    
+		 */
+		IMPORT_C TUint GetComponentFilesCountL(TComponentId aComponentId) const;		
+		
+		/**
+			Retrieves the set of components which register a given file.
+				
+			@param aFileName The fully qualified name of the file.
+			@param aComponents An output parameter for returning for the list of components which own the given file.
+			@leave System-wide error codes.	
+		 */ 
+		IMPORT_C void GetComponentsL(const TDesC& aFileName, RArray<TComponentId>& aComponents) const;
+		
+		/**
+			Retrieves a specified property for a given component, property name and locale. 
+			
+			When searching for localizable properties, it is possible that the requested language 
+			variant is not available, however, there may be other language variants that are acceptable.
+			Therefore, a language downgrade path that starts with the language associated with the requested 
+			locale and ends with the least best match is first created. Then the downgrade path is used to
+			search for a language specific property and the first match is returned to the user.
+	
+			@param aComponentId The unique ID of the given software component.
+			@param aPropertyName The name of the component property.
+			@param aLocale The optional language code of the requested locale. The default value is KUnspecifiedLocale.
+						   If KUnspecifiedLocale is provided, the current locale with its downgraded path (@see BaflUtils::GetDowngradePathL) is used 
+						   as explained above to find the property.  If it fails, then the non-localized version is looked up.
+						   If non-localized version couldn't be found too, the function leaves with KErrNotFound.
+						   If KNonLocalized is provided, then the non-localized version of the property is returned,
+						   If non-localized version doesn't exist, then the function will leave with KErrNotFound.
+						   If a particular language is provided, then the property is searched for this particular language
+						   and its downgraded languages. If there is no property with the provided language, then the function 
+						   leaves with KErrNotFound.
+			@return Returns a pointer to the property object containing the requested component property entry.
+					The ownership is transferred. If the property couldn't be found, then NULL is returned.
+            @leave A system-wide error code.
+		 */
+		IMPORT_C CPropertyEntry* GetComponentPropertyL(TComponentId aComponentId, const TDesC& aPropertyName, TLanguage aLocale=KUnspecifiedLocale) const;
+		
+		/**
+			Retrieves the set of properties for a particular locale belonging to the given component.
+			if no locale is specified, then the current locale is used as default.
+			
+			For more information about searching for localized properties look at @see RSoftwareComponentRegistry::GetComponentPropertyL.
+				
+			@param aComponentId The unique ID of the given software component.
+			@param aProperties An output parameter for returning the list of properties which owned by the given component.
+			@param aLocale The optional language code of the requested locale. The default value is KUnspecifiedLocale.
+						   If KUnspecifiedLocale is provided, the current locale with its downgraded path (@see BaflUtils::GetDowngradePathL) is used 
+						   as explained above to find properties.  If it fails, then the non-localized version is looked up.
+						   If non-localized versions couldn't be found too, the function leaves with KErrNotFound.
+						   If KNonLocalized is provided, then the non-localized versions of properties are returned,
+						   If non-localized versions don't exist, then the function will leave with KErrNotFound.
+						   If a particular language is provided, then the properties are searched for this particular language
+						   and its downgraded languages. Otherwise, the function leaves with KErrNotFound.
+            @leave A system-wide error code.
+		*/
+		IMPORT_C void GetComponentPropertiesL(TComponentId aComponentId, RPointerArray<CPropertyEntry>& aProperties, TLanguage aLocale=KUnspecifiedLocale) const;
+				
+		/**
+			Returns whether all drives registered for the given component are present.
+			The list of drives is derived using the set of files registered by the component.
+			
+			N.B. For removable media, this method does NOT check that the actual media matches the one which contains the component's files.
+			It just verifies that any media is present in the drive.
+			
+			@param aComponentId The unique ID of the software component.
+			@return ETrue, if all drives registered for the component are present; otherwise EFalse.
+			@publishedPartner
+		 */
+		IMPORT_C TBool IsMediaPresentL(TComponentId aComponentId) const;
+		
+		/** 
+			Sets the SCOMO state of a given component.
+			
+			@param aComponentId The unique ID of the given software component. 	
+			@param aScomoState The new SCOMO state of the component.
+            @leave A system-wide error code.
+		 */
+		IMPORT_C void SetScomoStateL(TComponentId aComponentId, TScomoState aScomoState) const;
+		
+		/** 
+			Retrieves the UID of the plug-in which is responsible for a given MIME type.
+					
+			@param aMimeType The MIME type. 	
+			@return The UID of the plug-in.
+			@leave KErrSifUnsupportedSoftwareType There is no corresponding plug-in for this MIME type.
+            @leave A system-wide error code.			
+			@internalTechnology
+		 */
+		IMPORT_C TUid GetPluginUidL(const TDesC& aMimeType) const;
+		
+		/** 
+			Retrieves the UID of the plug-in that installed a given component.
+							
+			@param aComponentId Component's local identifier. 	
+			@return The UID of the plug-in.
+            @leave A system-wide error code.
+			@internalTechnology
+		 */
+		IMPORT_C TUid GetPluginUidL(TComponentId aComponentId) const;
+		
+		/**
+			Add a new software type name to the SCR database.
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			This can be called only by sisregistry.
+
+			@param aUniqueSwTypeName Non-localized unique software type name.
+			@param aSifPluginUid The SIF plug-in UID of the installer which is responsible for installing components with this software type
+			@param aInstallerSecureId The secure id of the installer which is responsible for installing components with this software type
+			@param aExecutionLayerSecureId The secure id of the installer's execution layer which refers to an executable that interprets or  
+			                               executes byte code for programs written in a high level language Java, Python, Widgets, etc.
+			                               This paramater is optional. If it doesn't exist, it should be equal to the installer's secure id.                                
+			@param aMimeTypes The list of MIME types associated with this software type.
+			@param aLocalizedSwTypeNames A pointer to the list of optional localized software type names.
+            @leave A system-wide error code.
+			@internalTechnology
+		 */
+		IMPORT_C void AddSoftwareTypeL(const Usif::CSoftwareTypeRegInfo& aSwTypeRegInfo);
+		
+		/**
+			Deletes a sofware type name entry and all its mime types from the registry.
+			
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+			N.B. If the software type doesn't exist, the function completes successfully.
+			
+			@param aUniqueSwTypeName Non-localized unique software type name.
+			@param aDeletedMimeTypes An output parameter, where the MIME types deleted from SCR as a result of this operation will be stored.
+            @leave A system-wide error code.
+			@internalTechnology
+		 */
+		IMPORT_C void DeleteSoftwareTypeL(const TDesC& aUniqueSwTypeName, RPointerArray<HBufC>& aDeletedMimeTypes);
+	
+		/**
+			Returns whether the software installer of a given component is present.
+					
+			@param aComponentId The unique ID of the given software component. 
+			@return ETrue, if the software installer of the given component is present; otherwise EFalse.
+            @leave A system-wide error code.
+		 */
+		IMPORT_C TBool IsComponentOrphanedL(TComponentId aComponentId);
+		
+		 /**
+			Retrieve the log entries recorded by SCR. A log entry (@see Usif::CScrLogEntry) contains information 
+			about the component operation (installation, uninstallation or upgrade) made by SCR.
+		
+			@param aLogEntries The caller supplies an empty array of CScrLogEntry which is loaded
+					with the log entries from the SCR. If the SCR Log is empty then the array count 
+					will be zero. The caller is responsible for deleting all memory.
+			@param aUniqueSwTypeName Optional parameter for non-localized unique software type name.
+									 If provided, only the log entries of the given software type are returned.
+            @leave A system-wide error code.
+			@capability ReadUserData
+		 */
+		IMPORT_C void RetrieveLogEntriesL(RPointerArray<CScrLogEntry>& aLogEntries, const TDesC* aUniqueSwTypeName=NULL) const;
+		
+		/**
+			Compares two generic, arbitrary length, dotted decimal version numbers. e.g. "1.2.32.4" < "1.3"
+			
+			@param aVersionLeft The version on the left side of the equality.
+			@param aVersionRight The version on the right side of the equality.
+			@return A positive value indicates that the left version is greater than the right version. 
+				    A negative value indicates that the left version is less than the right version. 
+				    Zero indicates that the left and right versions are equal. 
+            @leave A system-wide error code.
+		 */
+		IMPORT_C static TInt CompareVersionsL(const TDesC& aVersionLeft, const TDesC& aVersionRight);
+
+		/**
+			Returns whether the component is on a read-only drive.
+
+			@param aComponentId The unique ID of the software component. 
+			@return ETrue, if the component is present on a read only drive; otherwise EFalse.
+            @leave A system-wide error code.
+		 */
+		IMPORT_C TBool IsComponentOnReadOnlyDriveL(TComponentId aComponentId) const;
+		
+		/**
+			Returns whether the component is present on the device. As a component might be 
+			installed to a media card which was later removed, not all components registered are 
+			necessarily present. Please note that IsMediaPresentL does not check whether the media 
+			card containing the component is present. 
+			
+			N.B. This function relies on values reported by installers, and thus, component presence 
+			might not be updated immediately when a media card is replaced.
+			
+			@param aComponentId The unique ID of the component.
+			@return ETrue, if the component is present; otherwise EFalse.
+			
+            @leave A system-wide error code.
+		 */
+		IMPORT_C TBool IsComponentPresentL(TComponentId aComponentId) const;
+		
+		/**
+			Sets whether the software component is present fully after being installed on to a 
+			removable drive.
+
+			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+					 
+			@param aComponentId The unique ID of the given software component.
+			@param aValue ETrue to set component as present. EFalse to set component as not present.
+			
+			@leave KErrScrWriteOperationInProgress If a transaction started by another session is in progress.
+			@leave KErrScrReadOperationInProgress If a read operation with component or file views is in progress.
+			@leave Or a system-wide error code.
+		 */
+		IMPORT_C void SetIsComponentPresentL(TComponentId aComponentId, TBool aValue);
+		
+		/**
+			Gets the installed supported language ID's array.
+
+			@param aComponentId The unique ID of the given software component.
+			@param aMatchingSupportedLanguages RArray containing the list of installed supported languages
+			
+			@leave A system-wide error code.
+            @capability  ReadUserData Accessing the installed supported language ID's array requires ReadUserData
+		 */
+		IMPORT_C void GetComponentSupportedLocalesListL(TComponentId aComponentId, RArray<TLanguage>& aMatchingSupportedLanguages) const;
+		
+		/**
+		    Adds a new application entry to the SCR database.
+		    
+		    N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+		    
+		    @param aComponentId The componentId associated to the application   
+		    @param aApplicationRegistrationData The information associated with the application.         
+		    @leave KErrArgument If the AppUid or AppFile in aApplicationRegistrationData is NULL
+                   Or a system-wide error code.
+		*/
+	
+		IMPORT_C void AddApplicationEntryL(const TComponentId aComponentId, const CApplicationRegistrationData& aApplicationRegistrationData);
+		
+		/**
+		    Deletes the information of all applications associated to an existing component entry from the SCR database.
+		    
+		    N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+		    
+		    @param aComponentId The componentId, associated to which, all applications are deleted.
+		    @leave A system-wide error code.
+		*/
+		IMPORT_C void DeleteApplicationEntriesL(TComponentId aComponentId);
+		
+		/**
+            Deletes an application entry from the SCR database.
+            
+            N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
+            
+            @param aApplicationUid Uid of the application to be deleted.
+            @leave A system-wide error code.            
+        */
+        IMPORT_C void DeleteApplicationEntryL(TUid aApplicationUid);
+
+        /**
+            Gets the Component Id associated to a given Application Uid
+
+            @param aAppUid The AppUid of an application.
+            @return The componentId associated with the given application.  
+            @leave A system-wide error code.                      
+         */
+        IMPORT_C TComponentId GetComponentIdForAppL(TUid aAppUid) const;
+
+        /**
+            Gets the array of Application Uids associated to a given Component.
+
+            @param aCompId ComponentId of a component whose associated applications need to be fetched.
+            @param aAppUids Returns the array of application Uids associated with the component.
+            @leave A system-wide error code.            
+         */
+        IMPORT_C void GetAppUidsForComponentL(TComponentId aCompId, RArray<TUid>& aAppUids) const;
+        
+        /**
+            Returns the array of application launchers.
+                N.B. This function can only be used by AppArc to determine the launcher associated with 
+                an application.
+    
+            @param aLaunchers The current list of launchers present on the device.
+            @leave A system-wide error code.            
+         */
+        IMPORT_C void GetApplicationLaunchersL(RPointerArray<CLauncherExecutable>& aLaunchers) const;
+        		
+	private:
+
+		TInt SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const;
+		template <class C> void SendDependencyArgsL(TInt aFunction, const C& aSupplierId, const CGlobalComponentId& aDependantGlobalCompId);
+		template <class C> friend HBufC8* GetObjectDataLC(const C& aConnection, TInt aFunction, TInt aDataSize);
+		template <class T, class C> friend T* GetObjectL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs);
+		template <class T, class C> friend TBool GetObjectL(const C& aConnection, T& aObject, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs);
+		template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RArray<T>& aArray);
+		template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RPointerArray<T>& aArray);
+		};
+	
+	
+	NONSHARABLE_CLASS(RSoftwareComponentRegistryView) : public RScsClientSubsessionBase
+	/**
+		This class opens a sub-session to the SCR server and sends a request to create a component view
+		by using the supplied filter on the server side.
+	 */
+		{
+	public:
+		/**
+			Default constructor of registry view sub-session.
+		 */
+		IMPORT_C RSoftwareComponentRegistryView();
+		
+		/**
+			Closes the registry view on the SCR server.
+		 */
+		IMPORT_C void Close();
+		
+		/**
+	    	Opens a view of the installed software components in the SCR.
+			The SCR initializes the view by enumerating the components with the given filter.
+		
+			If the call to this function completes successfully, then the interface client will access 
+			the enumerated records by using @see RSoftwareComponentRegistryView::NextComponentL.
+			
+			If a transaction owned by another session is in progress on the SCR server, the open view request 
+			will be rejected.
+			
+			N.B. After this function completes successfully, NextComponentLor NextComponentSetL functions 
+			can be used together. However, GetComponentIdsL function cannot be called before or after
+			these functions. 
+			
+			@param aCompReg An active SCR connection.
+			@param aFilter Pointer to the filter object which will be used by the SCR to enumerate the software components.
+						   If no filter is provided, all software components in the SCR are enumerated.
+			@leave KErrScrWriteOperationInProgress If a transaction owned by another session is in progress.
+			@leave Or a system-wide error code.
+
+			@capability  ReadUserData Accessing list of components installed by the user requires ReadUserData
+		*/
+		IMPORT_C void OpenViewL(const RSoftwareComponentRegistry& aCompReg, CComponentFilter* aFilter=NULL);		
+		
+		/**
+			Retrieves the next software component entry from the view which has already been 
+			created in the SCR with @see RSoftwareComponentRegistryView::OpenViewL.
+			
+			The locale for the component name and vendor of the retrieved component can be specified.
+				
+			@param aLocale The language code of the requested locale. The default value is KUnspecifiedLocale.
+						   If KUnspecifiedLocale is provided, the current locale with its downgraded path (@see BaflUtils::GetDowngradePathL) is used to find
+						   the names. If it fails, then the non-localized names are returned. If non-localized versions
+						   couldn't be found too, the first available language for the component is retrieved.
+						   If KNonLocalized is provided, then the non-localized component and vendor names are returned,
+						   and if non-localized versions don't exist, the function will leave with KErrScrUnsupportedLocale.
+						   If a particular language is provided, then the names are searched for this particular language
+						   and its downgraded languages. If there is no name and vendor with the provided language, 
+						   then the function leaves with KErrScrUnsupportedLocale.
+			@return Returns the next component matching the given filter. If no more components can be found, returns NULL.
+				     The ownership is transferred to the calling client.	     
+			@leave KErrScrUnsupportedLocale The requested component name/vendor couldn't be found for the specified locale.
+			@leave Or a system-wide error code.
+
+			@capability  ReadUserData Accessing list of components installed by the user requires ReadUserData
+		 */
+		IMPORT_C CComponentEntry* NextComponentL(TLanguage aLocale=KUnspecifiedLocale) const;
+		
+		/**
+			Retrieves the next software component entry from the view which has already been 
+			created in the SCR with @see RSoftwareComponentRegistryView::OpenViewL.
+			
+			The locale for the component name and vendor of the retrieved component can be specified.
+			
+			@param aEntry An output parameter for returning the current component registry entry of the view.	
+			@param aLocale The language code of the requested locale. The default value is KUnspecifiedLocale.
+						   If KUnspecifiedLocale is provided, the current locale with its downgraded path (@see BaflUtils::GetDowngradePathL) is used to find
+						   the names. If it fails, then the non-localized names are returned. If non-localized versions
+						   couldn't be found too, the first available language for the component is retrieved.
+						   If KNonLocalized is provided, then the non-localized component and vendor names are returned,
+						   and if non-localized versions don't exist, the function will leave with KErrScrUnsupportedLocale.
+						   If a particular language is provided, then the names are searched for this particular language
+						   and its downgraded languages. If there is no name and vendor with the provided language, 
+						   then the function leaves with KErrScrUnsupportedLocale.		
+			@return EFalse, if the end of the view has been reached. Otherwise, ETrue.  		
+			@leave KErrScrUnsupportedLocale The requested component name/vendor couldn't be found for the specified locale.
+			@leave Or a system-wide error code.
+
+			@capability  ReadUserData Accessing list of components installed by the user requires ReadUserData
+	     */
+		IMPORT_C TBool NextComponentL(CComponentEntry& aEntry, TLanguage aLocale=KUnspecifiedLocale) const;				
+		
+		/**
+			Retrieves the set of software component records from a given view which has already been 
+			created in the SCR. The number of returned records is limited by the size of the component
+			list.  
+			
+			The locale for the component names and vendors of the retrieved components can be specified.
+						
+			@param aMaxCount The maximum size of the returned components array.
+			@param aComponentList The list of component entry objects retrieved from the given view. 
+			@param aLocale The language code of the requested locale. The default value is KUnspecifiedLocale.
+						   If KUnspecifiedLocale is provided, the current locale with its downgraded path (@see BaflUtils::GetDowngradePathL) is used to find
+						   the names. If it fails, then the non-localized names are returned. If non-localized versions
+						   couldn't be found too, the first available language for the component is retrieved.
+						   If KNonLocalized is provided, then the non-localized component and vendor names are returned,
+						   and if non-localized versions don't exist, the function will leave with KErrScrUnsupportedLocale.
+						   If a particular language is provided, then the names are searched for this particular language
+						   and its downgraded languages. If there is no name and vendor with the provided language, 
+						   then the function leaves with KErrScrUnsupportedLocale.		
+			@leave KErrScrUnsupportedLocale The requested component name/vendor couldn't be found for the specified locale.
+			@leave Or a system-wide error code.
+
+			@capability  ReadUserData Accessing list of components installed by the user requires ReadUserData
+		 */
+		IMPORT_C void NextComponentSetL(TInt aMaxCount, RPointerArray<CComponentEntry>& aComponentList, TLanguage aLocale=KUnspecifiedLocale) const;
+	
+	private:
+		void CheckSubSessionHandleL() const;     //Checks for Valid SubSessionHandle
+		TInt SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const;
+		template <class C> friend HBufC8* GetObjectDataLC(const C& aConnection, TInt aFunction, TInt aDataSize);
+		template <class T, class C> friend TBool GetObjectL(const C& aConnection, T& aObject, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs);
+		template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RArray<T>& aArray);
+		template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RPointerArray<T>& aArray);
+		};
+	
+	NONSHARABLE_CLASS(RSoftwareComponentRegistryFilesList) : public RScsClientSubsessionBase
+	/**
+		This class supports listing of files registered to a particular component.
+	 */
+		{
+	public:
+		/**
+			Default constructor of registry file list sub-session.
+			*/
+		IMPORT_C RSoftwareComponentRegistryFilesList();
+		
+		/**
+			Closes the registry view on the SCR server.
+		 */
+		IMPORT_C void Close();
+		
+		/**
+			Opens the list of files in the SCR owned by a given software component.
+			The SCR initializes the list by enumerating the files of the given component Id.
+				
+			If the call to this function completes successfully, then the interface client will access 
+			to the enumerated files by using NextFileL/NextFileSetL interface functions.
+			
+			If a transaction owned by another session is in progress on the SCR server, the open list request 
+			will be rejected.
+			
+			@param aCompReg An active SCR connection.	
+			@param aComponentId The unique ID of the given software component.
+			 
+			@leave KErrScrWriteOperationInProgress If a transaction owned by another session is in progress.
+			@leave Or a system-wide error code.
+		 */
+		IMPORT_C void OpenListL(const RSoftwareComponentRegistry& aCompReg, TComponentId aComponentId);		
+		
+		/**
+			Retrieves the next file name from the list which has already been created in the SCR with OpenListL.
+										
+			@return Returns the next file name. If no more files can be found, returns NULL
+			@leave A system-wide error code.	
+	     */
+		IMPORT_C HBufC* NextFileL() const;	
+		
+		/**
+			Retrieves the set of records from a given file list which has already been created in the SCR. 
+								
+			@param aMaxCount The maximum size of the files array returned.
+			@param aFileList The list of file names retrieved from the given list. 
+			@leave A system-wide error code.
+		 */
+		IMPORT_C void NextFileSetL(TInt aMaxCount, RPointerArray<HBufC>& aFileList) const;
+	
+	private:
+		void CheckSubSessionHandleL() const;     //Checks for Valid SubSessionHandle
+		TInt SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const;
+		template <class C> friend HBufC8* GetObjectDataLC(const C& aConnection, TInt aFunction, TInt aDataSize);
+		template <class T, class C> friend T* GetObjectL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs);
+		template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RPointerArray<T>& aArray);
+	};
+
+
+	NONSHARABLE_CLASS(RApplicationRegistryView) : public RScsClientSubsessionBase
+	/**
+        This class opens a sub-session to the SCR server and sends a request to create a complete Application Registration view.
+        This class can only be used by Apparc.
+	*/
+	{
+	public:
+	    /**
+	      Default constructor of registry view sub-session.
+	     */
+	      IMPORT_C RApplicationRegistryView();
+	            
+	      /**
+	           Closes the registry view on the SCR server.
+	      */
+	      IMPORT_C void Close();
+
+
+	      /**
+	           Opens a complete view of Application Registration in the SCR.
+	            
+	           If the call to this function completes successfully, then the interface client will access 
+	           the enumerated records by using @see RApplicationRegistryView::GetNextApplicationRegistrationInfoL.
+	                
+	           If a transaction owned by another session is in progress on the SCR server, the open view request 
+	           will be rejected.
+	               
+	           N.B. After this function completes successfully, GetNextApplicationRegistrationInfoL function
+	           can be used  
+	                
+	           @param aCompReg An active SCR connection.
+	           @param aLocale The language code of the requested locale. The default value is KUnspecifiedLocale.
+	           if aLocale is provided, then Application Registration Info for that locale is returned(if present in SCR).
+	           If aLocale is provided but the localizable info for that locale is not present in the SCR then 
+	           its(aLocale) downgraded path (@see BaflUtils::GetDowngradePathL) is used to find
+	           the reg details. If it fails, then application registration info for that application is not returned.
+	           If alocale is not provided i.e. KUnspecifiedLocale then it takes the current locale or its downgradables.             
+	           @leave A system-wide error code.
+	     */
+	     IMPORT_C void OpenViewL(const RSoftwareComponentRegistry& aCompReg, TLanguage aLocale=KUnspecifiedLocale);                 
+	     
+		 /**
+	           Opens a view of the Application Registration information for a list of AppUids.
+	            
+	           If the call to this function completes successfully, then the interface client will access 
+	           the enumerated records by using @see RApplicationRegistryView::GetNextApplicationRegistrationInfoL.
+	                
+	           If a transaction owned by another session is in progress on the SCR server, the open view request 
+	           will be rejected.
+	               
+	           N.B. After this function completes successfully, GetNextApplicationRegistrationInfoL function
+	           can be used  
+	                
+	           @param aCompReg An active SCR connection.
+			   @param aAppRegAppUids Array of AppUids to be fetched.
+	           @param aLocale The language code of the requested locale. The default value is KUnspecifiedLocale.
+	           if aLocale is provided, then Application Registration Info for that locale is returned(if present in SCR).
+	           If aLocale is provided but the localizable info for that locale is not present in the SCR then 
+	           its(aLocale) downgraded path (@see BaflUtils::GetDowngradePathL) is used to find
+	           the reg details. If it fails, then application registration info for that application is not returned.
+	           If alocale is not provided i.e. KUnspecifiedLocale then it takes the current locale or its downgradables.             
+	           @leave A system-wide error code.
+	     */
+		 
+	     IMPORT_C void OpenViewL(const RSoftwareComponentRegistry& aCompReg, const RArray<TUid>& aAppRegAppUids, TLanguage aLocale=KUnspecifiedLocale);
+	                
+	     /**
+	           Retrieves the next Application Registration entry from the view which has already been 
+	           created in the SCR with @see RApplicationRegistryView::OpenApplicationRegistrationViewL.                                
+	                                                  
+            @param aNoOfEntries Number of AppInfo Entries to be fetched in a single call.
+            @param aApplicationRegistration An output parameter for returning the array of CApplicationRegistrationData.                 
+            @leave A system-wide error code
+         */
+	     IMPORT_C void GetNextApplicationRegistrationInfoL(TInt aNoOfEntries, RPointerArray<CApplicationRegistrationData>& aApplicationRegistration) const; 
+	            
+        private:
+	            TInt iNoOfEntries;
+	            TInt SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const;
+	            template <class C> friend HBufC8* GetObjectDataLC(const C& aConnection, TInt aFunction, TInt aDataSize);
+	            template <class T, class C> friend TBool GetObjectL(const C& aConnection, T& aObject, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs);
+	            template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RArray<T>& aArray);
+	            template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RPointerArray<T>& aArray);
+	            
+	};  //End of RApplicationRegistryView
+	
+	
+	
+NONSHARABLE_CLASS(RApplicationInfoView) : public RScsClientSubsessionBase
+/**
+	This class opens a sub-session to the SCR server and sends a request to create a AppInfo view
+	by using the supplied filter on the server side. 
+	It returns information associated to a list of applications, information includes the full pathname to the application and the application's caption and short caption informtion @see TAppRegInfo, 
+	however localizable specific information is retrieved only if the app has localizable information 
+	matching the locale with which the subsession was opened or matching the current device language.
+	It is different from class RApplicationRegistryView in the following ways:
+	1. This subsession has the ability to filter the applciations based on certain parameters @see CAppInfoFilter.
+	2. This returns specific information contained in TAppRegInfo, however class RApplicationRegistryView returns all the information associated with an app in CApplicationRegistrationData.
+	3. Functionality provided by this class can be used by all, however class RApplicationRegistryView can be used only by AppArc.
+	 
+*/
+{
+	public:
+		/**
+			Default constructor of AppInfo sub-session.
+		 */
+		IMPORT_C RApplicationInfoView();
+		
+		/**
+			Closes the registry view on the SCR server.
+		*/
+		IMPORT_C void Close();
+
+		/**
+	    	Opens a view of Application Info in the SCR.
+		
+			If the call to this function completes successfully, then the interface client can access 
+			the enumerated records by using @see RAppInfoView::GetNextAppInfoL.
+			
+			If a transaction owned by another session is in progress on the SCR server, the open view request 
+			will be rejected.
+			
+			N.B. After this function completes successfully, GetNextAppInfoL function
+			can be used  
+			
+			@param aCompReg An active SCR connection.
+			@param aAppInfoFilter Pointer to the filter object which will be used by the SCR to enumerate the Application Info. Also @see CAppInfoFilter.
+                   			
+			@leave A system-wide error code.
+			@capability  ReadUserData, Accessing list of App Info requires ReadUserData
+		*/
+		IMPORT_C void OpenViewL(const RSoftwareComponentRegistry& aCompReg, CAppInfoFilter* aAppInfoFilter = NULL,TLanguage aLocale = KUnspecifiedLocale);
+
+		/**
+			Retrieves the next AppInfo entry from the view which has already been 
+			created in the SCR with @see RSoftwareComponentRegistryView::OpenAppInfoViewL.
+			
+			@param aNoOfEntries Number of AppInfo Entries to be fetched in a single call.
+			@param aAppInfo An output parameter for returning the array of AppInfo.			   		
+			@leave A system-wide error code.
+	     */
+		IMPORT_C void GetNextAppInfoL(TInt aNoOfEntries, RPointerArray<TAppRegInfo>& aAppInfo) const;
+
+	private:
+		TInt SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const;
+		template <class C> friend HBufC8* GetObjectDataLC(const C& aConnection, TInt aFunction, TInt aDataSize);
+		template <class T, class C> friend TBool GetObjectL(const C& aConnection, T& aObject, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs);
+		template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RArray<T>& aArray);
+		template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RPointerArray<T>& aArray);
+
+};//End of RApplicationInfoView
+
+NONSHARABLE_CLASS(RRegistrationInfoForApplication) : public RScsClientSubsessionBase
+/**
+	This class opens a sub-session to the SCR server with a particular application uid 
+	and fetches the respective details for this particular application only.
+*/
+    {
+    public:
+		/**
+			Default constructor of registry view sub-session.
+		*/
+		IMPORT_C RRegistrationInfoForApplication();
+
+		/**
+			Closes the registry view on the SCR server.
+		 */
+		IMPORT_C void Close();
+
+		/**
+            Creates a new subsession for the given App Uid. 
+		    @param aCompReg An active SCR connection.                            
+		    @param aAppUid The Application ID to be used for further queries.
+			@param aLocale The language code of the requested locale. The default value is KUnspecifiedLocale.
+						   If KUnspecifiedLocale is provided, the current locale with its nearest language
+						   (@see  BaflUtils::GetEquivalentLanguageList) will be used .
+		    @leave KErrNotFound If aAppUid is not found.
+                   Or a system-wide error code.
+		*/
+		IMPORT_C void OpenL(const RSoftwareComponentRegistry& aCompReg,const TUid aAppUid,TLanguage aLocale=KUnspecifiedLocale);
+
+		/**
+			Returns the list of Service Uids for the application. 
+                                                    
+            @param aServiceUids The list of Service Uids retrieved for the application. 
+            @leave A system-wide error code.
+        */		
+		IMPORT_C void GetAppServicesUidsL(RArray<TUid>& aServiceUids) const;
+
+        /**
+            Returns the Application Language(Locale) for the application. 
+			This is identified after mapping the Application languages to the nearest device language.                                       
+            @return TLanguage The Application Language(Locale) retrieved for the application. 
+            @leave A system-wide error code.
+        */		
+        IMPORT_C TLanguage ApplicationLanguageL() const;
+
+        /**
+            Returns the default Screen Number for the application. 
+                                        
+            @return  The default Screen Number retrieved for the application. 
+            @leave A system-wide error code.
+        */        
+        IMPORT_C TInt DefaultScreenNumberL() const;
+
+        /**
+            Returns the number of defined icons for the application and locale. 
+            
+            @return  The number of defined icons retrieved for the given locale of the application. 
+            @leave A system-wide error code.
+        */         
+		IMPORT_C TInt NumberOfOwnDefinedIconsL() const;
+		
+		/**
+            Returns the array of files owned by the application .
+		                                                
+            @param aAppOwnedFiles returns array of Files owned by the application. 
+            @leave A system-wide error code.                     		           
+		*/     
+		IMPORT_C void GetAppOwnedFilesL(RPointerArray<HBufC>& aAppOwnedFiles) const;
+		
+		/**
+            Returns the characteristics of the application. 
+		                                                        
+            @param aApplicationCharacteristics returns capabilty of the application.  
+            @leave A system-wide error code.                       		                    
+		*/        
+		IMPORT_C void GetAppCharacteristicsL(TApplicationCharacteristics& aApplicationCharacteristics) const;
+		/**
+            Returns the file name of the icon associated with the application. 
+		                                                                
+            @param aFullFileName  returns file name of the icon associated with the application. 
+            @leave A system-wide error code.                        		                            
+		*/                
+		IMPORT_C void GetAppIconL(HBufC*&  aFullFileName) const;
+		        
+		/**
+            Returns the file name of the icon associated with the application, given a View Uid. 
+
+            @param aViewUid view Uid of the app                                                            
+            @param aFullFileName  returns file name of the icon of the application.   
+            @leave A system-wide error code.                 		                                   
+		*/ 
+		IMPORT_C void GetAppViewIconL(TUid aViewUid,HBufC*& aFullFileName) const;
+		
+		/** Returns the view information published by the application for the current locale.
+
+		    @param aAppViewInfoArray On return, the array contains information on all of the views 
+		    published by the specified application for the current locale.
+		    @see CAppViewData 
+            @leave A system-wide error code.		    
+		**/
+
+		 IMPORT_C void GetAppViewsL(RPointerArray<CAppViewData>& aAppViewInfoArray) const;
+
+	private:
+		void CheckSubSessionHandleL() const;     //Checks for Valid SubSessionHandle
+		TInt SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const;
+		template <class C> void SendDependencyArgsL(TInt aFunction, const C& aSupplierId, const CGlobalComponentId& aDependantGlobalCompId);
+		template <class C> friend HBufC8* GetObjectDataLC(const C& aConnection, TInt aFunction, TInt aDataSize);
+		template <class T, class C> friend T* GetObjectL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs);
+		template <class T, class C> friend TBool GetObjectL(const C& aConnection, T& aObject, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs);
+		template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RArray<T>& aArray);
+		template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RPointerArray<T>& aArray);
+		
+	}; //End of RRegistrationInfoForApplication
+
+NONSHARABLE_CLASS(RApplicationRegistrationInfo) : public RScsClientSubsessionBase
+/**
+    This class opens a sub-session to the SCR server and is used to retrieve application information.
+
+ */   
+    {
+    public:
+        /**
+            Default constructor of registry view sub-session.
+         */
+        IMPORT_C RApplicationRegistrationInfo();
+        
+        /**
+            Closes the registry view sub-session on the SCR server.
+         */
+        IMPORT_C void Close();
+
+        /**
+            Creates a new subsession with SCR. 
+            
+            Once the call to this function succeeds, the client will be able to query SCR for various information 
+            such as data type and service information. 
+            
+            If a transaction is owned by another session is in progress on the SCR server, then this request 
+            will be rejected.
+            
+            @param aCompReg An active SCR connection.                          
+            @leave A system-wide error code.
+        */
+        IMPORT_C void OpenL(const RSoftwareComponentRegistry& aCompReg);
+
+        /**
+            Returns the App Uid for a given Service Uid that handles the specified datatype with the highest priority. 
+                                        
+            @param aName The Data Type Text.
+            @param aServiceUid  The Service Uid.
+            @return  The App Uid for the given Data type and Service Uid. 
+            @leave A system-wide error code.
+        */      
+        IMPORT_C TUid GetAppForDataTypeAndServiceL(const TDesC &aName,const TUid aServiceUid) const;
+        
+        /**
+            Return the App Uid for the given Data type with the highest priority. 
+                                        
+            @param aName The Data Type Text.
+            @return  The App Uid for the given Data type. 
+            @leave KErrNotFound If the AppUid is not found
+                   Or a system-wide error code.
+        */
+        IMPORT_C TUid GetAppForDataTypeL(const TDesC &aName) const;
+
+        /**
+            Return the Service Info details for the set parameters of the filter. 
+                                        
+            @param aAppServiceInfoFilter A pointer to AppServiceInfoFilter enumerating the parameters on the basis of which serviceinfo details are to be fetched.
+            @param aAppServiceInfoArray  On return contains the service info details assoicated with the parameters set in the filter.
+            @param aLocale               The language code of the requested locale. The default value is KUnspecifiedLocale.
+                                         If KUnspecifiedLocale is provided, the current locale with its nearest language (@see  BaflUtils::GetEquivalentLanguageList) is used to find
+                                         the names.             
+            @leave KErrNotFound If the Service Info details are not found
+                   Or a system-wide error code.
+        */
+        IMPORT_C void GetServiceInfoL(CAppServiceInfoFilter* aAppServiceInfoFilter, RPointerArray<CServiceInfo>& aAppServiceInfoArray, TLanguage aLocale=KUnspecifiedLocale) const;
+
+        /**
+            Return the basic application information contained in  TAppRegInfo for a given application present in the SCR DB.
+                    
+            @param aAppUid  An application's Uid.                  
+            @param aAppInfo An output parameter for returning the array of AppInfo. 
+            @param aLocale The language code of the requested locale. The default value is KUnspecifiedLocale.
+                           If KUnspecifiedLocale is provided, the current locale with its nearest language (@see  BaflUtils::GetEquivalentLanguageList) is used to find
+                           the names.  
+            @return ETrue if found, EFalse if application is not found
+                                    
+            @leave A system-wide error code.
+        */
+        IMPORT_C TBool GetAppInfoL(TUid aAppUid, TAppRegInfo& aAppInfo, TLanguage aLocale=KUnspecifiedLocale);
+        
+        
+    private:
+        void CheckSubSessionHandleL() const;     //Checks for Valid SubSessionHandle
+        TInt SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const;
+        template <class C> void SendDependencyArgsL(TInt aFunction, const C& aSupplierId, const CGlobalComponentId& aDependantGlobalCompId);
+        template <class C> friend HBufC8* GetObjectDataLC(const C& aConnection, TInt aFunction, TInt aDataSize);
+        template <class T, class C> friend T* GetObjectL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs);
+        template <class T, class C> friend TBool GetObjectL(const C& aConnection, T& aObject, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs);
+        template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RArray<T>& aArray);
+        template <class C, class T> friend void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RPointerArray<T>& aArray);
+        
+    }; //End of RApplicationRegistrationInfo       
+
+}// End of namespace Usif
+#endif // SOFTWARECOMPONENTREGISTRY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc/scr.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef SCR_IBY
+#define SCR_IBY
+
+#include "sqlite3_secure.iby"
+
+REM Software Component Registry
+
+file=ABI_DIR\BUILD_DIR\scrclient.dll			sys\bin\scrclient.dll
+file=ABI_DIR\BUILD_DIR\scrdatabase.dll			sys\bin\scrdatabase.dll
+file=ABI_DIR\BUILD_DIR\scrserver.exe			sys\bin\scrserver.exe
+file=ABI_DIR\BUILD_DIR\scrhelperclient.dll		sys\bin\scrhelperclient.dll
+file=ABI_DIR\BUILD_DIR\scrhelperserver.exe		sys\bin\scrhelperserver.exe
+
+// Export SCR DB.
+data=EPOCROOT##epoc32\release\winscw\udeb\z\sys\install\scr\provisioned\scr.db		sys\install\scr\provisioned\scr.db
+// Export SCR Cenrep file.
+data=EPOCROOT##epoc32\release\winscw\udeb\z\private\10202be9\10285bc0.txt   		private\10202be9\10285bc0.txt
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc/scrcommon.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,211 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Information shared between the Software Component Registry client and server implementations.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+ 
+#ifndef SCRCOMMON_H
+#define SCRCOMMON_H
+ 
+#include <e32ver.h>
+#include <e32uid.h>
+#include <f32file.h>
+#include <e32std.h>
+#include <s32file.h>
+
+namespace Usif
+	{
+	/** Identifies the Software Component Registry Symbian OS Server. */
+	_LIT(KSoftwareComponentRegistryName, "!SoftwareComponentRegistry");	
+
+	const TInt KScrVerMajor = 1;		///< SCR Server version major component.
+	const TInt KScrVerMinor = 0;		///< SCR Server version minor component.
+	const TInt KScrVerBuild = 0;		///< SCR Server version build component.
+
+	inline TVersion ScrServerVersion();
+		
+	/**
+		Executable which hosts SCR Server.  Required to launch the process.
+
+		@see KUidScrServer
+	*/
+	_LIT(KScrServerImageName, "scrserver.exe");
+		
+	/**
+		Hosting the executable's secure ID.  Required to launch the process.
+
+		@see KScrServerImageName
+	 */
+	const TUid KUidScrServer = {0x10285BC0};
+		
+	inline TUidType ScrServerImageFullUid();
+	 	
+	enum TScrSessionFunction
+	/**
+		Functions supported by a SCR server session.
+	 */
+		{
+		ECreateTransaction        	 	 = 0x00,	///< Create a new transaction
+		ERollbackTransaction       	 	 = 0x01,	///< Roll back the transaction in progress
+		ECommitTransaction           	 = 0x02,	///< Commit the transaction in progress
+		EAddComponent	         	 	 = 0x03,	///< Add a new component record into the SCR database 
+		EAddComponentDependency		 	 = 0x04,	///< Add a new dependency between two software components.
+		ESetComponentLocalizableProperty = 0x05, 	///< Set a string property of the component
+		ESetComponentNumericProperty 	 = 0x06, 	///< Set a numeric property of the component
+		ESetComponentBinaryProperty  	 = 0x07, 	///< Set a binary property of the component
+		ERegisterComponentFile		 	 = 0x08,	///< Register a file to an existing component
+		ESetFileStringProperty		 	 = 0x09,	///< Set a string property of the component's file
+		ESetFileNumericProperty		 	 = 0x0A,	///< Set a string property of the component's file
+		ESetComponentName		 	 	 = 0x0B,	///< Update the name of the component
+		ESetComponentVendor		     	 = 0x0C,	///< Update the vendor of the component
+		ESetComponentVersion		 	 = 0x0D,	///< Set the version of the component
+		ESetIsComponentRemovable     	 = 0x0E,    ///< Set the removable attribute of the component
+		ESetIsComponentDrmProtected		 = 0x0F,    ///< Set the DRM protected attribute of the component.
+		ESetIsComponentHidden			 = 0x10,    ///< Set the hidden attribute of the component.
+		ESetIsComponentKnownRevoked		 = 0x11,    ///< Set the known-revoked attribute of the component.
+		ESetIsComponentOriginVerified	 = 0x12,    ///< Set the origin-verified attribute of the component.
+		ESetComponentSize			 	 = 0x13, 	///< Set the install-time size of the component
+		EDeleteComponentProperty	 	 = 0x14,	///< Delete a property of the component
+		EDeleteFileProperty	 			 = 0x15,	///< Delete a property of the component's file
+		EUnregisterComponentFile		 = 0x16,	///< Deregister a component's file
+		EDeleteComponent				 = 0x17,	///< Delete a component from the SCR database
+		EDeleteComponentDependency       = 0x18,	///< Delete an existing dependency between two software components.
+		EGetSingleComponentSize		 	 = 0x19,	///< Retrieve the entry size of a given component id
+		EGetSingleComponentData		 	 = 0x1A,	///< Retrieve the entry data of a given component id
+		EGetFilePropertiesSize		 	 = 0x1B,	///< Retrieve the buffer size needed to write the file properties.
+		EGetFilePropertiesData		 	 = 0x1C,	///< Retrieve the data of the file properties obtained from the SCR server.
+		EGetSingleFilePropertySize   	 = 0x1D,	///< Retrieve the buffer size needed to write the value of the single file property given.
+		EGetSingleFilePropertyData   	 = 0x1E,	///< Retrieve the data of the single file property.
+		EGetComponentFilesCount		 	 = 0x1F,    ///< Retrieve the number of files registered by a component
+		EGetFileComponentsSize		 	 = 0x20,	///< Retrieve the buffer size needed to write the component IDs possessing the given file.
+		EGetFileComponentsData		 	 = 0x21,	///< Retrieve the data of the component IDs.
+		EGetComponentPropertiesSize	 	 = 0x22,	///< Retrieve the buffer size needed to write the given component's properties.
+		EGetComponentPropertiesData	 	 = 0x23,	///< Retrieve the data of the component's properties obtained from the SCR server.
+		EGetComponentSinglePropertySize	 = 0x24,	///< Retrieve the buffer size needed to write the value of the single component property given.
+		EGetComponentSinglePropertyData	 = 0x25,	///< Retrieve the data of the single component property.
+		EGetLocalComponentId         	 = 0x26,	///< Retrieve the local component id of a given global component id.
+		EGetComponentWithGlobalIdSize	 = 0x27,	///< Retrieve the component entry size of a given global component id
+		EGetComponentWithGlobalIdData	 = 0x28, 	///< Retrieve the component entry data of a given global component id
+		EGetSupplierComponentsSize	 	 = 0x29,	///< Retrieve the buffer size needed to write the supplier global IDs of a given dependant component.		
+		EGetSupplierComponentsData   	 = 0x2A,	///< Retrieve the data of the supplier global IDs of a given dependant component.
+		EGetDependantComponentsSize	 	 = 0x2B,	///< Retrieve the buffer size needed to write the dependant global IDs of a given supplier component.		
+		EGetDependantComponentsData  	 = 0x2C,	///< Retrieve the data of the dependant global IDs of a given supplier component.
+		EGetComponentIdListSize			 = 0x2D,   	///< Retrieve the buffer size needed to write the component IDs enumerated with a given filter.
+		EGetComponentIdListData		     = 0x2E,	///< Retrieve the data of the component IDs enumerated with a given filter.
+		EGetLogFileHandle		 		 = 0x2F,    ///< Transfer the handle of the SCR log file to the client process
+		EGetComponentSupportedLocalesListSize = 0x30,    ///< Transfer the buffer size needed to write the list of matching supported languages 
+		EGetComponentSupportedLocalesListData = 0x31,    ///< Retrieve the data of the list of matching supported languages
+		EGetLocalizedComponentSize            = 0x32,    ///< Retrieve the localized information entry size of a given component id
+		EGetLocalizedComponentData            = 0x33,    ///< Retrieve the localized information entry data of a given component id
+		EGenerateNonNativeAppUid              = 0x34,    ///< Generate a new Application Uid which can be used to register non native applications.
+		
+        EGetApplicationLaunchersSize     = 0x3A,    ///< Gets the size of application launcher array
+        EGetApplicationLaunchersData     = 0x3B,    ///< Gets the array application launchers
+        
+		EGetIsMediaPresent				 = 0x40,	///< Retrieve the presence info of medias where the component is installed.
+		EGetIsComponentOrphaned			 = 0x41,	///< Retrieve whether the given component is orphaned.
+		EGetIsComponentOnReadOnlyDrive	 = 0x42,	///< Retrieve if the component is present on a read-only drive.
+		EGetIsComponentPresent			 = 0x43,	///< Retrieve if the software component is fully present.
+        EGetComponentIdForApp            = 0x44,    ///< Retrieve the component Id for a given App.
+        EGetAppUidsForComponentSize      = 0x45,    ///< Retrieve the size of the list of AppUids associated with a component.
+        EGetAppUidsForComponentData      = 0x46,    ///< Retrieve the list of AppUids associated with a component.
+						
+		EAddApplicationEntry             = 0x47,    ///< Add a new application entry into SCR.
+		EDeleteApplicationEntries        = 0x48,    ///< Delete the applications associated with a component from SCR.
+		EDeleteApplicationEntry          = 0x49,    ///< Delete an application from SCR.
+		ESetScomoState				 	 = 0x50,	///< Set the scomo state of a given component.
+		ESetIsComponentPresent			 = 0x51,	///< Set the attribute if the component is present fully.
+		EGetPluginUidWithMimeType    	 = 0x52,	///< Retrieve the SIF plugin UID for a given MIME type.
+		EGetPluginUidWithComponentId 	 = 0x53,	///< Retrieves the SIF plugin UID for a given component Id.
+		
+		ESubSessCreateComponentsView 	 = 0x60,	///< Creates a sub-session to handle a components view. 
+		ESubSessCreateFileList 	     	 = 0x61,	///< Creates a sub-session to handle a file list.
+
+		ESubSessCreateRegInfoForApp      = 0x62,	///< Creates a sub-session to handle a App ID related query.
+		ESubSessCreateAppRegInfo         = 0x63,   ///< Creates a sub-session to handle a query.
+		
+		EAddSoftwareType			 	 = 0x65,    ///< Add a new software type to the SCR database with MIME types, unique and localized names.
+		EDeleteSoftwareType			 	 = 0x66,    ///< Delete an existing software type from the SCR database.
+		EGetDeletedMimeTypes			 = 0x67,    ///< Retrieve the list of MIME types deleted in last software type deletion operation.
+		
+		ESubSessCreateAppInfoView        = 0x68,    ///< Creates a sub-session to handle a appinfo view.
+		ESubSessCreateAppRegistryView    = 0x69     ///< Creates a sub-session to handle a application registration view.
+		// NOTE: The range after this is used up. Add new function ids carefully.
+		};
+		
+	enum TScrSubSessionFunction
+	/**
+		Functions supported by a SCR server subsession.
+	 */
+		{
+		EOpenComponentsView       = 0x70,		///< A components view isopened on the server side by using a given filter
+		EGetNextComponentSize     = 0x71,		///< Get the size of the next component entry from the components view.
+		EGetNextComponentData     = 0x72,		///< Get the next component entry from the components view.
+		EGetNextComponentSetSize  = 0x73,		///< Get the size of the next component entry set from the components view.
+		EGetNextComponentSetData  = 0x74,		///< Get the next component entry set from the components view.
+		EOpenFileList		  	  = 0x77,		///< A file list is opened on the server side by using a given filter
+		EGetNextFileSize      	  = 0x78,		///< Get the size of the next file from the present file list.
+		EGetNextFileData      	  = 0x79,		///< Get the next file from the present file list.
+		EGetNextFileSetSize   	  = 0x7A,		///< Get teh size of the next file set from the present file list.
+		EGetNextFileSetData       = 0x7B,		///< Get the next file set from the present file list.
+		EOpenAppInfoView          = 0x7C,       ///< An AppInfo view is opened on the server side by using a given filter
+		EGetNextAppInfoSize       = 0x7D,       ///< Next AppInfo size is calculated and sent to the client
+		EGetNextAppInfoData       = 0x7E,       ///< Next AppInfo data is returned to the client  
+		
+		ESetAppUid         		      = 0x80,       ///< AppId is set on the server side to be used for the specific subsession.
+		EGetServiceUidSize		      = 0x88,       ///< Get the size of the service Id list. 
+		EGetServiceUidList		      = 0x89,       ///< Get the list of ServiceIds.
+		EGetApplicationLanguage       = 0x8A,		///< Get the Application Language of the App and is nearest to the device language.
+		EGetDefaultScreenNumber       = 0x8B,       ///< Get the Default screen number specified for an App.
+		EGetNumberOfOwnDefinedIcons   = 0x8C,       ///< Get the number of defined icons of a specified locale of the App.
+		EGetAppForDataTypeAndService  = 0x8D,       ///< Get the AppUid with the specified type and ServiceId		
+		EGetAppForDataType	   	      = 0x8E,	    ///< Get the AppUid with the specified type and a highest priority.
+		EGetViewSize			      = 0x8F,		///< Get the size of the view details of a given application
+		EGetViewData			      = 0x90,		///< Get the array of view details of a given application
+		EGetAppOwnedFilesSize         = 0x91,       ///< Get the size of files owned by given application
+		EGetAppOwnedFilesData         = 0x92,       ///< Get the array of files owned by given application
+		EGetAppCharacteristics        = 0x93,       ///< Get the characteristics of given application
+		EGetAppIconForFileName    	  = 0x94,       ///< Get the application icon file name for given application
+		EGetAppViewIconFileName       = 0x95,       ///< Get the application view  icon file name for given application
+		EGetAppServiceInfoSize		  = 0x96,		///< Get the size of the required service details associated with the parameters set in the filter.
+		EGetAppServiceInfoData        = 0x97,       ///< Get the required service details associated with the parameters set in the filter.
+		EGetApplicationInfo           = 0x98,       ///< Get the required app's information details contained in TAppRegInfo.
+				
+		EOpenApplicationRegistrationInfoView           = 0xB0,  ///< An Application registration view is opened on the server side
+		EGetApplicationRegistrationSize                = 0xB1,  ///< Get the size of the next application registration data
+		EGetApplicationRegistrationData                = 0xB2,  ///< Get the next application registration data
+		EOpenApplicationRegistrationInfoForAppUidsView = 0xB3,  ///< An Application registration AppUids view is opened on the server side
+		};
+	
+	/**
+		Delay in microseconds before the SCR Server is shut down, after
+		the last remaining session has been closed.
+	 */
+	static const TInt KScrServerShutdownPeriod = 2 * 1000 * 1000;
+	
+	/** Maximum length of a UID string. */
+	static const TInt KUidStringLen = 8;	
+	} // End of namespace Usif
+ 
+ #include <usif/scr/scrcommon.inl>
+ 
+#endif // SCRCOMMON_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc/scrcommon.inl	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* The functions defined in this file provide constant data which is
+* used by both the SCR server and client side implementations.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+ 
+#ifndef SCRCOMMON_INL
+#define SCRCOMMON_INL
+
+#include <usif/scr/scrcommon.h>
+
+namespace Usif
+	{
+	inline TVersion ScrServerVersion()
+	/**
+		This function is defined because there is no literal constructor for TVersion.
+
+		@return					Defines a version number which the client side code	
+								can use to open the SCR server. If the client code
+								was built with a higher version number, then it cannot
+								open the SCR server.  This ensures that a client only
+								talks to the SSCR serevr version is at least as high as
+								its own.
+	*/
+		{
+		TVersion version(KScrVerMajor, KScrVerMinor, KScrVerBuild);
+		return version;
+		}
+
+	inline TUidType ScrServerImageFullUid()
+	/**
+		This function is defined because there is no literal constructor
+		for TUidType.  It returns the SCR server executable's UID, which is used
+		to ensure the client side code launches the correct server process, as opposed
+		to another application which uses the same executable name.
+
+		@return TUidType		The SCR server executable's full UID.
+	 */
+		{
+		TUidType typ(KExecutableImageUid, KNullUid, KUidScrServer);
+		return typ;
+		}
+
+	} // End of namespace Usif 
+	
+#endif // SCRCOMMON_INL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc/screntries.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1105 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Declares entry classes for Software Components Registry interface.
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef SCRENTRIES_H
+#define SCRENTRIES_H
+
+#include <e32base.h>
+#include <s32strm.h>
+#include <f32file.h> 
+#include <usif/usifcommon.h>
+
+namespace Usif
+    {
+    // CONSTANTS
+    
+    /**
+        KUnspecifiedLocale means that the locale is not specified and locale resolving will be done by SCR.
+        First, the current locale with its downgraded languages (@see BaflUtils::GetDowngradePathL) is tried 
+        by SCR. If no value is found, then non-localized values are searched for. 
+     */
+    static const TLanguage KUnspecifiedLocale = TLanguage(-1);
+    
+    /**
+        KNonLocalized means that only non-localized values are looked up by SCR.
+     */
+    static const TLanguage KNonLocalized = TLanguage(0); 
+    
+    // CLASSES
+    
+        
+    NONSHARABLE_CLASS(CGlobalComponentId) : public CBase
+    /**
+        Encapsulates the global software component identifier which is a named, component level and nullable string.
+        that an installer may use to specify a deterministic identifier for the component that is unique within 
+        the context of that software type. This global component id would be the package UID for native applications 
+        or the midlet-names for Java etc 
+        
+        The global component id is consistent and equal on all devices. It is used to state dependencies 
+        and to check for the presence of installed software components of arbitrary types without each installer having 
+        to be aware of every other installers naming scheme.        
+     */
+        {
+    public:
+        /**
+            Creates an empty global software component ID object.
+            @return A pointer to the newly allocated global software component ID object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CGlobalComponentId* NewLC();
+                
+        /**
+            Creates a global software component ID object.
+            @param aGlobalIdName A deterministic identifier for the component that is unique within the context of that software type.
+            @param aUniqueSwTypeName Non-localized unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
+            @return A pointer to the newly allocated global software component ID object, if creation is successful.
+         */ 
+        IMPORT_C static CGlobalComponentId* NewL(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName);
+        
+        /**
+            Creates a global software component ID object.
+            @param aGlobalIdName A deterministic identifier for the component that is unique within the context of that software type.
+            @param aUniqueSwTypeName Non-localized unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
+            @return A pointer to the newly allocated global software component ID object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */ 
+        IMPORT_C static CGlobalComponentId* NewLC(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName);
+        
+        /**
+            Creates a global software component ID object from a stream.
+            @param aStream The stream to read the software component entry object from
+            @return A pointer to the newly allocated global software component ID object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CGlobalComponentId* NewL(RReadStream& aStream);
+                
+        /**
+            Externalises this CGlobalComponentId object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+         */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+                
+        /**
+            Internalises this CGlobalComponentId object from a read stream.
+            @param aStream The stream from which the object is internalised.
+            @internalComponent
+         */
+        IMPORT_C void InternalizeL(RReadStream& aStream);
+                
+        /** @return The global id name part (@see CGlobalComponentId::NewLC) of the global component id.*/
+        IMPORT_C const TDesC& GlobalIdName() const;
+            
+        /** @return The software type name part (@see CGlobalComponentId::NewLC) of the global component id. */
+        IMPORT_C const TDesC& SoftwareTypeName() const;
+        
+        IMPORT_C ~CGlobalComponentId();
+        
+    private:
+        CGlobalComponentId();
+        void ConstructL(const TDesC& aGlobalIdName, const TDesC& aSoftwareTypeName);
+        
+    private:
+        HBufC* iGlobalIdName;       ///< The global id name part of the global component id.
+        HBufC* iSoftwareTypeName;   ///< The software type name part of the global component id.
+        };
+    
+    
+    NONSHARABLE_CLASS(CVersionedComponentId) : public CBase
+    /**     
+        Class that represents a continuous set of versions for a particular component.
+        
+        This class is used for specifying dependencies, where a dependant component requires 
+        specific version(s) of the supplier to be present on the system. The version information 
+        is optional, i.e. this class can be used to represent any version of a component.
+        
+        If this class is used to represent a dependant component, it specifies the range of versions
+        of the dependency relationship defined by the dependant component. 
+     */
+        {
+    public:
+        
+        /**
+            Creates an empty version component identifier object.
+            @return A pointer to the newly allocated version component identifier object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CVersionedComponentId* NewLC();
+                
+        /**
+            Creates a versioned component identifier object.
+            
+            N.B. The version parameters are optional and used to set the lower and upper limit of the version range. 
+                 It is also possible to set only an upper limit or a lower limit or none. If only one version 
+                 parameter is supplied then a lower limit will be set. In this case, there is no upper limit. 
+                 If the first version parameter is upplied with KNullDesC, then the second version parameter
+                 will be used to set an upper limit.
+            
+            @param aGlobalId The global software component identifier.
+            @param aVersionFrom The first version of the specified version range.
+            @param aVersionTo The last version of the specified version range.
+                    
+            @return A pointer to the newly allocated versioned component identifier object, if creation is successful.
+         */ 
+        IMPORT_C static CVersionedComponentId* NewL(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom=NULL, const TDesC* aVersionTo=NULL);
+
+        /**
+            Creates a versioned component identifier object.
+            For more information about the version parameters look at @see CVersionedComponentId::NewLC().
+            
+            @param aGlobalId The global software component identifier.
+            @param aVersionFrom The first version of the specified version range.  
+            @param aVersionTo The last version of the specified version range.
+            
+            @return A pointer to the newly allocated versioned component identifier object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */ 
+        IMPORT_C static CVersionedComponentId* NewLC(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom=NULL, const TDesC* aVersionTo=NULL);
+        
+        /**
+            Creates a versioned component identifier object from a stream.
+            @param aStream The stream to read the versioned component identifier object from
+            @return A pointer to the newly allocated versioned component identifier object, if creation is successful.
+            @internalComponent
+          */
+        IMPORT_C static CVersionedComponentId* NewL(RReadStream& aStream);
+
+        /**
+            Internalises this CVersionedComponentId object from a read stream.
+            @param aStream The stream from which the object is internalised.
+            @internalComponent
+         */
+        IMPORT_C void InternalizeL(RReadStream& aStream);
+        
+        /**
+            Externalises this CVersionedComponentId object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+         */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+        
+        /** @return The global id of the versioned component. */
+        IMPORT_C const CGlobalComponentId& GlobalId() const;
+        
+        /** @return The first version of the specified version range. NULL, if there is no lower limit for the version range. */
+        IMPORT_C const TDesC* VersionFrom() const;
+        
+        /** @return  The last version of the specified version range. NULL, if there is no upper limit for the version range. */
+        IMPORT_C const TDesC* VersionTo() const;
+        
+        IMPORT_C ~CVersionedComponentId();
+                
+    private:
+        CVersionedComponentId();
+        void ConstructL(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom, const TDesC* aVersionTo);
+        
+    private:
+        CGlobalComponentId* iGlobalId;  ///< The global id of the versioned component identifier.
+        HBufC* iVersionFrom;        ///< The first version of the specified version range.
+        HBufC* iVersionTo;      ///< The last version of the specified version range.
+        };
+
+    
+    class CComponentEntry : public CBase
+    /**
+        Class that represents a software component entry stored in the SCR.
+     */
+        {
+        friend class CScrRequestImpl;
+    public:
+        /**
+            Creates an empty software component entry object.
+            @return A pointer to the newly allocated software component object, if creation is successful.
+         */
+        IMPORT_C static CComponentEntry* NewL();
+        
+        /**
+            Creates an empty software component entry object.
+            @return A pointer to the newly allocated software component object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CComponentEntry* NewLC();
+        
+        /**
+            Creates a software component entry object from a stream.
+            @param aStream The stream to read the software component entry object from
+            @return A pointer to the newly allocated software component entry object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CComponentEntry* NewL(RReadStream& aStream);
+        
+        /**
+            Creates a software component entry object.
+            
+            @param aId  The unique ID of the software component.
+            @param aName The name of of the software component.
+            @param aVendor The vendor name of the software component.
+            @param aSwType The software type of the component.
+            @param aGlobalId The globally unique identifier of the component.
+            @param aRemovable Whether the component is removable. ETrue means the component is removable.
+            @param aSize The total size of the component at installation time in bytes.
+            @param aScomoState The SCOMO state of the component.
+            @param aInstalledDrives The set of drives that files for the software component were installed to. 
+            @param aVersion The version identifier of the software component.
+            @param aInstallTime The formatted install time string. The format is as following: YYYYMMDD:HHMMSS
+            @param aDrmProtected Whether the component is DRM protected. ETrue means the component is DRM protected.
+            @param aHidden Whether the component is displayed in the list of installed components. ETrue means the component is hidden.
+            @param aKnownRevoked Whether the component has been revoked. ETrue means that a revocation check was
+                                   performed during or after the installation and the component was found to be revoked.
+            @param aOriginVerified Whether the installer has verified the originator of the component. ETrue means the installer 
+                                    has verified the originator of the software component by using appropriate checking mechanisms.
+            @return A pointer to the newly allocated software component object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CComponentEntry* NewL(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType,
+                                              const TDesC& aGlobalId, TBool aRemovable, TInt64 aSize, const TScomoState& aScomoState,
+                                              const TDriveList& aInstalledDrives, const TDesC& aVersion, const TDesC& aInstallTime,
+                                              TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified);
+        
+        /**
+            Creates a software component entry object.
+            
+            @param aId  The unique ID of the software component.
+            @param aName The name of of the software component.
+            @param aVendor The vendor name of the software component.
+            @param aSwType The software type of the component.
+            @param aGlobalId The globally unique identifier of the component.
+            @param aRemovable Whether the component is removable. ETrue means the component is removable.
+            @param aSize The total size of the component at installation time in bytes.
+            @param aScomoState The SCOMO state of the component.
+            @param aInstalledDrives The set of drives that files for the software component were installed to. 
+            @param aVersion The version identifier of the software component.
+            @param aInstallTime The formatted install time string. The format is as following: YYYYMMDD:HHMMSS  
+            @param aDrmProtected Whether the component is DRM protected. ETrue means the component is DRM protected.
+            @param aHidden Whether the component is displayed in the list of installed components. ETrue means the component is hidden.
+            @param aKnownRevoked Whether the component has been revoked. ETrue means that a revocation check was
+                                   performed during or after the installation and the component was found to be revoked.
+            @param aOriginVerified Whether the installer has verified the originator of the component. ETrue means the installer 
+                                    has verified the originator of the software component by using appropriate checking mechanisms.
+            @return A pointer to the newly allocated software component object, if creation is successful.
+                           The pointer is also put onto the cleanup stack.
+            @internalComponent
+         */
+        IMPORT_C static CComponentEntry* NewLC(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType, 
+                                               const TDesC& aGlobalId, TBool aRemovable, TInt64 aSize, const TScomoState& aScomoState, 
+                                               const TDriveList& aInstalledDrives, const TDesC& aVersion, const TDesC& aInstallTime,
+                                               TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified);
+        
+        IMPORT_C ~CComponentEntry();
+        
+        /**
+            Externalises this CComponentEntry object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+        */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+        
+        /**
+            Internalises this CComponentEntry object from a read stream.
+            @param aStream The stream from which the object is internalised.
+            @internalComponent
+        */
+        IMPORT_C void InternalizeL(RReadStream& aStream);
+        
+        /** @return The unique ID of the software component. */
+        IMPORT_C const TComponentId& ComponentId() const; 
+        
+        /** @return The name of the software component. */
+        IMPORT_C const TDesC& Name() const;
+        
+        /** @return The vendor name of the software component. */
+        IMPORT_C const TDesC& Vendor() const;
+        
+        /** @return The software type name of the software component, e.g @see Usif::KSoftwareTypeNative. */
+        IMPORT_C const TDesC& SoftwareType() const;
+        
+        /** @return Globally unique component identifier. */
+        IMPORT_C const TDesC& GlobalId() const;
+        
+        /** @return Whether the software component is removable. ETrue means it is removable. */
+        IMPORT_C TBool IsRemovable() const;
+        
+        /** @return The total size of the component at installation time in bytes. */
+        IMPORT_C TInt64  ComponentSize() const;
+        
+        /** @return The SCOMO state of the software component. @see Usif::TScomoState */
+        IMPORT_C const TScomoState& ScomoState() const;
+        
+        /** @return The set of drives that files for the software component were installed to. */
+        IMPORT_C const TDriveList& InstalledDrives() const;
+        
+        /** @return The version identifier of the software component. */
+        IMPORT_C const TDesC& Version() const;
+        
+        /** @return The install time of the component. */
+        IMPORT_C TTime InstallTimeL() const;
+        
+        /** @return  Whether the component is DRM protected. ETrue means the component is DRM protected.*/
+        IMPORT_C TBool IsDrmProtected() const;
+        
+        /** @return  Whether the component is hidden in the list of installed components. ETrue means the component is hidden. */
+        IMPORT_C TBool IsHidden() const;
+        
+        /** @return  Whether the component has been revoked. ETrue means that a revocation check was performed
+                  during or after the installation and the component was found to be revoked.
+         */
+        IMPORT_C TBool IsKnownRevoked() const;
+        
+        /** @return  Whether the installer has verified the originator of the component. ETrue means the installer 
+                         has verified the originator of the software component by using appropriate checking mechanisms.
+         */
+        IMPORT_C TBool IsOriginVerified()const;
+        
+    private:
+        CComponentEntry();
+        void ConstructL(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType, const TDesC& aGlobalId, TBool aRemovable, 
+                        TInt64 aSize, const TScomoState& aScomoState, const TDriveList& aInstalledDrives, const TDesC& aVersion, const TDesC& aInstallTime,
+                        TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified);
+    private:
+        TComponentId iComponentId;   ///< The unique id of the software component.
+        HBufC* iName;                ///< Name of the software component.
+        HBufC* iVendor;              ///< Vendor of the software component.
+        HBufC* iSwType;              ///< Software type name of the component.
+        HBufC* iGlobalId;            ///< Globally unique component identifier.
+        TBool iRemovable;            ///< Whether the component is removable.
+        TInt64 iSize;                ///< The total size of the component at installation time in bytes.
+        TScomoState iScomoState;     ///< SCOMO state of the component.
+        TDriveList iInstalledDrives; ///< The set of drives that files for the software component were installed to.
+        HBufC* iVersion;             ///< Version identifier of the software component
+        HBufC* iInstallTime;         ///< The install time of the component. 
+        TBool iDrmProtected;         ///< Whether the component is DRM protected.
+        TBool iHidden;               ///< Whether the component is hidden in the list of installed components.
+        TBool iKnownRevoked;         ///< Whether the component has been revoked.
+        TBool iOriginVerified;       ///< Whether the installer has verified the originator of the component.
+        };
+        
+    class CPropertyEntry : public CBase
+    /**
+        Abstract base class for a software component property entry. 
+        Specifies the type of a software component property. Before getting a property value, 
+        the base property object must be converted to a derived property object (e.g. CIntPropertyEntry). 
+     */
+        {
+    public:
+    /** 
+        Enumeration to indicate the type of the property.
+     */
+    enum TPropertyType
+        {
+        EBinaryProperty = 1,    ///< The property value is binary data. See @see CBinaryPropertyEntry.
+        EIntProperty,       ///< The property value is integer. See @see CIntPropertyEntry.
+        ELocalizedProperty,  ///< The property is a localizable string. See @see CLocalizablePropertyEntry.
+        };  
+    
+    public:
+        /**
+            Creates a base software component property object from a stream.
+            @param aStream The stream to read the software property object from.
+            @return A pointer to the newly allocated software property object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CPropertyEntry* NewL(RReadStream& aStream);
+        
+        /** @return The name of the property. */
+        IMPORT_C const TDesC& PropertyName() const;
+        
+        /** Virtual destructor for the component property object*/
+        IMPORT_C virtual ~CPropertyEntry();
+        
+        /**
+            Externalises a base/derived property object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+        */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;         
+        
+        /** @return The type of the property object. Implemented by derived classes. */
+        virtual CPropertyEntry::TPropertyType PropertyType() const = 0;
+        
+    protected:
+        CPropertyEntry();
+        void ConstructL(const TDesC& aPropertyName);
+    
+    private:
+        virtual void DoExternalizeL(RWriteStream &aStream) const = 0;
+        virtual void DoInternalizeL(RReadStream& aStream) = 0;
+        
+    private:    
+        HBufC* iPropertyName;         ///< The name of the property entry.
+        };
+    
+    class CIntPropertyEntry : public CPropertyEntry
+    /**
+        Class that represents an integer component property. 
+     */
+        {
+    public:
+        /**
+            Creates an integer component property object.
+            
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+         */
+        IMPORT_C static CIntPropertyEntry* NewL(const TDesC& aPropertyName, TInt64 aPropertyValue);
+        
+        /**
+            Creates an integer component property object.
+            
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CIntPropertyEntry* NewLC(const TDesC& aPropertyName, TInt64 aPropertyValue);
+        
+        IMPORT_C ~CIntPropertyEntry();
+        
+        /**
+            The implementation of pure virtual function from @see Usif::CPropertyEntry.
+            @return The type of the property object.
+         */
+        IMPORT_C CPropertyEntry::TPropertyType PropertyType() const;
+        
+        /** @return The 32-bit integer value. */ 
+        IMPORT_C TInt IntValue();
+        
+        /** @return The 64-bit integer value. */ 
+        IMPORT_C TInt64 Int64Value();
+        
+    private:
+        void DoExternalizeL(RWriteStream& aStream) const;
+        void DoInternalizeL(RReadStream& aStream);
+        
+        CIntPropertyEntry();
+        CIntPropertyEntry(TInt64 aPropertyIntValue);
+        void ConstructL(const TDesC& aPropertyName);
+        static CIntPropertyEntry* NewLC();
+        friend CPropertyEntry* CPropertyEntry::NewL(RReadStream& aStream);
+        
+    private:
+        TInt64 iIntValue;   ///< The integer property value.
+        };
+    
+    class CBinaryPropertyEntry : public CPropertyEntry
+    /**
+        Class that represents a binary non-localizable 8-bit descriptor component property.     
+    */
+        {
+    public:
+        /**
+            Creates a binary component property object.
+                
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+         */
+        IMPORT_C static CBinaryPropertyEntry* NewL(const TDesC& aPropertyName, const TDesC8& aPropertyValue);
+        
+        /**
+            Creates a binary component property object.
+                        
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CBinaryPropertyEntry* NewLC(const TDesC& aPropertyName, const TDesC8& aPropertyValue);
+        
+        IMPORT_C ~CBinaryPropertyEntry(); 
+        
+        /**
+            The implementation of pure virtual function from @see Usif::CPropertyEntry.
+            @return The type of the property object.
+         */
+        IMPORT_C TPropertyType PropertyType() const;
+        
+        /** @return The binary property value. */ 
+        IMPORT_C const TDesC8& BinaryValue();
+    
+    private:
+        CBinaryPropertyEntry();
+        void ConstructL(const TDesC& aPropertyName, const TDesC8& aPropertyValue);
+        void DoExternalizeL(RWriteStream& aStream) const;
+        void DoInternalizeL(RReadStream& aStream);
+    
+        static CBinaryPropertyEntry* NewLC();
+        friend CPropertyEntry* CPropertyEntry::NewL(RReadStream& aStream);
+        
+    private:
+        HBufC8* iValue; ///< The value of the binary property.
+        };
+    
+    NONSHARABLE_CLASS(CLocalizablePropertyEntry) : public CPropertyEntry
+    /**
+        Class that represents a localizable string component property.
+        
+        A localized component property is a string property which can have different values 
+        for different locales. A particular instance of a localized component property includes 
+        both the localized string value and the locale in question.
+     */
+        {
+    public:
+        /**
+            Creates a localizable component property object.
+                    
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @param aLocale The locale of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+         */
+        IMPORT_C static CLocalizablePropertyEntry* NewL(const TDesC& aPropertyName, const TDesC& aPropertyValue, TLanguage aLocale);
+        
+        /**
+            Creates a localizable component property object.
+                            
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @param aLocale The locale of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CLocalizablePropertyEntry* NewLC( const TDesC& aPropertyName, const TDesC& aPropertyValue, TLanguage aLocale);
+        
+        IMPORT_C ~CLocalizablePropertyEntry();
+        
+        /** The locale of the localizable property object. */
+        IMPORT_C TLanguage LocaleL() const;
+        
+        /**
+            The implementation of pure virtual function from @see Usif::CPropertyEntry.
+            @return The type of the property object.
+         */
+        IMPORT_C TPropertyType PropertyType() const;
+        
+        /** @return The string property value. */
+        IMPORT_C const TDesC& StrValue() const;     
+        
+    private:
+        CLocalizablePropertyEntry();
+        CLocalizablePropertyEntry(TLanguage aLocale);
+        void DoExternalizeL(RWriteStream &aStream) const;
+        void DoInternalizeL(RReadStream& aStream);
+        static CLocalizablePropertyEntry* NewLC();
+        friend CPropertyEntry* CPropertyEntry::NewL(RReadStream& aStream);
+        void ConstructL(const TDesC& aPropertyName, const TDesC& aPropertyValue);
+        
+    private:
+        TLanguage iLocale; ///< The language code of the locale.
+        HBufC* iStrValue; ///< The string value of the property
+        };
+    
+    NONSHARABLE_CLASS(CComponentFilter) : public CBase
+    /**
+        A filter class which is used to filter the software components stored in the SCR.
+        An empty filter object is first created and then required filter keys are set separately.
+     */
+        {
+        friend class CScrRequestImpl;
+    public:
+        
+        enum TDbOperator
+            {
+            EEqual = 1,
+            ELike
+            };
+        
+        /**
+            Creates an empty component filter object.
+            @return A pointer to the newly allocated component filter object, if creation is successful.
+         */
+        IMPORT_C static CComponentFilter* NewL();
+        
+        /**
+            Creates an empty component filter object.
+            @return A pointer to the newly allocated component filter object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CComponentFilter* NewLC();
+        
+        /**
+            Creates a component filter object from a stream.
+            @param aStream The stream to read the component filter object from
+            @return A pointer to the newly allocated component filter object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CComponentFilter* NewL(RReadStream& aStream);
+        
+        ~CComponentFilter();
+        
+        /**
+            Restricts the returned component names in the filter.
+            Please note that wildcards are not supported and matching is case-sensitive.
+            @param aName The name of the software component.
+         */
+        IMPORT_C void SetNameL(const TDesC& aName);
+        
+        /**
+            Restricts the returned component vendor names in the filter.
+            Please note that wildcards are not supported and matching is case-sensitive.
+            @param aVendor The vendor name of the software component.
+         */
+        IMPORT_C void SetVendorL(const TDesC& aVendor);
+        
+        /**
+            Restricts the returned component software types in the filter.
+            @param aSwType The software type name of the software component (e.g. @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava). 
+        */
+        IMPORT_C void SetSoftwareTypeL(const TDesC& aSwType);
+        
+        /**
+            Sets whether the software component which is being searched for is removable.
+            @param aValue ETrue, if the software component is removable. Otherwise, EFalse.
+         */
+        IMPORT_C void SetRemovable(TBool aValue);
+        
+        /**
+            Sets whether the software component which is being searched for is DRM protected.
+            @param aValue ETrue, if the software component is DRM protected. Otherwise, EFalse.
+         */
+        IMPORT_C void SetDrmProtected(TBool aValue);
+        
+        /**
+            Sets whether the software component which is being searched for is hidden.
+            @param aValue ETrue, if the software component is hidden. Otherwise, EFalse.
+         */
+        IMPORT_C void SetHidden(TBool aValue);
+        
+        /**
+            Sets whether the software component which is being searched for is known-revoked.
+            @param aValue ETrue, if the software component is known-revoked. Otherwise, EFalse.
+         */
+        IMPORT_C void SetKnownRevoked(TBool aValue);
+        
+        /**
+            Sets whether the software component which is being searched for is origin-verified.
+            @param aValue ETrue, if the software component is origin-verified. Otherwise, EFalse.
+         */
+        IMPORT_C void SetOriginVerified(TBool aValue);
+        
+        /**
+            Restricts the returned component SCOMO states in the filter.
+            See @see Usif::TScomoState for the list of SCOMO states.
+            @param aScomoState The SCOMO state of the software component.
+         */
+        IMPORT_C void SetScomoStateL(TScomoState aScomoState);
+        
+        /**
+            Sets the set of drives that files of the software components were installed to.
+            If more than one drive is supplied, all software components which files were installed to
+            any of these drives are returned.
+         */
+        IMPORT_C void SetInstalledDrivesL(const TDriveList& aDrives);
+        
+        /**
+            Adds a localizable property to the filter. Only the software components having 
+            this property with the specified value are returned by the filter. It is possible to 
+            add more than one property. In this case, the software components possessing all provided 
+            properties with the specified values are returned by the filter.
+            
+            For more information about searching for current locale variant of properties look at 
+            @see RSoftwareComponentRegistry::GetComponentPropertyL.
+            
+            If the locale is provided, the component will be returned only if the property exists 
+            for the specified locale. If the locale is not provided, or is equal to KUnspecifiedLocale,
+            then all software components which have the property with the specified value for any locale will
+            match this condition.
+            
+            @param aName The name of the property. Please note that matching is case-insensitive.
+            @param aValue The value of the property.    
+            @param aLocale Optional. The language code of the property value.
+            @param aNameOperator The comparison operator (TDbOperator type) to be associated with the name.
+            @param aValueOperator The comparison operator (TDbOperator type) to be associated with the value.          
+                    
+         */
+        IMPORT_C void AddPropertyL(const TDesC& aName, const TDesC& aValue, TLanguage aLocale=KUnspecifiedLocale, 
+                TDbOperator aNameOperator = EEqual, TDbOperator aValueOperator = EEqual);
+        
+        /**
+            Adds an integer property to the filter. The software components having this
+            property with the specified value are enumerated. It is possible to add more than one property. 
+            In this case, the software components possessing all provided properties with the specified 
+            values are enumerated.
+            
+            @param aName The name of the property. Please note that matching is case-insensitive.
+            @param aValue The value of the property.
+            @param aNameOperator The comparison operator (TDbOperator type) to be associated with the name.
+            @param aValueOperator The comparison operator (TDbOperator type) to be associated with the value.          
+            
+         */
+        IMPORT_C void AddPropertyL(const TDesC& aName, TInt64 aValue, TDbOperator aNameOperator = EEqual, 
+                TDbOperator aValueOperator = EEqual);
+        
+        /**
+            Adds a binary 8-bit descriptor property to the filter. The software components having this
+            property with the specified value are enumerated. It is possible to add more than one property. 
+            In this case, the software components possessing all provided properties with the specified 
+            values are enumerated.
+            
+            @param aName The name of the property. Please note that matching is case-insensitive.
+            @param aValue The value of the property.
+            @param aNameOperator The comparison operator (TDbOperator type) to be associated with the name.
+            @param aValueOperator The comparison operator (TDbOperator type) to be associated with the value.          
+            
+         */
+        IMPORT_C void AddPropertyL(const TDesC& aName, const TDesC8& aValue, TDbOperator aNameOperator = EEqual, 
+                TDbOperator aValueOperator = EEqual);       
+        
+        /**
+            Sets a file name to filter the software components having registered this file.
+            Please note that wildcards are not supported and matching is case-insensitive.
+            
+            N.B. This call can be invoked multiple times for the same filter in order to request components which register a particular set of files.
+            @param aFile The fully qualified file path.
+         */
+        IMPORT_C void SetFileL(const TDesC& aFile);
+        
+        /**
+            Externalises a component filter object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+        */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+        
+    private:
+        CComponentFilter();
+        void ConstructL();
+        void InternalizeL(RReadStream& aStream);
+        
+        enum TFieldsFlag
+            {
+            EName           = 0x0001,
+            EVendor         = 0x0002,
+            ESoftwareType   = 0x0004,
+            ERemovable      = 0x0008,
+            EScomoState     = 0x0010,
+            EInstalledDrive = 0x0020,
+            EProperty       = 0x0040,
+            EFile           = 0x0080,
+            EDrmProtected   = 0x0100,
+            EHidden         = 0x0200,
+            EKnownRevoked   = 0x0400,
+            EOriginVerified = 0x0800
+            };
+        
+        class TPropertyOperator
+            {
+        public:
+            IMPORT_C TPropertyOperator(TDbOperator aNameOperator = EEqual, TDbOperator aValueOperator = EEqual);
+            void ExternalizeL(RWriteStream& aStream) const;
+            IMPORT_C void InternalizeL(RReadStream& aStream);  
+            IMPORT_C TDbOperator NameOperator() const;
+            IMPORT_C TDbOperator ValueOperator() const;
+        
+        private:
+            TDbOperator iNameOperator;
+            TDbOperator iValueOperator;
+            };
+        
+    private:
+        TUint16 iSetFlag;            ///< Flag variable that shows what fields have been set
+        HBufC* iName;                ///< Name for the software component
+        HBufC* iVendor;              ///< Vendor for the software component
+        HBufC* iSwType;              ///< Software type of the component.
+        TBool iRemovable;            ///< Whether the software component is removable
+        TScomoState iScomoState;     ///< SCOMO state for the software component
+        TDriveList iInstalledDrives; ///< Installed drives for the software component
+        RPointerArray<CPropertyEntry> iPropertyList; ///< The list of key properties
+        HBufC* iFile;               ///< The full name of the file owned by the component
+        TBool iDrmProtected;         ///< Whether the component is DRM protected.
+        TBool iHidden;               ///< Whether the component is displayed in the list of installed components.
+        TBool iKnownRevoked;         ///< Whether the component has been revoked.
+        TBool iOriginVerified;       ///< Whether the installer has verified the originator of the component.
+        RArray<TPropertyOperator> iPropertyOperatorList; ///< The list of operators associated with each property. 
+        };
+
+    
+    class CLocalizableCommonData : public CBase
+    /**
+        Base class which provides common functionality for localized information classes (e.g. CLocalizableComponentInfo). 
+        Please note that this class cannot be instantiated.
+     */
+        {
+    public:
+        ~CLocalizableCommonData();  
+        
+        /** @return The locale of the data. */
+        IMPORT_C TLanguage Locale() const;
+        
+    protected:
+        CLocalizableCommonData();
+        CLocalizableCommonData(TLanguage aLocale);
+        
+        void ExternalizeL(RWriteStream& aStream) const;
+        void InternalizeL(RReadStream& aStream);
+        
+    private:
+        TLanguage iLocale; ///< The language code of the locale.
+        };
+        
+    NONSHARABLE_CLASS(CLocalizableComponentInfo) : public CLocalizableCommonData
+    /**
+        This class contains the localizable information of a software component.
+        Component names and vendor names are localizable names and transferred to the SCR 
+        with the objects of this class.
+     */
+        {
+    public:
+        /**
+            Creates a localizable component information object.
+            @param aName The name of the component.
+            @param aVendor The vendor of the component.
+            @param aLocale The language code of the object's locale.
+            @return A pointer to the newly allocated localizable component info object, if creation is successful.
+         */
+        IMPORT_C static CLocalizableComponentInfo* NewL(const TDesC& aName, const TDesC& aVendor, TLanguage aLocale);
+        
+        /**
+            Creates a localizable component information object.
+            @param aName The name of the component.
+            @param aVendor The vendor of the component.
+            @param aLocale The language code of the object's locale.
+            @return A pointer to the newly allocated component information object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CLocalizableComponentInfo* NewLC(const TDesC& aName, const TDesC& aVendor, TLanguage aLocale);
+        
+        /**
+            Creates a localizable component information from a stream.
+            @param aStream The stream to read the component information object from.
+            @return A pointer to the newly allocated component information object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CLocalizableComponentInfo* NewL(RReadStream& aStream);
+        
+        ~CLocalizableComponentInfo();
+        
+        /**
+            Externalises a localizable component information object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+         */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;    
+        
+        /** @return The localizable name of the component. */
+        IMPORT_C const TDesC& NameL() const;
+        
+        /** @return The localizable vendor name of the component. */
+        IMPORT_C const TDesC& VendorL() const;
+        
+    private:
+        CLocalizableComponentInfo();
+        CLocalizableComponentInfo(TLanguage aLocale);
+        void ConstructL(const TDesC& aName, const TDesC& aVendor);
+        void InternalizeL(RReadStream& aStream);
+        
+    private:
+        HBufC* iName;      ///< The localizable component name.
+        HBufC* iVendor;    ///< The localizable component vendor name.
+        };
+    
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS    
+    NONSHARABLE_CLASS(CLocalizedSoftwareTypeName) : public CLocalizableCommonData
+        /**
+            This class contains localized software type names.
+            Software type names are localizable names and transferred to the SCR 
+            with the objects of this class.
+            
+            @internalTechnology
+         */
+            {
+        public: 
+            /**
+                Creates a localized software type name object.
+                @param aName The name of the software type.
+                @param aLocale The language code of the object's locale.
+                @return A pointer to the newly allocated localized software type name object, if creation is successful.
+             */
+            IMPORT_C static CLocalizedSoftwareTypeName* NewL(const TDesC& aName, TLanguage aLocale);
+            
+            /**
+                Creates a localized software type name object.
+                @param aName The name of the software type.
+                @param aLocale The language code of the object's locale.
+                @return A pointer to the newly allocated localized software type name object, if creation is successful.
+                        The pointer is also put onto the cleanup stack.
+             */
+            IMPORT_C static CLocalizedSoftwareTypeName* NewLC(const TDesC& aName, TLanguage aLocale);
+            
+            /**
+                Creates a localized software type name object from a stream.
+                @param aStream The stream to read the localized software type name object from.
+                @return A pointer to the newly allocated localized software type name object, if creation is successful.
+                @internalComponent
+             */
+            IMPORT_C static CLocalizedSoftwareTypeName* NewL(RReadStream& aStream);
+            
+            ~CLocalizedSoftwareTypeName();
+            
+            /**
+                Externalises a localized software type name object to a write stream.
+                @param aStream The stream to which the object is externalised.
+                @internalComponent
+             */
+            IMPORT_C void ExternalizeL(RWriteStream& aStream) const;    
+            
+            /** @return The localized software type name. */
+            IMPORT_C const TDesC& NameL() const;
+            
+        private:
+            CLocalizedSoftwareTypeName();
+            CLocalizedSoftwareTypeName(TLanguage aLocale);
+            void ConstructL(const TDesC& aName);
+            void InternalizeL(RReadStream& aStream);
+            
+        private:
+            HBufC* iName;      ///< The localized software type name.
+            };
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS   
+    
+    enum TScrComponentOperationType
+    /**
+        The type of the operation being performed on an SCR component. 
+     */
+        {
+        EScrCompInstall =0,     ///< A new SCR component is added.
+        EScrCompUnInstall,      ///< A existing SCR component is removed.
+        EScrCompUpgrade,        ///< An existing SCR component is updated.
+        EScrCompHidden          ///< The component operation is hidden to the user. N.B. SCR doesn't save logs for this type of operation.
+        };
+    
+    NONSHARABLE_CLASS (CScrLogEntry) : public CBase
+    /**
+        Class that represents a software component log record generated by the SCR.
+     */ 
+        {
+        friend class CScrRequestImpl;
+    public:
+        /**
+            Creates a log entry object.
+            @param aComponentName The name of the component.
+            @param aUniqueSwTypeName The non-localized, unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
+            @param aGlobalId The global Id of the component.
+            @param aVersion The version of the component.
+            @param aCompOpType The type of the component operation. @see Usif::TScrComponentOperationType
+            @return A pointer to the newly allocated log entry object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CScrLogEntry* NewL(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType);
+        
+        /**
+            Creates a log entry object.
+            @param aComponentName The name of the component.
+            @param aUniqueSwTypeName The non-localized, unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
+            @param aGlobalId The global Id of the component.
+            @param aVersion The version of the component.
+            @param aCompOpType The type of the component operation. @see Usif::TScrComponentOperationType
+            @return A pointer to the newly allocated log entry object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+            @internalComponent      
+         */
+        IMPORT_C static CScrLogEntry* NewLC(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType);
+
+        /**
+            Creates a log entry object from a stream.
+            @param aStream The stream to read the log entry object from.
+            @return A pointer to the newly allocated log entry object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+            @internalComponent
+        */
+        IMPORT_C static CScrLogEntry* NewLC(RReadStream& aStream);
+        
+        ~CScrLogEntry();
+        
+        /**
+            Write the object to a stream 
+         
+            @param aStream The stream to write to
+            @internalComponent
+         */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+         
+        /**
+            Read the object from a stream
+         
+            @param aStream The stream to read from.
+            @internalComponent
+         */
+        IMPORT_C void InternalizeL(RReadStream& aStream) ;
+        
+        /**
+            @return The name of the component for which the log was generated.
+         */
+        IMPORT_C const TDesC& ComponentName() const; 
+        
+        /**
+            @return The non-localized, unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
+         */
+        IMPORT_C const TDesC& SoftwareTypeName() const;
+        
+        /**
+            The UID.
+            @return The global ID of the component.
+         */
+        IMPORT_C const TDesC& GlobalId() const; 
+                
+        /**
+            @return The version of the component.
+         */
+        IMPORT_C const TDesC& ComponentVersion() const; 
+        
+        /**
+            @return The time when the operation occured.
+         */
+        IMPORT_C const TTime OperationTime() const; 
+                
+        /**
+            @return The type of the component operation for the log record.
+         */
+        IMPORT_C TScrComponentOperationType OperationType() const;
+        
+        /**
+            @return The component id of the log record.
+            @internalComponent
+         */
+        IMPORT_C TComponentId ComponentId() const;
+    
+    private:
+        CScrLogEntry();
+        void ConstructL(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType);
+        
+    private:    
+        HBufC* iComponentName ;
+        HBufC* iSwTypeName;
+        HBufC* iVersion;
+        TScrComponentOperationType iOpType ; 
+        TTime  iRecordTime ;   
+        HBufC* iGlobalId;
+        TComponentId iComponentId; 
+        };
+
+    } // End of namespace Usif
+
+#endif // SCRENTRIES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc/screntries_internal.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Declares entry classes for Software Components Registry interface.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef SCRENTRIES_INTERNAL_H
+#define SCRENTRIES_INTERNAL_H
+
+#include <e32base.h>
+#include <s32strm.h>
+#include <f32file.h> 
+#include <usif/usifcommon.h>
+#include <usif/scr/screntries.h>
+
+//class Usif::CLocalizableCommonData;
+//class Usif::CScrLogEntry;
+
+namespace Usif
+	{
+		class CLocalizableCommonData;
+		NONSHARABLE_CLASS(CLocalizedSoftwareTypeName) : public CLocalizableCommonData
+		/**
+			This class contains localized software type names.
+			Software type names are localizable names and transferred to the SCR 
+			with the objects of this class.
+			
+			@internalTechnology
+		 */
+			{
+		public:	
+			/**
+				Creates a localized software type name object.
+				@param aName The name of the software type.
+				@param aLocale The language code of the object's locale.
+				@return A pointer to the newly allocated localized software type name object, if creation is successful.
+			 */
+			IMPORT_C static CLocalizedSoftwareTypeName* NewL(const TDesC& aName, TLanguage aLocale);
+			
+			/**
+				Creates a localized software type name object.
+				@param aName The name of the software type.
+				@param aLocale The language code of the object's locale.
+				@return A pointer to the newly allocated localized software type name object, if creation is successful.
+						The pointer is also put onto the cleanup stack.
+			 */
+			IMPORT_C static CLocalizedSoftwareTypeName* NewLC(const TDesC& aName, TLanguage aLocale);
+			
+			/**
+				Creates a localized software type name object from a stream.
+				@param aStream The stream to read the localized software type name object from.
+				@return A pointer to the newly allocated localized software type name object, if creation is successful.
+				@internalComponent
+			 */
+			IMPORT_C static CLocalizedSoftwareTypeName* NewL(RReadStream& aStream);
+			
+			~CLocalizedSoftwareTypeName();
+			
+			/**
+				Externalises a localized software type name object to a write stream.
+				@param aStream The stream to which the object is externalised.
+				@internalComponent
+			 */
+			IMPORT_C void ExternalizeL(RWriteStream& aStream) const;	
+			
+			/** @return The localized software type name. */
+			IMPORT_C const TDesC& NameL() const;
+			
+		private:
+			CLocalizedSoftwareTypeName();
+			CLocalizedSoftwareTypeName(TLanguage aLocale);
+			void ConstructL(const TDesC& aName);
+			void InternalizeL(RReadStream& aStream);
+			
+		private:
+			HBufC* iName;	   ///< The localized software type name.
+			};
+
+	} // End of namespace Usif
+
+#endif // SCRENTRIES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc/screntries_platform.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Declares entry classes for Software Components Registry interface.
+*
+*/
+
+
+/**
+ @file
+ @publishedPartner
+ @released
+*/
+
+#ifndef SCRENTRIES_PARTNER_H
+#define SCRENTRIES_PARTNER_H
+
+#include <e32base.h>
+#include <s32strm.h>
+#include <f32file.h> 
+#include <usif/usifcommon.h>
+#include <usif/scr/screntries.h>
+#include <ct/rcpointerarray.h>
+
+namespace Usif
+	{
+    class CLocalizedSoftwareTypeName;
+
+    enum TAccessMode
+        {
+        ETransactionalSid   = 0x0001,    // Sids requiring component/application transactional support, usually Installers/Execution layers
+        EMaxAccessMode      = 0xFFFF
+        };
+    
+	NONSHARABLE_CLASS (TCustomAccessInfo)
+		{
+	public:
+	    IMPORT_C TSecureId SecureId() const;
+	    IMPORT_C TAccessMode AccessMode() const;
+	    IMPORT_C TCustomAccessInfo(TSecureId aSecureId, TAccessMode aAccessMode);
+			    
+	private:
+	    TAccessMode iAccessMode;
+	    TSecureId iSecureId;
+		};
+		
+	NONSHARABLE_CLASS (CSoftwareTypeRegInfo) : public CBase
+		{
+	public:
+		IMPORT_C static CSoftwareTypeRegInfo* NewL(const TDesC& aUniqueSoftwareTypeName);
+		IMPORT_C static CSoftwareTypeRegInfo* NewL(RReadStream& aStream);
+
+		IMPORT_C virtual ~CSoftwareTypeRegInfo();
+		
+		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+
+		inline void SetSifPluginUid(TUid aUid);
+		inline void SetCustomAccessL(TCustomAccessInfo aCustomAccessListInfo);
+		inline void SetCustomAccessL(TSecureId aSecureId, TAccessMode aAccessMode);
+		IMPORT_C void SetMimeTypeL(const TDesC& aMimeType);
+		IMPORT_C void SetLocalizedSoftwareTypeNameL(TLanguage aLanguage, const TDesC& aName);
+		IMPORT_C void SetLauncherExecutableL(const TDesC& aLauncherExecutable);
+
+		inline const TDesC& UniqueSoftwareTypeName() const;
+		inline TUid SifPluginUid() const;
+		inline RArray<TCustomAccessInfo> CustomAccessList() const;
+		
+		inline const RPointerArray<HBufC>& MimeTypes() const;
+		inline const RPointerArray<CLocalizedSoftwareTypeName>& LocalizedSoftwareTypeNames() const;
+		inline const TDesC& LauncherExecutable() const;
+
+	private:
+		CSoftwareTypeRegInfo();
+		void InternalizeL(RReadStream& aStream);
+
+		enum { EUniqueSwTypeNameMaxLength = 64,
+               ELauncherExecutableMaxLength = 512}; 
+
+		HBufC* iUniqueSoftwareTypeName;
+		TUid iSifPluginUid;
+		RArray<TCustomAccessInfo> iCustomAccessList;
+		RCPointerArray<HBufC> iMimeTypes;
+		RCPointerArray<CLocalizedSoftwareTypeName> iLocalizedSoftwareTypeNames;
+		HBufC* iLauncherExecutable;
+		};
+
+	inline void CSoftwareTypeRegInfo::SetSifPluginUid(TUid aUid)
+	    {
+	    iSifPluginUid = aUid;
+	    }
+
+	inline void CSoftwareTypeRegInfo::SetCustomAccessL(TCustomAccessInfo aCustomAccessList)
+	    {
+	    iCustomAccessList.AppendL(aCustomAccessList);
+	    }
+
+    inline void CSoftwareTypeRegInfo::SetCustomAccessL(TSecureId aSecureId, TAccessMode aAccessMode)
+        {
+        iCustomAccessList.AppendL(TCustomAccessInfo(aSecureId, aAccessMode));
+        }
+    
+	inline const TDesC& CSoftwareTypeRegInfo::UniqueSoftwareTypeName() const
+        {
+	    if (iUniqueSoftwareTypeName == NULL)
+	        {
+	        return KNullDesC;
+	        }
+	    return *iUniqueSoftwareTypeName;
+	    }
+
+	inline TUid CSoftwareTypeRegInfo::SifPluginUid() const
+        {
+	    return iSifPluginUid;
+	    }
+
+	inline RArray<TCustomAccessInfo> CSoftwareTypeRegInfo::CustomAccessList() const
+        {
+	    return iCustomAccessList;
+	    }
+	
+	const RPointerArray<HBufC>& CSoftwareTypeRegInfo::MimeTypes() const
+	    {
+	    return iMimeTypes;
+	    }
+
+	inline const RPointerArray<CLocalizedSoftwareTypeName>& CSoftwareTypeRegInfo::LocalizedSoftwareTypeNames() const
+	    {
+	    return iLocalizedSoftwareTypeNames;
+	    }
+	
+	inline const TDesC& CSoftwareTypeRegInfo::LauncherExecutable() const
+	    {
+	    if (iLauncherExecutable == NULL)
+	        {
+	        return KNullDesC;
+	        }
+	    return *iLauncherExecutable;
+	    }
+	    
+	} // End of namespace Usif
+
+#endif // SCRENTRIES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc/tscr.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef TSCR_IBY
+#define TSCR_IBY
+
+#include  "tefeventlogpluginserver.iby"
+
+define ZDRIVE \epoc32\data\Z
+
+REM Software Component Registry Test Suite
+
+file=ABI_DIR\BUILD_DIR\tscr.exe				\sys\bin\tscr.exe
+file=ABI_DIR\BUILD_DIR\tscrdatalayer.exe	\sys\bin\tscrdatalayer.exe
+file=ABI_DIR\BUILD_DIR\tscraccessor.exe		\sys\bin\tscraccessor.exe
+file=ABI_DIR\BUILD_DIR\tscrapparc.exe		\sys\bin\tscrapparc.exe
+
+data=ZDRIVE\tusif\tscr\tscr.ini					\tusif\tscr\tscr.ini	
+data=ZDRIVE\tusif\tscr\tscr.script				\tusif\tscr\tscr.script	
+data=ZDRIVE\tusif\tscr\tscr_api.script			\tusif\tscr\tscr_api.script
+data=ZDRIVE\tusif\tscrdatalayer\tscr_datalayer.script	\tusif\tscrdatalayer\tscr_datalayer.script	
+
+data=ZDRIVE\tusif\tscr\tscr_performance.ini				\tusif\tscr\tscr_performance.ini
+data=ZDRIVE\tusif\tscr\tscr_performance.script			\tusif\tscr\tscr_performance.script
+data=ZDRIVE\tusif\tscr\tscr_performance_cases.script	\tusif\tscr\tscr_performance_cases.script
+data=ZDRIVE\tusif\tscr\tscr_app_performance_cases.script \tusif\tscr\tscr_app_performance_cases.script
+
+data=ZDRIVE\tusif\tscr\tscr_appreginfo.ini		\tusif\tscr\tscr_appreginfo.ini	
+data=ZDRIVE\tusif\tscr\tscr_appreginfo.script		\tusif\tscr\tscr_appreginfo.script
+data=ZDRIVE\tusif\tscr\tscrapparc.script		\tusif\tscr\tscrapparc.script	
+
+data=ZDRIVE\tusif\tscrdatalayer\data\nondb.db			\tusif\tscrdatalayer\data\nondb.db
+data=ZDRIVE\tusif\tscr\data\scr_small.db		\tusif\tscr\data\scr_small.db
+data=ZDRIVE\tusif\tscr\data\scr_medium.db		\tusif\tscr\data\scr_medium.db
+data=ZDRIVE\tusif\tscr\data\scr_large.db		\tusif\tscr\data\scr_large.db
+
+data=ZDRIVE\tusif\tscr\tscr_versioning.script			\tusif\tscr\tscr_versioning.script
+
+data=ZDRIVE\tusif\tscr\data\scr-differentbuildnumber.db			\tusif\tscr\data\scr-differentbuildnumber.db
+data=ZDRIVE\tusif\tscr\data\scr-newermajordbversion.db			\tusif\tscr\data\scr-newermajordbversion.db
+data=ZDRIVE\tusif\tscr\data\scr-oldermajordbversion.db			\tusif\tscr\data\scr-oldermajordbversion.db
+data=ZDRIVE\tusif\tscr\data\scr-olderminordbversion.db			\tusif\tscr\data\scr-olderminordbversion.db
+data=ZDRIVE\tusif\tscr\data\scr-newerminordbversion.db			\tusif\tscr\data\scr-newerminordbversion.db
+data=ZDRIVE\tusif\tscr\data\scr-noentriesinversiontable.db			\tusif\tscr\data\scr-noentriesinversiontable.db
+data=ZDRIVE\tusif\tscr\data\scr-noversiontable.db			\tusif\tscr\data\scr-noversiontable.db
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc_private/scr_internal.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* SCR Internal client which should be used to implement all internal functions
+* to the SCR server.
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef SCR_INTERNAL_H
+#define SCR_INTERNAL_H
+
+namespace Usif {
+
+NONSHARABLE_CLASS(RScrInternalClient) : public RScsClientBase
+    {
+    /**
+     * This client should be used to implement all internal functions to the SCR server.
+     */
+public:
+    
+    IMPORT_C RScrInternalClient();
+        
+    IMPORT_C TInt Connect();
+
+    IMPORT_C void Close();
+    
+    /**
+         Generates a new Application Uid which can be used to register a non native application.
+                  
+         @return An unused UID if available, else a NULL TUid object is returned. 
+     */
+    IMPORT_C TUid GenerateNewAppUidL() const;
+
+    };
+
+} // namespace Usif
+
+#endif // SCR_INTERNAL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc_private/scrclient.inl	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Utils functions used by scr session and subsession clients.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef SCRCLIENT_INL
+#define SCRCLIENT_INL
+
+#include <usif/scr/scr.h>
+#include <scs/cleanuputils.h>
+#include <scs/streamingarray.h>
+#include <s32mem.h>
+
+namespace Usif
+	{
+	template <class C>
+	inline HBufC8* GetObjectDataLC(const C& aConnection, TInt aFunction, TInt aDataSize)
+		{
+		HBufC8 *buf = HBufC8::NewLC(aDataSize);
+		TPtr8 ptrBuf(buf->Des());
+		TIpcArgs argBuf(&ptrBuf);
+		User::LeaveIfError(aConnection.SendSyncMessage(aFunction, argBuf));
+		return buf; 
+		}
+	
+	template <class T, class C>
+	inline T* GetObjectL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs)
+		{
+		TInt size(0);
+		TPckg<TInt> sizePak(size);
+		aArgs.Set(aArgNum, &sizePak);
+		User::LeaveIfError(aConnection.SendSyncMessage(aSizeFunction, aArgs));
+		if(!size)
+			{// There is no related object return NULL
+			return NULL;
+			}
+		HBufC8 *buf = GetObjectDataLC(aConnection, aDataFunction, size);
+			
+		RDesReadStream stream(*buf);
+		CleanupClosePushL(stream);
+		T *retObject = TTraits<T>::ReadFromStreamL(stream);
+		CleanupStack::PopAndDestroy(2, buf);
+		return retObject;
+		}
+	
+	template <class T, class C>
+	inline TBool GetObjectL(const C& aConnection, T& aObject, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs)
+		{
+		TInt size(0);
+		TPckg<TInt> sizePak(size);
+		aArgs.Set(aArgNum, &sizePak);
+		User::LeaveIfError(aConnection.SendSyncMessage(aSizeFunction, aArgs));
+		if(!size)
+			{// There is no related object, return EFalse
+			return EFalse;
+			}
+		HBufC8 *buf = GetObjectDataLC(aConnection, aDataFunction, size);
+				
+		RDesReadStream stream(*buf);
+		CleanupClosePushL(stream);
+		aObject.InternalizeL(stream);
+		CleanupStack::PopAndDestroy(2, buf);
+		return ETrue;
+		}
+	
+	template <class C, class T>
+	inline void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RPointerArray<T>& aArray)
+		{
+		TInt size(0);
+		TPckg<TInt> sizePak(size);
+		aArgs.Set(aArgNum, &sizePak);
+		User::LeaveIfError(aConnection.SendSyncMessage(aSizeFunction, aArgs));
+		if(!size)
+			{// There is no related data, return.
+			return;
+			}
+		HBufC8 *buf = GetObjectDataLC(aConnection, aDataFunction, size);
+			
+		RDesReadStream stream(*buf);
+		CleanupClosePushL(stream);
+		InternalizePointersArrayL(aArray, stream);
+		CleanupStack::PopAndDestroy(2, buf);
+		}
+	
+	template <class C, class T>
+	inline void GetObjectArrayL(const C& aConnection, TInt aSizeFunction, TInt aDataFunction, TInt aArgNum, TIpcArgs& aArgs, RArray<T>& aArray)
+		{
+		TInt size(0);
+		TPckg<TInt> sizePak(size);
+		aArgs.Set(aArgNum, &sizePak);
+		User::LeaveIfError(aConnection.SendSyncMessage(aSizeFunction, aArgs));
+		if(!size)
+			{// There is no related data, return.
+			return;
+			}
+		HBufC8 *buf = GetObjectDataLC(aConnection, aDataFunction, size);
+				
+		RDesReadStream stream(*buf);
+		CleanupClosePushL(stream);
+		InternalizeFixedLengthArrayL(aArray, stream);
+		CleanupStack::PopAndDestroy(2, buf);
+		}
+	
+	template <class C>
+	inline void ExternalizeObjectL(const C* aObject, RBuf8& aBuf)
+		{
+		const C *localCopyOfObject(0);
+		
+		if(!aObject)
+			{// if object is not supplied, then create an empty one.
+			localCopyOfObject = C::NewLC();
+			}
+		else
+			{
+			localCopyOfObject = aObject;
+			}
+			
+		// Get the required buffer size for the externalized C object
+		TInt bufSize = GetObjectBufferSizeL(*localCopyOfObject);
+			
+		// Clean the buffer and re-create it with the required buffer size 
+		aBuf.Close();
+		aBuf.CreateL(bufSize);
+			
+		// Externalize the filter object into the buffer
+		RDesWriteStream wstream(aBuf);
+		wstream.PushL();
+		wstream << *localCopyOfObject;
+		wstream.CommitL();
+		wstream.Pop();
+		wstream.Release();
+			
+		if(!aObject)
+			{// destroy the filter if created locally
+			CleanupStack::PopAndDestroy((C*)localCopyOfObject);
+			}
+		}// End of ExternalizeObjectL
+	
+    template <class C>
+    inline void ExternalizeRefObjectL(const C& aObject, RBuf8& aBuf)
+        {
+        // Get the required buffer size for the externalized C object
+        TInt bufSize = GetObjectBufferSizeL(aObject);
+            
+        // Clean the buffer and re-create it with the required buffer size 
+        aBuf.Close();
+        aBuf.CreateL(bufSize);
+            
+        // Externalize the filter object into the buffer
+        RDesWriteStream wstream(aBuf);
+        wstream.PushL();
+        wstream << aObject;
+        wstream.CommitL();
+        wstream.Pop();
+        wstream.Release();
+            
+        }// End of ExternalizeObjectL	
+	}
+
+#endif /* SCRCLIENT_INL */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc_private/scrdatabase.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,310 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* SCR Data Layer API which performs all interaction with the underlying database.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef SCRSCRDATABASE_H
+#define SCRSCRDATABASE_H
+
+#include <e32base.h>
+#include <f32file.h>
+
+namespace Usif
+	{
+	// Forward declarations
+	class CDatabaseImplementation;
+	class CStatementImplementation;
+	class CStatement;
+	
+	NONSHARABLE_CLASS(CDatabase) : public CBase
+	/**
+		This class provides the means to connect the SCR database and execute all SQL statements.
+		It is intended to be used as a singleton instance by the SCR sessions. 
+	 */
+		{
+		friend class CStatement; // CStatement class needs to access CheckSqlErrCodeL
+	public:
+		/**
+		 	Creates a new database object with an handle to the given database file.
+		 	
+			@param aDatabaseFile The database file handle.
+			@param aJournalNameZ The journal file handle.
+		 	@leave KErrNotFound The file opened is not a database file.
+		 	@leave KErrUnknown The database file is missing. 
+		 	@leave KErrCorrupt The database disk image is malformed.
+		 	@leave KErrNoMemory An attempt to allocate memory has failed.
+		 	@leave KErrInUse The database file is locked by another thread.
+		 	@leave KErrAccessDenied Unable to open the database file. Access permission may be denied.
+		 	@leave Or other system wide error codes
+		 */
+		IMPORT_C static CDatabase* NewL(RFile& aDatabaseFile, RFile& aJournalFile);
+		
+		/**
+			Creates a new database object with an handle to the given database file and leaves
+			the newly created object on the cleanup stack.
+			
+			@param aDatabaseFile The database file handle.
+			@param aJournalNameZ The journal file handle.
+		 	@see CDatabase::NewL
+		 */
+		IMPORT_C static CDatabase* NewLC(RFile& aDatabaseFile, RFile& aJournalFile);
+		
+		/**
+			Destructor. The handle to the database file is closed.
+		 */
+		IMPORT_C ~CDatabase();
+		
+		/**
+		    Prepares the provided SQL statement for execution and returns 
+		    the prepared statement object which can be executed later.  
+
+			The SQL statement must contain a single statement and end with semicolon(;).
+			
+			@param aStatementStr The satement which will be prepared.
+			@return A pointer to the statement object which has got a handle to the result rows set.
+			        The returned object is left on the cleanup stack.
+			@leave KErrNotFound The database file could not be opened for some reason OR the table 
+			                    or the requested record could not be found OR the database is empty. 
+			@leave KErrCorrupt The database schema has changed.
+			@leave KErrNoMemory An attempt to allocate memory has failed OR some kind of disk I/O 
+			                    operation couldn't be performed (probably no space left on the disk)
+			                    OR the database is too big (larger than 2GB in size).
+			@leave KErrInUse A table in the database is locked.
+			@leave KErrOverflow Too much data(probably more than 1 megabyte in a single row).
+			@leave KErrCancel The operation in progress has been terminated externally.
+			@leave KErrNotSupported The library has been used incorrectly,
+			@leave KErrAbort Abort due to constraint violation.
+			@leave KErrArgument This error value indicates that there was an error in the SQL
+			                    statement that was passed into. Data type mismatch may have been
+			                    occurred OR the provided SQL was badly constructed OR contains 
+			                    more than one statement.
+			@leave KErrUnknown An internal error in the underlaying database engine occurred.
+			@leave KErrGeneral An unspecified error ocurred in the database engine.		
+		 */
+		IMPORT_C CStatement* PrepareStatementLC(const TDesC& aStatementStr);
+			
+		/**
+			@return The row id of the most recent successful insert into the database from this connection.
+			@leave KErrNotFound If no successful inserts have ever occurred on this database connection.
+		 */
+		IMPORT_C TInt LastInsertedIdL();
+		
+	private:
+		CDatabase();
+		void ConstructL(RFile& aDatabaseFile, RFile& aJournalFile);
+		void CheckSqlErrCodeL(TInt aErr);
+		
+	private:
+		CDatabaseImplementation* iDbImpl;	///< Pointer to the database implementation object.
+		};
+	
+	
+	
+	NONSHARABLE_CLASS(CStatement) : public CBase
+	/**
+		An instance of this class is used to execute all types of SQL statements with or without
+		parameters. 
+	 */
+		{
+		friend class CDatabase; // Only CDatabase can construct an object of this class.
+	public:
+		IMPORT_C ~CStatement();
+		
+		/** 
+		 	If the SQL statement being executed returns any data, this function makes
+		 	a new row of data ready for processing. The values may be accessed using
+		 	the column access functions (@see CStatement::StrColumnL and @see CStatement::IntColumnL).
+		 	
+			When this function is called again to retrieve the next row of data, the previous row data
+			is not accessible any more.
+			
+			If the caller wants to close the statement before retrieving all the rows, it needs to
+			just destroy the CStatement object.
+			
+			@return Returns EFalse if no more rows are available. 
+			@leave Leaves with one of the error codes listed in @see CDatabase::PerformStatementLC
+		 */
+		IMPORT_C TBool ProcessNextRowL();
+		
+		/**
+			Eexecutes the prepared SQL statement. This function is appropriate to execute
+			SQL statements which do NOT return a result row set (e.g. INSERT and UPDATE).
+			If the SQL satetement contains parameters, the prepared statement can be bound
+			and executed many times.
+				 	
+			@param aStatement The satement which will be executed.
+			@leave Leaves with one of the leave codes given in @see CStatement::PrepareStatementLC.
+		 */
+		IMPORT_C void ExecuteStatementL();
+		
+		/**
+			Sets the parameter given with the index value to the specified 32-bit integer value.
+			A parameter value can be set:
+			- immediately after this object has been created
+			- after a call to @see CStatement::Reset 
+			@param aParameterIndex The index value identifying the parameter; the first parameter 
+			       has an index of 1.
+			@param The 32-bit integer value to be assigned to the parameter.
+			@leave Leaves with one of the error codes listed in @see CDatabase::PerformStatementLC 
+		 */
+		IMPORT_C void BindIntL(TInt aParameterIndex, TInt aParameterValue);
+		
+		/**
+			Sets the parameter given with the index value to the specified 64-bit integer value.
+			A parameter value can be set:
+			- immediately after this object has been created
+			- after a call to @see CStatement::Reset 
+			@param aParameterIndex The index value identifying the parameter; the first parameter 
+			       has an index of 1.
+			@param The 64-bit integer value to be assigned to the parameter.
+			@leave Leaves with one of the error codes listed in @see CDatabase::PerformStatementLC 
+		 */
+		IMPORT_C void BindInt64L(TInt aParameterIndex, TInt64 aParameterValue);
+		
+		/**
+			Sets the parameter given with the index value to the specified 16-bit descriptor.
+			A parameter value can be set:
+			- immediately after this object has been created
+			- after a call to @see CStatement::Reset 
+			@param aParameterIndex The index value identifying the parameter; the first parameter 
+			       has an index of 1.
+			@param aParameterStr The 16-bit descriptor whose content is to be assigned to the parameter.
+			@leave KErrArgument If the input string's length is more than 512 characters
+			@leave Leaves with one of the error codes listed in @see CDatabase::PerformStatementLC 
+		 */
+		IMPORT_C void BindStrL(TInt aParameterIndex, const TDesC &aParameterStr);
+		
+		/**
+			Sets the parameter given with the index value to the specified 8-bit descriptor.
+			A parameter value can be set:
+			- immediately after this object has been created
+			- after a call to @see CStatement::Reset 
+			@param aParameterIndex The index value identifying the parameter; the first parameter 
+			       has an index of 1.
+			@param aParameterStr The 8-bit descriptor whose content is to be assigned to the parameter.
+			@leave KErrArgument If the input string's length is more than 512 characters			
+			@leave Leaves with one of the error codes listed in @see CDatabase::PerformStatementLC 
+		 */
+		IMPORT_C void BindBinaryL(TInt aParameterIndex, const TDesC8 &aParameterStr);		
+
+		/**
+            Sets the parameter given with the index value to the specified 8-bit descriptor.
+            A parameter value can be set:
+            - immediately after this object has been created
+            - after a call to @see CStatement::Reset
+             
+            @param aParameterIndex The index value identifying the parameter; the first parameter 
+                   has an index of 1.
+            @param aParameterStr The 8-bit descriptor whose content is to be assigned to the parameter.
+            @param aCustomLength The maximum characters allowed
+            
+            @leave KErrArgument If the input string's length is more than aCustomLength            
+            @leave Leaves with one of the error codes listed in @see CDatabase::PerformStatementLC 
+         */
+		IMPORT_C void BindBinaryL(TInt aParameterIndex, const TDesC8 &aParameterStr, TUint aCustomLength);
+		
+		/** 
+			Retrieves the value of a string column. The caller must know the string column index.
+			In addition, the caller must make the copy if they want to process multiple rows at once.
+			
+			@param aColIdx The index of the column in the result set.
+			@return The string value of the column given.
+			@leave KErrArgument The supplied column index is not valid or its type is not string.
+			@leave Or one of the error codes listed in @see CDatabase::PerformStatementLC
+		*/
+		IMPORT_C TPtrC StrColumnL(TInt aColIdx) const;
+		
+		/** 
+			Retrieves the value of a raw binary data column. The caller must know the column index.
+			In addition, the caller must make the copy if they want to process multiple rows at once.
+			
+			@param aColIdx The index of the column in the result set.
+			@return The binary value of the column given.
+			@leave KErrArgument The supplied column index is not valid or its type is not string.
+			@leave Or one of the error codes listed in @see CDatabase::PerformStatementLC
+		*/
+		IMPORT_C TPtrC8 BinaryColumnL(TInt aColIdx) const;		
+		
+		/** 
+			Retrieves the value of a integer column. The caller must know the integer column index.
+			The return value is 64-bit integer.
+			
+			@param aColIdx The index of the column in the result set.
+			@return The integer value of the column given.
+			@leave KErrArgument The supplied column index is not valid or its type is not integer.
+			@leave Or one of the error codes listed in @see CDatabase::PerformStatementLC
+		*/
+		IMPORT_C TInt64 Int64ColumnL(TInt aColIdx) const;
+		
+		/** 
+			Retrieves the value of an integer column. The caller must know the integer column index.
+			The return value is 32-bit integer. 
+					
+			@param aColIdx The index of the column in the result set.
+			@return The integer value of the column given.
+			@leave KErrArgument The supplied column index is not valid or its type is not integer.
+			@leave Or one of the error codes listed in @see CDatabase::PerformStatementLC
+		 */
+		IMPORT_C TInt IntColumnL(TInt aColIdx) const;
+				
+		/**
+			Resets this SQL statement object to its initial state and makes it ready to be executed again.
+			Any SQL statement parameters that had values bound to them, retain their values.
+			If this object processes a parameterised SQL statement, then the parameter values 
+			can be bound after the call to Reset().
+			@leave Leaves with one of the error codes listed in @see CDatabase::PerformStatementLC
+		 */
+		IMPORT_C void ResetL();
+		
+		/**
+			Returns whether the specified field (column) of a row is NULL.
+			Note that if the field is NULL, it does NOT mean that the corresponding fields of 
+			other rows are NULL as well.
+			@param aColIdx The index of the column in the result set.
+			@return ETrue, if the field is NULL, otherwise EFalse.
+			@leave KErrArgument The supplied column index is not valid.
+		 */
+		IMPORT_C TBool IsFieldNullL(TInt aColIdx) const;
+		
+	private:
+		/**
+			Creates a new CStatement object on the heap.
+			
+			@param aDb Refrence to the database object.
+			@param aStmtImpl Pointer to the statement implementation. The ownership is also passed
+			                 to the CStatement object.
+			@return The newly created CStatement object.
+			
+		 */
+		static CStatement* NewL(const CDatabase& aDb, CStatementImplementation* aStmtImpl);
+		
+		CStatement(const CDatabase& aDb, CStatementImplementation* aStmtImpl);
+		void ValidateRequestedColumnL(TInt aColIdx, TInt& aColumnType) const;
+		
+	private:
+		const CDatabase& iDb; ///< Reference to the database object which creates this statement object.
+		CStatementImplementation* iStmtImpl; ///< Pointer to the SQL statement implementation
+		};	
+	} // namespace Usif
+
+#endif // SCRSCRDATABASE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc_private/scrdbschema.sql	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+BEGIN TRANSACTION CreateScrDatabase;
+CREATE TABLE SoftwareTypes(SoftwareTypeId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeName TEXT NOT NULL UNIQUE,SifPluginUid INTEGER,InstallerSecureId INTEGER,ExecutionLayerSecureId INTEGER);
+CREATE INDEX idx_SoftwareTypes_MimeType ON SoftwareTypes(SoftwareTypeName);
+CREATE TABLE MimeTypes(MimeTypeId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeId INTEGER NOT NULL,MimeType TEXT NOT NULL UNIQUE COLLATE NOCASE);
+CREATE INDEX idx_MimeTypes_SoftwareType ON MimeTypes(SoftwareTypeId);
+CREATE TABLE Components(ComponentId INTEGER PRIMARY KEY AUTOINCREMENT,SoftwareTypeId INTEGER NOT NULL,Size INTEGER DEFAULT 0,Removable BOOLEAN DEFAULT 1,ScomoState INTEGER DEFAULT 0,DRMProtected INTEGER DEFAULT 0,Hidden INTEGER DEFAULT 0,KnownRevoked INTEGER DEFAULT 0,OriginVerified INTEGER DEFAULT 0,InstalledDrives INTEGER DEFAULT 0,GlobalIdHash INTEGER DEFAULT 0,GlobalId TEXT UNIQUE,Version TEXT,InstallTime TEXT NOT NULL,CompPresence BOOLEAN DEFAULT 1);
+CREATE INDEX idx_Components_SoftwareTypeId ON Components(SoftwareTypeId);
+CREATE INDEX idx_Components_GlobalIdIdHash ON Components(GlobalIdHash);
+CREATE TABLE ComponentLocalizables(CompLocalId INTEGER PRIMARY KEY AUTOINCREMENT, ComponentId INTEGER DEFAULT 0,ApplicationId INTEGER DEFAULT 0,Locale INTEGER DEFAULT 0,Name TEXT NOT NULL,Vendor TEXT);
+CREATE INDEX idx_ComponentLocalizables_ComponentId ON ComponentLocalizables(ComponentId);
+CREATE TABLE ComponentDependencies(GlobalIdHash INTEGER PRIMARY KEY NOT NULL,DependantGlobalIdHash INTEGER NOT NULL, SupplierGlobalIdHash INTEGER NOT NULL, DependantGlobalId TEXT NOT NULL,SupplierGlobalId TEXT NOT NULL,VersionFrom TEXT, VersionTo TEXT);
+CREATE INDEX idx_ComponentDependencies_DependantGlobalId ON ComponentDependencies(DependantGlobalIdHash);
+CREATE INDEX idx_ComponentDependencies_SupplierGlobalId ON ComponentDependencies(SupplierGlobalIdHash);
+CREATE TABLE ComponentsFiles(CmpFileId INTEGER PRIMARY KEY NOT NULL,ComponentId INTEGER NOT NULL,LocationHash INTEGER DEFAULT 0,Location TEXT NOT NULL COLLATE NOCASE);
+CREATE INDEX idx_ComponentsFiles_ComponentId ON ComponentsFiles(ComponentId);
+CREATE INDEX idx_ComponentsFiles_LocationHash ON ComponentsFiles(LocationHash);
+CREATE TABLE ComponentProperties(PropertyId INTEGER PRIMARY KEY NOT NULL,Name TEXT NOT NULL COLLATE NOCASE,Locale INTEGER DEFAULT 0,ComponentId INTEGER NOT NULL,IntValue INTEGER,StrValue TEXT,IsStr8Bit BOOLEAN DEFAULT 0);
+CREATE INDEX idx_ComponentProperties_Name ON ComponentProperties(Name);
+CREATE INDEX idx_ComponentProperties_ComponentId ON ComponentProperties(ComponentId);
+CREATE INDEX idx_ComponentProperties_IntValue ON ComponentProperties(IntValue);
+CREATE TABLE FileProperties(PropertyId INTEGER PRIMARY KEY NOT NULL,Name TEXT NOT NULL COLLATE NOCASE,CmpFileId INTEGER NOT NULL,IntValue INTEGER,StrValue TEXT, Locale INTEGER DEFAULT 0,IsStr8Bit BOOLEAN DEFAULT 0);
+CREATE INDEX idx_FileProperties_Name ON FileProperties(Name);
+CREATE INDEX idx_FileProperties_CmpFileId ON FileProperties(CmpFileId);
+CREATE TABLE ScrVersion(MajorVersion INTEGER NOT NULL, MinorVersion INTEGER NOT NULL, BuildNumber INTEGER NOT NULL);
+INSERT INTO ScrVersion(MajorVersion, MinorVersion, BuildNumber) VALUES(1, 1, 1);
+END TRANSACTION CreateScrDatabase;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc_private/scrrepository.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* SCR Repository definition.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef SCRREPOSITORY_H
+#define SCRREPOSITORY_H
+
+#include <centralrepository.h>
+
+namespace Usif {
+
+/** The UID of the SCR repository. */
+const TUid KUidScrServerRepository = {0x10285bc0};  //271080384
+
+/** The key for the AppUid range count. */
+const TUint KScrAppUidRangeCount = {0x00000000};
+
+/** The key for the AppUid ranges. */
+const TUint KScrAppUidRanges = {0x00000100};
+
+/** Singleton class controlling access to the repository. */
+class CScrRepository : public CBase
+    {
+public:
+
+    static CScrRepository* GetRepositoryInstanceL();
+
+    TInt AppUidRangeCountL();
+
+    void GetAppUidRangeL(TInt aNum, TUid& aRangeBegin, TUid& aRangeEnd);
+
+    static void DeleteRepositoryInstance();
+    
+private:
+    static void ConstructL();
+    ~CScrRepository();
+    
+private:
+    static CScrRepository* iInstance;
+    static CRepository* iRepository;
+    static bool iInstanceFlag;
+    };
+}
+
+#endif /* SCRREPOSITORY_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc_private/scrrequestimpl.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,384 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Declares the class which implements SCR's session and sub-session service requests.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef SCRREQUESTIMPL_H
+#define SCRREQUESTIMPL_H
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "screntries_internal.h"
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "screntries.h"
+#include "appregentries.h"
+#include "appreginfo.h"
+#include <usif/scr/screntries_platform.h>
+
+namespace Usif
+	{
+	// constants
+	static const TLanguage KLangNone = TLanguage(0);
+	static const TInt KMaxSwTypeIdDigits = 4; 		///< Maximum number of digits a software type id may have.
+	static const TInt KMaxSwTypeIdValue = 0xFFFF;   ///< Maximum value of a software type id.	
+	
+	// forward declaration
+	class CDatabase;
+	class CStatement;
+	class CScrAsyncRequestImpl;
+	class CScrSession;
+	class CScrSubsession;
+	class CCompViewSubsessionContext;
+	class CAppInfoViewSubsessionContext;
+	class CRegInfoForApplicationSubsessionContext;
+	class CAppRegistrySubsessionContext;
+	class CApplicationRegInfoSubsessionContext; 
+
+	class CScrRequestImpl : public CBase
+		{
+	public:
+		static CScrRequestImpl* NewL(RFs& aFs, RFile& aDatabaseFile, RFile& aJournalFile);
+		~CScrRequestImpl();
+		
+		// Transaction Requests
+		void CreateTransactionL();
+		void RollbackTransactionL();
+		void CommitTransactionL();
+		
+		// Component Management Requests
+		void AddComponentL(const RMessage2& aMessage);
+		void AddComponentDependencyL(const RMessage2& aMessage);
+		void SetComponentLocalizablePropertyL(const RMessage2& aMessage);
+		void SetComponentBinaryPropertyL(const RMessage2& aMessage);		
+		void SetComponentIntPropertyL(const RMessage2& aMessage);
+		void RegisterComponentFileL(const RMessage2& aMessage); 
+		void SetFileStrPropertyL(const RMessage2& aMessage);
+		void SetFileIntPropertyL(const RMessage2& aMessage);
+		void SetComponentNameL(const RMessage2& aMessage);
+		void SetVendorNameL(const RMessage2& aMessage);
+		void SetIsComponentRemovableL(const RMessage2& aMessage);
+		void SetIsComponentDrmProtectedL(const RMessage2& aMessage);
+		void SetIsComponentHiddenL(const RMessage2& aMessage);
+		void SetIsComponentKnownRevokedL(const RMessage2& aMessage);
+		void SetIsComponentOriginVerifiedL(const RMessage2& aMessage);
+		void SetComponentSizeL(const RMessage2& aMessage);
+		void SetComponentVersionL(const RMessage2& aMessage);
+		void DeleteComponentPropertyL(const RMessage2& aMessage);
+		void DeleteFilePropertyL(const RMessage2& aMessage);
+		void UnregisterComponentFileL(const RMessage2& aMessage);
+		void DeleteComponentL(const RMessage2& aMessage);
+		void DeleteComponentDependencyL(const RMessage2& aMessage);
+		
+		// Component Query requests
+		void GetComponentEntrySizeL(const RMessage2& aMessage) const;							
+		void GetComponentEntryDataL(const RMessage2& aMessage) const;
+		void GetComponentLocalizedEntrySizeL(const RMessage2& aMessage) const;
+		void GetComponentLocalizedEntryDataL(const RMessage2& aMessage) const;
+		void GetFilePropertiesSizeL(const RMessage2& aMessage) const;
+		void GetFilePropertiesDataL(const RMessage2& aMessage) const;
+		void GetSingleFilePropertySizeL(const RMessage2& aMessage) const;
+		void GetSingleFilePropertyDataL(const RMessage2& aMessage) const;
+		void GetFileComponentsSizeL(const RMessage2& aMessage) const;
+		void GetFileComponentsDataL(const RMessage2& aMessage) const;
+		void GetComponentPropertiesSizeL(const RMessage2& aMessage) const;
+		void GetComponentPropertiesDataL(const RMessage2& aMessage) const;
+		void GetComponentSinglePropertySizeL(const RMessage2& aMessage) const;
+		void GetComponentSinglePropertyDataL(const RMessage2& aMessage) const;
+		void GetComponentIdListSizeL(const RMessage2& aMessage) const;
+		void GetComponentIdListDataL(const RMessage2& aMessage) const;
+		void GetComponentFilesCountL(const RMessage2& aMessage) const;
+		void GetComponentIdL(const RMessage2& aMessage) const;
+		void GetComponentWithGlobalIdSizeL(const RMessage2& aMessage) const;
+		void GetComponentWithGlobalIdDataL(const RMessage2& aMessage) const;
+		void GetSupplierComponentsSizeL(const RMessage2& aMessage) const;
+		void GetSupplierComponentsDataL(const RMessage2& aMessage) const;
+		void GetDependantComponentsSizeL(const RMessage2& aMessage) const;
+		void GetDependantComponentsDataL(const RMessage2& aMessage) const;
+		void GetComponentSupportedLocalesListSizeL(const RMessage2& aMessage) const;
+		void GetComponentSupportedLocalesListDataL(const RMessage2& aMessage) const;
+				
+		// Application Manager Requests
+		void GetIsMediaPresentL(const RMessage2& aMessage) const;
+		void GetIsComponentOrphanedL(const RMessage2& aMessage) const;
+		void GetLogFileHandleL(const RMessage2& aMessage) const;
+		void FlushLogEntriesArrayL();
+		void GetIsComponentOnReadOnlyDriveL(const RMessage2& aMessage) const;
+		void GetIsComponentPresentL(const RMessage2& aMessage) const;
+		TBool IsComponentPresentL(TComponentId aComponentId) const;
+		void SetIsComponentPresentL(const RMessage2& aMessage);
+		
+		// SIF Requests
+		void SetScomoStateL(const RMessage2& aMessage);
+		void GetPluginUidWithMimeTypeL(const RMessage2& aMessage) const;
+		void GetPluginUidWithComponentIdL(const RMessage2& aMessage) const;
+		
+		// Security Layer Requests
+		TBool GetInstallerOrExecutionEnvSidsForComponentL(TComponentId aComponentId, RArray<TSecureId>& aSids) const;
+		TBool GetSidsForSoftwareTypeIdL(TInt aSoftwareTypeId, RArray<TSecureId>& aSids) const;
+		TBool GetSidsForSoftwareTypeL(const HBufC* aSoftwareTypeName, RArray<TSecureId>& aSids) const;
+		TBool IsInstallerOrExecutionEnvSidL(TSecureId& aSid) const;
+		TBool GetIsComponentOrphanedL(TComponentId aComponentId) const;
+		TInt GetSoftwareTypeForComponentL(TComponentId aComponentId) const;
+		
+		// AppArc Requests
+		void GetApplicationLaunchersSizeL(const RMessage2& aMessage) const;
+		void GetApplicationLaunchersDataL(const RMessage2& aMessage) const;
+		
+		// Component's view operations
+		CComponentFilter* ReadComponentFilterL(const RMessage2& aMessage) const;
+		CStatement* OpenComponentViewL(CComponentFilter& aFilter, RArray<TComponentId>& aComponentFilterSuperset, TBool& aFilterSupersetInUse) const;
+		void NextComponentSizeL(const RMessage2& aMessage, CStatement* aStmt, CComponentFilter* aFilter, CComponentEntry*& aEntry, CCompViewSubsessionContext* aSubsessionContext) const;
+		void NextComponentDataL(const RMessage2& aMessage, CComponentEntry*& aEntry) const;
+		void NextComponentSetSizeL(const RMessage2& aMessage, CStatement* aStmt, CComponentFilter* aFilter, RPointerArray<CComponentEntry>& aEntryList, CCompViewSubsessionContext* aSubsessionContext) const;
+		void NextComponentSetDataL(const RMessage2& aMessage, RPointerArray<CComponentEntry>& aEntryList) const;
+		
+		// Files's list operations
+		CStatement* OpenFileListL(const RMessage2& aMessage) const; 	 
+		void NextFileSizeL(const RMessage2& aMessage, CStatement* aStmt, HBufC*& aFilePath) const;
+		void NextFileDataL(const RMessage2& aMessage, HBufC*& aFilePath) const;
+		void NextFileSetSizeL(const RMessage2& aMessage, CStatement* aStmt, RPointerArray<HBufC>& aFileList) const;
+		void NextFileSetDataL(const RMessage2& aMessage, RPointerArray<HBufC>& aFileList) const;
+		
+		// Static utility functions - code reuse between SCRServer and this class
+		static TComponentId GetComponentIdFromMsgL(const RMessage2& aMessage);
+		static HBufC* GetSoftwareTypeNameFromMsgLC(const RMessage2& aMessage);
+		static HBufC* ReadFileNameFromMsgLC(const RMessage2& aMessage);
+		
+		// Sofwtare type management operations
+		void AddSoftwareTypeL(const RMessage2& aMessage);
+		void DeleteSoftwareTypeL(const RMessage2& aMessage);
+		void GetDeletedMimeTypesL(const RMessage2& aMessage) const;
+		
+		// AppInfo's view operations
+		//CAppRegistrySubsession
+        void OpenApplicationRegistrationViewL(const RMessage2& aMessage, CAppRegistrySubsessionContext*  aSubsessionContext);
+        void OpenApplicationRegistrationForAppUidsViewL(const RMessage2& aMessage, CAppRegistrySubsessionContext*  aSubsessionContext);
+        void NextApplicationRegistrationInfoSizeL(const RMessage2& aMessage, CApplicationRegistrationData*& aApplicationRegistration, CAppRegistrySubsessionContext*  aSubsessionContext);
+        void NextApplicationRegistrationInfoDataL(const RMessage2& aMessage, CApplicationRegistrationData*& aApplicationRegistration);
+        
+		//CAppInfoViewSubsession
+        CAppInfoFilter* ReadAppInfoFilterL(const RMessage2& aMessage) const;
+        void OpenAppInfoViewL(CAppInfoFilter& aFilter, CAppInfoViewSubsessionContext* aSubsessionContext);
+        TBool DoesAppWithScreenModeExistL(TUid aUid, TInt aScreenMode, TLanguage aLocale) const;
+        void GetAppUidsL(CAppInfoViewSubsessionContext* aSubsessionContext, TBool aScreenModePresent = EFalse) const;
+        void GetEmbeddableAppUidsL(CAppInfoViewSubsessionContext* aSubsessionContext, TBool aScreenModePresent = EFalse) const;
+        void GetServerAppUidsL(CAppInfoViewSubsessionContext* aSubsessionContext, TUid aServiceUid, TBool aScreenModePresent = EFalse) const;
+        void GetAppUidsWithEmbeddabilityFilterL(CAppInfoViewSubsessionContext* aSubsessionContext, TEmbeddableFilter& aFilter, TBool aScreenModePresent = EFalse) const;
+        void GetAppUidsWithCapabilityMaskAndValueL(CAppInfoViewSubsessionContext* aSubsessionContext,TUint aCapabilityAttrFilterMask, TUint aCapabilityAttrFilterValue, TBool aScreenModePresent = EFalse) const;
+        void GetAppServicesL(TUid aAppUid, RPointerArray<CServiceInfo>& aServiceInfoArray, TLanguage aLocale) const;
+        void GetServiceImplementationsL(TUid aServiceUid, RPointerArray<CServiceInfo>& aServiceInfoArray, TLanguage aLocale) const;
+        void GetServiceImplementationsL(TUid aServiceUid, TDesC& aDataType, RPointerArray<CServiceInfo>& aServiceInfoArray, TLanguage aLocale) const;
+        void GetAppServiceOpaqueDataL(TUid aAppUid, TUid aServiceUid, RPointerArray<CServiceInfo>& aServiceInfoArray, TLanguage aLocale) const;
+        void GetOpaqueDataArrayL(TUid aAppUid, TUid aServiceUid, RPointerArray<COpaqueData>& aOpaqueDataArray, TLanguage aLanguage) const;
+        void NextAppInfoSizeL(const RMessage2& aMessage, TAppRegInfo*& aAppInfo, CAppInfoViewSubsessionContext* aSubsessionContext);
+        void NextAppInfoDataL(const RMessage2& aMessage, TAppRegInfo*& aAppInfo);
+
+        //CRegInfoForApplicationSubsession
+        void GetServiceUidSizeL(const RMessage2& aMessage, TUid aAppUid,CRegInfoForApplicationSubsessionContext *aSubsessionContext) const;
+        void GetServiceUidDataL(const RMessage2& aMessage, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const;
+        void SetLocaleForRegInfoForApplicationSubsessionContextL(const RMessage2& aMessage, CRegInfoForApplicationSubsessionContext *aSubsessionContext);
+        void GetApplicationLanguageL(const RMessage2& aMessage, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const;
+        void GetDefaultScreenNumberL(const RMessage2& aMessage, TUid aAppUid) const;
+        void GetNumberOfOwnDefinedIconsL(const RMessage2& aMessage, TUid aAppUid,CRegInfoForApplicationSubsessionContext *aSubsessionContext) const;
+        void GetViewSizeL(const RMessage2& aMessage, TUid aAppUid, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const;
+        void GetViewDataL(const RMessage2& aMessage, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const;
+        void GetViewsL(RPointerArray<Usif::CAppViewData>& aViewInfoArray,TUid aAppUid, TLanguage aLanguage)const;
+        void GetAppOwnedFilesSizeL(const RMessage2& aMessage, TUid aAppUid, CRegInfoForApplicationSubsessionContext *aSubsessionContext)const ;
+        void GetAppOwnedFilesDataL(const RMessage2& aMessage, CRegInfoForApplicationSubsessionContext *aSubsessionContext)const ;
+        void GetAppCharacteristicsL(const RMessage2& aMessage, TUid aAppUid) const;
+        void GetAppIconForFileNameL(const RMessage2& aMessage, TUid aAppUid, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const;
+        void GetAppViewIconFileNameL(const RMessage2& aMessage, TUid aAppUid, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const;
+		void GetAppPropertiesInfoL(CApplicationRegistrationData& aApplicationRegistrationaApplicationRegistration,TUid aAppUid, TLanguage aLanguage);
+		//CApplicationRegInfoSubsession
+        void GetAppForDataTypeAndServiceL(const RMessage2& aMessage) const;
+        void GetAppForDataTypeL(const RMessage2& aMessage) const;
+        void GetAppServiceInfoSizeL(const RMessage2& aMessage, CApplicationRegInfoSubsessionContext *aSubsessionContext) const;
+        void GetAppServiceInfoDataL(const RMessage2& aMessage, CApplicationRegInfoSubsessionContext *aSubsessionContext) const;
+        void GetApplicationInfoL(const RMessage2& aMessage);
+        
+        //General functions to retrieve various application information, mostly used by CAppRegistrySubsession
+        TBool GetApplicationRegistrationInfoL(CApplicationRegistrationData& aApplicationRegistrationaApplicationRegistration,TUid aAppUid) const;
+        void GetFileOwnershipInfoL(CApplicationRegistrationData& aApplicationRegistrationaApplicationRegistration,TUid aAppUid) const;
+        void GetDataTypesL(RPointerArray<Usif::CDataType> & aDataTypes,TInt aServiceId)const;
+        void GetServiceInfoL(CApplicationRegistrationData& aApplicationRegistrationaApplicationRegistration,TUid aAppUid,TLanguage aLanguage) const;
+        void GetLocalizableAppInfoL(CApplicationRegistrationData& aApplicationRegistrationaApplicationRegistration,TUid aAppUid, TLanguage aLanguage);
+        CCaptionAndIconInfo* GetCaptionAndIconInfoL(TInt aCaptionAndIconId)const;
+        void GetAppRegOpaqueDataL(CApplicationRegistrationData& aApplicationRegistration,TUid aAppUid,TLanguage aLanguage) const;
+        
+        //General functions
+		void GetLocalesForAppIdL(RArray<TInt>& aLocales, TUid aAppUid) const;
+		TBool CheckIfAppUidExistsL(const TUid aAppUid) const;
+        CStatement* CreateStatementForAppInfoL(const TDesC& aStatement, TLanguage aLocale, TInt aValuesNum,...) const;
+        void GetCaptionAndShortCaptionInfoForLocaleL(TUid aAppUid, TLanguage aLocale, TAppCaption& aShortCaption, TAppCaption& aCaption);
+        void GenerateNonNativeAppUidL(const RMessage2& aMessage);
+
+		//Application related
+		void AddApplicationEntryL(const RMessage2& aMessage);		
+		void DeleteAllAppsWithinPackageL(const RMessage2& aMessage);
+		void DeleteAllAppsWithinPackageInternalL(const TComponentId aComponentId);
+		void DeleteApplicationEntryL(const RMessage2& aMessage);
+		void DeleteApplicationEntryInternalL(const TInt aAppUid);
+		void GetComponentIdForAppL(const RMessage2& aMessage) const;
+	    TBool GetComponentIdForAppInternalL(TUid aAppUid, TComponentId& aComponentId) const;
+		void GetAppUidsForComponentSizeL(const RMessage2& aMessage) const;
+		void GetAppUidsForComponentDataL(const RMessage2& aMessage)const; 
+
+		void AddFileOwnershipInfoL(TUid aAppUid, const TDesC& aFileName);
+		void AddServiceInfoL(TUid aAppUid, CServiceInfo*  aAppServiceInfoEntry);
+		void AddServiceDataTypeL(TInt aServiceUid, Usif::CDataType* aDataTypeEntry);
+		void AddLocalizableAppInfoL(TUid aAppUid, Usif::CLocalizableAppInfo* aLocalizableAppInfoEntry);
+		void AddViewDataL(TInt aLocalAppInfoId, Usif::CAppViewData* aViewDataEntry);
+		TInt AddCaptionAndIconInfoL(CCaptionAndIconInfo* aCaptionAndIconEntry);
+		void AddPropertyL(TUid aAppUid, Usif::CPropertyEntry* aAppPropertiesEntry);
+		void AddOpaqueDataL(TUid aAppUid, Usif::COpaqueData*  aOpaqueDataEntry, TUid aServiceUid = TUid::Null());
+		void DeleteFromTableL(const TDesC& aTableName, const TDesC& aAttribute, const TInt aValue);		
+	private:
+		CScrRequestImpl(RFs& aFs);
+		void ConstructL(RFile& aDatabaseFile, RFile& aJournalFile);
+	
+	private:
+		enum TValueType
+			{
+			EValueInteger 	 = 0x01,
+			EValueString 	 = 0x02,
+			EValueInteger64  = 0x03,
+			EValueLanguage   = 0x04,
+			EValueBinary = 0x05,
+			};
+		
+		enum TPropertyType
+			{
+			EPropertyUndefined = 0,	  // The property type is not defined yet
+			EPropertyInteger   = 1,   // The property type is integer
+			EPropertyLocalizable    = 2,    // The property type is a localizable string
+			EPropertyBinary    = 3    // The property type is a non-localizable 8-bit descriptor
+			};
+		
+		enum TFileOperationType
+			{
+			EFileRegistered,
+			EFileUnregistered
+			};
+		
+		class TRollbackParams
+			{
+		public:
+			TRollbackParams(TInt aIdColumnVal, CScrRequestImpl& aReqImplHandle)
+				: iIdColumnVal(aIdColumnVal), iReqImplHandle(aReqImplHandle){}
+		
+			TInt iIdColumnVal;
+			CScrRequestImpl& iReqImplHandle;
+			};
+		
+	    static HBufC* ReadDescLC(const RMessage2& aMessage, TInt aSlot);
+	    static HBufC8* ReadDesc8LC(const RMessage2& aMessage, TInt aSlot);
+		static TUint32 HashCaseInsensitiveL(const TDesC& aName);
+		static TUint32 HashCaseSensitiveL(const TDesC& aName);
+		static void ComponentRollback(TAny* aParam);
+		static void ComponentLocalizablesRollback(TAny* aParam);
+		
+		HBufC* FormatStatementLC(const TDesC& aStatement, TInt aFormatLength,...) const;
+		HBufC* GenerateGlobalIdL(const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId) const;
+		TComponentId CommonAddComponentL(const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId);
+		void AddComponentLocalizablesL(TComponentId aCompId, TLanguage aLocale, const TDesC& aName, const TDesC& aVendor);
+		HBufC* ReadAndGetGlobalIdLC(const RMessage2& aMessage, TInt aSlot) const;
+		TUint32 ReadAndHashGlobalIdL(const RMessage2& aMessage, TInt aGlobalIdNameSlot, TInt aSwTypeNameSlot) const;
+		TUint32 HashGlobalIdsL(const TDesC& aDependantId, const TDesC& aSupplierId) const;		
+		CStatement* CreateGeneralPropertyStatementWithLocaleL(const TDesC& aStmtStr, TInt aIdColumnValue, TLanguage aLocale, const TDesC& aPropName, TBool aDoLocaleResolving=ETrue) const;
+		TInt FindGeneralPropertyNoLocaleDowngradeL(const TDesC& aTableName, const TDesC& aIdColumnName , TInt aIdColumnValue, const TDesC& aPropertyName, TLanguage aLocale, TPropertyType& aPropertyType) const;
+		void SetGeneralLocalizablePropertyL(CScrRequestImpl::TPropertyType aPropType, TInt aPropertyId, const TDesC& aIdColumnName , TInt aIdColumnValue, const TDesC& aPropName, TLanguage aLocale, const TDesC& aPropValue);
+		void SetGeneralBinaryPropertyL(CScrRequestImpl::TPropertyType aPropType, TInt aPropertyId, const TDesC& aTableName, const TDesC& aIdColumnName , TInt aIdColumnValue, const TDesC& aPropName, const TDesC8& aPropValue);
+		void SetGeneralIntPropertyL(TPropertyType aPropType, TInt aPropertyId, const TDesC& aTableName, const TDesC& aIdColumnName , TInt aIdColumnValue, const TDesC& aPropName, TInt64 aPropValue);
+		void ExecuteStatementL(TRefByValue<const TDesC>, TInt aValuesNum=0,...);
+		void GetFileComponentsL(const TDesC& aFileName, RArray<TComponentId>& aComponents) const;
+		TInt GetComponentFileIdL(const TDesC& aFileName, TComponentId aComponentId) const;
+		TInt FindComponentFileL(const TDesC& aFileName, TComponentId aComponentId) const;
+		void SetComponentLocalizableL(TComponentId aComponentId, TLanguage aLocale, const TDesC& aColumnName, const TDesC& aName, const TDesC& aVendor);
+		CPropertyEntry* GetGeneralSinglePropertyL(const TDesC& aTableName, const TDesC& aIdColumnName , TInt aIdColumnValue, const TDesC& aPropName, TLanguage aLocale) const;
+		CPropertyEntry* GetPropertyEntryL(CStatement& aStmt, const TDesC& aPropName, TInt aStartingIndex) const;
+		void AddGeneralPropertiesArrayWithLocaleL(const TDesC& aStmtStr, TLanguage aLocale, TComponentId aIdColumnValue, RPointerArray<CPropertyEntry>& aProperties) const;
+		void GetGeneralPropertiesArrayL(const TDesC& aTableName, const TDesC& aIdColumnName , TComponentId aIdColumnValue, TLanguage aLocale, RPointerArray<CPropertyEntry>& aProperties) const;
+		TBool BindAndProcessStatementObjectL(CStatement& aStatementObj, TLanguage aLanguage, TInt aValuesNum, VA_LIST aList) const;
+		CStatement* CreateStatementObjectWithoutLocaleL(const TDesC& aStatement, TInt aValuesNum,...) const;		
+		CStatement* CreateStatementObjectWithLocaleL(const TDesC& aStatement, TLanguage aLocale, TInt aValuesNum,...) const;
+		CStatement* CreateStatementObjectWithLocaleNoDowngradeL(const TDesC& aStatement, TLanguage aLocale, TInt aValuesNum,...) const;
+		void BindStatementValuesL(CStatement& aStatement, TLanguage aLanguage, TInt aValuesNum, VA_LIST aList) const;
+		void GetComponentIdsHavingThePropertiesL(RArray<TComponentId>& aComponentIds, RPointerArray<CPropertyEntry>& aProperties, RArray<CComponentFilter::TPropertyOperator>& aPropertyOperatorList, 
+                                                     TBool aDoIntersect) const;
+		CStatement* CreateStatementObjectForComponentLocalizablesLC(const TDesC& aName, const TDesC& aVendor, TUint aSetFlag, TComponentId aComponentId  = 0 ) const;
+		void GetComponentsHavingNameVendorL(RArray<TComponentId>& aComponentIds, const TDesC& aName, const TDesC& aVendor, TUint16 aSetFlag, TBool aDoIntersect) const;
+		CComponentEntry* GetNextComponentEntryL(CStatement& aStmt, CComponentFilter& aFilter, TLanguage aLocale, CCompViewSubsessionContext* aSubsessionContext) const;
+		HBufC* GetNextFilePathL(CStatement& aStmt) const;
+		CComponentEntry* CreateComponentEntryFromStatementHandleL(CStatement& aStmt) const;
+		CStatement* ExecuteLocalizableStatementL(const TDesC& aLocalizableStmtStr, const TDesC& aAnyValueStmtStr, TInt aConditionIntValue, TLanguage aConditionLocale) const;
+		void AddComponentEntryLocalizablesL(TComponentId aComponentId, CComponentEntry& aEntry, TLanguage aLocale) const;
+		void AddComponentEntryLocalizablesL(TComponentId aComponentId, CComponentEntry& aEntry, TLanguage aLocale, const CComponentFilter& aFilter) const;
+		void AddSoftwareTypeNameToComponentEntryL(CStatement& aStmt, CComponentEntry& aEntry, TLanguage aLocale) const;
+		TBool IsSoftwareTypeExistingL(TInt aSoftwareTypeId) const;
+		void GetGeneralComponentEntrySizeL(const RMessage2& aMessage, const TDesC& aConditionColumn, TUint32 aConditionValue, TInt aReturnSizeSlot, TLanguage aLocale, CComponentEntry*& aComponentEntry) const;
+        TInt GetDriveFromFilePath(const TDesC& aFilePath, TDriveUnit& aDriveUnit) const;
+		TInt InstalledDrivesToBitmaskL(const TDriveList& aDriveList) const;
+		void UpdateInstalledDrivesL(TComponentId aComponentId, const TDesC& aFilePath, TFileOperationType aType);
+		TBool GetSifPluginUidIInternalL(TInt aSoftwareTypeId, TInt& aValue) const;
+		TInt GetInstalledDrivesBitmaskL(TComponentId aComponentId) const;
+		CGlobalComponentId* ParseGlobalComponendIdLC(const TDesC& aGlobalId) const;
+		void GetGeneralDependencyListL(const TDesC& aSelectColumn, const TDesC& aConditionColumn, const TDesC& aConditionValue, RPointerArray<CVersionedComponentId> &aVerCompIdList) const;
+		void ReadAndSetCommonComponentPropertyL(const RMessage2& aMessage, const TDesC& aPropertyColumn);
+		TBool HasFilesOnDriveL(TDriveUnit aDrive, TComponentId aComponentId);
+		CStatement* OpenFileListStatementL(TComponentId aComponentId) const;
+		TBool IsSoftwareTypeExistingL(TUint32 aSwTypeId, TUint32 aSifPluginUid, RArray<TCustomAccessInfo>& aSidArray, const RPointerArray<HBufC>& aMimeTypesArray, const RPointerArray<CLocalizedSoftwareTypeName>& aLocalizedNamesArray, const TDesC& aLauncherExecutable);
+		void SubsessionAddLocalizableSoftwareTypeNameL(CStatement& aStmt, CComponentEntry& aEntry, TLanguage aLocale, CCompViewSubsessionContext* aSubsessionContext) const;
+		TBool IsDriveReadOnlyL(TInt driveIndex) const;
+		TBool CheckForMediaPresenceL(TComponentId aComponentId) const;
+		
+		TBool GetIntforConditionL(const TDesC& aSelectColumn, const TDesC& aTableInfo, const TDesC& aConditionColumn,TInt aConditionValue,TInt& aRetrievedValue) const;
+		TInt  GetServiceIdForDataTypeL(const TDesC& aType) const;
+		TBool GetAppUidForServiceIdL(const TInt ServiceId, TUid& aAppUid) const;
+		TBool GetNearestAppLanguageL(TLanguage aRequiredLocale,TUid aAppUid,TLanguage& aFinalAppLocale) const;
+		void GetNearestAppLanguageForOpaqueDataL(TLanguage aRequiredLocale,TUid aAppUid,TUid aServiceUid,TLanguage& aFinalAppLocale) const;
+		void GetOperatorStringL(CComponentFilter::TDbOperator aOperator, HBufC*& aOperatorString) const;
+
+		// DB Version management
+		void InitializeDbVersionL();
+		void VerifyDbVersionCompatibilityL() const;
+		
+	private:
+		RFs& iFs;	///< Reference to the file handle. It is worth to consume a word of memory instead of passing the file handle to many functions.
+		CDatabase* iDbHandle; ///< Handle to the SCR database object.
+		TVersion iDbVersion;
+		mutable CComponentEntry* iComponentEntry; 			///< The component entry whose size calculated and sent to the client.
+		mutable CPropertyEntry* iSingleProperty;
+		mutable RArray<TComponentId> iFileComponents;
+		mutable RArray<TComponentId> iComponentIdList;
+		mutable RPointerArray<CPropertyEntry> iProperties;
+		mutable RPointerArray<CVersionedComponentId> iVerCompIdList; // The list of supplier/dependant versioned component IDs
+		mutable RPointerArray<HBufC> iDeletedMimeTypes; // The list of MIME types deleted as the result of software type deletion.
+		mutable RPointerArray<CScrLogEntry> iLogEntries; // The list of log entries recorded in a session
+		mutable RArray<TLanguage> iMatchingSupportedLanguageList; // The list of matching supported language list recorded in a session
+		mutable RPointerArray<CLocalizableComponentInfo> iCompLocalizedInfoArray; //Component's localized information (name, vendor, locale)
+		mutable RArray<TUid> iComponentAppUids;  //List of Application Uids associated with a component
+		mutable RPointerArray<CLauncherExecutable> iLaunchers;
+		};
+	
+	} // End of namespace Usif
+
+#endif /* SCRREQUESTIMPL_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc_private/scrserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines server-side classes which are used to implement the SCR server.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+ 
+
+#ifndef SCRSERVER_H
+#define SCRSERVER_H
+
+#include <scs/scsserver.h>
+#include "scrcommon.h"
+#include "usifcommon.h"
+
+_LIT_SECURE_ID(KSisRegistryServerSid, 0x10202DCA); 
+_LIT_SECURE_ID(KApparcServerSid, 0x10003A3F);
+
+namespace Usif
+	{
+	// forward declarations
+	class CScrServer;
+	class CScrRequestImpl;
+												
+	class CScrSession : public CScsSession
+	/**
+		The instance of this class is used to perform SCR client requests and 
+		is created for each client. 
+	 */
+		{
+	public:
+		static CScrSession* NewL(CScrServer &aServer, const RMessage2& aMessage);
+		~CScrSession();
+				
+		// implement CScsSession
+		TBool DoServiceL(TInt aFunction, const RMessage2& aMessage);
+		// override CScsSession
+		CScsSubsession* DoCreateSubsessionL(TInt aFunction, const RMessage2& aMessage);
+		
+	private:
+		CScrSession(CScrServer& aServer);
+		
+		void ApplySubsessionConstraintL(CScrServer& aServer);
+		void ApplyTransactionConstraintL(CScrServer& aServer, TBool& aCreateImplicitTransaction);
+		void MutatingOperationsPreambleL(CScrServer& aServer, TScrSessionFunction aFunction, TBool& aIsTransactionImplicit);
+		void MutatingOperationsPostambleL(CScrServer& aServer);
+		
+	private:
+		TBool iTransactionOwner; 
+		};
+	
+	class CScrServer : public CScsServer
+	/**
+		The CScsServer-derived object which is used to generate SCR sessions for the SCR clients.
+	 */
+		{
+	public:
+		static CScrServer* NewLC();
+				
+		~CScrServer();
+		
+		//Implement from CScsServer
+		CScsSession* DoNewSessionL(const RMessage2& aMessage);
+	
+		inline CScrRequestImpl* RequestImpL();
+		void ReconnectL();
+		
+		void AddSubsessionOwnerL(CScrSession* aSession);
+		void RemoveSubsessionOwner(CScrSession* aSession);
+		TBool IsTheOnlySubsessionOwner(CScrSession* aSession);
+		TInt SubsessionCount();
+		
+		void SetTransactionOwner(CScrSession* aSession);
+		TBool IsTransactionInProgress();
+		TBool IsTransactionOwner(CScrSession* aSession);
+		virtual void DoPreHeapMarkOrCheckL();
+		virtual void DoPostHeapMarkOrCheckL();
+	protected:
+		CPolicyServer::TCustomResult CustomSecurityCheckL(const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing);		
+		
+	private:
+		CScrServer();
+		void ConstructL();
+		void SetupL();
+		CPolicyServer::TCustomResult CheckDeleteComponentAllowedL(const RMessage2& aMsg);
+		CPolicyServer::TCustomResult CheckComponentIdMatchingEnvironmentL(const RMessage2& aMsg, TBool aCheckForSingleApp=EFalse);				
+		CPolicyServer::TCustomResult CheckSoftwareNameMatchingEnvironmentL(const RMessage2& aMsg);
+		CPolicyServer::TCustomResult CheckAllowedFilePathL(const RMessage2& aMsg);
+		CPolicyServer::TCustomResult CheckClientIsInstallerL(const RMessage2& aMsg);
+		CPolicyServer::TCustomResult CheckCommonComponentPropertySettableL(const RMessage2& aMsg, TCapability aRequiredCapability);
+		
+	private:
+		RFs iFs;										///< File server session handle.
+		CScrRequestImpl* iRequestImpl;					///< Pointer to the request implementation object.
+		CScrSession* iTransactionOwningSession; 		///< Pointer to the session which is owner of the current transaction. Owned by another object. NULL means there is no transaction in progress.
+		RPointerArray<CScrSession> iSubsessionOwners;   ///< The list of sessions which own active subsessions
+		RFile iDatabaseFile;							///< The database file handle
+		RFile iJournalFile;								///< The journal file handle
+		};
+	
+	inline CScrRequestImpl* CScrServer::RequestImpL()
+		{
+		if(!iRequestImpl)
+			{
+			User::Leave(KErrArgument);
+			}
+		return iRequestImpl;
+		}
+	
+	} // End of namespace SCRSERVER_H	
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc_private/scrsubsession.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,257 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Declares SCR subsession implementation classes on the server side.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef SCRSUBSESSION_H
+#define SCRSUBSESSION_H
+
+#include "scrserver.h"
+#include "usifcommon.h"
+#include "appregentries.h"
+#include "appreginfo.h"
+#include "appregentries.h"
+
+namespace Usif
+	{
+	// forward declarations
+	class CStatement;
+	class CComponentEntry;
+	class CComponentFilter;
+	class CAppInfoFilter;
+	
+	class CScrSubsession : public CScsSubsession
+	/**
+		Base SCR Subsession. Owns handle to an existing database session.
+	 */
+		{
+	public:
+		virtual ~CScrSubsession();
+		
+	protected:
+		CScrSubsession(CScrSession &aSession);
+		void ConstructL();
+		
+	public:
+		CStatement *iStatement;
+		// Pointer to the server object. Owned by the session object. 
+		// Do NOT delete. Added to make the code cleaner and more consistent.
+		CScrServer *iServer; 
+		// Pointer to the session object. The owner session passes its own pointer. 
+		// Do NOT delete. Added to make the code cleaner and more consistent.
+		CScrSession *iSession;
+		};
+		
+	class CCompViewSubsessionContext : public CBase
+		{
+	friend class CScrRequestImpl;
+	friend class CComponentViewSubsession;
+	public:
+		~CCompViewSubsessionContext();
+	private:
+		TInt iLastSoftwareTypeId;
+		HBufC* iLastSoftwareTypeName;
+		RArray<TComponentId> iComponentFilterSuperset; ///< A helper array for the component filter. The filter conditions are split into two, and this variable is used for maintaing all components matching the first set of conditions.
+		TBool iFilterSupersetInUse; ///< Specifies whether the filter superset array should be used when iterating over the filter query.		
+		};
+	
+	class CComponentViewSubsession : public CScrSubsession
+	/**
+		This object is created for each component view subsession opened by the SCR client.
+		Handles component view creation by using a provided filter and returns the row(s) of the view.
+	 */
+		{
+	public:
+		static CComponentViewSubsession* NewL(CScrSession& aSession);
+		~CComponentViewSubsession();
+		// Implement CScsSession
+		TBool DoServiceL(TInt aFunction, const RMessage2& aMessage);
+			
+	private:
+		CComponentViewSubsession(CScrSession& aSession);
+		void ConstructL();
+			
+	private:
+		CComponentFilter* iFilter;
+		CComponentEntry *iComponentEntry;
+		RPointerArray<CComponentEntry> iComponentEntryList;
+		CCompViewSubsessionContext* iSubsessionContext;
+		};	
+	
+	class CFileListSubsession : public CScrSubsession
+	/**
+		This object is created for each file list subsession opened by the SCR client
+		to retrieve the list of files owned by a given component.
+	 */
+		{
+	public:
+		static CFileListSubsession* NewL(CScrSession& aSession);
+		~CFileListSubsession();
+		// Implement CScsSession
+		TBool DoServiceL(TInt aFunction, const RMessage2& aMessage);
+				
+	private:
+		CFileListSubsession(CScrSession& aSession);
+				
+	private:
+		HBufC *iFilePath;
+		RPointerArray<HBufC> iFileList;
+		};	
+	
+    struct TAppUidWithLocaleInfo
+         {
+         TUid iAppUid;
+         TLanguage iLocale;
+         };
+
+	class CAppInfoViewSubsessionContext : public CBase
+	    {
+	    friend class CScrRequestImpl;
+	    friend class CAppInfoViewSubsession;
+	    public:
+	        ~CAppInfoViewSubsessionContext();
+	    private:
+	        TInt iAppInfoIndex;	     
+	        TLanguage iLocale;
+	        TInt iScreenMode;
+	        RArray<TAppUidWithLocaleInfo> iApps;
+	    };
+	
+	class CAppInfoViewSubsession : public CScrSubsession
+	    /**
+	        This object is created for each AppInfo view subsession opened by the SCR client.
+	        Handles component view creation by using a provided filter.
+	     */
+	        {
+	    public:
+	        static CAppInfoViewSubsession* NewL(CScrSession& aSession);
+	        ~CAppInfoViewSubsession();
+	        TBool DoServiceL(TInt aFunction, const RMessage2& aMessage);
+	            
+	    private:
+	        CAppInfoViewSubsession(CScrSession& aSession);
+	        void ConstructL();
+	            
+	    private:
+	        CAppInfoFilter* iAppInfoFilter;
+	        TAppRegInfo* iApaAppInfo;
+	        CAppInfoViewSubsessionContext* iSubsessionContext;
+	        };
+	
+	class CRegInfoForApplicationSubsessionContext : public CBase
+	            {
+	            friend class CScrRequestImpl;
+	            friend class CRegInfoForApplicationSubsession;
+	            public:
+	                ~CRegInfoForApplicationSubsessionContext();
+	            private:
+	                RPointerArray<Usif::CAppViewData> iViewInfoArray; //Application's view data information
+	                RArray<TUid> iServiceUidList;
+	                TLanguage iAppLanguageForCurrentLocale;
+	                RPointerArray<HBufC> iAppOwnedFiles;
+	            };
+	
+	class CRegInfoForApplicationSubsession : public CScrSubsession
+	    /**
+	        This object is created for an App Uid subsession opened by the SCR client
+	        to retrieve the App info.
+	     */
+	    {
+	    public:
+	        static CRegInfoForApplicationSubsession* NewL(CScrSession& aSession);
+	        ~CRegInfoForApplicationSubsession();
+	        // Implement CScsSession
+	        TBool DoServiceL(TInt aFunction, const RMessage2& aMessage);
+	                
+	    private:
+	        CRegInfoForApplicationSubsession(CScrSession& aSession);
+	        void ConstructL();       
+	    private:
+	        TUid iAppUid;
+	        CRegInfoForApplicationSubsessionContext *iSubsessionContext;
+	        };  
+
+	   class CApplicationRegInfoSubsessionContext : public CBase
+	       {
+	       friend class CScrRequestImpl;
+	       friend class CApplicationRegInfoSubsession;
+	   public:
+	       ~CApplicationRegInfoSubsessionContext();
+	       private:
+	       RPointerArray<Usif::CServiceInfo> iServiceInfoArray; //Application's service info details
+	       CAppServiceInfoFilter* iAppServiceInfoFilter;
+	       };
+
+	   class CApplicationRegInfoSubsession : public CScrSubsession
+        /**
+            This object is created for an App Uid subsession opened by the SCR client
+            to retrieve the App info.
+         */
+	    {
+        public:
+            static CApplicationRegInfoSubsession* NewL(CScrSession& aSession);
+            ~CApplicationRegInfoSubsession();
+	        // Implement CScsSession
+	        TBool DoServiceL(TInt aFunction, const RMessage2& aMessage);
+	        
+        private:
+            void ConstructL();
+	    private:
+	        CApplicationRegInfoSubsession(CScrSession& aSession);	            
+	        CApplicationRegInfoSubsessionContext *iSubsessionContext;
+	    };  
+	
+	class CAppRegistrySubsessionContext : public CBase
+	        {
+	        friend class CScrRequestImpl;
+	        friend class CAppRegistrySubsession;
+	        public:
+	            ~CAppRegistrySubsessionContext();
+	        private:
+	            TLanguage iLanguage;
+	            TInt iAppRegIndex;       
+	            RArray<TUid> iAppUids;       //array of all the App Uid's      
+	        };
+	
+    class CAppRegistrySubsession : public CScrSubsession
+	    /**
+	       This object is created for an Application registration subsession 
+	       opened by the SCR client to retrieve the Application registration info.
+	    */
+	    {
+	    public:
+	        static CAppRegistrySubsession* NewL(CScrSession& aSession);
+	        ~CAppRegistrySubsession();
+	        // Implement CScsSession
+	        TBool DoServiceL(TInt aFunction, const RMessage2& aMessage);
+	    private:
+	        CAppRegistrySubsession(CScrSession& aSession); 
+	        void ConstructL();	   
+	        CApplicationRegistrationData* iApplicationRegistrationInfo;
+	        CAppRegistrySubsessionContext* iSubsessionContext;
+	     };
+    
+	}// End of namespace Usif
+
+
+#endif /* SCRSUBSESSION_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/scrhelper/group/scrhelperclient.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		scrhelperclient.dll
+TARGETTYPE 	dll
+
+UID			0x1000008d 0x102866F3
+VENDORID	0x70000001
+
+CAPABILITY ProtServ
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE	  ../inc
+USERINCLUDE	  ../../../swinstallationfw/common/inc
+
+SOURCEPATH	../source
+
+SOURCE		scrhelperclient.cpp
+
+DEFFILE 	../../~/scrhelperclient.def
+
+LIBRARY		efsrv.lib euser.lib scsclient.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/scrhelper/group/scrhelperserver.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		scrhelperserver.exe
+TARGETTYPE 	exe
+
+UID         0x0 0x102866F2
+VENDORID	0x70000001
+
+CAPABILITY  TCB AllFiles ProtServ
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+USERINCLUDE	    ../inc
+USERINCLUDE	  ../../../swinstallationfw/common/inc
+
+SOURCEPATH	../source
+SOURCE		scrhelperstartup.cpp
+SOURCE		scrhelperserver.cpp
+
+library		efsrv.lib euser.lib scsserver.lib 
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/scrhelper/inc/scrhelperclient.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef SCRHELPERCLIENT_H
+#define SCRHELPERCLIENT_H
+
+#include <e32std.h>
+#include <e32cmn.h>
+#include <f32file.h>
+#include <scs/scsclient.h>
+#include "scrhelpercommon.h"
+
+namespace Usif
+	{
+	
+	class RScrHelper : public RScsClientBase
+		{
+	public:
+		/**
+			Default constructor of SCR helper session.
+		 */
+		IMPORT_C RScrHelper();
+		
+		/**
+			Opens a connection to the SCR Helper server.
+			@return KErrNone, if the connection is successful. Otherwise, a system-wide error code.  
+		 */
+		IMPORT_C TInt Connect();
+		
+		/**
+			Closes the connection with the SCR Helper server.
+		 */
+		IMPORT_C void Close();
+		
+		IMPORT_C void RetrieveFileHandlesL(RFile& aScrDatabase, RFile& aScrJournal);
+	
+	private:
+		void GetFileHandleL(Usif::TScrHelperServerMessages aFunction, RFile& aFile);
+		};
+	
+	} // namespace Usif
+
+#endif /* SCRHELPERCLIENT_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/scrhelper/inc/scrhelpercommon.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef SCRHELPERCOMMON_H
+#define SCRHELPERCOMMON_H
+
+#include <e32cmn.h>
+#include <e32std.h>
+#include <e32ver.h>
+#include <e32uid.h>
+#include "usiflog.h"
+
+namespace Usif
+	{
+	/** Identifies the Scr Helper Symbian OS Server. */
+	_LIT(KScrHelperServerName, "!ScrHelper");
+	
+	/**
+		Executable which hosts SCR Helper Server.  Required to launch the process.
+		@see KScrHelperServerUid3
+	 */
+	_LIT(KScrHelperServerImg, "scrhelperserver.exe");
+	
+	/**
+		Hosting the executable's secure ID.  Required to launch the process.
+		@see KScrHelperServerImg
+	 */
+	static const TUid KScrHelperServerUid3 = {0x102866F2};
+	
+	static const TInt KScrHelperServerVersionMajor = 1;  ///< SCR Helper Server version major component.
+	static const TInt KScrHelperServerVersionMinor = 0;  ///< SCR Helper Server version minor component.
+	static const TInt KScrHelperServerVersionBuild = 0;  ///< SCR Helper Server version build component.
+	
+	enum TScrHelperServerMessages
+	/**
+		Functions supported by a SCR Helper Server session.
+	 */
+		{
+		EGetDatabaseFileHandle,
+		EGetJournalFileHandle
+		};
+	
+	/** The path of SCR database file */
+	_LIT(KScrDatabaseFilePath, "!:\\sys\\install\\scr\\scr.db");
+	
+	/** The path of SCR database journal file */
+	_LIT(KScrJournalFilePath, "!:\\sys\\install\\scr\\scr.db-journal");
+	
+	/** The full path of the default SCR database stored in ROM. */
+	_LIT(KScrDbRomPath,"z:\\sys\\install\\scr\\provisioned\\scr.db");
+	
+	/**
+		Delay in microseconds before the SCR Helper Server is shut down,
+		after the last remaining session has been closed.
+	 */
+	const TInt KScrHelperServerShutdownPeriod = 2 * 1000 * 1000;
+	
+	} // namespace Usif
+
+#include "scrhelpercommon.inl"
+
+#endif /* SCRHELPERCOMMON_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/scrhelper/inc/scrhelpercommon.inl	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* The functions defined in this file provide constant data which is
+* used by both the SCR Helper server and client side implementations.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+ 
+#ifndef SCRHELPERCOMMON_INL
+#define SCRHELPERCOMMON_INL
+
+#include <usif/scr/scrcommon.h>
+
+namespace Usif
+	{
+	inline TVersion ScrHelperServerVersion()
+	/**
+		This function is defined because there is no literal constructor for TVersion.
+
+		@return	Defines a version number which the client side code	
+				can use to open the SCR Helper server. If the client code
+				was built with a higher version number, then it cannot
+				open the SCR Helper server. This ensures that a client only
+				talks to the SCR Helper server version is at least as high as its own.
+	*/
+		{
+		TVersion version(KScrHelperServerVersionMajor, KScrHelperServerVersionMinor, KScrHelperServerVersionBuild);
+		return version;
+		}
+
+	inline TUidType ScrHelperServerImageFullUid()
+	/**
+		This function is defined because there is no literal constructor
+		for TUidType.  It returns the SCR Helper server executable's UID, which is used
+		to ensure the client side code launches the correct server process, as opposed
+		to another application which uses the same executable name.
+
+		@return TUidType		The SCR Helper server executable's full UID.
+	 */
+		{
+		TUidType typ(KExecutableImageUid, KNullUid, KScrHelperServerUid3);
+		return typ;
+		}
+
+	} // End of namespace Usif 
+	
+#endif // SCRHELPERCOMMON_INL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/scrhelper/inc/scrhelperserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef SCRHELPERSERVER_H
+#define SCRHELPERSERVER_H
+
+#include <scs/scsserver.h>
+#include <e32cmn.h>
+#include <f32file.h> 
+
+namespace Usif
+	{
+	class CScrHelperServer : public CScsServer
+		{
+	public:
+		static CScrHelperServer* NewLC();
+		~CScrHelperServer();
+		
+		inline RFs& FileServer();
+		
+		//Implement from CScsServer
+		CScsSession* DoNewSessionL(const RMessage2& aMessage);
+		
+	private:
+		CScrHelperServer();
+		void ConstructL();
+	
+	private:
+		RFs iFs; ///< File server session handle.
+		};	
+	
+	
+	class CScrHelperSession : public CScsSession
+		{
+	public:
+		static CScrHelperSession* NewL(CScrHelperServer &aServer, const RMessage2& aMessage);
+		~CScrHelperSession();
+		
+		// implement CScsSession
+		TBool DoServiceL(TInt aFunction, const RMessage2& aMessage);	
+		
+	private:
+		CScrHelperSession(CScrHelperServer &aServer);
+		void GetFileHandleL(RFs& aFs, const RMessage2& aMessage, const TDesC& aFileName);
+		};
+	
+	} // namespace Usif
+
+#endif /* SCRHELPERSERVER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/scrhelper/source/scrhelperclient.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <e32cmn.h>
+#include "scrhelperclient.h"
+
+using namespace Usif;
+
+EXPORT_C RScrHelper::RScrHelper()
+	:	RScsClientBase()
+	{
+	// empty
+	}
+
+EXPORT_C TInt RScrHelper::Connect()
+	{
+	DEBUG_PRINTF(_L8("Connecting to SCR Helper Server!"));
+	TVersion version = ScrHelperServerVersion();
+	TUidType fullUid = ScrHelperServerImageFullUid();		
+	return RScsClientBase::Connect(KScrHelperServerName(), version, KScrHelperServerImg(), fullUid);
+	}
+
+EXPORT_C void RScrHelper::Close()
+	{
+	DEBUG_PRINTF(_L8("Closing SCR Helper connection!"));
+	RScsClientBase::Close();
+	}
+
+EXPORT_C void RScrHelper::RetrieveFileHandlesL(RFile& aScrDatabase, RFile& aScrJournal)
+	{
+	DEBUG_PRINTF(_L8("Retrieving  database and journal file handles from SCR Helper Server!"));
+	// First, retrieve database file handle
+	GetFileHandleL(EGetDatabaseFileHandle, aScrDatabase);
+	// Then, retrieve journal file handle
+	GetFileHandleL(EGetJournalFileHandle, aScrJournal);
+	}
+
+void RScrHelper::GetFileHandleL(Usif::TScrHelperServerMessages aFunction, RFile& aFile)
+	{
+	// Retrieve the RFs and RFile handles from the server
+	TInt fsh;          	 // File server handle (RFs - session)
+	TPckgBuf<TInt> fh;   // File handle (RFile - subsession)
+		
+	fsh = CallSessionFunction(aFunction, TIpcArgs(&fh));   // pointer to fh in slot 0
+	User::LeaveIfError(fsh);
+	
+	// Adopt the file using the returned handles
+	User::LeaveIfError(aFile.AdoptFromServer(fsh, fh()));
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/scrhelper/source/scrhelperserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "scrhelpercommon.h"
+#include "scrhelperserver.h"
+#include <e32cmn.h>
+#include <e32debug.h>
+#include <usif/scr/scrcommon.h>
+
+using namespace Usif;
+
+static const TUint scrHelperRangeCount = 2;
+
+static const TInt scrHelperRanges[scrHelperRangeCount] =
+	{
+	0,							 // Range-0 - 0 to EBaseSession-1. Not used.
+	CScsServer::EBaseSession,	 // Range-1 - EBaseSession to KMaxTInt inclusive.
+	};
+
+static const TUint8 scrHelperElementsIndex[scrHelperRangeCount] =
+	{
+	CPolicyServer::ENotSupported, // Range 0 is not supported.
+	0,							  // Range 1 must come from the SCR Server.
+	};							
+
+static const CPolicyServer::TPolicyElement scrHelperElements[] =
+	{
+	{_INIT_SECURITY_POLICY_S0(KUidScrServer.iUid), CPolicyServer::EFailClient}
+	};
+
+static const CPolicyServer::TPolicy scrHelperPolicy =
+	{
+	CPolicyServer::EAlwaysPass, // Allow all connections
+	scrHelperRangeCount,
+	scrHelperRanges,
+	scrHelperElementsIndex,
+	scrHelperElements,
+	};
+
+/////////////////////
+// CScrHelperServer
+/////////////////////
+
+CScrHelperServer::CScrHelperServer()
+	:	CScsServer(ScrHelperServerVersion(), scrHelperPolicy)
+	{
+	// empty
+	}
+
+CScrHelperServer::~CScrHelperServer()
+	{
+	iFs.Close();
+	}
+
+CScrHelperServer* CScrHelperServer::NewLC()
+	{
+	CScrHelperServer* self = new(ELeave) CScrHelperServer();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CScrHelperServer::ConstructL() 
+	{
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iFs.ShareProtected());
+
+	StartL(KScrHelperServerName);
+	CScsServer::ConstructL(KScrHelperServerShutdownPeriod);	
+	}
+
+CScsSession* CScrHelperServer::DoNewSessionL(const RMessage2& aMessage)
+/**
+	Implement CScsServer by allocating a new instance of CScrHelperSession.
+
+	@param	aMessage	Standard server-side handle to message.
+	@return				New instance of the SCR Helper session class which is owned by the caller.
+ */
+	{
+	DEBUG_PRINTF(_L8("SCR Helper session creation!"));
+	return CScrHelperSession::NewL(*this, aMessage);
+	}
+
+inline RFs& CScrHelperServer::FileServer()
+	{
+	return iFs;
+	}
+
+/////////////////////
+// CScrHelperSession
+/////////////////////
+
+CScrHelperSession::CScrHelperSession(CScrHelperServer& aServer)
+	:	CScsSession(aServer)
+	{
+	// empty
+	}
+
+CScrHelperSession::~CScrHelperSession()
+	{
+	// empty
+	}
+
+CScrHelperSession* CScrHelperSession::NewL(CScrHelperServer &aServer, const RMessage2& aMessage)
+/**
+	Factory function allocates new instance of CScrSession.
+	
+	@param aServer  SCR Helper Server object.
+	@param aMessage	Standard server-side handle to message. Not used.
+	@return			Newly created instance of CScrHelperSession which is owned by the caller.
+ */
+	{
+	(void)aMessage; // Make the compiler happy in release mode
+	CScrHelperSession* self = new (ELeave) CScrHelperSession(aServer);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+TBool CScrHelperSession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
+	{
+	TScrHelperServerMessages f = static_cast<TScrHelperServerMessages>(aFunction);
+	RFs& fs =  static_cast<CScrHelperServer*>(&iServer)->FileServer();
+	
+	switch (f)
+		{
+		case EGetDatabaseFileHandle:
+			GetFileHandleL(fs, aMessage, KScrDatabaseFilePath);
+			break;
+		case EGetJournalFileHandle:
+			GetFileHandleL(fs, aMessage, KScrJournalFilePath);
+			break;
+		default:
+			User::Leave(KErrNotSupported);
+		}
+	//RMessage2 object is closed by both TransferToClient() and SCS framework.
+	//return EFalse to prevent SCS to close the message object.
+	return EFalse;
+	}
+
+void CopyDbFromROMToSystemL(RFs& aFs, const TDesC& aTargetPath)
+	{
+	CFileMan* fileManager = CFileMan::NewL(aFs);
+	CleanupStack::PushL(fileManager);
+	User::LeaveIfError(fileManager->Copy(KScrDbRomPath, aTargetPath, 0));
+
+	// Reset the read-only attribute on the copied file
+	User::LeaveIfError(aFs.SetAtt(aTargetPath, 0, KEntryAttReadOnly));
+	CleanupStack::PopAndDestroy(fileManager);
+	}
+
+void CScrHelperSession::GetFileHandleL(RFs& aFs, const RMessage2& aMessage, const TDesC& aFileName)
+	{
+	DEBUG_PRINTF2(_L("Returning file handle of %S."), &aFileName);
+	RBuf filePath;
+	filePath.CreateL(aFileName.Length());
+	filePath.CleanupClosePushL();
+	filePath.Copy(aFileName);
+	filePath[0] = aFs.GetSystemDriveChar();
+	TInt err = aFs.MkDirAll(filePath);
+	if(KErrNone != err && KErrAlreadyExists != err)
+		{
+		DEBUG_PRINTF3(_L("An error (%d) occured while making all directories of %S."), err, &filePath);
+		User::Leave(err);
+		}
+	
+	RFile file;
+	TEntry entry;
+
+	if(KErrNone == aFs.Entry(filePath, entry))
+		{ // The file exists, just open it.
+		User::LeaveIfError(file.Open(aFs, filePath, EFileShareAny|EFileWrite));
+		}    
+	else
+		{ // The file doesn't exist. First, check if the requested file is database or journal file.
+		if(KScrDatabaseFilePath() == aFileName)
+			{ // This is the database file. Copy the default one into the requested location.
+			DEBUG_PRINTF(_L8("SCR database file doesn't exist. It is being copied from ROM"));
+			CopyDbFromROMToSystemL(aFs, filePath);
+			 // Then, open the file.
+			User::LeaveIfError(file.Open(aFs, filePath, EFileShareAny|EFileWrite));
+			}
+		else
+			{ // This is the journal file, simply create an empty file.
+			User::LeaveIfError(file.Create(aFs, filePath, EFileShareAny|EFileWrite));
+			}
+		}
+	CleanupStack::PopAndDestroy(&filePath);
+	CleanupClosePushL(file);
+	
+	// Store the RFile handle into the package buffer in slot 0 and complete the message with the RFs handle
+	User::LeaveIfError(file.TransferToClient(aMessage, 0));
+	ASSERT(aMessage.IsNull());  // The message should have been completed
+
+	CleanupStack::PopAndDestroy(&file);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/scrhelper/source/scrhelperstartup.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Executable entrypoint and server object factory function. The latter
+* is supplied to the SCS boilerplate code which starts up the server.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "scrhelperserver.h"
+
+using namespace Usif;
+
+static CScsServer* NewScrHelperServerLC()
+/**
+	This factory function is called by SCS framework.  It allocates
+	the SCR Helper Server object and leaves it on the cleanup stack.
+
+	@return		New initialized instance of CScrHelperServer.
+				On return this is on the cleanup stack.
+ */
+	{
+	return Usif::CScrHelperServer::NewLC();
+	}
+
+
+GLDEF_C TInt E32Main()
+/**
+	Executable entrypoint. Calls the SCS boilerplate code which starts the SCR Helper server
+	and does not return until the server shuts down.
+
+	@return	Symbian OS error code where KErrNone indicates success 
+			and any other value indicates failure.
+ */
+	{
+	return StartScsServer(NewScrHelperServerLC);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/client/appregentries.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1231 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implement entry classes for Software Components Registry interface.
+*
+*/
+
+#include <usif/scr/appregentries.h>
+#include <usif/scr/screntries.h>
+#include <scs/streamingarray.h>
+#include <scs/cleanuputils.h>
+
+using namespace Usif;
+///////////////////////
+//TApplicationCharacteristics
+///////////////////////
+EXPORT_C TApplicationCharacteristics::TApplicationCharacteristics()
+    {
+    iEmbeddability = ENotEmbeddable;
+    iSupportsNewFile = EFalse;
+    iAppIsHidden = EFalse;
+    iLaunchInBackground = EFalse;
+    iGroupName = KNullDesC;
+    iAttributes = 0;
+    }
+
+EXPORT_C void TApplicationCharacteristics::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L((TInt)iEmbeddability);
+    aStream.WriteInt32L(iSupportsNewFile);
+    aStream.WriteInt32L(iAppIsHidden);
+    aStream.WriteInt32L(iLaunchInBackground);
+    aStream.WriteInt32L(iGroupName.Length());
+    aStream.WriteL(iGroupName);
+    aStream.WriteUint32L(iAttributes);
+    }
+
+EXPORT_C void TApplicationCharacteristics::InternalizeL(RReadStream& aStream) 
+    {
+    iEmbeddability = (TAppEmbeddability)aStream.ReadInt32L();
+    iSupportsNewFile = aStream.ReadInt32L();
+    iAppIsHidden = aStream.ReadInt32L();
+    iLaunchInBackground = aStream.ReadInt32L();
+    TInt groupNameLength = aStream.ReadInt32L();
+    aStream.ReadL(iGroupName, groupNameLength);
+    iAttributes = aStream.ReadUint32L();
+    }
+
+///////////////////////
+//CEmbeddabilityFilter
+///////////////////////
+EXPORT_C TEmbeddableFilter::TEmbeddableFilter(): iEmbeddabilityFlags(0)
+    {
+    
+    }
+
+EXPORT_C TUint TEmbeddableFilter::EmbeddabilityFlags() const
+    {
+    return iEmbeddabilityFlags;
+    }
+
+void TEmbeddableFilter::SetEmbeddabilityFlags(TUint aEmbeddabilityFlags)
+    {
+    iEmbeddabilityFlags = aEmbeddabilityFlags;
+    }
+
+EXPORT_C void TEmbeddableFilter::AddEmbeddability(TApplicationCharacteristics::TAppEmbeddability aEmbeddability)
+    {
+    iEmbeddabilityFlags |= (1 << aEmbeddability);
+    }
+
+EXPORT_C TBool TEmbeddableFilter::MatchesEmbeddability(TApplicationCharacteristics::TAppEmbeddability aEmbeddability) const
+    {
+    TUint embeddabilityFlag = (1 << aEmbeddability);
+    return ((embeddabilityFlag & iEmbeddabilityFlags) == 0) ? EFalse : ETrue;
+    }
+
+//////////////////
+//CAppInfoFilter
+//////////////////
+
+CAppInfoFilter::CAppInfoFilter()
+        {
+        
+        }
+
+CAppInfoFilter::~CAppInfoFilter()
+        {
+        
+        }
+
+EXPORT_C CAppInfoFilter* CAppInfoFilter::NewLC()
+        {
+        CAppInfoFilter *self = new(ELeave) CAppInfoFilter();
+        CleanupStack::PushL(self);
+        self->ConstructL();
+        return self;
+        }
+
+
+EXPORT_C CAppInfoFilter* CAppInfoFilter::NewL()
+        {
+        CAppInfoFilter *self = CAppInfoFilter::NewLC();
+        CleanupStack::Pop(self);
+        return self;
+        }
+
+EXPORT_C CAppInfoFilter* CAppInfoFilter::NewL(RReadStream& aStream)
+        {   
+        CAppInfoFilter *self = CAppInfoFilter::NewLC();
+        self->InternalizeL(aStream);
+        CleanupStack::Pop(self);
+        return self;
+        }
+
+void CAppInfoFilter::ConstructL()
+        {
+        iSetFlag = EAllApps;
+        }
+
+EXPORT_C void CAppInfoFilter::ExternalizeL(RWriteStream& aStream) const
+        {
+        aStream.WriteUint16L(iSetFlag);
+        aStream.WriteInt32L(iScreenMode);
+        aStream.WriteUint32L(iEmbeddabilityFilter.EmbeddabilityFlags());
+        aStream.WriteUint32L(iCapabilityAttributeMask);
+        aStream.WriteUint32L(iCapabilityAttributeValue);          
+        aStream.WriteUint32L(iServiceUid.iUid);
+        aStream.WriteUint32L(iAppUid.iUid);
+        }
+
+void CAppInfoFilter::InternalizeL(RReadStream& aStream)
+    {
+    iSetFlag = aStream.ReadUint16L();
+    iScreenMode = aStream.ReadInt32L();  
+    iEmbeddabilityFilter.SetEmbeddabilityFlags(aStream.ReadUint32L());
+    iCapabilityAttributeMask  = aStream.ReadUint32L();
+    iCapabilityAttributeValue = aStream.ReadUint32L();
+    iServiceUid = TUid::Uid(aStream.ReadUint32L());
+    iAppUid = TUid::Uid(aStream.ReadUint32L());
+    }
+
+EXPORT_C void CAppInfoFilter::SetAllApps()
+        {
+        iSetFlag = EAllApps;
+        }
+
+EXPORT_C void CAppInfoFilter::SetAllApps(const TInt aScreenMode)
+        {
+        iScreenMode = aScreenMode;
+        iSetFlag = EAllAppsWithScreenMode;
+        }
+
+EXPORT_C void CAppInfoFilter::SetEmbeddableApps()
+        {
+        iSetFlag = EGetEmbeddableApps;
+        }
+
+EXPORT_C void CAppInfoFilter::SetEmbeddableApps(const TInt aScreenMode)   
+        {
+        iScreenMode = aScreenMode;
+        iSetFlag = EGetEmbeddableAppsWithSreenMode;
+        }
+
+EXPORT_C void CAppInfoFilter::SetEmbeddabilityFilter(TEmbeddableFilter& aEmbeddabilityFilter)
+        {
+        iEmbeddabilityFilter = aEmbeddabilityFilter;
+        iSetFlag = EGetFilteredAppsWithEmbeddabilityFilter;        
+        }
+
+EXPORT_C void CAppInfoFilter::SetEmbeddabilityFilterWithScreenMode(TEmbeddableFilter& aEmbeddabilityFilter, const TInt aScreenMode)
+        {
+        iEmbeddabilityFilter = aEmbeddabilityFilter;
+        iScreenMode = aScreenMode;
+        iSetFlag = EGetFilteredAppsWithEmbeddabilityFilterWithScreenMode;           
+        }
+EXPORT_C void CAppInfoFilter::SetServerApps(const TUid aServiceUid)
+        {
+        iServiceUid = aServiceUid;
+        iSetFlag = EGetServerApps;
+        }
+EXPORT_C void CAppInfoFilter::SetServerApps(const TUid aServiceUid,const TInt aScreenMode)
+        {
+        iServiceUid = aServiceUid;
+        iScreenMode = aScreenMode;
+        iSetFlag = EGetServerAppsWithScreenMode;
+        }
+
+EXPORT_C void CAppInfoFilter::SetCapabilityAttributeMaskAndValue(const TInt aCapabilityAttributeMask, const TInt aCapabilityAttributeValue)
+        {
+        iCapabilityAttributeMask = aCapabilityAttributeMask;
+        iCapabilityAttributeValue =  aCapabilityAttributeValue;
+        iSetFlag =  EGetFilteredAppsWithCapabilityMaskAndValue;
+        }
+
+EXPORT_C void CAppInfoFilter::SetCapabilityAttributeMaskAndValue(const TInt aCapabilityAttributeMask, const TInt aCapabilityAttributeValue, const TInt aScreenMode)
+        {
+        iCapabilityAttributeMask = aCapabilityAttributeMask;
+        iCapabilityAttributeValue =  aCapabilityAttributeValue;
+        iScreenMode = aScreenMode;
+        iSetFlag = EGetFilteredAppsWithCapabilityMaskAndValueWithScreenMode;
+        }
+
+////////////////////////
+//CAppServiceInfoFilter
+////////////////////////
+
+CAppServiceInfoFilter::CAppServiceInfoFilter()
+    {
+        
+    }
+
+CAppServiceInfoFilter::~CAppServiceInfoFilter()
+    {
+    delete iDataType;
+    }
+
+EXPORT_C CAppServiceInfoFilter* CAppServiceInfoFilter::NewLC()
+    {
+    CAppServiceInfoFilter *self = new(ELeave) CAppServiceInfoFilter();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+
+EXPORT_C CAppServiceInfoFilter* CAppServiceInfoFilter::NewL()
+    {
+    CAppServiceInfoFilter *self = CAppServiceInfoFilter::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CAppServiceInfoFilter* CAppServiceInfoFilter::NewL(RReadStream& aStream)
+    {   
+    CAppServiceInfoFilter *self = CAppServiceInfoFilter::NewLC();
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CAppServiceInfoFilter::ConstructL()
+    {
+    DeleteObjectZ(iDataType);
+    iDataType = KNullDesC().AllocL();
+    
+    }
+
+EXPORT_C void CAppServiceInfoFilter::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteUint16L(iSetFlag);
+    aStream.WriteUint32L(iAppUid.iUid);
+    aStream.WriteUint32L(iServiceUid.iUid);
+    aStream << *iDataType;
+    }
+
+void CAppServiceInfoFilter::InternalizeL(RReadStream& aStream)
+    {
+    iSetFlag = aStream.ReadUint16L();
+    iAppUid = TUid::Uid(aStream.ReadUint32L());
+    iServiceUid = TUid::Uid(aStream.ReadUint32L());
+    DeleteObjectZ(iDataType);
+    iDataType = HBufC::NewL(aStream, KMaxTInt);
+
+    }
+
+
+EXPORT_C void CAppServiceInfoFilter::SetAppUidForServiceInfo (const TUid aAppUid)
+    {
+    iAppUid = aAppUid;
+    iSetFlag = EGetServiceInfoForApp;
+    }
+
+EXPORT_C void CAppServiceInfoFilter::SetServiceUidForServiceImplementations (const TUid aServiceUid)
+    {
+    iServiceUid = aServiceUid;
+    iSetFlag = EGetServiceImplementationForServiceUid;
+    }
+
+EXPORT_C void CAppServiceInfoFilter::SetServiceUidAndDatatTypeForServiceImplementationsL (const TUid aServiceUid, const TDesC& aDataType)
+    {
+    iServiceUid = aServiceUid;
+    DeleteObjectZ(iDataType);
+    iDataType = aDataType.AllocL();
+    iSetFlag = EGetServiceImplementationForServiceUidAndDatatType;
+    }
+
+EXPORT_C void CAppServiceInfoFilter::SetAppUidAndServiceUidForOpaqueData (const TUid aAppUid, const TUid aServiceUid)
+    {
+    iAppUid = aAppUid;
+    iServiceUid = aServiceUid;
+    iSetFlag = EGetOpaqueDataForAppWithServiceUid;
+    }
+
+///////////////////////
+// COpaqueData
+///////////////////////
+
+COpaqueData::COpaqueData()
+    {
+    // empty
+    }
+
+COpaqueData::~COpaqueData()
+    {
+    delete iOpaqueData;
+    }
+
+EXPORT_C COpaqueData* COpaqueData::NewL()
+    {
+    COpaqueData *self = COpaqueData::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C COpaqueData* COpaqueData::NewLC()
+    {
+    COpaqueData *self = new(ELeave) COpaqueData();
+    CleanupStack::PushL(self);
+    self->ConstructL(KNullDesC8(), TLanguage(0));
+    return self;
+    }
+
+EXPORT_C COpaqueData* COpaqueData::NewL(TDesC8& aOpaqueData, TLanguage aLanguage)
+    {
+    COpaqueData *self = COpaqueData::NewLC(aOpaqueData, aLanguage);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C COpaqueData* COpaqueData::NewLC(TDesC8& aOpaqueData, TLanguage aLanguage)
+    {
+    COpaqueData *self = new(ELeave) COpaqueData();
+    CleanupStack::PushL(self);
+    self->ConstructL(aOpaqueData, aLanguage);
+    return self;
+    }
+
+EXPORT_C COpaqueData* COpaqueData::NewL(RReadStream& aStream)
+    {
+    COpaqueData *self = COpaqueData::NewLC();
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void COpaqueData::ConstructL(const TDesC8& aOpaqueData, TLanguage aLanguage)
+    {  
+	//if the length of opaque data is more than 4k, we will truncate it to 4k.
+    const TInt KMaxOpaqueDataLength = 4096;    
+    if (aOpaqueData.Length() > KMaxOpaqueDataLength)
+        {
+        iOpaqueData = HBufC8::NewL(KMaxOpaqueDataLength);
+        iOpaqueData->Des().Copy(aOpaqueData.Ptr(),KMaxOpaqueDataLength);
+        }
+    else
+        {
+        iOpaqueData = aOpaqueData.AllocL();
+        }
+    iLanguage = aLanguage;
+    }
+
+EXPORT_C HBufC8& COpaqueData::OpaqueData()
+    {
+    return *iOpaqueData;
+    }
+
+EXPORT_C TLanguage COpaqueData::Language()
+    {
+    return iLanguage;
+    }
+
+
+EXPORT_C void COpaqueData::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L(iOpaqueData->Length());
+    aStream << *iOpaqueData;
+    aStream.WriteUint16L(iLanguage);
+    }
+
+EXPORT_C void COpaqueData::InternalizeL(RReadStream& aStream)
+    {
+    DeleteObjectZ(iOpaqueData);
+    
+    TInt32 opaqueDataLength = aStream.ReadInt32L();
+    iOpaqueData = HBufC8::NewL(aStream, opaqueDataLength);
+    iLanguage = (TLanguage) aStream.ReadUint16L();
+    }
+
+///////////////////////
+// CApplicationRegistrationData
+///////////////////////
+
+CApplicationRegistrationData::CApplicationRegistrationData()
+	{
+	// empty
+	}
+
+CApplicationRegistrationData::~CApplicationRegistrationData()
+	{
+	iOwnedFileArray.ResetAndDestroy();
+    iServiceArray.ResetAndDestroy();
+    iLocalizableAppInfoList.ResetAndDestroy();
+    iAppPropertiesArray.ResetAndDestroy();
+    iOpaqueDataArray.ResetAndDestroy();
+	delete iAppFile;									
+	}
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewL()
+	{
+	CApplicationRegistrationData *self = CApplicationRegistrationData::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewLC()
+	{
+	CApplicationRegistrationData *self = new(ELeave) CApplicationRegistrationData();
+	CleanupStack::PushL(self);
+	self->ConstructL(KNullDesC());
+	return self;
+	}
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewL(RReadStream& aStream)
+	{
+	CApplicationRegistrationData *self = CApplicationRegistrationData::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewL(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<CServiceInfo>& aServiceArray, RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                              RPointerArray<CPropertyEntry>& aAppPropertiesArray, TUid aAppUid, 
+                                              const TDesC& aAppFile)
+    {
+    CApplicationRegistrationData *self = CApplicationRegistrationData::NewLC(aOwnedFileArray, aServiceArray, aLocalizableAppInfoList,
+                                              aAppPropertiesArray, aAppUid, aAppFile);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewLC(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<CServiceInfo>& aServiceArray, RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                               RPointerArray<CPropertyEntry>& aAppPropertiesArray, TUid aAppUid, 
+                                               const TDesC& aAppFile)
+    {
+    CApplicationRegistrationData *self = new(ELeave) CApplicationRegistrationData();
+    CleanupStack::PushL(self);
+    self->ConstructL(aOwnedFileArray, aServiceArray, aLocalizableAppInfoList,
+                     aAppPropertiesArray, aAppUid, aAppFile);
+    return self;
+    }
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewL(
+        RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<
+                Usif::CServiceInfo>& aServiceArray, RPointerArray<
+                Usif::CLocalizableAppInfo>& aLocalizableAppInfoList,
+        RPointerArray<Usif::CPropertyEntry>& aAppPropertiesArray,
+        RPointerArray<Usif::COpaqueData>& aOpaqueDataArray, TUid aAppUid,
+        const TDesC& aAppFile, TApplicationCharacteristics& aCharacteristics,
+        TInt aDefaultScreenNumber, TInt aTypeId)
+    {
+    CApplicationRegistrationData *self = CApplicationRegistrationData::NewLC(
+            aOwnedFileArray, aServiceArray, aLocalizableAppInfoList,
+            aAppPropertiesArray, aOpaqueDataArray, aAppUid, aAppFile,
+            aCharacteristics, aDefaultScreenNumber, aTypeId);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewLC(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<Usif::CServiceInfo> &aServiceArray, RPointerArray<Usif::CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                               RPointerArray<Usif::CPropertyEntry>& aAppPropertiesArray, 
+                                               RPointerArray<Usif::COpaqueData>& aOpaqueDataArray, TUid aAppUid, 
+                                               const TDesC& aAppFile, TApplicationCharacteristics& aCharacteristics,
+                                               TInt aDefaultScreenNumber, TInt aTypeId)
+	{
+	CApplicationRegistrationData *self = new(ELeave) CApplicationRegistrationData();
+	CleanupStack::PushL(self);
+	self->ConstructL(aOwnedFileArray, aServiceArray, aLocalizableAppInfoList,
+                     aAppPropertiesArray, aOpaqueDataArray, aAppUid, aAppFile, aCharacteristics,
+                     aDefaultScreenNumber, aTypeId);
+	return self;
+	}
+	
+void CApplicationRegistrationData::ConstructL(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<Usif::CServiceInfo> &aServiceArray, RPointerArray<Usif::CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                               RPointerArray<Usif::CPropertyEntry>& aAppPropertiesArray, 
+                                               RPointerArray<Usif::COpaqueData>& aOpaqueDataArray, TUid aAppUid, 
+                                               const TDesC& aAppFile, TApplicationCharacteristics& aCharacteristics, 
+                                               TInt aDefaultScreenNumber, TInt aTypeId)
+	{
+	iOwnedFileArray = aOwnedFileArray;
+    iServiceArray = aServiceArray;
+    iLocalizableAppInfoList = aLocalizableAppInfoList;
+    iAppPropertiesArray = aAppPropertiesArray;
+    iOpaqueDataArray = aOpaqueDataArray;
+	iAppUid = aAppUid;
+	DeleteObjectZ(iAppFile);
+	iAppFile = aAppFile.AllocL();
+	iTypeId = aTypeId;
+	iCharacteristics.iAttributes = aCharacteristics.iAttributes;
+	iCharacteristics.iAppIsHidden = aCharacteristics.iAppIsHidden;
+	iCharacteristics.iEmbeddability = aCharacteristics.iEmbeddability;
+	iCharacteristics.iSupportsNewFile = aCharacteristics.iSupportsNewFile;
+	iCharacteristics.iLaunchInBackground = aCharacteristics.iLaunchInBackground;
+	iCharacteristics.iGroupName = aCharacteristics.iGroupName;
+	iDefaultScreenNumber = aDefaultScreenNumber;							
+	}
+
+void CApplicationRegistrationData::ConstructL(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<Usif::CServiceInfo> &aServiceArray, RPointerArray<Usif::CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                               RPointerArray<Usif::CPropertyEntry>& aAppPropertiesArray, TUid aAppUid, 
+                                               const TDesC& aAppFile)
+    {
+    iOwnedFileArray = aOwnedFileArray;
+    iServiceArray = aServiceArray;
+    iLocalizableAppInfoList = aLocalizableAppInfoList;
+    iAppPropertiesArray = aAppPropertiesArray;
+    iAppUid = aAppUid;
+    DeleteObjectZ(iAppFile);
+    iAppFile = aAppFile.AllocL();  
+    }
+
+void CApplicationRegistrationData::ConstructL(const TDesC& aAppFile)
+    {
+    DeleteObjectZ(iAppFile);
+    iAppFile = aAppFile.AllocL(); 
+    }
+
+EXPORT_C void CApplicationRegistrationData::ExternalizeL(RWriteStream& aStream) const
+	{
+	ExternalizePointersArrayL(iOwnedFileArray, aStream);
+	ExternalizePointersArrayL(iServiceArray, aStream);
+	ExternalizePointersArrayL(iLocalizableAppInfoList, aStream);
+	ExternalizePointersArrayL(iAppPropertiesArray, aStream);
+	ExternalizePointersArrayL(iOpaqueDataArray, aStream);
+	aStream << iAppUid;
+	aStream << *iAppFile;
+	aStream.WriteInt32L(iTypeId);
+	aStream << iCharacteristics;
+	aStream.WriteInt32L(iDefaultScreenNumber);
+	}
+	
+EXPORT_C void CApplicationRegistrationData::InternalizeL(RReadStream& aStream)
+	{
+	iOwnedFileArray.ResetAndDestroy();
+	InternalizePointersArrayL(iOwnedFileArray, aStream);
+	iServiceArray.ResetAndDestroy();
+	InternalizePointersArrayL(iServiceArray, aStream);
+	iLocalizableAppInfoList.ResetAndDestroy();
+	InternalizePointersArrayL(iLocalizableAppInfoList, aStream);
+	iAppPropertiesArray.ResetAndDestroy();
+	InternalizePointersArrayL(iAppPropertiesArray, aStream);
+	iOpaqueDataArray.ResetAndDestroy();
+	InternalizePointersArrayL(iOpaqueDataArray, aStream);
+
+	aStream >> iAppUid;
+
+	DeleteObjectZ(iAppFile);
+	iAppFile = HBufC::NewL(aStream, KMaxTInt);
+
+	iTypeId = aStream.ReadInt32L();
+	aStream >> iCharacteristics;
+	iDefaultScreenNumber = aStream.ReadInt32L();
+	}
+
+EXPORT_C const TUid CApplicationRegistrationData::AppUid() const
+	{
+	return iAppUid;
+	}
+
+EXPORT_C const TDesC& CApplicationRegistrationData::AppFile() const
+	{
+	return *iAppFile;
+	}
+
+EXPORT_C TInt CApplicationRegistrationData::TypeId() const
+    {
+    return iTypeId;
+    }
+
+EXPORT_C TUint CApplicationRegistrationData::Attributes() const
+	{
+	return iCharacteristics.iAttributes;
+	}
+
+EXPORT_C TBool CApplicationRegistrationData::Hidden() const
+	{
+	return iCharacteristics.iAppIsHidden;
+	}
+
+EXPORT_C TApplicationCharacteristics::TAppEmbeddability CApplicationRegistrationData::Embeddability() const
+	{
+	return iCharacteristics.iEmbeddability;
+	}
+
+EXPORT_C TBool CApplicationRegistrationData::NewFile() const
+	{
+	return iCharacteristics.iSupportsNewFile;
+	}
+
+EXPORT_C TBool CApplicationRegistrationData::Launch() const
+	{
+	return iCharacteristics.iLaunchInBackground;
+	}
+
+EXPORT_C const TDesC& CApplicationRegistrationData::GroupName() const
+	{
+	return iCharacteristics.iGroupName;
+	}
+
+EXPORT_C TInt CApplicationRegistrationData::DefaultScreenNumber() const
+	{
+	return iDefaultScreenNumber;
+	}
+
+EXPORT_C const RPointerArray<HBufC>& CApplicationRegistrationData::OwnedFileArray() const
+	{
+	return iOwnedFileArray;
+	}
+
+EXPORT_C const RPointerArray<CServiceInfo>& CApplicationRegistrationData::ServiceArray() const
+	{
+	return iServiceArray;
+	}
+
+EXPORT_C const RPointerArray<CLocalizableAppInfo>& CApplicationRegistrationData::LocalizableAppInfoList() const
+	{
+	return iLocalizableAppInfoList;
+	}
+
+EXPORT_C const RPointerArray<CPropertyEntry>& CApplicationRegistrationData::AppProperties() const
+	{
+	return iAppPropertiesArray;
+	}
+
+EXPORT_C const RPointerArray<COpaqueData>& CApplicationRegistrationData::AppOpaqueData() const
+    {
+    return iOpaqueDataArray;
+    }
+
+///////////////////////
+// CDataType
+///////////////////////
+
+CDataType::CDataType()
+	{
+	// empty
+	}
+
+CDataType::~CDataType()
+	{
+    delete iType;
+	}
+
+EXPORT_C CDataType* CDataType::NewL()
+	{
+	CDataType *self = CDataType::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CDataType* CDataType::NewLC()
+	{
+	CDataType *self = new(ELeave) CDataType();
+	CleanupStack::PushL(self);
+	self->ConstructL(0, KNullDesC());
+	return self;
+	}
+
+EXPORT_C CDataType* CDataType::NewL(RReadStream& aStream)
+	{
+	CDataType *self = CDataType::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CDataType* CDataType::NewL(TInt aPriority, const TDesC& aType)
+	{
+	CDataType *self = CDataType::NewLC(aPriority, aType);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CDataType* CDataType::NewLC(TInt aPriority, const TDesC& aType)
+	{
+	CDataType *self = new(ELeave) CDataType();
+	CleanupStack::PushL(self);
+	self->ConstructL(aPriority, aType);
+	return self;
+	}
+
+void CDataType::ConstructL(TInt aPriority, const TDesC& aType)
+	{
+	iPriority = aPriority;
+	DeleteObjectZ(iType);
+    iType = aType.AllocL();
+    }
+
+EXPORT_C void CDataType::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(iPriority);
+	aStream << *iType;
+	}
+			
+EXPORT_C void CDataType::InternalizeL(RReadStream& aStream)
+	{
+	iPriority = aStream.ReadInt32L();
+	DeleteObjectZ(iType);
+	iType = HBufC::NewL(aStream, KMaxTInt);
+	}
+
+EXPORT_C TInt CDataType::Priority() const
+	{
+	return iPriority;
+	}
+
+EXPORT_C const TDesC& CDataType::Type() const
+	{
+	return *iType;
+	}
+
+///////////////////////
+// CServiceInfo
+///////////////////////
+
+CServiceInfo::CServiceInfo()
+	{
+	// empty
+	}
+
+CServiceInfo::~CServiceInfo()
+	{
+	iDataTypes.ResetAndDestroy();
+	iOpaqueDataArray.ResetAndDestroy();
+   }
+
+EXPORT_C CServiceInfo* CServiceInfo::NewL()
+	{
+	CServiceInfo *self = CServiceInfo::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CServiceInfo* CServiceInfo::NewLC()
+	{
+	CServiceInfo *self = new(ELeave) CServiceInfo();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+EXPORT_C CServiceInfo* CServiceInfo::NewL(RReadStream& aStream)
+	{
+	CServiceInfo *self = CServiceInfo::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CServiceInfo* CServiceInfo::NewL(const TUid aUid, RPointerArray<COpaqueData>& aOpaqueDataArray, RPointerArray<CDataType>& aDataTypes)
+	{
+	CServiceInfo *self = CServiceInfo::NewLC(aUid, aOpaqueDataArray, aDataTypes);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CServiceInfo* CServiceInfo::NewLC(const TUid aUid, RPointerArray<COpaqueData>& aOpaqueDataArray, RPointerArray<CDataType>& aDataTypes)
+	{
+	CServiceInfo *self = new(ELeave) CServiceInfo();
+	CleanupStack::PushL(self);
+	self->ConstructL(aUid, aOpaqueDataArray, aDataTypes);
+	return self;
+	}
+	
+void CServiceInfo::ConstructL(const TUid aUid, RPointerArray<COpaqueData>& aOpaqueDataArray, RPointerArray<CDataType>& aDataTypes)
+	{
+	iUid = aUid;
+	iOpaqueDataArray = aOpaqueDataArray;
+    iDataTypes = aDataTypes;
+    }
+
+EXPORT_C void CServiceInfo::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream << iUid;
+	ExternalizePointersArrayL(iOpaqueDataArray, aStream);
+	ExternalizePointersArrayL(iDataTypes, aStream);
+	}
+		
+EXPORT_C void CServiceInfo::InternalizeL(RReadStream& aStream)
+	{
+	aStream >> iUid;
+	iOpaqueDataArray.Reset();
+	InternalizePointersArrayL(iOpaqueDataArray, aStream);
+	InternalizePointersArrayL(iDataTypes, aStream);
+	}
+
+EXPORT_C const TUid CServiceInfo::Uid() const
+	{
+	return iUid;
+	}
+
+EXPORT_C const RPointerArray<CDataType>& CServiceInfo::DataTypes() const
+	{
+	return iDataTypes;
+	}
+
+EXPORT_C const RPointerArray<COpaqueData>& CServiceInfo::OpaqueData() const
+    {
+    return iOpaqueDataArray;
+    }
+
+///////////////////////
+// CLocalizableAppInfo
+///////////////////////
+
+CLocalizableAppInfo::CLocalizableAppInfo()
+	{
+	// empty
+	}
+
+CLocalizableAppInfo::~CLocalizableAppInfo()
+	{
+	delete iShortCaption;
+    delete iGroupName;
+	delete iCaptionAndIconInfo;
+	iViewDataList.ResetAndDestroy();
+	}
+
+EXPORT_C CLocalizableAppInfo* CLocalizableAppInfo::NewL()
+	{
+	CLocalizableAppInfo *self = CLocalizableAppInfo::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CLocalizableAppInfo* CLocalizableAppInfo::NewLC()
+	{
+	CLocalizableAppInfo *self = new(ELeave) CLocalizableAppInfo();
+	CleanupStack::PushL(self);
+	self->ConstructL(KNullDesC(), KNullDesC());
+	return self;
+	}
+
+EXPORT_C CLocalizableAppInfo* CLocalizableAppInfo::NewL(RReadStream& aStream)
+	{
+	CLocalizableAppInfo *self = CLocalizableAppInfo::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CLocalizableAppInfo* CLocalizableAppInfo::NewL(const TDesC& aShortCaption, TLanguage aApplicationLanguage, const TDesC& aGroupName, CCaptionAndIconInfo* aCaptionAndIconInfo, RPointerArray<CAppViewData>& aViewDataList)
+	{
+	CLocalizableAppInfo *self = CLocalizableAppInfo::NewLC(aShortCaption, aApplicationLanguage, aGroupName, aCaptionAndIconInfo, aViewDataList);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CLocalizableAppInfo* CLocalizableAppInfo::NewLC(const TDesC& aShortCaption, TLanguage aApplicationLanguage, const TDesC& aGroupName, CCaptionAndIconInfo* aCaptionAndIconInfo, RPointerArray<CAppViewData>& aViewDataList)
+	{
+	CLocalizableAppInfo *self = new(ELeave) CLocalizableAppInfo();
+	CleanupStack::PushL(self);
+	self->ConstructL(aShortCaption, aApplicationLanguage, aGroupName, aCaptionAndIconInfo, aViewDataList);
+	return self;
+	}
+	
+void CLocalizableAppInfo::ConstructL(const TDesC& aShortCaption, TLanguage aApplicationLanguage, const TDesC& aGroupName, CCaptionAndIconInfo* aCaptionAndIconInfo, RPointerArray<Usif::CAppViewData> aViewDataList)
+	{
+	DeleteObjectZ(iShortCaption);
+	iShortCaption = aShortCaption.AllocL();
+	iApplicationLanguage = aApplicationLanguage;
+	DeleteObjectZ(iGroupName);
+	iGroupName = aGroupName.AllocL();
+	iCaptionAndIconInfo = aCaptionAndIconInfo;
+	iViewDataList = aViewDataList;	
+    }
+
+void CLocalizableAppInfo::ConstructL(const TDesC& aShortCaption, const TDesC& aGroupName)
+    {
+    DeleteObjectZ(iShortCaption);
+    iShortCaption = aShortCaption.AllocL();
+    DeleteObjectZ(iGroupName);
+    iGroupName = aGroupName.AllocL();
+    }
+
+
+EXPORT_C void CLocalizableAppInfo::ExternalizeL(RWriteStream& aStream) const
+	{	
+	 aStream << *iShortCaption;
+	 aStream << TCardinality(iApplicationLanguage);
+     aStream << *iGroupName;
+	if(NULL != iCaptionAndIconInfo)
+	    {	    
+	    aStream.WriteInt8L(ETrue);
+	    aStream << *iCaptionAndIconInfo;
+	    }
+	else
+	    {	    
+	    aStream.WriteInt8L(EFalse);    
+	    }
+	ExternalizePointersArrayL(iViewDataList, aStream);
+	}
+	
+EXPORT_C void CLocalizableAppInfo::InternalizeL(RReadStream& aStream) 
+	{
+	DeleteObjectZ(iShortCaption);
+	iShortCaption = HBufC::NewL(aStream, KMaxTInt);
+	TCardinality c;
+	aStream >> c;
+	iApplicationLanguage = static_cast<TLanguage>(static_cast<TInt>(c));
+	DeleteObjectZ(iGroupName);
+	iGroupName = HBufC::NewL(aStream, KMaxTInt);
+	DeleteObjectZ(iCaptionAndIconInfo);
+	TBool isCaptionAndIconInfo= aStream.ReadInt8L();
+	if(isCaptionAndIconInfo)
+	    {
+	    iCaptionAndIconInfo = CCaptionAndIconInfo::NewL(aStream);
+	    }
+	InternalizePointersArrayL(iViewDataList, aStream);
+	}
+
+EXPORT_C const TDesC& CLocalizableAppInfo::ShortCaption() const
+	{
+	return *iShortCaption;
+	}
+
+EXPORT_C TLanguage CLocalizableAppInfo::ApplicationLanguage() const
+	{
+	return iApplicationLanguage;
+	}
+
+EXPORT_C const TDesC& CLocalizableAppInfo::GroupName() const
+	{
+	return *iGroupName;
+	}
+
+EXPORT_C const RPointerArray<CAppViewData>& CLocalizableAppInfo::ViewDataList() const
+	{
+	return iViewDataList;
+	}
+
+EXPORT_C const CCaptionAndIconInfo* CLocalizableAppInfo::CaptionAndIconInfo() const
+	{
+	return iCaptionAndIconInfo;
+	}
+
+///////////////////////
+// CCaptionAndIconInfo
+///////////////////////
+
+CCaptionAndIconInfo::CCaptionAndIconInfo()
+	{
+	// empty
+	}
+
+CCaptionAndIconInfo::~CCaptionAndIconInfo()
+	{
+	delete iCaption;
+	delete iIconFileName;
+	}
+
+EXPORT_C CCaptionAndIconInfo* CCaptionAndIconInfo::NewL()
+	{
+	CCaptionAndIconInfo *self = CCaptionAndIconInfo::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CCaptionAndIconInfo* CCaptionAndIconInfo::NewLC()
+	{
+	CCaptionAndIconInfo *self = new(ELeave) CCaptionAndIconInfo();
+	CleanupStack::PushL(self);
+	self->ConstructL(KNullDesC(), KNullDesC(), 0);
+	return self;
+	}
+
+EXPORT_C CCaptionAndIconInfo* CCaptionAndIconInfo::NewL(RReadStream& aStream)
+	{
+	CCaptionAndIconInfo *self = CCaptionAndIconInfo::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CCaptionAndIconInfo* CCaptionAndIconInfo::NewL(const TDesC& aCaption, const TDesC& aIconFileName, TInt aNumOfAppIcons)
+	{
+	CCaptionAndIconInfo *self = CCaptionAndIconInfo::NewLC(aCaption, aIconFileName, aNumOfAppIcons);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CCaptionAndIconInfo* CCaptionAndIconInfo::NewLC(const TDesC& aCaption, const TDesC& aIconFileName, TInt aNumOfAppIcons)
+	{
+	CCaptionAndIconInfo *self = new(ELeave) CCaptionAndIconInfo();
+	CleanupStack::PushL(self);
+	self->ConstructL(aCaption, aIconFileName, aNumOfAppIcons);
+	return self;
+	}
+	
+void CCaptionAndIconInfo::ConstructL(const TDesC& aCaption, const TDesC& aIconFileName, TInt aNumOfAppIcons)
+	{
+	DeleteObjectZ(iCaption);
+	iCaption = aCaption.AllocL();
+	DeleteObjectZ(iIconFileName);
+    iIconFileName = aIconFileName.AllocL();
+	iNumOfAppIcons = aNumOfAppIcons;
+	}
+
+EXPORT_C void CCaptionAndIconInfo::ExternalizeL(RWriteStream& aStream) const
+	{
+     aStream << *iCaption;
+     aStream << *iIconFileName;
+	 aStream.WriteInt32L(iNumOfAppIcons);
+	}
+		
+EXPORT_C void CCaptionAndIconInfo::InternalizeL(RReadStream& aStream)
+	{
+	DeleteObjectZ(iCaption);
+	iCaption = HBufC::NewL(aStream, KMaxTInt);
+	DeleteObjectZ(iIconFileName);
+	iIconFileName = HBufC::NewL(aStream, KMaxTInt);
+	iNumOfAppIcons = aStream.ReadInt32L();
+	}
+
+EXPORT_C const TDesC& CCaptionAndIconInfo::Caption() const
+	{
+	return *iCaption;
+	}
+
+EXPORT_C const TDesC& CCaptionAndIconInfo::IconFileName() const
+	{
+	return *iIconFileName;
+	}
+
+EXPORT_C TInt CCaptionAndIconInfo::NumOfAppIcons() const
+	{
+	return iNumOfAppIcons;
+	}
+
+///////////////////////
+// CAppViewData
+///////////////////////
+
+CAppViewData::CAppViewData()
+	{
+	// empty
+	}
+
+CAppViewData::~CAppViewData()
+	{
+	delete iCaptionAndIconInfo;
+	}
+
+EXPORT_C CAppViewData* CAppViewData::NewL()
+	{
+	CAppViewData *self = CAppViewData::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CAppViewData* CAppViewData::NewLC()
+	{
+	CAppViewData *self = new(ELeave) CAppViewData();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+EXPORT_C CAppViewData* CAppViewData::NewL(RReadStream& aStream)
+	{
+	CAppViewData *self = CAppViewData::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CAppViewData* CAppViewData::NewL(TUid aUid, TInt aScreenMode, CCaptionAndIconInfo* aCaptionAndIconInfo)
+	{
+	CAppViewData *self = CAppViewData::NewLC(aUid, aScreenMode, aCaptionAndIconInfo);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CAppViewData* CAppViewData::NewLC(TUid aUid, TInt aScreenMode, CCaptionAndIconInfo* aCaptionAndIconInfo)
+	{
+	CAppViewData *self = new(ELeave) CAppViewData();
+	CleanupStack::PushL(self);
+	self->ConstructL(aUid, aScreenMode, aCaptionAndIconInfo);
+	return self;
+	}
+	
+void CAppViewData::ConstructL(TUid aUid, TInt aScreenMode, CCaptionAndIconInfo* aCaptionAndIconInfo)
+	{
+	iUid = aUid;
+    iScreenMode = aScreenMode;
+	iCaptionAndIconInfo = aCaptionAndIconInfo;
+	}
+
+EXPORT_C void CAppViewData::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream << iUid;
+	aStream.WriteInt32L(iScreenMode);
+	if(NULL != iCaptionAndIconInfo)
+	   {       
+	   aStream.WriteInt8L(ETrue);
+	   aStream << *iCaptionAndIconInfo;
+	   }
+	else
+	   {       
+	   aStream.WriteInt8L(EFalse);    
+	   }
+	}
+			
+EXPORT_C void CAppViewData::InternalizeL(RReadStream& aStream)
+	{
+	aStream >> iUid;
+	iScreenMode = aStream.ReadInt32L();
+	DeleteObjectZ(iCaptionAndIconInfo);
+	TBool isCaptionAndIconInfo= aStream.ReadInt8L();
+	if(isCaptionAndIconInfo)
+	  {
+	  iCaptionAndIconInfo = CCaptionAndIconInfo::NewL(aStream);
+	  }
+	}
+
+EXPORT_C const TUid CAppViewData::Uid() const
+	{
+	return iUid;
+	}
+
+EXPORT_C TInt CAppViewData::ScreenMode() const
+	{
+	return iScreenMode;
+	}
+
+EXPORT_C const CCaptionAndIconInfo* CAppViewData::CaptionAndIconInfo() const
+	{
+	return iCaptionAndIconInfo;
+	}
+
+
+///////////////////////
+// CLauncherExecutable
+///////////////////////
+
+CLauncherExecutable::CLauncherExecutable()
+    {
+    }
+
+CLauncherExecutable::~CLauncherExecutable()
+    {
+    delete iLauncher;
+    }
+
+EXPORT_C CLauncherExecutable* CLauncherExecutable::NewL()
+    {
+    CLauncherExecutable *self = CLauncherExecutable::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CLauncherExecutable* CLauncherExecutable::NewLC()
+    {
+    CLauncherExecutable *self = new(ELeave) CLauncherExecutable();
+    CleanupStack::PushL(self);
+    self->ConstructL(0, KNullDesC());
+    return self;
+    }
+
+EXPORT_C CLauncherExecutable* CLauncherExecutable::NewL(TInt aTypeId, const TDesC& aLauncher)
+    {
+    CLauncherExecutable *self = CLauncherExecutable::NewLC(aTypeId, aLauncher);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CLauncherExecutable* CLauncherExecutable::NewLC(TInt aTypeId, const TDesC& aLauncher)
+    {
+    CLauncherExecutable *self = new(ELeave) CLauncherExecutable();
+    CleanupStack::PushL(self);
+    self->ConstructL(aTypeId, aLauncher);
+    return self;
+    }
+
+EXPORT_C CLauncherExecutable* CLauncherExecutable::NewL(RReadStream& aStream)
+    {
+    CLauncherExecutable *self = CLauncherExecutable::NewLC();
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CLauncherExecutable::ConstructL(TInt aTypeId, const TDesC& aLauncher)
+    {
+    iTypeId = aTypeId;
+    DeleteObjectZ(iLauncher);
+    iLauncher = aLauncher.AllocL();
+    }
+
+EXPORT_C const TDesC& CLauncherExecutable::Launcher() const
+    {
+    return *iLauncher;
+    }
+
+EXPORT_C TInt CLauncherExecutable::TypeId() const
+    {
+    return iTypeId;
+    }
+
+EXPORT_C void CLauncherExecutable::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L(iTypeId);
+    aStream << *iLauncher;
+    }
+
+EXPORT_C void CLauncherExecutable::InternalizeL(RReadStream& aStream)
+    {       
+    iTypeId = aStream.ReadInt32L();
+    
+    DeleteObjectZ(iLauncher);
+    iLauncher = HBufC::NewL(aStream, KMaxTInt);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/client/appreginfo.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* appreginfo.cpp
+*
+*/
+
+#include <s32strm.h>
+#include <usif/scr/appreginfo.h>
+
+namespace Usif
+    {
+
+EXPORT_C TAppRegInfo::TAppRegInfo()
+	: iUid(TUid()),
+	iFullName(KNullDesC),
+	iCaption(KNullDesC),
+	iShortCaption(KNullDesC)
+	{}
+
+
+EXPORT_C TAppRegInfo::TAppRegInfo(TUid aAppUid, const TFileName& aAppName, const TAppCaption& aCaption)
+	: iUid(aAppUid),
+	iFullName(aAppName),
+	iCaption(aCaption),
+	iShortCaption(aCaption)
+	{}
+
+
+EXPORT_C TAppRegInfo::TAppRegInfo(TUid aAppUid, const TFileName& aAppName, const TAppCaption& aCaption, const TAppCaption& aShortCaption)
+	: iUid(aAppUid),
+	iFullName(aAppName),
+	iCaption(aCaption),
+	iShortCaption(aShortCaption)
+	{}
+
+
+EXPORT_C void TAppRegInfo::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream<< iUid;
+	aStream<< iFullName;
+	aStream<< iCaption;
+	aStream<< iShortCaption;
+	}
+
+
+
+EXPORT_C void TAppRegInfo::InternalizeL(RReadStream& aStream)
+	{
+	aStream>> iUid;
+	aStream>> iFullName;
+	aStream>> iCaption;
+	aStream>> iShortCaption;
+	}
+
+EXPORT_C TUid TAppRegInfo::Uid() const
+   {
+   return iUid;
+   }
+
+EXPORT_C TFileName TAppRegInfo::FullName() const
+   {
+   return iFullName;
+   }
+
+EXPORT_C TAppCaption TAppRegInfo::Caption() const
+   {
+   return iCaption;
+   }
+
+EXPORT_C TAppCaption TAppRegInfo::ShortCaption() const
+   {
+   return iShortCaption;
+   }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/client/scrclient.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,728 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* RSoftwareComponentRegistry implementation. See class and function 
+* declarations for more detail.
+*
+*/
+
+
+#include "scr.h"
+#include "scrclient.inl"
+#include "scrcommon.h"
+#include "usiflog.h"
+#include "scr_internal.h"
+#include <e32cmn.h>
+#include <scs/streamingarray.h>
+#include <scs/scscommon.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "screntries_internal.h"
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+
+using namespace Usif;
+
+TInt RSoftwareComponentRegistry::SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const
+	{
+	return CallSessionFunction(aFunction, aArgs);
+	}
+
+EXPORT_C RSoftwareComponentRegistry::RSoftwareComponentRegistry()
+	:	RScsClientBase()
+	{
+	// empty
+	}
+
+EXPORT_C TInt RSoftwareComponentRegistry::Connect()
+	{
+	DEBUG_PRINTF2(_L("Connecting to %S."), &KSoftwareComponentRegistryName);
+	TVersion version = ScrServerVersion();
+	TUidType scrFullUid = ScrServerImageFullUid();
+	
+	return RScsClientBase::Connect(KSoftwareComponentRegistryName(), version, KScrServerImageName(), scrFullUid);
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::Close()
+	{
+	DEBUG_PRINTF2(_L("Closing connection to %S."), &KSoftwareComponentRegistryName);
+	RScsClientBase::Close();
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::CreateTransactionL()
+	{
+	DEBUG_PRINTF(_L("Sending Create Transaction request."));
+	User::LeaveIfError(CallSessionFunction(ECreateTransaction));
+	}
+		
+EXPORT_C void RSoftwareComponentRegistry::RollbackTransactionL()
+	{
+	DEBUG_PRINTF(_L("Sending Rollback Transaction request."));
+	User::LeaveIfError(CallSessionFunction(ERollbackTransaction));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::CommitTransactionL()
+	{
+	DEBUG_PRINTF(_L("Sending Commit Transaction request."));
+	User::LeaveIfError(CallSessionFunction(ECommitTransaction));
+	}
+
+
+EXPORT_C TComponentId RSoftwareComponentRegistry::AddComponentL(const TDesC& aName, const TDesC& aVendor, const TDesC& aUniqueSwTypeName, const TDesC* aGlobalId, TScrComponentOperationType aCompOpType)
+	{
+	DEBUG_PRINTF3(_L("Sending add a new component ('%S','%S') request."), &aName, &aVendor);
+
+	CLocalizableComponentInfo *cmpInfo = CLocalizableComponentInfo::NewLC(aName, aVendor, KNonLocalized);
+	RPointerArray<CLocalizableComponentInfo> cmpInfoList;
+	cmpInfoList.AppendL(cmpInfo);
+	CleanupStack::Pop(cmpInfo);
+	CleanupResetAndDestroyPushL(cmpInfoList);
+	TComponentId compId = AddComponentL(cmpInfoList, aUniqueSwTypeName, aGlobalId, aCompOpType);
+	CleanupStack::PopAndDestroy(&cmpInfoList);
+	return compId;
+	}
+
+EXPORT_C TComponentId RSoftwareComponentRegistry::AddComponentL(const RPointerArray<CLocalizableComponentInfo>& aComponentInfo, const TDesC& aUniqueSwTypeName, const TDesC* aGlobalId, TScrComponentOperationType aCompOpType)
+	{
+	if(!aComponentInfo.Count())
+		{
+		DEBUG_PRINTF(_L("The localizables component info array is empty!."));
+		User::Leave(KErrArgument);
+		}
+	DEBUG_PRINTF(_L("Sending add a new component request with a set of localizable names."));
+	
+	TComponentId compId = static_cast<TComponentId>(aCompOpType);
+	// compId variable carries the component operation type to the SCR server.
+	// On return, it will contain the actual component Id value.
+	TPckg<TComponentId> compIdPckg(compId);
+	HBufC8* arrayBuf = ExternalizePointersArrayLC(aComponentInfo);
+	const TDesC *globalId = aGlobalId ? aGlobalId : &KNullDesC();
+	TIpcArgs args(&aUniqueSwTypeName, arrayBuf, globalId, &compIdPckg);
+	User::LeaveIfError(CallSessionFunction(EAddComponent, args));
+	CleanupStack::PopAndDestroy(arrayBuf);
+	return compId;
+	}
+
+template <class C>
+void RSoftwareComponentRegistry::SendDependencyArgsL(TInt aFunction, const C& aSupplierId, const CGlobalComponentId& aDependantGlobalCompId)
+	{
+	RBuf8 suppVerCompId;
+	suppVerCompId.CleanupClosePushL();
+	ExternalizeObjectL(&aSupplierId, suppVerCompId);
+		
+	RBuf8 depGlobalId;
+	depGlobalId.CleanupClosePushL();
+	ExternalizeObjectL(&aDependantGlobalCompId, depGlobalId);
+	// Send the software type of the dependant component seperately in order to apply custom security check properly on the server side.
+	TIpcArgs args(&aDependantGlobalCompId.SoftwareTypeName(),&suppVerCompId, &depGlobalId);
+	User::LeaveIfError(CallSessionFunction(aFunction, args));
+	CleanupStack::PopAndDestroy(2, &suppVerCompId); // suppVerCompId, depGlobalId
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::AddComponentDependencyL(const CVersionedComponentId& aSupplierVerCompId, const CGlobalComponentId& aDependantGlobalCompId)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to add a new dependency between two components (%S depends on %S)."), &aDependantGlobalCompId.GlobalIdName(), &aSupplierVerCompId.GlobalId().GlobalIdName());
+	SendDependencyArgsL(EAddComponentDependency, aSupplierVerCompId, aDependantGlobalCompId);
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetComponentPropertyL(TComponentId aComponentId, const TDesC& aName, const TDesC8& aValue)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to set the binary property(%S) of the component(%d)."), &aName, aComponentId);
+	TIpcArgs args(aComponentId, &aName, &aValue);
+	User::LeaveIfError(CallSessionFunction(ESetComponentBinaryProperty, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetComponentPropertyL(TComponentId aComponentId, const TDesC& aName, const TDesC& aValue, TLanguage aLocale)
+	{
+	DEBUG_PRINTF4(_L("Sending a request to set the string property(%S,%S) of the component(%d)."), &aName, &aValue, aComponentId);
+	TIpcArgs args(aComponentId, &aName, &aValue, aLocale);
+	User::LeaveIfError(CallSessionFunction(ESetComponentLocalizableProperty, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetComponentPropertyL(TComponentId aComponentId, const TDesC& aName, TInt64 aValue)
+	{
+	DEBUG_PRINTF4(_L("Sending a request to set the numeric property(%S,%Ld) of the component(%d)."), &aName, aValue, aComponentId);
+	TIpcArgs args(aComponentId, &aName, I64HIGH(aValue), I64LOW(aValue));
+	User::LeaveIfError(CallSessionFunction(ESetComponentNumericProperty, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::RegisterComponentFileL(TComponentId aComponentId, const TDesC& aFileName, TBool aConsiderForInstalledDrives /*= ETrue*/ )
+	{
+	DEBUG_PRINTF4(_L("Sending a request to register the file(%S) for the component(%d). ConsiderFilesInDriveList:%d"), &aFileName, aComponentId, aConsiderForInstalledDrives);
+	TIpcArgs args(aComponentId, &aFileName, aConsiderForInstalledDrives);
+	User::LeaveIfError(CallSessionFunction(ERegisterComponentFile, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetFilePropertyL(TComponentId aComponentId, const TDesC& aFileName, const TDesC& aPropName, const TDesC8& aPropValue)
+	{
+	DEBUG_PRINTF4(_L("Sending a request to set the string property(%S) of the file(%S) of the component(%d)."), &aPropName, &aFileName, aComponentId);
+	TIpcArgs args(aComponentId, &aFileName, &aPropName, &aPropValue);
+	User::LeaveIfError(CallSessionFunction(ESetFileStringProperty, args));
+	}
+EXPORT_C void RSoftwareComponentRegistry::SetFilePropertyL(TComponentId aComponentId, const TDesC& aFileName, const TDesC& aPropName, TInt aPropValue)
+	{
+	DEBUG_PRINTF5(_L("Sending a request to set the numeric property(%S,%d) of the file(%S) of the component(%d)."), &aPropName, aPropValue, &aFileName, aComponentId);
+	TIpcArgs args(aComponentId, &aFileName, &aPropName, aPropValue);
+	User::LeaveIfError(CallSessionFunction(ESetFileNumericProperty, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetComponentNameL(TComponentId aComponentId, const TDesC& aName, TLanguage aLocale)
+	{
+	DEBUG_PRINTF4(_L("Sending a request to update the name(%S,%d) of the component(%d)."), &aName, aLocale, aComponentId);
+	TIpcArgs args(aComponentId, &aName, aLocale);
+	User::LeaveIfError(CallSessionFunction(ESetComponentName, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetVendorNameL(TComponentId aComponentId, const TDesC& aVendor, TLanguage aLocale)
+	{
+	DEBUG_PRINTF4(_L("Sending a request to update the vendor(%S,%d) of the component(%d)."), &aVendor, aLocale, aComponentId);
+	TIpcArgs args(aComponentId, &aVendor, aLocale);
+	User::LeaveIfError(CallSessionFunction(ESetComponentVendor, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetComponentVersionL(TComponentId aComponentId, const TDesC& aVersion)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to set the version(%S) of the component(%d)."), &aVersion, aComponentId);
+	TIpcArgs args(aComponentId, &aVersion);
+	User::LeaveIfError(CallSessionFunction(ESetComponentVersion, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetIsComponentRemovableL(TComponentId aComponentId, TBool aValue)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to set the removable attribute(%d) of the component(%d)."), aValue, aComponentId);
+	TIpcArgs args(aComponentId, aValue);
+	User::LeaveIfError(CallSessionFunction(ESetIsComponentRemovable, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetIsComponentDrmProtectedL(TComponentId aComponentId, TBool aValue)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to set the DRM protected attribute(%d) of the component(%d)."), aValue, aComponentId);
+	TIpcArgs args(aComponentId, aValue);
+	User::LeaveIfError(CallSessionFunction(ESetIsComponentDrmProtected, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetIsComponentHiddenL(TComponentId aComponentId, TBool aValue)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to set the hidden attribute(%d) of the component(%d)."), aValue, aComponentId);
+	TIpcArgs args(aComponentId, aValue);
+	User::LeaveIfError(CallSessionFunction(ESetIsComponentHidden, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetIsComponentKnownRevokedL(TComponentId aComponentId, TBool aValue)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to set the known-revoked attribute(%d) of the component(%d)."), aValue, aComponentId);
+	TIpcArgs args(aComponentId, aValue);
+	User::LeaveIfError(CallSessionFunction(ESetIsComponentKnownRevoked, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetIsComponentOriginVerifiedL(TComponentId aComponentId, TBool aValue)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to set the origin-verified attribute(%d) of the component(%d)."), aValue, aComponentId);
+	TIpcArgs args(aComponentId, aValue);
+	User::LeaveIfError(CallSessionFunction(ESetIsComponentOriginVerified, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetComponentSizeL(TComponentId aComponentId, TInt64 aComponentSizeInBytes)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to set the install-time size (%Ld) of the component(%d)."), aComponentSizeInBytes, aComponentId);
+	TIpcArgs args(aComponentId, I64HIGH(aComponentSizeInBytes), I64LOW(aComponentSizeInBytes));
+	User::LeaveIfError(CallSessionFunction(ESetComponentSize, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::DeleteComponentPropertyL(TComponentId aComponentId, const TDesC& aPropName)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to delete the property(%S) of the component(%d)."), &aPropName, aComponentId);
+	TIpcArgs args(aComponentId, &aPropName);
+	User::LeaveIfError(CallSessionFunction(EDeleteComponentProperty, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::DeleteFilePropertyL(TComponentId aComponentId, const TDesC& aFileName, const TDesC& aPropName)
+	{
+	DEBUG_PRINTF4(_L("Sending a request to delete the property(%S) of the file(%S) of the component(%d)."), &aPropName, &aFileName, aComponentId);
+	TIpcArgs args(aComponentId, &aFileName, &aPropName);
+	User::LeaveIfError(CallSessionFunction(EDeleteFileProperty, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::UnregisterComponentFileL(TComponentId aComponentId, const TDesC& aFileName)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to deregister the file(%S) for the component(%d)."), &aFileName, aComponentId);
+	TIpcArgs args(aComponentId, &aFileName);
+	User::LeaveIfError(CallSessionFunction(EUnregisterComponentFile, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::DeleteComponentL(TComponentId aComponentId)
+	{
+	DEBUG_PRINTF2(_L("Sending a request to delete the component(%d)."), aComponentId);
+	TIpcArgs args(aComponentId);
+	User::LeaveIfError(CallSessionFunction(EDeleteComponent, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::DeleteComponentDependencyL(const CGlobalComponentId& aSupplierGlobalCompId, const CGlobalComponentId& aDependantGlobalCompId)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to delete an existing dependency between two components (%S depends on %S)."), &aDependantGlobalCompId.GlobalIdName(), &aSupplierGlobalCompId.GlobalIdName());
+	SendDependencyArgsL(EDeleteComponentDependency, aSupplierGlobalCompId, aDependantGlobalCompId);
+	}
+
+EXPORT_C TBool RSoftwareComponentRegistry::GetComponentL(TComponentId aComponentId, CComponentEntry& aEntry, TLanguage aLocale) const
+	{
+	DEBUG_PRINTF2(_L("Sending a request to retrieve the entry of the component(%d)."), aComponentId);
+	TIpcArgs args(aComponentId, aLocale);
+	TInt argNum = 2; // size descriptor will be added to this slot
+	return GetObjectL(*this, aEntry, EGetSingleComponentSize, EGetSingleComponentData, argNum, args);
+	}
+	
+EXPORT_C void RSoftwareComponentRegistry::GetComponentLocalizedInfoL(TComponentId aComponentId, RPointerArray<CLocalizableComponentInfo>& aCompLocalizedInfoArray) const
+    {
+    DEBUG_PRINTF2(_L("Sending a request to retrieve the localized entry of the component(%d)."), aComponentId);
+    TIpcArgs args(aComponentId);
+    TInt argNum = 1; // size descriptor will be added to this slot
+    GetObjectArrayL(*this, EGetLocalizedComponentSize, EGetLocalizedComponentData, argNum, args, aCompLocalizedInfoArray);
+    }
+
+EXPORT_C void RSoftwareComponentRegistry::GetComponentIdsL(RArray<TComponentId>& aComponentIdList, CComponentFilter* aFilter) const
+	{
+	RBuf8 buf;
+	buf.CleanupClosePushL();
+	ExternalizeObjectL(aFilter, buf);
+	
+	TIpcArgs args(&buf);
+	TInt argNum = 1;
+	GetObjectArrayL(*this, EGetComponentIdListSize, EGetComponentIdListData, argNum, args, aComponentIdList);
+	CleanupStack::PopAndDestroy(&buf);
+	}
+
+EXPORT_C TComponentId RSoftwareComponentRegistry::GetComponentIdL(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName) const
+	{
+	DEBUG_PRINTF3(_L("Sending a request to retrieve the local component Id of a global component id (%S,%S)."), &aGlobalIdName, &aUniqueSwTypeName);
+	
+	TComponentId compId;
+	TPckg<TComponentId> compIdPckg(compId);
+		
+	TIpcArgs args(&aGlobalIdName, &aUniqueSwTypeName, &compIdPckg);
+	User::LeaveIfError(CallSessionFunction(EGetLocalComponentId, args));
+	
+	return compId;
+	}
+
+EXPORT_C CComponentEntry* RSoftwareComponentRegistry::GetComponentL(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName, TLanguage aLocale) const
+	{
+	DEBUG_PRINTF3(_L("Sending a request with the global id(%S,%S) to retrieve the entry of the component."), &aGlobalIdName, &aUniqueSwTypeName);
+
+	TIpcArgs args(&aGlobalIdName, &aUniqueSwTypeName, aLocale);
+	TInt argNum = 3; // size descriptor will be added to this slot
+	return GetObjectL<CComponentEntry>(*this, EGetComponentWithGlobalIdSize, EGetComponentWithGlobalIdData, argNum, args);	
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::GetSupplierComponentsL(const CGlobalComponentId& aDependantGlobalId, RPointerArray<CVersionedComponentId>& aSupplierList) const
+	{
+	DEBUG_PRINTF2(_L("Sending a request to retrieve the supplier list of a dependant component (%S)."), &aDependantGlobalId.GlobalIdName());
+	
+	RBuf8 depGlobalId;
+	depGlobalId.CleanupClosePushL();
+	ExternalizeObjectL(&aDependantGlobalId, depGlobalId);
+	
+	TIpcArgs args(&depGlobalId);
+	TInt argNum = 1;
+	GetObjectArrayL(*this, EGetSupplierComponentsSize, EGetSupplierComponentsData, argNum, args, aSupplierList);
+	CleanupStack::PopAndDestroy(&depGlobalId);
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::GetDependantComponentsL(const CGlobalComponentId& aSupplierGlobalId, RPointerArray<CVersionedComponentId>& aDependantList) const
+	{
+	DEBUG_PRINTF2(_L("Sending a request to retrieve the dependant list of a supplier component (%S)."), &aSupplierGlobalId.GlobalIdName());
+	
+	RBuf8 supGlobalId;
+	supGlobalId.CleanupClosePushL();
+	ExternalizeObjectL(&aSupplierGlobalId, supGlobalId);
+	
+	TIpcArgs args(&supGlobalId);
+	TInt argNum = 1;
+	GetObjectArrayL(*this, EGetDependantComponentsSize, EGetDependantComponentsData, argNum, args, aDependantList);
+	CleanupStack::PopAndDestroy(&supGlobalId);
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::GetFilePropertiesL(TComponentId aComponentId, const TDesC& aFileName, RPointerArray<CPropertyEntry>& aProperties) const
+	{
+	DEBUG_PRINTF2(_L("Sending a request to retrieve the properties of the file(%S)."), &aFileName);
+	TIpcArgs args(aComponentId, &aFileName);
+	TInt argNum = 2;
+	GetObjectArrayL(*this, EGetFilePropertiesSize, EGetFilePropertiesData, argNum, args, aProperties);
+	}
+
+EXPORT_C CPropertyEntry* RSoftwareComponentRegistry::GetFilePropertyL(TComponentId aComponentId, const TDesC& aFileName, const TDesC& aPropertyName) const
+	{
+	DEBUG_PRINTF3(_L("Sending a request to retrieve the property(%S) of the file(%S)."), &aPropertyName, &aFileName);
+	TIpcArgs args(aComponentId, &aFileName, &aPropertyName);
+	TInt argNum = 3;
+	return GetObjectL<CPropertyEntry>(*this, EGetSingleFilePropertySize, EGetSingleFilePropertyData, argNum, args);
+	}
+
+EXPORT_C TUint RSoftwareComponentRegistry::GetComponentFilesCountL(TComponentId aComponentId) const
+	{
+	TUint registeredFilesNum;
+	TPckg<TUint> resPckg(registeredFilesNum);
+	TIpcArgs args(aComponentId, &resPckg);
+	User::LeaveIfError(CallSessionFunction(EGetComponentFilesCount, args));
+	return registeredFilesNum;	
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::GetComponentsL(const TDesC& aFileName, RArray<TComponentId>& aComponents) const
+	{
+	TIpcArgs args(&aFileName);
+	TInt argNum = 1;
+	GetObjectArrayL(*this, EGetFileComponentsSize, EGetFileComponentsData, argNum, args, aComponents);
+	}
+
+EXPORT_C CPropertyEntry* RSoftwareComponentRegistry::GetComponentPropertyL(TComponentId aComponentId, const TDesC& aPropertyName, TLanguage aLocale) const
+	{
+	TIpcArgs args(aComponentId, &aPropertyName, aLocale);
+	TInt argNum = 3;
+	return GetObjectL<CPropertyEntry>(*this, EGetComponentSinglePropertySize, EGetComponentSinglePropertyData, argNum, args);
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::GetComponentPropertiesL(TComponentId aComponentId, RPointerArray<CPropertyEntry>& aProperties, TLanguage aLocale) const
+	{
+	TIpcArgs args(aComponentId, aLocale);
+	TInt argNum = 2;
+	GetObjectArrayL(*this, EGetComponentPropertiesSize, EGetComponentPropertiesData, argNum, args, aProperties);
+	}
+
+EXPORT_C TBool RSoftwareComponentRegistry::IsMediaPresentL(TComponentId aComponentId) const
+	{
+	DEBUG_PRINTF2(_L("Sending a request to retrieve the media presence status of component (%d)."), aComponentId);
+	TBool result;
+	TPckg<TBool> isMediaPresent(result);
+	User::LeaveIfError(CallSessionFunction(EGetIsMediaPresent, TIpcArgs(aComponentId, &isMediaPresent)));	
+
+	DEBUG_PRINTF3(_L("Received media presence status of component (%d) - result is %d."), aComponentId, result);
+	return result;
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetScomoStateL(TComponentId aComponentId, TScomoState aScomoState) const
+	{
+	DEBUG_PRINTF3(_L("Sending a request to set the scomo state (%d) of component(%d) at install time."), aScomoState, aComponentId);
+	TIpcArgs args(aComponentId, aScomoState);
+	User::LeaveIfError(CallSessionFunction(ESetScomoState, args));
+	}
+
+EXPORT_C TUid RSoftwareComponentRegistry::GetPluginUidL(const TDesC& aMimeType) const
+	{
+	DEBUG_PRINTF2(_L("Sending a request to retrieve the list of plugins for mime types %S."), &aMimeType);
+	TUint32 uidNum(0);
+	TPckg<TUint32> uidDes(uidNum);
+	TIpcArgs args(&aMimeType, &uidDes);
+	User::LeaveIfError(CallSessionFunction(EGetPluginUidWithMimeType, args));
+	TUid pluginUid = TUid::Uid(uidNum);
+	return pluginUid;
+	}
+
+EXPORT_C TUid RSoftwareComponentRegistry::GetPluginUidL(TComponentId aComponentId) const
+	{
+	DEBUG_PRINTF2(_L("Sending a request to retrieve the list of plugins for the component(%d)."), aComponentId);
+	TUint32 uidNum(0);
+	TPckg<TUint32> uidDes(uidNum);
+	TIpcArgs args(aComponentId, &uidDes);
+	User::LeaveIfError(CallSessionFunction(EGetPluginUidWithComponentId, args));
+	TUid pluginUid = TUid::Uid(uidNum);
+	return pluginUid;
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::AddSoftwareTypeL(const CSoftwareTypeRegInfo& aSwTypeRegInfo)
+	{
+	if(!aSwTypeRegInfo.MimeTypes().Count())
+	    {
+	    DEBUG_PRINTF(_L("MIME types list cannot be empty!"));
+	    User::Leave(KErrArgument);
+	    }
+	
+	RBuf8 buf;
+	buf.CleanupClosePushL();
+	ExternalizeRefObjectL(aSwTypeRegInfo, buf);
+	      
+	TIpcArgs swTypeArgs(&buf);
+	User::LeaveIfError(CallSessionFunction(EAddSoftwareType, swTypeArgs));
+ 
+	CleanupStack::PopAndDestroy();//buf, reginfo
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::DeleteSoftwareTypeL(const TDesC& aUniqueSwTypeName, RPointerArray<HBufC>& aDeletedMimeTypes)
+	{
+	DEBUG_PRINTF2(_L("Sending a request to delete the software type (%S)."), &aUniqueSwTypeName);
+	TIpcArgs args(&aUniqueSwTypeName);
+	TInt argNum = 1;
+	GetObjectArrayL(*this, EDeleteSoftwareType, EGetDeletedMimeTypes, argNum, args, aDeletedMimeTypes);
+	// Please note that EDeleteSoftwareType IPC function returns the size of the deleted MIME types list.
+	}
+
+EXPORT_C TBool RSoftwareComponentRegistry::IsComponentOrphanedL(TComponentId aComponentId)
+	{
+	DEBUG_PRINTF2(_L("Sending a request to get whether the component (%d) is orphaned."), aComponentId);
+	TBool result;
+	TPckg<TBool> isComponentOrphaned(result);
+	User::LeaveIfError(CallSessionFunction(EGetIsComponentOrphaned, TIpcArgs(aComponentId, &isComponentOrphaned)));	
+	return result;
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::RetrieveLogEntriesL(RPointerArray<CScrLogEntry>& aLogEntries, const TDesC* aUniqueSwTypeName) const
+	{
+	DEBUG_PRINTF(_L("Sending a request to retrieve log entries."));
+	// Retrieve the RFs and RFile handles from the server
+	TInt fsh;          	 // File server handle (RFs - session)
+	TPckgBuf<TInt> fh;   // File handle (RFile - subsession)
+			
+	fsh = CallSessionFunction(EGetLogFileHandle, TIpcArgs(&fh));   // pointer to fh in slot 0
+	User::LeaveIfError(fsh);
+		
+	// Adopt the file using the returned handles
+	RFile logFile;
+	User::LeaveIfError(logFile.AdoptFromServer(fsh, fh()));
+	CleanupClosePushL(logFile);
+	
+	RFileReadStream logStream(logFile);		 
+	CleanupClosePushL(logStream);
+	(void)logStream.ReadInt32L(); // skip the major version of the log file
+	(void)logStream.ReadInt32L(); // skip the minor version of the log file
+	TInt logCount = logStream.ReadInt32L();
+	
+	CScrLogEntry *log = NULL;
+	
+	for (TInt i = 0; i < logCount; ++i)
+		{
+		log = CScrLogEntry::NewLC(logStream);
+		if(aUniqueSwTypeName && aUniqueSwTypeName->CompareF(log->SoftwareTypeName()))
+			{ // if unique sw type name is given and the log doesn't belong to that sw type, continue.
+			CleanupStack::PopAndDestroy(log);
+			continue;
+			}
+		// Otherwise, append the log into the log entries list
+		aLogEntries.AppendL(log);			
+		CleanupStack::Pop(log); // Ownership is transferred 					
+		} // for
+	
+	CleanupStack::PopAndDestroy(2, &logFile); // logFile, logStream
+	}
+
+TInt GetNextNumberFromVersionL(TLex& aVersion)
+	{
+	TInt number = KErrNotFound;
+	if(aVersion.Eos())
+		return number; // if the end of string has already been reached, return KErrNotFound.
+	
+	TChar c = aVersion.Peek(); // show the next character
+	
+	while(c != 0 && c != '.')
+		{ // Go forward until coming across a dot or reaching the end of the string
+		aVersion.Inc();
+		c = aVersion.Peek();	
+		}
+	
+	if(!aVersion.TokenLength())
+		{// unexpected format
+		DEBUG_PRINTF(_L8("Version token length is unexpectedly zero."));
+		User::Leave(KErrArgument);
+		}
+	
+	// Get the token and convert it to a decimal number
+	TInt err = TLex(aVersion.MarkedToken()).Val(number);
+	if(KErrNone != err)
+		{
+		if(KErrGeneral == err)
+			{ // Convert KErrGeneral (if nun-numeric chars exist in the token) to KErrArgument
+			err = KErrArgument;
+			}
+		User::Leave(err);
+		}
+			
+	if(c != 0)
+		{ // if it is not the end of the string
+		aVersion.Inc(); // Increment to get over the last dot
+		aVersion.Mark(); // and mark the extraction position
+		}
+	return number;
+	}
+
+EXPORT_C TInt RSoftwareComponentRegistry::CompareVersionsL(const TDesC& aVersionLeft, const TDesC& aVersionRight)
+	{
+	DEBUG_PRINTF3(_L("Comparing version left (%S) to version right (%S)."), &aVersionLeft, &aVersionRight);
+	__ASSERT_ALWAYS(aVersionLeft.Length()>0 && aVersionRight.Length()>0, User::Leave(KErrArgument));
+	
+	if(!aVersionLeft.Compare(aVersionRight))
+		return 0; // if the version strings are identical, simply return zero (means equality)
+	
+	TLex lVer(aVersionLeft);
+	TLex rVer(aVersionRight);
+	
+	TInt lNum = GetNextNumberFromVersionL(lVer);
+	TInt rNum = GetNextNumberFromVersionL(rVer);
+	
+	while(lNum != KErrNotFound && rNum != KErrNotFound)
+		{
+		TInt diff = lNum - rNum;
+		if(diff != 0)
+			return diff;
+		
+		lNum = GetNextNumberFromVersionL(lVer);
+		rNum = GetNextNumberFromVersionL(rVer);
+		}
+	
+	TInt lVal (0);
+	TInt rVal (0);
+	
+	// The following two while-loops are used to consider trailing zeros.
+	// Theoritically, 1.2.0 is equal to 1.2, however, 1.2.0.1 is greater than 1.2.
+	// In order to handle these conditions the extra parts of the version are sum up
+	// to see whether it is greater than zero.
+	while(lNum != KErrNotFound)
+		{
+		lVal += lNum;
+		lNum = GetNextNumberFromVersionL(lVer);
+		}
+	
+	while(rNum != KErrNotFound)
+		{
+		rVal += rNum;
+		rNum = GetNextNumberFromVersionL(rVer);
+		}
+	
+	return (lVal - rVal);
+	}
+
+EXPORT_C TBool RSoftwareComponentRegistry::IsComponentOnReadOnlyDriveL(TComponentId aComponentId) const
+	{
+	DEBUG_PRINTF2(_L("Sending a request to determine if the component (%d) is on read-only drive."), aComponentId);
+	
+	TBool result;
+	TPckg<TBool> isOnReadOnlyDrive(result);
+	User::LeaveIfError(CallSessionFunction(EGetIsComponentOnReadOnlyDrive, TIpcArgs(aComponentId, &isOnReadOnlyDrive)));	
+	return result;
+	}
+
+EXPORT_C TBool RSoftwareComponentRegistry::IsComponentPresentL(TComponentId aComponentId) const
+	{
+	DEBUG_PRINTF2(_L("Sending a request to determine if the component(%d) is fully present."), aComponentId);	
+	TBool result;
+	TPckg<TBool> isCompPresent(result);
+	User::LeaveIfError(CallSessionFunction(EGetIsComponentPresent, TIpcArgs(aComponentId, &isCompPresent)));	
+	return result;
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::SetIsComponentPresentL(TComponentId aComponentId, TBool aValue)
+	{
+	DEBUG_PRINTF3(_L("Sending a request to set the CompPresence attribute(%d) of the component(%d)."), aValue, aComponentId);
+	TIpcArgs args(aComponentId, aValue);
+	User::LeaveIfError(CallSessionFunction(ESetIsComponentPresent, args));
+	}
+
+EXPORT_C void RSoftwareComponentRegistry::GetComponentSupportedLocalesListL(TComponentId aComponentId,RArray<TLanguage>& aMatchingSupportedLanguages) const
+	{
+	TIpcArgs args(aComponentId);
+	TInt argNum = 1;
+	GetObjectArrayL(*this, EGetComponentSupportedLocalesListSize, EGetComponentSupportedLocalesListData, argNum, args, aMatchingSupportedLanguages);
+	}
+
+
+EXPORT_C void RSoftwareComponentRegistry::AddApplicationEntryL(const TComponentId aComponentId, const CApplicationRegistrationData& aApplicationRegistrationData) 
+    {
+    DEBUG_PRINTF2(_L("Sending a request to add an application to be associated with component (%d) from SCR"), aComponentId);
+
+    if(aApplicationRegistrationData.AppUid() == KNullUid || !((aApplicationRegistrationData.AppFile()).CompareF(KNullDesC())) ) 
+        {
+        DEBUG_PRINTF(_L8("AppUid is zero or the App filename is absent. In either of the above cases values cannot be inserted into the db"));
+        User::Leave(KErrArgument);
+        }    
+    RBuf8 buf;
+    buf.CleanupClosePushL();
+    ExternalizeObjectL(&aApplicationRegistrationData, buf);
+      
+    TIpcArgs args(aComponentId, &buf);
+    User::LeaveIfError(CallSessionFunction(EAddApplicationEntry, args));
+    CleanupStack::PopAndDestroy(&buf);
+    }
+
+EXPORT_C void RSoftwareComponentRegistry::DeleteApplicationEntriesL(TComponentId aComponentId) 
+    {
+    TIpcArgs args(aComponentId);
+    DEBUG_PRINTF2(_L("Sending a request to delete the applications associated with component (%d) from SCR"), aComponentId);
+    User::LeaveIfError(CallSessionFunction(EDeleteApplicationEntries, args));
+    }
+
+EXPORT_C void RSoftwareComponentRegistry::DeleteApplicationEntryL(TUid aApplicationUid) 
+    {
+    TIpcArgs args(aApplicationUid.iUid);
+    DEBUG_PRINTF2(_L("Sending a request to delete an application 0x%x from SCR" ), aApplicationUid.iUid);
+    User::LeaveIfError(CallSessionFunction(EDeleteApplicationEntry, args));
+    }
+
+EXPORT_C TComponentId RSoftwareComponentRegistry::GetComponentIdForAppL(TUid aAppUid) const
+    {
+    DEBUG_PRINTF2(_L("Sending a request to retrieve the component id for AppUid(%d)."), aAppUid);
+    TPckg<TUid> appUidPckg(aAppUid);
+    TComponentId compId;
+    TPckg<TComponentId> compIdPckg(compId);
+    TIpcArgs args(&appUidPckg, &compIdPckg);
+    User::LeaveIfError(CallSessionFunction(EGetComponentIdForApp, args));
+    return compId;
+    }
+
+EXPORT_C void RSoftwareComponentRegistry::GetAppUidsForComponentL(TComponentId aCompId, RArray<TUid>& aAppUids) const
+    {
+    DEBUG_PRINTF2(_L("Sending a request to retrieve the list of apps associated with component(%d)."), aCompId);
+    TIpcArgs args(aCompId);
+    TInt argNum = 1; // size descriptor will be added to this slot
+    GetObjectArrayL(*this, EGetAppUidsForComponentSize, EGetAppUidsForComponentData, argNum, args, aAppUids);    
+    }
+
+EXPORT_C void RSoftwareComponentRegistry::GetApplicationLaunchersL(RPointerArray<CLauncherExecutable>& aLaunchers) const
+	{
+    DEBUG_PRINTF(_L("Getting the list of applicaiton launchers."));
+    TIpcArgs args;
+    TInt argNum = 1;
+    GetObjectArrayL(*this, EGetApplicationLaunchersSize, EGetApplicationLaunchersData, argNum, args, aLaunchers);
+	}
+
+/*
+ * RScrInternalClient Implementation.
+ */
+EXPORT_C RScrInternalClient::RScrInternalClient()
+    :   RScsClientBase()
+    {
+    // empty
+    }
+
+EXPORT_C TInt RScrInternalClient::Connect()
+    {
+    DEBUG_PRINTF2(_L("Connecting to %S using the internal client(RScrInternalClient)."), &KSoftwareComponentRegistryName);
+    TVersion version = ScrServerVersion();
+    TUidType scrFullUid = ScrServerImageFullUid();
+    
+    return RScsClientBase::Connect(KSoftwareComponentRegistryName(), version, KScrServerImageName(), scrFullUid);
+    }
+
+EXPORT_C void RScrInternalClient::Close()
+    {
+    DEBUG_PRINTF2(_L("Closing connection to %S using the internal client(RScrInternalClient)."), &KSoftwareComponentRegistryName);
+    RScsClientBase::Close();
+    }
+
+
+EXPORT_C TUid RScrInternalClient::GenerateNewAppUidL() const
+    {
+    DEBUG_PRINTF(_L("Sending a request to generate a new Application Uid for non native applications."));
+
+    TUid newUid = TUid::Null();
+    TPckg<TUid> appUidPckg(newUid);
+    
+    TIpcArgs args(&appUidPckg);
+    User::LeaveIfError(CallSessionFunction(EGenerateNonNativeAppUid, args));
+    return newUid;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/client/scrclientsubsessions.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,663 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implementation for the subsessions of RSoftwareComponentRegistry. 
+* See class and function declarations for more detail.
+*
+*/
+
+
+#include "scr.h"
+#include "scrclient.inl"
+#include "scrcommon.h"
+#include "usiflog.h"
+#include <scs/streamingarray.h>
+
+using namespace Usif;
+
+//
+// RSoftwareComponentRegistryView
+//
+
+TInt RSoftwareComponentRegistryView::SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const
+	{
+	return CallSubsessionFunction(aFunction, aArgs);
+	}
+
+EXPORT_C RSoftwareComponentRegistryView::RSoftwareComponentRegistryView()
+/**
+	This constructor provides a single point of definition from
+	which the superclass constructor is called.
+ */
+	: RScsClientSubsessionBase()
+	{
+	// empty
+	}
+
+EXPORT_C void RSoftwareComponentRegistryView::Close()
+	{
+	RScsClientSubsessionBase::Close();
+	}
+
+EXPORT_C void RSoftwareComponentRegistryView::OpenViewL(const RSoftwareComponentRegistry& aCompReg, CComponentFilter* aFilter)
+	{
+	DEBUG_PRINTF(_L("Creating a subsession to the SCR server for the components view."));
+	
+	Close(); //Close the SubSession before Re-Opening the same.
+	TInt err = CreateSubsession(aCompReg, ESubSessCreateComponentsView, TIpcArgs());
+	if(KErrNone != err)
+		{
+		DEBUG_PRINTF2(_L("Failed to create the subsession to the SCR server for the components view (Error:%d)"), err);
+		User::Leave(err);
+		}
+	
+	RBuf8 buf;
+	buf.CleanupClosePushL();
+	ExternalizeObjectL(aFilter, buf);
+	
+	DEBUG_PRINTF(_L("Sending the request to create a component view on the server side."));
+	TIpcArgs args(&buf);
+	User::LeaveIfError(CallSubsessionFunction(EOpenComponentsView, args));
+	CleanupStack::PopAndDestroy(&buf);
+	}
+
+EXPORT_C CComponentEntry* RSoftwareComponentRegistryView::NextComponentL(TLanguage aLocale) const
+	{
+	CComponentEntry* entry = CComponentEntry::NewLC();
+	if(!NextComponentL(*entry, aLocale))
+		{
+		CleanupStack::PopAndDestroy(entry);
+		return NULL;
+		}
+	CleanupStack::Pop(entry);
+	return entry;
+	}
+
+EXPORT_C TBool RSoftwareComponentRegistryView::NextComponentL(CComponentEntry& aEntry, TLanguage aLocale) const
+	{
+	DEBUG_PRINTF(_L("Sending the request to retrieve the next component from the component view."));
+    //To avoid call to NextComponentL before calling OpenViewL 
+	CheckSubSessionHandleL();
+    
+	TIpcArgs args(aLocale);
+	TInt argNum = 1;
+	return GetObjectL(*this, aEntry, EGetNextComponentSize, EGetNextComponentData, argNum, args);
+	}
+
+EXPORT_C void RSoftwareComponentRegistryView::NextComponentSetL(TInt aMaxCount, RPointerArray<CComponentEntry>& aComponentList, TLanguage aLocale) const
+	{
+	DEBUG_PRINTF(_L("Sending the request to retrieve the next set of components from the component view."));
+    //To avoid call to NextComponentSetL before calling OpenViewL 
+	CheckSubSessionHandleL();
+    
+	TIpcArgs args(aMaxCount, aLocale);
+	TInt argNum = 2;
+	GetObjectArrayL(*this, EGetNextComponentSetSize, EGetNextComponentSetData, argNum, args, aComponentList);
+	}
+
+void RSoftwareComponentRegistryView::CheckSubSessionHandleL() const
+    {
+    if(KNullHandle == SubSessionHandle())
+        {
+        DEBUG_PRINTF(_L("An invalid handle has been passed."));
+        User::Leave(KErrBadHandle);
+        }
+    }
+
+//
+// RSoftwareComponentRegistryFilesList
+//
+
+TInt RSoftwareComponentRegistryFilesList::SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const
+	{
+	return CallSubsessionFunction(aFunction, aArgs);
+	}
+
+EXPORT_C RSoftwareComponentRegistryFilesList::RSoftwareComponentRegistryFilesList()
+/**
+	This constructor provides a single point of definition from
+	which the superclass constructor is called.
+ */
+	: RScsClientSubsessionBase()
+	{
+	// empty
+	}
+
+EXPORT_C void RSoftwareComponentRegistryFilesList::OpenListL(const RSoftwareComponentRegistry& aCompReg, TComponentId aComponentId)
+	{
+	DEBUG_PRINTF(_L("Creating a subsession to the SCR server for the file list."));
+	
+	Close(); //Close the SubSession before Re-Opening the same.
+	TInt err = CreateSubsession(aCompReg, ESubSessCreateFileList, TIpcArgs());
+	if(KErrNone != err)
+		{
+		DEBUG_PRINTF2(_L("Failed to create the subsession to the SCR server for the file list (Error:%d)."), err);
+		User::Leave(err);
+		}
+	
+	DEBUG_PRINTF(_L("Sending a request to create a file list on the server side."));
+	TIpcArgs args(aComponentId);
+	User::LeaveIfError(CallSubsessionFunction(EOpenFileList, args));
+	}
+
+EXPORT_C HBufC* RSoftwareComponentRegistryFilesList::NextFileL() const
+	{
+    //To avoid call to NextFileL before calling OpenListL 
+    CheckSubSessionHandleL();
+    
+	TIpcArgs args(TIpcArgs::ENothing);
+	TInt argNum = 0;
+	return GetObjectL<HBufC>(*this, EGetNextFileSize, EGetNextFileData, argNum, args);
+	}
+
+EXPORT_C void RSoftwareComponentRegistryFilesList::NextFileSetL(TInt aMaxCount, RPointerArray<HBufC>& aFileList) const
+	{
+	DEBUG_PRINTF(_L("Sending the request to retrieve the next set of components from the component view."));
+    //To avoid call to NextFileSetL before calling OpenListL 
+	CheckSubSessionHandleL();
+    
+	TIpcArgs args(aMaxCount);
+	TInt argNum = 1;
+	GetObjectArrayL(*this, EGetNextFileSetSize, EGetNextFileSetData, argNum, args, aFileList);
+	}
+
+EXPORT_C void RSoftwareComponentRegistryFilesList::Close()
+	{
+	RScsClientSubsessionBase::Close();
+	}
+
+void RSoftwareComponentRegistryFilesList::CheckSubSessionHandleL() const
+    {
+    if(KNullHandle == SubSessionHandle())
+        {
+        DEBUG_PRINTF(_L("An invalid handle has been passed."));
+        User::Leave(KErrBadHandle);
+        }
+    }
+
+//
+// RApplicationInfoView
+//
+
+TInt RApplicationInfoView::SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const
+    {
+    return CallSubsessionFunction(aFunction, aArgs);
+    }
+
+EXPORT_C RApplicationInfoView::RApplicationInfoView()
+/**
+    This constructor provides a single point of definition from
+    which the superclass constructor is called.
+ */
+    : RScsClientSubsessionBase()
+    {
+    }
+
+EXPORT_C void RApplicationInfoView::Close()
+    {
+    RScsClientSubsessionBase::Close();
+    }
+
+EXPORT_C void RApplicationInfoView::OpenViewL(const RSoftwareComponentRegistry& aCompReg, CAppInfoFilter* aAppInfoFilter,TLanguage aLocale)
+    {
+
+    DEBUG_PRINTF(_L("Creating a subsession to the SCR server for the AppInfo view."));
+    
+    Close(); //Close the SubSession before Re-Opening the same.
+    TInt err = CreateSubsession(aCompReg, ESubSessCreateAppInfoView, TIpcArgs());
+    if(KErrNone != err)
+        {
+        DEBUG_PRINTF2(_L("Failed to create the subsession to the SCR server for the appinfo view (Error:%d)"), err);
+        User::Leave(err);
+        }
+    
+    RBuf8 buf;
+    buf.CleanupClosePushL();
+    ExternalizeObjectL(aAppInfoFilter, buf);
+    
+    DEBUG_PRINTF(_L("Sending the request to create a component view on the server side."));
+    TIpcArgs args(&buf, aLocale);
+    User::LeaveIfError(CallSubsessionFunction(EOpenAppInfoView, args));
+    CleanupStack::PopAndDestroy(&buf);
+    }
+
+
+EXPORT_C void  RApplicationInfoView::GetNextAppInfoL(TInt aNoOfEntries, RPointerArray<TAppRegInfo>& aAppInfoList) const
+    {
+    if(0 >= aNoOfEntries)
+         {
+         DEBUG_PRINTF(_L("No of Required AppInfo entries passed should be greater than 0"));
+         User::Leave(KErrArgument);
+         }
+
+    //To avoid call to GetNextAppInfoL before calling OpenAppInfoViewL 
+    if(KNullHandle == SubSessionHandle())
+        {
+        DEBUG_PRINTF(_L("An invalid handle has been passed."));
+        User::Leave(KErrBadHandle);
+        }
+    
+    TAppRegInfo* appInfo = NULL;         
+    TBool isAppInfoPresent = EFalse;
+    for(TInt i=0; i < aNoOfEntries ; ++i)
+       {
+       appInfo = new(ELeave) TAppRegInfo();
+       DEBUG_PRINTF(_L("Sending the request to retrieve the next Application Info from the AppInfo view."));
+       TIpcArgs args(TIpcArgs::ENothing);
+       TInt argNum = 1;
+            
+       TRAPD(err,isAppInfoPresent = GetObjectL(*this, *appInfo, EGetNextAppInfoSize, EGetNextAppInfoData, argNum, args));
+       if(KErrNone != err)
+           {
+           delete appInfo;
+           User::Leave(err);
+           }
+                        
+       if(!isAppInfoPresent)
+         {
+         DEBUG_PRINTF(_L8("Reached the end of the view."));     
+         delete appInfo;
+         break;
+         }
+       else
+         {
+         DEBUG_PRINTF2(_L("The Uid of the App received from the SCR server is 0x%x "), appInfo->Uid());
+         DEBUG_PRINTF2(_L("The App filename of the App received from the SCR server is %s "), appInfo->FullName().PtrZ());
+         DEBUG_PRINTF2(_L("The Short caption of the received from the SCR server App is %s "), appInfo->ShortCaption().PtrZ());
+         DEBUG_PRINTF2(_L("The Caption of the App received from the SCR server is %s "), appInfo->Caption().PtrZ());
+         aAppInfoList.AppendL(appInfo);
+         }            
+       }
+    }
+
+//
+// RRegistrationInfoForApplication
+
+TInt RRegistrationInfoForApplication::SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const
+	{
+	return CallSubsessionFunction(aFunction, aArgs);
+	}
+
+EXPORT_C RRegistrationInfoForApplication::RRegistrationInfoForApplication()	: RScsClientSubsessionBase()
+	{
+	// empty
+	}
+
+EXPORT_C void RRegistrationInfoForApplication::OpenL(const RSoftwareComponentRegistry& aCompReg,const TUid aAppUid,TLanguage aLocale)
+	{
+	DEBUG_PRINTF(_L("Creating a subsession to the SCR server for the App list based on AppId."));
+	
+	Close(); //Close the SubSession before Re-Opening the same.
+	TInt err = CreateSubsession(aCompReg, ESubSessCreateRegInfoForApp, TIpcArgs());
+	if(KErrNone != err)
+		{
+		DEBUG_PRINTF2(_L("Failed to create the subsession to the SCR server (Error:%d)."), err);
+		User::Leave(err);
+		}
+	
+	DEBUG_PRINTF(_L("Sending a request to set the AppId on the server side."));
+	TIpcArgs args(aAppUid.iUid,aLocale);
+	User::LeaveIfError(CallSubsessionFunction(ESetAppUid, args));
+	}
+
+EXPORT_C  void RRegistrationInfoForApplication::GetAppServicesUidsL(RArray<TUid>& aServiceUids) const
+	{
+	DEBUG_PRINTF(_L("Getting the Service UID array for the subsession appUid"));
+    //To avoid call to GetAppServicesUidsL before calling OpenL 
+	CheckSubSessionHandleL();
+    
+	TIpcArgs args(TIpcArgs::ENothing);
+	TInt argNum = 1;
+	
+	GetObjectArrayL(*this, EGetServiceUidSize,EGetServiceUidList,argNum, args, aServiceUids);	
+	}
+
+EXPORT_C  TLanguage RRegistrationInfoForApplication::ApplicationLanguageL() const
+	{
+	DEBUG_PRINTF(_L("Getting the Locale of the specified App that best fits the current device language"));
+    //To avoid call to GetApplicationLanguageL before calling OpenL 
+	CheckSubSessionHandleL();
+    
+	TLanguage aLanguage = ELangNone;
+	TPckg<TLanguage> applicationLanguage(aLanguage);
+	    
+	TIpcArgs args(&applicationLanguage);
+	
+	User::LeaveIfError(CallSubsessionFunction(EGetApplicationLanguage, args));
+	return(aLanguage);
+	}
+
+EXPORT_C  TInt RRegistrationInfoForApplication::DefaultScreenNumberL() const
+	{
+	DEBUG_PRINTF(_L("Getting the Default screen number from the App reg info"));
+    //To avoid call to GetDefaultScreenNumberL before calling OpenL 
+	CheckSubSessionHandleL();
+    
+	TInt aDefaultScreenNumber = 0;
+	TPckg<TInt> uidDes(aDefaultScreenNumber);
+	
+	TIpcArgs args(&uidDes);
+	User::LeaveIfError(CallSubsessionFunction(EGetDefaultScreenNumber, args));	
+	return(aDefaultScreenNumber);
+	}
+
+EXPORT_C  TInt RRegistrationInfoForApplication::NumberOfOwnDefinedIconsL() const
+	{
+	DEBUG_PRINTF(_L("Getting the number of defined icons for the associated application and locale "));
+    //To avoid call to GetNumberOfOwnDefinedIconsL before calling OpenL 
+	CheckSubSessionHandleL();
+    
+	TInt aCount = 0;
+	TPckg<TInt> uidDes(aCount);
+	TIpcArgs args(&uidDes);
+	
+	User::LeaveIfError(CallSubsessionFunction(EGetNumberOfOwnDefinedIcons, args));
+	return(aCount);
+	}
+
+EXPORT_C void RRegistrationInfoForApplication::GetAppViewsL(RPointerArray<Usif::CAppViewData>& aAppViewInfoArray) const
+    {
+        DEBUG_PRINTF(_L("Getting the view details associated with subsession appUid"));
+        //To avoid call to GetAppViewsL before calling OpenL 
+        CheckSubSessionHandleL();
+        
+        TIpcArgs args(TIpcArgs::ENothing);
+	 	TInt argNum = 1;
+        GetObjectArrayL(*this, EGetViewSize, EGetViewData, argNum, args, aAppViewInfoArray);
+    }
+
+EXPORT_C void RRegistrationInfoForApplication::Close()
+    {
+    RScsClientSubsessionBase::Close();
+    }
+
+EXPORT_C void RRegistrationInfoForApplication::GetAppOwnedFilesL(RPointerArray<HBufC>& aAppOwnedFiles) const
+    {
+     DEBUG_PRINTF(_L("Sending the request to retrieve the list of files owned by appUid associated with subsession "));
+     //To avoid call to GetAppOwnedFilesL before calling OpenL 
+     CheckSubSessionHandleL();
+     
+     TIpcArgs args(TIpcArgs::ENothing);
+     TInt argNum = 1;
+     GetObjectArrayL(*this, EGetAppOwnedFilesSize, EGetAppOwnedFilesData, argNum, args,aAppOwnedFiles);
+    }
+
+EXPORT_C void RRegistrationInfoForApplication::GetAppCharacteristicsL(TApplicationCharacteristics &aApplicationCharacteristics) const
+    {
+    DEBUG_PRINTF(_L("Sending the request to retrieve application characteristics."));
+    //To avoid call to GetAppCharacteristicsL before calling OpenL 
+    CheckSubSessionHandleL();
+    
+    TPckg<Usif::TApplicationCharacteristics> pckg(aApplicationCharacteristics);
+    TIpcArgs args(&pckg);
+    User::LeaveIfError(CallSubsessionFunction(EGetAppCharacteristics, args));
+    }
+	
+EXPORT_C void RRegistrationInfoForApplication::GetAppIconL(HBufC*& aFullFileName) const
+    {
+    DEBUG_PRINTF(_L("Sending the request to get application icon file name ."));    
+    //To avoid call to GetAppIconL before calling OpenL 
+    CheckSubSessionHandleL();
+    
+    TFileName fileName;
+    TPckg<TFileName> filenamePckg(fileName);
+    TIpcArgs args(&filenamePckg);
+
+    User::LeaveIfError(CallSubsessionFunction(EGetAppIconForFileName, args));
+    
+    aFullFileName = fileName.AllocL();
+
+    }
+	
+EXPORT_C void RRegistrationInfoForApplication::GetAppViewIconL(TUid aViewUid,HBufC*& aFullFileName) const
+    {
+    DEBUG_PRINTF(_L("Sending the request to get application view icon file name ."));
+    //To avoid call to GetAppViewIconL before calling OpenL 
+    CheckSubSessionHandleL();
+    
+    TFileName fileName;
+    TPckg<TFileName> filenamePckg(fileName);
+    TIpcArgs args(aViewUid.iUid,&filenamePckg);
+    
+    User::LeaveIfError(CallSubsessionFunction(EGetAppViewIconFileName, args));
+ 
+    aFullFileName = fileName.AllocL();
+    }
+	
+void RRegistrationInfoForApplication::CheckSubSessionHandleL() const
+    {
+    if(KNullHandle == SubSessionHandle())
+        {
+        DEBUG_PRINTF(_L("An invalid handle has been passed."));
+        User::Leave(KErrBadHandle);
+        }
+    }
+
+//
+// RApplicationRegistrationInfo
+
+TInt RApplicationRegistrationInfo::SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const
+    {
+    return CallSubsessionFunction(aFunction, aArgs);
+    }
+
+EXPORT_C RApplicationRegistrationInfo::RApplicationRegistrationInfo() : RScsClientSubsessionBase()
+    {
+    // empty
+    }
+
+EXPORT_C void RApplicationRegistrationInfo::OpenL(const RSoftwareComponentRegistry& aCompReg)
+    {
+    DEBUG_PRINTF(_L("Creating a subsession to the SCR server for the App list."));
+    
+    Close(); //Close the SubSession before Re-Opening the same.
+    TInt err = CreateSubsession(aCompReg, ESubSessCreateAppRegInfo, TIpcArgs());
+    if(KErrNone != err)
+        {
+        DEBUG_PRINTF2(_L("Failed to create the subsession to the SCR server (Error:%d)."), err);
+        User::Leave(err);
+        }    
+    }
+
+EXPORT_C  TUid RApplicationRegistrationInfo::GetAppForDataTypeAndServiceL(const TDesC &aName,const TUid aServiceUid) const
+	{
+	DEBUG_PRINTF(_L("Get the AppUid corresponding to the mentioned Service and Type with the highest priority"));
+    //To avoid call to GetAppForDataTypeAndServiceL before calling OpenL 
+	CheckSubSessionHandleL();
+    
+	TUid appUid;
+	
+	TPckg<TUid> uidDes(appUid);	    
+	TIpcArgs args(&aName, aServiceUid.iUid,&uidDes );
+	
+	User::LeaveIfError(CallSubsessionFunction(EGetAppForDataTypeAndService, args));
+	return(appUid);
+	}
+
+EXPORT_C  TUid RApplicationRegistrationInfo::GetAppForDataTypeL(const TDesC &aName) const
+	{
+	DEBUG_PRINTF(_L("Getting the AppUid corresponding to the mentioned Type with the highest priority"));
+    //To avoid call to GetAppForDataTypeL before calling OpenL 
+	CheckSubSessionHandleL();
+    
+	TUid appUid;
+	
+    TPckg<TUid> uidDes(appUid);  
+	TIpcArgs args(&aName, &uidDes);
+	 
+	User::LeaveIfError(CallSubsessionFunction(EGetAppForDataType, args));
+	return(appUid);
+	
+	}
+
+EXPORT_C void RApplicationRegistrationInfo::GetServiceInfoL(CAppServiceInfoFilter* aAppServiceInfoFilter, RPointerArray<Usif::CServiceInfo>& aAppServiceInfoArray, TLanguage aLocale) const
+    {
+    DEBUG_PRINTF(_L("Getting the Service Info details associated with the parameters set in the filter."));
+    //To avoid call to GetServiceInfoL before calling OpenL 
+    CheckSubSessionHandleL();
+    
+    RBuf8 buf;
+    buf.CleanupClosePushL();
+    ExternalizeObjectL(aAppServiceInfoFilter, buf);
+        
+    TIpcArgs args(&buf, aLocale);
+    TInt argNum = 2;
+    GetObjectArrayL(*this, EGetAppServiceInfoSize, EGetAppServiceInfoData, argNum, args, aAppServiceInfoArray);
+    CleanupStack::PopAndDestroy(&buf);
+    }
+
+EXPORT_C TBool RApplicationRegistrationInfo::GetAppInfoL(TUid aAppUid, TAppRegInfo& aAppInfo, TLanguage aLocale)
+    {
+    DEBUG_PRINTF2(_L("Getting information details of app 0x%x."), aAppUid.iUid);
+    
+    //To avoid call to GetAppInfoL before calling OpenL 
+    CheckSubSessionHandleL();
+    
+    TPckg<TAppRegInfo> appRegInfoPckg(aAppInfo);
+   
+    TIpcArgs args(aAppUid.iUid, aLocale, &appRegInfoPckg);
+    User::LeaveIfError(CallSubsessionFunction(EGetApplicationInfo, args));
+    if(aAppInfo.Uid().iUid!= NULL)
+        {
+        return ETrue;
+        }
+    else
+        return EFalse;
+    }
+
+
+EXPORT_C void RApplicationRegistrationInfo::Close()
+	{
+	RScsClientSubsessionBase::Close();
+	}
+
+void RApplicationRegistrationInfo::CheckSubSessionHandleL() const
+    {
+    if(KNullHandle == SubSessionHandle())
+        {
+        DEBUG_PRINTF(_L("An invalid handle has been passed."));
+        User::Leave(KErrBadHandle);
+        }
+    }
+
+
+//
+// RApplicationRegistryView
+//
+
+TInt RApplicationRegistryView::SendSyncMessage(TInt aFunction, const TIpcArgs& aArgs) const
+    {
+    return CallSubsessionFunction(aFunction, aArgs);
+    }
+
+EXPORT_C RApplicationRegistryView::RApplicationRegistryView() : RScsClientSubsessionBase()
+    {
+    }
+
+EXPORT_C void RApplicationRegistryView::Close()
+    {
+    RScsClientSubsessionBase::Close();
+    }
+
+EXPORT_C void RApplicationRegistryView::OpenViewL(const RSoftwareComponentRegistry& aCompReg, TLanguage aLocale)
+    {   
+    DEBUG_PRINTF(_L("Creating a subsession to the SCR server for the Application Registration view."));
+
+    Close(); //Close the SubSession before Re-Opening the same.
+    
+    TInt err = CreateSubsession(aCompReg, ESubSessCreateAppRegistryView, TIpcArgs());
+    if(KErrNone != err)
+        {
+        DEBUG_PRINTF2(_L("Failed to create the subsession to the SCR server for the Application Registration view (Error:%d)"), err);
+        User::Leave(err);
+        }                
+    DEBUG_PRINTF(_L("Sending the request to create an applicaiton registry view on the server side."));
+    TIpcArgs args(aLocale);
+    User::LeaveIfError(CallSubsessionFunction(EOpenApplicationRegistrationInfoView, args));        
+    }
+	
+EXPORT_C void RApplicationRegistryView::OpenViewL(const RSoftwareComponentRegistry& aCompReg, const RArray<TUid>& aAppRegAppUids, TLanguage aLocale)
+    {   
+    DEBUG_PRINTF(_L("Creating a subsession to the SCR server for the Application Registration view with specified AppUids."));
+    
+    Close();  //Close the SubSession before Re-Opening the same.
+    
+    TInt err = CreateSubsession(aCompReg, ESubSessCreateAppRegistryView, TIpcArgs());
+    if(KErrNone != err)
+        {
+        DEBUG_PRINTF2(_L("Failed to create the subsession to the SCR server for the Application Registration view with specified AppUids (Error:%d)"), err);
+        User::Leave(err);
+        }                
+    DEBUG_PRINTF(_L("Sending the request to create an applicaiton registry view on the server side."));
+     
+    TInt32 size = aAppRegAppUids.Count();
+    const TInt32 maxBufSize= sizeof(TInt32)+ size*sizeof(TInt32);   // number of entries +  number of entry * size of AppUid stored as TUid
+      
+    // allocate buffer for the array
+    HBufC8* bufForAppUids = HBufC8::NewMaxLC(maxBufSize);
+    TPtr8 ptrBufForAppUids = bufForAppUids->Des();
+    RDesWriteStream instream(ptrBufForAppUids);
+    CleanupClosePushL(instream);
+    instream.WriteInt32L(size);
+    for (TInt i = 0; i < size; ++i)
+        {
+        instream.WriteInt32L(aAppRegAppUids[i].iUid);
+        }
+        
+    instream.CommitL();
+ 
+    TIpcArgs args(aLocale);
+    args.Set(1,&ptrBufForAppUids);
+    User::LeaveIfError(CallSubsessionFunction(EOpenApplicationRegistrationInfoForAppUidsView, args));  
+   
+    CleanupStack::PopAndDestroy(2,bufForAppUids); // bufForAppUid, instream 
+    }
+
+EXPORT_C void RApplicationRegistryView::GetNextApplicationRegistrationInfoL(TInt aNoOfEntries, RPointerArray<CApplicationRegistrationData>& aApplicationRegistration) const
+    {
+    if(0 >= aNoOfEntries)
+      {
+      DEBUG_PRINTF(_L("No of Required View entries passed should be greater than 0"));
+      User::Leave(KErrArgument);
+      }
+   //To avoid call to GetNextApplicationRegistrationInfoL before calling OpenApplicationRegistrationViewL 
+   if(KNullHandle == SubSessionHandle())
+     {
+     DEBUG_PRINTF(_L("An invalid handle has been passed."));
+     User::Leave(KErrBadHandle);
+     }
+    
+    CApplicationRegistrationData* applicationRegistration = NULL;
+    for(TInt i = 0 ; i < aNoOfEntries ; ++i)
+        {
+          applicationRegistration = CApplicationRegistrationData::NewLC();
+          TBool isApplicationRegistrationDataPresent = EFalse;                                    
+          DEBUG_PRINTF(_L("Sending the request to retrieve the next application details from the Application Registration view."));
+          TIpcArgs args;
+          TInt argNum = 1;
+          isApplicationRegistrationDataPresent = GetObjectL(*this, *applicationRegistration, EGetApplicationRegistrationSize, EGetApplicationRegistrationData, argNum, args);
+          if(!isApplicationRegistrationDataPresent)
+            {
+            DEBUG_PRINTF(_L8("Reached the end of the view."));  
+            CleanupStack::PopAndDestroy(applicationRegistration);
+            break;
+            }
+          else
+            {
+            DEBUG_PRINTF(_L("received the application registration data from the SCR Server "));                                       
+            aApplicationRegistration.AppendL(applicationRegistration);
+            CleanupStack::Pop(applicationRegistration);
+            }            
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/client/screntries.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1410 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implement entry classes for Software Components Registry interface.
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "screntries_internal.h"
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "screntries.h"
+#include "usiflog.h"
+#include <scs/streamingarray.h>
+#include <scs/cleanuputils.h>
+#include <usif/scr/screntries_platform.h>
+
+using namespace Usif;
+
+		
+///////////////////////
+// CGlobalComponentId
+///////////////////////
+
+CGlobalComponentId::CGlobalComponentId()
+	{
+	// empty
+	}
+
+EXPORT_C CGlobalComponentId::~CGlobalComponentId()
+	{
+	delete iGlobalIdName;
+	delete iSoftwareTypeName;
+	}
+
+EXPORT_C CGlobalComponentId* CGlobalComponentId::NewLC()
+	{
+	CGlobalComponentId *self = new(ELeave) CGlobalComponentId();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+EXPORT_C CGlobalComponentId* CGlobalComponentId::NewL(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName)
+	{
+	CGlobalComponentId *self = CGlobalComponentId::NewLC(aGlobalIdName, aUniqueSwTypeName);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CGlobalComponentId* CGlobalComponentId::NewLC(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName)
+	{
+	CGlobalComponentId *self = CGlobalComponentId::NewLC();
+	self->ConstructL(aGlobalIdName, aUniqueSwTypeName);
+	return self;
+	}
+
+EXPORT_C CGlobalComponentId* CGlobalComponentId::NewL(RReadStream& aStream)
+	{
+	CGlobalComponentId *self = CGlobalComponentId::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CGlobalComponentId::ConstructL(const TDesC& aGlobalIdName, const TDesC& aSoftwareTypeName)
+	{
+	iGlobalIdName = aGlobalIdName.AllocL();
+	iSoftwareTypeName = aSoftwareTypeName.AllocL();
+	}
+
+EXPORT_C void CGlobalComponentId::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream << *iGlobalIdName;
+	aStream << *iSoftwareTypeName;
+	}
+
+EXPORT_C void CGlobalComponentId::InternalizeL(RReadStream& aStream)
+	{
+	// Read global id name
+	DeleteObjectZ(iGlobalIdName);
+	iGlobalIdName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	// Read software type name
+	DeleteObjectZ(iSoftwareTypeName);
+	iSoftwareTypeName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	}
+
+EXPORT_C const TDesC& CGlobalComponentId::GlobalIdName() const
+	{
+	return *iGlobalIdName;
+	}
+
+EXPORT_C const TDesC& CGlobalComponentId::SoftwareTypeName() const
+	{
+	return *iSoftwareTypeName;
+	}
+
+
+////////////////////////
+// CVersionedComponentId
+////////////////////////
+
+CVersionedComponentId::CVersionedComponentId()
+	{
+	// empty
+	}
+
+EXPORT_C CVersionedComponentId::~CVersionedComponentId()
+	{
+	delete iGlobalId;
+	delete iVersionFrom;
+	delete iVersionTo;
+	}
+
+EXPORT_C CVersionedComponentId* CVersionedComponentId::NewLC()
+	{
+	CVersionedComponentId *self = new(ELeave) CVersionedComponentId();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+EXPORT_C CVersionedComponentId* CVersionedComponentId::NewL(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom, const TDesC* aVersionTo)
+	{
+	CVersionedComponentId *self = CVersionedComponentId::NewLC(aGlobalId, aVersionFrom, aVersionTo);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CVersionedComponentId* CVersionedComponentId::NewLC(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom, const TDesC* aVersionTo)
+	{
+	CVersionedComponentId *self = CVersionedComponentId::NewLC();
+	self->ConstructL(aGlobalId, aVersionFrom, aVersionTo);
+	return self;
+	}
+
+void CVersionedComponentId::ConstructL(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom, const TDesC* aVersionTo)
+	{
+	iGlobalId = CGlobalComponentId::NewL(aGlobalId.GlobalIdName(), aGlobalId.SoftwareTypeName());
+	
+	if(aVersionFrom)
+		iVersionFrom = aVersionFrom->AllocL();
+	else
+		iVersionFrom = KNullDesC().AllocL();
+	
+	if(aVersionTo)
+		iVersionTo = aVersionTo->AllocL();
+	else
+		iVersionTo = KNullDesC().AllocL();
+	}
+
+EXPORT_C CVersionedComponentId* CVersionedComponentId::NewL(RReadStream& aStream)
+	{
+	CVersionedComponentId *self = CVersionedComponentId::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C void CVersionedComponentId::InternalizeL(RReadStream& aStream)
+	{
+	// Read global id 
+	DeleteObjectZ(iGlobalId);
+	iGlobalId = CGlobalComponentId::NewL(aStream);
+	// Read version from
+	DeleteObjectZ(iVersionFrom);
+	iVersionFrom = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	// Read version to
+	DeleteObjectZ(iVersionTo);
+	iVersionTo = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	}
+
+EXPORT_C void CVersionedComponentId::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream << *iGlobalId;
+	aStream << *iVersionFrom;
+	aStream << *iVersionTo;
+	}
+
+EXPORT_C const CGlobalComponentId& CVersionedComponentId::GlobalId() const
+	{
+	return *iGlobalId;
+	}
+		
+EXPORT_C const TDesC* CVersionedComponentId::VersionFrom() const
+	{
+	if(!iVersionFrom->Length())
+		return NULL;
+	else
+		return iVersionFrom;
+	}
+		
+EXPORT_C const TDesC* CVersionedComponentId::VersionTo() const
+	{
+	if(!iVersionTo->Length())
+		return NULL;
+	else
+		return iVersionTo;
+	}
+
+
+///////////////////////
+// CComponentEntry
+///////////////////////
+
+CComponentEntry::CComponentEntry()
+	{
+	// empty
+	}
+
+EXPORT_C CComponentEntry::~CComponentEntry()
+	{
+	delete iName;
+	delete iVendor;
+	delete iSwType;
+	delete iGlobalId;
+	delete iVersion;
+	delete iInstallTime;
+	}
+
+EXPORT_C CComponentEntry* CComponentEntry::NewL()
+	{
+	CComponentEntry *self = CComponentEntry::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CComponentEntry* CComponentEntry::NewLC()
+	{
+	CComponentEntry *self = new(ELeave) CComponentEntry();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+EXPORT_C CComponentEntry* CComponentEntry::NewL(RReadStream& aStream)
+	{
+	CComponentEntry *self = CComponentEntry::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CComponentEntry* CComponentEntry::NewL(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType,
+		  const TDesC& aGlobalId, TBool aRemovable, TInt64 aSize, const TScomoState& aScomoState, const TDriveList& aInstalledDrives, 
+		  const TDesC& aVersion, const TDesC& aInstallTime, TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified)
+	{
+	CComponentEntry *self = CComponentEntry::NewLC(aId, aName, aVendor, aSwType, aGlobalId, aRemovable, aSize, aScomoState, aInstalledDrives, 
+												   aVersion, aInstallTime, aDrmProtected, aHidden, aKnownRevoked, aOriginVerified);
+	CleanupStack::Pop(self);
+	return self;
+	}
+		
+EXPORT_C CComponentEntry* CComponentEntry::NewLC(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType, 
+			const TDesC& aGlobalId, TBool aRemovable, TInt64 aSize, const TScomoState& aScomoState, const TDriveList& aInstalledDrives, 
+			const TDesC& aVersion, const TDesC& aInstallTime, TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified)		
+	{
+	CComponentEntry *self = new(ELeave) CComponentEntry();
+	CleanupStack::PushL(self);
+	self->ConstructL(aId, aName, aVendor, aSwType, aGlobalId, aRemovable, aSize, aScomoState, aInstalledDrives, aVersion, aInstallTime,
+					 aDrmProtected, aHidden, aKnownRevoked, aOriginVerified);
+	return self;
+	}
+
+void CComponentEntry::ConstructL(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType, const TDesC& aGlobalId,
+				TBool aRemovable, TInt64 aSize, const TScomoState& aScomoState, const TDriveList& aInstalledDrives, 
+				const TDesC& aVersion, const TDesC& aInstallTime, TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified)
+	{
+	iComponentId = aId;
+	iName = aName.AllocL();
+	iVendor = aVendor.AllocL();
+	iSwType = aSwType.AllocL();
+	iGlobalId = aGlobalId.AllocL();
+	iRemovable = aRemovable;
+	iSize = aSize;
+	iScomoState = aScomoState;
+	iInstalledDrives.Copy(aInstalledDrives);
+	iVersion = aVersion.AllocL();
+	iInstallTime = aInstallTime.AllocL();
+	iDrmProtected = aDrmProtected;
+	iHidden = aHidden;
+	iKnownRevoked = aKnownRevoked;
+	iOriginVerified = aOriginVerified;
+	}
+
+void WriteInt64L(RWriteStream& aStream, TInt64 aValue)
+	{
+	aStream.WriteInt32L(I64LOW(aValue));
+	aStream.WriteInt32L(I64HIGH(aValue));
+	}
+
+EXPORT_C void CComponentEntry::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream << TCardinality(iComponentId); // Write the compressed value by using cardinality class
+	aStream << *iName;
+	aStream << *iVendor;
+	aStream << *iSwType;
+	aStream << *iGlobalId;
+	aStream << TCardinality(iRemovable);
+	WriteInt64L(aStream, iSize);
+	aStream << TCardinality(iScomoState);
+	aStream << iInstalledDrives;
+	aStream << *iVersion;
+	aStream << *iInstallTime;
+	aStream << TCardinality(iDrmProtected);
+	aStream << TCardinality(iHidden);
+	aStream << TCardinality(iKnownRevoked);
+	aStream << TCardinality(iOriginVerified);
+	}
+
+TInt64 ReadInt64L(RReadStream& aStream)
+	{
+	TInt32 low32Bit = aStream.ReadInt32L(); 
+	TInt32 high32Bit = aStream.ReadInt32L();
+	return MAKE_TINT64(high32Bit, low32Bit);
+	}
+
+EXPORT_C void CComponentEntry::InternalizeL(RReadStream& aStream)
+	{
+	TCardinality c;
+	// Read component id
+	aStream >> c;
+	iComponentId = TComponentId(c);
+	// Read component name
+	DeleteObjectZ(iName);
+	iName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	// Read vendor name
+	DeleteObjectZ(iVendor);
+	iVendor = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	// Read software type
+	DeleteObjectZ(iSwType);
+	iSwType = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	// Read global id
+	DeleteObjectZ(iGlobalId);
+	iGlobalId = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	// Read if it is in removable
+	aStream >> c;
+	iRemovable = c;
+	// Read install-time component size
+	iSize = ReadInt64L(aStream);	
+	// Read scomo state
+	aStream >> c;
+	iScomoState = static_cast<TScomoState>(static_cast<TInt>(c));
+	// Read installed drives
+	aStream >> iInstalledDrives;
+	// Read version
+	DeleteObjectZ(iVersion);
+	iVersion = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	// Read install-time of the component
+	DeleteObjectZ(iInstallTime);
+	iInstallTime = HBufC::NewL(aStream, KMaxTInt); // No restriction on length	
+	// Read if it is DRM protected
+	aStream >> c;
+	iDrmProtected = c;
+	// Read if it is hidden
+	aStream >> c;
+	iHidden = c;
+	// Read if it is known revoked
+	aStream >> c;
+	iKnownRevoked = c;
+	// Read if it is origin verified
+	aStream >> c;
+	iOriginVerified = c;
+	}
+		
+EXPORT_C const TComponentId& CComponentEntry::ComponentId() const
+	{
+	return iComponentId;
+	}
+
+EXPORT_C const TDesC& CComponentEntry::Name() const
+	{
+	return *iName;
+	}
+
+EXPORT_C const TDesC& CComponentEntry::Vendor() const
+	{
+	return *iVendor;
+	}
+
+EXPORT_C const TDesC& CComponentEntry::SoftwareType() const
+	{
+	return *iSwType;
+	}
+
+EXPORT_C const TDesC& CComponentEntry::GlobalId() const
+	{
+	return *iGlobalId;
+	}
+
+EXPORT_C TBool CComponentEntry::IsRemovable() const
+	{
+	return iRemovable;
+	}
+
+EXPORT_C TInt64 CComponentEntry::ComponentSize() const
+	{
+	return iSize;
+	}
+
+EXPORT_C const TScomoState& CComponentEntry::ScomoState() const
+	{
+	return iScomoState;
+	}
+		
+EXPORT_C const TDriveList& CComponentEntry::InstalledDrives() const
+	{
+	return iInstalledDrives;
+	}
+		
+EXPORT_C const TDesC& CComponentEntry::Version() const
+	{
+	return *iVersion;
+	}
+
+EXPORT_C TTime CComponentEntry::InstallTimeL() const
+	{
+	TTime time;
+	User::LeaveIfError(time.Set(*iInstallTime));
+	return time;
+	}
+
+EXPORT_C TBool CComponentEntry::IsDrmProtected() const
+	{
+	return iDrmProtected;
+	}
+
+EXPORT_C TBool CComponentEntry::IsHidden() const
+	{
+	return iHidden;
+	}
+
+EXPORT_C TBool CComponentEntry::IsKnownRevoked() const
+	{ 
+	return iKnownRevoked;
+	}
+
+EXPORT_C TBool CComponentEntry::IsOriginVerified() const
+	{
+	return iOriginVerified;
+	}
+
+///////////////////////
+// CPropertyEntry
+///////////////////////
+
+CPropertyEntry::CPropertyEntry()
+	{
+	// empty
+	}
+
+EXPORT_C CPropertyEntry::~CPropertyEntry()
+	{
+	delete iPropertyName;
+	}
+    
+void CPropertyEntry::ConstructL(const TDesC& aPropertyName)
+	{
+	iPropertyName = aPropertyName.AllocL();
+	}
+
+EXPORT_C const TDesC& CPropertyEntry::PropertyName() const
+	{
+	return *iPropertyName;
+	}
+
+EXPORT_C CPropertyEntry* CPropertyEntry::NewL(RReadStream& aStream)
+	{
+	TCardinality c;
+	aStream >> c;
+	TPropertyType propType = TPropertyType(TInt(c));
+	CPropertyEntry *property(0);
+	switch(propType)
+		{
+	case EBinaryProperty:
+		property = CBinaryPropertyEntry::NewLC();
+		break;
+	case EIntProperty:
+		property = CIntPropertyEntry::NewLC();
+		break;
+	case ELocalizedProperty:
+		property = CLocalizablePropertyEntry::NewLC();
+		break;
+	default:
+		DEBUG_PRINTF2(_L("CPropertyEntry has got an invalid property type = %d"), propType);
+		User::Leave(KErrCorrupt);
+		}
+	property->DoInternalizeL(aStream);
+	property->iPropertyName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	CleanupStack::Pop(property);
+	return property;
+	}
+
+EXPORT_C void CPropertyEntry::ExternalizeL(RWriteStream& aStream) const
+	{
+	TPropertyType t = this->PropertyType();
+	aStream << TCardinality(t);
+	this->DoExternalizeL(aStream);
+	aStream << *iPropertyName;
+	}
+
+
+///////////////////////
+// CIntPropertyEntry
+///////////////////////
+
+CIntPropertyEntry::CIntPropertyEntry()
+	{
+	// empty
+	}
+
+CIntPropertyEntry::CIntPropertyEntry(TInt64 aPropertyIntValue)
+	:	CPropertyEntry(), iIntValue(aPropertyIntValue)
+	{
+	// empty
+	}
+
+EXPORT_C CIntPropertyEntry::~CIntPropertyEntry()
+	{
+	// empty
+	}
+
+EXPORT_C CIntPropertyEntry* CIntPropertyEntry::NewL(const TDesC& aPropertyName, TInt64 aPropertyValue)
+	{
+	CIntPropertyEntry *self = CIntPropertyEntry::NewLC(aPropertyName, aPropertyValue);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CIntPropertyEntry* CIntPropertyEntry::NewLC(const TDesC& aPropertyName, TInt64 aPropertyValue)
+	{
+	CIntPropertyEntry *self = new (ELeave) CIntPropertyEntry(aPropertyValue);
+	CleanupStack::PushL(self);
+	self->ConstructL(aPropertyName);
+	return self;
+	}
+
+void CIntPropertyEntry::ConstructL(const TDesC& aPropertyName)
+	{
+	CPropertyEntry::ConstructL(aPropertyName);
+	}
+
+CIntPropertyEntry* CIntPropertyEntry::NewLC()
+	{
+	CIntPropertyEntry *self = new(ELeave) CIntPropertyEntry();
+	CleanupStack::PushL(self);
+	return self;
+	}
+		
+void CIntPropertyEntry::DoExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(I64LOW(iIntValue));
+	aStream.WriteInt32L(I64HIGH(iIntValue));
+	}
+
+void CIntPropertyEntry::DoInternalizeL(RReadStream& aStream)
+	{
+	TInt32 low32Bit = aStream.ReadInt32L(); 
+	TInt32 high32Bit = aStream.ReadInt32L();
+	iIntValue = MAKE_TINT64(high32Bit, low32Bit);	
+	}
+
+EXPORT_C CPropertyEntry::TPropertyType CIntPropertyEntry::PropertyType() const
+	{
+	return CPropertyEntry::EIntProperty;
+	}
+
+EXPORT_C TInt CIntPropertyEntry::IntValue()
+	{
+	return static_cast<TInt>(iIntValue);
+	}
+
+EXPORT_C TInt64 CIntPropertyEntry::Int64Value()
+	{
+	return iIntValue;
+	}
+
+///////////////////////
+// CBinaryPropertyEntry
+///////////////////////
+
+CBinaryPropertyEntry::CBinaryPropertyEntry()
+	{
+	// empty
+	}
+
+EXPORT_C CBinaryPropertyEntry::~CBinaryPropertyEntry()
+	{
+	delete iValue;
+	}
+	
+EXPORT_C CBinaryPropertyEntry* CBinaryPropertyEntry::NewL(const TDesC& aPropertyName, const TDesC8& aPropertyValue)
+	{
+	CBinaryPropertyEntry *self = CBinaryPropertyEntry::NewLC(aPropertyName, aPropertyValue);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CBinaryPropertyEntry* CBinaryPropertyEntry::NewLC(const TDesC& aPropertyName, const TDesC8& aPropertyValue)
+	{
+	CBinaryPropertyEntry *self = new(ELeave) CBinaryPropertyEntry();
+	CleanupStack::PushL(self);
+	self->ConstructL(aPropertyName, aPropertyValue);
+	return self;
+	}
+
+void CBinaryPropertyEntry::ConstructL(const TDesC& aPropertyName, const TDesC8& aPropertyValue)
+	{
+	CPropertyEntry::ConstructL(aPropertyName);
+	iValue = aPropertyValue.AllocL();
+	}
+
+CBinaryPropertyEntry* CBinaryPropertyEntry::NewLC()
+	{
+	CBinaryPropertyEntry *self = new(ELeave) CBinaryPropertyEntry();
+	CleanupStack::PushL(self);
+	return self;
+	}
+			
+void CBinaryPropertyEntry::DoExternalizeL(RWriteStream &aStream) const	
+	{
+	aStream << *iValue;
+	}
+
+void CBinaryPropertyEntry::DoInternalizeL(RReadStream& aStream)
+	{
+	DeleteObjectZ(iValue);
+	iValue = HBufC8::NewL(aStream, KMaxTInt); // No restriction on length
+	}
+
+EXPORT_C CBinaryPropertyEntry::TPropertyType CBinaryPropertyEntry::PropertyType() const
+	{
+	return CBinaryPropertyEntry::EBinaryProperty;
+	}
+			
+EXPORT_C const TDesC8& CBinaryPropertyEntry::BinaryValue()
+	{
+	return *iValue;
+	}	
+
+///////////////////////
+// CLocalizablePropertyEntry
+///////////////////////
+
+CLocalizablePropertyEntry::CLocalizablePropertyEntry()
+	{
+	// empty
+	}
+
+CLocalizablePropertyEntry::CLocalizablePropertyEntry(TLanguage aLocale) : iLocale(aLocale)
+	{
+	// empty
+	}
+
+EXPORT_C CLocalizablePropertyEntry::~CLocalizablePropertyEntry()
+	{
+	delete iStrValue;
+	}
+
+EXPORT_C CLocalizablePropertyEntry* CLocalizablePropertyEntry::NewL(const TDesC& aPropertyName, const TDesC& aPropertyValue, TLanguage aLocale)
+	{
+	CLocalizablePropertyEntry *self = CLocalizablePropertyEntry::NewLC(aPropertyName, aPropertyValue, aLocale);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CLocalizablePropertyEntry* CLocalizablePropertyEntry::NewLC( const TDesC& aPropertyName, const TDesC& aPropertyValue, TLanguage aLocale)
+	{
+	CLocalizablePropertyEntry *self = new(ELeave) CLocalizablePropertyEntry(aLocale);
+	CleanupStack::PushL(self);
+	self->ConstructL(aPropertyName, aPropertyValue);
+	return self;
+	}
+
+CLocalizablePropertyEntry* CLocalizablePropertyEntry::NewLC()
+	{
+	CLocalizablePropertyEntry *self = new(ELeave) CLocalizablePropertyEntry();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+void CLocalizablePropertyEntry::ConstructL(const TDesC& aPropertyName, const TDesC& aPropertyValue)
+	{
+	CPropertyEntry::ConstructL(aPropertyName);
+	iStrValue = aPropertyValue.AllocL();
+	}
+
+void CLocalizablePropertyEntry::DoExternalizeL(RWriteStream &aStream) const
+	{
+	aStream << *iStrValue;
+	aStream.WriteInt32L(iLocale);
+	}
+
+void CLocalizablePropertyEntry::DoInternalizeL(RReadStream& aStream)
+	{
+	iStrValue = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	iLocale = TLanguage(aStream.ReadInt32L());
+	}
+
+EXPORT_C CPropertyEntry::TPropertyType CLocalizablePropertyEntry::PropertyType() const
+	{
+	return CPropertyEntry::ELocalizedProperty;
+	}
+
+EXPORT_C TLanguage CLocalizablePropertyEntry::LocaleL() const
+	{
+	return iLocale;
+	}
+
+EXPORT_C const TDesC& CLocalizablePropertyEntry::StrValue() const
+	{
+	return *iStrValue;
+	}
+
+///////////////////////
+// CLocalizableCommonData
+///////////////////////
+
+CLocalizableCommonData::CLocalizableCommonData()
+	{
+	// empty
+	}
+
+CLocalizableCommonData::CLocalizableCommonData(TLanguage aLocale)
+	:	iLocale(aLocale)
+	{
+	// empty
+	}
+
+CLocalizableCommonData::~CLocalizableCommonData()
+	{
+	// empty
+	}
+
+EXPORT_C TLanguage CLocalizableCommonData::Locale() const
+	{
+	return iLocale;
+	}
+
+void CLocalizableCommonData::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(Locale());
+	}
+
+void CLocalizableCommonData::InternalizeL(RReadStream& aStream)
+	{
+	TLanguage locale = static_cast<TLanguage>(aStream.ReadInt32L());
+	iLocale = locale;
+	}
+
+/////////////////////////////
+// CLocalizableComponentInfo
+/////////////////////////////
+
+CLocalizableComponentInfo::CLocalizableComponentInfo()
+	{
+	// empty
+	}
+
+CLocalizableComponentInfo::CLocalizableComponentInfo(TLanguage aLocale)
+	:	CLocalizableCommonData(aLocale)
+	{
+	// empty
+	}
+
+CLocalizableComponentInfo::~CLocalizableComponentInfo()
+	{
+	delete iName;
+	delete iVendor;
+	}
+
+EXPORT_C CLocalizableComponentInfo* CLocalizableComponentInfo::NewL(const TDesC& aName, const TDesC& aVendor, TLanguage aLocale)
+	{
+	CLocalizableComponentInfo *self = CLocalizableComponentInfo::NewLC(aName, aVendor, aLocale);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CLocalizableComponentInfo* CLocalizableComponentInfo::NewLC(const TDesC& aName, const TDesC& aVendor, TLanguage aLocale)
+	{
+	CLocalizableComponentInfo *self = new(ELeave) CLocalizableComponentInfo(aLocale);
+	CleanupStack::PushL(self);
+	self->ConstructL(aName, aVendor);
+	return self;
+	}
+
+EXPORT_C CLocalizableComponentInfo* CLocalizableComponentInfo::NewL(RReadStream& aStream)
+	{
+	CLocalizableComponentInfo* self = new(ELeave) CLocalizableComponentInfo();
+	CleanupStack::PushL(self);
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C void CLocalizableComponentInfo::ConstructL(const TDesC& aName, const TDesC& aVendor)
+	{
+	iName = aName.AllocL();
+	iVendor = aVendor.AllocL();
+	}
+
+
+EXPORT_C void CLocalizableComponentInfo::ExternalizeL(RWriteStream& aStream) const
+	{
+	CLocalizableCommonData::ExternalizeL(aStream);
+	aStream << *iName;
+	aStream << *iVendor;
+	}
+		
+EXPORT_C void CLocalizableComponentInfo::InternalizeL(RReadStream& aStream)
+	{
+	CLocalizableCommonData::InternalizeL(aStream);
+	
+	delete iName;
+	iName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	
+	delete iVendor;
+	iVendor = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	}
+
+EXPORT_C const TDesC& CLocalizableComponentInfo::NameL() const
+	{
+	return *iName;
+	}
+
+EXPORT_C const TDesC& CLocalizableComponentInfo::VendorL() const
+	{
+	return *iVendor;
+	}
+			
+/////////////////////////////
+// TCustomAccessInfo
+/////////////////////////////
+
+EXPORT_C TCustomAccessInfo::TCustomAccessInfo(TSecureId aSecureId, TAccessMode aAccessMode)
+    {
+    iSecureId = aSecureId;
+    iAccessMode = aAccessMode;
+    }
+
+EXPORT_C TSecureId TCustomAccessInfo::SecureId() const
+    {
+    return iSecureId;
+    }
+
+EXPORT_C TAccessMode TCustomAccessInfo::AccessMode() const
+    {
+    return iAccessMode;
+    }
+
+/////////////////////////////
+// CSoftwareTypeRegInfo
+/////////////////////////////
+
+EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(const TDesC& aUniqueSoftwareTypeName)
+	{
+	CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo();
+	CleanupStack::PushL(self);
+	self->iUniqueSoftwareTypeName = HBufC::NewL(aUniqueSoftwareTypeName.Length());
+	self->iUniqueSoftwareTypeName->Des().Copy(aUniqueSoftwareTypeName);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(RReadStream& aStream)
+	{
+	CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo();
+	CleanupStack::PushL(self);
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CSoftwareTypeRegInfo::CSoftwareTypeRegInfo()
+	{
+	}
+
+EXPORT_C CSoftwareTypeRegInfo::~CSoftwareTypeRegInfo()
+	{
+	delete iUniqueSoftwareTypeName;
+	iCustomAccessList.Close();
+	iMimeTypes.Close();
+	iLocalizedSoftwareTypeNames.Close();
+	delete iLauncherExecutable;
+	}
+
+EXPORT_C void CSoftwareTypeRegInfo::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream << *iUniqueSoftwareTypeName;
+	aStream << iSifPluginUid.iUid;
+	
+	//Sids
+	const TInt numSids = iCustomAccessList.Count();
+	aStream.WriteInt32L(numSids);
+	for (TInt i=0; i< numSids; ++i)
+	    {
+	    TUid sid = iCustomAccessList[i].SecureId();
+	    aStream << sid.iUid;
+	    aStream.WriteInt32L(iCustomAccessList[i].AccessMode());
+	    }
+	
+	// MIME types
+	const TInt numMimeTypes = iMimeTypes.Count();
+	aStream.WriteInt32L(numMimeTypes);
+	for (TInt i=0; i<numMimeTypes; ++i)
+		{
+		aStream << *iMimeTypes[i];
+		}
+	 
+	// Localized names
+	const TInt numLocalizedNames = iLocalizedSoftwareTypeNames.Count();
+	aStream.WriteInt32L(numLocalizedNames);
+	for (TInt i=0; i<numLocalizedNames; ++i)
+		{
+		aStream << *iLocalizedSoftwareTypeNames[i];
+		}
+
+	// Launcher executable
+	aStream << *iLauncherExecutable;
+	}
+
+void CSoftwareTypeRegInfo::InternalizeL(RReadStream& aStream)
+	{
+	ASSERT(iUniqueSoftwareTypeName == NULL);
+	
+	iUniqueSoftwareTypeName = HBufC::NewL(aStream, EUniqueSwTypeNameMaxLength);
+	
+	iSifPluginUid = TUid::Uid(aStream.ReadInt32L());
+	
+	// Sids
+	const TInt numSids = aStream.ReadInt32L();
+	for (TInt i=0; i<numSids; ++i)
+	    {
+	    TSecureId secId(TUid::Uid(aStream.ReadInt32L()));
+	    TCustomAccessInfo customAccessInfo(secId, static_cast<TAccessMode>(aStream.ReadInt32L()));
+	    iCustomAccessList.AppendL(customAccessInfo);
+	    }
+	        
+	// MIME types
+	const TInt numMimeTypes = aStream.ReadInt32L();
+	for (TInt i=0; i<numMimeTypes; ++i)
+		{
+		HBufC* mimeType = HBufC::NewLC(aStream, EUniqueSwTypeNameMaxLength);
+		iMimeTypes.AppendL(mimeType);
+		CleanupStack::Pop(mimeType);
+		}
+	
+	// Localized names
+	const TInt numLocalizedNames = aStream.ReadInt32L();
+	for (TInt i=0; i<numLocalizedNames; ++i)
+		{
+		CLocalizedSoftwareTypeName* name = CLocalizedSoftwareTypeName::NewL(aStream);
+		CleanupStack::PushL(name);
+		iLocalizedSoftwareTypeNames.AppendL(name);
+		CleanupStack::Pop(name);
+		}
+
+	iLauncherExecutable = HBufC::NewL(aStream, ELauncherExecutableMaxLength);
+	}
+
+EXPORT_C void CSoftwareTypeRegInfo::SetMimeTypeL(const TDesC& aMimeType)
+	{
+	HBufC* mimeType = HBufC::NewLC(aMimeType.Length());
+	mimeType->Des().Copy(aMimeType);
+	iMimeTypes.AppendL(mimeType);
+	CleanupStack::Pop(mimeType);
+	}
+
+EXPORT_C void CSoftwareTypeRegInfo::SetLocalizedSoftwareTypeNameL(TLanguage aLanguage, const TDesC& aName)
+	{
+	CLocalizedSoftwareTypeName* name = CLocalizedSoftwareTypeName::NewLC(aName, aLanguage);
+	iLocalizedSoftwareTypeNames.AppendL(name);
+	CleanupStack::Pop(name);
+	}
+
+EXPORT_C void CSoftwareTypeRegInfo::SetLauncherExecutableL(const TDesC& aLauncherExecutable)
+    {
+    HBufC* launcherExecutable = HBufC::NewLC(aLauncherExecutable.Length());
+    launcherExecutable->Des().Copy(aLauncherExecutable);
+    iLauncherExecutable = launcherExecutable;
+    CleanupStack::Pop(launcherExecutable);
+    }
+
+/////////////////////////////
+// CComponentFilter
+/////////////////////////////
+
+CComponentFilter::CComponentFilter()
+	{
+	// empty 
+	}
+
+CComponentFilter::~CComponentFilter()
+	{
+	delete iName;
+	delete iVendor;
+	delete iSwType;
+	delete iFile;
+	iPropertyList.ResetAndDestroy();
+	iPropertyOperatorList.Reset();
+	}
+
+EXPORT_C CComponentFilter* CComponentFilter::NewL()
+	{
+	CComponentFilter *self = CComponentFilter::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+		
+EXPORT_C CComponentFilter* CComponentFilter::NewLC()
+	{
+	CComponentFilter *self = new(ELeave) CComponentFilter();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+		
+EXPORT_C CComponentFilter* CComponentFilter::NewL(RReadStream& aStream)
+	{
+	CComponentFilter *self = CComponentFilter::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CComponentFilter::ConstructL()
+	{
+	iName   = KNullDesC().AllocL();
+	iVendor = KNullDesC().AllocL();
+	iSwType = KNullDesC().AllocL();
+	iFile   = KNullDesC().AllocL();
+	}
+
+EXPORT_C void CComponentFilter::SetNameL(const TDesC& aName)
+	{
+	DeleteObjectZ(iName);
+	iName = aName.AllocL();
+	iSetFlag |= EName;
+	}
+		
+EXPORT_C void CComponentFilter::SetVendorL(const TDesC& aVendor)
+	{
+	DeleteObjectZ(iVendor);
+	iVendor = aVendor.AllocL();
+	iSetFlag |= EVendor;
+	}
+
+EXPORT_C void CComponentFilter::SetSoftwareTypeL(const TDesC& aSwType)
+	{
+	DeleteObjectZ(iSwType);
+	iSwType = aSwType.AllocL();
+	iSetFlag |= ESoftwareType;
+	}
+
+EXPORT_C void CComponentFilter::SetRemovable(TBool aValue)
+	{
+	iRemovable = aValue;
+	iSetFlag |= ERemovable;
+	}
+
+EXPORT_C void CComponentFilter::SetDrmProtected(TBool aValue)
+	{
+	iDrmProtected = aValue;
+	iSetFlag |= EDrmProtected;
+	}
+
+EXPORT_C void CComponentFilter::SetHidden(TBool aValue)
+	{
+	iHidden = aValue;
+	iSetFlag |= EHidden;
+	}
+
+EXPORT_C void CComponentFilter::SetKnownRevoked(TBool aValue)
+	{
+	iKnownRevoked = aValue;
+	iSetFlag |= EKnownRevoked;
+	}
+
+EXPORT_C void CComponentFilter::SetOriginVerified(TBool aValue)
+	{
+	iOriginVerified = aValue;
+	iSetFlag |= EOriginVerified;
+	}
+
+EXPORT_C void CComponentFilter::SetScomoStateL(TScomoState aScomoState)
+	{
+	iScomoState = aScomoState;
+	iSetFlag |= EScomoState;
+	}
+		
+EXPORT_C void CComponentFilter::SetInstalledDrivesL(const TDriveList& aDrives)
+	{
+	iInstalledDrives.Copy(aDrives);
+	iSetFlag |= EInstalledDrive;
+	}
+					
+EXPORT_C void CComponentFilter::AddPropertyL(const TDesC& aName, const TDesC& aValue, TLanguage aLocale,
+        TDbOperator aNameOperator, TDbOperator aValueOperator)
+	{
+	CPropertyEntry *prop = CLocalizablePropertyEntry::NewLC(aName, aValue, aLocale);
+	iPropertyList.AppendL(prop);
+	CleanupStack::Pop(prop);
+	iPropertyOperatorList.AppendL(TPropertyOperator(aNameOperator, aValueOperator));
+	iSetFlag |= EProperty;
+	}
+
+EXPORT_C void CComponentFilter::AddPropertyL(const TDesC& aName, TInt64 aValue, TDbOperator aNameOperator, 
+        TDbOperator aValueOperator)
+	{
+	CPropertyEntry *prop = CIntPropertyEntry::NewLC(aName, aValue);
+	iPropertyList.AppendL(prop);
+	CleanupStack::Pop(prop);
+	iPropertyOperatorList.AppendL(TPropertyOperator(aNameOperator, aValueOperator));
+	iSetFlag |= EProperty;
+	}
+
+EXPORT_C void CComponentFilter::AddPropertyL(const TDesC& aName, const TDesC8& aValue, TDbOperator aNameOperator, 
+        TDbOperator aValueOperator)
+	{
+	CPropertyEntry *prop = CBinaryPropertyEntry::NewLC(aName, aValue);
+	iPropertyList.AppendL(prop);
+	CleanupStack::Pop(prop);
+	iPropertyOperatorList.AppendL(TPropertyOperator(aNameOperator, aValueOperator));
+	iSetFlag |= EProperty;	
+	}
+
+EXPORT_C void CComponentFilter::SetFileL(const TDesC& aFile)
+	{
+	DeleteObjectZ(iFile);
+	iFile = aFile.AllocL();
+	iSetFlag |= EFile;
+	}
+		
+EXPORT_C void CComponentFilter::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteUint16L(iSetFlag);
+	aStream << *iName;
+	aStream << *iVendor;
+	aStream << *iSwType;
+	aStream << TCardinality(iScomoState);
+	aStream << iInstalledDrives;
+	aStream << TCardinality(iRemovable);
+	ExternalizePointersArrayL(iPropertyList, aStream);
+	ExternalizeFixedLengthArrayL(iPropertyOperatorList, aStream);
+	aStream << *iFile;
+	aStream << TCardinality(iDrmProtected);
+	aStream << TCardinality(iHidden);
+	aStream << TCardinality(iKnownRevoked);
+	aStream << TCardinality(iOriginVerified);
+	}
+		
+void CComponentFilter::InternalizeL(RReadStream& aStream)
+	{
+	iSetFlag = aStream.ReadUint16L();
+	DeleteObjectZ(iName);
+	iName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	DeleteObjectZ(iVendor);
+	iVendor = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	DeleteObjectZ(iSwType);
+	iSwType = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	TCardinality c;
+	aStream >> c;
+	iScomoState = static_cast<TScomoState>(static_cast<TInt>(c));
+	aStream >> iInstalledDrives;
+	aStream >> c;
+	iRemovable = c;
+	iPropertyList.Reset();
+	InternalizePointersArrayL(iPropertyList, aStream);
+	iPropertyOperatorList.Reset();
+	InternalizeFixedLengthArrayL(iPropertyOperatorList, aStream);
+	DeleteObjectZ(iFile);
+	iFile = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	// Read if it is DRM protected
+	aStream >> c;
+	iDrmProtected = c;
+	// Read if it is hidden
+	aStream >> c;
+	iHidden = c;
+	// Read if it is known revoked
+	aStream >> c;
+	iKnownRevoked = c;
+	// Read if it is origin verified
+	aStream >> c;
+	iOriginVerified = c;
+	}
+
+/////////////////////////////
+// CLocalizedSoftwareTypeName
+/////////////////////////////
+
+CLocalizedSoftwareTypeName::CLocalizedSoftwareTypeName()
+	{
+	// empty
+	}
+
+CLocalizedSoftwareTypeName::CLocalizedSoftwareTypeName(TLanguage aLocale)
+	:	CLocalizableCommonData(aLocale)
+	{
+	// empty
+	}
+
+CLocalizedSoftwareTypeName::~CLocalizedSoftwareTypeName()
+	{
+	delete iName;
+	}
+
+EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewL(const TDesC& aName, TLanguage aLocale)
+	{
+	CLocalizedSoftwareTypeName *self = CLocalizedSoftwareTypeName::NewLC(aName, aLocale);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewLC(const TDesC& aName, TLanguage aLocale)
+	{
+	CLocalizedSoftwareTypeName *self = new(ELeave) CLocalizedSoftwareTypeName(aLocale);
+	CleanupStack::PushL(self);
+	self->ConstructL(aName);
+	return self;
+	}
+
+EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewL(RReadStream& aStream)
+	{
+	CLocalizedSoftwareTypeName* self = new(ELeave) CLocalizedSoftwareTypeName();
+	CleanupStack::PushL(self);
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C void CLocalizedSoftwareTypeName::ConstructL(const TDesC& aName)
+	{
+	iName = aName.AllocL();
+	}
+
+
+EXPORT_C void CLocalizedSoftwareTypeName::ExternalizeL(RWriteStream& aStream) const
+	{
+	CLocalizableCommonData::ExternalizeL(aStream);
+	aStream << *iName;
+	}
+		
+EXPORT_C void CLocalizedSoftwareTypeName::InternalizeL(RReadStream& aStream)
+	{
+	CLocalizableCommonData::InternalizeL(aStream);
+	
+	delete iName;
+	iName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	}
+
+EXPORT_C const TDesC& CLocalizedSoftwareTypeName::NameL() const
+	{
+	return *iName;
+	}
+
+
+////////////////
+// CScrLogEntry
+////////////////
+
+CScrLogEntry::CScrLogEntry()
+	{
+	//empty
+	}
+
+CScrLogEntry::~CScrLogEntry()
+	{
+	delete iComponentName;
+	delete iSwTypeName;
+	delete iVersion;   
+	delete iGlobalId;
+	}
+
+
+EXPORT_C CScrLogEntry* CScrLogEntry::NewL(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType)
+	{
+	CScrLogEntry *self = CScrLogEntry::NewLC(aComponentName, aUniqueSwTypeName, aGlobalId, aVersion, aCompOpType);
+	CleanupStack::Pop(self);
+	return self;
+	}
+		
+EXPORT_C CScrLogEntry* CScrLogEntry::NewLC(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType)
+	{
+	CScrLogEntry *self = new(ELeave) CScrLogEntry();
+	CleanupStack::PushL(self);
+	self->ConstructL(aComponentName, aUniqueSwTypeName, aGlobalId, aVersion, aCompOpType);
+	return self;
+	}
+
+EXPORT_C CScrLogEntry* CScrLogEntry::NewLC(RReadStream& aStream)
+	{
+	CScrLogEntry *self = new(ELeave) CScrLogEntry();
+	CleanupStack::PushL(self);
+	self->InternalizeL(aStream);
+	return self;
+	}
+		
+void CScrLogEntry::ConstructL(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType)
+	{
+	iComponentName = aComponentName.AllocL();
+	iSwTypeName = aUniqueSwTypeName.AllocL();
+	iGlobalId = aGlobalId.AllocL();
+	iVersion = aVersion.AllocL();
+	iOpType = aCompOpType;
+	iRecordTime.HomeTime();
+	}
+		
+	
+EXPORT_C void CScrLogEntry::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream << *iComponentName;
+	aStream << *iSwTypeName;
+	aStream << *iGlobalId; 
+	aStream << *iVersion; 
+	aStream.WriteInt32L(static_cast<TInt>(iOpType)); 
+	WriteInt64L(aStream, iRecordTime.Int64());
+	}
+		 
+	
+EXPORT_C void CScrLogEntry::InternalizeL(RReadStream& aStream) 
+	{
+	DeleteObjectZ(iComponentName);
+	iComponentName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	DeleteObjectZ(iSwTypeName);
+	iSwTypeName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	DeleteObjectZ(iGlobalId);
+	iGlobalId = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	DeleteObjectZ(iVersion);
+	iVersion = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
+	iOpType = static_cast<TScrComponentOperationType>(aStream.ReadInt32L());
+	iRecordTime = TTime(ReadInt64L(aStream));
+	}
+	    
+	  
+EXPORT_C const TDesC& CScrLogEntry::ComponentName() const
+	{
+	return *iComponentName;
+	}
+
+EXPORT_C const TDesC& CScrLogEntry::SoftwareTypeName() const
+	{
+	return *iSwTypeName;
+	}
+
+EXPORT_C const TDesC& CScrLogEntry::GlobalId() const
+	{
+	return *iGlobalId;
+	}
+	
+EXPORT_C const TDesC& CScrLogEntry::ComponentVersion() const
+	{
+	return *iVersion;
+	}
+	
+EXPORT_C const TTime CScrLogEntry::OperationTime() const
+	{
+	return iRecordTime;
+	}
+	
+EXPORT_C TScrComponentOperationType CScrLogEntry::OperationType() const
+	{
+	return iOpType;
+	}
+
+EXPORT_C TComponentId CScrLogEntry::ComponentId() const
+	{
+	return iComponentId;
+	}
+
+EXPORT_C CComponentFilter::TPropertyOperator::TPropertyOperator(TDbOperator aNameOperator, TDbOperator aValueOperator):
+        iNameOperator(aNameOperator),
+        iValueOperator(aValueOperator)
+    {
+    }
+
+void CComponentFilter::TPropertyOperator::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L(iNameOperator);
+    aStream.WriteInt32L(iValueOperator);
+    }
+
+EXPORT_C void CComponentFilter::TPropertyOperator::InternalizeL(RReadStream& aStream)
+    {
+    iNameOperator = static_cast<TDbOperator>(aStream.ReadInt32L());
+    iValueOperator = static_cast<TDbOperator>(aStream.ReadInt32L());
+    }
+
+EXPORT_C CComponentFilter::TDbOperator CComponentFilter::TPropertyOperator::NameOperator() const
+    {
+    return iNameOperator;
+    }
+
+EXPORT_C CComponentFilter::TDbOperator CComponentFilter::TPropertyOperator::ValueOperator() const
+    {
+    return iValueOperator;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/database/scrdatabase.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,521 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the SCR Data Layer API which performs all interaction with the underlying database.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+ 
+#include "scrdatabase.h"
+#include "usiflog.h"
+// Userinclude headers are used instead of the standard ones as SCR uses a custom version of SQLite
+#include "sqlite3.h"
+#include "SqliteSecure.h"
+#include <stdio.h> 
+
+using namespace Usif;
+ 
+namespace Usif
+	{
+	 class CDatabaseImplementation : public CBase
+	/**
+	 	The database implementation class encapsulates the implementation of CDatabase from its interface.
+	 */
+		{
+		friend class CDatabase;
+	public:
+		static CDatabaseImplementation* NewL(RFile& aDatabaseFile, RFile& aJournalFile);
+		~CDatabaseImplementation();	
+		/**
+			Maps the given SQL database error into a system wide symbian specific error code.
+			@leave If the given error code does not map to KErrNone, leaves with a system wide
+			       symbian error code.
+		 */
+		void CheckSqlErrCodeL(TInt aErr);
+		
+		/**
+			@return The extended error codes that provide more detailed information about errors.
+		 */
+		TInt ErrorCode();
+				
+	private:
+		/**
+			@return The English-language text that describes the most recent error.
+		 */
+		TPtrC8 ErrorMessage();
+		
+	private:
+		CDatabaseImplementation();
+		void ConstructorL(RFile& aDatabaseFile, RFile& aJournalFile);
+		
+	private:
+		sqlite3* iDbHandle;		 ///< The database handle, owned by CDatabaseImplementation.		
+		};
+		
+	 
+	class CStatementImplementation : public CBase
+	/**
+		This class encapsulates the implementation details of SQL statement object
+		which contains the result sets of queries.
+	 */
+		{
+	public:
+		static CStatementImplementation* NewLC(sqlite3_stmt* aStmtHandle);
+		~CStatementImplementation();
+		inline sqlite3_stmt* Handle() const;
+		
+	private:
+		CStatementImplementation(sqlite3_stmt* aStmtHandle);
+		
+	private:
+		sqlite3_stmt* iStmtHandle; //SQL statement handle
+		};	
+	
+	}// End of namespace Usif
+
+//
+// CDatabaseImplementation
+// 
+
+CDatabaseImplementation::CDatabaseImplementation()
+// Constructor
+	{
+	// empty
+	}
+
+CDatabaseImplementation::~CDatabaseImplementation()
+// Destructor
+	{
+	// Close the db handle
+	TInt err = sqlite3_close(iDbHandle);
+	if(err != SQLITE_OK)
+		{
+		TPtrC8 ptrErrMsg(ErrorMessage());
+		DEBUG_PRINTF3(_L8("Failed to close the database handle. Error code:%d, Error message:%S"), ErrorCode(), &ptrErrMsg);
+		}
+	}
+
+CDatabaseImplementation* CDatabaseImplementation::NewL(RFile& aDatabaseFile, RFile& aJournalFile)
+	{
+	CDatabaseImplementation* self = new(ELeave) CDatabaseImplementation();
+	CleanupStack::PushL(self);
+	self->ConstructorL(aDatabaseFile, aJournalFile);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CDatabaseImplementation::ConstructorL(RFile& aDatabaseFile, RFile& aJournalFile)
+	{
+	TSqliteSecure sqliteSecure; // Utility class to open sqlite database via file handles. Implemented by Symbian.
+	TInt err = sqliteSecure.Open(aDatabaseFile, aJournalFile, &iDbHandle);
+	
+	// Check the returned error code
+	CheckSqlErrCodeL(err);
+	
+	// If comes here, means the database file has been opened successfully
+	// Now, enable the extended result codes feature of SQLite. In SQLite, this feature is 
+	// disabled by default for historical compatibility.
+	err = sqlite3_extended_result_codes(iDbHandle, 0);
+	if(SQLITE_OK != err)
+		{
+		TPtrC8 ptrErrMsg(ErrorMessage());
+		DEBUG_PRINTF3(_L8("Failed to activate the extended error mechanism. Error code:%d, Error message:%S"), ErrorCode(), &ptrErrMsg);
+		}
+	}
+
+TPtrC8 CDatabaseImplementation::ErrorMessage()
+	{
+	const char *errMsg = sqlite3_errmsg(iDbHandle);
+	TPtrC8 errPtr((TUint8*)errMsg);
+	return errPtr;
+	}
+
+TInt CDatabaseImplementation::ErrorCode()
+	{
+	return sqlite3_errcode(iDbHandle);
+	}
+
+
+void CDatabaseImplementation::CheckSqlErrCodeL(TInt aErr)
+	{
+	TInt symbianErrCode(0);
+	
+	switch(aErr)
+		{
+	case SQLITE_OK:
+	case SQLITE_DONE:		// sqlite3_step() has finished executing
+	case SQLITE_ROW:		// sqlite3_step() has another row ready
+		symbianErrCode = KErrNone;
+		break;
+	case SQLITE_NOTADB:     // File opened that is not a database file
+	case SQLITE_NOTFOUND:	// Table or record not found
+	case SQLITE_EMPTY:      // Database is empty
+	case SQLITE_CANTOPEN:   // Unable to open the database file 
+		symbianErrCode = KErrNotFound;
+		break;
+	case SQLITE_CORRUPT:	// The database disk image is malformed 
+	case SQLITE_SCHEMA: 	// The database schema has changed
+	case SQLITE_FORMAT:     // Auxiliary database format error 
+		symbianErrCode = KErrCorrupt;
+		break;
+	case SQLITE_NOMEM:		// A malloc() failed in sqlite engine
+	case SQLITE_IOERR:      // Some kind of disk I/O error occurred
+	case SQLITE_FULL:       // there is no space left on the disk, or the database is too big to hold any more information
+		symbianErrCode = KErrNoMemory;
+		break;
+	case SQLITE_BUSY:		// The database file is locked
+	case SQLITE_LOCKED:     // A table in the database is locked
+		symbianErrCode = KErrInUse;
+		break;
+	case SQLITE_TOOBIG:		// Too much data for one row of a table 
+		symbianErrCode = KErrOverflow;
+		break;
+	case SQLITE_INTERRUPT:	// Operation terminated by sqlite_interrupt()
+		symbianErrCode = KErrCancel;
+		break;
+	case SQLITE_MISUSE: 	// The library has been used incorrectly
+		symbianErrCode = KErrNotSupported;
+		break;
+	case SQLITE_CONSTRAINT: // Abort due to constraint violation 
+		symbianErrCode = KErrAlreadyExists;
+		break;
+	case SQLITE_ERROR: 		// SQL error or missing database
+	case SQLITE_MISMATCH :  // Data type mismatch
+	case SQLITE_RANGE: 		// 2nd parameter to sqlite3_bind out of range
+		symbianErrCode = KErrArgument;
+		break;
+	case SQLITE_INTERNAL:   // An internal logic error in SQLite
+		symbianErrCode = KErrUnknown;
+		break;
+	case SQLITE_PERM:      // Access permission denied
+		symbianErrCode = KErrAccessDenied;
+		break;
+	default:
+		symbianErrCode = aErr < 0 ? aErr : KErrGeneral; // The porting layer may return Symbian error codes, which are negative
+		}// End of switch
+	
+	if(KErrNone != symbianErrCode)
+		{
+		if (aErr > 0) // If the error is negative, it does not come from SQLite
+			{
+			TPtrC8 ptrErrMsg(ErrorMessage());
+			DEBUG_PRINTF3(_L8("The SQL engine error code:%d, The SQL engine error message:%S"), ErrorCode(), &ptrErrMsg);
+			}
+		// Some functions returns standard error codes.
+		// Here ErrorCode is called to get the extended error code, if exists.
+
+		User::Leave(symbianErrCode);
+		}
+	}
+
+
+//
+// CStatementImplementation
+// 
+
+CStatementImplementation::CStatementImplementation(sqlite3_stmt* aStmtHandle)
+// Constructor
+	:iStmtHandle(aStmtHandle)
+	{
+	// Make sure that the statement handle is never NULL.
+	ASSERT(iStmtHandle != NULL);
+	}
+
+CStatementImplementation::~CStatementImplementation()
+// Destructor
+	{
+	TInt err = sqlite3_finalize(iStmtHandle);
+	if(SQLITE_OK != err)
+		{
+		DEBUG_PRINTF2(_L8("Failed to finalize the statement object. Error code:%d"), err);
+		}
+	}
+
+CStatementImplementation* CStatementImplementation::NewLC(sqlite3_stmt* aStmtHandle)
+	{
+	CStatementImplementation* self = new(ELeave) CStatementImplementation(aStmtHandle);
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+inline sqlite3_stmt* CStatementImplementation::Handle() const
+	{
+	return iStmtHandle;
+	}
+
+//
+// CDatabase
+// 
+
+CDatabase::CDatabase()
+// Constructor
+	{
+	// Empty
+	}
+
+EXPORT_C CDatabase::~CDatabase()
+// Destructor
+	{
+	delete iDbImpl;
+	}
+
+EXPORT_C CDatabase* CDatabase::NewL(RFile& aDatabaseFile, RFile& aJournalFile)
+	{
+	CDatabase *self = CDatabase::NewLC(aDatabaseFile, aJournalFile);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CDatabase* CDatabase::NewLC(RFile& aDatabaseFile, RFile& aJournalFile)
+	{
+	CDatabase *self = new(ELeave) CDatabase();
+	CleanupStack::PushL(self);
+	self->ConstructL(aDatabaseFile, aJournalFile);
+	return self;
+	}
+
+void CDatabase::ConstructL(RFile& aDatabaseFile, RFile& aJournalFile)
+	{
+	iDbImpl = CDatabaseImplementation::NewL(aDatabaseFile, aJournalFile);
+	}
+
+EXPORT_C CStatement* CDatabase::PrepareStatementLC(const TDesC& aStatementStr)
+	{
+	// For statements which start with the SELECT key word, this function creates an sql statement  
+	// object and returns it.	
+	sqlite3_stmt* stmtHandle(0); // Temporary statement handle
+	const void* stmtTail(0);	 // Pointer to unused portion of Sql statement.                         
+	TInt err = sqlite3_prepare16_v2(iDbImpl->iDbHandle, aStatementStr.Ptr(), aStatementStr.Size(), &stmtHandle, &stmtTail);
+	
+	// Check the returned error code
+	iDbImpl->CheckSqlErrCodeL(err);
+	// Since we expect single statement, stmtTail pointer should be NULL or point to zero.
+	if(stmtTail && static_cast <const TUint16*> (stmtTail)[0] != 0)
+		{
+		err = sqlite3_finalize(stmtHandle);
+		iDbImpl->CheckSqlErrCodeL(err);
+		DEBUG_PRINTF(_L8("There is a problem with the provided SQL statement. It may contain more "
+						 "than one statement. Or It may not be terminated with semicolon. "
+						 "Or It may contain a space or invalid char after semicolon."));
+		User::Leave(KErrArgument);
+		}
+	// stmtHandle can be NULL for statements like this: ";"
+	if(!stmtHandle)
+		{
+		DEBUG_PRINTF(_L8("The statement handle is NULL."));
+		User::Leave(KErrArgument);
+		}
+	// The statement object which carries handle to the result set of the sql statement
+	CStatementImplementation* stmtImpl = CStatementImplementation::NewLC(stmtHandle);
+	CStatement* stmtObj = CStatement::NewL(*this, stmtImpl); 
+	CleanupStack::Pop(stmtImpl); // Ownership has been passed to CStatement
+	CleanupStack::PushL(stmtObj);
+
+	return stmtObj;	
+	}
+
+EXPORT_C TInt CDatabase::LastInsertedIdL()
+	{
+	TInt retVal = (TInt)sqlite3_last_insert_rowid(iDbImpl->iDbHandle); 
+	// it is now expected that row ids in scr will require 64-bit storage, so cast the return value to TInt
+	if(retVal <= 0)
+		{
+		User::Leave(KErrNotFound);
+		}
+	return retVal;
+	}
+
+//
+// CStatement
+//
+
+CStatement::CStatement(const CDatabase& aDb, CStatementImplementation* aStmtImpl)
+// Constructor
+	:iDb(aDb), iStmtImpl(aStmtImpl)
+	{
+	// Empty
+	}
+
+EXPORT_C CStatement::~CStatement()
+// Destructor
+	{
+	delete iStmtImpl;
+	}
+
+EXPORT_C CStatement* CStatement::NewL(const CDatabase& aDb, CStatementImplementation* aStmtImpl)
+	{
+	CStatement* self = new(ELeave) CStatement(aDb, aStmtImpl);
+	return self;
+	}
+
+EXPORT_C TBool CStatement::ProcessNextRowL()
+	{
+	TInt err = sqlite3_step(iStmtImpl->Handle());
+	
+	switch(err)
+		{
+	case SQLITE_ROW: // A new row of data is ready for processing.
+		return ETrue;
+	
+	case SQLITE_DONE: // The statement has finished executing successfully.
+		return EFalse;
+	default:		 
+		iDb.iDbImpl->CheckSqlErrCodeL(err);
+		}// End of switch
+	return EFalse;
+	}
+
+EXPORT_C void CStatement::ExecuteStatementL()
+	{
+	// If the statement doesn't return any result table, it should normally be executed
+	// with sqlite3_exec. However, sqlite does not have a 16-bit version of sqlite3_exec.  
+	// Therefore, the execution is made with PrepareStatementLC and ProcessNextRowL functions.
+	// Now, execute and check if the function has completed successfully by calling ProcessNextRowL.
+	// If the function has failed, ProcessNextRowL will leave with one of the system wide error codes.
+	while(ProcessNextRowL())
+		{
+		// nop
+		}
+	}
+
+EXPORT_C void CStatement::BindIntL(TInt aParameterIndex, TInt aParameterValue)
+	{
+	TInt err = sqlite3_bind_int(iStmtImpl->Handle(), aParameterIndex, aParameterValue);
+	iDb.iDbImpl->CheckSqlErrCodeL(err);
+	}
+
+EXPORT_C void CStatement::BindInt64L(TInt aParameterIndex, TInt64 aParameterValue)
+	{
+	TInt err = sqlite3_bind_int64(iStmtImpl->Handle(), aParameterIndex, aParameterValue);
+	iDb.iDbImpl->CheckSqlErrCodeL(err);
+	}
+
+template <class A> void VerifyDescriptorLengthL(const A& aDesc, TUint aMaxDescriptorLength)
+	{
+	if (aDesc.Length() > aMaxDescriptorLength)
+		User::Leave(KErrArgument);	
+	}
+	
+EXPORT_C void CStatement::BindStrL(TInt aParameterIndex, const TDesC &aParameterStr)
+	{
+    const TInt KMaxInputDescriptorLength = 512; 
+	VerifyDescriptorLengthL(aParameterStr, KMaxInputDescriptorLength);	
+	TInt err = sqlite3_bind_text16(iStmtImpl->Handle(), aParameterIndex, aParameterStr.Ptr(), aParameterStr.Size(), SQLITE_TRANSIENT);
+	// The fifth argument has the value SQLITE_TRANSIENT, it means that SQLite makes its own private copy of the data immediately
+	iDb.iDbImpl->CheckSqlErrCodeL(err);
+	}
+
+EXPORT_C void CStatement::BindBinaryL(TInt aParameterIndex, const TDesC8 &aParameterStr)
+	{
+    const TInt KMaxInputDescriptorLength = 512;
+    BindBinaryL(aParameterIndex, aParameterStr, KMaxInputDescriptorLength);
+    }
+
+EXPORT_C void CStatement::BindBinaryL(TInt aParameterIndex, const TDesC8 &aParameterStr, TUint aCustomLength)
+    {
+    VerifyDescriptorLengthL(aParameterStr, aCustomLength);
+    TInt err = sqlite3_bind_blob(iStmtImpl->Handle(), aParameterIndex, reinterpret_cast<const char *>(aParameterStr.Ptr()), aParameterStr.Size(), SQLITE_TRANSIENT);
+    iDb.iDbImpl->CheckSqlErrCodeL(err); 
+    }
+
+EXPORT_C TPtrC8 CStatement::BinaryColumnL(TInt aColIdx) const
+	{
+	TInt colType = SQLITE_BLOB;
+	ValidateRequestedColumnL(aColIdx, colType);
+	
+	const TUint8* data = static_cast<const TUint8 *>(sqlite3_column_blob(iStmtImpl->Handle(), aColIdx));
+	if(!data)
+		iDb.iDbImpl->CheckSqlErrCodeL(iDb.iDbImpl->ErrorCode());
+
+	TInt len = sqlite3_column_bytes(iStmtImpl->Handle(), aColIdx);
+	if(!len)
+		iDb.iDbImpl->CheckSqlErrCodeL(iDb.iDbImpl->ErrorCode());
+
+	return TPtrC8(data, len);
+	}
+
+EXPORT_C TPtrC CStatement::StrColumnL(TInt aColIdx)	const
+	{
+	TInt colType = SQLITE_TEXT;
+	ValidateRequestedColumnL(aColIdx, colType);
+	
+	// Get the column data from the database
+	TUint16* str = (TUint16*)sqlite3_column_text16(iStmtImpl->Handle(), aColIdx);
+	if(!str)
+		{
+		iDb.iDbImpl->CheckSqlErrCodeL(iDb.iDbImpl->ErrorCode());
+		}
+	// Get the length of the column data
+	TInt len = sqlite3_column_bytes16(iStmtImpl->Handle(), aColIdx);
+	if(!len)
+		{
+		iDb.iDbImpl->CheckSqlErrCodeL(iDb.iDbImpl->ErrorCode());
+		}
+	// Return the value in a pointer descriptor
+	// len contains the number of bytes, so divide it by 2 to get the number of chars
+	ASSERT(len%2 == 0);
+	return TPtrC(str, len/2); 
+	}
+
+EXPORT_C TInt64 CStatement::Int64ColumnL(TInt aColIdx) const
+	{
+	TInt colType = SQLITE_INTEGER;
+	ValidateRequestedColumnL(aColIdx, colType);
+	return sqlite3_column_int64(iStmtImpl->Handle(), aColIdx);
+	}
+
+EXPORT_C TInt CStatement::IntColumnL(TInt aColIdx) const
+	{
+	TInt colType = SQLITE_INTEGER;
+	ValidateRequestedColumnL(aColIdx, colType);
+	return sqlite3_column_int(iStmtImpl->Handle(), aColIdx);
+	}
+ 
+void CStatement::ValidateRequestedColumnL(TInt aColIdx, TInt& aColumnType) const
+// Validate the type and existence of the requested column.
+	{
+	// Get the number of columns in the result set
+	TInt colNum = sqlite3_column_count(iStmtImpl->Handle());
+	// Get the type of the column
+	TInt colType = sqlite3_column_type(iStmtImpl->Handle(), aColIdx);
+	
+	if((aColIdx < 0 || aColIdx > colNum-1) ||	// if the column index is invalid
+	   (aColumnType != colType && aColumnType != SQLITE_NULL)) // if its type doesn't match with the expected one 
+		{// just column range validity is checked in case of SQLITE_NULL.
+		DEBUG_PRINTF5(_L("The provided column (Idx=%d, Type=%d) is not valid. Max Column Number=%d. Retrieved Column Type=%d"), aColIdx, aColumnType, colNum, colType);
+		User::Leave(KErrArgument);
+		}
+	aColumnType = colType;
+	}
+
+EXPORT_C void CStatement::ResetL()
+	{
+	TInt err = sqlite3_reset(iStmtImpl->Handle());
+	iDb.iDbImpl->CheckSqlErrCodeL(err);
+	err = sqlite3_clear_bindings(iStmtImpl->Handle());
+	iDb.iDbImpl->CheckSqlErrCodeL(err);
+	}
+
+EXPORT_C TBool CStatement::IsFieldNullL(TInt aColIdx) const
+	{
+	TInt colType = SQLITE_NULL;
+	ValidateRequestedColumnL(aColIdx, colType);
+	return (SQLITE_NULL == colType) ? ETrue : EFalse;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/server/scrrepository.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CScrRepository implementation.
+*
+*/
+
+#include "scrrepository.h"
+using namespace Usif;
+
+//Initialize static variables
+bool CScrRepository::iInstanceFlag = EFalse;
+CScrRepository* CScrRepository::iInstance = NULL;
+CRepository* CScrRepository::iRepository = NULL;
+
+CScrRepository* CScrRepository :: GetRepositoryInstanceL()
+    {   
+    if(!iInstanceFlag)
+        {        
+        iInstance = new (ELeave)CScrRepository;
+        iInstance->ConstructL();
+        iInstanceFlag = ETrue;
+        }
+    return iInstance;
+    }
+
+CScrRepository :: ~CScrRepository()
+    {
+    delete iRepository;    
+    }
+
+
+void CScrRepository :: DeleteRepositoryInstance()
+    {
+    if(iInstanceFlag)
+        {
+        delete iInstance;
+        iInstanceFlag = EFalse;
+        }
+        
+    }
+void CScrRepository :: ConstructL()
+    {
+    iRepository = CRepository::NewL(KUidScrServerRepository);
+    }
+
+
+
+TInt CScrRepository :: AppUidRangeCountL()
+    {  
+    //Read the range count value from the cenrep file.
+    TInt rangeCount(0);
+    User::LeaveIfError(iRepository->Get(KScrAppUidRangeCount, rangeCount));
+    
+    //If the range count is not set.
+    if(rangeCount <= 0)
+        {   
+        User::Leave(KErrArgument);
+        }
+    
+    return rangeCount;    
+    }
+
+
+void CScrRepository :: GetAppUidRangeL(TInt aNum, TUid& aRangeBegin, TUid& aRangeEnd)
+    {
+    TInt rangeBegin(0);
+    TInt rangeEnd(0);
+    User::LeaveIfError(iRepository->Get(KScrAppUidRanges+((2*aNum)-1), rangeBegin));
+    User::LeaveIfError(iRepository->Get(KScrAppUidRanges+(2*aNum), rangeEnd));
+    
+    aRangeBegin = TUid::Uid(rangeBegin);
+    aRangeEnd = TUid::Uid(rangeEnd);
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/server/scrrequestimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,5273 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the class which implements SCR's service requests.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "scrrequestimpl.h"
+#include "scrdatabase.h"
+#include "screntries.h"
+#include "scrserver.h"
+#include "scrcommon.h"
+#include "scrsubsession.h"
+#include "usiflog.h"
+#include "usiferror.h"
+#include "scrrepository.h"
+#include <s32mem.h>
+#include <bautils.h>
+#include <scs/streamingarray.h>
+#include <scs/ipcstream.h>
+#include <scs/ipcstream.inl>
+#include <scs/cleanuputils.h>
+#include <e32hashtab.h>
+#include <usif/sts/sts.h>
+
+using namespace Usif;
+
+_LIT(KComponentIdColumnName, "ComponentId"); 
+_LIT(KCompFileIdColumnName, "CmpFileId"); 
+_LIT(KAppIdColumnName, "AppUid");
+_LIT(KComponentPropertiesTable, "ComponentProperties");
+_LIT(KFilePropertiesTable, "FileProperties");
+_LIT(KFileOwnershipInfoTable, "FileOwnershipInfo");
+_LIT(KServiceInfoTable, "ServiceInfo");
+_LIT(KLocalizableAppInfoTable, "LocalizableAppInfo");
+_LIT(KViewDataTable, "ViewData");
+_LIT(KAppRegistrationInfoTable, "AppRegistrationInfo");
+_LIT(KAppPropertiesTable, "AppProperties");
+
+
+/** Maximum number of log records could be recorded by SCR. */
+// It is estimated that a thousand log entries create 40K-100K log file.
+const TInt KMaxScrLogEntries = 1000;
+/** The file path of SCR log file. */
+_LIT(KScrLogFileName, "!:\\private\\10285bc0\\scr.log");
+/** The file path of SCR temporary log file. */
+_LIT(KScrTempLogFileName, "!:\\private\\10285bc0\\scr_tmp.log");
+	
+const TUint KDbInterfaceMajorVersion = 1;
+const TUint KDbInterfaceMinorVersion = 1;
+#ifdef _DEBUG
+const TUint KDbInterfaceBuildNumber = 1;
+#endif
+
+enum TScrPanicId
+	{
+	KScrIllegalCallSequence = 1,
+	KScrIllegalParameter = 2
+	};
+
+static void PanicClient(const RMessagePtr2& aMessage, TScrPanicId aPanic)
+	{
+	_LIT(KPanicMessage, "ScrServer");
+    aMessage.Panic(KPanicMessage, aPanic);
+    }
+
+HBufC* UpdateFilePathDriveLC(const TDesC& aFilePath, TChar aDrive)
+	{
+	HBufC *fileName = HBufC::NewLC(aFilePath.Length());
+	TPtr ptrFileName(fileName->Des());
+	ptrFileName.Copy(aFilePath);
+	ptrFileName[0] = aDrive;
+	return fileName; 
+	}	
+	
+////////////////////////
+// CScrRequestImpl
+////////////////////////
+
+CScrRequestImpl::CScrRequestImpl(RFs& aFs)
+	: iFs(aFs)
+	{
+	}
+
+CScrRequestImpl::~CScrRequestImpl()
+	{
+	delete iDbHandle;
+	delete iComponentEntry;
+	iProperties.ResetAndDestroy();
+	delete iSingleProperty;
+	iFileComponents.Close();
+	iVerCompIdList.ResetAndDestroy();
+	iDeletedMimeTypes.ResetAndDestroy();
+	iLogEntries.ResetAndDestroy();
+	iMatchingSupportedLanguageList.Close();
+	
+    //Delete the instance of CScrRepository, if present.
+    CScrRepository::DeleteRepositoryInstance();
+	}
+
+CScrRequestImpl* CScrRequestImpl::CScrRequestImpl::NewL(RFs& aFs, RFile& aDatabaseFile, RFile& aJournalFile)
+	{
+	CScrRequestImpl *self = new(ELeave) CScrRequestImpl(aFs);
+	CleanupStack::PushL(self);
+	self->ConstructL(aDatabaseFile, aJournalFile);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CScrRequestImpl::ConstructL(RFile& aDatabaseFile, RFile& aJournalFile)
+	{
+	iDbHandle = CDatabase::NewL(aDatabaseFile, aJournalFile);
+	InitializeDbVersionL();
+	VerifyDbVersionCompatibilityL();
+	// Make sure that private directory exists - required for temporary and log files
+	_LIT(KPrivateDirPath, "!:\\private\\10285bc0\\");
+	HBufC* privateDirPath = UpdateFilePathDriveLC(KPrivateDirPath, iFs.GetSystemDriveChar());
+	TInt res = iFs.MkDirAll(*privateDirPath);
+	__ASSERT_ALWAYS(res == KErrNone || res == KErrAlreadyExists, User::Leave(res));
+	CleanupStack::PopAndDestroy(privateDirPath);
+	}
+
+HBufC* CScrRequestImpl::ReadDescLC(const RMessage2& aMessage, TInt aSlot)
+	{
+	TInt len = aMessage.GetDesLengthL(aSlot);
+	HBufC* desc = HBufC::NewLC(len);
+	TPtr ptrDesc(desc->Des());
+	aMessage.ReadL(aSlot, ptrDesc);
+	return desc;
+	}
+
+HBufC8* CScrRequestImpl::ReadDesc8LC(const RMessage2& aMessage, TInt aSlot)
+	{
+	TInt len = aMessage.GetDesLengthL(aSlot);
+	HBufC8* desc = HBufC8::NewLC(len);
+	TPtr8 ptrDesc(desc->Des());
+	aMessage.ReadL(aSlot, ptrDesc);
+	return desc;
+	}
+
+HBufC* CScrRequestImpl::FormatStatementLC(const TDesC& aStatement, TInt aFormattedLength,...) const
+	{
+	VA_LIST list;
+	VA_START(list, aFormattedLength);
+	HBufC* statementStr = HBufC::NewLC(aStatement.Length() + aFormattedLength + 1);
+	TPtr statementStrPtr(statementStr->Des()); 
+	statementStrPtr.FormatList(aStatement, list);
+	VA_END(list);
+	
+	// SQLite requires the statement string to end with NULL char.
+	statementStrPtr.Append('\0');
+	return statementStr;
+	}
+
+void CScrRequestImpl::CreateTransactionL()
+	{
+	DEBUG_PRINTF(_L8("Create Transaction request received."));
+	_LIT(KBeginTransaction, "BEGIN IMMEDIATE;");
+	ExecuteStatementL(KBeginTransaction());	
+	DEBUG_PRINTF(_L8("Transaction has begun!"));
+	}
+
+void CScrRequestImpl::RollbackTransactionL()
+	{
+	DEBUG_PRINTF(_L8("Rollback Transaction request received."));
+	_LIT(KRollbackTransaction, "ROLLBACK;");
+	ExecuteStatementL(KRollbackTransaction());
+	DEBUG_PRINTF(_L8("Transaction has been rolled back successfuly!"));
+	}
+
+void CScrRequestImpl::CommitTransactionL()
+	{
+	DEBUG_PRINTF(_L8("Commit Transaction request received."));
+	_LIT(KCommitTransaction, "COMMIT;");
+	ExecuteStatementL(KCommitTransaction());
+	DEBUG_PRINTF(_L8("Transaction has been committed successfully!"));
+	}
+
+HBufC* CScrRequestImpl::GenerateGlobalIdL(const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId) const
+	{ 
+	DEBUG_PRINTF(_L8("Generating Global ID."));
+	HBufC *globalIdBuf = HBufC::NewL(aUniqueSwTypeName.Length() + aGlobalId.Length() + 1); // 1 is extra memory to put NULL char
+	TPtr globalIdDes(globalIdBuf->Des());
+	
+	globalIdDes.Copy(aUniqueSwTypeName);
+	globalIdDes.Append('\0');
+	globalIdDes.Append(aGlobalId);
+	
+	return globalIdBuf;
+	}
+
+TComponentId CScrRequestImpl::CommonAddComponentL(const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId)
+	{
+	DEBUG_PRINTF(_L8("Adding a base component."));
+	// Get the current time
+	TTime time;
+	time.HomeTime();
+	TDateTime datetime = time.DateTime();
+	TBuf<16> installTime;
+	// We cannot use TTime::FormatL, since it starts months and days with 01, which is not accepted by TTime::Set() which starts them from 0
+	installTime.Format(_L("%04d%02d%02d:%02d%02d%02d"), datetime.Year(), datetime.Month(), datetime.Day(), datetime.Hour(), datetime.Minute(), datetime.Second());
+	
+	// SoftwareTypeId is the hash of unique software type name. For more information, see CScrRequestImpl::AddSoftwareTypeL.
+	// In Components table, both SoftwareTypeId and unique SoftwareTypeName is stored so that the software type name of a component
+	// can be returned even if the corresponding installer (software type) has been uninstalled. The unique sofware type name
+	// might be used by the client to identify the installer required to uninstall the component.
+	TUint32 swTypeId = HashCaseSensitiveL(aUniqueSwTypeName);
+	
+	if(aGlobalId.CompareF(KNullDesC()))
+		{ // Global Id is supplied by client
+		HBufC *globalId = GenerateGlobalIdL(aUniqueSwTypeName, aGlobalId);
+		CleanupStack::PushL(globalId);
+		TUint32 globalIdHash = HashCaseSensitiveL(*globalId);
+		
+		_LIT(KInsertComponent,"INSERT INTO Components(SoftwareTypeId,SoftwareTypeName,GlobalIdHash,GlobalId,InstallTime) VALUES(?,?,?,?,?);");
+		TInt numberOfValues = 5;
+		ExecuteStatementL(KInsertComponent(), numberOfValues, EValueInteger, swTypeId, EValueString, &aUniqueSwTypeName, EValueInteger, globalIdHash, EValueString, globalId, EValueString, &installTime);
+		CleanupStack::PopAndDestroy(globalId);
+		}
+	else
+		{// Global Id is NOT supplied by client
+		_LIT(KInsertComponent,"INSERT INTO Components(SoftwareTypeId,SoftwareTypeName,InstallTime) VALUES(?,?,?);");
+		TInt numberOfValues = 3;
+		ExecuteStatementL(KInsertComponent(), numberOfValues, EValueInteger, swTypeId, EValueString, &aUniqueSwTypeName, EValueString, &installTime);
+		}
+	
+	DEBUG_PRINTF(_L8("The new component has been added to Components table successfully."));
+	return iDbHandle->LastInsertedIdL();
+	}
+
+void CScrRequestImpl::AddComponentLocalizablesL(TComponentId aCompId, TLanguage aLocale, const TDesC& aName, const TDesC& aVendor)
+	{
+	DEBUG_PRINTF4(_L("Adding the component(%d) localizables: name(%S) and vendor(%S)."), aCompId, &aName, &aVendor);
+	
+	if(!aName.CompareF(KNullDesC()))
+		{// Component name cannot be empty
+		DEBUG_PRINTF(_L8("Component name cannot be NULL string."));
+		User::Leave(KErrArgument);
+		}
+	
+	_LIT(KInsertComponentLocalizables, "INSERT INTO ComponentLocalizables(ComponentId,Locale,Name,Vendor) VALUES(?,?,?,?);");
+	TInt numberOfValues = 4;
+	ExecuteStatementL(KInsertComponentLocalizables(), numberOfValues, EValueInteger, aCompId, EValueInteger, aLocale, EValueString, &aName, EValueString, &aVendor);
+	
+	DEBUG_PRINTF(_L8("The component localizables have been added successfully."));
+	}
+
+void CScrRequestImpl::ComponentRollback(TAny* aParam)
+	{
+	TRollbackParams *param = static_cast<TRollbackParams*>(aParam);
+	_LIT(KDeleteComponents, "DELETE FROM Components WHERE ComponentId=?;");
+	TInt numberOfValues = 1;
+	TRAP_IGNORE(param->iReqImplHandle.ExecuteStatementL(KDeleteComponents, numberOfValues, EValueInteger, param->iIdColumnVal););
+	}
+	
+void CScrRequestImpl::ComponentLocalizablesRollback(TAny* aParam)
+	{
+	TRollbackParams *param = static_cast<TRollbackParams*>(aParam);
+	_LIT(KDeleteComponentLocalizables, "DELETE FROM ComponentLocalizables WHERE ComponentId=?;");
+	TInt numberOfValues = 1;
+	TRAP_IGNORE(param->iReqImplHandle.ExecuteStatementL(KDeleteComponentLocalizables, numberOfValues, EValueInteger, param->iIdColumnVal););
+	}
+
+void CScrRequestImpl::AddComponentL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Adding a new component."));
+	// First check if the supplied operation type is valid
+	TScrComponentOperationType compOpType;
+	TPckg<TScrComponentOperationType> opTypePckg(compOpType);
+	aMessage.ReadL(3, opTypePckg, 0);
+		
+	if(compOpType != EScrCompInstall && compOpType != EScrCompUpgrade && compOpType != EScrCompHidden)
+		{
+		DEBUG_PRINTF2(_L("Unexpected component operation type (%d) was provided!"), static_cast<TInt>(compOpType));
+		User::Leave(KErrArgument);
+		}
+	
+	RIpcReadStream componentInfoReader;
+	CleanupClosePushL(componentInfoReader);
+	componentInfoReader.Open(aMessage, 1);
+	
+	RPointerArray<CLocalizableComponentInfo> componentInfoArray;
+	CleanupResetAndDestroyPushL(componentInfoArray);
+	InternalizePointersArrayL(componentInfoArray, componentInfoReader);
+	TInt arrayCount = componentInfoArray.Count();
+	// This check is done at the client side - if we get this condition here, this means that a rogue client-server call bypassed the R-class
+	__ASSERT_ALWAYS(arrayCount > 0, PanicClient(aMessage, KScrIllegalParameter));
+
+	HBufC *uniqueSwTypeName = GetSoftwareTypeNameFromMsgLC(aMessage);
+	HBufC *globalId = ReadDescLC(aMessage, 2);
+	TComponentId newComponentId = CommonAddComponentL(*uniqueSwTypeName, *globalId);
+	
+	// Add the newly added component into the cleanupstack so that it can be deleted in case of leaving.
+	TRollbackParams cleanupParam(newComponentId, *this);
+	CleanupStack::PushL(TCleanupItem(CScrRequestImpl::ComponentRollback, &cleanupParam));
+	// Add the component localizables cleanup into the cleanupstack so that they can be deleted in case of leaving.
+	CleanupStack::PushL(TCleanupItem(CScrRequestImpl::ComponentLocalizablesRollback, &cleanupParam));
+	
+	// For a log record, the component name is chosen for the current locale. If it doesn't exist, 
+	// then the non-localized component name is picked. If none of them exist, the first name in the names 
+	// array is used as default.
+	TInt componentNameIndexForLog (0);
+	TInt indexForCurrentLocale = KErrNotFound;
+	TInt indexForNonLocalized = KErrNotFound;
+	for(TInt i=0; i<arrayCount; ++i)
+		{
+		TLanguage locale(componentInfoArray[i]->Locale());
+		const TDesC& name = componentInfoArray[i]->NameL();
+		const TDesC& vendor = componentInfoArray[i]->VendorL();
+		AddComponentLocalizablesL(newComponentId, locale, name, vendor);
+		if(locale == User::Language())
+			indexForCurrentLocale = i;
+		else if(locale == KNonLocalized)
+			indexForNonLocalized = i;
+		}
+	CleanupStack::Pop(2, &cleanupParam); // cleanupitem for ComponentRollback, cleanupitem for ComponentLocalizablesRollback
+	
+	if(indexForCurrentLocale != KErrNotFound)
+		componentNameIndexForLog = indexForCurrentLocale;
+	else if(indexForNonLocalized != KErrNotFound)
+		componentNameIndexForLog = indexForNonLocalized;
+	
+	if(EScrCompHidden != compOpType)
+		{
+		CScrLogEntry *logRecord = CScrLogEntry::NewLC(componentInfoArray[componentNameIndexForLog]->NameL(), *uniqueSwTypeName, *globalId, KNullDesC, compOpType);
+		logRecord->iComponentId = newComponentId;
+		iLogEntries.AppendL(logRecord);
+		CleanupStack::Pop(logRecord); // Ownershipd is transferred
+		}
+	CleanupStack::PopAndDestroy(4, &componentInfoReader); // componentInfoReader, componentInfoArray, uniqueSwTypeName, globalId
+	
+	TPckg<TComponentId> componentIdDes(newComponentId);
+	aMessage.WriteL(3, componentIdDes);
+	
+	DEBUG_PRINTF(_L8("New component added successfully."));
+	}
+
+HBufC* CScrRequestImpl::ReadAndGetGlobalIdLC(const RMessage2& aMessage, TInt aSlot) const
+	{
+	// Read global id object from the message
+	CGlobalComponentId *globalId = ReadObjectFromMessageLC<CGlobalComponentId>(aMessage, aSlot);
+	HBufC *globalIdBuf = GenerateGlobalIdL(globalId->SoftwareTypeName(), globalId->GlobalIdName());
+	CleanupStack::PopAndDestroy(globalId);
+	CleanupStack::PushL(globalIdBuf);
+	return globalIdBuf;
+	}
+
+TUint32 CScrRequestImpl::HashGlobalIdsL(const TDesC& aDependantId, const TDesC& aSupplierId) const
+	{
+	RBuf concatGlobalIds;
+	concatGlobalIds.CreateL(aDependantId.Length() + aSupplierId.Length());
+	concatGlobalIds.CleanupClosePushL();
+	concatGlobalIds.Copy(aDependantId);
+	concatGlobalIds.Append(aSupplierId);
+	TUint32 globalIdsHash = HashCaseSensitiveL(concatGlobalIds);
+	CleanupStack::PopAndDestroy(&concatGlobalIds);
+	return globalIdsHash;
+	}
+
+void CScrRequestImpl::AddComponentDependencyL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Adding a new component dependency."));
+	
+	CVersionedComponentId *verCompId = ReadObjectFromMessageLC<CVersionedComponentId>(aMessage, 1);
+	HBufC *suppGlobalId = GenerateGlobalIdL(verCompId->GlobalId().SoftwareTypeName(), verCompId->GlobalId().GlobalIdName());
+	CleanupStack::PushL(suppGlobalId);
+	TUint32 suppGlobalIdHash = HashCaseSensitiveL(*suppGlobalId);
+	
+	HBufC *depGlobalId = ReadAndGetGlobalIdLC(aMessage, 2);
+	TUint32 depGlobalIdHash = HashCaseSensitiveL(*depGlobalId);
+	
+	TUint32 globalIdsHash = HashGlobalIdsL(*depGlobalId, *suppGlobalId);
+	
+	const TDesC* versionFrom = verCompId->VersionFrom();
+	const TDesC* versionTo = verCompId->VersionTo();
+	
+	_LIT(KInsertDependencyFront, "INSERT INTO ComponentDependencies(GlobalIdHash,DependantGlobalIdHash,SupplierGlobalIdHash,DependantGlobalId,SupplierGlobalId");
+	_LIT(KInsertDependencyEnd, ") VALUES(?,?,?,?,?");
+
+	const TInt KMaxInsertDependencyLength = 180;     ///< Maximum length of a possible dependency insert statement (KInsertDependencyFront + KInsertDependencyEnd + some space for optional columns)
+	const TInt KMaxInsertDependencyValueLength = 30; ///< Maximum length of the end part of a possible dependency insert statement (KInsertDependencyEnd + some space for optional values).
+
+	TInt numberOfValues = 5; // 5->(GlobalIdHash, DependantGlobalIdHash, SupplierGlobalIdHash, DependantGlobalId, SupplierGlobalId)
+	RBuf insertStmtStr;
+	insertStmtStr.CreateL(KMaxInsertDependencyLength);
+	insertStmtStr.CleanupClosePushL();
+	insertStmtStr.Copy(KInsertDependencyFront());
+	
+	RBuf insertStmtEndStr;
+	insertStmtEndStr.CreateL(KMaxInsertDependencyValueLength);
+	insertStmtEndStr.CleanupClosePushL();
+	insertStmtEndStr.Copy(KInsertDependencyEnd());
+	
+	// VersionFrom and VersionTo values are optional. Hence, a dynamic insert statement will be created.
+	// insertStmtStr is initialized with the statement including mandatory columns. Then versionFrom/To
+	// values are checked. If any of them is provided, then the corresponding column name is added to the statement.
+	// insertStmtEndStr is constructed with a number of value characters(?) as new value chars will be added
+	// if new columns are added to the statement
+	// In the end, insertStmtEndStr is added to insertStmtStr in order to complete the dependency insert statement.
+	
+	const TDesC* firstVersionParam(0);
+	const TDesC* secondVersionParam(0);
+	
+	_LIT(KInsertValue, ",?");
+	if(versionFrom)
+		{
+		_LIT(KVersionFrom, ",VersionFrom");
+		insertStmtStr.Append(KVersionFrom());
+		insertStmtEndStr.Append(KInsertValue());
+		firstVersionParam = versionFrom;
+		++numberOfValues;
+		}
+	
+	if(versionTo)
+		{
+		_LIT(KVersionTo, ",VersionTo");
+		insertStmtStr.Append(KVersionTo());
+		insertStmtEndStr.Append(KInsertValue());
+		if(firstVersionParam)
+			{
+			secondVersionParam = versionTo;
+			}
+		else
+			{
+			firstVersionParam = versionTo;
+			}
+		++numberOfValues;
+		}
+	
+	// Append the end part of the statement to the front part.
+	insertStmtStr.Append(insertStmtEndStr);
+	// Close the statement
+	_LIT(KInsertClose,");");
+	insertStmtStr.Append(KInsertClose());
+	// SQLite requires the statement string to end with NULL char.
+	insertStmtStr.Append('\0');
+	// All parameters are supplied, but numberOfValues of them will be taken into account.
+	ExecuteStatementL(insertStmtStr, numberOfValues, EValueInteger, globalIdsHash, EValueInteger, depGlobalIdHash, EValueInteger, suppGlobalIdHash, EValueString, depGlobalId, EValueString, suppGlobalId, EValueString, firstVersionParam, EValueString, secondVersionParam);
+	
+	CleanupStack::PopAndDestroy(5, verCompId); // verCompId, suppGlobalId, depGlobalId, insertStmtStr, insertStmtEndStr
+	
+	DEBUG_PRINTF(_L8("New component dependency added successfully."));
+	}
+
+CStatement* CScrRequestImpl::CreateGeneralPropertyStatementWithLocaleL(const TDesC& aStmtStr, TInt aIdColumnValue, TLanguage aLocale, const TDesC& aPropName, TBool aDoLocaleResolving) const
+	{
+	CStatement *stmt(0);
+	TInt numberOfValues = 3;
+	
+	if(KUnspecifiedLocale == aLocale)
+		{
+		// No locale is specified. Client wants SCR to find the property automatically.
+		// So, first look up the properties for the current locale and its downgraded languages.
+		ASSERT(aDoLocaleResolving); // We cannot get a situation where KUnspecifiedLocale is given with locale resolving disabled: it is an undefined state.
+		stmt = CreateStatementObjectWithLocaleL(aStmtStr, User::Language(), numberOfValues, EValueString, &aPropName, EValueInteger, aIdColumnValue, EValueLanguage);
+		
+		if(!stmt)
+			{
+			// No property is defined with the current locale. Look up the non-localized properties.
+			stmt = CreateStatementObjectWithLocaleL(aStmtStr, KNonLocalized, numberOfValues, EValueString, &aPropName, EValueInteger, aIdColumnValue, EValueLanguage);
+			}
+		}
+	else if(KNonLocalized == aLocale)
+		{
+		// Non-localized properties are requested. Look up the non-localized properties.
+		stmt = CreateStatementObjectWithLocaleL(aStmtStr, KNonLocalized, numberOfValues, EValueString, &aPropName, EValueInteger, aIdColumnValue, EValueLanguage);
+		}
+	else
+		{
+		// A particular language is specified. Look up the properties with for this particular language
+		// and its downgraded languages.
+		stmt = aDoLocaleResolving ? 
+			CreateStatementObjectWithLocaleL(aStmtStr, aLocale, numberOfValues, EValueString, &aPropName, EValueInteger, aIdColumnValue, EValueLanguage, aDoLocaleResolving) :
+			CreateStatementObjectWithLocaleNoDowngradeL(aStmtStr, aLocale, numberOfValues, EValueString, &aPropName, EValueInteger, aIdColumnValue, EValueLanguage, aDoLocaleResolving);
+		}
+	return stmt;
+	}
+
+TInt CScrRequestImpl::FindGeneralPropertyNoLocaleDowngradeL(const TDesC& aTableName, const TDesC& aIdColumnName, TInt aIdColumnValue, const TDesC& aPropertyName, TLanguage aLocale, TPropertyType& aPropertyType) const
+	{
+	_LIT(KFindProperty, "SELECT PropertyId,IntValue,StrValue,IsStr8Bit FROM %S WHERE Name=? AND %S=? AND Locale=?;");
+	TInt formattedLen = aTableName.Length() + aIdColumnName.Length();
+	HBufC *statementStr = FormatStatementLC(KFindProperty(), formattedLen, &aTableName, &aIdColumnName);
+
+	// As we do not require downgrading locales, the last parameter is EFalse
+	CStatement *stmtFind = CreateGeneralPropertyStatementWithLocaleL(*statementStr, aIdColumnValue, aLocale, aPropertyName, EFalse);
+	if(!stmtFind)
+		{ // the property does not exist, return
+		CleanupStack::PopAndDestroy(statementStr);
+		return KErrNotFound;
+		}
+	CleanupStack::PushL(stmtFind);
+	
+	// the property in question exists in the properties table 
+	TInt propertyId = stmtFind->IntColumnL(0);					// 0 -> PropertyId		
+	TBool isIntPropertyNull = stmtFind->IsFieldNullL(1); 	// 2 -> IntValue
+	TBool isStrPropertyNull = stmtFind->IsFieldNullL(2); 	// 3 -> StrValue
+			
+	if(!isIntPropertyNull)
+		{
+		aPropertyType = CScrRequestImpl::EPropertyInteger;
+		}
+	else if(!isStrPropertyNull)
+		{
+		TBool is8BitString = (stmtFind->IntColumnL(3) == 1);
+		aPropertyType = is8BitString ? CScrRequestImpl::EPropertyBinary : CScrRequestImpl::EPropertyLocalizable;
+		}
+	else // None of the columns is defined - corrupt DB 
+		{
+		DEBUG_PRINTF(_L8("Unexpected situation! Neither int value nor str value are defined for a property"));
+		User::Leave(KErrCorrupt);
+		}
+	CleanupStack::PopAndDestroy(2, statementStr); // stmtFind, statementStr
+	return propertyId;
+	}
+
+void CScrRequestImpl::BindStatementValuesL(CStatement& aStatement, TLanguage aLanguage, TInt aValuesNum, VA_LIST aList) const
+	{
+	TInt bindIdx(0);
+	while(aValuesNum--)
+		{
+		CScrRequestImpl::TValueType t = static_cast<CScrRequestImpl::TValueType>(VA_ARG(aList, TInt));
+		switch(t)
+			{
+			case EValueString:
+				{
+				const TDesC* strVal = VA_ARG(aList, const TDesC*);
+				aStatement.BindStrL(++bindIdx, *strVal);
+				break;
+				}
+			case EValueInteger:
+				{
+				TInt intVal = VA_ARG(aList, TInt);
+				aStatement.BindIntL(++bindIdx, intVal);
+				break;
+				}
+			case EValueInteger64:
+				{
+				TInt64 intVal64 = VA_ARG(aList, TInt64);
+				aStatement.BindInt64L(++bindIdx, intVal64);
+				break;
+				}
+			case EValueLanguage:
+				{
+				aStatement.BindIntL(++bindIdx, aLanguage);
+				break;
+				}
+			case EValueBinary:
+				{
+				const TDesC8* binaryVal = VA_ARG(aList, const TDesC8*);
+				aStatement.BindBinaryL(++bindIdx, *binaryVal);
+				break;
+				}				
+			default:
+				DEBUG_PRINTF2(_L8("Encountered unexpected value type (%d)!"), t);
+				ASSERT(0);
+			} // switch
+		} // while
+	} // End of the function
+
+void CScrRequestImpl::ExecuteStatementL(TRefByValue<const TDesC> aStatement, TInt aValuesNum,...)
+	{// TRefByValue is used to suppress rcvt compile warning
+	VA_LIST argList;
+	VA_START(argList, aValuesNum);
+	
+	CStatement *stmt = iDbHandle->PrepareStatementLC(aStatement);
+	BindStatementValuesL(*stmt, KLangNone, aValuesNum, argList);
+	stmt->ExecuteStatementL();
+	CleanupStack::PopAndDestroy(stmt);
+	
+	VA_END(argList);
+	}
+
+void CScrRequestImpl::SetGeneralLocalizablePropertyL(CScrRequestImpl::TPropertyType aPropType, TInt aPropertyId, const TDesC& aIdColumnName, TInt aIdColumnValue, const TDesC& aPropName, TLanguage aLocale, const TDesC& aPropValue)
+	{
+	switch(aPropType)
+		{
+		case CScrRequestImpl::EPropertyUndefined:
+			{// the property does NOT exist, insert a new one
+			_LIT(KInsertProperty, "INSERT INTO ComponentProperties(Name,Locale,%S,StrValue) VALUES(?,?,?,?);");
+			TInt formattedLen = aIdColumnName.Length();
+			HBufC *statementStr = FormatStatementLC(KInsertProperty(), formattedLen, &aIdColumnName );
+			TInt numberOfValues = 4;
+			ExecuteStatementL(*statementStr, numberOfValues, EValueString, &aPropName, EValueInteger, aLocale, EValueInteger, aIdColumnValue, EValueString, &aPropValue);
+			CleanupStack::PopAndDestroy(statementStr);
+			break;
+			}
+		case CScrRequestImpl::EPropertyLocalizable: 
+			{
+			// the property exists, update it
+			_LIT(KUpdateProperty, "UPDATE ComponentProperties SET StrValue=? WHERE PropertyId=?;");
+			TInt numberOfValues = 2;
+			ExecuteStatementL(KUpdateProperty(), numberOfValues, EValueString, &aPropValue, EValueInteger, aPropertyId);
+			break;
+			}
+		default:
+			DEBUG_PRINTF(_L8("The property type isn't localizable string and cannot be updated with this API."))
+			User::Leave(KErrAbort);
+		}
+	}
+
+void CScrRequestImpl::SetGeneralBinaryPropertyL(CScrRequestImpl::TPropertyType aPropType, TInt aPropertyId, const TDesC& aTableName, const TDesC& aIdColumnName, TInt aIdColumnValue, const TDesC& aPropName, const TDesC8& aPropValue)
+	{
+	switch(aPropType)
+		{
+		case CScrRequestImpl::EPropertyUndefined:
+			{// the property does NOT exist, insert a new one
+			_LIT(KInsertProperty, "INSERT INTO %S(Name,%S,StrValue,IsStr8Bit) VALUES(?,?,?,1);");
+			TInt formattedLen = aTableName.Length() + aIdColumnName.Length();
+			HBufC *statementStr = FormatStatementLC(KInsertProperty(), formattedLen, &aTableName, &aIdColumnName );
+			TInt numberOfValues = 3;
+			ExecuteStatementL(*statementStr, numberOfValues, EValueString, &aPropName, EValueInteger, aIdColumnValue, EValueBinary, &aPropValue);
+			CleanupStack::PopAndDestroy(statementStr);
+			break;
+			}
+		case CScrRequestImpl::EPropertyBinary: 
+			{
+			// the property exists, update it
+			_LIT(KUpdateProperty, "UPDATE %S SET StrValue=? WHERE PropertyId=?;");
+			HBufC *statementStr = FormatStatementLC(KUpdateProperty(), aTableName.Length(), &aTableName);
+			TInt numberOfValues = 2;
+			ExecuteStatementL(*statementStr, numberOfValues, EValueBinary, &aPropValue, EValueInteger, aPropertyId);
+			CleanupStack::PopAndDestroy(statementStr);
+			break;
+			}
+		default:
+			DEBUG_PRINTF(_L8("The property type isn't an 8-bit string and cannot be updated with this API."))
+			User::Leave(KErrAbort);
+		}
+	}
+
+void CScrRequestImpl::SetGeneralIntPropertyL(TPropertyType aPropType, TInt aPropertyId, const TDesC& aTableName, const TDesC& aIdColumnName , TInt aIdColumnValue, const TDesC& aPropName, TInt64 aPropValue)
+	{
+	switch(aPropType)
+		{
+		case CScrRequestImpl::EPropertyUndefined:
+			{// the property does NOT exist, insert a new one
+			_LIT(KInsertProperty, "INSERT INTO %S(Name,%S,IntValue) VALUES(?,?,?)");
+			TInt formattedLen = aTableName.Length() + aIdColumnName.Length();
+			HBufC* statementStr = FormatStatementLC(KInsertProperty(), formattedLen, &aTableName, &aIdColumnName );
+			TInt numberOfValues = 3;
+			ExecuteStatementL(*statementStr, numberOfValues,EValueString, &aPropName, EValueInteger, aIdColumnValue, EValueInteger64, aPropValue);
+			CleanupStack::PopAndDestroy(statementStr);
+			break;
+			}
+		case CScrRequestImpl::EPropertyInteger:
+			{// the property exists, update it
+			_LIT(KUpdateProperty, "UPDATE %S SET IntValue=? WHERE PropertyId=?;");
+			HBufC *statementStr = FormatStatementLC(KUpdateProperty(), aTableName.Length(), &aTableName);
+			TInt numberOfValues = 2;
+			ExecuteStatementL(*statementStr, numberOfValues, EValueInteger64, aPropValue, EValueInteger, aPropertyId);
+			CleanupStack::PopAndDestroy(statementStr);
+			break;
+			}
+		default:
+			DEBUG_PRINTF(_L8("The property type isn't integer and cannot be updated with this API."));
+			User::Leave(KErrAbort);
+		}
+	}
+
+template <class A> void VerifySetPropertyParamsL(HBufC* aPropName, A* aPropValue)
+	{
+	if (!aPropName || !aPropValue)
+		User::Leave(KErrArgument);	
+	}
+	
+void CScrRequestImpl::SetComponentLocalizablePropertyL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting component string property."));
+	// N.B. Don't change the order of IPC parameter reading, otherwise fails in UREL mode.
+	HBufC *propName = ReadDescLC(aMessage, 1);
+	HBufC *propValue = ReadDescLC(aMessage, 2);
+	VerifySetPropertyParamsL(propName, propValue);
+
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	TLanguage locale = TLanguage(aMessage.Int3());
+	
+	CScrRequestImpl::TPropertyType propType(CScrRequestImpl::EPropertyUndefined);
+	// The function name states that we don't want automatic locale resolving. If, e.g. we set a property for ELangAmerican, we don't want FindGeneralProperty to match existing value for ELangEnglish
+	TInt propertyId = FindGeneralPropertyNoLocaleDowngradeL(KComponentPropertiesTable(), KComponentIdColumnName(), componentId, *propName, locale, propType);
+	SetGeneralLocalizablePropertyL(propType, propertyId, KComponentIdColumnName(), componentId, *propName, locale, *propValue);
+	CleanupStack::PopAndDestroy(2, propName);
+	}
+
+void CScrRequestImpl::SetComponentBinaryPropertyL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting component binary property."));
+	// N.B. Don't change the order of IPC parameter reading, otherwise fails in UREL mode.
+	HBufC *propName = ReadDescLC(aMessage, 1);
+	HBufC8 *propValue = ReadDesc8LC(aMessage, 2);
+	
+	VerifySetPropertyParamsL(propName, propValue);
+	
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	
+	CScrRequestImpl::TPropertyType propType(CScrRequestImpl::EPropertyUndefined);
+	TInt propertyId = FindGeneralPropertyNoLocaleDowngradeL(KComponentPropertiesTable(), KComponentIdColumnName(), componentId, *propName, KLangNone, propType);
+	SetGeneralBinaryPropertyL(propType, propertyId, KComponentPropertiesTable(), KComponentIdColumnName(), componentId, *propName, *propValue);
+	CleanupStack::PopAndDestroy(2, propName);
+	}
+
+void CScrRequestImpl::SetComponentIntPropertyL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting component integer property."));
+	// N.B. Don't change the order of IPC parameter reading, otherwise fails in UREL mode.
+	HBufC* propName = ReadDescLC(aMessage, 1);
+	
+	if (!propName)
+		User::Leave(KErrArgument);
+	
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	TInt64 propValue = MAKE_TINT64(aMessage.Int2(), aMessage.Int3());	
+		
+	TPropertyType propType(CScrRequestImpl::EPropertyUndefined);
+	TInt propertyId = FindGeneralPropertyNoLocaleDowngradeL(KComponentPropertiesTable(), KComponentIdColumnName(), componentId, *propName, KLangNone, propType);
+	SetGeneralIntPropertyL(propType, propertyId, KComponentPropertiesTable(), KComponentIdColumnName(), componentId, *propName, propValue);
+	CleanupStack::PopAndDestroy(propName);
+	}
+
+TUint32 CScrRequestImpl::HashCaseInsensitiveL(const TDesC& aName)
+	{
+	RBuf temp;
+	temp.CreateMaxL(aName.Length());
+	temp.CleanupClosePushL();
+	temp.Copy(aName);
+	temp.LowerCase(); // The hashed column is case-insensitive. So, the hashed value must be
+					  // case-insensitive too. To achieve that we need to set to lower-case.	
+	TUint32 hashVal = HashCaseSensitiveL(temp);
+	CleanupStack::PopAndDestroy(&temp);
+	return hashVal;
+	}
+
+TUint32 CScrRequestImpl::HashCaseSensitiveL(const TDesC& aName)
+	{
+	TUint32 hashVal = 0;
+	Mem::Crc32(hashVal,aName.Ptr(),aName.Size());
+	return hashVal;
+	}
+
+TInt CScrRequestImpl::GetComponentFileIdL(const TDesC& aFileName, TComponentId aComponentId) const
+	{
+	DEBUG_PRINTF3(_L("Looking up a component(%d) file(%S)"), aComponentId, &aFileName);
+	
+	TUint32 hash = HashCaseInsensitiveL(aFileName);
+	_LIT(KFindComponentFile, "SELECT CmpFileId FROM ComponentsFiles WHERE ComponentId=? AND LocationHash=?;");
+	CStatement *stmtFind = iDbHandle->PrepareStatementLC(KFindComponentFile());
+	stmtFind->BindIntL(1, aComponentId);
+	stmtFind->BindIntL(2, hash);
+	
+	if(!stmtFind->ProcessNextRowL())
+		{
+		DEBUG_PRINTF3(_L("Component %d does not have File=%S!"), aComponentId, &aFileName);
+		CleanupStack::PopAndDestroy(stmtFind);
+		return KErrNotFound;
+		}
+	TInt componentFileId = stmtFind->IntColumnL(0);
+	CleanupStack::PopAndDestroy(stmtFind);
+	return componentFileId;
+	}
+
+TInt CScrRequestImpl::FindComponentFileL(const TDesC& aFileName, TComponentId aComponentId) const
+	{
+	TInt cmpFileId = GetComponentFileIdL(aFileName, aComponentId);
+	if(KErrNotFound == cmpFileId)
+		{
+		User::Leave(KErrNotFound);
+		}
+	return cmpFileId;
+	}
+
+TInt CScrRequestImpl::GetDriveFromFilePath(const TDesC& aFilePath, TDriveUnit& aDriveUnit) const
+	{
+	if(!iFs.IsValidName(aFilePath))
+		{// even if the file name validity is checked before registering the file, do double check
+		 // to be on the safe side. Because, if the file format is invalid, the rest of the code may panic.
+		DEBUG_PRINTF2(_L("The file (%S) doesn't have a valid name format!"), &aFilePath);
+		return KErrArgument;
+		}
+	
+	TParsePtrC fileParser(aFilePath);
+	TPtrC driveLetter(fileParser.Drive());
+	if(driveLetter == KNullDesC())
+		{
+		DEBUG_PRINTF2(_L("The file (%S) doesn't contain any drive letter!"), &aFilePath);
+		return KErrArgument;
+		}
+	aDriveUnit = driveLetter;
+	return KErrNone;
+	}
+
+TInt CScrRequestImpl::InstalledDrivesToBitmaskL(const TDriveList& aDriveList) const
+	{
+	TInt installedDrives(0);
+	for(TInt driveNum=EDriveA; driveNum<=EDriveZ; ++driveNum)
+		{
+		if(aDriveList[driveNum])
+			{
+			installedDrives |= 1<<driveNum;
+			}
+		}
+	return installedDrives;
+	}
+
+TInt CScrRequestImpl::GetInstalledDrivesBitmaskL(TComponentId aComponentId) const
+	{
+	// Get installed drives list from database
+	_LIT(KSelectInstalledDrivesBitmask, "SELECT InstalledDrives FROM Components WHERE ComponentId=?;");
+	CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectInstalledDrivesBitmask);
+	stmt->BindIntL(1, aComponentId);
+	if(!stmt->ProcessNextRowL())
+		{
+		DEBUG_PRINTF2(_L8("Component (%d) couldn't be found in the SCR database."), aComponentId);
+		User::Leave(KErrNotFound);
+		}
+	TInt res = stmt->IntColumnL(0);
+	CleanupStack::PopAndDestroy(stmt);
+	return res;
+	}
+
+TBool CScrRequestImpl::HasFilesOnDriveL(TDriveUnit aDrive, TComponentId aComponentId)
+	{
+	CStatement *stmt = OpenFileListStatementL(aComponentId);
+	CleanupStack::PushL(stmt);
+	HBufC *nextFilePath(NULL);
+	TBool returnValue(EFalse);
+	
+	while ( returnValue == EFalse && (nextFilePath = GetNextFilePathL(*stmt)) != NULL)
+		{
+		TDriveUnit fileDrive;
+		TInt res = GetDriveFromFilePath(*nextFilePath, fileDrive);
+		// Files with invalid paths are ignored
+		if (res == KErrNone && fileDrive == aDrive)
+			{
+			returnValue = ETrue;
+			}
+		delete nextFilePath;			
+		}
+		
+	CleanupStack::PopAndDestroy(stmt);
+	return returnValue;
+	}
+	
+void CScrRequestImpl::UpdateInstalledDrivesL(TComponentId aComponentId, const TDesC& aFilePath, TFileOperationType aType)
+	{
+	TDriveUnit drive;
+	User::LeaveIfError(GetDriveFromFilePath(aFilePath, drive));
+	
+	TInt driveNum = static_cast<TInt>(drive);	
+	TInt oldDrivesBitmask = GetInstalledDrivesBitmaskL(aComponentId);
+
+	TInt newDrivesBitmask = oldDrivesBitmask;
+	// Update the list of installed drives
+	if(aType == EFileRegistered)
+		{
+		newDrivesBitmask |= 0x1 << driveNum;
+		}
+	else // aType == EFileUnregistered
+		{
+		TBool hasOtherFilesOnTheDrive = HasFilesOnDriveL(drive, aComponentId);
+		if (!hasOtherFilesOnTheDrive)
+			{
+			// Do a logical AND with a bitmask which looks like 111110111111
+			TInt andBitmask = ~(0x1 << driveNum);
+			newDrivesBitmask &= andBitmask;
+			}
+		}
+
+	if (newDrivesBitmask != oldDrivesBitmask)
+		{
+		// Write back the updated installed drives and list 
+		_LIT(KUpdateInstalledDrives, "UPDATE Components SET InstalledDrives=? WHERE ComponentId=?;");
+		TInt numberOfValues = 2;
+		ExecuteStatementL(KUpdateInstalledDrives, numberOfValues, EValueInteger, newDrivesBitmask, EValueInteger, aComponentId);
+		}
+	}
+
+void CScrRequestImpl::RegisterComponentFileL(const RMessage2& aMessage)
+   	{
+	DEBUG_PRINTF(_L8("Registering component file."));
+   	
+   	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+   	HBufC* fileName = ReadFileNameFromMsgLC(aMessage);
+ 	TBool considerFileInDrivesList = aMessage.Int2();	
+   	TUint32 hash = HashCaseInsensitiveL(*fileName);
+	TDriveUnit drive(*fileName);
+   	TVolumeInfo volInfo;
+   	
+   	_LIT(KInsertFile, "INSERT INTO ComponentsFiles(ComponentId,LocationHash,Location) VALUES(?,?,?);");
+   	TInt numberOfValues = 3;
+   	ExecuteStatementL(KInsertFile(), numberOfValues, EValueInteger, componentId, EValueInteger, hash, EValueString, fileName);
+   	// Reflect this file addition in the installed drives field of the components table
+	// Or the drive list is updated in case of a FILENULL operation on a removable drive
+   	// If this step fails (for example, this file name is incorrect) then we cannot register the file
+ 	if (KErrNone == iFs.Volume(volInfo, drive) || considerFileInDrivesList)
+ 		UpdateInstalledDrivesL(componentId, *fileName, EFileRegistered);
+ 	
+   	CleanupStack::PopAndDestroy(fileName);
+   	}
+
+void CScrRequestImpl::SetFileStrPropertyL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting file string property."));
+	
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);	
+	HBufC* fileName  = ReadFileNameFromMsgLC(aMessage);
+	
+	TInt compFileId = FindComponentFileL(*fileName, componentId);
+		
+	HBufC* propName  = ReadDescLC(aMessage, 2);
+	TPropertyType propType(CScrRequestImpl::EPropertyUndefined);
+	TInt propertyId = FindGeneralPropertyNoLocaleDowngradeL(KFilePropertiesTable(), KCompFileIdColumnName(), compFileId, *propName, KLangNone, propType);
+	
+	HBufC8* propValue = ReadDesc8LC(aMessage, 3);
+	SetGeneralBinaryPropertyL(propType, propertyId, KFilePropertiesTable(), KCompFileIdColumnName(), compFileId, *propName, *propValue);
+	CleanupStack::PopAndDestroy(3, fileName);
+	}
+
+void CScrRequestImpl::SetFileIntPropertyL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting integer file property."));
+		
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	HBufC* fileName  = ReadFileNameFromMsgLC(aMessage);
+	TInt compFileId = FindComponentFileL(*fileName, componentId);
+	
+	HBufC* propName  = ReadDescLC(aMessage, 2);
+	TPropertyType propType(CScrRequestImpl::EPropertyUndefined);
+	TInt propertyId = FindGeneralPropertyNoLocaleDowngradeL(KFilePropertiesTable(), KCompFileIdColumnName(), compFileId, *propName, KLangNone, propType);
+	
+	TInt propValue   = aMessage.Int3();
+	SetGeneralIntPropertyL(propType, propertyId, KFilePropertiesTable(), KCompFileIdColumnName(), compFileId, *propName, propValue);
+	CleanupStack::PopAndDestroy(2, fileName);
+	}
+
+void CScrRequestImpl::SetComponentLocalizableL(TComponentId aComponentId, TLanguage aLocale, const TDesC& aColumnName, const TDesC& aName, const TDesC& aVendor)
+	{
+	DEBUG_PRINTF(_L8("Setting component Localizable."));
+	
+	_LIT(KFindComponentLocalizable, "SELECT CompLocalId FROM ComponentLocalizables WHERE ComponentId=? AND Locale=?;");
+	TInt numberOfValues = 2;
+	CStatement *stmt = CreateStatementObjectWithLocaleL(KFindComponentLocalizable, aLocale, numberOfValues, EValueInteger, aComponentId, EValueLanguage);	
+	
+	if(!stmt)
+		{// Add a new name for this component
+		AddComponentLocalizablesL(aComponentId, aLocale, aName, aVendor);
+		}
+	else
+		{// Exists, update the localizable field of the component
+		CleanupStack::PushL(stmt);
+		TInt compLocId = stmt->IntColumnL(0);
+		_LIT(KUpdateComponentName, "UPDATE ComponentLocalizables SET %S=? WHERE CompLocalId=?;");
+		HBufC *statementStr = FormatStatementLC(KUpdateComponentName, aColumnName.Length(), &aColumnName);
+		const TDesC *value = aName.Length() ? &aName : &aVendor;
+		TInt numberOfValues = 2;
+		ExecuteStatementL(*statementStr, numberOfValues, EValueString, value, EValueInteger, compLocId);
+		CleanupStack::PopAndDestroy(2, stmt); // stmt, statementStr
+		}
+	}
+
+void CScrRequestImpl::SetComponentNameL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting component name."));
+	
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	HBufC *componentName = ReadDescLC(aMessage, 1);
+	if (!componentName->CompareF(KNullDesC()))
+		{// Component name cannot be empty
+		DEBUG_PRINTF(_L8("Component name cannot be set or modified to a NULL string."));
+		User::Leave(KErrArgument);
+		}	
+		
+	TLanguage locale = TLanguage(aMessage.Int2());
+	_LIT(KComponentNameField,"Name");
+	SetComponentLocalizableL(componentId, locale, KComponentNameField, *componentName, KNullDesC());
+	CleanupStack::PopAndDestroy(componentName);
+	}
+
+void CScrRequestImpl::SetVendorNameL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting vendor name."));
+	
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	HBufC *vendorName = ReadDescLC(aMessage, 1);
+	TLanguage locale = TLanguage(aMessage.Int2());
+	_LIT(KComponentVendorField,"Vendor");
+	SetComponentLocalizableL(componentId, locale, KComponentVendorField, KNullDesC(), *vendorName);
+	CleanupStack::PopAndDestroy(vendorName);
+	}
+
+void CScrRequestImpl::ReadAndSetCommonComponentPropertyL(const RMessage2& aMessage, const TDesC& aPropertyColumn)
+	{
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	TInt propertyValue = aMessage.Int1();
+	
+	_LIT(KUpdateCommonProperty, "UPDATE Components SET %S=? WHERE ComponentId=?;");
+	TInt formattedLen = aPropertyColumn.Length();
+	HBufC *statementStr = FormatStatementLC(KUpdateCommonProperty(), formattedLen, &aPropertyColumn );
+	TInt numberOfValues = 2;
+	ExecuteStatementL(*statementStr, numberOfValues, EValueInteger, propertyValue, EValueInteger, componentId);
+	CleanupStack::PopAndDestroy(statementStr);
+	}
+
+void CScrRequestImpl::SetIsComponentRemovableL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting the component's removable attribute."));
+	_LIT(KColumnNameRemovable, "Removable");
+	ReadAndSetCommonComponentPropertyL(aMessage, KColumnNameRemovable);
+	}
+
+void CScrRequestImpl::SetIsComponentDrmProtectedL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting the component's DRM protected attribute."));
+	_LIT(KColumnNameDrmProtected, "DRMProtected");
+	ReadAndSetCommonComponentPropertyL(aMessage, KColumnNameDrmProtected);	
+	}
+
+void CScrRequestImpl::SetIsComponentHiddenL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting the component's hidden attribute."));
+	_LIT(KColumnNameHidden, "Hidden");
+	ReadAndSetCommonComponentPropertyL(aMessage, KColumnNameHidden);		
+	}
+
+void CScrRequestImpl::SetIsComponentKnownRevokedL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting the component's known-revoked attribute."));
+	_LIT(KColumnNameKnownRevoked, "KnownRevoked");
+	ReadAndSetCommonComponentPropertyL(aMessage, KColumnNameKnownRevoked);	
+	}
+
+void CScrRequestImpl::SetIsComponentOriginVerifiedL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting the component's removable attribute."));
+	_LIT(KColumnNameOriginVerified, "OriginVerified");
+	ReadAndSetCommonComponentPropertyL(aMessage, KColumnNameOriginVerified);	
+	}
+		
+void CScrRequestImpl::SetComponentSizeL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting the component's install-time size."));
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	TInt64 componentSize = MAKE_TINT64(aMessage.Int1(), aMessage.Int2());
+	if (componentSize < 0)
+		{
+		DEBUG_PRINTF2(_L8("Received incorrect component size: %d."), componentSize);
+		User::Leave(KErrArgument);
+		}
+	_LIT(KUpdateComponentSize, "UPDATE Components SET Size=? WHERE ComponentId=?;");
+	TInt numberOfValues = 2;
+	ExecuteStatementL(KUpdateComponentSize, numberOfValues, EValueInteger64, componentSize, EValueInteger, componentId);
+	}
+
+TBool FindLogEntryWithComponentId(const TComponentId *aKey, const CScrLogEntry& aEntry)
+	{
+	return (*aKey == aEntry.ComponentId()); 
+	}
+
+void CScrRequestImpl::SetComponentVersionL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting component version."));
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	HBufC *version = ReadDescLC(aMessage, 1);
+	
+	_LIT(KUpdateVersion, "UPDATE Components SET Version=? WHERE ComponentId=?;");
+	TInt numberOfValues = 2;
+	ExecuteStatementL(KUpdateVersion, numberOfValues, EValueString, version, EValueInteger, componentId);
+	
+	TInt logIdx = iLogEntries.Find(componentId, FindLogEntryWithComponentId);
+	if(KErrNotFound == logIdx)
+		{
+		CleanupStack::PopAndDestroy(version);
+		return;
+		}
+	DeleteObjectZ(iLogEntries[logIdx]->iVersion);
+	iLogEntries[logIdx]->iVersion = version; // Ownership is transferred
+	CleanupStack::Pop(version);
+	}
+
+void CScrRequestImpl::DeleteComponentPropertyL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Deleting component property."));
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	HBufC *name = ReadDescLC(aMessage, 1);
+	
+	_LIT(KDeleteComponentProperty, "DELETE FROM ComponentProperties WHERE Name=? AND ComponentId=?;");
+	TInt numberOfValues = 2;
+	ExecuteStatementL(KDeleteComponentProperty, numberOfValues, EValueString, name, EValueInteger, componentId);
+	CleanupStack::PopAndDestroy(name);
+	}
+
+void CScrRequestImpl::DeleteFilePropertyL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Deleting file property."));
+	
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	HBufC* fileName  = ReadFileNameFromMsgLC(aMessage);
+	
+	TInt compFileId = FindComponentFileL(*fileName, componentId);
+	HBufC *propName = ReadDescLC(aMessage, 2);
+	
+	_LIT(KDeleteFileProperty, "DELETE FROM FileProperties WHERE CmpFileId=? AND Name=?;");
+	TInt numberOfValues = 2;
+	ExecuteStatementL(KDeleteFileProperty, numberOfValues, EValueInteger, compFileId, EValueString, propName);
+	CleanupStack::PopAndDestroy(2, fileName);
+	}
+
+void CScrRequestImpl::UnregisterComponentFileL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Unregistering a component file."));
+	
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	HBufC* fileName  = ReadFileNameFromMsgLC(aMessage);
+	
+	TInt compFileId = GetComponentFileIdL(*fileName, componentId);
+	if (compFileId == KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy(fileName);
+		return; // If the file is not registered, we do not return an error - this sort of condition is better enforced at upper layers 
+		}
+		
+	_LIT(KDeleteComponentFileProperties, "DELETE from FileProperties WHERE CmpFileId=?;");
+	TInt numberOfValues = 1;
+	ExecuteStatementL(KDeleteComponentFileProperties, numberOfValues, EValueInteger, compFileId);
+	DEBUG_PRINTF3(_L("Properties of the file(%S) of the component(%d) have been deleted."), fileName, componentId);
+
+	_LIT(KUnregisterComponentFile, "DELETE FROM ComponentsFiles WHERE CmpFileId=?;");
+	ExecuteStatementL(KUnregisterComponentFile, numberOfValues, EValueInteger, compFileId);
+
+	// Reflect this file deletion in the installed drives field of the components table
+	UpdateInstalledDrivesL(componentId, *fileName, EFileUnregistered);
+	CleanupStack::PopAndDestroy(fileName);
+	}
+
+void ReadNullableStringFromStatementL(CStatement& aStmt, TPtrC& aValue, TInt aFieldNum)
+	{
+	aValue.Set(KNullDesC());
+	if(!aStmt.IsFieldNullL(aFieldNum))
+		{ // If the value is not NULL, set it.
+		aValue.Set(aStmt.StrColumnL(aFieldNum));
+		}
+	}
+
+void CScrRequestImpl::DeleteComponentL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Deleting a component."));
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	
+	// first delete the applications associated with this id if there are any
+	DeleteAllAppsWithinPackageInternalL(componentId);
+	
+	// Create the log record before deleting the component
+	_LIT(KSelectComponentInfo, "SELECT SoftwareTypeName,GlobalId,Version FROM Components WHERE ComponentId=?;");
+	CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectComponentInfo);
+	stmt->BindIntL(1, componentId);
+	
+	// if the component doesn't exist, the code shouldn't come here. It should have left with KErrNotFound at security check level.
+	__ASSERT_ALWAYS(stmt->ProcessNextRowL(), User::Leave(KErrAbort));
+	
+	CComponentEntry *entry2bDeleted = CComponentEntry::NewLC();
+	entry2bDeleted->iSwType = stmt->StrColumnL(0).AllocL();
+	
+	TPtrC globalId;
+	ReadNullableStringFromStatementL(*stmt, globalId, 1);
+	if(globalId.Length() > 0)
+		{
+		CGlobalComponentId *globalIdObj = ParseGlobalComponendIdLC(globalId);
+		entry2bDeleted->iGlobalId = globalIdObj->GlobalIdName().AllocL();
+		CleanupStack::PopAndDestroy(globalIdObj);
+		}
+	else
+		{
+		entry2bDeleted->iGlobalId = globalId.AllocL();
+		}
+	TPtrC version;
+	ReadNullableStringFromStatementL(*stmt, version, 2);
+	entry2bDeleted->iVersion = version.AllocL();
+	AddComponentEntryLocalizablesL(componentId, *entry2bDeleted, KUnspecifiedLocale);
+
+	CScrLogEntry *logRecord = CScrLogEntry::NewL(entry2bDeleted->Name(), entry2bDeleted->SoftwareType(), entry2bDeleted->GlobalId(), entry2bDeleted->Version(), EScrCompUnInstall);
+	logRecord->iComponentId = componentId;
+	CleanupStack::PopAndDestroy(2, stmt); // stmt, entry2bDeleted
+	CleanupStack::PushL(logRecord);
+	
+	// Now begin the component deletion
+	TInt numberOfValues = 1;
+	_LIT(KDeleteComponentProperties,"DELETE FROM ComponentProperties WHERE ComponentId=?;");
+	ExecuteStatementL(KDeleteComponentProperties, numberOfValues, EValueInteger, componentId);
+	DEBUG_PRINTF2(_L8("Properties of component(%d) have been deleted."), componentId);
+	
+	_LIT(KDeleteComponentFileProperties, "DELETE from FileProperties WHERE CmpFileId IN \
+				(SELECT CmpFileId FROM ComponentsFiles WHERE ComponentId=?);");
+	ExecuteStatementL(KDeleteComponentFileProperties, numberOfValues, EValueInteger, componentId);
+	DEBUG_PRINTF2(_L8("Properties of files of component(%d) have been deleted."), componentId);
+
+	_LIT(KDeleteComponentFiles, "DELETE FROM ComponentsFiles WHERE ComponentId=?;");
+	ExecuteStatementL(KDeleteComponentFiles, numberOfValues, EValueInteger, componentId);
+	DEBUG_PRINTF2(_L8("File registrations of component(%d) have been deleted."), componentId);
+
+	_LIT(KDeleteComponentLocalizables, "DELETE FROM ComponentLocalizables WHERE ComponentId=?;");
+	ExecuteStatementL(KDeleteComponentLocalizables, numberOfValues, EValueInteger, componentId);
+	DEBUG_PRINTF2(_L8("Localizables of component(%d) have been deleted."), componentId);
+	
+	// Delete all dependencies where this component is dependant
+	_LIT(KDeleteComponentDependencies, "DELETE FROM ComponentDependencies WHERE DependantGlobalIdHash IN \
+				(SELECT GlobalIdHash FROM Components WHERE ComponentId=?);");
+	ExecuteStatementL(KDeleteComponentDependencies, numberOfValues, EValueInteger, componentId);
+	DEBUG_PRINTF2(_L8("Dependencies of component(%d) have been deleted."), componentId);
+	
+	_LIT(KDeleteComponents, "DELETE FROM Components WHERE ComponentId=?;");
+	ExecuteStatementL(KDeleteComponents, numberOfValues, EValueInteger, componentId);
+	DEBUG_PRINTF2(_L8("Finally component(%d) has been deleted."), componentId);
+	
+	// Add log record
+	iLogEntries.Append(logRecord);
+	CleanupStack::Pop(logRecord); // Ownership is transferred
+	}
+
+void CScrRequestImpl::DeleteComponentDependencyL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Deleting a component dependency."));
+	
+	HBufC *suppGlobalId = ReadAndGetGlobalIdLC(aMessage, 1);
+	HBufC *depGlobalId = ReadAndGetGlobalIdLC(aMessage, 2);
+	TUint32 globalIdsHash = HashGlobalIdsL(*depGlobalId, *suppGlobalId);
+	CleanupStack::PopAndDestroy(2, suppGlobalId); // suppGlobalId,depGlobalId
+	
+	_LIT(KDeleteDependency, "DELETE FROM ComponentDependencies WHERE GlobalIdHash=?;");
+	TInt numberOfValues = 1;
+	ExecuteStatementL(KDeleteDependency(), numberOfValues, EValueInteger, globalIdsHash);
+	}
+
+TBool CScrRequestImpl::BindAndProcessStatementObjectL(CStatement& aStatementObj, TLanguage aLanguage, TInt aValuesNum, VA_LIST aList) const
+	{
+	aStatementObj.ResetL();
+	BindStatementValuesL(aStatementObj, aLanguage, aValuesNum, aList);
+	return aStatementObj.ProcessNextRowL();
+	}
+
+CStatement* CScrRequestImpl::CreateStatementObjectWithoutLocaleL(const TDesC& aStatement, TInt aValuesNum,...) const	
+	{
+	VA_LIST argList;
+	VA_START(argList, aValuesNum);
+	
+	CStatement *stmt = iDbHandle->PrepareStatementLC(aStatement);
+	
+	// The language parameter is irrelevant. The BindAndProcessStatementObjectL is reused here to avoid code duplication. 
+	TBool success = BindAndProcessStatementObjectL(*stmt, ELangNone, aValuesNum, argList);
+	
+	VA_END(argList);
+	
+	if(!success)
+		{ // if the code reaches here, it means there is no record for the given criteria
+		CleanupStack::PopAndDestroy(stmt);
+		return NULL;
+		}
+	CleanupStack::Pop(stmt);
+	return stmt;	
+	}
+
+CStatement* CScrRequestImpl::CreateStatementObjectWithLocaleNoDowngradeL(const TDesC& aStatement, TLanguage aLocale, TInt aValuesNum,...) const	
+	{
+	VA_LIST argList;
+	VA_START(argList, aValuesNum);	
+	
+	CStatement *stmt = iDbHandle->PrepareStatementLC(aStatement);	
+	TBool success = BindAndProcessStatementObjectL(*stmt, aLocale, aValuesNum, argList);
+		
+	if(!success)
+		{ // if the code reaches here, it means there is no record for the given criteria		
+		CleanupStack::PopAndDestroy(stmt);			
+		return NULL;
+		}
+		
+	CleanupStack::Pop(stmt);	
+	return stmt;
+	
+	}
+
+// This function tries automatically downgrading languages to the nearest locale	
+CStatement* CScrRequestImpl::CreateStatementObjectWithLocaleL(const TDesC& aStatement, TLanguage aLocale, TInt aValuesNum,...) const
+	{
+	VA_LIST argList;
+	VA_START(argList, aValuesNum);
+	
+	CStatement *stmt = iDbHandle->PrepareStatementLC(aStatement);
+	//Avoiding call to BAFL for the current locale. If succeeds, BAFL will not be invoked
+	TBool success = BindAndProcessStatementObjectL(*stmt, aLocale, aValuesNum, argList);	
+    VA_START(argList, aValuesNum);
+	
+	if ( !success )
+	   {
+       // Run the given statement for the passed or its equivalent languages
+       // First, get the Equivalent Language path for the given locale. The first element
+       // in the array is the given language.		
+       TLanguagePath equivalentLanguages;
+       BaflUtils::GetEquivalentLanguageList(aLocale, equivalentLanguages);
+    
+       TInt i = 1; //skipping the current locale
+       while ( equivalentLanguages[i] != ELangNone && !success)	
+           {
+           success = BindAndProcessStatementObjectL(*stmt, equivalentLanguages[i], aValuesNum, argList);
+           VA_START(argList, aValuesNum);
+           i++;
+           }
+       VA_END(argList);
+        
+       if(!success)
+           { // if the code reaches here, it means there is no record for the given criteria       
+           CleanupStack::PopAndDestroy(stmt);          
+           return NULL;
+           }
+	    }
+	else
+		{
+		VA_END(argList);
+		}
+
+	CleanupStack::Pop(stmt);	
+	return stmt;
+	}
+
+CComponentEntry* CScrRequestImpl::CreateComponentEntryFromStatementHandleL(CStatement& aStmt) const
+	{
+	TComponentId componentId = aStmt.IntColumnL(0);
+	TInt removable = aStmt.IntColumnL(3);
+	TInt64 size = aStmt.Int64ColumnL(4);
+	TScomoState scomoState = TScomoState(aStmt.IntColumnL(5));
+	
+	TInt drmProtected = aStmt.IntColumnL(6);
+	TInt hidden = aStmt.IntColumnL(7);
+	TInt knownRevoked = aStmt.IntColumnL(8);
+	TInt originVerified = aStmt.IntColumnL(9);
+	
+	TPtrC globalIdDes;
+	ReadNullableStringFromStatementL(aStmt, globalIdDes, 10);
+	HBufC *globalId = NULL;
+	if(globalIdDes.Length())
+		{ // if global id is not NULL
+		CGlobalComponentId *globalIdObj = ParseGlobalComponendIdLC(globalIdDes);
+		globalId = globalIdObj->GlobalIdName().AllocL();
+		CleanupStack::PopAndDestroy(globalIdObj);
+		CleanupStack::PushL(globalId);
+		}
+	else
+		{ // Global Id is NULL
+		globalId = KNullDesC().AllocLC();
+		}
+	
+	TInt installedDrivesBitmask = aStmt.IntColumnL(11);
+	// Convert bitmask to TDriveList
+	TDriveList installedDriveList;
+	installedDriveList.FillZ(KMaxDrives);
+	for (TInt i = 0; i < KMaxDrives && installedDrivesBitmask > 0; ++i, installedDrivesBitmask >>= 1)
+		{
+		installedDriveList[i] = installedDrivesBitmask & 0x1;
+		}
+	
+	TPtrC version(KNullDesC());
+	if(!aStmt.IsFieldNullL(12))
+		version.Set(aStmt.StrColumnL(12));
+	
+	TPtrC installTime = aStmt.StrColumnL(13);
+		
+	CComponentEntry *entry = CComponentEntry::NewL(componentId, KNullDesC, KNullDesC, KNullDesC, *globalId, removable, size, scomoState, installedDriveList, version, installTime, drmProtected, hidden, knownRevoked, originVerified);
+	CleanupStack::PopAndDestroy(globalId);
+	return entry;
+	}
+
+//
+// aLocalizableStmtStr = A SELECT statement which queries a table for a specific locale. In other words, the statement has got a locale condition.
+// aAnyValueStmtStr = A SELECT statement which doesn't contain a locale condition. The result row set will include records with any locale.
+// aConditionIntValue = The value of the integer condition of the statements given.
+// aConditionLocale = The value of the locale condition of the localizable statement (first parameter).
+//
+CStatement* CScrRequestImpl::ExecuteLocalizableStatementL(const TDesC& aLocalizableStmtStr, const TDesC& aAnyValueStmtStr, TInt aConditionIntValue, TLanguage aConditionLocale) const
+	{
+	TInt numberOfValues = 2;
+	CStatement *stmtLoc(0);
+	
+	if(KUnspecifiedLocale == aConditionLocale)
+		{
+		// The locale is not specified. So, first try to run the statement for the current locale and its downgraded languages.
+		stmtLoc = CreateStatementObjectWithLocaleL(aLocalizableStmtStr, User::Language(), numberOfValues, EValueInteger, aConditionIntValue, EValueLanguage);
+		if (!stmtLoc)
+			{
+			// No result for the current locale at all. Try to find non-localized values.
+			stmtLoc = CreateStatementObjectWithLocaleL(aLocalizableStmtStr, KNonLocalized, numberOfValues, EValueInteger, aConditionIntValue, EValueLanguage);			
+			}
+
+		if (!stmtLoc)
+			{
+			// No result for the current locale or the non-localized, "neutral" locale. Try finding any locale
+			stmtLoc = CreateStatementObjectWithoutLocaleL(aAnyValueStmtStr, 1, EValueInteger, aConditionIntValue);		
+			}
+		}
+		else if(KNonLocalized == aConditionLocale)
+			{
+			// Only non-localized names are requested.
+			stmtLoc = CreateStatementObjectWithLocaleL(aLocalizableStmtStr, KNonLocalized, numberOfValues, EValueInteger, aConditionIntValue, EValueLanguage);
+			}
+		else
+			{
+			// Names are requested for a particular locale.
+			stmtLoc = CreateStatementObjectWithLocaleL(aLocalizableStmtStr, aConditionLocale, numberOfValues, EValueInteger, aConditionIntValue, EValueLanguage);
+			}
+	
+	return stmtLoc;
+	}
+
+void CScrRequestImpl::AddComponentEntryLocalizablesL(TComponentId aComponentId, CComponentEntry& aEntry, TLanguage aLocale) const
+	{
+	DEBUG_PRINTF(_L8("Adding Component Entry Localizables."));
+	_LIT(KSelectLocalizableNames, "SELECT Name,Vendor FROM ComponentLocalizables WHERE ComponentId=? AND Locale=?;");
+	_LIT(KSelectAnyNames, "SELECT Name,Vendor FROM ComponentLocalizables WHERE ComponentId=?;");
+	
+	CStatement *stmtLoc = ExecuteLocalizableStatementL(KSelectLocalizableNames, KSelectAnyNames, aComponentId, aLocale);	
+	if(!stmtLoc)
+		{
+		DEBUG_PRINTF3(_L8("Name and Vendor couldn't be found for the component (%d) and locale(%d)."), aComponentId, aLocale);
+		User::Leave(KErrScrUnsupportedLocale);
+		}
+
+	CleanupStack::PushL(stmtLoc);	
+		
+	TPtrC name(stmtLoc->StrColumnL(0));
+	TPtrC vendor(stmtLoc->StrColumnL(1));
+	DeleteObjectZ(aEntry.iName);
+	aEntry.iName = name.AllocL(); // Ownership is transferred to the entry object
+	DeleteObjectZ(aEntry.iVendor);
+	if ( 0 != vendor.Ptr())
+		aEntry.iVendor = vendor.AllocL(); // Ownership is transferred to the entry object
+	else
+		aEntry.iVendor = HBufC::NewL(1);
+	
+	CleanupStack::PopAndDestroy(stmtLoc);
+	}
+
+void CScrRequestImpl::AddSoftwareTypeNameToComponentEntryL(CStatement& aStmt, CComponentEntry& aEntry, TLanguage aLocale) const
+	{
+	DEBUG_PRINTF(_L8("Adding SoftwareType Name To Component Entry."));
+	TInt softwareTypeId = aStmt.IntColumnL(1);
+	_LIT(KSelectLocalizableSwTypeName, "SELECT Name FROM SoftwareTypeNames WHERE SoftwareTypeId=? AND Locale=?;");
+	CStatement *stmtLoc = ExecuteLocalizableStatementL(KSelectLocalizableSwTypeName, KSelectLocalizableSwTypeName, softwareTypeId, aLocale);
+	if(stmtLoc)
+		{
+		CleanupStack::PushL(stmtLoc);
+		TPtrC name(stmtLoc->StrColumnL(0));
+		DeleteObjectZ(aEntry.iSwType);
+		aEntry.iSwType = name.AllocL(); // Ownership is transferred to the entry object
+		CleanupStack::PopAndDestroy(stmtLoc);
+		return;
+		}
+	
+	// The software type doesn't exist or there is no localized name of the software type, add the unique software type name
+	TPtrC uniqueSwTypeName = aStmt.StrColumnL(2);
+	DeleteObjectZ(aEntry.iSwType);
+	aEntry.iSwType = uniqueSwTypeName.AllocL(); // Ownership is transferred to the entry object
+	}
+
+void CScrRequestImpl::GetGeneralComponentEntrySizeL(const RMessage2& aMessage, const TDesC& aConditionColumn, TUint32 aConditionValue, TInt aReturnSizeSlot, TLanguage aLocale, CComponentEntry*& aComponentEntry) const
+	{
+	_LIT(KSelectComponents, "SELECT ComponentId,SoftwareTypeId,SoftwareTypeName,Removable,Size,ScomoState,DRMProtected,Hidden,KnownRevoked,OriginVerified,GlobalId,InstalledDrives,Version,InstallTime FROM Components WHERE %S=?;");
+	
+	TInt formattedLen = aConditionColumn.Length();
+	HBufC *statementStr = FormatStatementLC(KSelectComponents(), formattedLen, &aConditionColumn);
+	CStatement *stmt = iDbHandle->PrepareStatementLC(*statementStr);
+	stmt->BindIntL(1, aConditionValue);
+		
+	if(!stmt->ProcessNextRowL())
+		{
+		DEBUG_PRINTF2(_L8("The component(%d) couldn't be found. The size returned is zero."), aConditionValue);
+		WriteIntValueL(aMessage, aReturnSizeSlot, 0);
+		CleanupStack::PopAndDestroy(2, statementStr); // statementStr, stmt
+		return;
+		}
+		
+	DeleteObjectZ(aComponentEntry);
+	aComponentEntry = CreateComponentEntryFromStatementHandleL(*stmt);
+	AddComponentEntryLocalizablesL(aComponentEntry->ComponentId(), *aComponentEntry, aLocale);
+	AddSoftwareTypeNameToComponentEntryL(*stmt, *aComponentEntry, aLocale);
+	
+	WriteObjectSizeL(aMessage, aReturnSizeSlot, aComponentEntry);
+	CleanupStack::PopAndDestroy(2, statementStr); // statementStr, stmt
+	}
+
+void CScrRequestImpl::GetComponentEntrySizeL(const RMessage2& aMessage) const
+	{
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	DEBUG_PRINTF2(_L8("Returning the entry size of component(%d)."), componentId);
+	TLanguage locale = TLanguage(aMessage.Int1());
+	
+	_LIT(KConditionColumn, "ComponentId");
+	TInt returnSizeSlot=2;
+	GetGeneralComponentEntrySizeL(aMessage, KConditionColumn(), componentId, returnSizeSlot, locale, iComponentEntry);
+	}
+	
+void CScrRequestImpl::GetComponentEntryDataL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning the component entry data."));
+	WriteObjectDataL(aMessage, 0, iComponentEntry);
+	DeleteObjectZ(iComponentEntry); // Delete the object to prevent it to be resent.
+	}
+
+void CScrRequestImpl::GetComponentLocalizedEntrySizeL(const RMessage2& aMessage) const
+    {
+    TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+    DEBUG_PRINTF2(_L8("Returning the localized information entry size of component(%d)."), componentId);
+    _LIT(KSelectMatchingSupportedLocales, "SELECT Locale, Name, Vendor FROM ComponentLocalizables WHERE ComponentId=?;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectMatchingSupportedLocales);
+    stmt->BindIntL(1, componentId);
+    while(stmt->ProcessNextRowL())
+       {
+        TPtrC name(stmt->StrColumnL(1));
+        TPtrC vendor(stmt->StrColumnL(2));
+        TInt locale(stmt->IntColumnL(0)); 
+        CLocalizableComponentInfo *compLocalizedInfo = Usif::CLocalizableComponentInfo::NewLC( name, vendor,(TLanguage)locale);
+        iCompLocalizedInfoArray.Insert(compLocalizedInfo,iCompLocalizedInfoArray.Count());
+        CleanupStack::Pop(compLocalizedInfo);
+        }
+    // Release allocated memories
+    CleanupStack::PopAndDestroy(1, stmt); // stmt
+    WriteArraySizeL(aMessage, 1, iCompLocalizedInfoArray);
+    }
+
+void CScrRequestImpl::GetComponentLocalizedEntryDataL(const RMessage2& aMessage) const
+    {
+    DEBUG_PRINTF(_L8("Returning the localized information entry data."));
+    WriteArrayDataL(aMessage, 0, iCompLocalizedInfoArray);
+    iCompLocalizedInfoArray.ResetAndDestroy(); 
+    }
+
+TBool CompareProperties(const CPropertyEntry& aRhs, const CPropertyEntry& aLhs)
+	{
+	return ((aRhs.PropertyType() == aLhs.PropertyType()) && 
+		   (aRhs.PropertyName() == aLhs.PropertyName()));		   
+	}
+
+void CScrRequestImpl::AddGeneralPropertiesArrayWithLocaleL(const TDesC& aStmtStr, TLanguage aLocale, TComponentId aIdColumnValue, RPointerArray<CPropertyEntry>& aProperties) const
+	{
+	DEBUG_PRINTF(_L8("Adding General Properties Array With Locale."));
+	
+	TInt numberOfValues = 2;
+	CStatement *stmt = CreateStatementObjectWithLocaleL(aStmtStr, aLocale, numberOfValues, EValueInteger, aIdColumnValue, EValueLanguage);
+	if(!stmt)
+		{
+		return;
+		}
+	CleanupStack::PushL(stmt);	
+	do
+		{
+		TPtrC name(stmt->StrColumnL(0));
+		CPropertyEntry *entry = GetPropertyEntryL(*stmt, name, 1); // aStartingIndex=1
+		CleanupStack::PushL(entry);
+		if(KErrNotFound == aProperties.Find(entry, TIdentityRelation<CPropertyEntry>(CompareProperties)))
+			{
+			aProperties.AppendL(entry);
+			CleanupStack::Pop(entry);	// because array is now owner
+			}
+		else
+			{
+			CleanupStack::PopAndDestroy(entry);
+			}
+		} while(stmt->ProcessNextRowL());
+	CleanupStack::PopAndDestroy(stmt);
+	}
+
+void CScrRequestImpl::GetGeneralPropertiesArrayL(const TDesC& aTableName, const TDesC& aIdColumnName , TComponentId aIdColumnValue, TLanguage aLocale, RPointerArray<CPropertyEntry>& aProperties) const
+	{
+	DEBUG_PRINTF(_L8("Returning General Properties Array."));
+	
+	_LIT(KSelectGeneralLocalizableProperties, "SELECT Name,IntValue,StrValue,Locale,IsStr8Bit FROM %S WHERE %S=? AND Locale=?;");
+	TInt formattedLen = aTableName.Length() + aIdColumnName.Length();
+	HBufC *statementStr = FormatStatementLC(KSelectGeneralLocalizableProperties, formattedLen, &aTableName, &aIdColumnName );
+	
+	if(KUnspecifiedLocale == aLocale)
+		{
+		// Locale is not specified. First get non-localized properties
+		AddGeneralPropertiesArrayWithLocaleL(*statementStr, KNonLocalized, aIdColumnValue, aProperties);		
+		// Then get the localizable properties with the current locale
+		AddGeneralPropertiesArrayWithLocaleL(*statementStr, User::Language(), aIdColumnValue, aProperties);
+		}
+	else if(KNonLocalized == aLocale)
+		{
+		// Only non-localized properties are requested.
+		AddGeneralPropertiesArrayWithLocaleL(*statementStr, KNonLocalized, aIdColumnValue, aProperties);
+		}
+	else
+		{
+		// Locale is specified. It means that only properties with this locale are wanted
+		AddGeneralPropertiesArrayWithLocaleL(*statementStr, aLocale, aIdColumnValue, aProperties);
+		}
+	
+	CleanupStack::PopAndDestroy(statementStr);
+#ifdef _DEBUG		
+	if(!aProperties.Count())
+		DEBUG_PRINTF4(_L("Property couldn't be found for column name=(%S), column id=%d and locale=%d."), &aIdColumnName, aIdColumnValue, aLocale);
+#endif
+	}
+
+void CScrRequestImpl::GetFilePropertiesSizeL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning the size of file properties."));
+	
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	HBufC* fileName  = ReadFileNameFromMsgLC(aMessage);
+	
+	TInt compFileId = FindComponentFileL(*fileName, componentId);
+	
+	iProperties.ResetAndDestroy();
+	GetGeneralPropertiesArrayL(KFilePropertiesTable(), KCompFileIdColumnName, compFileId, KNonLocalized, iProperties);
+	CleanupStack::PopAndDestroy(fileName);
+	WriteArraySizeL(aMessage, 2, iProperties);
+	}
+
+void CScrRequestImpl::GetFilePropertiesDataL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning the file properties data."));
+	WriteArrayDataL(aMessage, 0, iProperties);	
+	}
+
+CPropertyEntry* CScrRequestImpl::GetPropertyEntryL(CStatement& aStmt, const TDesC& aPropName, TInt aStartingIndex) const
+	{
+	DEBUG_PRINTF(_L8("Returning the file properties entry."));
+	
+	CPropertyEntry *entry(0);
+		
+	if(!aStmt.IsFieldNullL(aStartingIndex))
+		{
+		TInt64 intVal = aStmt.Int64ColumnL(aStartingIndex);
+		entry = CIntPropertyEntry::NewL(aPropName, intVal);
+		}
+	else if(!aStmt.IsFieldNullL(aStartingIndex+1))
+		{
+		TBool is8BitString = (aStmt.IntColumnL(aStartingIndex + 3) != 0);
+		if (is8BitString)
+			{
+			TPtrC8 binaryVal(aStmt.BinaryColumnL(aStartingIndex+1));
+			entry = CBinaryPropertyEntry::NewL(aPropName, binaryVal);			
+			}
+		else
+			{
+			TPtrC strVal(aStmt.StrColumnL(aStartingIndex+1));
+			TLanguage locale = TLanguage(aStmt.IntColumnL(aStartingIndex + 2));
+			entry = CLocalizablePropertyEntry::NewL(aPropName, strVal, locale);			
+			}
+		}
+	else
+		{// Should never come here - shows DB inconsistency
+		DEBUG_PRINTF(_L("Both integer and string values are NULL. Inconsistency problem!"));
+		User::Leave(KErrCorrupt);
+		}	
+	return entry;
+	}
+
+CPropertyEntry* CScrRequestImpl::GetGeneralSinglePropertyL(const TDesC& aTableName, const TDesC& aIdColumnName , TInt aIdColumnValue, const TDesC& aPropName,  TLanguage aLocale) const
+	{
+	DEBUG_PRINTF5(_L("Getting general single property for %S. PropName=%S, Id=%d, Locale=%d"), &aIdColumnName , &aPropName, aIdColumnValue, aLocale);
+	
+	_LIT(KSelectSingleGeneralProperty, "SELECT IntValue,StrValue,Locale,IsStr8Bit FROM %S WHERE Name=? AND %S=? AND Locale=?;");
+	TInt formattedLen = aTableName.Length() + aIdColumnName.Length();
+	HBufC *statementStr = FormatStatementLC(KSelectSingleGeneralProperty, formattedLen, &aTableName, &aIdColumnName );
+	
+	CStatement *stmt = CreateGeneralPropertyStatementWithLocaleL(*statementStr, aIdColumnValue, aLocale, aPropName);
+	if(!stmt)
+		{
+		DEBUG_PRINTF4(_L("Property couldn't be found for column name=(%S), column id=%d and locale=%d."), &aIdColumnName, aIdColumnValue, aLocale);
+		CleanupStack::PopAndDestroy(statementStr);
+		return NULL;
+		}
+	CleanupStack::PushL(stmt);
+	
+	CPropertyEntry *entry = GetPropertyEntryL(*stmt, aPropName, 0); // aStartingIndex=0 
+	CleanupStack::PopAndDestroy(2, statementStr); // statementStr, stmt
+	return entry;
+	}
+
+void CScrRequestImpl::GetSingleFilePropertySizeL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning the size of single file property."));
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	HBufC* fileName  = ReadFileNameFromMsgLC(aMessage);
+	HBufC *propName = ReadDescLC(aMessage, 2);
+	
+	TInt compFileId = FindComponentFileL(*fileName, componentId);
+	
+	DeleteObjectZ(iSingleProperty);
+	iSingleProperty = GetGeneralSinglePropertyL(KFilePropertiesTable(), KCompFileIdColumnName, compFileId, *propName, KNonLocalized);
+	CleanupStack::PopAndDestroy(2, fileName); // fileName, propName
+	WriteObjectSizeL(aMessage, 3, iSingleProperty);
+	}
+
+void CScrRequestImpl::GetSingleFilePropertyDataL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning the single file property data."));
+	WriteObjectDataL(aMessage, 0, iSingleProperty);	
+	DeleteObjectZ(iSingleProperty); // Delete the object to prevent it to be resent.
+	}
+
+void CScrRequestImpl::GetComponentFilesCountL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning the Component Files Count."));
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+
+	DEBUG_PRINTF2(_L8("Returning the files count for component %d."), componentId);
+	
+	_LIT(KGetComponentFilesCount, "SELECT COUNT(CmpFileId) FROM ComponentsFiles WHERE ComponentId=?;");
+	CStatement *stmt = iDbHandle->PrepareStatementLC(KGetComponentFilesCount);
+	stmt->BindIntL(1, componentId);
+
+	TBool res = stmt->ProcessNextRowL();
+	// DB Query did not return a single row for component files count query - internal error!
+	__ASSERT_ALWAYS(res, User::Leave(KErrAbort));
+
+	TInt filesCountTmp = stmt->IntColumnL(0);
+	__ASSERT_DEBUG(filesCountTmp >= 0, User::Leave(KErrAbort));
+	TUint filesCount = static_cast<TUint>(filesCountTmp);
+	CleanupStack::PopAndDestroy(stmt);
+	
+	TPckg<TUint> filesCountPkg(filesCount);
+	aMessage.WriteL(1, filesCountPkg);
+	}
+
+void CScrRequestImpl::GetFileComponentsL(const TDesC& aFileName, RArray<TComponentId>& aComponents) const
+	{
+	DEBUG_PRINTF(_L8("Returning the File Components."));
+	_LIT(KSelectFileComponents, "SELECT ComponentId FROM ComponentsFiles WHERE LocationHash=?;");
+	CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectFileComponents);
+	TUint32 hash = HashCaseInsensitiveL(aFileName);
+	stmt->BindIntL(1, hash);
+		
+	while(stmt->ProcessNextRowL())
+		{
+		User::LeaveIfError(aComponents.InsertInOrder(stmt->IntColumnL(0)));
+		}
+	CleanupStack::PopAndDestroy(stmt);
+	}
+
+void CScrRequestImpl::GetFileComponentsSizeL(const RMessage2& aMessage) const
+	{
+	HBufC *fileName = ReadDescLC(aMessage, 0);
+	
+	iFileComponents.Reset();
+	GetFileComponentsL(*fileName, iFileComponents);
+	CleanupStack::PopAndDestroy(fileName);
+	
+	WriteArraySizeL(aMessage, 1, iFileComponents);
+	}
+
+void CScrRequestImpl::GetFileComponentsDataL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning the File Components Data."));
+	WriteArrayDataL(aMessage, 0, iFileComponents);
+	}
+	
+void CScrRequestImpl::GetComponentPropertiesSizeL(const RMessage2& aMessage) const
+	{
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	TLanguage locale = TLanguage(aMessage.Int1());
+	
+	iProperties.ResetAndDestroy();
+	GetGeneralPropertiesArrayL(KComponentPropertiesTable(), KComponentIdColumnName, componentId, locale, iProperties);
+	WriteArraySizeL(aMessage, 2, iProperties);
+	}
+
+void CScrRequestImpl::GetComponentPropertiesDataL(const RMessage2& aMessage) const
+	{
+	WriteArrayDataL(aMessage, 0, iProperties);
+	}
+
+void CScrRequestImpl::GetComponentSinglePropertySizeL(const RMessage2& aMessage) const
+	{ 
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	HBufC *propName = ReadDescLC(aMessage, 1);
+	TLanguage locale = TLanguage(aMessage.Int2());
+	
+	DeleteObjectZ(iSingleProperty);
+	iSingleProperty = GetGeneralSinglePropertyL(KComponentPropertiesTable(), KComponentIdColumnName, componentId, *propName, locale);
+	CleanupStack::PopAndDestroy(propName);
+	WriteObjectSizeL(aMessage, 3, iSingleProperty);
+	}
+
+void CScrRequestImpl::GetComponentSinglePropertyDataL(const RMessage2& aMessage) const
+	{
+	WriteObjectDataL(aMessage, 0, iSingleProperty);
+	DeleteObjectZ(iSingleProperty); // Delete the object to prevent it to be resent.
+	}
+
+TUint32 CScrRequestImpl::ReadAndHashGlobalIdL(const RMessage2& aMessage, TInt aGlobalIdNameSlot, TInt aSwTypeNameSlot) const
+	{
+	HBufC *globalIdName = ReadDescLC(aMessage, aGlobalIdNameSlot);
+	HBufC *swTypeName = ReadDescLC(aMessage, aSwTypeNameSlot);
+	
+	// Concatenate the software type id with the global id name
+	HBufC *globalId = GenerateGlobalIdL(*swTypeName, *globalIdName);
+	CleanupStack::PushL(globalId);
+	// Hash the concatenated value
+	TUint32 globalIdHash = HashCaseSensitiveL(*globalId);
+	CleanupStack::PopAndDestroy(3, globalIdName); // globalIdName, swTypeName, concatGlobalId
+	return globalIdHash;
+	}
+
+void CScrRequestImpl::GetComponentIdL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning the local component id of a received global id."));
+	
+	TUint32 globalIdHash = ReadAndHashGlobalIdL(aMessage, 0, 1);
+	
+	_LIT(KSelectComponentId, "SELECT ComponentId FROM Components WHERE GlobalIdHash=?;");
+	CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectComponentId);
+	stmt->BindIntL(1, globalIdHash);
+			
+	if(!stmt->ProcessNextRowL())
+		{
+		DEBUG_PRINTF2(_L8("There is no local component id corresponding to the supplied global id (hash=%d)."), globalIdHash);
+		User::Leave(KErrNotFound);
+		}
+	
+	TComponentId compId = stmt->IntColumnL(0);
+	CleanupStack::PopAndDestroy(stmt);
+	
+	TPckg<TComponentId> componentIdDes(compId);
+	aMessage.WriteL(2, componentIdDes);
+	}
+
+void CScrRequestImpl::GetComponentWithGlobalIdSizeL(const RMessage2& aMessage) const
+	{
+	TUint32 globalIdHash = ReadAndHashGlobalIdL(aMessage, 0, 1);
+	TLanguage locale = TLanguage(aMessage.Int2());
+	
+	_LIT(KConditionColumn, "GlobalIdHash");
+	TInt returnSizeSlot=3;
+	GetGeneralComponentEntrySizeL(aMessage, KConditionColumn(), globalIdHash, returnSizeSlot, locale, iComponentEntry);
+	}
+
+void CScrRequestImpl::GetComponentWithGlobalIdDataL(const RMessage2& aMessage) const
+	{
+	WriteObjectDataL(aMessage, 0, iComponentEntry);
+	DeleteObjectZ(iComponentEntry); // Delete the object to prevent the usage of this function
+								    // without calling GetComponentWithGlobalIdSizeL.
+	}
+
+CGlobalComponentId* CScrRequestImpl::ParseGlobalComponendIdLC(const TDesC& aGlobalId) const
+	{
+	TChar nullCr = '\0';
+	TInt pos = aGlobalId.Locate(nullCr);
+	__ASSERT_ALWAYS(pos != KErrNotFound, User::Leave(KErrCorrupt));
+	
+	TPtrC swTypeName = aGlobalId.Left(pos);
+	TPtrC globalIdName = aGlobalId.Right(aGlobalId.Length() - pos - 1);
+	
+	return CGlobalComponentId::NewLC(globalIdName, swTypeName);
+	}
+
+void CScrRequestImpl::GetGeneralDependencyListL(const TDesC& aSelectColumn, const TDesC& aConditionColumn, const TDesC& aConditionValue, RPointerArray<CVersionedComponentId> &aVerCompIdList) const
+	{
+	DEBUG_PRINTF(_L8("Returning General Dependency List."));
+	_LIT(KSelectDependencies, "SELECT %S,VersionFrom,VersionTo FROM ComponentDependencies WHERE %S=?;");
+	TInt formattedLen = aSelectColumn.Length() + aConditionColumn.Length();
+	HBufC *stmtStr = FormatStatementLC(KSelectDependencies(), formattedLen, &aSelectColumn, &aConditionColumn);
+	
+	CStatement *stmt = iDbHandle->PrepareStatementLC(*stmtStr);
+	TUint32 conditionValueHash = HashCaseSensitiveL(aConditionValue);
+	stmt->BindIntL(1, conditionValueHash);
+	
+	while(stmt->ProcessNextRowL())
+		{
+		TPtrC selectedGlobalId(stmt->StrColumnL(0));
+		CGlobalComponentId *globalId = ParseGlobalComponendIdLC(selectedGlobalId);
+		
+		TPtrC versionFrom;
+		ReadNullableStringFromStatementL(*stmt, versionFrom, 1);
+		TPtrC versionTo;
+		ReadNullableStringFromStatementL(*stmt, versionTo, 2);
+		
+		CVersionedComponentId *verCompId = CVersionedComponentId::NewLC(*globalId, &versionFrom, &versionTo);
+		aVerCompIdList.AppendL(verCompId);
+		
+		CleanupStack::Pop(verCompId); // Ownership passed to the array
+		CleanupStack::PopAndDestroy(globalId);
+		}
+	
+	CleanupStack::PopAndDestroy(2, stmtStr); // stmtStr, stmt
+	}
+
+void CScrRequestImpl::GetSupplierComponentsSizeL(const RMessage2& aMessage) const
+	{
+	HBufC *dependantGlobalId = ReadAndGetGlobalIdLC(aMessage, 0);
+	
+	_LIT(KSelectColumn, "SupplierGlobalId");
+	_LIT(KConditionColumn, "DependantGlobalIdHash");
+	iVerCompIdList.ResetAndDestroy();
+	
+	GetGeneralDependencyListL(KSelectColumn(), KConditionColumn(), *dependantGlobalId, iVerCompIdList);
+	CleanupStack::PopAndDestroy(dependantGlobalId);
+	WriteArraySizeL(aMessage, 1, iVerCompIdList);
+	}
+
+void CScrRequestImpl::GetSupplierComponentsDataL(const RMessage2& aMessage) const
+	{
+	WriteArrayDataL(aMessage, 0, iVerCompIdList);
+	}
+
+void CScrRequestImpl::GetDependantComponentsSizeL(const RMessage2& aMessage) const
+	{
+
+	HBufC *supplierGlobalId = ReadAndGetGlobalIdLC(aMessage, 0);
+		
+	_LIT(KSelectColumn, "DependantGlobalId");
+	_LIT(KConditionColumn, "SupplierGlobalIdHash");
+	iVerCompIdList.ResetAndDestroy();
+		
+	GetGeneralDependencyListL(KSelectColumn(), KConditionColumn(), *supplierGlobalId, iVerCompIdList);
+	CleanupStack::PopAndDestroy(supplierGlobalId);
+	WriteArraySizeL(aMessage, 1, iVerCompIdList);
+	}
+
+void CScrRequestImpl::GetDependantComponentsDataL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning Dependant Components Data."));
+	WriteArrayDataL(aMessage, 0, iVerCompIdList);
+	}
+		
+void CScrRequestImpl::GetIsMediaPresentL(const RMessage2& aMessage) const
+	{
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	DEBUG_PRINTF2(_L8("Retrieving media presence of component(%d)."), componentId);
+
+	TBool result = CheckForMediaPresenceL(componentId);
+	
+	TPckg<TBool> resultPkg(result);
+	aMessage.WriteL(1, resultPkg);	
+	}
+
+TBool CScrRequestImpl::CheckForMediaPresenceL(TComponentId aComponentId) const
+	{
+	DEBUG_PRINTF(_L8("Check For Media Presence."));
+	TInt componentDrivesBitmask = GetInstalledDrivesBitmaskL(aComponentId);	
+	
+	TDriveList presentDriveSet;
+	User::LeaveIfError(iFs.DriveList(presentDriveSet));	
+	
+	// Check for each drive whether it is present in the system
+	for (TInt drive=0; componentDrivesBitmask; componentDrivesBitmask >>= 1, ++drive)
+		{
+		if ((componentDrivesBitmask & 0x1) && (presentDriveSet.Length() <= drive || !presentDriveSet[drive]))
+			{
+			DEBUG_PRINTF3(_L8("Component %d registers a file at drive %c which is not present. Returning EFalse for IsMediaPresent)."), aComponentId, drive + 'a');
+			return EFalse;			
+			}
+		}
+	
+	return ETrue;
+	}
+
+void CScrRequestImpl::SetScomoStateL(const RMessage2& aMessage)
+	{
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	TScomoState state = static_cast<TScomoState>(aMessage.Int1());
+	DEBUG_PRINTF3(_L8("Updating the scomo state of component(%d). New value=%d."), componentId, state);
+	
+	_LIT(KUpdateScomoState, "UPDATE Components SET ScomoState=? WHERE ComponentId=?;");
+	TInt numberOfValues = 2;
+	ExecuteStatementL(KUpdateScomoState, numberOfValues, EValueInteger, state, EValueInteger, componentId);
+	}
+
+void CScrRequestImpl::GetPluginUidWithMimeTypeL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning plugin for MIME type."));
+	HBufC *mimeType = ReadDescLC(aMessage, 0);
+	
+	_LIT(KSelectPluginsWithMimeType, "SELECT SifPluginUid FROM SoftwareTypes WHERE SoftwareTypeId IN (SELECT SoftwareTypeId FROM MimeTypes WHERE MimeType=?);");
+	CStatement* stmt = iDbHandle->PrepareStatementLC(KSelectPluginsWithMimeType);
+	stmt->BindStrL(1, *mimeType);
+	if(!stmt->ProcessNextRowL())
+		{
+		DEBUG_PRINTF2(_L("Sif Plugin Uid couldn't be found for Mime Type (%S)!"), mimeType);
+		User::Leave(KErrSifUnsupportedSoftwareType);
+		}
+	TUint32 uid = stmt->IntColumnL(0);
+	CleanupStack::PopAndDestroy(2, mimeType); // mimeType, stmt
+	
+	TPckg<TUint32> uidDes(uid);
+	aMessage.WriteL(1, uidDes);
+	}
+
+TBool CScrRequestImpl::GetSifPluginUidIInternalL(TInt aSoftwareTypeId, TInt& aValue) const
+	{
+	DEBUG_PRINTF(_L8("Returning Sif Plugin UidI Internal."));
+	TBool found = EFalse;	
+		
+	_LIT(KSelectSifPluginUid, "SELECT SifPluginUid FROM SoftwareTypes WHERE SoftwareTypeId=?;");
+	CStatement* stmt = iDbHandle->PrepareStatementLC(KSelectSifPluginUid);
+	stmt->BindIntL(1, aSoftwareTypeId);
+	
+	if(stmt->ProcessNextRowL())
+		{
+		aValue = stmt->IntColumnL(0);
+		found = ETrue;
+		}
+	CleanupStack::PopAndDestroy(stmt);
+	return found;
+	}
+
+TBool CScrRequestImpl::GetSidsForSoftwareTypeIdL(TInt aSoftwareTypeId, RArray<TSecureId>& aSids) const
+    {
+    TBool found = EFalse;
+       
+    _LIT(KSelectSecureIds, "SELECT SecureId FROM CustomAccessList WHERE SoftwareTypeId=?;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectSecureIds);
+    stmt->BindIntL(1, aSoftwareTypeId);
+    
+    aSids.Reset();
+    while(stmt->ProcessNextRowL())
+        {
+        aSids.AppendL(stmt->IntColumnL(0));
+        found = ETrue;
+        }
+    
+    CleanupStack::PopAndDestroy(stmt);
+    return found;
+    }
+
+TBool CScrRequestImpl::GetInstallerOrExecutionEnvSidsForComponentL(TComponentId aComponentId, RArray<TSecureId>& aSids) const
+    {
+    // Get the software type id for the component
+    TInt swTypeId = GetSoftwareTypeForComponentL(aComponentId);
+    // Retrieve the Sids for the type id
+    return GetSidsForSoftwareTypeIdL(swTypeId, aSids);
+    }
+
+TBool CScrRequestImpl::IsInstallerOrExecutionEnvSidL(TSecureId& aSid) const
+	{
+	_LIT(KSelectStatement, "SELECT SecureId FROM CustomAccessList WHERE SecureId=? AND AccessMode=?;");
+	CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectStatement);
+	stmt->BindIntL(1, aSid);
+	stmt->BindIntL(2, (TInt)ETransactionalSid);	
+	TBool res = ETrue;
+	if(!stmt->ProcessNextRowL())
+		{
+		DEBUG_PRINTF2(_L("%d is not an installer or execution environment SID"), TUint32(aSid));
+		res = EFalse;
+		}
+	CleanupStack::PopAndDestroy(stmt);
+	return res;	
+	}
+
+void CScrRequestImpl::GetPluginUidWithComponentIdL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning Plugin Uid With ComponentId."));
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	DEBUG_PRINTF2(_L8("Returning the plugin of component(%d)."), componentId);
+	
+	// Get the software type id for the component
+	TInt swTypeId = GetSoftwareTypeForComponentL(componentId);
+	    
+	TInt uid (0);
+	TBool found = GetSifPluginUidIInternalL(swTypeId, uid);
+	__ASSERT_ALWAYS(found, User::Leave(KErrNotFound));
+	
+	TPckg<TUint32> uidDes(uid);
+	aMessage.WriteL(1, uidDes);
+	}
+
+// This function returns whether the SID looked up has been found in the software types table.
+TBool CScrRequestImpl::GetSidsForSoftwareTypeL(const HBufC* aSoftwareTypeName, RArray<TSecureId>& aSids) const
+	{
+	DEBUG_PRINTF2(_L("Returning SIDs for software type(%S)."), aSoftwareTypeName);
+	
+	TUint32 swTypeId = HashCaseSensitiveL(*aSoftwareTypeName);	
+	return GetSidsForSoftwareTypeIdL(swTypeId, aSids);
+	}
+
+TBool CScrRequestImpl::CheckIfAppUidExistsL(const TUid aAppUid) const
+    {
+    DEBUG_PRINTF(_L8("Check if the given application UID exists."));
+    TUid retrievedAppUid;
+    _LIT(KSelectColumn, "AppUid");
+    _LIT(KTable, "AppRegistrationInfo");
+    _LIT(KConditionColumn, "AppUid");
+    if(GetIntforConditionL(KSelectColumn, KTable, KConditionColumn, aAppUid.iUid, (TInt&)retrievedAppUid.iUid))
+        {    
+       	return ETrue;
+    	}
+    return EFalse ; 
+    }
+	
+void CScrRequestImpl::SetLocaleForRegInfoForApplicationSubsessionContextL(const RMessage2& aMessage, CRegInfoForApplicationSubsessionContext *aSubsessionContext)
+    {
+    TLanguage appLocale= (TLanguage)aMessage.Int1();
+    TUid appUid;
+    appUid.iUid=aMessage.Int0();
+    if(!GetNearestAppLanguageL(appLocale,appUid, aSubsessionContext->iAppLanguageForCurrentLocale))
+    	{
+      	if (KUnspecifiedLocale!=appLocale)
+      		{
+        	DEBUG_PRINTF2(_L8("Given Locale %d is not supported by application"),appLocale);
+        	User::Leave(KErrNotFound);
+      		}
+    	}
+    }
+	
+void CScrRequestImpl::GetServiceUidSizeL(const RMessage2& aMessage,TUid aAppUid, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const
+    {    
+    TUid uid;
+    _LIT(KSelectServiceUidWithAppUid, "SELECT Uid FROM ServiceInfo WHERE AppUid =?;");
+    CStatement* stmt = iDbHandle->PrepareStatementLC(KSelectServiceUidWithAppUid);
+    stmt->BindIntL(1, aAppUid.iUid);
+    aSubsessionContext->iServiceUidList.Close();
+    while(stmt->ProcessNextRowL())
+    {    
+        uid.iUid = stmt->IntColumnL(0);       
+        aSubsessionContext->iServiceUidList.Append(uid);       
+    }
+    if(aSubsessionContext->iServiceUidList.Count() == 0)
+    {
+        DEBUG_PRINTF2(_L8("No service ids correspond to the given AppUid,%d"),aAppUid);
+    }    
+    CleanupStack::PopAndDestroy(stmt);
+    WriteArraySizeL(aMessage, 1, aSubsessionContext->iServiceUidList);
+    }
+
+void CScrRequestImpl::GetServiceUidDataL(const RMessage2& aMessage, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const
+{
+    WriteArrayDataL(aMessage, 0, aSubsessionContext->iServiceUidList);
+    aSubsessionContext->iServiceUidList.Close();
+}
+
+void CScrRequestImpl::GetApplicationLanguageL(const RMessage2& aMessage, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const
+    {
+    DEBUG_PRINTF(_L8("Returning the Application Language ."));
+    TPckg<TLanguage> applicationLanguage (aSubsessionContext->iAppLanguageForCurrentLocale);
+    aMessage.WriteL(0, applicationLanguage);
+    }
+
+void CScrRequestImpl::GetDefaultScreenNumberL(const RMessage2& aMessage,TUid aAppUid) const
+    {
+    DEBUG_PRINTF(_L8("Returning the default screen number."));             
+    
+    TInt screenNumber=0;
+    _LIT(KSelectColumn, "DefaultScreenNumber");
+    _LIT(KTable, "AppRegistrationInfo");
+    _LIT(KConditionColumn, "AppUid");
+        
+    GetIntforConditionL(KSelectColumn(),KTable(),KConditionColumn(),aAppUid.iUid, screenNumber);
+        {
+        TPckg<TInt> screenNumberDes(screenNumber);
+        aMessage.WriteL(0, screenNumberDes);
+        }
+    }
+
+void CScrRequestImpl::GetNumberOfOwnDefinedIconsL(const RMessage2& aMessage,TUid aAppUid , CRegInfoForApplicationSubsessionContext *aSubsessionContext) const
+    {
+    DEBUG_PRINTF(_L8("Returning the no of own defined Icons count "));
+    TInt numberOfIcons;
+    _LIT(KSelectNoOfIcones, "SELECT NumberOfIcons FROM CaptionAndIconInfo WHERE  CaptionAndIconId IN (SELECT CaptionAndIconId FROM LocalizableAppInfo WHERE AppUid= ? AND Locale = ?);");
+    CStatement* stmt = iDbHandle->PrepareStatementLC(KSelectNoOfIcones);
+    stmt->BindIntL(1, aAppUid.iUid);
+    stmt->BindIntL(2, aSubsessionContext->iAppLanguageForCurrentLocale);
+    if(stmt->ProcessNextRowL())
+       {
+       numberOfIcons = stmt->IntColumnL(0);
+       TPckg<TInt> numberOfIconsDes(numberOfIcons);
+       aMessage.WriteL(0, numberOfIconsDes);
+       }
+    CleanupStack::PopAndDestroy(stmt);
+    }
+
+void CScrRequestImpl::GetAppForDataTypeAndServiceL(const RMessage2& aMessage) const
+    {
+    DEBUG_PRINTF(_L8("Returns the App Uid for a given Service Uid that handles the specified datatype with the highest priority."));
+    HBufC *dataType = ReadDescLC(aMessage,0);
+    TUid inputServiceUid = TUid::Uid(aMessage.Int1());
+
+    _LIT(KSelectAppUidsForGivenUidAndDataType, "SELECT AppUid FROM (ServiceInfo JOIN DataType ON ServiceInfo.ServiceId = DataType.ServiceId) WHERE Uid=? AND Type=? ORDER BY Priority DESC;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectAppUidsForGivenUidAndDataType);
+    stmt->BindIntL(1, inputServiceUid.iUid);
+    stmt->BindStrL(2, *dataType);
+
+    if(stmt->ProcessNextRowL())
+        {
+        TPckg<TInt> appUidDes(stmt->IntColumnL(0));
+        aMessage.WriteL(2, appUidDes); 
+        CleanupStack::PopAndDestroy(2, dataType); //stmt, dataType
+        }
+    else
+        {
+        DEBUG_PRINTF(_L("No AppUid for given datatype and Service Uid"));
+        CleanupStack::PopAndDestroy(2, dataType); //stmt, dataType        
+        User::Leave(KErrNotFound);
+        }
+    }
+
+void CScrRequestImpl::GetAppForDataTypeL(const RMessage2& aMessage) const
+    {
+    DEBUG_PRINTF(_L8("Returning the app UID."));
+    
+    TUid appUid = TUid::Null();
+    HBufC *type = ReadDescLC(aMessage, 0);
+    TInt serviceId = GetServiceIdForDataTypeL(*type);
+    
+    if(serviceId == KErrNotFound)
+        {
+        DEBUG_PRINTF(_L("No Service Id for the given datatype"));
+        User::Leave(KErrNotFound);
+        }
+               
+    CleanupStack::PopAndDestroy(type);
+    if(!GetAppUidForServiceIdL(serviceId, appUid))
+        {
+        DEBUG_PRINTF(_L("No AppUid for given datatype"));
+        }
+    TPckg<TUid> appUidDes(appUid);
+    aMessage.WriteL(1, appUidDes);       
+    }
+
+TInt CScrRequestImpl::GetServiceIdForDataTypeL(const TDesC& aType) const
+    {
+	DEBUG_PRINTF(_L8("Returning ServiceId For DataType."));
+    TInt serviceId = 0;
+    _LIT(KSelectAppForDataTypeAndService, "SELECT ServiceId FROM DataType WHERE Type=? ORDER BY Priority DESC;");    
+    CStatement* stmt = iDbHandle->PrepareStatementLC(KSelectAppForDataTypeAndService);
+    stmt->BindStrL(1, aType);
+                
+    if(!stmt->ProcessNextRowL())
+        {
+        DEBUG_PRINTF(_L("No Service for given datatype"));
+        }
+    else
+        {
+        serviceId = stmt->IntColumnL(0);
+        }
+    CleanupStack::PopAndDestroy(stmt);
+    return serviceId;
+    }
+    
+TBool CScrRequestImpl::GetAppUidForServiceIdL(const TInt ServiceId, TUid& aAppUid) const
+    {
+	DEBUG_PRINTF(_L8("Returning App Uid for ServiceId."));
+    _LIT(KSelectColumn, "AppUid");
+    _LIT(KTable, "ServiceInfo");
+    _LIT(KConditionColumn, "ServiceId");
+    if(GetIntforConditionL(KSelectColumn(),KTable(),KConditionColumn(),ServiceId, (TInt&)aAppUid.iUid))
+        {
+        return ETrue;
+        }
+    else
+        {
+        DEBUG_PRINTF(_L("No AppUid for given datatype"));
+        return EFalse;
+        }
+    }
+
+void CScrRequestImpl::GetNearestAppLanguageForOpaqueDataL(TLanguage aRequiredLocale, TUid aAppUid, TUid aServiceUid, TLanguage& aFinalAppLocale) const
+    {
+	DEBUG_PRINTF(_L8("Returning Nearest App Language For OpaqueData."));
+    // Set the default language
+    aFinalAppLocale = TLanguage(0);
+    
+    if (aRequiredLocale == KUnspecifiedLocale)
+        {
+        aRequiredLocale = User::Language();
+        }
+        
+    // Get the list of locales supported by the application
+    RArray<TInt> appLocales;
+    CleanupClosePushL(appLocales);
+    GetLocalesForAppIdL(appLocales, aAppUid);
+    
+    // Return the default language if the app doesn't have localized info
+    if (!appLocales.Count())
+        {
+        CleanupStack::PopAndDestroy(&appLocales);
+        return;            
+        }
+  
+    // Check if current language is supported by application
+    if (KErrNotFound != appLocales.Find((TInt)aRequiredLocale))
+        {
+        aFinalAppLocale = aRequiredLocale;
+        }
+    else // Get the nearest languages corresponding to the required language
+        {    
+        TLanguagePath equivalentLanguages;
+        BaflUtils::GetEquivalentLanguageList(aRequiredLocale, equivalentLanguages);
+            
+        // Identify the application locale corresponding to the nearest required locale
+        TInt index = 0;
+        while (1)
+            {
+            if (equivalentLanguages[index] == ELangNone)
+                {
+                break;
+                }
+            
+            if (appLocales.FindInOrder((TInt)equivalentLanguages[index]) != KErrNotFound)
+                {
+                aFinalAppLocale = equivalentLanguages[index];
+                break;
+                }           
+    
+            index++;
+            }
+        }
+    
+    // Check the opaque data exists in the selected language
+    if (aFinalAppLocale != TLanguage(0))
+        {
+        _LIT(KOpaqueData, "SELECT StrValue FROM AppProperties where Name = ? AND ServiceUid = ?  AND AppUid = ? AND Locale = ?");
+        CStatement *stmt = iDbHandle->PrepareStatementLC(KOpaqueData);        
+        stmt->BindStrL(1, _L("OpaqueData"));
+        stmt->BindIntL(2, aServiceUid.iUid);
+        stmt->BindIntL(3, aAppUid.iUid);
+        stmt->BindIntL(4, (TInt)aFinalAppLocale);
+        
+        if (!stmt->ProcessNextRowL())
+            {
+            // No opaque data for given locale, hence set to the default locale
+            aFinalAppLocale = TLanguage(0);
+            }
+        CleanupStack::PopAndDestroy(stmt);
+        }
+       
+    CleanupStack::PopAndDestroy(&appLocales);
+    }
+
+TBool CScrRequestImpl::GetNearestAppLanguageL(TLanguage aRequiredLocale, TUid aAppUid, TLanguage& aFinalAppLocale) const
+    {
+	DEBUG_PRINTF(_L8("Returning Nearest App Language."));
+    TLanguagePath equivalentLanguages;
+    TInt index = 0;
+    RArray<TInt> appLocales;
+    TBool isLocalizedInfoPresent = EFalse;
+    aFinalAppLocale = KUnspecifiedLocale;
+    
+    //If required language is not specified, take the current user language. 
+    if (aRequiredLocale == KUnspecifiedLocale)
+        {
+        aRequiredLocale = User::Language();
+        }
+        
+    //Get the app language list.
+    CleanupClosePushL(appLocales);
+    GetLocalesForAppIdL(appLocales,aAppUid);
+  
+    //Check if current language is supported by application
+    if (KErrNotFound != appLocales.Find((TInt)aRequiredLocale))
+        {
+        aFinalAppLocale = aRequiredLocale;
+        isLocalizedInfoPresent = ETrue;
+        CleanupStack::PopAndDestroy(&appLocales);
+        return isLocalizedInfoPresent;
+        }
+    
+    //Get the nearest languages corresponding to the required language.
+    BaflUtils::GetEquivalentLanguageList(aRequiredLocale, equivalentLanguages);
+        
+    //Identify the app language corresponding to the nearest required language.
+    if(0 != appLocales.Count()) 
+        {
+        while(1)
+            {
+            if(equivalentLanguages[index] == ELangNone)
+                {
+                break;
+                }
+            
+            if(appLocales.FindInOrder((TInt)equivalentLanguages[index]) != KErrNotFound)
+                {
+                aFinalAppLocale = equivalentLanguages[index];
+                isLocalizedInfoPresent = ETrue;
+                break;
+                }           
+
+            index++;
+            }
+        
+        // If a matching language is not found in the list of equivalent languages,
+        // we check if a default locale (KNonLocalized) is present.
+        if(!isLocalizedInfoPresent && appLocales[0] == (TInt)KNonLocalized)
+            {
+            isLocalizedInfoPresent = ETrue;
+            aFinalAppLocale = KNonLocalized;
+            }        
+        }
+    
+    CleanupStack::PopAndDestroy(&appLocales);
+    return isLocalizedInfoPresent;
+    }
+
+TBool CScrRequestImpl::GetIntforConditionL(const TDesC& aSelectColumn,const TDesC& aTableInfo,const TDesC& aConditionColumn,TInt aConditionValue,TInt& aRetrievedValue) const 
+    {     
+    TBool isIntValFound = 0;
+    _LIT(KSelectDependencies, "SELECT %S FROM %S WHERE %S=?;");
+    TInt formattedLen = aSelectColumn.Length() + aTableInfo.Length()+ aConditionColumn.Length();
+    HBufC *stmtStr = FormatStatementLC(KSelectDependencies(), formattedLen, &aSelectColumn, &aTableInfo,&aConditionColumn);
+               
+    CStatement* stmt = iDbHandle->PrepareStatementLC(*stmtStr);
+    stmt->BindIntL(1, aConditionValue);
+    if(!stmt->ProcessNextRowL())
+       {
+       DEBUG_PRINTF3(_L("%S with value %d not found!"), &aSelectColumn, aConditionValue);           
+       }
+    else
+       {
+       aRetrievedValue = stmt->IntColumnL(0);
+       isIntValFound = 1;
+       }
+    CleanupStack::PopAndDestroy(2,stmtStr);
+    
+    return isIntValFound;
+    }
+    
+void IntersectSortedArraysL(RArray<TComponentId>& aLhs, RArray<TComponentId> aRhs)
+	{
+	RArray<TComponentId> tmp;
+	CleanupClosePushL(tmp);
+	TInt idxLhs(0);
+	TInt idxRhs(0);
+	TInt countLhs = aLhs.Count();
+	TInt countRhs = aRhs.Count();
+	
+	while(idxLhs < countLhs && idxRhs < countRhs)
+		{
+		if(aLhs[idxLhs] < aRhs[idxRhs])
+			++idxLhs;
+		else if(aLhs[idxLhs] > aRhs[idxRhs])
+			++idxRhs;
+		else
+			{
+			tmp.AppendL(aRhs[idxRhs]);
+			++idxRhs;
+			++idxLhs;
+			}
+		}
+	
+	aLhs.Reset();
+	CopyFixedLengthArrayL(aLhs, tmp);
+	CleanupStack::PopAndDestroy(&tmp);
+	}
+
+void CScrRequestImpl::GetOperatorStringL(CComponentFilter::TDbOperator aOperator, HBufC*& aOperatorString) const
+    {
+    _LIT(KEqualOperator, "=");
+    _LIT(KLikeOperator, "LIKE");
+    
+    switch(aOperator)
+        {
+        case CComponentFilter::EEqual:
+            aOperatorString = KEqualOperator().AllocL();
+            break;
+            
+        case CComponentFilter::ELike:
+            aOperatorString = KLikeOperator().AllocL();
+            break;   
+            
+        default:
+            User::Leave(KErrArgument);
+			        
+        }      
+    }
+
+void CScrRequestImpl::GetComponentIdsHavingThePropertiesL(RArray<TComponentId>& aComponentIds, RPointerArray<CPropertyEntry>& aProperties, 
+                                                              RArray<CComponentFilter::TPropertyOperator>& aPropertyOperatorList, TBool aDoIntersect) const
+    {
+    // GROUP BY is added at the end to avoid fetching twice components which have the same localizable values for different locales
+    
+    _LIT(KFindComponentsFromProperties, "SELECT ComponentId FROM ComponentProperties WHERE NAME %S ? AND %S GROUP BY ComponentId;");
+
+    _LIT(KPropertyIntValue, "IntValue %S ?");
+    _LIT(KPropertyStrValue, "StrValue %S ?");
+    _LIT(KPropertyLocalizedValue, "StrValue %S ? AND Locale = ?");
+            
+    TInt propCount = aProperties.Count();
+
+    RArray<TComponentId> propCompIds;
+    CleanupClosePushL(propCompIds);
+    
+    for(TInt i=0; i<propCount; ++i)
+        {
+        //Retrieve the operators to be used to form this query.
+        CComponentFilter::TPropertyOperator propOperator = aPropertyOperatorList[i];
+       
+	   // Get the name operator.
+	    HBufC* nameOperator(0);
+        GetOperatorStringL(aPropertyOperatorList[i].NameOperator(), nameOperator);
+        CleanupStack::PushL(nameOperator);     
+        
+        // Get the value operator.
+        HBufC* valueOperator(0);
+        GetOperatorStringL(aPropertyOperatorList[i].ValueOperator(), valueOperator);
+        CleanupStack::PushL(valueOperator);
+        
+        // Create the value string based on the property type.
+        HBufC* valueString(0);
+        switch(aProperties[i]->PropertyType())
+            {            
+            case CPropertyEntry::EIntProperty:
+                {
+                valueString = FormatStatementLC(KPropertyIntValue, valueOperator->Length(), valueOperator);               
+                }
+
+                break;
+                
+            case CPropertyEntry::EBinaryProperty:
+                {
+                valueString = FormatStatementLC(KPropertyStrValue, valueOperator->Length(), valueOperator);            
+                }
+
+                break;
+            case CPropertyEntry::ELocalizedProperty:
+                {
+                CLocalizablePropertyEntry *localizedProp = static_cast<CLocalizablePropertyEntry *>(aProperties[i]);
+                if (localizedProp->LocaleL() == KUnspecifiedLocale) // If the locale was not specified, then we match across all locales  
+                    {
+                    valueString = FormatStatementLC(KPropertyStrValue, valueOperator->Length(), valueOperator);        
+                    }
+                else
+                    {
+                    valueString = FormatStatementLC(KPropertyLocalizedValue, valueOperator->Length(), valueOperator);                
+                    }
+                }
+                break;              
+            default:
+                DEBUG_PRINTF(_L8("The property type couldn't be recognized."));
+                User::Leave(KErrAbort); 
+            }
+        
+        // Prepare full statement using the name operator and the value string.
+        HBufC *statementStr = FormatStatementLC(KFindComponentsFromProperties, nameOperator->Length()+ valueString->Length(), 
+                                                    nameOperator, valueString); 
+        
+        // Create Sql statement.
+        CStatement *stmt = iDbHandle->PrepareStatementLC(*statementStr);
+        stmt->BindStrL(1, aProperties[i]->PropertyName());
+                
+        switch(aProperties[i]->PropertyType())
+            {
+            case CPropertyEntry::EIntProperty:
+                {
+                CIntPropertyEntry *intProp = static_cast<CIntPropertyEntry *>(aProperties[i]);
+                stmt->BindInt64L(2, intProp->Int64Value());
+                break;
+                }
+            case CPropertyEntry::EBinaryProperty:
+                {
+                CBinaryPropertyEntry *binaryProp = static_cast<CBinaryPropertyEntry *>(aProperties[i]);
+                stmt->BindBinaryL(2, binaryProp->BinaryValue());
+                break;
+                }
+            case CPropertyEntry::ELocalizedProperty:
+                {
+                CLocalizablePropertyEntry *localizedProp = static_cast<CLocalizablePropertyEntry *>(aProperties[i]);
+                stmt->BindStrL(2, localizedProp->StrValue());
+                if (localizedProp->LocaleL() != KUnspecifiedLocale)
+                    stmt->BindIntL(3, localizedProp->LocaleL());
+                break;
+                }
+            default:
+                DEBUG_PRINTF(_L8("The property type couldn't be recognized."));
+                User::Leave(KErrAbort); 
+            }
+        
+        while(stmt->ProcessNextRowL())
+            {
+            User::LeaveIfError(propCompIds.InsertInOrder(stmt->IntColumnL(0)));
+            }
+        
+        CleanupStack::PopAndDestroy(5, nameOperator);
+        
+        if (aDoIntersect)
+            {
+            IntersectSortedArraysL(aComponentIds, propCompIds);
+            }
+        else
+            {
+            CopyFixedLengthArrayL(aComponentIds, propCompIds);
+            aDoIntersect = ETrue; // If many properties are present in the filter, we need to intersect the component Ids on further iterations
+            }
+        
+        propCompIds.Reset();
+        }
+    CleanupStack::PopAndDestroy(&propCompIds);
+    }
+
+
+void ReallocStatementIfNeededL(RBuf& aStatementStr, TInt aAddedLength)
+	{
+	TInt freeSpace = aStatementStr.MaxLength() - aStatementStr.Length();
+	TInt extraSpace = aAddedLength - freeSpace;
+	if (extraSpace > 0)
+		{
+		aStatementStr.ReAllocL(aStatementStr.MaxLength() +  extraSpace);
+		}	
+	}
+	
+void AppendConditionToStatementL(RBuf& aStatementStr, const TDesC& aConditionStr, TBool& aIsFirstCondition)
+	{
+	TInt addedLength = 2 + aConditionStr.Length(); // 2 chars used by spaces
+	
+	_LIT(KConditionAnd, " AND");
+	_LIT(KConditionWhere, " WHERE");
+	
+	if(aIsFirstCondition)
+		{
+		addedLength += KConditionWhere().Length();
+		}
+	else
+		{
+		addedLength += KConditionAnd().Length();
+		}
+	
+	ReallocStatementIfNeededL(aStatementStr, addedLength);
+	
+	if(aIsFirstCondition)
+		{
+		aStatementStr.Append(KConditionWhere);
+		aIsFirstCondition = EFalse;
+		}
+	else
+		{
+		aStatementStr.Append(KConditionAnd);
+		}
+	aStatementStr.Append(aConditionStr);
+	}
+
+CStatement* CScrRequestImpl::CreateStatementObjectForComponentLocalizablesLC(const TDesC& aName, const TDesC& aVendor, TUint aSetFlag, TComponentId aComponentId /* = 0*/ ) const
+	{
+	_LIT(KSelectComponentLocalizables, "SELECT ComponentId,Name,Vendor FROM ComponentLocalizables");
+	RBuf stmtStr;
+	stmtStr.CreateL(100); // 100 should be enough for this statement
+	stmtStr.CleanupClosePushL();
+	stmtStr.Copy(KSelectComponentLocalizables);
+	TBool isFirstCondition = ETrue;
+	
+	if(aComponentId > 0)
+		{
+		_LIT(KConditionComponentId, " ComponentId=?");
+		AppendConditionToStatementL(stmtStr, KConditionComponentId, isFirstCondition);	
+		}
+	
+	if (aSetFlag & CComponentFilter::EName)
+		{
+		_LIT(KConditionName, " Name=?");
+		AppendConditionToStatementL(stmtStr, KConditionName, isFirstCondition);	
+		}
+		
+	if (aSetFlag & CComponentFilter::EVendor)
+		{
+		_LIT(KConditionVendor, " Vendor=?");
+		AppendConditionToStatementL(stmtStr, KConditionVendor, isFirstCondition);
+		}		
+	// Take care not to return the same component id twice in case we have the same name or vendor for two different locales
+	_LIT(KComponentIdGroupBy, " GROUP BY ComponentId;");
+	ReallocStatementIfNeededL(stmtStr, KComponentIdGroupBy().Length() + 1); // one space for the NULL char
+	stmtStr.Append(KComponentIdGroupBy());
+	// SQLite requires the statement string to end with NULL char.
+	stmtStr.Append('\0');
+	
+	CStatement *stmt = iDbHandle->PrepareStatementLC(stmtStr);
+	
+	TInt bindIdx = 1;
+	if(aComponentId > 0)
+		{
+		stmt->BindIntL(bindIdx++, aComponentId);
+		}
+	if (aSetFlag & CComponentFilter::EName)
+		{
+		stmt->BindStrL(bindIdx++, aName);
+		}
+	if (aSetFlag & CComponentFilter::EVendor)
+		{
+		stmt->BindStrL(bindIdx, aVendor);
+		}
+	CleanupStack::Pop(stmt);
+	CleanupStack::PopAndDestroy(&stmtStr);
+	CleanupStack::PushL(stmt);
+	return stmt;
+	}
+
+void CScrRequestImpl::GetComponentsHavingNameVendorL(RArray<TComponentId>& aComponentIds, const TDesC& aName, const TDesC& aVendor, TUint16 aSetFlag, TBool aDoIntersect) const
+	{
+	CStatement *stmt = CreateStatementObjectForComponentLocalizablesLC(aName, aVendor, aSetFlag); 
+	
+	RArray<TComponentId> foundCompIds;
+	CleanupClosePushL(foundCompIds);
+	
+	while(stmt->ProcessNextRowL())
+		{
+		User::LeaveIfError(foundCompIds.InsertInOrder(stmt->IntColumnL(0)));
+		}
+	
+	if (aDoIntersect)
+		IntersectSortedArraysL(aComponentIds, foundCompIds);
+	else
+		CopyFixedLengthArrayL(aComponentIds, foundCompIds);
+
+	CleanupStack::PopAndDestroy(2, stmt); // stmt, foundCompIds
+	}
+
+CComponentFilter* CScrRequestImpl::ReadComponentFilterL(const RMessage2& aMessage) const
+	{
+	CComponentFilter *filter = ReadObjectFromMessageLC<CComponentFilter>(aMessage, 0);
+	CleanupStack::Pop(filter);
+	return filter;
+	}
+
+void AppendFilterConditionToStatementL(TUint16 aSetFlag, TUint16 aConditionFlag, RBuf& aStatementStr, const TDesC& aConditionStr, TBool& aIsFirstCondition)
+	{
+	if(aSetFlag & aConditionFlag)
+		{
+		AppendConditionToStatementL(aStatementStr, aConditionStr, aIsFirstCondition);
+		}
+	}
+
+void BindIntegerFilterToStatementL(CStatement& aStatement, TUint16 aSetFlag, TUint16 aConditionFlag, TInt aValue, TInt& aStmtIdx)
+	{
+	if(aSetFlag & aConditionFlag)
+		{
+		aStatement.BindIntL(aStmtIdx++, aValue);
+		}
+	}
+
+CStatement* CScrRequestImpl::OpenComponentViewL(CComponentFilter& aFilter, RArray<TComponentId>& aComponentFilterSuperset, TBool& aFilterSupersetInUse) const
+	{
+	DEBUG_PRINTF(_L8("Opening Component View."));
+	aComponentFilterSuperset.Reset();
+	aFilterSupersetInUse = EFalse;
+
+	TBool doIntersect = EFalse; // We should intersect component ids iff one of the previous filters on component ids was invoked
+	if(aFilter.iSetFlag & CComponentFilter::EFile)
+		{
+		GetFileComponentsL(*aFilter.iFile, aComponentFilterSuperset);
+		// The component Ids which own the given file is copied into componentIds array.
+		doIntersect = ETrue;
+		aFilterSupersetInUse = ETrue;
+		}
+	
+	if(aFilter.iSetFlag & CComponentFilter::EProperty)
+		{
+		GetComponentIdsHavingThePropertiesL(aComponentFilterSuperset, aFilter.iPropertyList, aFilter.iPropertyOperatorList, doIntersect);
+		// Inside the function, componentIds array is intersected with the components Ids which have the given properties.
+		doIntersect = ETrue;
+		aFilterSupersetInUse = ETrue;
+		}
+	
+	if(aFilter.iSetFlag & (CComponentFilter::EName | CComponentFilter::EVendor))
+		{
+		GetComponentsHavingNameVendorL(aComponentFilterSuperset, *aFilter.iName, *aFilter.iVendor, aFilter.iSetFlag, doIntersect);
+		// Inside the function, componentIds array is intersected with the components Ids which have the given name/vendor.
+		aFilterSupersetInUse = ETrue;
+		}
+	
+	_LIT(KSelectComponents, "SELECT ComponentId,SoftwareTypeId,SoftwareTypeName,Removable,Size,ScomoState,DRMProtected,Hidden,KnownRevoked,OriginVerified,GlobalId,InstalledDrives,Version,InstallTime FROM Components");
+	
+	RBuf statementStr;
+	statementStr.CreateL(KSelectComponents().Length()+ 50); // A reasonable starting buffer length
+	statementStr.CleanupClosePushL();
+	statementStr.Copy(KSelectComponents);
+	
+	TBool isFirstCondition = ETrue;
+	
+	_LIT(KConditionSoftwareType, " SoftwareTypeId=?"); // as only unique sw type name can be defined in the filter.
+	AppendFilterConditionToStatementL(aFilter.iSetFlag, CComponentFilter::ESoftwareType, statementStr, KConditionSoftwareType, isFirstCondition);
+	
+	_LIT(KConditionRemovable, " Removable=?");
+	AppendFilterConditionToStatementL(aFilter.iSetFlag, CComponentFilter::ERemovable, statementStr, KConditionRemovable, isFirstCondition);
+	
+	_LIT(KConditionScomoState, " ScomoState=?");
+	AppendFilterConditionToStatementL(aFilter.iSetFlag, CComponentFilter::EScomoState, statementStr, KConditionScomoState, isFirstCondition);
+	
+	_LIT(KConditionInstalledDrives, " InstalledDrives&?"); // & -> bitwise AND operator
+	AppendFilterConditionToStatementL(aFilter.iSetFlag, CComponentFilter::EInstalledDrive, statementStr, KConditionInstalledDrives, isFirstCondition);
+		
+	_LIT(KConditionDrmProtected, " DRMProtected=?");
+	AppendFilterConditionToStatementL(aFilter.iSetFlag, CComponentFilter::EDrmProtected, statementStr, KConditionDrmProtected, isFirstCondition);
+	
+	_LIT(KConditionHidden, " Hidden=?");
+	AppendFilterConditionToStatementL(aFilter.iSetFlag, CComponentFilter::EHidden, statementStr, KConditionHidden, isFirstCondition);
+	
+	_LIT(KConditionKnownRevoked, " KnownRevoked=?");
+	AppendFilterConditionToStatementL(aFilter.iSetFlag, CComponentFilter::EKnownRevoked, statementStr, KConditionKnownRevoked, isFirstCondition);
+
+	_LIT(KConditionOriginVerified, " OriginVerified=?");
+	AppendFilterConditionToStatementL(aFilter.iSetFlag, CComponentFilter::EOriginVerified, statementStr, KConditionOriginVerified, isFirstCondition);
+		
+	statementStr.Append(';');
+	// SQLite requires the statement string to end with NULL char.
+	statementStr.Append('\0');
+	
+	CStatement *stmt = iDbHandle->PrepareStatementLC(statementStr);
+	TInt stmtIdx = 1;
+	
+	if(aFilter.iSetFlag & CComponentFilter::ESoftwareType)
+		{
+		TUint32 swTypeId = HashCaseSensitiveL(*aFilter.iSwType);
+		stmt->BindIntL(stmtIdx++, swTypeId);
+		}
+	
+	if(aFilter.iSetFlag & CComponentFilter::EInstalledDrive)
+		{
+		if (aFilter.iInstalledDrives.Length() != KMaxDrives)
+			{
+			DEBUG_PRINTF2(_L("Incorrect size of drive list supplied in filter, the string supplied was %S"), &aFilter.iInstalledDrives);
+			User::Leave(KErrArgument);
+			}
+		TInt installedDrivesBitmask = InstalledDrivesToBitmaskL(aFilter.iInstalledDrives);
+		stmt->BindIntL(stmtIdx++, installedDrivesBitmask);
+		}
+	
+	BindIntegerFilterToStatementL(*stmt, aFilter.iSetFlag, CComponentFilter::ERemovable, aFilter.iRemovable, stmtIdx);
+	BindIntegerFilterToStatementL(*stmt, aFilter.iSetFlag, CComponentFilter::EScomoState, aFilter.iScomoState, stmtIdx);
+	BindIntegerFilterToStatementL(*stmt, aFilter.iSetFlag, CComponentFilter::EDrmProtected, aFilter.iDrmProtected, stmtIdx);
+	BindIntegerFilterToStatementL(*stmt, aFilter.iSetFlag, CComponentFilter::EHidden, aFilter.iHidden, stmtIdx);
+	BindIntegerFilterToStatementL(*stmt, aFilter.iSetFlag, CComponentFilter::EKnownRevoked, aFilter.iKnownRevoked, stmtIdx);
+	BindIntegerFilterToStatementL(*stmt, aFilter.iSetFlag, CComponentFilter::EOriginVerified, aFilter.iOriginVerified, stmtIdx);
+	
+	CleanupStack::Pop(stmt);
+	CleanupStack::PopAndDestroy(&statementStr);
+	return stmt;
+	}
+
+void CScrRequestImpl::AddComponentEntryLocalizablesL(TComponentId aComponentId, CComponentEntry& aEntry, TLanguage aLocale, const CComponentFilter& aFilter) const
+	{
+	DEBUG_PRINTF(_L8("Adding  Component Entry Localizables."));
+	if(aFilter.iSetFlag & (CComponentFilter::EName | CComponentFilter::EVendor))
+		{ // If a name or vendor is specified in the filter, the locale is ignored
+		  // and the provided names are retrieved from the ComponentLocalizables table.
+		CStatement *stmt = CreateStatementObjectForComponentLocalizablesLC(*aFilter.iName, *aFilter.iVendor, aFilter.iSetFlag, aComponentId);
+		TBool res = stmt->ProcessNextRowL();
+		// If the name and the vendor are not found, leave with KErrNotFound.
+		__ASSERT_ALWAYS(res, User::Leave(KErrNotFound)); 		
+		DeleteObjectZ(aEntry.iName);
+		aEntry.iName = stmt->StrColumnL(1).AllocL(); // Ownership is transferred to the entry object
+		DeleteObjectZ(aEntry.iVendor);
+		aEntry.iVendor = stmt->StrColumnL(2).AllocL(); // Ownership is transferred to the entry object
+		CleanupStack::PopAndDestroy(stmt);
+		}
+	else
+		{// if name and/or vendor are not defined in the filter, try to find them by using the nearest language algorithm. 
+		AddComponentEntryLocalizablesL(aComponentId, aEntry, aLocale);
+		}
+	}
+
+
+TBool CScrRequestImpl::IsSoftwareTypeExistingL(TInt aSoftwareTypeId) const
+	{
+	DEBUG_PRINTF(_L8("verify Software Type Exists."));
+	TBool result = EFalse;
+	_LIT(KComponentSoftwareType, "SELECT SoftwareTypeId FROM SoftwareTypes WHERE SoftwareTypeId=?;");	
+		
+	CStatement *stmt = iDbHandle->PrepareStatementLC(KComponentSoftwareType);
+	stmt->BindIntL(1, aSoftwareTypeId);
+			
+	if(stmt->ProcessNextRowL())
+		{ // The software type exists. 
+		result = ETrue;
+		}
+	CleanupStack::PopAndDestroy(stmt);
+	return result;
+	}
+
+void CScrRequestImpl::SubsessionAddLocalizableSoftwareTypeNameL(CStatement& aStmt, CComponentEntry& aEntry, TLanguage aLocale, CCompViewSubsessionContext* aSubsessionContext) const	
+	{
+	TInt softwareTypeId = aStmt.IntColumnL(1);
+	// Check if we've already cached this software type name - caching is important here as fetching the same software type name for all components in the sub-session is expensive
+	if (softwareTypeId == aSubsessionContext->iLastSoftwareTypeId)
+		{
+		DeleteObjectZ(aEntry.iSwType);
+		aEntry.iSwType = aSubsessionContext->iLastSoftwareTypeName->AllocL();
+		}
+	else
+		{
+		AddSoftwareTypeNameToComponentEntryL(aStmt, aEntry, aLocale);
+		// Save the last results - if the next component in the filter has the same software type id, we won't have to recalculate the name
+		aSubsessionContext->iLastSoftwareTypeId = softwareTypeId;
+		DeleteObjectZ(aSubsessionContext->iLastSoftwareTypeName);
+		aSubsessionContext->iLastSoftwareTypeName = aEntry.iSwType->AllocL();
+		}
+	}
+
+CComponentEntry* CScrRequestImpl::GetNextComponentEntryL(CStatement& aStmt, CComponentFilter& aFilter, TLanguage aLocale, CCompViewSubsessionContext* aSubsessionContext) const
+	{
+	// Since the query does not account for filter's name, vendor, property and file conditions,
+	// we intersect the resut of the query with components which answer these conditions, i.e. iComponentFilterSuperset 
+	while (1)
+		{
+		if(!aStmt.ProcessNextRowL())
+			{
+			return NULL;
+			}
+		TComponentId queryComponentId = aStmt.IntColumnL(0); 
+		if (!aSubsessionContext->iFilterSupersetInUse || aSubsessionContext->iComponentFilterSuperset.FindInOrder(queryComponentId) >= 0) 
+			break; // The component id exists in both parts of the filter - return it.
+		}
+		
+	CComponentEntry *component = CreateComponentEntryFromStatementHandleL(aStmt);
+	CleanupStack::PushL(component);
+	AddComponentEntryLocalizablesL(component->ComponentId(), *component, aLocale, aFilter);
+	SubsessionAddLocalizableSoftwareTypeNameL(aStmt, *component, aLocale, aSubsessionContext);	
+	CleanupStack::Pop(component);
+	return component;
+	}
+
+void CScrRequestImpl::NextComponentSizeL(const RMessage2& aMessage, CStatement* aStmt, CComponentFilter* aFilter, CComponentEntry*& aEntry, CCompViewSubsessionContext* aSubsessionContext) const
+	{
+	__ASSERT_ALWAYS(aStmt && aFilter, PanicClient(aMessage, KScrIllegalCallSequence));
+	
+	TLanguage locale = TLanguage(aMessage.Int0());
+	
+	DeleteObjectZ(aEntry);
+	
+	TInt err(0);
+	do {
+       TRAP(err, aEntry = GetNextComponentEntryL(*aStmt, *aFilter, locale, aSubsessionContext));
+       }while(err == KErrNotFound);
+	
+	if(KErrNone != err)
+	    {
+        User::Leave(err);
+	    }
+	
+	TInt sizeSlot = 1;
+	if(!aEntry)
+		{
+		DEBUG_PRINTF(_L8("Reached the end of the view."));
+		WriteIntValueL(aMessage, sizeSlot, 0);
+		return;
+		}
+	WriteObjectSizeL(aMessage, sizeSlot, aEntry);
+	}
+
+void CScrRequestImpl::NextComponentDataL(const RMessage2& aMessage, CComponentEntry*& aEntry) const
+	{
+	DEBUG_PRINTF(_L8("Returning the component entry data."));
+	WriteObjectDataL(aMessage, 0, aEntry);
+	DeleteObjectZ(aEntry); // Delete the object to prevent it to be resent.
+	}
+
+void CScrRequestImpl::NextComponentSetSizeL(const RMessage2& aMessage, CStatement* aStmt, CComponentFilter* aFilter, RPointerArray<CComponentEntry>& aEntryList, CCompViewSubsessionContext* aSubsessionContext) const
+	{
+	DEBUG_PRINTF(_L8("Returning the size of the next component entry set."));
+	__ASSERT_ALWAYS(aStmt && aFilter, PanicClient(aMessage, KScrIllegalCallSequence));	
+
+	TInt maxArraySize = aMessage.Int0();
+	TLanguage locale = TLanguage(aMessage.Int1());
+	
+	aEntryList.ResetAndDestroy();
+	CComponentEntry *entry(0);
+	TInt err(0);
+	for(TInt i=0; i<maxArraySize; ++i)
+		{
+        do {
+           TRAP(err, entry = GetNextComponentEntryL(*aStmt, *aFilter, locale, aSubsessionContext));
+           }while(err == KErrNotFound);
+        
+        if(KErrNone != err)
+            {
+            User::Leave(err);
+            }		
+        
+		if(!entry)
+			{
+			break;
+			}
+		CleanupStack::PushL(entry);
+		aEntryList.AppendL(entry);
+		CleanupStack::Pop(entry); // Ownership is transferred
+		}
+	WriteArraySizeL(aMessage, 2, aEntryList);
+	}
+
+
+void CScrRequestImpl::NextComponentSetDataL(const RMessage2& aMessage, RPointerArray<CComponentEntry>& aEntryList) const
+	{
+	DEBUG_PRINTF(_L8("Returning the next component entry set."));
+	WriteArrayDataL(aMessage, 0, aEntryList);
+	}
+
+void CScrRequestImpl::GetComponentIdListSizeL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning the required size to copy all components IDs from the components view."));
+	// Get filter from the client
+	CComponentFilter *filter = ReadComponentFilterL(aMessage);
+	CleanupStack::PushL(filter);
+	
+	RArray<TComponentId> componentFilterSuperset;
+	CleanupClosePushL(componentFilterSuperset);
+	TBool filterSupersetInUse;
+	// Create a statement based on the filter
+	CStatement *stmt = OpenComponentViewL(*filter, componentFilterSuperset, filterSupersetInUse);
+	CleanupStack::PushL(stmt);
+	iComponentIdList.Reset();
+	// Fetch all components from the row set and put them into the component list
+	while(stmt->ProcessNextRowL())
+		{
+		TComponentId componentId = stmt->IntColumnL(0);
+		if (filterSupersetInUse && componentFilterSuperset.FindInOrder(componentId) < 0) 
+			continue; // The component id does not match the name/vendor/file/property filter - do not add it to the result		
+		iComponentIdList.InsertInOrder(componentId);
+		}
+	// Release allocated memories
+	CleanupStack::PopAndDestroy(3, filter); // stmt, componentFilterSuperset, filter
+	WriteArraySizeL(aMessage, 1, iComponentIdList);
+	}
+
+void CScrRequestImpl::GetComponentIdListDataL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Returning all components IDs from the components view."));
+	WriteArrayDataL(aMessage, 0, iComponentIdList);
+	}
+
+CStatement* CScrRequestImpl::OpenFileListStatementL(TComponentId aComponentId) const
+	{
+	_LIT(KSelectFilesOfComponent, "SELECT Location FROM ComponentsFiles WHERE ComponentId=?;");
+	
+	CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectFilesOfComponent);
+	stmt->BindIntL(1, aComponentId);
+	CleanupStack::Pop(stmt); // Ownership is transferred to the caller
+	
+	return stmt;
+	}	
+	
+CStatement* CScrRequestImpl::OpenFileListL(const RMessage2& aMessage) const
+	{
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	DEBUG_PRINTF2(_L8("Creating the requested file list for component(%d)."), componentId);
+	return OpenFileListStatementL(componentId);
+	}
+
+HBufC* CScrRequestImpl::GetNextFilePathL(CStatement& aStmt) const
+	{
+	if(!aStmt.ProcessNextRowL())
+		{
+		return NULL;
+		}
+	return aStmt.StrColumnL(0).AllocL();
+	}
+
+void CScrRequestImpl::NextFileSizeL(const RMessage2& aMessage, CStatement* aStmt, HBufC*& aFilePath) const
+	{
+	__ASSERT_ALWAYS(aStmt, PanicClient(aMessage, KScrIllegalCallSequence));
+	DeleteObjectZ(aFilePath);
+	aFilePath = GetNextFilePathL(*aStmt);
+	WriteObjectSizeL(aMessage, 0, aFilePath);
+	}
+
+void CScrRequestImpl::NextFileDataL(const RMessage2& aMessage, HBufC*& aFilePath) const
+	{
+	WriteObjectDataL(aMessage, 0, aFilePath);
+	DeleteObjectZ(aFilePath); // Delete the file path to prevent it to be resent.
+	}
+
+void CScrRequestImpl::NextFileSetSizeL(const RMessage2& aMessage, CStatement* aStmt, RPointerArray<HBufC>& aFileList) const
+	{
+	__ASSERT_ALWAYS(aStmt, PanicClient(aMessage, KScrIllegalCallSequence));
+	TInt maxArraySize = aMessage.Int0();
+	aFileList.ResetAndDestroy();
+	for(TInt i=0; i<maxArraySize; ++i)
+		{
+		HBufC *filePath = GetNextFilePathL(*aStmt);
+		if(!filePath)
+			{
+			break;
+			}
+		CleanupStack::PushL(filePath);
+		aFileList.AppendL(filePath);
+		CleanupStack::Pop(filePath); // Ownership is transferred
+		}
+	WriteArraySizeL(aMessage, 1, aFileList);
+	}
+
+void CScrRequestImpl::NextFileSetDataL(const RMessage2& aMessage, RPointerArray<HBufC>& aFileList) const
+	{
+	DEBUG_PRINTF(_L8("Returning the next file path set."));
+	WriteArrayDataL(aMessage, 0, aFileList);
+	}
+
+TComponentId CScrRequestImpl::GetComponentIdFromMsgL(const RMessage2& aMessage)
+	{	
+	return aMessage.Int0();
+	}
+
+HBufC* CScrRequestImpl::GetSoftwareTypeNameFromMsgLC(const RMessage2& aMessage)
+	{	
+	switch (CScsServer::StripScsFunctionMask(aMessage.Function()))
+		{
+		case EAddComponent:
+		case EAddComponentDependency:
+		case EDeleteComponentDependency:
+			{
+			return ReadDescLC(aMessage, 0);
+			}
+		default:
+			__ASSERT_ALWAYS(0, User::Invariant());
+		}
+	return NULL;
+	}
+
+HBufC* CScrRequestImpl::ReadFileNameFromMsgLC(const RMessage2& aMessage)
+	{
+	return ReadDescLC(aMessage, 1);
+	}
+
+void CScrRequestImpl::InitializeDbVersionL()
+	{
+	_LIT(KSelectStatement, "SELECT MajorVersion, MinorVersion, BuildNumber FROM ScrVersion;");
+	CStatement* stmt = iDbHandle->PrepareStatementLC(KSelectStatement);
+	if(!stmt->ProcessNextRowL())
+		{
+		DEBUG_PRINTF(_L("Could not find entries in the version table - internal problem"));
+		User::Leave(KErrCorrupt);
+		}
+	
+	iDbVersion.iMajor = stmt->IntColumnL(0);
+	iDbVersion.iMinor = stmt->IntColumnL(1);
+	iDbVersion.iBuild = stmt->IntColumnL(2);	
+	CleanupStack::PopAndDestroy(stmt);
+	DEBUG_PRINTF4(_L8("Opened SCR database with major version %d, minor version %d, and build number %d."), iDbVersion.iMajor,
+			iDbVersion.iMinor, iDbVersion.iBuild);		
+	}
+
+void CScrRequestImpl::VerifyDbVersionCompatibilityL() const
+	{
+	if (iDbVersion.iMajor != KDbInterfaceMajorVersion)
+		{
+		DEBUG_PRINTF3(_L8("The SCR DB is incompatible! Supported major version is %d, and the DB major version is %d"), KDbInterfaceMajorVersion, iDbVersion.iMajor);
+		User::Leave(KErrCorrupt);
+		}
+	
+	if (iDbVersion.iMinor > KDbInterfaceMinorVersion)
+		{
+		DEBUG_PRINTF3(_L8("The SCR DB supports newer features which are not available in this software version. The DB minor version is %d, while the supported minor version is %d"), iDbVersion.iMinor, KDbInterfaceMinorVersion);
+		return;
+		}	
+	
+	if (iDbVersion.iMinor < KDbInterfaceMinorVersion)
+		{
+		DEBUG_PRINTF3(_L8("The SCR DB does not support some newer features available in this software version. The DB minor version is %d, while the supported minor version is %d"), iDbVersion.iMinor, KDbInterfaceMinorVersion); 
+		return;
+		}	
+	
+	DEBUG_PRINTF4(_L8("The SCR DB has matching version with the supported interface. Supported major version is %d, minor version %d and build number %d"), KDbInterfaceMajorVersion, KDbInterfaceMinorVersion, KDbInterfaceBuildNumber);	
+	}
+
+void ExtractNumberFromHexStringL(TInt& aPosition, const TDesC8& aString, TUint32& aIntValue)
+	{
+	TLex8 l(aString.Mid(aPosition, KUidStringLen));
+	l.Val(aIntValue, EHex);
+	aPosition += KUidStringLen;
+	}
+
+void ParseUidHexStringL(const TDesC8& aUidString, TUint32& aSifPluginUid, TUint32& aInstallerSid, TUint32& aExecutionLayerSid)
+	{
+	__ASSERT_ALWAYS(aUidString.Length() >= 3*KUidStringLen, User::Leave(KErrArgument));
+	TInt pos (0); // The starting position of aUidString
+	ExtractNumberFromHexStringL(pos, aUidString, aSifPluginUid);
+	ExtractNumberFromHexStringL(pos, aUidString, aInstallerSid);
+	ExtractNumberFromHexStringL(pos, aUidString, aExecutionLayerSid);
+	}
+
+TBool CompareLocalizedSoftwareTypeName(const CLocalizedSoftwareTypeName& aLeft, const CLocalizedSoftwareTypeName& aRight)
+	{
+	TBool result = EFalse;
+	
+	TRAPD(err, result = (aLeft.Locale() == aRight.Locale() && !aLeft.NameL().CompareF(aRight.NameL())));
+	if (err != KErrNone)
+		{
+		DEBUG_PRINTF2(_L("CompareLocalizedSoftwareTypeName has left with error %d"), err);
+		return EFalse;
+		}
+	else
+		{
+		return result;
+		}
+	}
+
+TBool CompareHBufDescs(const HBufC& aLeft, const HBufC& aRight)
+	{
+	return !aLeft.CompareF(aRight);
+	}
+
+TBool CScrRequestImpl::IsSoftwareTypeExistingL(TUint32 aSwTypeId, TUint32 aSifPluginUid, RArray<TCustomAccessInfo>& aSidArray, const RPointerArray<HBufC>& aMimeTypesArray, const RPointerArray<CLocalizedSoftwareTypeName>& aLocalizedNamesArray, const TDesC& aLauncherExecutable)
+	{
+	//Check if software type id exists
+    if(!IsSoftwareTypeExistingL(aSwTypeId))
+        {
+        DEBUG_PRINTF2(_L8("IsSoftwareTypeExistingL: Software Type Id (%d) doesn't exist in the SCR."), aSwTypeId);
+        return EFalse;
+        }
+    
+    //Check if sif plugin uid for the software type id is the same 
+    TInt pluginUid(0);
+    if(!GetSifPluginUidIInternalL(aSwTypeId, pluginUid))
+        {
+        DEBUG_PRINTF2(_L8("IsSoftwareTypeExistingL: SIF Plugin Uid doesn't exist in the SCR for TypeId %d."), aSwTypeId);
+        return EFalse;
+        }
+    
+    if(aSifPluginUid != pluginUid)
+        {
+        DEBUG_PRINTF2(_L8("IsSoftwareTypeExistingL: SIF Plugin Uid doesn't match with the one in the SCR."), pluginUid);
+        return EFalse;
+        }
+    
+    //Check if launcher executable for the software type id is the same
+    HBufC *launcherExe;
+    _LIT(KSelectLauncherExecutable, "SELECT LauncherExecutable FROM SoftwareTypes WHERE SoftwareTypeId=?;");
+    CStatement* stmt = iDbHandle->PrepareStatementLC(KSelectLauncherExecutable);
+    stmt->BindIntL(1, aSwTypeId);
+
+    if(stmt->ProcessNextRowL())
+        {
+        launcherExe = stmt->StrColumnL(0).AllocLC();
+        if(launcherExe->Compare(aLauncherExecutable) != 0)
+            {
+            DEBUG_PRINTF(_L8("IsSoftwareTypeExistingL: Launcher Executable doesn't match with the one in the SCR."));
+            CleanupStack::PopAndDestroy(2, stmt);
+            return EFalse;
+            }
+        CleanupStack::PopAndDestroy(2, stmt);
+        }
+    else
+        {
+        DEBUG_PRINTF2(_L8("IsSoftwareTypeExistingL: Launcher Executable doesn't exist in the SCR for TypeId %d."), aSwTypeId);
+        CleanupStack::PopAndDestroy(stmt);
+        return EFalse;
+        }
+            
+    //Check if associated installer sid's for the software type id is the same
+    
+    RArray<TSecureId> installerSids;
+    CleanupClosePushL(installerSids);
+    if(GetSidsForSoftwareTypeIdL(aSwTypeId, installerSids))
+        {
+        for(TInt i=0; i<aSidArray.Count(); ++i)
+            {
+            if(KErrNotFound == installerSids.Find(aSidArray[i].SecureId()))
+                {
+                DEBUG_PRINTF(_L8("IsSoftwareTypeExistingL: One of the Sid doesn't match with the one in the SCR."));
+                CleanupStack::PopAndDestroy(&installerSids);
+                return EFalse;
+                }
+            }
+        }
+    CleanupStack::PopAndDestroy(&installerSids);
+    
+	//Check if localized software type name for the software type id is the same
+	_LIT(KSelectSwTypeNames, "SELECT Locale,Name FROM SoftwareTypeNames WHERE SoftwareTypeId=? AND Locale!=?;");
+	CStatement* stmtNames = iDbHandle->PrepareStatementLC(KSelectSwTypeNames);
+	stmtNames->BindIntL(1, aSwTypeId);
+	stmtNames->BindIntL(2, KNonLocalized);
+	TInt numOfFoundNames (0);
+	while(stmtNames->ProcessNextRowL())
+		{
+		++numOfFoundNames;
+		const TDesC& swTypeNameValue = stmtNames->StrColumnL(1);
+		CLocalizedSoftwareTypeName *swTypeName = CLocalizedSoftwareTypeName::NewLC(swTypeNameValue, TLanguage(stmtNames->IntColumnL(0)));
+		TInt ret = aLocalizedNamesArray.Find(swTypeName, TIdentityRelation<CLocalizedSoftwareTypeName>(CompareLocalizedSoftwareTypeName));
+		CleanupStack::PopAndDestroy(swTypeName);
+		if(KErrNotFound == ret)
+			{
+			DEBUG_PRINTF2(_L("IsSoftwareTypeExistingL: %S doesn't exist in the provided sofwtare type names list."), &swTypeNameValue);
+			CleanupStack::PopAndDestroy(stmtNames);
+			return EFalse;
+			}
+		}
+	CleanupStack::PopAndDestroy(stmtNames);
+	if(numOfFoundNames != aLocalizedNamesArray.Count())
+		{
+		DEBUG_PRINTF3(_L("IsSoftwareTypeExistingL: the number of provided software type names (%d) is different than the number of existing software type names (%d) in the SCR."), numOfFoundNames, aLocalizedNamesArray.Count());
+		return EFalse;
+		}
+	
+	//Check if mime type for the software type id is the same
+	_LIT(KSelectMimeTypes, "SELECT MimeType FROM MimeTypes WHERE SoftwareTypeId=?;");
+	CStatement* stmtMimes = iDbHandle->PrepareStatementLC(KSelectMimeTypes);
+	stmtMimes->BindIntL(1, aSwTypeId);
+	TInt numOfFoundMimes (0);
+	while(stmtMimes->ProcessNextRowL())
+		{
+		++numOfFoundMimes;
+		HBufC *mimeType = stmtMimes->StrColumnL(0).AllocLC();
+		TInt ret = aMimeTypesArray.Find(mimeType, TIdentityRelation<HBufC>(CompareHBufDescs));
+		if(KErrNotFound == ret)
+			{
+			DEBUG_PRINTF2(_L("IsSoftwareTypeExistingL: %S doesn't exist in the provided MIME types list."), mimeType);
+			CleanupStack::PopAndDestroy(2, stmtMimes); // stmtMimes, mimeType
+			return EFalse;
+			}
+		CleanupStack::PopAndDestroy(mimeType);
+		}
+	CleanupStack::PopAndDestroy(stmtMimes);
+	if(numOfFoundMimes != aMimeTypesArray.Count())
+		{
+		DEBUG_PRINTF3(_L("IsSoftwareTypeExistingL: the number of provided MIME types (%d) is different than the number of existing MIME types (%d) in the SCR."), numOfFoundMimes, aMimeTypesArray.Count());
+		return EFalse;
+		}
+	// All software type details are identical
+	DEBUG_PRINTF(_L8("IsSoftwareTypeExistingL: All software type details are identical. This is a software type update."));
+	return ETrue;
+	}
+
+void CScrRequestImpl::AddSoftwareTypeL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Adding a new software type."));
+	// NB SoftwareTypeId is the hash of unique software type name. Since this name is unique, it is expected
+	// that there won't be any conflicts with software type ids. If an installer is uninstalled and then re-installed,
+	// the same software type id will be assigned for it as its unique name is not changed. The advantage is that
+	// the orphaned components will become non-orphaned again automatically when their installer is re-installed.
+	// Otherwise, we would have to find a complex solution to associate the software type id of orphaned components
+	// with the corresponding installer which had been re-installed.
+	// Another advantage of this approach is that it is not mandatory to query SoftwareTypes table in order to get
+	// the software type id of an installer. If the uniqe software type name of the installer is known, its hash
+	// is simply calculated to obtain its software type id.
+	
+	CSoftwareTypeRegInfo *regInfo = ReadObjectFromMessageLC<CSoftwareTypeRegInfo>(aMessage, 0);
+	
+	HBufC* uniqueSwTypeName = HBufC::NewLC(regInfo->UniqueSoftwareTypeName().Length());
+	uniqueSwTypeName->Des().Copy(regInfo->UniqueSoftwareTypeName());
+
+	TUint32 swTypeId = HashCaseSensitiveL(regInfo->UniqueSoftwareTypeName());
+	    
+	TUint32 sifPluginUid (0);
+	sifPluginUid = regInfo->SifPluginUid().iUid;
+	
+	RArray<TCustomAccessInfo> sidArray;
+	sidArray = regInfo->CustomAccessList();
+	
+	RPointerArray<HBufC> mimeTypesArray = regInfo->MimeTypes();
+	
+	RPointerArray<CLocalizedSoftwareTypeName> localizedNamesArray = regInfo->LocalizedSoftwareTypeNames();
+	
+	HBufC* launcherExecutable = HBufC::NewLC(regInfo->LauncherExecutable().Length());
+	launcherExecutable->Des().Copy(regInfo->LauncherExecutable());
+
+	if (IsSoftwareTypeExistingL(swTypeId, sifPluginUid, sidArray, mimeTypesArray, localizedNamesArray, *launcherExecutable))
+		{ // If the software type exists, do nothing and return;	
+		CleanupStack::PopAndDestroy(3, regInfo); // uniqueSwTypeName, launcherExecutable, regInfo
+		return; 
+		}
+	
+	// First, insert the main record to SoftwareTypes table
+	_LIT(KInsertSwType, "INSERT INTO SoftwareTypes(SoftwareTypeId,SifPluginUid,LauncherExecutable) VALUES(?,?,?);");
+	TInt numberOfValuesSwType = 3;
+	ExecuteStatementL(KInsertSwType(), numberOfValuesSwType, EValueInteger, swTypeId, EValueInteger, sifPluginUid, EValueString, launcherExecutable);
+	
+	_LIT(KInsertCustomAccess, "INSERT INTO CustomAccessList(SoftwareTypeId,SecureId,AccessMode) VALUES(?,?,?);");
+	TInt numberOfValuesCustomAccess = 3;
+	for(TInt i=0; i<sidArray.Count(); ++i)
+		{
+		TUint32 sid = sidArray[i].SecureId();
+		TAccessMode accessMode = sidArray[i].AccessMode();
+		ExecuteStatementL(KInsertCustomAccess(), numberOfValuesCustomAccess, EValueInteger, swTypeId, EValueInteger, sid, EValueInteger, accessMode);
+		}
+
+	// Then, insert MIME types of this software type into MimeTypes table
+	_LIT(KInsertMimeType, "INSERT INTO MimeTypes(SoftwareTypeId,MimeType) VALUES(?,?);");
+	TInt numberOfValuesMimeType = 2;
+	TInt countMimeTypes = mimeTypesArray.Count();
+	for(TInt i=0; i<countMimeTypes; ++i)
+		{
+		ExecuteStatementL(KInsertMimeType(), numberOfValuesMimeType, EValueInteger, swTypeId, EValueString, mimeTypesArray[i]);
+		}
+		
+	// Finally, insert unique and localized names into SoftwareTypeNames table
+	_LIT(KInsertSwTypeName, "INSERT INTO SoftwareTypeNames(SoftwareTypeId,Locale,Name) VALUES(?,?,?);");
+	TInt numberOfValuesSwTypeName = 3;
+	ExecuteStatementL(KInsertSwTypeName(), numberOfValuesSwTypeName, EValueInteger, swTypeId, EValueInteger, KNonLocalized, EValueString, uniqueSwTypeName);
+		
+	TInt countNames = localizedNamesArray.Count();
+	for(TInt i=0; i<countNames; ++i)
+		{
+		TLanguage locale = localizedNamesArray[i]->Locale();
+		const TDesC& name = localizedNamesArray[i]->NameL();
+		ExecuteStatementL(KInsertSwTypeName(), numberOfValuesSwTypeName, EValueInteger, swTypeId, EValueInteger, locale, EValueString, &name);
+		}	
+	CleanupStack::PopAndDestroy(3, regInfo); // uniqueSwTypeName, launcherExecutable, regInfo
+	}
+
+void CScrRequestImpl::DeleteSoftwareTypeL(const RMessage2& aMessage)
+	{
+	HBufC *uniqueSwTypeName = ReadDescLC(aMessage, 0);
+	DEBUG_PRINTF2(_L("Deleting Software type (%S)."), uniqueSwTypeName);
+	
+	TUint32 swTypeId = HashCaseSensitiveL(*uniqueSwTypeName);
+	CleanupStack::PopAndDestroy(uniqueSwTypeName);
+	
+	// First, delete software type names
+	_LIT(KDeleteSoftwareTypeNames, "DELETE FROM SoftwareTypeNames WHERE SoftwareTypeId=?;");
+	TInt numberOfValues = 1;
+	ExecuteStatementL(KDeleteSoftwareTypeNames(), numberOfValues, EValueInteger, swTypeId);
+	
+	// Secondly, delete the actual software type record
+	_LIT(KDeleteSoftwareType, "DELETE FROM SoftwareTypes WHERE SoftwareTypeId=?;");
+	ExecuteStatementL(KDeleteSoftwareType(), numberOfValues, EValueInteger, swTypeId);
+	
+	_LIT(KDeleteCustomAccess, "DELETE FROM CustomAccessList WHERE SoftwareTypeId=?;");
+	ExecuteStatementL(KDeleteCustomAccess(), numberOfValues, EValueInteger, swTypeId);
+	
+	// Thirdly, get the list of MIME types belong to the deleted software type. 
+	// This list will be returned to the client with another request (GetDeletedMimeTypesL)
+	_LIT(KSelectMimeTypes, "SELECT MimeType FROM MimeTypes WHERE SoftwareTypeId=?;");
+	CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectMimeTypes);
+	stmt->BindIntL(1, swTypeId);
+	
+	iDeletedMimeTypes.ResetAndDestroy();
+	while(stmt->ProcessNextRowL())
+		{
+		iDeletedMimeTypes.AppendL(stmt->StrColumnL(0).AllocL());	
+		}
+	CleanupStack::PopAndDestroy(stmt);
+	
+	// Finally, delete the MIME types belong to the deleted software type name
+	_LIT(KDeleteMimeTypes, "DELETE FROM MimeTypes WHERE SoftwareTypeId=?;");
+	ExecuteStatementL(KDeleteMimeTypes(), numberOfValues, EValueInteger, swTypeId);
+	WriteArraySizeL(aMessage, 1, iDeletedMimeTypes);
+	}
+
+void CScrRequestImpl::GetDeletedMimeTypesL(const RMessage2& aMessage) const
+	{
+	WriteArrayDataL(aMessage, 0, iDeletedMimeTypes);
+	iDeletedMimeTypes.ResetAndDestroy();
+	}
+
+TInt CScrRequestImpl::GetSoftwareTypeForComponentL(TComponentId aComponentId) const
+    {
+    _LIT(KSelectComponentSoftwareTypeId, "SELECT SoftwareTypeId FROM Components WHERE ComponentId=?;");   
+    
+    TInt swTypeId = 0;
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectComponentSoftwareTypeId);
+    stmt->BindIntL(1, aComponentId);
+        
+    if(!stmt->ProcessNextRowL())
+        { 
+        DEBUG_PRINTF2(_L("Component Id (%d) couldn't be found!"), aComponentId);
+        User::Leave(KErrNotFound);
+        }
+    
+    swTypeId = stmt->IntColumnL(0);
+    CleanupStack::PopAndDestroy(stmt);
+    
+    return swTypeId;
+    }
+
+TBool CScrRequestImpl::GetIsComponentOrphanedL(TComponentId aComponentId) const	
+	{
+	// Get the software type for component
+	TUint32 swTypeId = GetSoftwareTypeForComponentL(aComponentId);
+		
+	// The component is orphaned iff the software type does not exist.
+	return !IsSoftwareTypeExistingL(swTypeId);
+	}
+	
+void CScrRequestImpl::GetIsComponentOrphanedL(const RMessage2& aMessage) const
+	{
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	TBool result = GetIsComponentOrphanedL(componentId);
+	DEBUG_PRINTF2(_L8("Retrieving whether the component(%d) is orphaned."), componentId);
+
+	TPckg<TBool> resultPkg(result);
+	
+	aMessage.WriteL(1, resultPkg);	
+	}
+
+void CheckAndCreateLogFileL(RFs& aFs, const TDesC& aFileName)
+	{
+	TEntry entry;
+	TInt err = aFs.Entry(aFileName, entry);
+	
+	if(KErrNone == err)
+		return;
+
+	if (KErrPathNotFound == err)
+		{
+		User::LeaveIfError(aFs.MkDirAll(aFileName));
+		}		
+	else if(KErrNotFound != err)
+		{
+		DEBUG_PRINTF2(_L("The log file couldn't be opened. Error=%d."), err);
+		User::Leave(err);	
+		}
+	
+	RFileWriteStream stream;
+	User::LeaveIfError(stream.Create(aFs, aFileName, EFileWrite | EFileShareAny | EFileStream));
+	stream.PushL();
+	stream.WriteInt32L(1); // The major version of the log file
+	stream.WriteInt32L(0); // The minor version of the log file
+	// Please note that the log file version is not used currently. It is implemented for a possible future need.
+	// If the version format is changed, then the end of FlushLogEntriesArrayL function where the final log count is written must be updated.
+	// FlushLogEntriesArrayL assumes that first 8 bytes store version information.
+	stream.WriteInt32L(0); // The number of log records in the log file
+	stream.CommitL();
+	CleanupStack::PopAndDestroy(&stream);			
+	}
+
+void CScrRequestImpl::FlushLogEntriesArrayL()
+	{
+	TInt logCount2bFlushed = iLogEntries.Count();
+	if(!logCount2bFlushed)
+		return; // No record to write into the log file.
+	
+	// Get the log file name
+	HBufC *logFileName = UpdateFilePathDriveLC(KScrLogFileName, iFs.GetSystemDriveChar());
+	// Check whether the log file exists. If not, create one.
+	CheckAndCreateLogFileL(iFs, *logFileName);
+	
+	RFileReadStream readStream;
+	User::LeaveIfError(readStream.Open(iFs, *logFileName, EFileRead|EFileShareExclusive|EFileStream));
+	readStream.PushL();
+	(void)readStream.ReadInt32L(); // skip the major version of the log file
+	(void)readStream.ReadInt32L(); // skip the minor version of the log file
+	TInt currentLogCount = readStream.ReadInt32L();
+		
+	if(KMaxScrLogEntries <= currentLogCount + logCount2bFlushed)
+		{
+		//Create a temporary file and read the log file in that
+		//oldest entries will be removed in the temporary log file
+		HBufC *tempLogName = UpdateFilePathDriveLC(KScrTempLogFileName, iFs.GetSystemDriveChar());
+		TInt err = iFs.Delete(*tempLogName);
+		__ASSERT_ALWAYS(err == KErrNotFound || err == KErrNone, User::Leave(err));
+		CheckAndCreateLogFileL(iFs, *tempLogName);
+		
+		RFileWriteStream writeStream;
+		User::LeaveIfError(writeStream.Open(iFs, *tempLogName, EFileWrite | EFileStream));
+		writeStream.PushL();
+		writeStream.Sink()->SeekL(MStreamBuf::EWrite,EStreamEnd); // Skip the version info and log count
+			
+		TInt tmpLogCount (0);
+		CScrLogEntry *log = NULL;
+			
+		for (TInt i = logCount2bFlushed; i < currentLogCount; ++i, ++tmpLogCount)
+			{
+			log = CScrLogEntry::NewLC(readStream);		
+			writeStream << *log;
+			CleanupStack::PopAndDestroy(log); 					
+			} // for
+			
+		currentLogCount = tmpLogCount; 
+		writeStream.CommitL();
+		CleanupStack::PopAndDestroy(&writeStream); 
+		readStream.Release();
+			
+		RStsSession stsSession; // transaction service
+		CleanupClosePushL(stsSession);
+		stsSession.CreateTransactionL();				
+			
+		stsSession.RemoveL(*logFileName);
+		stsSession.RegisterNewL(*logFileName);
+		stsSession.RegisterTemporaryL(*tempLogName);
+			
+		TInt renameErr = iFs.Rename(*tempLogName,*logFileName);							
+		if (KErrNone == renameErr)
+			{
+			// commit file changes.
+			stsSession.CommitL();
+			}
+		else
+			{
+			// rollback file changes and leave with the error code.
+			stsSession.RollBackL();
+			DEBUG_PRINTF2(_L("The log file couldn't be renamed. Error=%d."), renameErr);
+			User::Leave(renameErr);
+			}
+		CleanupStack::PopAndDestroy(2, tempLogName); // tempLogName, stsSession
+		} // endif KMaxScrLogEntries <=
+	
+	CleanupStack::PopAndDestroy(&readStream);
+	
+	RFile file;
+	User::LeaveIfError(file.Open(iFs, *logFileName, EFileRead|EFileWrite| EFileShareExclusive| EFileStream));
+	CleanupClosePushL(file);
+	TInt pos (0);
+	User::LeaveIfError(file.Seek(ESeekEnd, pos));	
+	RFileWriteStream stream(file, pos);
+	stream.PushL();
+	
+	TInt startIdx = (logCount2bFlushed - KMaxScrLogEntries)>0 ? (logCount2bFlushed - KMaxScrLogEntries) : 0;
+	TInt logCountFlushed (0);
+	for(TInt i=startIdx; i<logCount2bFlushed; ++i, ++logCountFlushed)
+		{
+		iLogEntries[i]->ExternalizeL(stream);
+		}
+	iLogEntries.ResetAndDestroy();
+	stream.CommitL();
+	stream.Release();
+	file.Close();
+		
+	// Update the log count
+	User::LeaveIfError(stream.Open(iFs, *logFileName, EFileRead|EFileWrite|EFileShareExclusive|EFileStream));
+	stream.Sink()->SeekL(MStreamBuf::EWrite,EStreamBeginning,8); // Skip the version info
+	stream.WriteInt32L(logCountFlushed + currentLogCount);
+	stream.CommitL();
+	
+	CleanupStack::PopAndDestroy(3, logFileName); // logFileName, file, stream
+	}
+
+void CScrRequestImpl::GetLogFileHandleL(const RMessage2& aMessage) const
+	{
+	// Get the log file name
+	HBufC *logFileName = UpdateFilePathDriveLC(KScrLogFileName, iFs.GetSystemDriveChar());
+	// Check whether the log file exists. If not, create one.
+	CheckAndCreateLogFileL(iFs, *logFileName);
+	
+	RFile file;
+	User::LeaveIfError(file.Open(iFs, *logFileName, EFileRead | EFileShareAny | EFileStream));
+	CleanupClosePushL(file);
+		
+	// Store the RFile handle into the package buffer in slot 0 and complete the message with the RFs handle
+	User::LeaveIfError(file.TransferToClient(aMessage, 0));
+	ASSERT(aMessage.IsNull());  // The message should have been completed
+	CleanupStack::PopAndDestroy(2, logFileName); // logFileName, file
+	}
+
+void CScrRequestImpl::GetIsComponentOnReadOnlyDriveL(const RMessage2& aMessage) const
+	{
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	DEBUG_PRINTF2(_L8("Checking if the component(%d) is on read-only drive."), componentId);
+	
+	// Get the drives on which the component files' are registered
+	TInt driveBitmask = GetInstalledDrivesBitmaskL(componentId);	
+			
+	TBool result = EFalse;
+	
+	for (TInt index = 0; index < KMaxDrives; ++index, driveBitmask >>= 1)
+		{
+		if ((driveBitmask & 0x1) && IsDriveReadOnlyL(index))
+			{
+			DEBUG_PRINTF3(_L8("Component %d has registered a file at read-only drive %c ."), componentId, index + 'a');
+			result = ETrue;
+			break;
+			}
+		}
+	
+	TPckg<TBool> resPkg(result);	
+	aMessage.WriteL(1, resPkg);	
+	}
+
+TBool CScrRequestImpl::IsDriveReadOnlyL(TInt driveIndex) const
+	{
+	TDriveInfo driveInfo;
+	User::LeaveIfError(iFs.Drive(driveInfo,driveIndex));
+		
+	TBool result = EFalse;
+	if ((driveInfo.iDriveAtt&KDriveAttRom) || (driveInfo.iType==EMediaRom))
+		result = ETrue;
+	
+	return result;
+	}
+
+void CScrRequestImpl::GetIsComponentPresentL(const RMessage2& aMessage) const
+	{
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	TBool result = IsComponentPresentL(componentId);
+				
+	TPckg<TBool> isCompPresent(result);	
+	aMessage.WriteL(1, isCompPresent);	
+	}
+
+
+TBool CScrRequestImpl::IsComponentPresentL(TComponentId componentId) const
+    {
+    DEBUG_PRINTF2(_L8("Checking if the component(%d) is available."), componentId);
+    
+    _LIT(KSelectCompPresent, "SELECT CompPresence FROM Components WHERE ComponentId=?;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectCompPresent);
+    stmt->BindIntL(1, componentId);
+    if(!stmt->ProcessNextRowL())
+        {
+        DEBUG_PRINTF2(_L8("Component (%d) couldn't be found in the SCR database."), componentId);
+        User::Leave(KErrNotFound);
+        }
+    TBool result = (stmt->IntColumnL(0) == 1);
+    CleanupStack::PopAndDestroy(stmt);
+    
+    // The default value for CompPresence is ETrue. So when we find that the SCR DB contains the 
+    // default property value we check if the drives registered by the component are present.   
+    if (result && !CheckForMediaPresenceL(componentId))
+        {
+        result = EFalse;
+        }
+    return result;
+    }
+
+void CScrRequestImpl::SetIsComponentPresentL(const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF(_L8("Setting the component as present."));
+	_LIT(KColumnNameCompPresence, "CompPresence");
+	ReadAndSetCommonComponentPropertyL(aMessage, KColumnNameCompPresence);	
+	}
+
+void CScrRequestImpl::GetComponentSupportedLocalesListSizeL(const RMessage2& aMessage) const
+	{
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+	DEBUG_PRINTF2(_L8("Returning the required size to copy all matching supported language IDs for component =(%d)"), componentId);
+
+	_LIT(KSelectMatchingSupportedLocales, "SELECT Locale FROM ComponentLocalizables WHERE ComponentId=?;");
+	CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectMatchingSupportedLocales);
+	stmt->BindIntL(1, componentId);
+	iMatchingSupportedLanguageList.Close();
+	while(stmt->ProcessNextRowL())
+		{
+		TLanguage languageId = (TLanguage)stmt->IntColumnL(0);
+		iMatchingSupportedLanguageList.Insert(languageId,iMatchingSupportedLanguageList.Count());
+		}
+	if (iMatchingSupportedLanguageList.Count() == 1)
+	    {
+	    iMatchingSupportedLanguageList.Close();
+	    }
+	
+	// Release allocated memories
+	CleanupStack::PopAndDestroy(1, stmt); // stmt
+	WriteArraySizeL(aMessage, 1, iMatchingSupportedLanguageList);
+	
+	}
+
+void CScrRequestImpl::GetComponentSupportedLocalesListDataL(const RMessage2& aMessage) const
+	{
+	DEBUG_PRINTF(_L8("Getting the Data of matching supported languages"));
+	WriteArrayDataL(aMessage, 0, iMatchingSupportedLanguageList);
+	iMatchingSupportedLanguageList.Close();
+	}
+
+TBool CScrRequestImpl::DoesAppWithScreenModeExistL(TUid aAppUid, TInt aScreenMode, TLanguage aLocale) const
+    {
+    _LIT(KSelectAppUidFromLocalizableAppInfo,"SELECT COUNT(*)FROM (LocalizableAppInfo JOIN ViewData ON LocalizableAppInfo.LocalAppInfoId = ViewData.LocalAppInfoId) WHERE AppUid = ? AND ScreenMode = ? AND Locale = ?;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectAppUidFromLocalizableAppInfo);
+    stmt->BindIntL(1, aAppUid.iUid);            
+    stmt->BindIntL(2, aScreenMode);
+    stmt->BindIntL(3, aLocale);
+    stmt->ProcessNextRowL();
+    TInt count = stmt->IntColumnL(0);
+    CleanupStack::PopAndDestroy(stmt);
+    if(count!=0)
+        return ETrue;
+    else 
+        return EFalse;
+    }
+
+void CScrRequestImpl::GetAppUidsL(CAppInfoViewSubsessionContext* aSubsessionContext, TBool aScreenModePresent) const
+    {
+	DEBUG_PRINTF(_L8("Returning the App Uid."));
+    CStatement* stmt;
+    _LIT(KAllAppIds,"SELECT AppUid from AppRegistrationInfo"); 
+    stmt = iDbHandle->PrepareStatementLC(KAllAppIds);
+    aSubsessionContext->iApps.Close();
+    while(stmt->ProcessNextRowL())
+        {
+        TAppUidWithLocaleInfo appUidWithLocaleInfo;
+        appUidWithLocaleInfo.iAppUid = TUid::Uid(stmt->IntColumnL(0));
+        appUidWithLocaleInfo.iLocale = KUnspecifiedLocale;
+        GetNearestAppLanguageL(aSubsessionContext->iLocale, appUidWithLocaleInfo.iAppUid, appUidWithLocaleInfo.iLocale);
+        if(aScreenModePresent)
+        	{
+            if(DoesAppWithScreenModeExistL(appUidWithLocaleInfo.iAppUid, aSubsessionContext->iScreenMode, appUidWithLocaleInfo.iLocale))
+                {
+                aSubsessionContext->iApps.AppendL(appUidWithLocaleInfo);
+                }
+        	}
+        
+        else
+        	{
+            aSubsessionContext->iApps.AppendL(appUidWithLocaleInfo);
+        	}
+        }
+    CleanupStack::PopAndDestroy(stmt);  
+    }
+        
+void CScrRequestImpl::GetEmbeddableAppUidsL(CAppInfoViewSubsessionContext* aSubsessionContext, TBool aScreenModePresent) const
+    {
+	DEBUG_PRINTF(_L8("Returning the Embeddable App Uids."));
+    CStatement *stmt1;
+    _LIT (KGetAppIdWithEmbeddability, "SELECT DISTINCT AppUid from AppRegistrationInfo where Embeddable IN(1,2)"); 
+    stmt1 = iDbHandle->PrepareStatementLC(KGetAppIdWithEmbeddability);
+    aSubsessionContext->iApps.Close();
+    while(stmt1->ProcessNextRowL())
+    	{
+        TAppUidWithLocaleInfo appUidWithLocaleInfo;
+        appUidWithLocaleInfo.iAppUid = TUid::Uid(stmt1->IntColumnL(0));
+        appUidWithLocaleInfo.iLocale = KUnspecifiedLocale;
+        GetNearestAppLanguageL(aSubsessionContext->iLocale, appUidWithLocaleInfo.iAppUid, appUidWithLocaleInfo.iLocale);
+        if(aScreenModePresent)
+        	{
+            if(DoesAppWithScreenModeExistL(appUidWithLocaleInfo.iAppUid, aSubsessionContext->iScreenMode, appUidWithLocaleInfo.iLocale))
+                {
+                aSubsessionContext->iApps.AppendL(appUidWithLocaleInfo);
+                }
+        	}
+        else
+        	{
+            aSubsessionContext->iApps.AppendL(appUidWithLocaleInfo);
+        	}
+    	}
+    CleanupStack::PopAndDestroy(stmt1); 
+    }
+
+
+void CScrRequestImpl::GetServerAppUidsL(CAppInfoViewSubsessionContext* aSubsessionContext, TUid aServiceUid, TBool aScreenModePresent) const
+    {
+    CStatement *stmt1;
+    _LIT(KSelectAppUidForServiceId,"SELECT DISTINCT AppUid from ServiceInfo where Uid = ?"); 
+    stmt1 = iDbHandle->PrepareStatementLC(KSelectAppUidForServiceId);
+    stmt1->BindIntL(1, aServiceUid.iUid);
+    aSubsessionContext->iApps.Close();
+    while(stmt1->ProcessNextRowL())
+    	{
+        TAppUidWithLocaleInfo appUidWithLocaleInfo;
+        appUidWithLocaleInfo.iAppUid = TUid::Uid(stmt1->IntColumnL(0));
+        appUidWithLocaleInfo.iLocale = KUnspecifiedLocale;
+        GetNearestAppLanguageL(aSubsessionContext->iLocale, appUidWithLocaleInfo.iAppUid, appUidWithLocaleInfo.iLocale);
+        if(aScreenModePresent)
+        	{
+            if(DoesAppWithScreenModeExistL(appUidWithLocaleInfo.iAppUid, aSubsessionContext->iScreenMode, appUidWithLocaleInfo.iLocale))
+                {
+                aSubsessionContext->iApps.AppendL(appUidWithLocaleInfo);
+                }
+        	}
+        else
+        	{
+            aSubsessionContext->iApps.AppendL(appUidWithLocaleInfo);
+        	}
+    	}
+    CleanupStack::PopAndDestroy(stmt1); 
+    }
+
+void CScrRequestImpl::GetAppUidsWithEmbeddabilityFilterL(CAppInfoViewSubsessionContext* aSubsessionContext, TEmbeddableFilter& aFilter, TBool aScreenModePresent) const
+    {
+    CStatement *stmt1;
+    TApplicationCharacteristics::TAppEmbeddability embeddability;
+    _LIT(KSelectAppUidForServiceId,"SELECT DISTINCT AppUid,Embeddable from AppRegistrationInfo"); 
+    stmt1 = iDbHandle->PrepareStatementLC(KSelectAppUidForServiceId);
+    aSubsessionContext->iApps.Close();  
+    while(stmt1->ProcessNextRowL())
+            {   
+            embeddability  = (TApplicationCharacteristics::TAppEmbeddability)stmt1->IntColumnL(1);
+            if(aFilter.MatchesEmbeddability(embeddability))
+            	{
+                TAppUidWithLocaleInfo appUidWithLocaleInfo;
+                appUidWithLocaleInfo.iAppUid = TUid::Uid(stmt1->IntColumnL(0));
+                appUidWithLocaleInfo.iLocale = KUnspecifiedLocale;
+                GetNearestAppLanguageL(aSubsessionContext->iLocale, appUidWithLocaleInfo.iAppUid, appUidWithLocaleInfo.iLocale);
+                if(aScreenModePresent)
+                	{
+                    if(DoesAppWithScreenModeExistL(appUidWithLocaleInfo.iAppUid, aSubsessionContext->iScreenMode, appUidWithLocaleInfo.iLocale))
+                        {
+                        aSubsessionContext->iApps.AppendL(appUidWithLocaleInfo);
+                        }
+                	}
+                else
+                	{
+                    aSubsessionContext->iApps.AppendL(appUidWithLocaleInfo);
+                	}
+            	}
+            else
+            	continue;
+            }
+    CleanupStack::PopAndDestroy(stmt1);
+    }
+
+void CScrRequestImpl::GetAppUidsWithCapabilityMaskAndValueL(CAppInfoViewSubsessionContext* aSubsessionContext,TUint aCapabilityAttrFilterMask, TUint aCapabilityAttrFilterValue, TBool aScreenModePresent) const
+    {
+    CStatement *stmt1;
+    TUint attributes;
+    _LIT(KSelectAppUidForServiceId,"SELECT DISTINCT AppUid,Attributes from AppRegistrationInfo"); 
+    stmt1 = iDbHandle->PrepareStatementLC(KSelectAppUidForServiceId);            
+    aSubsessionContext->iApps.Close(); 
+    while(stmt1->ProcessNextRowL())
+    	{
+    	attributes = stmt1->IntColumnL(1);
+        if(((attributes & aCapabilityAttrFilterMask) == (aCapabilityAttrFilterValue & aCapabilityAttrFilterMask)))
+        	{
+            TAppUidWithLocaleInfo appUidWithLocaleInfo;
+            appUidWithLocaleInfo.iAppUid = TUid::Uid(stmt1->IntColumnL(0));
+            appUidWithLocaleInfo.iLocale = KUnspecifiedLocale;
+            GetNearestAppLanguageL(aSubsessionContext->iLocale, appUidWithLocaleInfo.iAppUid, appUidWithLocaleInfo.iLocale);
+            if(aScreenModePresent)
+            	{
+                if(DoesAppWithScreenModeExistL(appUidWithLocaleInfo.iAppUid, aSubsessionContext->iScreenMode, appUidWithLocaleInfo.iLocale))
+                    {
+                    aSubsessionContext->iApps.AppendL(appUidWithLocaleInfo);
+                    }
+            	}
+            else
+            	{
+                aSubsessionContext->iApps.AppendL(appUidWithLocaleInfo);
+            	}
+        	}
+        else
+        	continue;
+    	}
+    CleanupStack::PopAndDestroy(stmt1);
+    }
+
+void CScrRequestImpl::GetLocalesForAppIdL(RArray<TInt>& aLocales, TUid aAppUid) const
+    {     
+    _LIT(KAllLocales," SELECT Locale from LocalizableAppInfo where AppUid = ? ORDER BY Locale");               
+    CStatement* stmt = iDbHandle->PrepareStatementLC(KAllLocales); 
+    stmt->BindIntL(1, aAppUid.iUid);
+    aLocales.Close();
+    while(stmt->ProcessNextRowL())
+         {
+         aLocales.Append(stmt->IntColumnL(0));                  
+         }
+    CleanupStack::PopAndDestroy(1,stmt);                    
+    }
+
+CStatement* CScrRequestImpl::CreateStatementForAppInfoL(const TDesC& aStatement, TLanguage aLocale, TInt aValuesNum,...) const 
+    {
+    VA_LIST argList;
+    VA_START(argList, aValuesNum);  
+    
+    CStatement *stmt = iDbHandle->PrepareStatementLC(aStatement);   
+    BindStatementValuesL(*stmt, aLocale,aValuesNum, argList); 
+    CleanupStack::Pop(stmt);
+    return stmt;    
+    }
+
+CAppInfoFilter* CScrRequestImpl::ReadAppInfoFilterL(const RMessage2& aMessage) const
+    {
+    CAppInfoFilter *filter = ReadObjectFromMessageLC<CAppInfoFilter>(aMessage, 0);
+    CleanupStack::Pop(filter);
+    return filter;
+    }
+
+void CScrRequestImpl::OpenAppInfoViewL(CAppInfoFilter& aFilter, CAppInfoViewSubsessionContext* aSubsessionContext)
+    {
+	DEBUG_PRINTF(_L8("Opening App Info View."));			
+    switch(aFilter.iSetFlag)
+        {
+        
+        case CAppInfoFilter::EAllApps:
+            {
+            GetAppUidsL(aSubsessionContext);                    
+            break;
+            }
+        case CAppInfoFilter::EAllAppsWithScreenMode:
+            {            
+            aSubsessionContext->iScreenMode = aFilter.iScreenMode;
+            GetAppUidsL(aSubsessionContext, ETrue);
+            break;
+            }
+            
+        case CAppInfoFilter::EGetEmbeddableApps:
+            {            
+            GetEmbeddableAppUidsL(aSubsessionContext);
+            break;
+            }
+            
+        case CAppInfoFilter::EGetEmbeddableAppsWithSreenMode:
+            {
+            aSubsessionContext->iScreenMode = aFilter.iScreenMode;
+            GetEmbeddableAppUidsL(aSubsessionContext, ETrue);
+            break;
+            }
+        
+        case CAppInfoFilter::EGetFilteredAppsWithEmbeddabilityFilter:
+            {
+            GetAppUidsWithEmbeddabilityFilterL(aSubsessionContext, aFilter.iEmbeddabilityFilter);
+            break;
+            }
+            
+        case CAppInfoFilter::EGetFilteredAppsWithEmbeddabilityFilterWithScreenMode:
+            {
+            aSubsessionContext->iScreenMode = aFilter.iScreenMode;
+            GetAppUidsWithEmbeddabilityFilterL(aSubsessionContext, aFilter.iEmbeddabilityFilter, ETrue);
+            break;
+            }
+            
+        case CAppInfoFilter::EGetFilteredAppsWithCapabilityMaskAndValue:
+            {
+            GetAppUidsWithCapabilityMaskAndValueL(aSubsessionContext,aFilter.iCapabilityAttributeMask,aFilter.iCapabilityAttributeValue);
+            break;
+            }
+            
+        case CAppInfoFilter::EGetFilteredAppsWithCapabilityMaskAndValueWithScreenMode:
+            {
+            aSubsessionContext->iScreenMode = aFilter.iScreenMode;
+            GetAppUidsWithCapabilityMaskAndValueL(aSubsessionContext,aFilter.iCapabilityAttributeMask,aFilter.iCapabilityAttributeValue, ETrue);
+            break;
+            }
+        case CAppInfoFilter::EGetServerApps:
+            {
+            GetServerAppUidsL(aSubsessionContext, aFilter.iServiceUid);
+            break;
+            }
+            
+        case CAppInfoFilter::EGetServerAppsWithScreenMode:
+            {
+            aSubsessionContext->iScreenMode = aFilter.iScreenMode;
+            GetServerAppUidsL(aSubsessionContext, aFilter.iServiceUid, ETrue);
+            break;
+            }
+            
+        default:
+            User::Leave(KErrArgument);
+        }
+    
+    }
+
+void CScrRequestImpl::NextAppInfoSizeL(const RMessage2& aMessage, TAppRegInfo*& aAppInfo, CAppInfoViewSubsessionContext* aSubsessionContext)
+    {
+    while(1)
+        {
+        if(aSubsessionContext->iAppInfoIndex < aSubsessionContext->iApps.Count())
+            {
+            TBool isPresent = EFalse;
+            aAppInfo = new(ELeave) TAppRegInfo;               
+            aAppInfo->iUid = (aSubsessionContext->iApps[aSubsessionContext->iAppInfoIndex]).iAppUid;
+    
+            _LIT(KSelectAppFilename, "SELECT AppFile FROM AppRegistrationInfo WHERE AppUid=?;");
+            CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectAppFilename);
+            stmt->BindIntL(1, aAppInfo->iUid.iUid);
+            if(stmt->ProcessNextRowL())
+                {
+                isPresent = ETrue;
+                aAppInfo->iFullName = stmt->StrColumnL(0);
+                }                   
+            CleanupStack::PopAndDestroy(stmt);
+            if(isPresent)
+                {
+                if((aSubsessionContext->iApps[aSubsessionContext->iAppInfoIndex]).iLocale != KUnspecifiedLocale)
+                    {
+                    GetCaptionAndShortCaptionInfoForLocaleL(aAppInfo->iUid, aSubsessionContext->iApps[aSubsessionContext->iAppInfoIndex].iLocale, aAppInfo->iShortCaption, aAppInfo->iCaption);
+                    }
+                aSubsessionContext->iAppInfoIndex++;
+                WriteObjectSizeL(aMessage, 1, aAppInfo);
+                break;
+                }
+            else
+                {
+                DeleteObjectZ(aAppInfo);
+                aSubsessionContext->iAppInfoIndex++;
+                }        
+            }
+        else
+            {
+            break;
+            }
+        }        
+    }
+
+void CScrRequestImpl::NextAppInfoDataL(const RMessage2& aMessage, TAppRegInfo*& aAppInfo)
+    {
+    DEBUG_PRINTF(_L8("Returning the AppInfo data."));
+    WriteObjectDataL(aMessage, 0, aAppInfo);
+    DeleteObjectZ(aAppInfo); // Delete the object to prevent it to be resent.
+    aAppInfo = NULL;
+    }
+
+void CScrRequestImpl::AddApplicationEntryL(const RMessage2& aMessage)
+    {
+    DEBUG_PRINTF(_L8("Adding the application details into SCR"));
+	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+    CApplicationRegistrationData *regInfo = ReadObjectFromMessageLC<CApplicationRegistrationData>(aMessage, 1);
+        
+    TSecureId clientSid = aMessage.SecureId();
+    TUint32 swTypeId = 0;
+    if (componentId == 0 && clientSid == KSisRegistryServerSid)
+        {
+        swTypeId = HashCaseSensitiveL(Usif::KSoftwareTypeNative);
+        }
+    else
+        {
+        // Applicaiton is always associated with a component. We use the SoftwareTypeId of the 
+        // component as the ApplicationTypeId.
+        swTypeId = GetSoftwareTypeForComponentL(componentId);
+        }
+    
+        
+    _LIT(KInsertAppRegistrationInfo,"INSERT INTO AppRegistrationInfo(AppUid, ComponentId, AppFile, TypeId, Attributes, Hidden, Embeddable, NewFile, Launch, GroupName, DefaultScreenNumber) VALUES(?,?,?,?,?,?,?,?,?,?,?);");
+    TInt numberOfValues = 11;    
+    ExecuteStatementL(KInsertAppRegistrationInfo(), numberOfValues, EValueInteger, regInfo->AppUid(), EValueInteger, componentId, EValueString, &(regInfo->AppFile()), EValueInteger, swTypeId, EValueInteger, regInfo->Attributes(), EValueInteger, regInfo->Hidden(), EValueInteger, regInfo->Embeddability(), EValueInteger, regInfo->NewFile(), EValueInteger, regInfo->Launch(), EValueString, &(regInfo->GroupName()),  EValueInteger, regInfo->DefaultScreenNumber());
+    
+    RPointerArray<HBufC> ownedFileArray = regInfo->OwnedFileArray();    
+    for(TInt i=0;i<ownedFileArray.Count();++i)
+    	{
+        AddFileOwnershipInfoL(regInfo->AppUid(),*(ownedFileArray[i]));
+        }
+
+	RPointerArray<CServiceInfo> serviceArray = regInfo->ServiceArray();
+    for(TInt i=0;i<serviceArray.Count();++i)
+        {
+        AddServiceInfoL(regInfo->AppUid(),serviceArray[i]);
+        }
+    
+	RPointerArray<CLocalizableAppInfo> localizableAppInfo = regInfo->LocalizableAppInfoList();
+    for(TInt i=0;i<localizableAppInfo.Count();++i)
+       	{       	
+       	AddLocalizableAppInfoL(regInfo->AppUid(), localizableAppInfo[i]);
+       	}
+    
+	RPointerArray<CPropertyEntry> appPropertiesList = regInfo->AppProperties();
+    for(TInt i=0;i<appPropertiesList.Count();++i)
+       	{
+        AddPropertyL(regInfo->AppUid(), appPropertiesList[i]);
+		}
+     
+    RPointerArray<COpaqueData> opaqueDataList = regInfo->AppOpaqueData();
+    for (TInt i = 0; i < opaqueDataList.Count(); ++i)
+        {
+        AddOpaqueDataL(regInfo->AppUid(), opaqueDataList[i]);
+        }
+          
+    CleanupStack::PopAndDestroy(regInfo);
+    DEBUG_PRINTF(_L8("Added the application details into SCR successfully "));
+    }
+
+void CScrRequestImpl::AddFileOwnershipInfoL(TUid aAppUid, const TDesC& aFileName)
+    {
+	DEBUG_PRINTF(_L8("Adding the File Ownership Info details into SCR"));
+    if(aAppUid == KNullUid || !aFileName.CompareF(KNullDesC()))
+    	{
+    	DEBUG_PRINTF(_L8("Mandatory values not provided."));
+    	User::Leave(KErrArgument);
+    	}
+    
+    _LIT(KInsertFileOwnershipInfo,"INSERT INTO FileOwnershipInfo(AppUid, FileName) VALUES(?,?);");
+    TInt numberOfValues = 2;
+    ExecuteStatementL(KInsertFileOwnershipInfo(), numberOfValues, EValueInteger, aAppUid, EValueString, &aFileName);
+    }
+
+void CScrRequestImpl::AddLocalizableAppInfoL(TUid aAppUid, Usif::CLocalizableAppInfo* aLocalizableAppInfoEntry)
+    {
+	DEBUG_PRINTF(_L8("Adding the Localizable App Info details into SCR"));
+	TInt captionAndIconInfoId = 0;
+	if(NULL != aLocalizableAppInfoEntry->iCaptionAndIconInfo)
+	    {
+	    captionAndIconInfoId = AddCaptionAndIconInfoL(aLocalizableAppInfoEntry->iCaptionAndIconInfo);
+	    }
+	_LIT(KInsertLocalizableAppInfo,"INSERT INTO LocalizableAppInfo(AppUid, ShortCaption, GroupName, Locale, CaptionAndIconId) VALUES(?,?,?,?,?);");
+    TInt numberOfValues = 5;
+    ExecuteStatementL(KInsertLocalizableAppInfo(), numberOfValues, EValueInteger, aAppUid, EValueString, &(aLocalizableAppInfoEntry->ShortCaption()), EValueString, &(aLocalizableAppInfoEntry->GroupName()), EValueInteger, aLocalizableAppInfoEntry->ApplicationLanguage(), EValueInteger, captionAndIconInfoId);
+    TInt localAppInfoId = iDbHandle->LastInsertedIdL();
+	RPointerArray<CAppViewData> viewDataList = aLocalizableAppInfoEntry->ViewDataList();
+	for (TInt i=0;i<viewDataList.Count();i++)
+		{
+		AddViewDataL(localAppInfoId, viewDataList[i]);
+		}
+	}
+
+void CScrRequestImpl::AddViewDataL(TInt aLocalAppInfoId, Usif::CAppViewData* aViewDataEntry)
+    {
+	DEBUG_PRINTF(_L8("Adding the ViewData details into SCR"));
+	if(aLocalAppInfoId == 0 || aViewDataEntry->Uid() == KNullUid )
+		{
+		DEBUG_PRINTF(_L8("Mandatory values not provided."));
+        User::Leave(KErrArgument);
+		}
+
+	TInt captionAndIconInfoId = 0;
+	if(NULL != aViewDataEntry->iCaptionAndIconInfo)
+	   {
+	   captionAndIconInfoId = AddCaptionAndIconInfoL(aViewDataEntry->iCaptionAndIconInfo);
+	   }
+	
+	_LIT(KInsertViewData,"INSERT INTO ViewData(LocalAppInfoId, Uid, ScreenMode, CaptionAndIconId) VALUES(?,?,?,?);");
+    TInt numberOfValues = 4;
+    ExecuteStatementL(KInsertViewData(), numberOfValues, EValueInteger, aLocalAppInfoId, EValueInteger, aViewDataEntry->Uid(), EValueInteger, aViewDataEntry->ScreenMode(), EValueInteger, captionAndIconInfoId);
+    }
+
+TInt CScrRequestImpl::AddCaptionAndIconInfoL(Usif::CCaptionAndIconInfo* aCaptionAndIconEntry)
+    {
+	DEBUG_PRINTF(_L8("Adding the Caption And Icon Info details into SCR"));
+	_LIT(KCaptionAndIconInfo,"INSERT INTO CaptionAndIconInfo(Caption, NumberOfIcons, IconFile) VALUES(?,?,?);");
+    TInt numberOfValues = 3;
+    ExecuteStatementL(KCaptionAndIconInfo(), numberOfValues, EValueString, &(aCaptionAndIconEntry->Caption()), EValueInteger, aCaptionAndIconEntry->NumOfAppIcons(), EValueString, &(aCaptionAndIconEntry->IconFileName()));
+    return iDbHandle->LastInsertedIdL();
+	}
+
+void CScrRequestImpl::AddServiceInfoL(TUid aAppUid, Usif::CServiceInfo* aAppServiceInfoEntry)
+    {
+	DEBUG_PRINTF(_L8("Adding the Service Info details into SCR"));
+    if(aAppUid == KNullUid)
+    	{
+    	DEBUG_PRINTF(_L8("Values for app uid is absent"));
+    	User::Leave(KErrArgument);
+    	}
+    _LIT(KInsertServiceInfo,"INSERT INTO ServiceInfo(AppUid, Uid) VALUES(?,?);");
+    TInt numberOfValues = 2;
+    
+    ExecuteStatementL(KInsertServiceInfo(), numberOfValues, EValueInteger, aAppUid, EValueInteger, aAppServiceInfoEntry->Uid());
+    TInt serviceId = iDbHandle->LastInsertedIdL();
+
+    RPointerArray<Usif::COpaqueData> opaqueData = aAppServiceInfoEntry->OpaqueData();
+    for(TInt i=0;i<opaqueData.Count();i++)
+        {
+        AddOpaqueDataL(aAppUid, opaqueData[i], aAppServiceInfoEntry->Uid());
+        }
+    
+    RPointerArray<Usif::CDataType> dataTypes = aAppServiceInfoEntry->DataTypes();
+	for (TInt i=0;i<dataTypes.Count();i++)
+		{
+		AddServiceDataTypeL(serviceId, dataTypes[i]);
+		}
+    }
+
+void CScrRequestImpl::AddServiceDataTypeL(TInt aServiceUid, Usif::CDataType* aDataTypeEntry)
+	{
+	DEBUG_PRINTF(_L8("Adding the Service Data Type details into SCR"));
+    if(!((aDataTypeEntry->Type()).CompareF(KNullDesC())))
+    	{
+    	DEBUG_PRINTF(_L8("Values for service uid or type is absent"));
+    	User::Leave(KErrArgument);
+    	}
+    _LIT(KInsertServiceDataTypeInfo,"INSERT INTO DataType(ServiceId, Priority, Type) VALUES(?,?,?);");
+    TInt numberOfValues = 3;
+    ExecuteStatementL(KInsertServiceDataTypeInfo(), numberOfValues, EValueInteger, aServiceUid, EValueInteger, aDataTypeEntry->Priority() , EValueString, &(aDataTypeEntry->Type()));
+	}
+
+void CScrRequestImpl::AddPropertyL(TUid aAppUid, Usif::CPropertyEntry* aAppPropertiesEntry)
+    {
+	DEBUG_PRINTF(_L8("Adding the Property details into SCR"));
+    if(aAppUid == KNullUid || !((aAppPropertiesEntry->PropertyName().CompareF(KNullDesC()))))
+    	{
+    	DEBUG_PRINTF(_L8("Property name is absent and hence cannot be entered into the DB."));
+    	User::Leave(KErrArgument);
+    	}
+	_LIT(KInsertAppProperties, "INSERT INTO AppProperties(AppUid, %S;");
+	_LIT(KPropertyIntValue," Name, IntValue) VALUES(?,?,?)");
+	_LIT(KPropertyStrValue," Locale, Name, StrValue) VALUES(?,?,?,?)");
+	_LIT(KPropertyBinaryValue," Name, StrValue, IsStr8Bit) VALUES(?,?,?,1)");
+	
+	HBufC *statementStr(0);
+	CStatement *stmt ;
+	
+    switch(aAppPropertiesEntry->PropertyType())
+		{
+		case CPropertyEntry::EIntProperty:
+			{
+			statementStr = FormatStatementLC(KInsertAppProperties, KPropertyIntValue().Length(), &KPropertyIntValue());
+			stmt = iDbHandle->PrepareStatementLC(*statementStr);
+			CIntPropertyEntry *intProp = static_cast<CIntPropertyEntry *>(aAppPropertiesEntry);
+			stmt->BindIntL(1, aAppUid.iUid);
+			stmt->BindStrL(2, intProp->PropertyName());
+			stmt->BindInt64L(3, intProp->Int64Value());
+			stmt->ExecuteStatementL();
+			CleanupStack::PopAndDestroy(2,statementStr);
+			}
+			break;
+		case CPropertyEntry::ELocalizedProperty:
+			{
+			statementStr = FormatStatementLC(KInsertAppProperties, KPropertyStrValue().Length(), &KPropertyStrValue());
+			stmt = iDbHandle->PrepareStatementLC(*statementStr);
+			CLocalizablePropertyEntry *localizedProp = static_cast<CLocalizablePropertyEntry *>(aAppPropertiesEntry);
+			stmt->BindIntL(1, aAppUid.iUid);
+			stmt->BindIntL(2, localizedProp->LocaleL());
+			stmt->BindStrL(3, localizedProp->PropertyName());
+			stmt->BindStrL(4, localizedProp->StrValue());
+			stmt->ExecuteStatementL();
+			CleanupStack::PopAndDestroy(2,statementStr);
+			}
+			break;	
+		case CPropertyEntry::EBinaryProperty:
+		    {
+		    statementStr = FormatStatementLC(KInsertAppProperties, KPropertyBinaryValue().Length(), &KPropertyBinaryValue());
+            stmt = iDbHandle->PrepareStatementLC(*statementStr);
+            CBinaryPropertyEntry *binaryProp = static_cast<CBinaryPropertyEntry *>(aAppPropertiesEntry);
+            stmt->BindIntL(1, aAppUid.iUid);
+            stmt->BindStrL(2, binaryProp->PropertyName());
+            stmt->BindBinaryL(3, binaryProp->BinaryValue());
+            stmt->ExecuteStatementL();
+            CleanupStack::PopAndDestroy(2,statementStr);
+            }
+		    break;
+		
+		default:
+			DEBUG_PRINTF(_L8("The property type couldn't be recognized."));
+			User::Leave(KErrAbort);	
+		}
+    }
+
+void CScrRequestImpl::AddOpaqueDataL(TUid aAppUid, Usif::COpaqueData* aOpaqueDataEntry, TUid aServiceUid)
+    {
+	DEBUG_PRINTF(_L8("Adding the Opaque Data details into SCR"));
+    const TInt KMaxOpaqueDataLength = 4096;
+    /* AppUid cannot be NULL since this function is invoked from AddApplicationEntryL */ 
+    __ASSERT_DEBUG(aAppUid != TUid::Null(), User::Leave(KErrArgument));
+    
+    _LIT(KOpaqueDataEntry, "INSERT INTO AppProperties(AppUid, Name, Locale, ServiceUid, StrValue, IsStr8Bit) VALUES(?,?,?,?,?,1)");
+    
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KOpaqueDataEntry);
+    
+    stmt->BindIntL(1, aAppUid.iUid);
+    stmt->BindStrL(2, _L("OpaqueData"));
+    stmt->BindIntL(3, (TInt)aOpaqueDataEntry->iLanguage);
+    stmt->BindIntL(4, aServiceUid.iUid);
+    stmt->BindBinaryL(5, *(aOpaqueDataEntry->iOpaqueData), KMaxOpaqueDataLength);
+    stmt->ExecuteStatementL();
+    CleanupStack::PopAndDestroy(stmt);
+    }
+
+void CScrRequestImpl::DeleteApplicationEntryInternalL(const TInt aAppUid)
+	{
+	TInt numberOfValues = 1;
+
+	DeleteFromTableL(KFileOwnershipInfoTable,KAppIdColumnName,aAppUid);
+            
+    _LIT(KDeleteDataType, "DELETE FROM DataType WHERE ServiceId IN \
+                    (SELECT ServiceId FROM ServiceInfo WHERE AppUid=?);");
+    ExecuteStatementL(KDeleteDataType, numberOfValues, EValueInteger, aAppUid);
+    DEBUG_PRINTF2(_L8("Service datatype details associated with application(%d) have been deleted."), aAppUid);
+        
+    DeleteFromTableL(KServiceInfoTable,KAppIdColumnName,aAppUid);
+        
+    RArray<TInt> viewId;
+    CleanupClosePushL(viewId);
+    DEBUG_PRINTF2(_L8("Deleting the LocalizableAppInfo details associated with application (%d)"), aAppUid);
+    _LIT(KSelectViewId, "SELECT ViewId FROM ViewData WHERE LocalAppInfoId IN(SELECT LocalAppInfoId FROM LocalizableAppInfo WHERE AppUid = ?);");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectViewId);
+    stmt->BindIntL(1, aAppUid);
+    viewId.Close();
+    while(stmt->ProcessNextRowL())
+        {
+        viewId.AppendL(stmt->IntColumnL(0));
+        }
+    
+    _LIT(KViewId,"ViewId");
+    _LIT(KDeleteCaptionAndIconInfoAssociatedToViewData, "DELETE FROM CaptionAndIconInfo WHERE CaptionAndIconId = (SELECT CaptionAndIconId FROM ViewData WHERE ViewId=?);");
+               
+    for(TInt i=0; i< viewId.Count();i++)   
+        {
+        ExecuteStatementL(KDeleteCaptionAndIconInfoAssociatedToViewData, numberOfValues, EValueInteger, viewId[i]);
+        DeleteFromTableL(KViewDataTable,KViewId,viewId[i]);
+        }
+    CleanupStack::PopAndDestroy(2, &viewId);
+    
+    _LIT(KDeleteCaptionAndIconInfo, "DELETE FROM CaptionAndIconInfo WHERE CaptionAndIconId IN \
+                        (SELECT CaptionAndIconId FROM LocalizableAppInfo WHERE AppUid=?);");
+    ExecuteStatementL(KDeleteCaptionAndIconInfo, numberOfValues, EValueInteger, aAppUid);
+        
+    DeleteFromTableL(KLocalizableAppInfoTable,KAppIdColumnName,aAppUid);
+        
+    DeleteFromTableL(KAppPropertiesTable,KAppIdColumnName,aAppUid);
+    DeleteFromTableL(KAppRegistrationInfoTable,KAppIdColumnName,aAppUid);
+                
+   }
+
+void CScrRequestImpl::DeleteApplicationEntryL(const RMessage2& aMessage)
+    {
+	DEBUG_PRINTF(_L8("Deleting Application Entry details from SCR"));
+    TInt applicationUid = aMessage.Int0();
+    DeleteApplicationEntryInternalL(applicationUid);
+    }
+
+void CScrRequestImpl::DeleteAllAppsWithinPackageL(const RMessage2& aMessage)
+    {
+    TComponentId componentId = GetComponentIdFromMsgL(aMessage);
+    TSecureId clientSid = aMessage.SecureId();
+    if(componentId == 0 && clientSid != KSisRegistryServerSid)
+        {
+        DEBUG_PRINTF(_L8("ComponentId 0 corresponds to In-Rom Applications that cannot be deleted."));
+        User::Leave(KErrNotSupported);
+        }
+    
+    DeleteAllAppsWithinPackageInternalL(componentId);
+    }
+
+void CScrRequestImpl::DeleteAllAppsWithinPackageInternalL(const TComponentId aComponentId)
+    {
+    DEBUG_PRINTF2(_L8("Deleting all the applications associated with component (%d) from SCR."), aComponentId);
+    
+    // Fetching all the applications associated with the component
+    _LIT(KSelectAssociatedAppIds, "SELECT AppUid FROM AppRegistrationInfo WHERE ComponentId=?;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectAssociatedAppIds);
+    stmt->BindIntL(1, aComponentId);
+        
+    while(stmt->ProcessNextRowL())
+        {
+        TInt appId = stmt->IntColumnL(0);
+        DeleteApplicationEntryInternalL(appId);
+        }
+        
+    // Release allocated memories
+    CleanupStack::PopAndDestroy(1, stmt); // stmt
+    }
+
+void CScrRequestImpl::DeleteFromTableL(const TDesC& aTableName, const TDesC& aAttribute, const TInt aValue) 
+    {
+    _LIT(KDeleteFromTable,"DELETE FROM %S WHERE %S=?;");
+    TInt formattedLen = aTableName.Length() + aAttribute.Length();
+    HBufC *statementStr = FormatStatementLC(KDeleteFromTable(), formattedLen, &aTableName, &aAttribute );
+    TInt numberOfValues = 1;
+    ExecuteStatementL(*statementStr, numberOfValues, EValueInteger, aValue);
+    DEBUG_PRINTF4(_L8("%S info where %S = %d has been deleted."), &aTableName, &aAttribute, aValue);
+    CleanupStack::PopAndDestroy(statementStr);
+	}
+
+CCaptionAndIconInfo* CScrRequestImpl::GetCaptionAndIconInfoL(TInt aCaptionAndIconId) const
+    {
+	DEBUG_PRINTF2(_L8("Returning the Caption And Icon Info associated with CaptionAndIconId (%d) from SCR."), aCaptionAndIconId);
+    _LIT(KGetLocalizedCaptionAndIconInfo, "Select Caption,NumberOfIcons,Iconfile from CaptionAndIconInfo where CaptionAndIconId = ?");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KGetLocalizedCaptionAndIconInfo);
+    stmt->BindIntL(1, aCaptionAndIconId);
+    if(stmt->ProcessNextRowL())
+        {
+        TPtrC caption(stmt->StrColumnL(0));
+        TInt noOfAppIcons(stmt->IntColumnL(1));
+        TPtrC iconFilename(stmt->StrColumnL(2));
+        CCaptionAndIconInfo* captionandIconInfo = CCaptionAndIconInfo::NewL(caption, iconFilename, noOfAppIcons);
+        DEBUG_PRINTF2(_L("The Caption for this App is %S "), captionandIconInfo->iCaption);
+        DEBUG_PRINTF2(_L("The Number of AppIcons for this App is %d "), captionandIconInfo->iNumOfAppIcons);
+        DEBUG_PRINTF2(_L("The Icon File Name this App is %S "), captionandIconInfo->iIconFileName);
+        CleanupStack::PopAndDestroy(stmt);
+        return captionandIconInfo;
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy(stmt);
+        return NULL;
+        }
+    }
+
+void CScrRequestImpl::GetViewsL(RPointerArray<Usif::CAppViewData>& aViewInfoArray, TUid aAppUid, TLanguage aLanguage) const
+    {                   
+        _LIT(KSelectViewDetailsWithAppUid, "SELECT Uid, ScreenMode, CaptionAndIconId FROM ViewData WHERE LocalAppInfoId IN(SELECT LocalAppInfoId FROM LocalizableAppInfo WHERE AppUid = ? AND Locale = ?);");
+        CStatement *stmt1 = iDbHandle->PrepareStatementLC(KSelectViewDetailsWithAppUid);
+        stmt1->BindIntL(1, aAppUid.iUid);
+        stmt1->BindIntL(2, aLanguage);
+        aViewInfoArray.ResetAndDestroy();
+        while(stmt1->ProcessNextRowL())
+            {
+            TUid uid;
+            uid.iUid = stmt1->IntColumnL(0); 
+            TInt screenMode(stmt1->IntColumnL(1)); 
+            TInt captionAndIconId(stmt1->IntColumnL(2));           
+            DEBUG_PRINTF2(_L("The view Uid for this App is 0x%x "),uid.iUid);            
+            DEBUG_PRINTF2(_L("The view Screen Mode for this App is %d "), screenMode);
+            CCaptionAndIconInfo *captionAndIconInfo = GetCaptionAndIconInfoL(captionAndIconId);                       
+            CAppViewData *viewdataInfo =  CAppViewData::NewLC(uid, screenMode, captionAndIconInfo);              
+            aViewInfoArray.AppendL(viewdataInfo);
+            CleanupStack::Pop(viewdataInfo); // viewdataInfo
+            }
+        CleanupStack::PopAndDestroy(1, stmt1); // stmt1           
+    }
+
+void CScrRequestImpl::GetViewSizeL(const RMessage2& aMessage, TUid aAppUid, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const
+    {    
+    GetViewsL(aSubsessionContext->iViewInfoArray,aAppUid,aSubsessionContext->iAppLanguageForCurrentLocale);
+    if(aSubsessionContext->iViewInfoArray.Count() == 0)
+      {
+      DEBUG_PRINTF2(_L8("No view details associated with the given AppUid,%d"),aAppUid);
+      }  
+    DEBUG_PRINTF2(_L8("Returning the view details' entry size of application(0x%x) for the current locale."), aAppUid);
+    WriteArraySizeL(aMessage, 1, aSubsessionContext->iViewInfoArray);
+    }
+
+void CScrRequestImpl::GetViewDataL(const RMessage2& aMessage, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const
+    {
+    DEBUG_PRINTF(_L8("Returning the localized information entry data."));
+    WriteArrayDataL(aMessage, 0, aSubsessionContext->iViewInfoArray);
+    aSubsessionContext->iViewInfoArray.ResetAndDestroy(); 
+    }
+
+void CScrRequestImpl::OpenApplicationRegistrationViewL(const RMessage2& aMessage, CAppRegistrySubsessionContext*  aSubsessionContext) 
+    {
+    TLanguage requiredLanguage = TLanguage(aMessage.Int0());
+    if(requiredLanguage == KUnspecifiedLocale)
+        {
+        requiredLanguage = User::Language();
+        }
+    aSubsessionContext->iLanguage = requiredLanguage;
+   
+    CStatement* stmt;
+    _LIT(KAllAppIds," SELECT AppUid from AppRegistrationInfo"); 
+    stmt = iDbHandle->PrepareStatementLC(KAllAppIds);
+    aSubsessionContext->iAppUids.Close();
+    while(stmt->ProcessNextRowL())
+        {
+        TUid appUid = TUid::Uid(stmt->IntColumnL(0));
+        TComponentId componentId(0);
+        if(GetComponentIdForAppInternalL(appUid, componentId))
+	    	{
+	    	if(!componentId || IsComponentPresentL(componentId))
+            	{
+            	aSubsessionContext->iAppUids.AppendL(appUid);    
+            	}
+	    	}
+        }
+    CleanupStack::PopAndDestroy(stmt);  
+    }
+
+void CScrRequestImpl::OpenApplicationRegistrationForAppUidsViewL(const RMessage2& aMessage, CAppRegistrySubsessionContext*  aSubsessionContext) 
+    {
+    TLanguage requiredLanguage = TLanguage(aMessage.Int0());
+    if(requiredLanguage == KUnspecifiedLocale)
+        {
+        requiredLanguage = User::Language();
+        }
+    aSubsessionContext->iLanguage = requiredLanguage;
+    
+    //Read languages need to pass
+    TInt bufSize=0;
+    bufSize = aMessage.GetDesMaxLength(1);
+    HBufC8* bufToHoldAppUids = HBufC8::NewLC(bufSize);
+    TPtr8 bufPtrDscToHoldAppUids = bufToHoldAppUids->Des();
+    aMessage.ReadL(1, bufPtrDscToHoldAppUids);
+    RDesReadStream inStream(bufPtrDscToHoldAppUids);
+    CleanupClosePushL(inStream);
+    TInt size = inStream.ReadInt32L();
+       
+    aSubsessionContext->iAppUids.Close();
+    for (TInt i =0; i<size ;i++)
+        {
+        TUid appUid = TUid::Uid(inStream.ReadInt32L());
+		TComponentId componentId(0);
+        if(GetComponentIdForAppInternalL(appUid, componentId)) // Check for application presence and fetch the corresponding ComponentId
+	    	{
+	    	if(!componentId || IsComponentPresentL(componentId)) // Check if the component is present
+            	{
+            	aSubsessionContext->iAppUids.AppendL(appUid);    
+            	}
+	    	}
+        }
+    
+    CleanupStack::PopAndDestroy(2,bufToHoldAppUids); //bufToHoldAppUids, inStream
+    }
+
+TBool CScrRequestImpl::GetApplicationRegistrationInfoL(CApplicationRegistrationData& aApplicationRegistration,TUid aAppUid) const
+    {
+    _LIT(KSelectAppRegInfo, "SELECT AppUid, ComponentId, AppFile, TypeId, Attributes, Hidden, Embeddable, NewFile, Launch, GroupName, DefaultScreenNumber  FROM AppRegistrationInfo WHERE AppUid = ?");
+           
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectAppRegInfo);
+    stmt->BindIntL(1, aAppUid.iUid);
+    if(stmt->ProcessNextRowL())
+      {
+      aApplicationRegistration.iAppUid = TUid::Uid(stmt->IntColumnL(0)); 
+      HBufC* appFile = stmt->StrColumnL(2).AllocL();
+      DeleteObjectZ(aApplicationRegistration.iAppFile);
+      aApplicationRegistration.iAppFile = appFile;
+      aApplicationRegistration.iTypeId = stmt->IntColumnL(3);
+      aApplicationRegistration.iCharacteristics.iAttributes = stmt->IntColumnL(4);
+      aApplicationRegistration.iCharacteristics.iAppIsHidden = stmt->IntColumnL(5);
+      aApplicationRegistration.iCharacteristics.iEmbeddability = (TApplicationCharacteristics::TAppEmbeddability)stmt->IntColumnL(6);
+      aApplicationRegistration.iCharacteristics.iSupportsNewFile = stmt->IntColumnL(7);
+      aApplicationRegistration.iCharacteristics.iLaunchInBackground = stmt->IntColumnL(8);
+      aApplicationRegistration.iCharacteristics.iGroupName = stmt->StrColumnL(9);
+      aApplicationRegistration.iDefaultScreenNumber = stmt->IntColumnL(10);
+     
+      DEBUG_PRINTF2(_L("The Uid for this App is 0x%x "),aApplicationRegistration.iAppUid);
+      DEBUG_PRINTF2(_L("The App File for this App is %S "), aApplicationRegistration.iAppFile);
+      DEBUG_PRINTF2(_L("The Attribute for this App is %d "), aApplicationRegistration.iCharacteristics.iAttributes);
+      DEBUG_PRINTF2(_L("The Hidden for this App is %d "), (aApplicationRegistration.iCharacteristics.iAppIsHidden));
+      DEBUG_PRINTF2(_L("The Embeddability for this App is %d "), aApplicationRegistration.iCharacteristics.iEmbeddability);
+      DEBUG_PRINTF2(_L("The New File for this App is %d "), aApplicationRegistration.iCharacteristics.iSupportsNewFile);
+      DEBUG_PRINTF2(_L("The Launch for this App is %d "), aApplicationRegistration.iCharacteristics.iLaunchInBackground);
+      DEBUG_PRINTF2(_L("The Group Name for this App is %S "),  &(aApplicationRegistration.iCharacteristics.iGroupName));
+      DEBUG_PRINTF2(_L("The Default screen number for this App is %d "), aApplicationRegistration.iDefaultScreenNumber);
+                       
+      }
+    else
+      {
+      DEBUG_PRINTF2(_L8("AppUid %d Not Found in the SCR"),aAppUid);       
+      CleanupStack::PopAndDestroy(stmt);
+      return EFalse;
+      }
+    CleanupStack::PopAndDestroy(stmt);
+    return ETrue;
+    }
+
+void CScrRequestImpl::GetFileOwnershipInfoL(CApplicationRegistrationData& aApplicationRegistration,TUid aAppUid) const
+    {
+    _LIT(KGetFileOwnershipInfo, "SELECT FileName FROM FileOwnershipInfo WHERE AppUid = ?");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KGetFileOwnershipInfo);
+    stmt->BindIntL(1, aAppUid.iUid);
+    aApplicationRegistration.iOwnedFileArray.ResetAndDestroy();
+    while(stmt->ProcessNextRowL())
+		{
+		HBufC *fileName = stmt->StrColumnL(0).AllocLC();
+        aApplicationRegistration.iOwnedFileArray.AppendL(fileName);        
+        DEBUG_PRINTF2(_L("The File Name for owned Files for this App is %S "), fileName);
+        CleanupStack::Pop();
+        }    
+    CleanupStack::PopAndDestroy(stmt);
+    }
+
+
+void CScrRequestImpl::GetDataTypesL(RPointerArray<Usif::CDataType>& aDataTypes,TInt aServiceId)const
+    {
+    _LIT(KGetDataType, "SELECT Priority, Type FROM DataType where ServiceId = ?");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KGetDataType);
+    stmt->BindIntL(1, aServiceId);
+    aDataTypes.ResetAndDestroy();
+    while(stmt->ProcessNextRowL())
+         {
+         Usif::CDataType* dataType = CDataType::NewLC();
+         dataType->iPriority = stmt->IntColumnL(0);
+         DeleteObjectZ(dataType->iType);
+         dataType->iType = stmt->StrColumnL(1).AllocLC();
+         DEBUG_PRINTF2(_L("The Service Info Priority for this App is %d "), dataType->iPriority);
+         DEBUG_PRINTF2(_L("The Service Type for this App is %S "), dataType->iType);
+         aDataTypes.AppendL(dataType);
+         CleanupStack::Pop(2,dataType); //for  iType and dataType 
+         }
+    CleanupStack::PopAndDestroy(stmt);
+    }
+
+void CScrRequestImpl::GetServiceInfoL(CApplicationRegistrationData& aApplicationRegistration, TUid aAppUid, TLanguage aLanguage) const
+    {
+    Usif::CServiceInfo* serviceInfo = NULL;     
+    TInt serviceId = 0;
+    _LIT(KGetServiceInfo, "SELECT ServiceId, Uid FROM ServiceInfo where AppUid = ?");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KGetServiceInfo);
+    stmt->BindIntL(1, aAppUid.iUid);
+    aApplicationRegistration.iServiceArray.ResetAndDestroy();
+    while(stmt->ProcessNextRowL())
+        {        
+        serviceInfo = Usif::CServiceInfo::NewLC();
+        serviceId = stmt->IntColumnL(0);
+        serviceInfo->iUid = TUid::Uid(stmt->IntColumnL(1));
+
+        DEBUG_PRINTF2(_L("The Service Uid for this App is 0x%x "), serviceInfo->iUid);
+        if(serviceInfo->iUid.iUid)
+            {
+            GetOpaqueDataArrayL(aAppUid, serviceInfo->iUid, serviceInfo->iOpaqueDataArray, aLanguage);
+            }
+
+        //populate the data types for a service Id 
+        GetDataTypesL(serviceInfo->iDataTypes,serviceId);      
+               
+        aApplicationRegistration.iServiceArray.AppendL(serviceInfo);        
+        CleanupStack::Pop(serviceInfo); // serviceInfo 
+        }    
+    CleanupStack::PopAndDestroy(stmt);        
+    }
+
+void CScrRequestImpl::GetLocalizableAppInfoL(CApplicationRegistrationData& aApplicationRegistration,TUid aAppUid, TLanguage aLanguage)
+    {    
+    TLanguage storedLanguage;
+    if(GetNearestAppLanguageL(aLanguage, aAppUid, storedLanguage))
+        {
+        Usif::CLocalizableAppInfo* localizedAppInfo = NULL;        
+        _LIT(KGetServiceInfo, "Select ShortCaption,GroupName,Locale,CaptionAndIconId from LocalizableAppInfo where AppUid = ? and Locale = ?");
+        CStatement *stmt = iDbHandle->PrepareStatementLC(KGetServiceInfo);
+        stmt->BindIntL(1, aAppUid.iUid);
+        stmt->BindIntL(2, (TInt)storedLanguage);
+        if(stmt->ProcessNextRowL())
+           {
+           localizedAppInfo = Usif::CLocalizableAppInfo::NewLC();
+           DeleteObjectZ(localizedAppInfo->iShortCaption);
+           localizedAppInfo->iShortCaption = stmt->StrColumnL(0).AllocLC();
+           DeleteObjectZ(localizedAppInfo->iGroupName);
+           localizedAppInfo->iGroupName = stmt->StrColumnL(1).AllocLC();
+           localizedAppInfo->iApplicationLanguage = (TLanguage)stmt->IntColumnL(2);           
+          
+           DEBUG_PRINTF2(_L("The Short Caption for this App is %S "), localizedAppInfo->iShortCaption);
+           DEBUG_PRINTF2(_L("The Group name this App is %S "), localizedAppInfo->iGroupName);
+           DEBUG_PRINTF2(_L("The application language this App is %d "), localizedAppInfo->iApplicationLanguage);
+          
+           //populate localized caption and icon info
+           TInt captionAndIconID = stmt->IntColumnL(3);
+           localizedAppInfo->iCaptionAndIconInfo = GetCaptionAndIconInfoL(captionAndIconID);
+           //populate view data           
+           GetViewsL(localizedAppInfo->iViewDataList, aAppUid, storedLanguage);
+           
+           aApplicationRegistration.iLocalizableAppInfoList.AppendL(localizedAppInfo);
+           CleanupStack::Pop(3,localizedAppInfo);  //poping iGroupName, iShortCaption and localizedAppInfo
+           }
+        CleanupStack::PopAndDestroy(stmt);
+        }
+        else
+        {
+        DEBUG_PRINTF2(_L("No Nearest locale found for AppUid 0x%x in the SCR"), aAppUid);
+        }    
+    }
+
+void CScrRequestImpl::GetAppRegOpaqueDataL(CApplicationRegistrationData& aApplicationRegistration, TUid aAppUid, TLanguage aLanguage) const
+    {
+    GetOpaqueDataArrayL(aAppUid, TUid::Null(), aApplicationRegistration.iOpaqueDataArray, aLanguage);
+    }
+
+void CScrRequestImpl::NextApplicationRegistrationInfoSizeL(const RMessage2& aMessage, CApplicationRegistrationData*& aApplicationRegistration, CAppRegistrySubsessionContext*  aSubsessionContext)
+    {
+    while(1)
+        {
+        TBool dataFound = EFalse;
+        DeleteObjectZ(aApplicationRegistration);
+        aApplicationRegistration = CApplicationRegistrationData::NewL();
+        if((aSubsessionContext->iAppRegIndex < aSubsessionContext->iAppUids.Count()))
+            {
+            TUid appUid = aSubsessionContext->iAppUids[aSubsessionContext->iAppRegIndex];
+              
+            //Populate the Application Registration Info
+            TBool retVal = EFalse;
+            TRAPD(err, retVal = GetApplicationRegistrationInfoL(*aApplicationRegistration, appUid));
+
+            //Check if we have a valid application
+            if((KErrNone == err) && retVal)
+                {
+                TRAP(err,
+                //Populate File ownership info 
+                GetFileOwnershipInfoL(*aApplicationRegistration, appUid);
+                //Populate service info
+                GetServiceInfoL(*aApplicationRegistration, appUid, aSubsessionContext->iLanguage);
+                //Populate localizable appinfo including caption and icon info 
+                //and view data and its caption and icon info. 
+                GetLocalizableAppInfoL(*aApplicationRegistration, appUid, aSubsessionContext->iLanguage);
+
+                GetAppRegOpaqueDataL(*aApplicationRegistration, appUid, aSubsessionContext->iLanguage);
+    
+                GetAppPropertiesInfoL(*aApplicationRegistration, appUid, aSubsessionContext->iLanguage); );
+    
+                dataFound = ETrue;
+                }
+            else
+                {
+                DeleteObjectZ(aApplicationRegistration);
+                }
+
+            if(KErrNone != err)
+                DEBUG_PRINTF2(_L8("Error while reading the app registration info 0x%x. Ignoring current application details."), appUid);
+                           
+            //Incrementing the index
+            aSubsessionContext->iAppRegIndex++;
+                        
+            if(dataFound)
+                {
+                WriteObjectSizeL(aMessage, 1, aApplicationRegistration);
+                break;
+                }
+            }
+        else
+            {
+            DEBUG_PRINTF(_L8("Reached the end of the view."));
+            WriteIntValueL(aMessage, 1, 0);                
+            DeleteObjectZ(aApplicationRegistration);
+            break;
+            }
+        }
+    }
+
+void CScrRequestImpl::NextApplicationRegistrationInfoDataL(const RMessage2& aMessage, CApplicationRegistrationData*& aApplicationRegistration)
+    {
+    DEBUG_PRINTF(_L8("Returning the Application Registration data."));
+    WriteObjectDataL(aMessage, 0, aApplicationRegistration);
+    DeleteObjectZ(aApplicationRegistration); // Delete the object to prevent it to be resent.
+    }
+
+void CScrRequestImpl::GetAppOwnedFilesSizeL(const RMessage2& aMessage, TUid aAppUid, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const
+    {
+    DEBUG_PRINTF2(_L8("Returning the Application Owned files size for application 0X%x."), aAppUid);
+    _LIT(KSelectFileOwnershipInfoWithAppUid, "SELECT FileName FROM FileOwnershipInfo WHERE AppUid = ? ;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectFileOwnershipInfoWithAppUid);
+    stmt->BindIntL(1, aAppUid.iUid);
+    aSubsessionContext->iAppOwnedFiles.ResetAndDestroy();
+    while(stmt->ProcessNextRowL())
+       {
+       HBufC* fileName=stmt->StrColumnL(0).AllocLC();
+       aSubsessionContext->iAppOwnedFiles.AppendL(fileName);
+       CleanupStack::Pop(1, fileName);
+       }
+    CleanupStack::PopAndDestroy(1, stmt); 
+    if(0 == aSubsessionContext->iAppOwnedFiles.Count() )
+       {
+       DEBUG_PRINTF2(_L8("Application with AppUid :0X%x does not own any file "),aAppUid);
+       }  
+    WriteArraySizeL(aMessage, 1, aSubsessionContext->iAppOwnedFiles);
+    }
+
+void CScrRequestImpl::GetAppOwnedFilesDataL(const RMessage2& aMessage, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const
+    {
+    DEBUG_PRINTF(_L8("Returning the Application Owned files ."));
+    WriteArrayDataL(aMessage, 0, aSubsessionContext->iAppOwnedFiles);
+    aSubsessionContext->iAppOwnedFiles.ResetAndDestroy(); 
+    }
+
+void CScrRequestImpl::GetAppCharacteristicsL(const RMessage2& aMessage, TUid aAppUid) const
+    {
+    DEBUG_PRINTF2(_L8("Returning the characteristics of application 0X%x."), aAppUid);
+    _LIT(KSelectApplicationCapability, "SELECT Attributes, Hidden, Embeddable, NewFile, Launch, GroupName FROM AppRegistrationInfo WHERE AppUid = ? ;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectApplicationCapability);
+    stmt->BindIntL(1, aAppUid.iUid);
+    TApplicationCharacteristics appCharacteristics;
+    if(stmt->ProcessNextRowL())
+       {
+       appCharacteristics.iAttributes = stmt->IntColumnL(0);
+       appCharacteristics.iAppIsHidden  = stmt->IntColumnL(1);
+       appCharacteristics.iEmbeddability = (TApplicationCharacteristics::TAppEmbeddability)stmt->IntColumnL(2);
+       appCharacteristics.iSupportsNewFile  = stmt->IntColumnL(3); 
+       appCharacteristics.iLaunchInBackground  = stmt->IntColumnL(4);
+       appCharacteristics.iGroupName = stmt->StrColumnL(5);
+       TPckgC<TApplicationCharacteristics> infoPk(appCharacteristics);  
+       aMessage.WriteL(0, infoPk);
+       }
+    else
+       {
+       DEBUG_PRINTF2(_L8("No Data found for Application capability with AppUid :0X%x "),aAppUid);
+       }
+    CleanupStack::PopAndDestroy(1, stmt);
+    }
+
+void CScrRequestImpl::GetAppIconForFileNameL(const RMessage2& aMessage, TUid aAppUid, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const
+    {
+    DEBUG_PRINTF2(_L8("Returning the Icon File Name for application 0X%x."), aAppUid);
+    _LIT(KSelectIconFileNameForApplication, "SELECT IconFile FROM CaptionAndIconInfo WHERE CaptionAndIconId IN (SELECT CaptionAndIconId  FROM  LocalizableAppInfo WHERE AppUid = ? AND Locale = ?);");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectIconFileNameForApplication);
+    stmt->BindIntL(1, aAppUid.iUid);
+    stmt->BindIntL(2, aSubsessionContext->iAppLanguageForCurrentLocale);
+    if(stmt->ProcessNextRowL())
+       {
+       TFileName fileName = stmt->StrColumnL(0);
+       TPckgC<TFileName> pckg(fileName);
+       aMessage.WriteL(0, pckg);
+       }
+    else
+       {
+       DEBUG_PRINTF2(_L8("No Icon file found for Application with AppUid :0X%x "),aAppUid);       
+       }
+    CleanupStack::PopAndDestroy(1, stmt); 
+    }
+
+void CScrRequestImpl::GetAppViewIconFileNameL(const RMessage2& aMessage, TUid aAppUid, CRegInfoForApplicationSubsessionContext *aSubsessionContext) const
+    {
+    TUid viewUid;
+    viewUid.iUid= aMessage.Int0();
+    DEBUG_PRINTF2(_L8("Returning the view Icon File Name size for application 0X%x."), aAppUid);
+    _LIT(KSelectIconFileNameFromViewForApplication, "SELECT IconFile FROM CaptionAndIconInfo WHERE CaptionAndIconId IN (SELECT CaptionAndIconId  FROM ViewData WHERE Uid = ? AND LocalAppInfoId IN ( SELECT LocalAppInfoId  FROM LocalizableAppInfo WHERE AppUid = ? AND Locale = ?));");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectIconFileNameFromViewForApplication);
+    stmt->BindIntL(1, viewUid.iUid);
+    stmt->BindIntL(2, aAppUid.iUid);
+    stmt->BindIntL(3, aSubsessionContext->iAppLanguageForCurrentLocale);
+    if(stmt->ProcessNextRowL())
+       {
+       TFileName fileName = stmt->StrColumnL(0);
+       TPckgC<TFileName> pckg(fileName);
+       aMessage.WriteL(1, pckg);
+       }
+    else
+       {
+       DEBUG_PRINTF3(_L8("No view Icon file found for Application with AppUid :0X%x and View ID :0X%x "),aAppUid,viewUid);
+       }
+    CleanupStack::PopAndDestroy(1, stmt); 
+    }
+
+void CScrRequestImpl::GetAppServiceInfoSizeL(const RMessage2& aMessage, CApplicationRegInfoSubsessionContext *aSubsessionContext ) const
+    {
+    CAppServiceInfoFilter *filter = ReadObjectFromMessageLC<CAppServiceInfoFilter>(aMessage, 0);
+    TLanguage locale = (TLanguage)aMessage.Int1();  
+
+    switch(filter->iSetFlag)
+        {
+        case CAppServiceInfoFilter::EGetServiceInfoForApp:
+            {
+            GetAppServicesL(filter->iAppUid, aSubsessionContext->iServiceInfoArray, locale);                    
+            break;
+            }
+        case CAppServiceInfoFilter::EGetServiceImplementationForServiceUid:
+            {            
+            GetServiceImplementationsL(filter->iServiceUid, aSubsessionContext->iServiceInfoArray, locale);
+            break;
+            }
+        case CAppServiceInfoFilter::EGetServiceImplementationForServiceUidAndDatatType:
+            {            
+            GetServiceImplementationsL(filter->iServiceUid, *(filter->iDataType), aSubsessionContext->iServiceInfoArray, locale);
+            break;
+            }
+        case CAppServiceInfoFilter::EGetOpaqueDataForAppWithServiceUid:
+            {      
+            GetAppServiceOpaqueDataL(filter->iAppUid, filter->iServiceUid, aSubsessionContext->iServiceInfoArray, locale);
+            break;
+            }
+        default:
+            {
+            DEBUG_PRINTF(_L8("No match found for the query requested."));
+            User::Leave(KErrArgument);
+            }
+        }
+    if(aSubsessionContext->iServiceInfoArray.Count()== 0)
+        {    
+        DEBUG_PRINTF(_L8("No service info associated with the given parameters found"));
+        User::Leave(KErrNotFound);
+        }
+    WriteArraySizeL(aMessage, 2, aSubsessionContext->iServiceInfoArray);
+    CleanupStack::PopAndDestroy(filter);
+    }
+
+void CScrRequestImpl::GetAppServiceInfoDataL(const RMessage2& aMessage, CApplicationRegInfoSubsessionContext *aSubsessionContext) const
+    {
+    DEBUG_PRINTF(_L8("Returning the service information details."));
+    WriteArrayDataL(aMessage, 0, aSubsessionContext->iServiceInfoArray);
+    aSubsessionContext->iServiceInfoArray.ResetAndDestroy(); 
+    }
+
+void CScrRequestImpl::GetAppServicesL(TUid aAppUid, RPointerArray<
+        CServiceInfo>& aServiceInfoArray, TLanguage aLocale) const
+    {
+    DEBUG_PRINTF2(_L8("Returning the size of the service info details entry of application (%d)."), aAppUid.iUid);
+    _LIT(KSelectMatchingServiceInfo, "SELECT ServiceId, Uid FROM ServiceInfo WHERE AppUid=?;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectMatchingServiceInfo);
+    stmt->BindIntL(1, aAppUid.iUid);
+    aServiceInfoArray.ResetAndDestroy();
+    while (stmt->ProcessNextRowL())
+        {
+        /* AppProperties is being used for OpaqueData of both AppRegInfo
+         * and ServiceInfo. So add to ServiceInfoArray only if serviceId is not 0
+         */
+        if (stmt->IntColumnL(1))
+            {
+            CServiceInfo* serviceInfo = CServiceInfo::NewLC();
+            serviceInfo->iUid = TUid::Uid(stmt->IntColumnL(1));
+
+            GetOpaqueDataArrayL(aAppUid, serviceInfo->iUid, serviceInfo->iOpaqueDataArray, aLocale);
+            GetDataTypesL(serviceInfo->iDataTypes, stmt->IntColumnL(0));
+            aServiceInfoArray.AppendL(serviceInfo);
+            CleanupStack::Pop(serviceInfo);
+            }
+        }
+    // Release allocated memories
+    CleanupStack::PopAndDestroy(1, stmt); // stmt
+    }
+
+void CScrRequestImpl::GetServiceImplementationsL(TUid aServiceUid,
+        RPointerArray<CServiceInfo>& aServiceInfoArray, TLanguage aLocale) const
+    {
+    if (aServiceUid.iUid)
+        {
+        DEBUG_PRINTF2(_L8("Returning the size of the service info details entry associated with service Uid (%d)."), aServiceUid.iUid);
+        _LIT(KSelectMatchingServiceInfo, "SELECT ServiceId, Uid, AppUid FROM ServiceInfo WHERE Uid=?;");
+        CStatement *stmt = iDbHandle->PrepareStatementLC(
+                KSelectMatchingServiceInfo);
+        stmt->BindIntL(1, aServiceUid.iUid);
+        aServiceInfoArray.ResetAndDestroy();
+        while (stmt->ProcessNextRowL())
+            {
+            CServiceInfo* serviceInfo = CServiceInfo::NewLC();
+            
+            serviceInfo->iUid = TUid::Uid(stmt->IntColumnL(1));
+            TUid appUid = TUid::Uid(stmt->IntColumnL(2));
+            GetOpaqueDataArrayL(appUid, serviceInfo->iUid, serviceInfo->iOpaqueDataArray, aLocale);
+            GetDataTypesL(serviceInfo->iDataTypes, stmt->IntColumnL(0));
+            
+            aServiceInfoArray.AppendL(serviceInfo);
+            CleanupStack::Pop(serviceInfo);
+            }
+        // Release allocated memories
+        CleanupStack::PopAndDestroy(1, stmt); // stmt
+        }
+    }
+
+void CScrRequestImpl::GetServiceImplementationsL(TUid aServiceUid,
+        TDesC& aDataType, RPointerArray<CServiceInfo>& aServiceInfoArray, TLanguage aLocale) const
+    {
+    if (aServiceUid.iUid)
+        {
+        DEBUG_PRINTF3(_L8("Returning the size of the service info details entry associated with service Uid (%d) and datatype (%S)."), aServiceUid.iUid, &aDataType);
+        _LIT(KSelectMatchingServiceInfo, "SELECT Uid, Priority, Type, AppUid FROM (ServiceInfo JOIN DataType ON ServiceInfo.ServiceId = DataType.ServiceId) WHERE Uid=? AND Type=?;");
+        CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectMatchingServiceInfo);
+        stmt->BindIntL(1, aServiceUid.iUid);
+        stmt->BindStrL(2, aDataType);
+        aServiceInfoArray.ResetAndDestroy();
+        while (stmt->ProcessNextRowL())
+            {
+            CServiceInfo* serviceInfo = CServiceInfo::NewLC();
+            
+            serviceInfo->iUid = TUid::Uid(stmt->IntColumnL(0));
+            
+            TUid appUid = TUid::Uid(stmt->IntColumnL(3));
+            GetOpaqueDataArrayL(appUid, serviceInfo->iUid, serviceInfo->iOpaqueDataArray, aLocale);
+            TInt priority(stmt->IntColumnL(1));
+            TPtrC datatype(stmt->StrColumnL(2));
+            CDataType* dataType = CDataType::NewL(priority,datatype);
+            CleanupStack::PushL(dataType);
+            serviceInfo->iDataTypes.AppendL(dataType);
+            CleanupStack::Pop(dataType);
+            aServiceInfoArray.AppendL(serviceInfo);
+            CleanupStack::Pop(serviceInfo);
+            }
+        // Release allocated memories
+        CleanupStack::PopAndDestroy(1, stmt); // stmt
+        }
+    }
+
+
+void CScrRequestImpl::GetAppServiceOpaqueDataL(TUid aAppUid,
+        TUid aServiceUid, RPointerArray<CServiceInfo>& aServiceInfoArray, TLanguage aLocale) const
+    {
+    if (aServiceUid.iUid)
+        {
+        DEBUG_PRINTF3(_L8("Returning the size of the service info details entry associated with app Uid (%d) and service Uid (%d)."), aAppUid.iUid, aServiceUid.iUid);
+        _LIT(KSelectMatchingServiceInfo, "SELECT ServiceId, Uid FROM ServiceInfo WHERE AppUid=? AND Uid=? ;");
+        CStatement *stmt = iDbHandle->PrepareStatementLC(
+                KSelectMatchingServiceInfo);
+        stmt->BindIntL(1, aAppUid.iUid);
+        stmt->BindIntL(2, aServiceUid.iUid);
+        aServiceInfoArray.ResetAndDestroy();
+        while (stmt->ProcessNextRowL())
+            {
+            CServiceInfo* serviceInfo = CServiceInfo::NewLC();
+            
+            serviceInfo->iUid = TUid::Uid(stmt->IntColumnL(1));
+            GetOpaqueDataArrayL(aAppUid, serviceInfo->iUid, serviceInfo->iOpaqueDataArray, aLocale);
+            GetDataTypesL(serviceInfo->iDataTypes, stmt->IntColumnL(0));
+
+            aServiceInfoArray.AppendL(serviceInfo);
+            CleanupStack::Pop(serviceInfo);
+            }
+        // Release allocated memories
+        CleanupStack::PopAndDestroy(1, stmt); // stmt
+        }
+    }
+
+void CScrRequestImpl::GetOpaqueDataArrayL(TUid aAppUid, TUid aServiceUid, RPointerArray<COpaqueData>& aOpaqueDataArray, TLanguage aLanguage) const
+    {
+    TLanguage finalAppLocale;
+    GetNearestAppLanguageForOpaqueDataL(aLanguage, aAppUid, aServiceUid, finalAppLocale);
+            
+    _LIT(KOpaqueData, "SELECT StrValue FROM AppProperties where Name = ? AND ServiceUid = ?  AND AppUid = ? AND Locale = ?");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KOpaqueData);
+    
+    stmt->BindStrL(1, _L("OpaqueData"));
+    stmt->BindIntL(2, aServiceUid.iUid);
+    stmt->BindIntL(3, aAppUid.iUid);
+    stmt->BindIntL(4, (TInt)finalAppLocale);
+    
+    aOpaqueDataArray.ResetAndDestroy();
+    while (stmt->ProcessNextRowL())
+        {
+        Usif::COpaqueData* opaqueData = Usif::COpaqueData::NewLC();
+        opaqueData->iLanguage = finalAppLocale;
+        DeleteObjectZ(opaqueData->iOpaqueData);
+        opaqueData->iOpaqueData = stmt->BinaryColumnL(0).AllocL();
+        DEBUG_PRINTF2(_L("Locale for opaque entry for this App is %d "), opaqueData->iLanguage);
+        aOpaqueDataArray.AppendL(opaqueData);
+        CleanupStack::Pop(opaqueData);
+        }
+    CleanupStack::PopAndDestroy(stmt);
+    }
+
+TBool CScrRequestImpl::GetComponentIdForAppInternalL(TUid aAppUid, TComponentId& aComponentId) const
+    {
+    return GetIntforConditionL(KComponentIdColumnName, KAppRegistrationInfoTable, KAppIdColumnName, aAppUid.iUid, aComponentId);
+    }
+
+void CScrRequestImpl::GetComponentIdForAppL(const RMessage2& aMessage) const
+    {
+    DEBUG_PRINTF(_L8("Returning the componentId that the given appUid is associated with."));
+    TUid appUid;
+    TPckg<TUid> appUidPckg(appUid);
+    aMessage.ReadL(0,appUidPckg);
+    TComponentId compId;
+        
+    if(GetComponentIdForAppInternalL(appUid, compId))
+        {
+        TPckg<TComponentId> compIdPckg(compId);
+        aMessage.WriteL(1, compIdPckg);
+        }
+    else
+        {
+        DEBUG_PRINTF(_L8("The given app doesnot exist"));
+        User::Leave(KErrNotFound);
+        }
+    }
+
+void CScrRequestImpl::GetAppUidsForComponentSizeL(const RMessage2& aMessage) const
+    {
+    DEBUG_PRINTF(_L8("Returning the size of the list of AppUids associated with the component."));
+    TComponentId compId = aMessage.Int0();
+
+    _LIT(KSelectAppUids, "SELECT AppUid FROM AppRegistrationInfo WHERE ComponentId=?;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectAppUids);
+    stmt->BindIntL(1, compId);
+    iComponentAppUids.Close();
+    while(stmt->ProcessNextRowL())
+        {
+        TInt appUid(stmt->IntColumnL(0));
+        iComponentAppUids.AppendL(TUid::Uid(appUid));
+        }
+    // Release allocated memories
+    CleanupStack::PopAndDestroy(1, stmt); // stmt
+    
+    if(iComponentAppUids.Count()== 0)
+        {    
+        DEBUG_PRINTF(_L8("No apps associated with the given componentId found"));
+        User::Leave(KErrNotFound);
+        }
+
+    WriteArraySizeL(aMessage, 1, iComponentAppUids);
+    }
+
+void CScrRequestImpl::GetAppUidsForComponentDataL(const RMessage2& aMessage) const
+    {
+    DEBUG_PRINTF(_L8("Returning the list of appUids associated with the component."));
+    WriteArrayDataL(aMessage, 0, iComponentAppUids);
+    iComponentAppUids.Reset(); 
+    }
+
+void CScrRequestImpl::GetApplicationInfoL(const RMessage2& aMessage) 
+    {
+    TUid appUid = TUid::Uid(aMessage.Int0());
+    TLanguage locale = (TLanguage)aMessage.Int1();
+    if(locale == KUnspecifiedLocale)
+        {
+        locale = User::Language();
+        }
+    TAppRegInfo appRegInfo;
+    TPckg<TAppRegInfo> appRegInfoPckg(appRegInfo);
+    aMessage.ReadL(2, appRegInfoPckg);
+
+    _LIT(KNull,"");
+    DEBUG_PRINTF2(_L8("Returning the basic information contained in TAppRegInfo for application 0x%x."), appUid.iUid);
+    _LIT(KSelectAppInfo, "SELECT AppFile FROM AppRegistrationInfo WHERE AppUid = ?;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectAppInfo);
+    stmt->BindIntL(1, appUid.iUid);
+    if(stmt->ProcessNextRowL())
+        {
+        appRegInfo.iUid = appUid;
+        appRegInfo.iFullName.Copy(stmt->StrColumnL(0));
+        TLanguage finallocale = KUnspecifiedLocale;
+        if(GetNearestAppLanguageL(locale,appRegInfo.iUid, finallocale))
+            {
+            GetCaptionAndShortCaptionInfoForLocaleL(appRegInfo.iUid, finallocale, appRegInfo.iShortCaption, appRegInfo.iCaption);
+            }
+        else
+            {
+            appRegInfo.iCaption.Copy(KNull);
+            appRegInfo.iShortCaption.Copy(KNull);            
+            }
+        aMessage.WriteL(2, appRegInfoPckg);
+        }
+    else
+        {
+        appRegInfo.iUid = TUid::Null();
+        DEBUG_PRINTF2(_L8("Application 0x%x not found."), appUid.iUid);
+        }
+    CleanupStack::PopAndDestroy(stmt); 
+    }
+
+void CScrRequestImpl::GetCaptionAndShortCaptionInfoForLocaleL(TUid aAppUid, TLanguage aLocale, TAppCaption& aShortCaption, TAppCaption& aCaption)
+    {
+    _LIT(KGetShortCaptionAndCaptionAndIconId,"SELECT CaptionAndIconId, ShortCaption FROM LocalizableAppInfo WHERE AppUid = ? AND Locale = ?;");                                      
+    CStatement *stmt1 = iDbHandle->PrepareStatementLC(KGetShortCaptionAndCaptionAndIconId);
+    stmt1->BindIntL(1, aAppUid.iUid);
+    stmt1->BindIntL(2, aLocale);
+    stmt1->ProcessNextRowL();
+    aShortCaption.Copy(stmt1->StrColumnL(1));
+    TInt captionAndIconId = stmt1->IntColumnL(0);
+    if(captionAndIconId)
+        {
+        _LIT(KGetCaption,"SELECT Caption FROM CaptionAndIconInfo WHERE CaptionAndIconId = ?;");                                      
+        CStatement *stmt2 = iDbHandle->PrepareStatementLC(KGetCaption);
+        stmt2->BindIntL(1, captionAndIconId);
+        stmt2->ProcessNextRowL();
+        aCaption.Copy(stmt2->StrColumnL(0));
+        CleanupStack::PopAndDestroy(stmt2);
+        }
+        CleanupStack::PopAndDestroy(stmt1);
+    }
+
+void CScrRequestImpl::GetAppPropertiesInfoL(CApplicationRegistrationData& aApplicationRegistration,TUid aAppUid, TLanguage aLanguage)
+    {
+	DEBUG_PRINTF2(_L8("returning App Properties Info for AppUid %d in the SCR"), aAppUid);
+    TLanguage appSupportedLanguage;
+    if(GetNearestAppLanguageL(aLanguage, aAppUid, appSupportedLanguage))
+        {
+        _LIT(KGetAppPropertiesInfo, "SELECT Name, IntValue, StrValue, Locale, IsStr8Bit FROM AppProperties WHERE (AppUid =?) AND (Locale= ? OR Locale= ?)");
+        CStatement *stmt = iDbHandle->PrepareStatementLC(KGetAppPropertiesInfo);
+        stmt->BindIntL(1, aAppUid.iUid);
+        stmt->BindIntL(2, Usif::KNonLocalized);
+        stmt->BindIntL(3, (TInt)appSupportedLanguage);
+        while(stmt->ProcessNextRowL())
+            {
+            TPtrC name(stmt->StrColumnL(0));
+            CPropertyEntry *entry = GetPropertyEntryL(*stmt, name, 1); // aStartingIndex=1
+            DEBUG_PRINTF2(_L("Value read for Property %S "), &name);
+            CleanupStack::PushL(entry);
+            aApplicationRegistration.iAppPropertiesArray.AppendL(entry);
+            CleanupStack::Pop(entry);   // because array is now owner
+            } 
+        CleanupStack::PopAndDestroy(stmt);    
+        }
+    else
+        {
+        DEBUG_PRINTF2(_L8("No Nearest locale found for AppUid %d in the SCR"), aAppUid);
+        }    
+    }
+
+void CScrRequestImpl::GetApplicationLaunchersSizeL(const RMessage2& aMessage) const
+    {
+    DEBUG_PRINTF(_L8("Returning the size of the list of application launchers"));
+   
+    _LIT(KSelectLauncher, "SELECT SoftwareTypeId, LauncherExecutable FROM SoftwareTypes;");
+    CStatement* stmt = iDbHandle->PrepareStatementLC(KSelectLauncher);
+        
+    while(stmt->ProcessNextRowL())
+        {
+        CLauncherExecutable* launcher = CLauncherExecutable::NewLC();
+        launcher->iTypeId = stmt->IntColumnL(0);
+        DeleteObjectZ(launcher->iLauncher);
+        launcher->iLauncher = stmt->StrColumnL(1).AllocL();
+        iLaunchers.AppendL(launcher);
+        CleanupStack::Pop(launcher);
+        }    
+    CleanupStack::PopAndDestroy(stmt);
+    
+    WriteArraySizeL(aMessage, 1, iLaunchers);
+    }
+
+void CScrRequestImpl::GetApplicationLaunchersDataL(const RMessage2& aMessage) const
+    {
+    DEBUG_PRINTF(_L8("Returning the list of application launchers"));
+    WriteArrayDataL(aMessage, 0, iLaunchers);    
+    iLaunchers.ResetAndDestroy();
+    }
+
+
+void CScrRequestImpl::GenerateNonNativeAppUidL(const RMessage2& aMessage)
+    {    
+	DEBUG_PRINTF(_L8("Generating Non Native AppUid"));
+    //Get access to the repository instance.
+    CScrRepository* scrRepository = CScrRepository::GetRepositoryInstanceL();
+    
+    //Number of ranges defined in the cenrep file
+    TInt rangeCount = scrRepository->AppUidRangeCountL();
+        
+    TUid rangeBegin = TUid::Null();
+    TUid rangeEnd = TUid::Null();
+    TUid generatedUid = TUid::Null(); // Used to store final result.
+    
+    for(TInt counter = 1; counter <= rangeCount; counter++)
+        {
+        // Retrieve the range. 
+        TRAPD(err, scrRepository->GetAppUidRangeL(counter, rangeBegin, rangeEnd));
+        
+        if(KErrNotFound == err)
+            continue;// Incorrect range, try the next one.
+        if(rangeBegin.iUid >= rangeEnd.iUid)
+            continue; // Incorrect range, try the next one.
+        
+        _LIT(KSelectAppUids, "SELECT AppUid FROM AppRegistrationInfo WHERE AppUid >= ? AND AppUid <= ? ORDER BY AppUid;");
+        
+        CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectAppUids);
+        stmt->BindIntL(1, rangeBegin.iUid);
+        stmt->BindIntL(2, rangeEnd.iUid);
+        
+        TInt prevUid = rangeBegin.iUid-1;
+        while(stmt->ProcessNextRowL())
+            {
+            TInt currUid(stmt->IntColumnL(0));
+            if(currUid > prevUid+1)
+                break;
+            prevUid = currUid;
+            }
+        
+        if(prevUid != rangeEnd.iUid) //If the range is not full
+            {
+            generatedUid = TUid::Uid(prevUid+1);
+            CleanupStack::PopAndDestroy(1, stmt);
+            break;
+            }
+        
+        // Release allocated memories
+        CleanupStack::PopAndDestroy(1, stmt);
+        }
+    
+    TPckg<TUid> generatedUidPckg(generatedUid); 
+    aMessage.WriteL(0, generatedUidPckg);    
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/server/scrserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,467 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements CScrServer providing management of SCR services.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "scrserver.h"
+#include "scrrequestimpl.h"
+#include "usiflog.h"
+#include <scs/cleanuputils.h>
+#include "scrhelperclient.h"
+#include <scs/securityutils.h>
+
+using namespace Usif;
+
+static const TUint scrRangeCount = 13;
+
+static const TInt scrRanges[scrRangeCount] =
+	{
+	0,							 // Range-0 - 0 to EBaseSession-1. Not used.
+	CScsServer::EBaseSession,	 // Range-1 - EBaseSession to EBaseMustAllow exclusive.
+	CScsServer::EBaseSession | EGetSingleComponentSize, // Modification and transaction APIs have custom checks
+	CScsServer::EBaseSession | EGetComponentIdListSize, // Component-specific APIs are free for all
+	CScsServer::EBaseSession | EGetApplicationLaunchersSize, // Getting all component IDs is restricted to ReadUserData
+	CScsServer::EBaseSession | EGetIsMediaPresent, // Only allowed by apparc
+	CScsServer::EBaseSession | EAddApplicationEntry, // Component-specific APIs are free for all
+	CScsServer::EBaseSession | EGetPluginUidWithMimeType, // Custom checks (as with the rest of modification APIs)
+	CScsServer::EBaseSession | EAddSoftwareType, // File filter sub-sessions and plugin-fetching APIs are free for all	
+	CScsServer::EBaseSubSession | EOpenComponentsView, // Software Type management APIs are only allowed for SWI 
+	CScsServer::EBaseSubSession | EOpenFileList, // Component filter sub-sessions require ReadUserData	
+	CScsServer::EBaseSubSession | EOpenApplicationRegistrationInfoView, // Always pass
+	CScsServer::EBaseMustAllow // Application Registration view to be only allowed by apparc, the rest of the range is reserved for SCS, and must be allowed( EBaseMustAllow to KMaxTInt inclusive)	
+	};
+
+static const TUint8 scrElementsIndex[scrRangeCount] =
+	{
+	CPolicyServer::ENotSupported, // Range 0 is not supported.
+	CPolicyServer::ECustomCheck,
+	CPolicyServer::EAlwaysPass,
+	0, // Require ReadUserData
+	2, // Only Apparc process can invoke	
+	CPolicyServer::EAlwaysPass,
+	CPolicyServer::ECustomCheck,
+	CPolicyServer::EAlwaysPass,	
+	1, // Only SWI process can invoke	
+	0, // Require ReadUserData
+	CPolicyServer::EAlwaysPass,
+	2, // Only Apparc process can invoke
+	CPolicyServer::EAlwaysPass 
+	};							
+
+static const CPolicyServer::TPolicyElement scrElements[] =
+	{
+	{_INIT_SECURITY_POLICY_C1(ECapabilityReadUserData), CPolicyServer::EFailClient},
+	{_INIT_SECURITY_POLICY_S0(KSisRegistryServerSid.iId), CPolicyServer::EFailClient},
+	{_INIT_SECURITY_POLICY_S0(KApparcServerSid.iId), CPolicyServer::EFailClient}	
+	};
+
+static const CPolicyServer::TPolicy scrPolicy =
+	{
+	CPolicyServer::EAlwaysPass, // Allow all connections
+	scrRangeCount,
+	scrRanges,
+	scrElementsIndex,
+	scrElements,
+	};
+
+//
+// CScrServer
+//
+
+CScrServer::CScrServer()
+/**
+	Intializes the SCR server object with its version and policy.
+ */
+	:	CScsServer(ScrServerVersion(), scrPolicy)
+		{
+		DEBUG_PRINTF(_L8("SCR server construction!"));
+		}
+
+CScrServer::~CScrServer()
+/**
+	Destructor. Cleanup the SCR Server.
+ */
+	{
+	DEBUG_PRINTF(_L8("SCR server destruction!"));
+	delete iRequestImpl;
+	iDatabaseFile.Close();
+	iJournalFile.Close();
+	iFs.Close();
+	iSubsessionOwners.Close();
+	}
+	
+	
+CScrServer* CScrServer::NewLC()
+/**
+	Factory function allocates a new instance of CScrServer.
+
+	@return		The newly created instance of CScrServer which is left on the cleanup stack.
+ */
+	{
+	CScrServer *self = new (ELeave) CScrServer();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+void CScrServer::ConstructL()
+/**
+	Second phase constructor starts the SCR server.
+ */
+	{
+	// StartL() must be called first in order to avoid concurrency issue when starting the server from two or more processes
+	StartL(KSoftwareComponentRegistryName);
+	CScsServer::ConstructL(KScrServerShutdownPeriod);
+	SetupL();
+	}
+
+void CheckFilePathL(RFs& aFs, RFile& aFile, const TDesC& aExpectedPath)
+	{
+	RBuf fileName;
+	fileName.CreateL(KMaxFileName);
+	fileName.CleanupClosePushL();
+	User::LeaveIfError(aFile.FullName(fileName));
+	
+	RBuf expectedFileName;
+	expectedFileName.CreateL(aExpectedPath.Length());
+	expectedFileName.CleanupClosePushL();
+	expectedFileName.Copy(aExpectedPath);
+	expectedFileName[0] = aFs.GetSystemDriveChar();
+	
+	__ASSERT_ALWAYS(!fileName.CompareF(expectedFileName), User::Leave(KErrBadHandle));
+		
+	CleanupStack::PopAndDestroy(2, &fileName); // fileName, expectedFileName
+	}
+
+void CScrServer::SetupL()
+	{
+	// Connect to the file server
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iFs.ShareProtected());
+	
+	// Connect to the SCR database
+	RScrHelper sh;
+	User::LeaveIfError(sh.Connect());
+	CleanupClosePushL(sh);
+	
+	// Retrieve handles for database and journal files
+	sh.RetrieveFileHandlesL(iDatabaseFile, iJournalFile);
+	CleanupStack::PopAndDestroy(&sh);
+	
+	// Check if the retrieved file handles belong to the expected files (KScrDatabaseFilePath/KScrJournalFilePath).
+	// This is an extra security measure in the SCR to check that the file handle transferred from SCR Helper Server  
+	// really corresponds to scr.db/scr.db-journal in the expected location.
+	CheckFilePathL(iFs, iDatabaseFile, KScrDatabaseFilePath);
+	CheckFilePathL(iFs, iJournalFile, KScrJournalFilePath);
+	
+	ReconnectL();
+	}
+
+CScsSession* CScrServer::DoNewSessionL(const RMessage2& aMessage)
+/**
+	Implement CScsServer by allocating a new instance of CScrSession.
+
+	@param	aMessage	Standard server-side handle to message.
+	@return				New instance of the SCR session class which is owned by the caller.
+ */
+	{
+	DEBUG_PRINTF(_L8("SCR session creation!"));
+	return CScrSession::NewL(*this, aMessage);
+	}
+
+CPolicyServer::TCustomResult CScrServer::CheckComponentIdMatchingEnvironmentL(const RMessage2& aMsg, TBool aCheckForSingleApp)
+	{	
+	TComponentId componentId = 0;
+	if(aCheckForSingleApp)
+	    {
+        // Get the application uid from RMessage2
+        TInt applicationUid = aMsg.Int0();        
+        // Get the component id for the application            
+        if(!iRequestImpl->GetComponentIdForAppInternalL(TUid::Uid(applicationUid), componentId))
+            return EFail;
+	    }
+	else
+	    {
+	    componentId = CScrRequestImpl::GetComponentIdFromMsgL(aMsg);
+	    }
+	
+	TSecureId clientSid = aMsg.SecureId();
+
+    if (componentId == 0)
+        {
+        if (clientSid == KSisRegistryServerSid)
+            return EPass;
+        }   
+    
+    TBool vaildSid = EFalse;
+	RArray<TSecureId> installerSids;
+	CleanupClosePushL(installerSids);
+	if (iRequestImpl->GetInstallerOrExecutionEnvSidsForComponentL(componentId, installerSids))
+	    {
+        TInt count = installerSids.Count();
+        for (TInt i = 0; i < count; i++)
+            {
+            if (clientSid == installerSids[i])
+                {
+                vaildSid = ETrue;
+                break;
+                }
+            }
+	    }
+	CleanupStack::PopAndDestroy(&installerSids);
+	
+	if (vaildSid)
+		return EPass;
+			
+	DEBUG_PRINTF3(_L("Neither installer nor execution environment matched the client while checking for component-matching environment. Client SID %d, Component ID %d"), 
+			TUint32(clientSid), componentId);
+	return EFail;
+	}
+	
+CPolicyServer::TCustomResult CScrServer::CheckDeleteComponentAllowedL(const RMessage2& aMsg)	
+	{
+	const TUint KSifServerSid = 0x10285BCB;	
+	
+	if (CheckComponentIdMatchingEnvironmentL(aMsg) == EPass)
+		return EPass;
+		
+	TSecureId clientSid = aMsg.SecureId();		
+	TComponentId componentId = CScrRequestImpl::GetComponentIdFromMsgL(aMsg);
+	// If a component does not have corresponding environments, it means that it is orphaned. In this case, SIF is allowed to forcefully remove it
+	if (iRequestImpl->GetIsComponentOrphanedL(componentId) && (TUint32(clientSid) == KSifServerSid))
+		{
+		DEBUG_PRINTF2(_L("Allowing SIF to uninstall orphaned component %d"), componentId);
+		return EPass;	
+		}
+		
+	return EFail;
+	}
+
+CPolicyServer::TCustomResult CScrServer::CheckSoftwareNameMatchingEnvironmentL(const RMessage2& aMsg)
+	{
+	HBufC* softwareTypeName = CScrRequestImpl::GetSoftwareTypeNameFromMsgLC(aMsg);
+	TSecureId clientSid = aMsg.SecureId();
+	
+	TBool vaildSid = EFalse;
+    RArray<TSecureId> installerSids;
+    CleanupClosePushL(installerSids);
+    if (iRequestImpl->GetSidsForSoftwareTypeL(softwareTypeName, installerSids))
+        {
+        TInt count = installerSids.Count();
+        for (TInt i = 0; i < count; i++)
+            {
+            if (clientSid == installerSids[i])
+                {
+                vaildSid = ETrue;
+                break;
+                }
+            }
+        }
+    CleanupStack::PopAndDestroy(2, softwareTypeName);
+	
+	if (vaildSid)	
+		return EPass;	
+
+	DEBUG_PRINTF(_L("Client Sid is not a valid one software type!"));	
+	return EFail;
+	}
+
+CPolicyServer::TCustomResult CScrServer::CheckAllowedFilePathL(const RMessage2& aMsg)
+	{
+	HBufC* fileName = CScrRequestImpl::ReadFileNameFromMsgLC(aMsg);
+	
+	// Retrieve the required capabilities for write access to this path
+	TCapabilitySet requiredCapabilities = SecCommonUtils::FileModificationRequiredCapabilitiesL(*fileName, aMsg.SecureId());
+	
+	TBool result = EFalse;
+	TBool allFilesRequired = requiredCapabilities.HasCapability(ECapabilityAllFiles);
+	TBool tcbRequired = requiredCapabilities.HasCapability(ECapabilityTCB);
+	
+	// Test whether the client has at least one of the required capabilities
+	if (allFilesRequired)
+		result = aMsg.HasCapability(ECapabilityAllFiles);
+	if (!result && tcbRequired)
+		result = aMsg.HasCapability(ECapabilityTCB);
+	if (!allFilesRequired && !tcbRequired)
+		result = ETrue;
+	
+	CleanupStack::PopAndDestroy(fileName);
+	return result ? EPass : EFail;
+	}
+
+CPolicyServer::TCustomResult CScrServer::CheckClientIsInstallerL(const RMessage2& aMsg)
+	{
+	TSecureId clientSid = aMsg.SecureId();
+	DEBUG_PRINTF2(_L("The client SID is 0x%X"), clientSid.iId);
+	TBool isInstallerSid = iRequestImpl->IsInstallerOrExecutionEnvSidL(clientSid);
+	return isInstallerSid ? EPass : EFail;
+	}
+
+CPolicyServer::TCustomResult CScrServer::CheckCommonComponentPropertySettableL(const RMessage2& aMsg, TCapability aRequiredCapability)
+	{
+	// Setting a common component property is allowed either for the owning installer or for a process with corresponding capability
+	if (CheckComponentIdMatchingEnvironmentL(aMsg) == EPass)
+		return EPass;
+	return aMsg.HasCapability(aRequiredCapability)? EPass : EFail;
+	}
+
+CPolicyServer::TCustomResult CScrServer::CustomSecurityCheckL(const RMessage2& aMsg, TInt& /*aAction*/, TSecurityInfo& /*aMissing*/)
+	{	
+	// SCS framework adds its own bitmask to the function id - we need to strip it in order to detect the actual function invoked
+	TInt functionId = StripScsFunctionMask(aMsg.Function());
+
+	switch (functionId)
+		{
+		case ECreateTransaction:
+		case ERollbackTransaction:
+		case ECommitTransaction:
+			return CheckClientIsInstallerL(aMsg);
+		case EAddComponent:
+		case EAddComponentDependency:
+		case EDeleteComponentDependency:
+			return CheckSoftwareNameMatchingEnvironmentL(aMsg);
+		case ERegisterComponentFile:
+		case ESetFileStringProperty:
+		case ESetFileNumericProperty:
+		case EDeleteFileProperty:
+		case EUnregisterComponentFile:
+			// For file registration we check that the client is actually allowed to modify files under this location
+			// We do not check for the installer SID, since if the client can write to this location, then registering this location for other components
+			// does not pose additional risk			
+			return CheckAllowedFilePathL(aMsg);	
+		case ESetComponentLocalizableProperty:
+		case ESetComponentNumericProperty:
+		case ESetComponentBinaryProperty:
+		case ESetComponentName:
+		case ESetComponentVendor:
+		case ESetComponentVersion:
+		case ESetComponentSize:
+		case EDeleteComponentProperty:
+		case ESetScomoState:
+		case ESetIsComponentPresent:
+			return CheckComponentIdMatchingEnvironmentL(aMsg);
+		case EDeleteComponent:			
+			return CheckDeleteComponentAllowedL(aMsg);
+		case ESetIsComponentRemovable:
+			return CheckCommonComponentPropertySettableL(aMsg, ECapabilityAllFiles);
+		case ESetIsComponentDrmProtected:
+		case ESetIsComponentHidden:
+		case ESetIsComponentKnownRevoked:
+		case ESetIsComponentOriginVerified:		
+			return CheckCommonComponentPropertySettableL(aMsg, ECapabilityWriteDeviceData);
+		case EAddApplicationEntry:
+		case EDeleteApplicationEntries:
+			return CheckComponentIdMatchingEnvironmentL(aMsg);
+		case EDeleteApplicationEntry:
+		    return CheckComponentIdMatchingEnvironmentL(aMsg, ETrue);
+		default:
+			DEBUG_PRINTF2(_L("Unknown function was invoked in CustomSecurityCheck - %d"), functionId);							
+			__ASSERT_DEBUG(0, User::Invariant());
+			return EFail;
+		}
+	}
+
+void CScrServer::ReconnectL()
+	{
+	DeleteObjectZ(iRequestImpl);	
+	iRequestImpl = CScrRequestImpl::NewL(iFs, iDatabaseFile, iJournalFile);	
+	}
+
+void CScrServer::AddSubsessionOwnerL(CScrSession* aSession)
+	{
+	iSubsessionOwners.InsertInAddressOrderAllowRepeatsL(aSession);
+	}
+
+void CScrServer::RemoveSubsessionOwner(CScrSession* aSession)
+	{
+	TInt index = iSubsessionOwners.FindInAddressOrder(aSession);
+	if(KErrNotFound != index)
+		iSubsessionOwners.Remove(index);
+	}
+
+TBool CScrServer::IsTheOnlySubsessionOwner(CScrSession* aSession)
+	{
+	TInt firstElementIdx = 0;
+	TInt lastElementIdx = iSubsessionOwners.Count();
+	// if both first element and the last element in the array is the provided session
+	// it means that all active subsessions is owned by this session. 
+	if(firstElementIdx == iSubsessionOwners.SpecificFindInAddressOrder(aSession, EArrayFindMode_First) &&
+	   lastElementIdx == iSubsessionOwners.SpecificFindInAddressOrder(aSession, EArrayFindMode_Last))
+		{
+		return ETrue;
+		}
+	return EFalse; 
+	}
+
+TInt CScrServer::SubsessionCount()
+	{
+	return iSubsessionOwners.Count();
+	}
+
+void CScrServer::SetTransactionOwner(CScrSession* aSession)
+	{
+	iTransactionOwningSession = aSession;
+	}
+
+
+TBool CScrServer::IsTransactionInProgress()
+	{
+	if(iTransactionOwningSession)
+		return ETrue;
+	else 
+		return EFalse;
+	}
+
+
+TBool CScrServer::IsTransactionOwner(CScrSession* aSession)
+	{	
+	__ASSERT_ALWAYS(aSession, User::Invariant());
+	if(aSession == iTransactionOwningSession) 
+		return ETrue;
+	else 
+		return EFalse;
+	}
+
+void CScrServer::DoPreHeapMarkOrCheckL()
+/**
+   This function is called by the framework just before settingchecking a heap mark. We need to compress/free memory
+   down to a state which should be the same both before and after the test operations.
+*/
+{
+#ifdef _DEBUG
+iSubsessionOwners.Compress();
+DeleteObjectZ(iRequestImpl);
+#endif
+}
+
+void CScrServer::DoPostHeapMarkOrCheckL()
+/**
+   This function is called by the framework just before settingchecking a heap mark. We need to compress/free memory
+   down to a state which should be the same both before and after the test operations.
+*/
+{
+#ifdef _DEBUG
+this->ReconnectL();
+#endif
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/server/scrsession.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,518 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the SCR session class which is server-side session object.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "scrserver.h"
+#include "scrsubsession.h"
+#include "scrrequestimpl.h"
+#include "usiflog.h"
+#include "usiferror.h"
+
+using namespace Usif;
+
+//
+// CScrSession
+//
+
+CScrSession::CScrSession(CScrServer& aServer)
+/**
+	Intializes the SCR session object with the server handle.
+ */
+	:	CScsSession(aServer)
+		{
+		DEBUG_PRINTF(_L8("SCR session construction!"));
+		}
+
+
+CScrSession::~CScrSession()
+/**
+	Destructor for the SCR session object.
+ */
+	{
+	DEBUG_PRINTF(_L8("SCR session destruction!"));
+	CScrServer *server = static_cast<CScrServer*>(&iServer);
+	// Take care to close all outstanding subsesions first, as we wouldn't be able to roll-back with open statements
+	TRAP_IGNORE(CScsSession::CloseAllSubsessionsL());
+	// Now roll-back transaction in case it wasn't committed or rolled back explicitly
+	if(server->IsTransactionOwner(this))
+		{
+		TRAPD(err, server->RequestImpL()->RollbackTransactionL());
+		if(KErrNone != err)
+			{
+			TRAP_IGNORE(server->ReconnectL());
+			}
+		server->SetTransactionOwner(NULL);
+		}
+	// Any error during writing log entries can be ignored as it is done in the destructor of SCR session
+	// and error logs are already written inside the function.
+	TRAP_IGNORE(server->RequestImpL()->FlushLogEntriesArrayL());
+	}
+
+	
+CScrSession* CScrSession::NewL(CScrServer &aServer, const RMessage2& aMessage)
+/**
+	Factory function allocates new instance of CScrSession.
+	
+	@param aServer  SCR Server object.
+	@param aMessage	Standard server-side handle to message. Not used.
+	@return			Newly created instance of CScrSession which is owned by the caller.
+ */
+	{
+	DEBUG_PRINTF2(_L("A new SCR session for the process(0x%x) is being created."), aMessage.SecureId().iId);
+	(void)aMessage; // Happy the compiler in release mode
+	CScrSession* self = new (ELeave) CScrSession(aServer);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CancelTransaction(TAny* aParam)
+	{
+	CScrServer *server = static_cast<CScrServer*>(aParam);
+	TRAP_IGNORE(server->RequestImpL()->RollbackTransactionL());
+	server->SetTransactionOwner(NULL);
+	}
+
+TBool CScrSession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
+/**
+	Implement CScsSession by handling the supplied message.
+
+	@param	aFunction		Function identifier without SCS code.
+	@param	aMessage		Standard server-side handle to message.  Not used.
+ */
+	{
+	TScrSessionFunction f = static_cast<TScrSessionFunction>(aFunction);
+	CScrServer *server = static_cast<CScrServer*>(&iServer);
+	
+	TBool isImplicitTransaction = EFalse;	
+	MutatingOperationsPreambleL(*server, f, isImplicitTransaction);
+	if(isImplicitTransaction)
+		{
+		CleanupStack::PushL(TCleanupItem(CancelTransaction, server));
+		}
+	
+	switch(f)
+		{
+		case ECreateTransaction:
+			server->RequestImpL()->CreateTransactionL();
+			server->SetTransactionOwner(this);
+			break;
+		case ERollbackTransaction:
+			server->RequestImpL()->RollbackTransactionL();
+			server->SetTransactionOwner(NULL);
+			break;
+		case ECommitTransaction:
+			server->RequestImpL()->CommitTransactionL();
+			server->SetTransactionOwner(NULL);
+			break;
+		case EAddComponent:
+			server->RequestImpL()->AddComponentL(aMessage);
+			break;
+		case ESetComponentLocalizableProperty:
+			server->RequestImpL()->SetComponentLocalizablePropertyL(aMessage);
+			break;
+		case ESetComponentNumericProperty:
+			server->RequestImpL()->SetComponentIntPropertyL(aMessage);
+			break;
+		case ESetComponentBinaryProperty:
+			server->RequestImpL()->SetComponentBinaryPropertyL(aMessage);
+			break;			
+		case ERegisterComponentFile:
+			server->RequestImpL()->RegisterComponentFileL(aMessage);
+			break;
+		case ESetFileStringProperty:
+			server->RequestImpL()->SetFileStrPropertyL(aMessage);
+			break;
+		case ESetFileNumericProperty:
+			server->RequestImpL()->SetFileIntPropertyL(aMessage);
+			break;
+		case ESetComponentName:
+			server->RequestImpL()->SetComponentNameL(aMessage);
+			break;
+		case ESetComponentVendor:
+			server->RequestImpL()->SetVendorNameL(aMessage);
+			break;
+		case ESetComponentVersion:
+			server->RequestImpL()->SetComponentVersionL(aMessage);
+			break;
+		case ESetIsComponentRemovable:
+			server->RequestImpL()->SetIsComponentRemovableL(aMessage);
+			break;
+		case ESetIsComponentDrmProtected:
+			server->RequestImpL()->SetIsComponentDrmProtectedL(aMessage);
+			break;
+		case ESetIsComponentHidden:
+			server->RequestImpL()->SetIsComponentHiddenL(aMessage);
+			break;
+		case ESetIsComponentKnownRevoked:
+			server->RequestImpL()->SetIsComponentKnownRevokedL(aMessage);
+			break;
+		case ESetIsComponentOriginVerified:
+			server->RequestImpL()->SetIsComponentOriginVerifiedL(aMessage);
+			break;
+		case ESetComponentSize:
+			server->RequestImpL()->SetComponentSizeL(aMessage);
+			break;
+		case EDeleteComponentProperty:
+			server->RequestImpL()->DeleteComponentPropertyL(aMessage);
+			break;
+		case EDeleteFileProperty:
+			server->RequestImpL()->DeleteFilePropertyL(aMessage);
+			break;
+		case EUnregisterComponentFile:
+			server->RequestImpL()->UnregisterComponentFileL(aMessage);
+			break;
+		case EDeleteComponent:
+			server->RequestImpL()->DeleteComponentL(aMessage);
+			break;
+		case EGetSingleComponentSize:
+			server->RequestImpL()->GetComponentEntrySizeL(aMessage);
+			break;
+		case EGetSingleComponentData:
+			server->RequestImpL()->GetComponentEntryDataL(aMessage);
+			break;
+		case EGetFilePropertiesSize:
+			server->RequestImpL()->GetFilePropertiesSizeL(aMessage);
+			break;
+		case EGetFilePropertiesData:
+			server->RequestImpL()->GetFilePropertiesDataL(aMessage);
+			break;
+		case EGetSingleFilePropertySize:
+			server->RequestImpL()->GetSingleFilePropertySizeL(aMessage);
+			break;
+		case EGetSingleFilePropertyData:
+			server->RequestImpL()->GetSingleFilePropertyDataL(aMessage);
+			break;
+		case EGetFileComponentsSize:
+			server->RequestImpL()->GetFileComponentsSizeL(aMessage);
+			break;
+		case EGetFileComponentsData:
+			server->RequestImpL()->GetFileComponentsDataL(aMessage);
+			break;
+		case EGetComponentPropertiesSize:
+			server->RequestImpL()->GetComponentPropertiesSizeL(aMessage);
+			break;
+		case EGetComponentPropertiesData:
+			server->RequestImpL()->GetComponentPropertiesDataL(aMessage);
+			break;
+		case EGetComponentSinglePropertySize:
+			server->RequestImpL()->GetComponentSinglePropertySizeL(aMessage);
+			break;
+		case EGetComponentSinglePropertyData:
+			server->RequestImpL()->GetComponentSinglePropertyDataL(aMessage);
+			break;
+		case EGetIsMediaPresent:
+			server->RequestImpL()->GetIsMediaPresentL(aMessage);
+			break;
+		case ESetScomoState:
+			server->RequestImpL()->SetScomoStateL(aMessage);
+			break;
+		case EGetPluginUidWithMimeType:
+			server->RequestImpL()->GetPluginUidWithMimeTypeL(aMessage);
+			break;
+		case EGetPluginUidWithComponentId:
+			server->RequestImpL()->GetPluginUidWithComponentIdL(aMessage);
+			break;
+		case EGetComponentIdListSize:
+			server->RequestImpL()->GetComponentIdListSizeL(aMessage);
+			break;
+		case EGetComponentIdListData:
+			server->RequestImpL()->GetComponentIdListDataL(aMessage);
+			break;
+		case EGetComponentFilesCount:
+			server->RequestImpL()->GetComponentFilesCountL(aMessage);
+			break;
+		case EAddComponentDependency:
+			server->RequestImpL()->AddComponentDependencyL(aMessage);
+			break;
+		case EDeleteComponentDependency:
+			server->RequestImpL()->DeleteComponentDependencyL(aMessage);
+			break;
+		case EGetLocalComponentId:
+			server->RequestImpL()->GetComponentIdL(aMessage);
+			break;
+		case EGetComponentWithGlobalIdSize:
+			server->RequestImpL()->GetComponentWithGlobalIdSizeL(aMessage);
+			break;
+		case EGetComponentWithGlobalIdData:
+			server->RequestImpL()->GetComponentWithGlobalIdDataL(aMessage);
+			break;
+		case EGetSupplierComponentsSize:
+			server->RequestImpL()->GetSupplierComponentsSizeL(aMessage);
+			break;
+		case EGetSupplierComponentsData:
+			server->RequestImpL()->GetSupplierComponentsDataL(aMessage);
+			break;
+		case EGetDependantComponentsSize:
+			server->RequestImpL()->GetDependantComponentsSizeL(aMessage);
+			break;
+		case EGetDependantComponentsData:
+			server->RequestImpL()->GetDependantComponentsDataL(aMessage);
+			break;
+		case EAddSoftwareType:
+			server->RequestImpL()->AddSoftwareTypeL(aMessage);
+			break;
+		case EDeleteSoftwareType:
+			server->RequestImpL()->DeleteSoftwareTypeL(aMessage);
+			break;
+		case EGetDeletedMimeTypes:
+			server->RequestImpL()->GetDeletedMimeTypesL(aMessage);
+			break;
+		case EGetIsComponentOrphaned:
+			server->RequestImpL()->GetIsComponentOrphanedL(aMessage);
+			break;
+		case EGetLogFileHandle:
+			server->RequestImpL()->GetLogFileHandleL(aMessage);
+			//RMessage2 object is closed by both TransferToClient() and SCS framework.
+			//return EFalse to prevent SCS to close the message object.
+			return EFalse;
+		case EGetIsComponentOnReadOnlyDrive:
+			server->RequestImpL()->GetIsComponentOnReadOnlyDriveL(aMessage);
+			break;
+		case EGetIsComponentPresent:
+			server->RequestImpL()->GetIsComponentPresentL(aMessage);
+			break;
+		case ESetIsComponentPresent:
+			server->RequestImpL()->SetIsComponentPresentL(aMessage);
+			break;
+		case EGetComponentSupportedLocalesListSize:
+			server->RequestImpL()->GetComponentSupportedLocalesListSizeL(aMessage);
+			break;
+		case EGetComponentSupportedLocalesListData:
+			server->RequestImpL()->GetComponentSupportedLocalesListDataL(aMessage);
+			break;
+		case EGetLocalizedComponentSize:
+		    server->RequestImpL()->GetComponentLocalizedEntrySizeL(aMessage);
+		    break;
+		case EGetLocalizedComponentData:
+		    server->RequestImpL()->GetComponentLocalizedEntryDataL(aMessage);
+		    break;
+		case EAddApplicationEntry:
+		    server->RequestImpL()->AddApplicationEntryL(aMessage);
+		    break;
+		case EDeleteApplicationEntries:
+		    server->RequestImpL()->DeleteAllAppsWithinPackageL(aMessage);
+		    break;
+		case EDeleteApplicationEntry:
+		    server->RequestImpL()->DeleteApplicationEntryL(aMessage);
+		    break;
+        case EGetComponentIdForApp:
+            server->RequestImpL()->GetComponentIdForAppL(aMessage);
+            break;
+        case EGetAppUidsForComponentSize:
+            server->RequestImpL()->GetAppUidsForComponentSizeL(aMessage);
+            break;
+        case EGetAppUidsForComponentData:
+            server->RequestImpL()->GetAppUidsForComponentDataL(aMessage);
+            break;
+        case EGenerateNonNativeAppUid:
+            server->RequestImpL()->GenerateNonNativeAppUidL(aMessage);
+            break;
+        case EGetApplicationLaunchersSize:
+            server->RequestImpL()->GetApplicationLaunchersSizeL(aMessage);
+            break;
+        case EGetApplicationLaunchersData:
+            server->RequestImpL()->GetApplicationLaunchersDataL(aMessage);
+            break;          
+		    
+		default:
+			User::Leave(KErrNotSupported);
+			break;
+		}//End of switch.
+	
+	if(isImplicitTransaction)
+		{
+		MutatingOperationsPostambleL(*server);
+		CleanupStack::Pop(server);
+		}
+	
+	return ETrue;
+	}//End of function DoServiceL
+	
+
+void CScrSession::ApplySubsessionConstraintL(CScrServer& aServer)
+	{// Check whether or not write operation is allowed. if a subsession is in progress
+	 // a mutating operation is not allowed to make the subsession results consistent.
+	if(aServer.SubsessionCount() > 0)
+		{
+		DEBUG_PRINTF(_L8("Subsession in progress. Database write access was rejected!"));
+		User::Leave(KErrScrReadOperationInProgress);
+		}
+	}
+
+void CScrSession::ApplyTransactionConstraintL(CScrServer& aServer, TBool& aCreateImplicitTransaction)
+	{// Check whether a transaction is in progress and owned by this session.
+	 // A mutating operation is not allowed if the transaction owned by another session.
+	if(aServer.IsTransactionInProgress())
+		{// A transaction is already in progress, check if it is owned by this session.
+		if(!aServer.IsTransactionOwner(this))
+			{
+			DEBUG_PRINTF(_L8("Transaction in progress owned by another session. Database write access was rejected!"));
+			User::Leave(KErrScrWriteOperationInProgress);
+			}
+		aCreateImplicitTransaction = EFalse;
+		}
+	else if(aCreateImplicitTransaction)
+		{// No transaction is in progress. Start an implicit transaction to improve
+		 // the performance of mutating APIs. The implicit transaction must be
+		 // committed when the API request is completed successfully, or rolled back 
+		 // if a failure occurs while performing the request.
+		aServer.RequestImpL()->CreateTransactionL();
+		aServer.SetTransactionOwner(this);
+		}
+	}
+
+void CScrSession::MutatingOperationsPreambleL(CScrServer& aServer, TScrSessionFunction aFunction, TBool& aIsTransactionImplicit)
+	{
+	// In SCR server, there can be ONLY ONE active TRANSACTION. Concurrent and nested
+	// transactions are not supported. A transaction can committed/cancelled only by 
+	// its owning session. While a transaction in progress, other sessions can invoke
+	// query APIs, but not mutating APIs. Only the owning session can invoke APIs altering
+	// database data. Moreover, a reading session (subsession) cannot be created while a transaction
+	// is in progress unless the transaction is owned by this session. A transaction cannot be created if a reading subsession exits.
+
+	switch(aFunction)
+		{
+		case ECreateTransaction:
+			{
+			if(aServer.IsTransactionInProgress())
+				{// A new transaction cannot be started if there is another in progress
+				User::Leave(KErrScrWriteOperationInProgress);
+				}			
+			break;
+			}
+		case ERollbackTransaction:
+		case ECommitTransaction:
+			{
+			if(!aServer.IsTransactionOwner(this))
+				{
+				DEBUG_PRINTF(_L8("There is no active transaction owned by this session!"));
+				User::Leave(KErrScrNoActiveTransaction);
+				}
+			break;
+			}
+		case ESetComponentLocalizableProperty:
+		case ESetComponentNumericProperty:
+		case ESetComponentBinaryProperty:
+		case ESetFileStringProperty:
+		case ESetFileNumericProperty:
+		case ESetComponentName:
+		case ESetComponentVendor:
+		case ESetComponentVersion:
+		case ESetIsComponentRemovable:
+		case ESetIsComponentDrmProtected:
+		case ESetIsComponentHidden:
+		case ESetIsComponentKnownRevoked:
+		case ESetIsComponentOriginVerified:
+		case ESetComponentSize:
+		case EDeleteComponentProperty:
+		case EDeleteFileProperty:
+		case EAddComponentDependency:
+		case EDeleteComponentDependency:
+		case ESetIsComponentPresent:
+			{ 			
+			// These mutating operations consist of a single mutating database statement.
+			// So, no need to create an implicit transaction
+			TBool createImplicitTransaction = EFalse; 
+			ApplyTransactionConstraintL(aServer,createImplicitTransaction);
+			break;
+			}
+		case EAddComponent:
+		case ERegisterComponentFile:
+		case EUnregisterComponentFile:
+		case EDeleteComponent:
+		case EAddSoftwareType:
+		case EDeleteSoftwareType:
+		case EGetDeletedMimeTypes:
+		case EAddApplicationEntry:
+		case EDeleteApplicationEntries:
+		case EDeleteApplicationEntry:
+			{			
+			// These mutating operations consist of two or more mutating database statements.
+			// Therefore, an implicit transaction is begun if an explicit one doesn't exist.
+			TBool createImplicitTransaction = ETrue; 
+			ApplyTransactionConstraintL(aServer,createImplicitTransaction);
+			aIsTransactionImplicit = createImplicitTransaction;
+			break;
+			}
+		default:
+			// Other operations do NOT require write permission. Do nothing.
+			break;
+		}
+	}
+
+void CScrSession::MutatingOperationsPostambleL(CScrServer& aServer)
+	{
+	// This function is called to commit the implicit transaction opened for a specific mutating request.
+	aServer.RequestImpL()->CommitTransactionL();
+	aServer.SetTransactionOwner(NULL);
+	}
+
+CScsSubsession* CScrSession::DoCreateSubsessionL(TInt aFunction, const RMessage2& /*aMessage*/)
+/**
+	Override CScsSession::DoCreateSubsessionL by allocating a new SCR subsession object.
+
+	@param	aFunction		Function identifier without SCS code.
+	@param	aMessage		Standard server-side handle to message.	
+	@return					New, initialized instance of CScrSubsession, ownership is transferred.
+ */
+	{
+
+	TScrSessionFunction f = static_cast<TScrSessionFunction>(aFunction);
+    CScrServer *server = static_cast<CScrServer*>(&iServer);
+    
+	switch(f)
+		{
+	    // Allow read operation even if another transaction is in progress for these views.
+		case ESubSessCreateComponentsView:
+			return CComponentViewSubsession::NewL(*this);
+        case ESubSessCreateAppRegistryView:
+            return CAppRegistrySubsession::NewL(*this);
+		}
+		
+	 // A read operation is disallowed for the following views incase a transaction from another session 
+	 // is already in progress. 
+    if(server->IsTransactionInProgress() && !server->IsTransactionOwner(this)) 
+        {
+        DEBUG_PRINTF(_L8("Transaction from another session is in progress. Subsession cannot be created!"));
+        User::Leave(KErrScrWriteOperationInProgress);
+        }   
+    
+	switch(f)
+	    {  
+		case ESubSessCreateFileList:
+			return CFileListSubsession::NewL(*this);
+		case ESubSessCreateAppInfoView:
+		    return CAppInfoViewSubsession::NewL(*this);
+		case ESubSessCreateAppRegInfo:
+			return CApplicationRegInfoSubsession::NewL(*this);
+		case ESubSessCreateRegInfoForApp:
+		    return CRegInfoForApplicationSubsession::NewL(*this);
+		default:
+			User::Leave(KErrNotSupported);
+			/*lint -unreachable */
+			return 0;	// avoid compiler warning
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/server/scrsubsession.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,640 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements CScrSubsession. See class and function definitions for more information.
+*
+*/
+
+
+/**
+ @file
+*/
+
+#include "scrsubsession.h"
+#include "scrrequestimpl.h"
+#include "scrdatabase.h"
+#include <scs/ipcstream.h>
+#include <scs/cleanuputils.h>
+
+using namespace Usif;
+
+/////////////////
+// CScrSubsession
+/////////////////
+
+CScrSubsession::CScrSubsession(CScrSession &aSession)
+/**
+	This constructor is protected and prevents direct instantiation.
+ */
+	: CScsSubsession(aSession)
+	{
+	iSession = static_cast<CScrSession *>(&aSession);
+	iServer = static_cast<CScrServer *>(&iSession->iServer);
+	}
+
+void CScrSubsession::ConstructL()
+/**
+	Second-phase constructor.
+ */
+	{
+	iServer->AddSubsessionOwnerL(iSession);
+	}
+
+CScrSubsession::~CScrSubsession()
+/**
+ 	Virtual destructor. Closes the database session handle.
+ */
+	{
+	iServer->RemoveSubsessionOwner(iSession);
+	delete iStatement;
+	}
+	
+///////////////////////////
+// CCompViewSubsessionContext
+///////////////////////////	
+	
+CCompViewSubsessionContext::~CCompViewSubsessionContext()
+	{
+	delete iLastSoftwareTypeName;
+	iComponentFilterSuperset.Close();
+	}
+	
+///////////////////////////
+// CComponentViewSubsession
+///////////////////////////
+
+CComponentViewSubsession* CComponentViewSubsession::NewL(CScrSession &aSession)
+/**
+	Factory function allocates a new instance of CComponentViewSubsession.
+	
+	Note that CComponentViewSubsession derives from CObject and therefore it MUST NOT be deleted directly,
+	instead it should be closed.
+	 
+	@return					The newly created instance of CComponentViewSubsession.
+							Ownership is transferred to the caller.
+ */
+	{
+	CComponentViewSubsession* self = new(ELeave) CComponentViewSubsession(aSession);
+	CleanupClosePushL(*self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CComponentViewSubsession::CComponentViewSubsession(CScrSession &aSession)
+/**
+	This constructor is private and prevents direct instantiation. It provides
+	a single point of definition from which to call the superclass c'tor.
+ */
+	:	CScrSubsession(aSession)
+	{	
+	}
+
+void CComponentViewSubsession::ConstructL()
+/**
+	Second-phase constructor.
+ */
+	{
+	iSubsessionContext = new (ELeave) CCompViewSubsessionContext;		
+	CScrSubsession::ConstructL();
+	}
+
+CComponentViewSubsession::~CComponentViewSubsession()
+/**
+	Destructor for the subsession object.
+ */
+	{
+	delete iFilter;
+	delete iComponentEntry;
+	iComponentEntryList.ResetAndDestroy();
+	delete iSubsessionContext;
+	}
+
+TBool CComponentViewSubsession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
+/**
+	Implement CComponentViewSubsession by handling the supplied message.
+
+	@param	aFunction		Function identifier without SCS code.
+	@param	aMessage		Standard server-side handle to message.
+	@return ETrue means complete client request now. EFalse for asynchronous tasks.
+ */
+	{
+	TScrSubSessionFunction f = static_cast<TScrSubSessionFunction>(aFunction);
+	
+	switch (f)
+		{
+		case EOpenComponentsView:
+			{
+			DeleteObjectZ(iFilter);
+			iFilter = iServer->RequestImpL()->ReadComponentFilterL(aMessage);
+			DeleteObjectZ(iStatement);
+			iStatement = iServer->RequestImpL()->OpenComponentViewL(*iFilter, iSubsessionContext->iComponentFilterSuperset, iSubsessionContext->iFilterSupersetInUse);
+			break;
+			}
+		case EGetNextComponentSize:
+			iServer->RequestImpL()->NextComponentSizeL(aMessage, iStatement, iFilter, iComponentEntry, this->iSubsessionContext);
+			break;
+		case EGetNextComponentData:
+			iServer->RequestImpL()->NextComponentDataL(aMessage, iComponentEntry);
+			break;
+		case EGetNextComponentSetSize:
+			iServer->RequestImpL()->NextComponentSetSizeL(aMessage, iStatement, iFilter, iComponentEntryList, this->iSubsessionContext);
+			break;
+		case EGetNextComponentSetData:
+			iServer->RequestImpL()->NextComponentSetDataL(aMessage, iComponentEntryList);
+			break;
+		default:
+			User::Leave(KErrNotSupported);
+			break;
+		}
+	return ETrue;
+	}
+
+
+///////////////////////
+// CFileListSubsession
+///////////////////////
+
+CFileListSubsession* CFileListSubsession::NewL(CScrSession &aSession)
+/**
+	Factory function allocates a new instance of CFileListSubsession.
+	
+	Note that CFileListSubsession derives from CObject and therefore it MUST NOT be deleted directly,
+	instead it should be closed.
+	 
+	@return					The newly created instance of CFileListSubsession.
+							Ownership is transferred to the caller.
+ */
+	{
+	CFileListSubsession* self = new(ELeave) CFileListSubsession(aSession);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CFileListSubsession::CFileListSubsession(CScrSession &aSession)
+/**
+	This constructor is private and prevents direct instantiation. It provides
+	a single point of definition from which to call the superclass c'tor.
+ */
+	:	CScrSubsession(aSession)
+	{
+	// empty.
+	}
+
+CFileListSubsession::~CFileListSubsession()
+/**
+	Destructor for the subsession object.
+ */
+	{		
+	delete iFilePath;
+	iFileList.Close();
+	}
+
+TBool CFileListSubsession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
+/**
+	Implement CFileListSubsession by handling the supplied message.
+
+	@param	aFunction		Function identifier without SCS code.
+	@param	aMessage		Standard server-side handle to message.
+	@return ETrue means complete client request now. EFalse for asynchronous tasks.
+ */
+	{
+	TScrSessionFunction f = static_cast<TScrSessionFunction>(aFunction);
+	
+	switch (f)
+		{
+		case EOpenFileList:
+			{
+			DeleteObjectZ(iStatement);
+			iStatement = iServer->RequestImpL()->OpenFileListL(aMessage);
+			break;
+			}
+		case EGetNextFileSize:
+			iServer->RequestImpL()->NextFileSizeL(aMessage, iStatement, iFilePath);
+			break;
+		case EGetNextFileData:
+			iServer->RequestImpL()->NextFileDataL(aMessage, iFilePath);
+			break;
+		case EGetNextFileSetSize:
+			iServer->RequestImpL()->NextFileSetSizeL(aMessage, iStatement, iFileList);
+			break;
+		case EGetNextFileSetData:
+			iServer->RequestImpL()->NextFileSetDataL(aMessage, iFileList);
+			break;
+		default:
+			User::Leave(KErrNotSupported);
+			break;
+		}
+	return ETrue;
+	}
+
+//////////////////////////////
+///CCompViewSubsessionContext
+/////////////////////////////
+
+CAppInfoViewSubsessionContext::~CAppInfoViewSubsessionContext()
+    {
+    iApps.Close();
+    }
+
+/////////////////////////
+///CAppInfoViewSubsession
+////////////////////////
+
+CAppInfoViewSubsession* CAppInfoViewSubsession::NewL(CScrSession& aSession)
+    {
+    CAppInfoViewSubsession* self = new(ELeave) CAppInfoViewSubsession(aSession);
+    CleanupClosePushL(*self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+CAppInfoViewSubsession::CAppInfoViewSubsession(CScrSession &aSession) : CScrSubsession(aSession)
+    {   
+    }
+
+void CAppInfoViewSubsession::ConstructL()
+/**
+    Second-phase constructor.
+ */
+    {
+    iSubsessionContext = new (ELeave) CAppInfoViewSubsessionContext;       
+    CScrSubsession::ConstructL();
+    }
+
+CAppInfoViewSubsession::~CAppInfoViewSubsession()
+/**
+    Destructor for the subsession object.
+ */
+    {
+    delete iAppInfoFilter;   
+    if(NULL != iApaAppInfo)
+        delete iApaAppInfo;
+    delete iSubsessionContext;
+    }
+
+TBool CAppInfoViewSubsession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
+/**
+    Implement CFileListSubsession by handling the supplied message.
+
+    @param  aFunction       Function identifier without SCS code.
+    @param  aMessage        Standard server-side handle to message.
+    @return ETrue means complete client request now. EFalse for asynchronous tasks.
+ */
+    {
+    TScrSessionFunction f = static_cast<TScrSessionFunction>(aFunction);
+    
+    switch (f)
+        {
+        case EOpenAppInfoView:
+            {
+            DeleteObjectZ(iAppInfoFilter);
+            iAppInfoFilter = iServer->RequestImpL()->ReadAppInfoFilterL(aMessage);
+            DeleteObjectZ(iStatement);
+            iSubsessionContext->iLocale = TLanguage(aMessage.Int1());
+    
+            if(iSubsessionContext->iLocale == KUnspecifiedLocale)
+                {
+                iSubsessionContext->iLocale = User::Language();
+                }
+            iSubsessionContext->iAppInfoIndex = 0;
+            iServer->RequestImpL()->OpenAppInfoViewL(*iAppInfoFilter, this->iSubsessionContext);
+            break;
+            }
+        case EGetNextAppInfoSize:
+             iServer->RequestImpL()->NextAppInfoSizeL(aMessage, iApaAppInfo, this->iSubsessionContext);
+             break;
+        case EGetNextAppInfoData:
+             iServer->RequestImpL()->NextAppInfoDataL(aMessage, iApaAppInfo);
+             break;
+   
+        default:
+            User::Leave(KErrNotSupported);
+            break;
+        }
+    return ETrue;
+    }
+
+///////////////////////////////////////////
+///CApplicationRegInfoSubsessionContext
+//////////////////////////////////////////
+CApplicationRegInfoSubsessionContext::~CApplicationRegInfoSubsessionContext()
+    {
+    delete iAppServiceInfoFilter;   
+    iServiceInfoArray.ResetAndDestroy(); 
+    }
+
+/////////////////////////////////
+///CApplicationRegInfoSubsession
+////////////////////////////////
+CApplicationRegInfoSubsession* CApplicationRegInfoSubsession::NewL(CScrSession &aSession)
+/**
+    Factory function allocates a new instance of CAppInfoQuerySubsession.
+    
+    Note that CAppInfoQuerySubsession derives from CObject and therefore it MUST NOT be deleted directly,
+    instead it should be closed.
+     
+    @return                 The newly created instance of CAppInfoQuerySubsession.
+                            Ownership is transferred to the caller.
+ */
+    {
+    CApplicationRegInfoSubsession* self = new(ELeave) CApplicationRegInfoSubsession(aSession);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CApplicationRegInfoSubsession::CApplicationRegInfoSubsession(CScrSession &aSession)
+/**
+    This constructor is private and prevents direct instantiation. It provides
+    a single point of definition from which to call the superclass c'tor.
+ */
+    :   CScrSubsession(aSession)
+    {
+    // empty.
+    }
+
+void CApplicationRegInfoSubsession::ConstructL()
+/**
+    Second-phase constructor.
+ */
+    {
+    iSubsessionContext = new (ELeave) CApplicationRegInfoSubsessionContext;       
+    CScrSubsession::ConstructL();
+    }
+
+CApplicationRegInfoSubsession::~CApplicationRegInfoSubsession()
+/**
+    Destructor for the subsession object.
+ */
+    {       
+    delete iSubsessionContext;
+    }
+
+TBool CApplicationRegInfoSubsession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
+/**
+    Implement CAppInfoQuerySubsession by handling the supplied message.
+
+    @param  aFunction       Function identifier without SCS code.
+    @param  aMessage        Standard server-side handle to message.
+    @return ETrue means complete client request now. EFalse for asynchronous tasks.
+ */
+    {
+    TScrSessionFunction f = static_cast<TScrSessionFunction>(aFunction);
+    
+    switch (f)
+        {        
+        case EGetAppForDataTypeAndService:
+            iServer->RequestImpL()->GetAppForDataTypeAndServiceL(aMessage);
+            break;
+        case EGetAppForDataType:
+            iServer->RequestImpL()->GetAppForDataTypeL(aMessage);
+            break;                
+        case EGetAppServiceInfoSize:
+            iServer->RequestImpL()->GetAppServiceInfoSizeL(aMessage, this->iSubsessionContext);
+            break;
+        case EGetAppServiceInfoData:
+            iServer->RequestImpL()->GetAppServiceInfoDataL(aMessage, this->iSubsessionContext);
+            break;
+        case EGetApplicationInfo:
+            iServer->RequestImpL()->GetApplicationInfoL(aMessage);
+            break;
+        default:
+            User::Leave(KErrNotSupported);
+            break;
+        }
+    return ETrue;
+    }
+
+///////////////////////////////////////////
+///CRegInfoForApplicationSubsessionContext
+//////////////////////////////////////////
+CRegInfoForApplicationSubsessionContext::~CRegInfoForApplicationSubsessionContext()
+    {
+    iViewInfoArray.ResetAndDestroy(); 
+    iServiceUidList.Close(); 
+    iAppOwnedFiles.ResetAndDestroy();
+    }
+
+/////////////////////////////////////
+///CRegInfoForApplicationSubsession
+////////////////////////////////////
+CRegInfoForApplicationSubsession* CRegInfoForApplicationSubsession::NewL(CScrSession &aSession)
+/**
+    Factory function allocates a new instance of CAppInfoQueryContextSubsession.
+    
+    Note that CAppInfoQueryContextSubsession derives from CObject and therefore it MUST NOT be deleted directly,
+    instead it should be closed.
+     
+    @return                 The newly created instance of CAppInfoQueryContextSubsession.
+                            Ownership is transferred to the caller.
+ */
+    {
+    CRegInfoForApplicationSubsession* self = new(ELeave) CRegInfoForApplicationSubsession(aSession);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CRegInfoForApplicationSubsession::CRegInfoForApplicationSubsession(CScrSession &aSession)
+/**
+    This constructor is private and prevents direct instantiation. It provides
+    a single point of definition from which to call the superclass c'tor.
+ */
+    :   CScrSubsession(aSession)
+    {
+    // empty.
+    }
+
+void CRegInfoForApplicationSubsession::ConstructL()
+/**
+    Second-phase constructor.
+ */
+    {
+    iSubsessionContext = new (ELeave) CRegInfoForApplicationSubsessionContext;       
+    CScrSubsession::ConstructL();
+    }
+
+CRegInfoForApplicationSubsession::~CRegInfoForApplicationSubsession()
+/**
+    Destructor for the subsession object.
+ */
+    {   
+    delete iSubsessionContext;
+    }
+
+TBool CRegInfoForApplicationSubsession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
+/**
+    Implement CAppInfoQueryContextSubsession by handling the supplied message.
+
+    @param  aFunction       Function identifier without SCS code.
+    @param  aMessage        Standard server-side handle to message.
+    @return ETrue means complete client request now. EFalse for asynchronous tasks.
+ */
+    {
+    TScrSessionFunction f = static_cast<TScrSessionFunction>(aFunction);
+    
+    switch (f)
+        {        
+        case ESetAppUid:
+            {
+            TUid appUid = TUid::Uid(aMessage.Int0());
+            if(!(iServer->RequestImpL()->CheckIfAppUidExistsL(appUid)))
+                {
+                User::Leave(KErrNotFound);
+                }
+            iAppUid = appUid;
+            iServer->RequestImpL()->SetLocaleForRegInfoForApplicationSubsessionContextL(aMessage, this->iSubsessionContext);
+            break;
+            }
+        case EGetServiceUidSize:
+            iServer->RequestImpL()->GetServiceUidSizeL(aMessage,iAppUid, this->iSubsessionContext);
+            break;
+        case EGetServiceUidList:
+            iServer->RequestImpL()->GetServiceUidDataL(aMessage, this->iSubsessionContext);
+            break;
+        case EGetApplicationLanguage:
+            iServer->RequestImpL()->GetApplicationLanguageL(aMessage,this->iSubsessionContext);
+            break;
+        case EGetDefaultScreenNumber:
+            iServer->RequestImpL()->GetDefaultScreenNumberL(aMessage,iAppUid);           
+            break;
+        case EGetNumberOfOwnDefinedIcons:
+            iServer->RequestImpL()->GetNumberOfOwnDefinedIconsL(aMessage,iAppUid,this->iSubsessionContext);
+            break;   
+		case EGetViewSize:
+            iServer->RequestImpL()->GetViewSizeL(aMessage, iAppUid, this->iSubsessionContext);
+            break;
+        case EGetViewData:
+            iServer->RequestImpL()->GetViewDataL(aMessage, this->iSubsessionContext);
+            break;
+        case EGetAppOwnedFilesSize:
+            iServer->RequestImpL()->GetAppOwnedFilesSizeL(aMessage, iAppUid, this->iSubsessionContext);
+            break;
+        case EGetAppOwnedFilesData:
+            iServer->RequestImpL()->GetAppOwnedFilesDataL(aMessage, this->iSubsessionContext);
+            break;
+        case EGetAppCharacteristics:
+            iServer->RequestImpL()->GetAppCharacteristicsL(aMessage, iAppUid);
+            break;
+        case EGetAppIconForFileName:
+            iServer->RequestImpL()->GetAppIconForFileNameL(aMessage, iAppUid, this->iSubsessionContext);
+            break;
+        case EGetAppViewIconFileName:
+            iServer->RequestImpL()->GetAppViewIconFileNameL(aMessage, iAppUid, this->iSubsessionContext);
+            break;
+        default:
+            User::Leave(KErrNotSupported);
+            break;
+        }
+    return ETrue;
+    }
+
+
+////////////////////////////////////////////
+///CAppRegistrySubsessionContext
+///////////////////////////////////////////
+
+CAppRegistrySubsessionContext::~CAppRegistrySubsessionContext()
+    {
+    iAppUids.Close();
+    }
+
+////////////////////////////
+///CAppRegistrySubsession
+////////////////////////////
+
+CAppRegistrySubsession* CAppRegistrySubsession::NewL(CScrSession& aSession)
+    {
+    CAppRegistrySubsession* self = new(ELeave) CAppRegistrySubsession(aSession);
+    CleanupClosePushL(*self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+CAppRegistrySubsession::CAppRegistrySubsession(CScrSession &aSession)
+/**
+    This constructor is private and prevents direct instantiation. It provides
+    a single point of definition from which to call the superclass c'tor.
+ */
+    :   CScrSubsession(aSession)
+    {   
+    }
+
+void CAppRegistrySubsession::ConstructL()
+/**
+    Second-phase constructor.
+ */
+    {
+    iSubsessionContext = new (ELeave) CAppRegistrySubsessionContext;       
+    CScrSubsession::ConstructL();
+    }
+
+CAppRegistrySubsession::~CAppRegistrySubsession()
+/**
+    Destructor for the subsession object.
+ */
+    {
+    if(NULL != iApplicationRegistrationInfo)
+        delete iApplicationRegistrationInfo;
+    delete iSubsessionContext;
+    }
+
+TBool CAppRegistrySubsession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
+/**
+    Implement CFileListSubsession by handling the supplied message.
+
+    @param  aFunction       Function identifier without SCS code.
+    @param  aMessage        Standard server-side handle to message.
+    @return ETrue means complete client request now. EFalse for asynchronous tasks.
+ */
+    {
+    TScrSessionFunction f = static_cast<TScrSessionFunction>(aFunction);
+    
+    switch (f)
+        {
+        case EOpenApplicationRegistrationInfoView:
+            {
+            iSubsessionContext->iAppRegIndex = 0;
+            iSubsessionContext->iAppUids.Reset();
+            iServer->RequestImpL()->OpenApplicationRegistrationViewL(aMessage,this->iSubsessionContext);            
+            break;
+            }
+        case EGetApplicationRegistrationSize:
+             iServer->RequestImpL()->NextApplicationRegistrationInfoSizeL(aMessage, iApplicationRegistrationInfo, this->iSubsessionContext);
+             break;
+        case EGetApplicationRegistrationData:
+             iServer->RequestImpL()->NextApplicationRegistrationInfoDataL(aMessage, iApplicationRegistrationInfo);
+             break;
+        case EOpenApplicationRegistrationInfoForAppUidsView:
+            {
+            iSubsessionContext->iAppRegIndex = 0;
+            iSubsessionContext->iAppUids.Reset();
+            iServer->RequestImpL()->OpenApplicationRegistrationForAppUidsViewL(aMessage,this->iSubsessionContext);            
+            break;
+            }
+        default:
+            User::Leave(KErrNotSupported);
+            break;
+        }
+    return ETrue;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/server/startup.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Executable entrypoint and server object factory function. The latter
+* is supplied to the SCS boilerplate code which starts up the server.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "scrserver.h"
+
+using namespace Usif;
+
+static CScsServer* NewScrServerLC()
+/**
+	This factory function is called by SCS framework.  It allocates
+	the Scr Server object and leaves it on the cleanup stack.
+
+	@return		New initialized instance of CScrServer.
+				On return this is on the cleanup stack.
+ */
+	{
+	return Usif::CScrServer::NewLC();
+	}
+
+
+GLDEF_C TInt E32Main()
+/**
+	Executable entrypoint. Calls the SCS boilerplate code which starts the SCR server
+	and does not return until the server shuts down.
+
+	@return	Symbian OS error code where KErrNone indicates success 
+			and any other value indicates failure.
+ */
+	{
+	return StartScsServer(NewScrServerLC);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/group/tscr.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This is the project specification file for the Software Component Registry test harness
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @test
+*/
+
+TARGETTYPE EXE
+TARGET tscr.exe
+
+UID 0 0x10285BC9
+
+// ProtServ TrustedUI are used for scrdatabase testing
+CAPABILITY ProtServ ReadUserData WriteDeviceData TrustedUI AllFiles 
+
+SOURCEPATH 	../tscr/source
+
+SOURCE tscrserver.cpp 
+SOURCE tscrstep.cpp
+SOURCE componentmanagementsteps.cpp transactionmanagementsteps.cpp deletescrdbstep.cpp
+SOURCE componentquerysteps.cpp subsessionsteps.cpp sifsteps.cpp appmanagersteps.cpp
+SOURCE pluginmanagementsteps.cpp installloghistorysteps.cpp appreginfosteps.cpp
+
+SOURCEPATH 	../tscraccessor/source
+SOURCE tscraccessor_client.cpp
+
+USERINCLUDE ../tscr/inc
+USERINCLUDE	../../inc_private
+USERINCLUDE ../tscraccessor/inc
+USERINCLUDE	../../inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SMPSAFE
+
+LIBRARY euser.lib 
+LIBRARY efsrv.lib 
+LIBRARY testexecuteutils.lib
+LIBRARY testexecutelogclient.lib
+LIBRARY rfileloggerclient.lib
+LIBRARY scrdatabase.lib
+LIBRARY oomtestbase.lib
+LIBRARY scrclient.lib
+LIBRARY scsclient.lib
+LIBRARY sifutils.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/group/tscraccessor.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* tscraccessor.exe Accessor server to access SCR functionality requiring SWI Sid.
+*
+*/
+
+
+/**
+ @file
+*/
+
+target tscraccessor.exe
+targettype exe
+
+UID			0x1000007a 0x10202DCA
+VENDORID	0x70000001
+
+CAPABILITY TCB AllFiles
+
+USERINCLUDE ../tscraccessor/inc
+USERINCLUDE ../../inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+SOURCEPATH 	../tscraccessor/source
+
+SOURCE		tscraccessor_startup.cpp
+SOURCE		tscraccessor_server_session.cpp
+
+LIBRARY		euser.lib 
+LIBRARY		efsrv.lib
+LIBRARY		scrclient.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/group/tscrapparc.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This is the project specification file for the Software Component Registry test harness
+*
+*/
+
+/**
+ @file
+ @internalComponent
+ @test
+*/
+
+TARGETTYPE EXE
+TARGET tscrapparc.exe
+
+UID 0 0x10003A3F
+
+// ProtServ TrustedUI are used for scrdatabase testing
+CAPABILITY ProtServ TrustedUI
+
+SOURCEPATH 	../tscrapparc/source
+SOURCE tscrapparcserver.cpp appreginfoapparcsteps.cpp
+
+USERINCLUDE ../tscr/inc
+USERINCLUDE ../tscrapparc/inc
+USERINCLUDE	../../inc_private
+USERINCLUDE	../../inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+SMPSAFE
+
+LIBRARY euser.lib 
+LIBRARY efsrv.lib 
+LIBRARY testexecuteutils.lib
+LIBRARY testexecutelogclient.lib
+LIBRARY rfileloggerclient.lib
+LIBRARY scrdatabase.lib
+LIBRARY oomtestbase.lib
+LIBRARY scrclient.lib
+LIBRARY scsclient.lib
+LIBRARY bafl.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/group/tscrdatalayer.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This is the project specification file for the Software Component Registry test harness
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @test
+*/
+
+TARGETTYPE EXE
+TARGET tscrdatalayer.exe
+
+UID 0 0x1028634C
+
+// ProtServ is used for scrdatabase testing
+// AllFiles is needed for creating the SCR DB
+CAPABILITY ProtServ
+
+SOURCEPATH 	../tscrdatalayer/source
+
+SOURCE datalayersteps.cpp tscrdatalayer.cpp
+
+USERINCLUDE ../tscrdatalayer/inc
+USERINCLUDE	../../inc_private
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+
+LIBRARY euser.lib 
+LIBRARY efsrv.lib 
+LIBRARY testexecuteutils.lib
+LIBRARY testexecutelogclient.lib
+LIBRARY rfileloggerclient.lib
+LIBRARY scrdatabase.lib
+LIBRARY oomtestbase.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/testdb/create_db.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<!DOCTYPE CreateDatabase [
+<!ELEMENT CreateDatabase (SQLQuery+)>
+<!ELEMENT SQLQuery (#PCDATA)>	
+]>
+<!-- Creation of database for SCR--> 
+
+<CreateDatabase>
+	<SQLQuery>CREATE TABLE SoftwareTypeNames(NameId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeId INTEGER NOT NULL,Locale INTEGER DEFAULT 0,Name TEXT NOT NULL);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_SoftwareTypeNames_SoftwareTypeId ON SoftwareTypeNames(SoftwareTypeId);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_SoftwareTypeNames_Name ON SoftwareTypeNames(Name);</SQLQuery>
+	<SQLQuery>CREATE TABLE SoftwareTypes(SoftwareTypeId INTEGER PRIMARY KEY NOT NULL,SifPluginUid INTEGER,LauncherExecutable TEXT DEFAULT '');</SQLQuery>
+	<SQLQuery>CREATE TABLE CustomAccessList(AccessId INTEGER PRIMARY KEY AUTOINCREMENT,SoftwareTypeId INTEGER NOT NULL,SecureId INTEGER NOT NULL,AccessMode INTEGER DEFAULT 0);</SQLQuery>
+	<SQLQuery>CREATE TABLE MimeTypes(MimeTypeId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeId INTEGER NOT NULL,MimeType TEXT NOT NULL UNIQUE COLLATE NOCASE);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_MimeTypes_SoftwareTypeId ON MimeTypes(SoftwareTypeId);</SQLQuery>
+	<SQLQuery>CREATE TABLE Components(ComponentId INTEGER PRIMARY KEY AUTOINCREMENT,SoftwareTypeId INTEGER NOT NULL,SoftwareTypeName TEXT NOT NULL,Size INTEGER DEFAULT 0,Removable BOOLEAN DEFAULT 1,ScomoState INTEGER DEFAULT 0,DRMProtected INTEGER DEFAULT 0,Hidden INTEGER DEFAULT 0,KnownRevoked INTEGER DEFAULT 0,OriginVerified INTEGER DEFAULT 0,InstalledDrives INTEGER DEFAULT 0,GlobalIdHash INTEGER DEFAULT 0,GlobalId TEXT UNIQUE,Version TEXT,InstallTime TEXT NOT NULL,CompPresence BOOLEAN DEFAULT 1);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_Components_SoftwareTypeId ON Components(SoftwareTypeId);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_Components_GlobalIdIdHash ON Components(GlobalIdHash);</SQLQuery>
+	<SQLQuery>CREATE TABLE ComponentLocalizables(CompLocalId INTEGER PRIMARY KEY AUTOINCREMENT, ComponentId INTEGER DEFAULT 0,Locale INTEGER DEFAULT 0,Name TEXT NOT NULL,Vendor TEXT);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ComponentLocalizables_ComponentId ON ComponentLocalizables(ComponentId);</SQLQuery>
+	<SQLQuery>CREATE TABLE ComponentDependencies(GlobalIdHash INTEGER PRIMARY KEY NOT NULL,DependantGlobalIdHash INTEGER NOT NULL, SupplierGlobalIdHash INTEGER NOT NULL, DependantGlobalId TEXT NOT NULL,SupplierGlobalId TEXT NOT NULL,VersionFrom TEXT, VersionTo TEXT);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ComponentDependencies_DependantGlobalId ON ComponentDependencies(DependantGlobalIdHash);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ComponentDependencies_SupplierGlobalId ON ComponentDependencies(SupplierGlobalIdHash);</SQLQuery>
+	<SQLQuery>CREATE TABLE ComponentsFiles(CmpFileId INTEGER PRIMARY KEY NOT NULL,ComponentId INTEGER NOT NULL,LocationHash INTEGER DEFAULT 0,Location TEXT NOT NULL COLLATE NOCASE);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ComponentsFiles_ComponentId ON ComponentsFiles(ComponentId);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ComponentsFiles_LocationHash ON ComponentsFiles(LocationHash);</SQLQuery>
+	<SQLQuery>CREATE TABLE ComponentProperties(PropertyId INTEGER PRIMARY KEY NOT NULL,Name TEXT NOT NULL COLLATE NOCASE,Locale INTEGER DEFAULT 0,ComponentId INTEGER NOT NULL,IntValue INTEGER,StrValue TEXT,IsStr8Bit BOOLEAN DEFAULT 0);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ComponentProperties_Name ON ComponentProperties(Name);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ComponentProperties_ComponentId ON ComponentProperties(ComponentId);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ComponentProperties_IntValue ON ComponentProperties(IntValue);</SQLQuery>
+	<SQLQuery>CREATE TABLE FileProperties(PropertyId INTEGER PRIMARY KEY NOT NULL,Name TEXT NOT NULL COLLATE NOCASE,CmpFileId INTEGER NOT NULL,IntValue INTEGER,StrValue TEXT, Locale INTEGER DEFAULT 0,IsStr8Bit BOOLEAN DEFAULT 0);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_FileProperties_Name ON FileProperties(Name);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_FileProperties_CmpFileId ON FileProperties(CmpFileId);</SQLQuery>
+	<SQLQuery>CREATE TABLE ScrVersion(MajorVersion INTEGER NOT NULL, MinorVersion INTEGER NOT NULL, BuildNumber INTEGER NOT NULL);</SQLQuery>
+	<SQLQuery>INSERT INTO ScrVersion(MajorVersion, MinorVersion, BuildNumber) VALUES(1, 1, 1);</SQLQuery>
+	<SQLQuery>CREATE TABLE AppRegistrationInfo(AppUid INTEGER PRIMARY KEY NOT NULL,ComponentId INTEGER DEFAULT 0,AppFile TEXT COLLATE NOCASE UNIQUE NOT NULL,TypeId INTEGER NOT NULL,Attributes INTEGER DEFAULT 0,Hidden INTEGER DEFAULT 0,Embeddable INTEGER DEFAULT 0,NewFile INTEGER DEFAULT 0,Launch INTEGER DEFAULT 0,GroupName TEXT COLLATE NOCASE,DefaultScreenNumber INTEGER DEFAULT 0);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_AppRegistrationInfo_AppFile ON AppRegistrationInfo(AppFile);</SQLQuery>
+	<SQLQuery>CREATE TABLE FileOwnershipInfo(FileOwnerInfoId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,FileName TEXT NOT NULL COLLATE NOCASE);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_FileOwnershipInfo_AppUid ON FileOwnershipInfo(AppUid);</SQLQuery>
+	<SQLQuery>CREATE TABLE ServiceInfo(ServiceId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,Uid INTEGER DEFAULT 0);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ServiceInfo_AppUid ON ServiceInfo(AppUid);</SQLQuery>
+	<SQLQuery>CREATE TABLE DataType(DataTypeId INTEGER PRIMARY KEY AUTOINCREMENT,ServiceId INTEGER NOT NULL,Priority INTEGER NOT NULL,Type TEXT NOT NULL COLLATE NOCASE);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_DataType_ServiceId ON DataType(ServiceId);</SQLQuery>
+	<SQLQuery>CREATE TABLE LocalizableAppInfo(LocalAppInfoId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,ShortCaption TEXT COLLATE NOCASE,GroupName TEXT COLLATE NOCASE,Locale INTEGER DEFAULT 0,CaptionAndIconId INTEGER,CONSTRAINT U_AppUid_Locale UNIQUE (AppUid,Locale));</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_LocalizableAppInfo ON LocalizableAppInfo(AppUid,Locale);</SQLQuery>
+	<SQLQuery>CREATE TABLE ViewData(ViewId INTEGER PRIMARY KEY AUTOINCREMENT,LocalAppInfoId INTEGER NOT NULL,Uid INTEGER NOT NULL,ScreenMode INTEGER DEFAULT 0,CaptionAndIconId INTEGER);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ViewData_LocalAppInfoId ON ViewData(LocalAppInfoId);</SQLQuery>
+	<SQLQuery>CREATE TABLE CaptionAndIconInfo(CaptionAndIconId INTEGER PRIMARY KEY AUTOINCREMENT,Caption TEXT COLLATE NOCASE,NumberOfIcons INTEGER DEFAULT 0,IconFile TEXT COLLATE NOCASE);</SQLQuery>
+	<SQLQuery>CREATE TABLE AppProperties(PropertyId INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT NOT NULL COLLATE NOCASE,Locale INTEGER DEFAULT 0,AppUid INTEGER NOT NULL,ServiceUid INTEGER DEFAULT 0,IntValue INTEGER,StrValue TEXT,IsStr8Bit BOOLEAN DEFAULT 0,CONSTRAINT U_AppUid_Locale_Name UNIQUE (AppUid,ServiceUid,Locale,Name));</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_AppProperties_AppUid ON AppProperties(AppUid);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_AppProperties_Name ON AppProperties(Name);</SQLQuery>
+</CreateDatabase>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/testdb/modifydb.sql	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+BEGIN TRANSACTION CreateScrDatabase;
+--Old Schema
+--SoftwareTypes(SoftwareTypeId,SifPluginUid,InstallerSecureId,ExecutionLayerSecureId)
+--New Schema
+--SoftwareTypes(SoftwareTypeId,SifPluginUid,LauncherExecutable)
+--CustomAccessList(AccessId,SoftwareTypeId,SecureId,AccessMode)
+CREATE TABLE Temp(SoftwareTypeId INTEGER PRIMARY KEY NOT NULL,SifPluginUid INTEGER,LauncherExecutable TEXT DEFAULT 'SomeData');
+INSERT INTO Temp(SoftwareTypeId,SifPluginUid) SELECT SoftwareTypeId,SifPluginUid FROM SoftwareTypes;
+CREATE TABLE CustomAccessList(AccessId INTEGER PRIMARY KEY AUTOINCREMENT,SoftwareTypeId INTEGER NOT NULL,SecureId INTEGER NOT NULL,AccessMode INTEGER DEFAULT 1);
+INSERT INTO CustomAccessList(SoftwareTypeId,SecureId) SELECT SoftwareTypeId,InstallerSecureId FROM SoftwareTypes;
+INSERT INTO CustomAccessList(SoftwareTypeId,SecureId) SELECT SoftwareTypeId,ExecutionLayerSecureId FROM SoftwareTypes;
+DROP TABLE SoftwareTypes;
+ALTER TABLE Temp RENAME TO SoftwareTypes;
+END TRANSACTION CreateScrDatabase;
Binary file installationservices/swcomponentregistry/test/testdb/scr.db has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/testdb/scrdbschema.sql	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+BEGIN TRANSACTION CreateScrDatabase;
+CREATE TABLE SoftwareTypeNames(NameId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeId INTEGER NOT NULL,Locale INTEGER DEFAULT 0,Name TEXT NOT NULL);
+CREATE INDEX idx_SoftwareTypeNames_SoftwareTypeId ON SoftwareTypeNames(SoftwareTypeId);
+CREATE INDEX idx_SoftwareTypeNames_Name ON SoftwareTypeNames(Name);
+CREATE TABLE SoftwareTypes(SoftwareTypeId INTEGER PRIMARY KEY NOT NULL,SifPluginUid INTEGER,LauncherExecutable TEXT);
+CREATE TABLE CustomAccessList(AccessId INTEGER PRIMARY KEY AUTOINCREMENT,SoftwareTypeId INTEGER NOT NULL,SecureId INTEGER NOT NULL,AccessMode INTEGER DEFAULT 0);
+CREATE TABLE MimeTypes(MimeTypeId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeId INTEGER NOT NULL,MimeType TEXT NOT NULL UNIQUE COLLATE NOCASE);
+CREATE INDEX idx_MimeTypes_SoftwareTypeId ON MimeTypes(SoftwareTypeId);
+CREATE TABLE Components(ComponentId INTEGER PRIMARY KEY AUTOINCREMENT,SoftwareTypeId INTEGER NOT NULL,SoftwareTypeName TEXT NOT NULL,Size INTEGER DEFAULT 0,Removable BOOLEAN DEFAULT 1,ScomoState INTEGER DEFAULT 0,DRMProtected INTEGER DEFAULT 0,Hidden INTEGER DEFAULT 0,KnownRevoked INTEGER DEFAULT 0,OriginVerified INTEGER DEFAULT 0,InstalledDrives INTEGER DEFAULT 0,GlobalIdHash INTEGER DEFAULT 0,GlobalId TEXT UNIQUE,Version TEXT,InstallTime TEXT NOT NULL,CompPresence BOOLEAN DEFAULT 1);
+CREATE INDEX idx_Components_SoftwareTypeId ON Components(SoftwareTypeId);
+CREATE INDEX idx_Components_GlobalIdIdHash ON Components(GlobalIdHash);
+CREATE TABLE ComponentLocalizables(CompLocalId INTEGER PRIMARY KEY AUTOINCREMENT, ComponentId INTEGER DEFAULT 0,Locale INTEGER DEFAULT 0,Name TEXT NOT NULL,Vendor TEXT);
+CREATE INDEX idx_ComponentLocalizables_ComponentId ON ComponentLocalizables(ComponentId);
+CREATE TABLE ComponentDependencies(GlobalIdHash INTEGER PRIMARY KEY NOT NULL,DependantGlobalIdHash INTEGER NOT NULL, SupplierGlobalIdHash INTEGER NOT NULL, DependantGlobalId TEXT NOT NULL,SupplierGlobalId TEXT NOT NULL,VersionFrom TEXT, VersionTo TEXT);
+CREATE INDEX idx_ComponentDependencies_DependantGlobalId ON ComponentDependencies(DependantGlobalIdHash);
+CREATE INDEX idx_ComponentDependencies_SupplierGlobalId ON ComponentDependencies(SupplierGlobalIdHash);
+CREATE TABLE ComponentsFiles(CmpFileId INTEGER PRIMARY KEY NOT NULL,ComponentId INTEGER NOT NULL,LocationHash INTEGER DEFAULT 0,Location TEXT NOT NULL COLLATE NOCASE);
+CREATE INDEX idx_ComponentsFiles_ComponentId ON ComponentsFiles(ComponentId);
+CREATE INDEX idx_ComponentsFiles_LocationHash ON ComponentsFiles(LocationHash);
+CREATE TABLE ComponentProperties(PropertyId INTEGER PRIMARY KEY NOT NULL,Name TEXT NOT NULL COLLATE NOCASE,Locale INTEGER DEFAULT 0,ComponentId INTEGER NOT NULL,IntValue INTEGER,StrValue TEXT,IsStr8Bit BOOLEAN DEFAULT 0);
+CREATE INDEX idx_ComponentProperties_Name ON ComponentProperties(Name);
+CREATE INDEX idx_ComponentProperties_ComponentId ON ComponentProperties(ComponentId);
+CREATE INDEX idx_ComponentProperties_IntValue ON ComponentProperties(IntValue);
+CREATE TABLE FileProperties(PropertyId INTEGER PRIMARY KEY NOT NULL,Name TEXT NOT NULL COLLATE NOCASE,CmpFileId INTEGER NOT NULL,IntValue INTEGER,StrValue TEXT, Locale INTEGER DEFAULT 0,IsStr8Bit BOOLEAN DEFAULT 0);
+CREATE INDEX idx_FileProperties_Name ON FileProperties(Name);
+CREATE INDEX idx_FileProperties_CmpFileId ON FileProperties(CmpFileId);
+CREATE TABLE ScrVersion(MajorVersion INTEGER NOT NULL, MinorVersion INTEGER NOT NULL, BuildNumber INTEGER NOT NULL);
+INSERT INTO ScrVersion(MajorVersion, MinorVersion, BuildNumber) VALUES(1, 1, 1);
+CREATE TABLE AppRegistrationInfo(AppUid INTEGER PRIMARY KEY NOT NULL,ComponentId INTEGER DEFAULT 0,AppFile TEXT COLLATE NOCASE UNIQUE NOT NULL,TypeId INTEGER NOT NULL,Attributes INTEGER DEFAULT 0,Hidden INTEGER DEFAULT 0,Embeddable INTEGER DEFAULT 0,NewFile INTEGER DEFAULT 0,Launch INTEGER DEFAULT 0,GroupName TEXT COLLATE NOCASE,DefaultScreenNumber INTEGER DEFAULT 0);
+CREATE INDEX idx_AppRegistrationInfo_AppFile ON AppRegistrationInfo(AppFile);
+CREATE TABLE FileOwnershipInfo(FileOwnerInfoId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,FileName TEXT NOT NULL COLLATE NOCASE);
+CREATE INDEX idx_FileOwnershipInfo_AppUid ON FileOwnershipInfo(AppUid);
+CREATE TABLE ServiceInfo(ServiceId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,Uid INTEGER DEFAULT 0);
+CREATE INDEX idx_ServiceInfo_AppUid ON ServiceInfo(AppUid);
+CREATE TABLE DataType(DataTypeId INTEGER PRIMARY KEY AUTOINCREMENT,ServiceId INTEGER NOT NULL,Priority INTEGER NOT NULL,Type TEXT NOT NULL COLLATE NOCASE);
+CREATE INDEX idx_DataType_ServiceId ON DataType(ServiceId);
+CREATE TABLE LocalizableAppInfo(LocalAppInfoId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,ShortCaption TEXT COLLATE NOCASE,GroupName TEXT COLLATE NOCASE,Locale INTEGER DEFAULT 0,CaptionAndIconId INTEGER,CONSTRAINT U_AppUid_Locale UNIQUE (AppUid,Locale));
+CREATE INDEX idx_LocalizableAppInfo ON LocalizableAppInfo(AppUid,Locale);
+CREATE TABLE ViewData(ViewId INTEGER PRIMARY KEY AUTOINCREMENT,LocalAppInfoId INTEGER NOT NULL,Uid INTEGER NOT NULL,ScreenMode INTEGER DEFAULT 0,CaptionAndIconId INTEGER);
+CREATE INDEX idx_ViewData_LocalAppInfoId ON ViewData(LocalAppInfoId);
+CREATE TABLE CaptionAndIconInfo(CaptionAndIconId INTEGER PRIMARY KEY AUTOINCREMENT,Caption TEXT COLLATE NOCASE,NumberOfIcons INTEGER DEFAULT 0,IconFile TEXT COLLATE NOCASE);
+CREATE TABLE AppProperties(PropertyId INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT NOT NULL COLLATE NOCASE,Locale INTEGER DEFAULT 0,AppUid INTEGER NOT NULL,ServiceUid INTEGER DEFAULT 0,IntValue INTEGER,StrValue TEXT,IsStr8Bit BOOLEAN DEFAULT 0,CONSTRAINT U_AppUid_Locale_Name UNIQUE (AppUid,ServiceUid,Locale,Name));
+CREATE INDEX idx_AppProperties_AppUid ON AppProperties(AppUid);
+CREATE INDEX idx_AppProperties_Name ON AppProperties(Name);
+END TRANSACTION CreateScrDatabase;
Binary file installationservices/swcomponentregistry/test/testdb/update_db.dtd has changed
Binary file installationservices/swcomponentregistry/test/testdb/update_db_production.xml has changed
Binary file installationservices/swcomponentregistry/test/testdb/update_db_test.xml has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/appmanagersteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines test steps for application manager related interface in the Software Component Registry
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef APPMANAGERSTEPS_H
+#define APPMANAGERSTEPS_H
+
+#include "tscrstep.h"
+class CScrTestServer;
+
+_LIT(KScrIsMediaPresentStep, "SCRIsMediaPresent");
+_LIT(KScrIsComponentOrphaned, "SCRIsComponentOrphaned");
+_LIT(KScrCompareVersions, "SCRCompareVersions");
+_LIT(KScrIsComponentOnReadOnlyDrive, "SCRIsComponentOnReadOnlyDrive");
+_LIT(KScrComponentPresence, "ScrComponentPresence");
+_LIT(KScrComponentOnEMMC, "ScrComponentOnEMMC");
+_LIT(KScrComponentPresentForNameVendor, "ScrComponentPresentForNameVendor");
+
+class CScrIsMediaPresentStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR IsMediaPresent interface
+ */
+	{
+public:
+	CScrIsMediaPresentStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+	};
+
+class CScrIsComponentOrphanedStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR IsComponentOrphanedL interface
+ */
+	{
+public:
+	CScrIsComponentOrphanedStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+	};
+
+class CScrCompareVersionsStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR CompareVersionsL interface
+ */
+	{
+public:
+	CScrCompareVersionsStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+	};
+
+class CScrIsComponentOnReadOnlyDriveStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR IsComponentOnReadOnlyDriveL interface
+ */
+	{
+public:
+	CScrIsComponentOnReadOnlyDriveStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+	};
+
+class CScrComponentPresenceStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR IsComponentPresentL interface
+ */
+	{
+public:
+	CScrComponentPresenceStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+	};
+
+class CScrEMMCComponentStep : public CScrTestStep
+/**
+    TEF test step which checks if any components are present on EMMC
+ */
+    {
+public:
+    CScrEMMCComponentStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();      
+    };
+
+class CScrComponentPresentForNameVendorStep : public CScrTestStep
+/**
+    TEF test step which checks if any components are present with the given name and vendor
+ */
+    {
+public:
+    CScrComponentPresentForNameVendorStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();      
+    };
+#endif /* APPMANAGERSTEPS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/appreginfosteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,327 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines test steps for component management APIs in the SCR
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef APPREGINFOSTEPS_H
+#define APPREGINFOSTEPS_H
+
+#include "tscrstep.h"
+#include <usif/scr/appregentries.h>
+class CScrTestServer;
+
+_LIT(KScrAddApplicationEntry, "SCRAddApplicationEntry");
+_LIT(KScrDeleteApplicationEntry, "SCRDeleteApplicationEntry");
+_LIT(KSCRGetAppServicesUids,"SCRGetAppServicesUids");
+_LIT(KSCRGetAppForDataType,"SCRGetAppForDataType");
+_LIT(KSCRGetAppForDataTypeAndService,"SCRGetAppForDataTypeAndService");
+_LIT(KSCRGetDefaultScreenNumber,"SCRGetDefaultScreenNumber");
+_LIT(KSCRGetNumberOfDefinedIcons,"SCRGetNumberOfDefinedIcons");
+_LIT(KSCRGetApplicationLanguage,"SCRGetApplicationLanguage");
+_LIT(KScrGetAppOwnedFilesEntry, "SCRGetAppOwnedFilesEntry");
+_LIT(KScrGetAppCapabilityEntry, "SCRGetAppCapabilityEntry");
+_LIT(KScrGetAppIconEntry, "SCRGetAppIconEntry");
+_LIT(KScrGetAppViewIconEntry, "SCRGetAppViewIconEntry");
+_LIT(KScrGetAppViewInfoStep,"ScrGetAppViewInfo");
+_LIT(KScrGetAppServiceInfoStep,"ScrGetAppServiceInfo");
+_LIT(KScrGetComponentIdForAppStep,"ScrGetComponentIdForApp");
+_LIT(KScrGetAppUidsForComponentStep,"ScrGetAppUidsForComponent");
+_LIT(KScrAddConcurrentApplicationEntryStep,"ScrAddConcurrentApplicationEntry");
+_LIT(KScrGetAppInfoStep,"ScrGetAppInfo");
+
+class CScrAddApplicationEntryStep : public CScrTestStep
+/**
+    TEF test step which exercises the SCR AddApplicationEntryL interface
+ */
+    {
+public:
+    CScrAddApplicationEntryStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };
+
+class CScrDeleteApplicationEntriesStep : public CScrTestStep
+/**
+    TEF test step which exercises the SCR DeleteApplicationEntriesL interface
+ */
+    {
+public:
+    CScrDeleteApplicationEntriesStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };
+
+class CSCRGetAppServicesUids : public CScrTestStep
+/**
+ * TEF test step which exercises the RRegistrationInfoForApplication::GetAppServicesUidsL interface
+ */
+    {
+public:
+    CSCRGetAppServicesUids(CScrTestServer& aParent);
+            
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };  
+
+class CSCRGetAppForDataType : public CScrTestStep
+/**
+ * TEF test step which exercises the RApplicationRegistrationInfo::GetAppForDataTypeL interface
+ */
+    {
+public:
+    CSCRGetAppForDataType(CScrTestServer& aParent);
+           
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };  
+
+class CSCRGetAppForDataTypeAndService : public CScrTestStep
+/**
+ * TEF test step which exercises the TEF test step which exercises the RApplicationRegistrationInfo::GetAppForDataTypeL interface
+ */
+    {
+public:
+    CSCRGetAppForDataTypeAndService(CScrTestServer& aParent);
+           
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    
+private:
+    };  
+
+class CSCRGetDefaultScreenNumber : public CScrTestStep
+/**
+ * TEF test step which exercises the TEF test step which exercises the RRegistrationInfoForApplication::GetDefaultScreenNumberL interface
+ */
+    {
+public:
+    CSCRGetDefaultScreenNumber(CScrTestServer& aParent);
+           
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };  
+
+class CSCRGetNumberOfDefinedIcons : public CScrTestStep
+/**
+ * TEF test step which exercises the TEF test step which exercises the RRegistrationInfoForApplication::GetNumberOfOwnDefinedIconsL interface
+ */
+	{
+public:
+    CSCRGetNumberOfDefinedIcons(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};	
+
+class CSCRGetApplicationLanguage : public CScrTestStep
+/**
+ * TEF test step which exercises the TEF test step which exercises the RRegistrationInfoForApplication::GetApplicationLanguageL interface
+ */
+    {
+public:
+    CSCRGetApplicationLanguage(CScrTestServer& aParent);
+            
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };  
+
+class CScrGetAppOwnedFilesEntryStep : public CScrTestStep
+/**
+    TEF test step which exercises the RRegistrationInfoForApplication::GetAppOwnedFiles interface
+ */
+    {
+public:
+    CScrGetAppOwnedFilesEntryStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+
+private:
+    TBool CompareAppOwnedFileNamesL(RPointerArray<HBufC>& aExpetedValue,RPointerArray<HBufC>& aActualValue);
+    };
+
+class CScrGetAppCharacteristicsEntryStep : public CScrTestStep
+/**
+    TEF test step which exercises the RRegistrationInfoForApplication::GetAppCharacteristics interface
+ */
+    {
+public:
+    CScrGetAppCharacteristicsEntryStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };
+
+class CScrGetAppIconEntryStep : public CScrTestStep
+/**
+    TEF test step which exercises the RRegistrationInfoForApplication::GetAppIcon interface
+ */
+    {
+public:
+    CScrGetAppIconEntryStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+   };
+
+class CScrGetAppViewIconEntryStep : public CScrTestStep
+/**
+    TEF test step which exercises the RRegistrationInfoForApplication::GetAppViewIcon interface
+ */
+    {
+public:
+    CScrGetAppViewIconEntryStep(CScrTestServer& aParent);
+  
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+   };
+
+class CScrGetAppViewsStep : public CScrTestStep
+/**
+    TEF test step which exercises the RRegistrationInfoForApplication::GetAppViewsL interface
+ */
+    {
+public:
+    CScrGetAppViewsStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };
+
+class CScrGetAppServiceInfoStep : public CScrTestStep
+/**
+    TEF test step which exercises the RApplicationRegistrationInfo::GetServiceInfoL interface
+ */
+    {
+public:
+    CScrGetAppServiceInfoStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };
+
+class CScrGetComponentIdForApp : public CScrTestStep
+/**
+    TEF test step which exercises the SCR GetComponentIdForAppL interface
+ */
+    {
+public:
+    CScrGetComponentIdForApp(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };
+
+class CScrGetAppUidsForComponent : public CScrTestStep
+/**
+    TEF test step which exercises the SCR ScrGetAppUidsForComponentL interface
+ */
+    {
+public:
+    CScrGetAppUidsForComponent(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };
+class CScrAddConcurrentApplicationEntryStep : public CScrTestStep
+/**
+    TEF test step which exercises the SCR AddConcurrentApplicationEntryStep interface
+ */
+    {
+public:
+    CScrAddConcurrentApplicationEntryStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };
+
+class CScrGetAppInfoStep : public CScrTestStep
+/**
+    TEF test step which exercises the RApplicationRegistrationInfo::GetAppInfoL interface
+ */
+    {
+public:
+    CScrGetAppInfoStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };
+
+
+#endif /* APPREGINFOSTEPS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/componentmanagementsteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,245 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines test steps for component management APIs in the SCR
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef COMPONENTMANAGEMENTSTEPS_H
+#define COMPONENTMANAGEMENTSTEPS_H
+
+#include "tscrstep.h"
+class CScrTestServer;
+
+_LIT(KScrAddComponentStep, "SCRAddComponent");
+_LIT(KScrSetComponentPropertyStep, "SCRSetComponentProperty");
+_LIT(KScrRegisterFileStep, "SCRRegisterFile");
+_LIT(KScrAddFilePropertyStep, "SCRAddFileProperty");
+_LIT(KScrSetCommonPropertyStep, "SCRSetCommonProperty");
+_LIT(KScrDeleteComponentPropertyStep, "SCRDeleteComponentProperty");
+_LIT(KScrDeleteFilePropertyStep, "SCRDeleteFileProperty");
+_LIT(KScrUnregisterFileStep, "SCRUnregisterFile");
+_LIT(KScrDeleteComponentStep, "SCRDeleteComponent");
+_LIT(KScrDeleteAllComponentsStep, "SCRDeleteAllComponents");
+_LIT(KScrInstallComponentStep, "SCRInstallComponent");
+_LIT(KScrAddComponentDependencyStep, "SCRAddComponentDependency");
+_LIT(KScrDeleteComponentDependencyStep, "SCRDeleteComponentDependency");
+
+class CScrAddComponentStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR AddComponent interface
+ */
+	{
+public:
+	CScrAddComponentStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	
+private:
+	Usif::TComponentId AddLocalisableComponentL();	
+	void VerifyComponentLocalizablesL(Usif::TComponentId aComponentId);		
+	};
+
+class CScrSetComponentPropertyStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR SetComponentProperty interface.
+ */
+	{
+public:
+	CScrSetComponentPropertyStep(CScrTestServer& aParent);
+		
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};
+
+class CScrRegisterFileStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR RegisterComponentFile interface
+ */
+	{
+public:
+	CScrRegisterFileStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};		
+	
+class CScrAddFilePropertyStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR SetFilePropertyL interface
+ */
+	{
+public:
+	CScrAddFilePropertyStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};	
+
+class CScrSetCommonPropertyStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR SetComponentNameL, SetVendorNameL and SetVersionL interface
+ */
+	{
+public:
+	CScrSetCommonPropertyStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();			
+	};	
+
+class CScrDeleteComponentPropertyStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR DeleteComponentPropertyL interface
+ */
+	{
+public:
+	CScrDeleteComponentPropertyStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();	
+	};	
+
+class CScrDeleteFilePropertyStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR DeleteFilePropertyL interface
+ */
+	{
+public:
+	CScrDeleteFilePropertyStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();			
+	};	
+
+class CScrUnregisterFileStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR UnregisterComponentFileL interface
+ */
+	{
+public:
+	CScrUnregisterFileStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();			
+	};	
+
+class CScrDeleteComponentStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR DeleteComponentL interface
+ */
+	{
+public:
+	CScrDeleteComponentStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();			
+	};	
+
+class CScrDeleteAllComponentsStep : public CScrTestStep
+/**
+ 	TEF test step which deletes all components added by the harness.
+ */
+	{
+public:
+	CScrDeleteAllComponentsStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();			
+	};	
+
+class CScrInstallComponentStep : public CScrTestStep
+/**
+ 	TEF test step which installs a typical SWI component.
+ */
+	{
+public:
+	CScrInstallComponentStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();			
+	};	
+
+class CScrAddComponentDependencyStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR AddComponentDependencyL interface
+ */
+	{
+public:
+	CScrAddComponentDependencyStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();	
+	};
+
+class CScrDeleteComponentDependencyStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR DeleteComponentDependencyL interface
+ */
+	{
+public:
+	CScrDeleteComponentDependencyStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();	
+	};
+
+#endif /* COMPONENTMANAGEMENTSTEPS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/componentquerysteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the basic test step for the Software Component Registry test harness
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef COMPONENTQUERYSTEPS_H
+#define COMPONENTQUERYSTEPS_H
+
+#include "tscrstep.h"
+
+class CScrTestServer;
+
+_LIT(KScrGetComponentStep, "SCRGetComponent");
+_LIT(KScrGetComponentLocalizedStep, "SCRGetComponentLocalizedInfo");
+_LIT(KScrGetFilePropertiesStep, "SCRGetFileProperties");
+_LIT(KScrGetFilePropertyStep, "SCRGetFileProperty");
+_LIT(KScrGetFileComponentsStep, "SCRGetFileComponents");
+_LIT(KScrGetComponentPropertyStep, "SCRGetComponentProperty");
+_LIT(KScrGetComponentPropertiesStep, "SCRGetComponentProperties");
+_LIT(KScrGetComponentIdsStep, "SCRGetComponentIds");
+_LIT(KScrGetComponentFilesCountStep, "SCRGetComponentFilesCount");
+_LIT(KScrGetComponentWithGlobalIdStep, "SCRGetComponentWithGlobalId");
+_LIT(KScrGetComponentIdStep, "SCRGetComponentId");
+_LIT(KScrGetGlobalIdList, "SCRGetGlobalIdList");
+_LIT(KScrValuesNegativeStep, "SCRValuesNegative");
+_LIT(KScrOutOfMemoryStep, "SCROutOfMemory");
+
+class CScrGetComponentStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetComponent interface
+ */
+	{
+public:
+	CScrGetComponentStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};
+
+class CScrGetComponentLocalizedStep : public CScrTestStep
+/**
+    TEF test step which exercises the SCR GetComponentLocalized interface
+ */
+    {
+public:
+    CScrGetComponentLocalizedStep(CScrTestServer& aParent);
+    
+protected:
+    // From CScrTestStep
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };
+
+class CScrGetFilePropertiesStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetFileProperties interface
+ */
+	{
+public:
+	CScrGetFilePropertiesStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+	};
+
+class CScrGetFilePropertyStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetFileProperties interface
+ */
+	{
+public:
+	CScrGetFilePropertyStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+	};
+		
+class CScrGetFileComponentsStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetFileComponents interface
+ */
+	{
+public:
+	CScrGetFileComponentsStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+	};
+
+class CScrGetComponentPropertyStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetComponentPropertyL interface
+ */
+	{
+public:
+	CScrGetComponentPropertyStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+	};
+
+class CScrGetComponentPropertiesStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetComponentProperties interface
+ */
+	{
+public:
+	CScrGetComponentPropertiesStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+	};
+
+class CScrGetComponentIdsStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetComponentIdsL interface
+ */
+	{
+public:
+	CScrGetComponentIdsStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};
+
+class CScrGetComponentFilesCountStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetComponentFilesCountL interface
+ */
+	{
+public:
+	CScrGetComponentFilesCountStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};
+
+class CScrGetComponentWithGlobalIdStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetComponentL interface
+ */
+	{
+public:
+	CScrGetComponentWithGlobalIdStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};
+
+class CScrGetComponentIdStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetComponentIdL interface
+ */
+	{
+public:
+	CScrGetComponentIdStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};
+
+class CScrGetGlobalIdListStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetSupplierComponentsL and GetDependantComponentsL interfaces
+ */
+	{
+public:
+	CScrGetGlobalIdListStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};
+
+class CScrValuesNegativeStep : public CScrTestStep
+/**
+ 	TEF test step which checks boundaries for values in SCR.
+ */
+	{
+public:
+	CScrValuesNegativeStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();			
+	};	
+
+class SCROufOfMemory : public CScrTestStep
+/**
+ 	TEF test step which checks OOM conditions in SCR.
+ */
+	{
+public:
+	SCROufOfMemory(CScrTestServer& aParent);
+	SCROufOfMemory();
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	
+private:
+	void ExecuteL();
+	void ApplicationRegistrationOperationsL(Usif::RSoftwareComponentRegistry& scrSession);
+	TInt iFailRate;	
+	};	
+
+#endif //COMPONENTQUERYSTEPS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/deletescrdbstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the test step which deletes SCR database file. 
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef SCRDBDELETE_H
+#define SCRDBDELETE_H
+
+#include "tscrstep.h"
+#include "tscraccessor_client.h"
+class CScrTestServer;
+
+_LIT(KScrDeleteDbFileStep, "SCRDeleteDbFile");
+_LIT(KScrCopyDbFileStep, "SCRCopyDbFile");
+
+class CScrDeleteDbFileStep : public CScrTestStep
+/**
+ 	TEF test step which deletes the SCR DB database.
+ 	If the file cannot be deleted, it gives other tries in the specified amount of time.
+ */
+	{
+public:
+	CScrDeleteDbFileStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+
+private:
+	void DeleteFileL(const TDesC& aFilePath);
+	
+private:
+	RScrAccessor iScrAccessor;
+	};
+
+
+class CScrCopyDbFileStep : public CScrTestStep
+/**
+ 	TEF test step which copies a SCR database into the given location.
+ */
+	{
+public:
+	CScrCopyDbFileStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();		
+	
+private:
+	RScrAccessor iScrAccessor;
+	};
+	
+#endif /* SCRDBDELETE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/installloghistorysteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines test steps for the install log retrieving interface in the Software Component Registry
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef INSTALLLOGHISTORYSTEPS_H
+#define INSTALLLOGHISTORYSTEPS_H
+
+#include "tscrstep.h"
+#include "tscraccessor_client.h"
+class CScrTestServer;
+class Usif::CScrLogEntry;
+
+_LIT(KScrGetLogEntriesStep, "SCRGetLogEntries");
+_LIT(KScrSetLogFileReadOnlyAttrStep, "SCRSetLogFileReadOnlyAttr");
+_LIT(KScrCreateLogFileStep, "SCRCreateLogFile");
+
+class CScrGetLogEntriesStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR RetrieveLogEntriesL interface
+ */
+	{
+public:
+	CScrGetLogEntriesStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+
+private:
+	void GetLogEntriesFromConfigL(RPointerArray<Usif::CScrLogEntry>& aLogEntries);
+	TBool CompareLogEntriesL(RPointerArray<Usif::CScrLogEntry>& aFoundLogEntries, RPointerArray<Usif::CScrLogEntry>& aExpectedLogEntries);
+	};
+
+class CScrSetLogFileReadOnlyAttrStep : public CScrTestStep
+/**
+ 	TEF test step sets the SCR log file's readonly attribute.
+ */
+	{
+public:
+	CScrSetLogFileReadOnlyAttrStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};
+
+class CScrCreateLogFileStep : public CScrTestStep
+/**
+ 	TEF test step creates a log file including a preset number of records.
+ */
+	{
+public:
+	CScrCreateLogFileStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	};
+
+#endif /* INSTALLLOGHISTORYSTEPS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/pluginmanagementsteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines test steps for post-manufacture plugin management related interface in the Software Component Registry
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef PLUGINMANAGEMENTSTEPS_H
+#define PLUGINMANAGEMENTSTEPS_H
+
+#include "tscrstep.h"
+#include "tscraccessor_client.h"
+class CScrTestServer;
+
+_LIT(KScrAddSoftwareTypeStep, "SCRAddSoftwareType");
+_LIT(KScrDeleteSoftwareTypeStep, "SCRDeleteSoftwareType");
+
+class CScrAddSoftwareTypeStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR AddSoftwareTypeL interface
+ */
+	{
+public:
+	CScrAddSoftwareTypeStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+
+private:
+	RScrAccessor iScrAccessor;
+	};
+
+class CScrDeleteSoftwareTypeStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR DeleteSoftwareTypeL interface
+ */
+	{
+public:
+	CScrDeleteSoftwareTypeStep(CScrTestServer& aParent);
+	
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();	
+	
+private:
+	RScrAccessor iScrAccessor;
+	};
+	
+#endif /* PLUGINMANAGEMENTSTEPS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/sifsteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the basic test step for the Software Component Registry test harness
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef SIFSTEPS_H
+#define SIFSTEPS_H
+
+#include "tscrstep.h"
+class CScrTestServer;
+
+_LIT(KScrGetPluginStep, "SCRGetPlugin");
+_LIT(KScrSetScomoStateStep, "SCRSetScomoState");
+
+class CScrGetPluginStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR GetPluginUidL interfaces
+ */
+	{
+public:
+	CScrGetPluginStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+
+private:
+	TUid GetPluginUidFromConfigL();
+	TBool GetMimeTypeFromConfigL(TPtrC& aMimeType);
+	};	
+
+class CScrSetScomoStateStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR SetScomoStateL interface
+ */
+	{
+public:
+	CScrSetScomoStateStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();			
+	};
+
+#endif /* SIFSTEPS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/subsessionsteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the basic test step for the Software Component Registry test harness
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef SUBSESSIONSTEPS_H
+#define SUBSESSIONSTEPS_H
+
+#include "tscrstep.h"
+
+
+class CScrTestServer;
+
+_LIT(KScrComponentRegistrySubsessionStep, "ScrComponentRegistrySubsession");
+_LIT(KScrFileListSubsessionStep, "ScrFileListSubsession");
+_LIT(KScrAppViewSubsessionStep, "ScrAppViewSubsession");
+
+class CScrComponentRegistrySubsessionStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR RSoftwareComponentRegistryView interface
+ */
+	{
+public:
+	 CScrComponentRegistrySubsessionStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+private:	
+	void TestSingleModeL(const Usif::RSoftwareComponentRegistryView& aSubSession, RPointerArray<Usif::CComponentEntry>& aExpectedEntries);
+	void TestSetModeL(const Usif::RSoftwareComponentRegistryView& aSubSession, TInt aSetSize, RPointerArray<Usif::CComponentEntry>& aExpectedEntries);
+	void VerifyNonReturnedEntriesL(const RPointerArray<Usif::CComponentEntry>& aExpectedEntries);
+	void GetComponentEntriesFromConfigL(RPointerArray<Usif::CComponentEntry>& aEntries);
+	};
+
+class CScrFileListSubsessionStep : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR RSoftwareComponentRegistryFilesList interface
+ */
+	{
+public:
+	CScrFileListSubsessionStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+private:
+	void TestSingleModeL(const Usif::RSoftwareComponentRegistryFilesList& aSubSession, RPointerArray<HBufC>& expectedFiles);
+	void TestSetModeL(const Usif::RSoftwareComponentRegistryFilesList& aSubSession, TInt aSetSize, RPointerArray<HBufC>& expectedFiles);
+	void VerifyNonReturnedFilesL(const RPointerArray<HBufC>& aExpectedFiles);
+	void ReportUnexpectedFileL(const TDesC& aUnexpectedFileName);
+	};
+
+
+class CAppInfoView : public CScrTestStep
+/**
+ 	TEF test step which exercises the SCR RApplicationInfoView interface
+ */
+	{
+public:
+    CAppInfoView(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+private:
+	//
+	void TestSessionL(TInt aNoOfEntries, const Usif::RApplicationInfoView& aSubSession, RPointerArray<Usif::TAppRegInfo>& aExpectedEntries);
+	void GetAppEntryFromConfigL(RPointerArray<Usif::TAppRegInfo>& aEntries);
+	void VerifyNonReturnedEntriesL(const RPointerArray<Usif::TAppRegInfo>& aExpectedEntries);
+	};
+
+#endif /* SUBSESSIONSTEPS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/transactionmanagementsteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the basic test step for the Software Component Registry test harness
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef TRANSACTIONMANAGEMENTSTEPS_H
+#define TRANSACTIONMANAGEMENTSTEPS_H
+
+#include "tscrstep.h"
+class CScrTestServer;
+
+_LIT(KScrApplyTransactionStep, "SCRApplyTransaction");
+_LIT(KScrCreateTransactionStep, "SCRCreateTransaction");
+_LIT(KScrManageAnotherTransactionStep, "SCRManageAnotherTransaction");
+
+class CScrApplyTransactionStep : public CScrTestStep
+/**
+ 	TEF test step which exercises all SCR transaction interfaces
+ */
+	{
+public:
+	CScrApplyTransactionStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();			
+	};
+
+class CScrCreateTransactionStep : public CScrTestStep
+/**
+ 	TEF test step which exercises transaction management logic
+ */
+	{
+public:
+	CScrCreateTransactionStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();			
+	};		
+
+class CScrManageAnotherTransactionStep : public CScrTestStep
+/**
+ 	TEF test step which exercises transaction management logic
+ */
+	{
+public:
+	CScrManageAnotherTransactionStep(CScrTestServer& aParent);
+			
+protected:
+	// From CScrTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();			
+	};	
+
+#endif /* TRANSACTIONMANAGEMENTSTEPS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/tscrdefs.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,141 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the common constant definitions for the Software Component Registry test harness
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef TSCRDEFS_H
+#define TSCRDEFS_H
+
+const TInt MAX_SCR_ERROR_MESSAGE_LENGTH = 256;
+const TInt MAX_SCR_BUFFER_LENGTH = 64;
+const TInt MAX_SCR_PARAM_LENGTH = 32;
+const TInt MAX_SCR_PARAM_VALUE_LENGTH = 10;
+
+/** The path where data files live. */
+_LIT(KDataFilesPath, "z:\\tusif\\tscr\\data\\");
+
+// Common attribute names
+
+// Component related attribute names
+_LIT(KComponentsCountName, "ComponentsCount");
+_LIT(KComponentLocaleName, "ComponentLocale");
+_LIT(KComponentIdOffsetName, "ComponentIdOffset");
+_LIT(KComponentIdName, "ComponentId");
+_LIT(KComponentName, "ComponentName");
+_LIT(KVendorName, "VendorName");
+_LIT(KRemovableName, "Removable");
+_LIT(KDrmProtectedName, "DrmProtected");
+_LIT(KHiddenName, "Hidden");
+_LIT(KKnownRevokedName, "KnownRevoked");
+_LIT(KOriginVerifiedName, "OriginVerified");
+_LIT(KComponentSizeName, "ComponentSize");
+_LIT(KComponentScomoStateName, "ScomoState");
+_LIT(KInstalledDrivesName, "InstalledDrives");
+_LIT(KVersionName, "Version");
+_LIT(KSoftwareTypeName, "SoftwareType");
+_LIT(KGlobalIdName, "GlobalIdName");
+_LIT(KGlobalIdCount,"GlobalIdCount");
+_LIT(KOperationType, "OperationType");
+_LIT(KLogsCountParamName, "LogsCount");
+// appreg related attribute names
+_LIT(KOwnedFileName, "FileName");
+_LIT(KServiceUid, "ServiceUid");
+_LIT(KServiceOpaqueLocale, "ServiceOpaqueLocale");
+_LIT(KServiceOpaqueData, "ServiceOpaqueData");
+_LIT(KAppOpaqueDataLocale, "AppOpaqueLocale");
+_LIT(KAppOpaqueData, "AppOpaqueData");
+_LIT(KServiceDataTypePriority, "ServiceDataTypePriority");
+_LIT(KServiceDataType, "ServiceDataType");
+_LIT(KLocShortCaption, "LocShortCaption");
+_LIT(KLocAppLanguage, "LocAppLanguage");
+_LIT(KLocGroupName, "LocGroupName");
+_LIT(KLocCaption, "LocCaption");
+_LIT(KLocIconFileName, "LocIconFileName");
+_LIT(KLocNumberOfAppIcons, "LocNumberOfAppIcons");
+_LIT(KVwUid, "VwUid");
+_LIT(KVwScreenMode, "VwScreenMode");
+_LIT(KVwCaption, "VwCaption");
+_LIT(KVwIconFileName, "VwIconFileName");
+_LIT(KVwNumberOfAppIcons, "VwNumberOfAppIcons");
+_LIT(KPropertyLocale, "PropertyLocale");
+_LIT(KPropertyName, "PropertyName");
+_LIT(KPropertyIntValue, "PropertyIntValue");
+_LIT(KPropertyStrValue, "PropertyStrValue");
+_LIT(KViewDataCount, "ViewDataCount");
+_LIT(KServiceOpaqueDataInfoCount, "ServiceOpaqueDataInfoCount");
+_LIT(KServiceDataTypeCount,"ServiceDataTypeCount");
+_LIT(KAppUid, "AppUid");
+_LIT(KNoOfComponents, "NoOfComponents");
+_LIT(KFormatDrive, "FormatDrive");
+
+// File related attribute names
+_LIT(KSetSizeName, "SetSize");
+_LIT(KFileName, "FileName");
+_LIT(KFileCount, "FileCount");
+
+// Property related attribute names
+_LIT(KIntPropertyParamName, "IntProperty");
+_LIT(KStringPropertyParamName, "StringProperty");
+_LIT(KPropertiesCountParamName, "PropertiesCount");
+_LIT(KPropertyTypeParam, "PropertyType");
+_LIT(KPropertyNameParam, "PropertyName");
+_LIT(KPropertyValueParam, "PropertyValue");
+_LIT(KPropertyLocaleParam, "PropertyLocale");
+
+// Plug-in related attribute names
+_LIT(KMimeTypeName, "MimeType");
+_LIT(KPluginUidName, "PluginUid");
+
+// Performance related names
+_LIT(KMaxDurationName, "MaxDuration");
+_LIT(KMaxTestCaseDuration, "TEST_CASE_MAXIMUM_ALLOWED_DURATION");
+_LIT(KActualTestCaseDuration, "TEST_CASE_ACTUAL_DURATION");
+_LIT(KPerformanceTestInfo, "PERFORMANCE_LOG_INFORMATION");
+
+// Dependency related names
+_LIT(KGlobalIdType, "GlobalIdType");
+_LIT(KSupplierGlobalIdName, "SupplierGlobalIdName");
+_LIT(KSupplierSwTypeName, "SupplierSwTypeName");
+_LIT(KDependantGlobalIdName, "DependantGlobalIdName");
+_LIT(KDependantSwTypeName, "DependantSwTypeName");
+_LIT(KVersionFrom, "VersionFrom");
+_LIT(KVersionTo, "VersionTo");
+
+// Version comparetor names
+_LIT(KVersionLeft, "VersionLeft");
+_LIT(KVersionRight, "VersionRight");
+_LIT(KExpectedResult, "ExpectedResult");
+
+// Constants
+const TChar KComponentIdDelimeter = ',';
+
+//Apparc related attributes
+_LIT(KAppEntriesCountName, "AppEntriesCount");
+// TAppRegInfo related attribute  names
+_LIT(KIntTAppInfoUID, "TAppInfoUID");
+_LIT(KStringTAppInfoFileName, "TAppInfoFileName");
+_LIT(KStringTAppInfoCaption, "TAppInfoCaption");
+_LIT(KStringTAppInfoShortCaption, "TAppInfoShortCaption");
+
+
+#endif /* TSCRDEFS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/tscrserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the test server of the Software Component Registry test harness
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef TSCRSERVER_H
+#define TSCRSERVER_H
+
+#include <test/testexecuteserverbase.h>
+
+_LIT(KScrTestServerName, "tscr");
+
+class CScrTestServer : public CTestServer
+/**
+	Describes the test server for the SCR test harness.
+ */
+	{
+public:
+	static CScrTestServer* NewL();
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+	RFs& Fs();
+	~CScrTestServer();
+private:
+	TBool IsPerformanceTestStep(const TDesC& aStepName, TPtrC& aStrippedName);
+private:
+	RFs iFs;
+	};
+
+inline RFs& CScrTestServer::Fs()
+	{
+	return iFs;
+	}
+
+#endif /* TSCRSERVER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/inc/tscrstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,141 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the basic test step for the Software Component Registry test harness
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef TSCRSTEP_H
+#define TSCRSTEP_H
+
+#include <scs/oomteststep.h>
+#include <usif/usifcommon.h>
+#include <usif/scr/scr.h>
+#include <usif/scr/appreginfo.h>
+
+class CScrTestServer;
+
+// Shared operators for comparing properties
+TBool operator !=(Usif::CPropertyEntry& lhsEntry, Usif::CPropertyEntry& rhsEntry);
+TBool operator ==(Usif::CPropertyEntry& lhsEntry, Usif::CPropertyEntry& rhsEntry);
+TBool operator ==(const Usif::CComponentEntry& aLhsEntry, const Usif::CComponentEntry& aRhsEntry);
+TBool operator !=(const Usif::CComponentEntry& aLhsEntry, const Usif::CComponentEntry& aRhsEntry);
+
+class CScrTestStep : public COomTestStep
+/**
+ 	Base class used to provide handy functions available to test step classes.
+ */
+	{
+	friend class CScrPerformanceTestStep;
+public:
+	virtual ~CScrTestStep();
+	void MarkAsPerformanceStep();
+	
+protected:
+	CScrTestStep(CScrTestServer& aParent);
+	
+	// From COomTestStep
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	RScsClientBase* ClientHandle();
+	
+	// Utility Functions
+	void PrintErrorL(const TDesC& aMsg, TInt aErrNum,...);
+	
+	// Shared code for comparing properties
+	TBool ComparePropertiesL(RPointerArray<Usif::CPropertyEntry>& aFoundProperties, RPointerArray<Usif::CPropertyEntry>& aExpectedProperties);
+	static void GenerateIndexedAttributeNameL(TDes& aInitialAttributeName, TInt aIndex);
+	void CompareComponentIdsL(RArray<Usif::TComponentId>& aFoundComponents, RArray<Usif::TComponentId>& aExpectedComponents);
+	
+	// Helper functions for getting common test step attributes	
+	void AppendSharedComponentIdL(Usif::TComponentId aComponentId);
+	void GetSoftwareTypeNameL(TPtrC& aSwTypeName);
+	TBool GetGlobalIdNameL(TPtrC& aGlobalIdName);
+	Usif::CGlobalComponentId* GetGlobalComponentIdLC();
+	Usif::CGlobalComponentId* GetGlobalComponentIdLC(const TDesC& aGlobalIdName, const TDesC& aSwTypeName);
+	HBufC* GetVersionFromConfigL(const TDesC& aVersionName);
+	void GetExpectedVersionedComponentIdListL(RPointerArray<Usif::CVersionedComponentId>& aVerCompIdList);
+	TBool CompareVersionedComponentIdsL(RPointerArray<Usif::CVersionedComponentId>& aFoundVerCompIdList, RPointerArray<Usif::CVersionedComponentId>& aExpectedVerCompIdList);
+	TBool GetLocaleFromConfigL(const TDesC& aParamName, TLanguage &aLocale);
+	TBool GetLocaleFromConfigL(TLanguage &aLocale);
+	void GetFileNameFromConfigL(TPtrC& aFileName);
+	void GetFileNameListFromConfigL(RPointerArray<HBufC>& aFileList);
+	TInt GetComponentIdL();
+	void ReadAllSharedComponentIdsL(RArray<TInt>& aComponentList);
+	void GetComponentNameFromConfigL(TPtrC& aComponentName);
+	void GetVendorNameFromConfigL(TPtrC& aVendorName);
+	Usif::CComponentEntry* GetComponentEntryFromConfigLC(TBool aIsSingle=ETrue, TInt aIndex=0); 
+	void GetPropertiesFromConfigL(RPointerArray<Usif::CPropertyEntry>& aProperties, TBool aSupportLocalized=EFalse);
+	Usif::CPropertyEntry* GetPropertyFromConfigLC(TBool aIsSingle, TInt aIndex = 0, TBool aSupportLocalized=EFalse);
+	void GetComponentIdsFromConfigL(RArray<Usif::TComponentId>& aComponentIds);
+	void GetComponentLocalizablesFromConfigL(TInt aIndex, TPtrC& aName, TPtrC& aVendor, TLanguage& aLocale);
+	void GetLocalisedComponentsFromConfigL(RPointerArray<Usif::CLocalizableComponentInfo>& aComponentInfo);
+	TBool GetInstalledDrivesFromConfigL(TDriveList& aDriveList, const TDesC& aAttributeName);
+	TBool GetScomoStateFromConfigL(Usif::TScomoState& aScomoState, const TDesC& aAttributeName);
+	TInt GetSetSizeFromConfigL();
+	TBool Get64BitIntegerFromConfigL(const TDesC& aConfigKeyName, TInt64& aRetVal);
+	Usif::CApplicationRegistrationData* GetAppRegInfoFromConfigLC();
+	void GetAppOwnedFilesL(RPointerArray<HBufC>& aOwnedFileArray);
+	void GetAppServiceInfoL(RPointerArray<Usif::CServiceInfo>& aServiceInfoArray);
+	void GetAppLocalizableInfoL(RPointerArray<Usif::CLocalizableAppInfo>& aLocalizableAppInfoArray);
+	void GetAppOpaqueDataInfoL(RPointerArray<Usif::COpaqueData>& aAppOpaqueDataInfoArray);
+	void GetServiceOpaqueDataInfoL(RPointerArray<Usif::COpaqueData>& aServiceOpaqueDataInfoArray, TInt aServiceOpaqueDataInfoCount, TInt aStartingIndex);
+	Usif::TComponentId GetCompIdFromConfigL();
+    TBool GetUidFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TUid& aUid);
+	
+	TUid GetServiceUidL();
+	void GetAppUidL(TUid& aAppUid);
+	void GetViewDataInfoFromConfigL(RPointerArray<Usif::CAppViewData>& aAppViewInfoArray);
+	TBool NotEqual(const Usif::CCaptionAndIconInfo *aLhsEntry, const Usif::CCaptionAndIconInfo *aRhsEntry) const;
+	TBool NotEqualL(const RPointerArray<Usif::CServiceInfo>& aLhsEntry, const RPointerArray<Usif::CServiceInfo>& aRhsEntry) const;
+	
+	// Read component names from config file and add a new component
+	Usif::TComponentId AddNonLocalisableComponentL(Usif::RSoftwareComponentRegistry& aScrSession);
+	
+	// Read filter properties from config file
+	Usif::CComponentFilter* ReadComponentFilterFromConfigLC();
+	void ReadFilterPropertiesL(Usif::CComponentFilter* aFilter, TInt aPropertiesCount);
+	// Read Application info filter from config file
+	void ReadAppInfoFilterFromConfigL(Usif::CAppInfoFilter** aFilter);
+	Usif::TAppRegInfo* CScrTestStep::GetAppInfoFromConfigL(TBool aIsSingle , TInt aIndex=0 );
+	
+	void StartTimer();
+	void StopTimerAndPrintResultL();
+	void PrintPerformanceLog(TTime aTime);
+
+private:
+	TInt ReadSharedComponentIdL(TInt aOffset);	
+
+protected:
+	CScrTestServer& iParent;
+	Usif::RSoftwareComponentRegistry iScrSession;
+	TBool iIsPerformanceTest;
+	
+	// For plugin management test cases, the time is measured externally because they are performed via another accessor server (scr accessor).
+	// The actual test time is measured on the scr accessor server side and returned to the test code.
+	TInt iTimeMeasuredExternally;
+		
+private:	
+	TTime iStartTime;
+	};
+
+#endif /* TSCRSTEP_H */
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr-differentbuildnumber.db has changed
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr-multiapp.db has changed
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr-newermajordbversion.db has changed
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr-newerminordbversion.db has changed
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr-nodefaultvalues.db has changed
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr-noentriesinversiontable.db has changed
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr-noversiontable.db has changed
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr-oldermajordbversion.db has changed
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr-olderminordbversion.db has changed
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr_large.db has changed
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr_medium.db has changed
Binary file installationservices/swcomponentregistry/test/tscr/scripts/data/scr_small.db has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/performance_log_parser.pl	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,178 @@
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Script: performance_log_parser.pl
+#
+
+use strict;
+use FileHandle;
+
+my $Test_Case_Start_Tag = "START_TESTCASE";
+my $Test_Case_End_Tag = "END_TESTCASE";
+my $Event_print = "PERFORMANCE_LOG_INFORMATION";
+my $Test_Case_Max_Duration = "TEST_CASE_MAXIMUM_ALLOWED_DURATION";
+my $ScrEventCode = 1;
+
+my $defInputFile = "/epoc32/winscw/c/logs/testexecute/tscr_performance.htm";
+my $defOutputFile = "/epoc32/winscw/c/logs/scr_performance.txt";
+
+sub millisec
+	{  
+	no warnings 'uninitialized';
+	my ($mytime) = @_ ;
+	$mytime =~ /([0-9]*):([0-9]*):([0-9]*):([0-9]*)$/;
+	my $milisec = $4;
+	my $sec = $3;
+	my $min = $2;
+	my $hour = $1;
+
+	my $msecs = ($milisec / 1000) + ($sec *1000) + ($min * 60000) + ($hour * 3600000);
+	return $msecs;
+	}
+
+sub process_log_file
+	{
+	my ($data_file, $output_FH) = @_;
+	print $output_FH "#Test Case Name,Maximum Duration(ms),Actual Duration(ms),Result\n";
+	
+	# enable reading whole file as one chunk
+	my $SAVE_RS = $/;
+	undef $/;
+	
+	# open and read the log file in a single line
+	open(DAT, $data_file) || die("Could not open file $data_file!");
+	my $raw_data=<DAT>;
+	close(DAT);
+	$raw_data=~ s/\n/ /g;
+
+	# restore previous record separator
+	$/ = $SAVE_RS;	
+	
+	my $num_passed = 0;
+	my $num_failed = 0;
+	
+	while ($raw_data && $raw_data =~ /$Test_Case_Start_Tag\s+(\S+)/)
+		{
+		# step through the file in chunks delimited by the start/end test case tags.
+		
+		my $test_case_name = $1;
+		my ($test_case_data) = ($raw_data =~ /$Test_Case_Start_Tag(.*?)$Test_Case_End_Tag/);
+		
+		if (not $test_case_data)
+			{
+			print STDERR "Error: Test case: $test_case_name: Suspected missing END_TESTCASE tag.\n";
+			}
+		
+		($raw_data) = ($raw_data =~ /$Test_Case_End_Tag(.*)/);
+		($raw_data) = ($raw_data =~ /($Test_Case_Start_Tag.*)/) if $raw_data;
+		
+		my ($max_duration) = ($test_case_data =~ /$Test_Case_Max_Duration,([0-9]+)/);
+		if (!defined $max_duration)
+			{
+			$max_duration = 0;
+			}
+			
+		my $start_time = "0";
+		my $end_time = "0";
+		my $first = 1;
+		
+		while ($test_case_data and ($test_case_data =~ /$Event_print(.*)/) )
+			{
+			# get the event time. if this is the first time value in the chunk, it is the start time of the event.
+			#otherwise, continue until reaching the last time value.
+			my $start_log_msg = $1;
+		   
+			$start_log_msg =~ /,(.+?)\s(.*)/;
+			
+			if($first == 1)
+				{
+				$start_time = $1;
+				$first = 0;
+				}
+			else
+				{
+				$end_time = $1;
+				}
+	
+			$test_case_data = $2;
+			}	
+		
+		if(!($start_time eq "0") && !($end_time eq "0"))
+			{
+			my $actual_duration = millisec($end_time) - millisec($start_time);
+			my $result;
+			if( $actual_duration <= $max_duration)
+				{
+				$result = "Passed";
+				$num_passed += 1;
+				}
+			else
+				{
+				$result = "Failed";
+				$num_failed += 1;
+				}
+			
+			print $output_FH "$test_case_name,$max_duration,$actual_duration,$result\n";	
+			}
+		}
+	print $output_FH (sprintf "\n\n%d tests failed out of %d\n", $num_failed, $num_passed+$num_failed);
+	}
+	
+	
+sub usage
+	{
+	print <<USAGE;
+usage:
+	performance_log_parser.pl <input_file> <output_file>
+
+	<input_file>: A log file to process 
+			(default- $defInputFile)
+
+	<out_file>: Final output file name 
+			(default- $defOutputFile)
+USAGE
+	}
+
+	
+sub Main
+	{
+	my @argv = @_;
+	# if input and output files are not provided, default ones will be used
+	my $input_file = $defInputFile;
+	my $output_file = $defOutputFile;
+	
+	if(@argv > 2)
+		{
+		usage;
+		exit;
+		}
+	elsif(@argv == 2)
+		{# input and output files are provided, don't use default ones
+		$input_file = shift @argv;
+		$output_file = shift @argv;
+		}
+	
+	my $outputFH = \*STDOUT; # results to STDOUT by default
+	
+	if (defined $output_file)
+		{
+		$outputFH = FileHandle->new;
+		$outputFH->open("> $output_file") or die "Error: File $output_file: $!";
+		}
+	process_log_file($input_file,$outputFH);
+
+	$outputFH->close;
+}
+
+Main(@ARGV);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,3957 @@
+// Configuration file for SCR Test Harness
+[db_file]
+DbFilePath=c:\sys\install\scr\scr.db
+JournalFilePath=c:\sys\install\scr\scr.db-journal
+
+[log_file]
+DbFilePath=c:\private\10285bc0\scr.log
+JournalFilePath=c:\private\10285bc0\scr_tmp.log
+
+[corrupted_db_file_no_version_table]
+SourceFilePath=z:\tusif\tscr\data\scr-noversiontable.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+[corrupted_db_file_no_version_entries]
+SourceFilePath=z:\tusif\tscr\data\scr-noentriesinversiontable.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+[db_file_older_major_version]
+SourceFilePath=z:\tusif\tscr\data\scr-oldermajordbversion.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+[db_file_newer_major_version]
+SourceFilePath=z:\tusif\tscr\data\scr-newermajordbversion.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+[db_file_newer_minor_version]
+SourceFilePath=z:\tusif\tscr\data\scr-newerminordbversion.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+[db_file_older_minor_version]
+SourceFilePath=z:\tusif\tscr\data\scr-olderminordbversion.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+[db_file_different_build_number]
+SourceFilePath=z:\tusif\tscr\data\scr-differentbuildnumber.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+[scr_small_db]
+SourceFilePath=z:\tusif\tscr\data\scr_small.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+[scr_medium_db]
+SourceFilePath=z:\tusif\tscr\data\scr_medium.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+[scr_large_db]
+SourceFilePath=z:\tusif\tscr\data\scr_large.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+[scr_multiapp]
+SourceFilePath=z:\tusif\tscr\data\scr-multiapp.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+
+[shared_data]
+shared_data_num = 1
+shared_name_1 = ComponentId  
+
+// Shared sections
+
+[common_component_names]
+SoftwareType=plain
+ComponentName=GeneralComponent
+VendorName=Symbian
+
+[common_component_attributes]
+ComponentIdOffset=0
+ComponentName=GeneralComponent
+VendorName=Symbian
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[common_component_properties]
+ComponentIdOffset=0
+PropertiesCount=3
+PropertyName0=StringProperty
+PropertyType0=1
+PropertyValue0=astring
+PropertyName1=IntegerProperty
+PropertyType1=2
+PropertyValue1=111
+PropertyName2=LocalizedProperty
+PropertyType2=3
+PropertyValue2=alocalizedstring
+PropertyLocale2=1
+
+[common_files]
+ComponentIdOffset=0
+FileCount= 2
+FileName0=c:\common_file_1.txt
+FileName1=z:\common_file_2.txt
+
+[common_file1_properties]
+ComponentIdOffset=0
+FileName=c:\common_file_1.txt
+PropertiesCount=2
+PropertyName0=TestFilePropertyStr
+PropertyType0=1
+PropertyValue0=afile1string
+PropertyName1=TestFilePropertyInt
+PropertyType1=2
+PropertyValue1=101
+
+[common_file2_properties]
+ComponentIdOffset=0
+FileName=z:\common_file_2.txt
+PropertiesCount=2
+PropertyName0=TestFilePropertyStr
+PropertyType0=1
+PropertyValue0=afile2string
+PropertyName1=TestFilePropertyInt
+PropertyType1=2
+PropertyValue1=102
+
+// SEC-SCR-API-0001
+// uses shared sections
+
+// SEC-SCR-API-0002
+
+[component_with_localizables]
+SoftwareType=plain
+IsLocalisable=True
+LocalesCount=4
+ComponentName0=Component_N2
+VendorName0=SecurityTeam
+ComponentLocale0=1 //English
+ComponentName1=Cåmponent_N2
+VendorName1=SäkerhetLag
+ComponentLocale1=6 //Swedish
+ComponentName2=Bilesen_N2
+VendorName2=GüvenlikTakimi
+ComponentLocale2=14 //Turkish
+ComponentName3=NonLocalizedName
+VendorName3=NonLocalizedVendor
+ComponentLocale3=0 //Default or Unique
+
+
+[verify_component_localizables1]
+FilterName=Component_N2
+FilterVendor=SecurityTeam
+ComponentLocale=0
+ComponentIdOffset=0
+ComponentName=Component_N2
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[verify_component_localizables2]
+FilterName=Cåmponent_N2
+FilterVendor=SäkerhetLag
+ComponentIdOffset=0
+ComponentName=Cåmponent_N2
+VendorName=SäkerhetLag
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[verify_component_localizables3]
+FilterName=Bilesen_N2
+FilterVendor=GüvenlikTakimi
+ComponentIdOffset=0
+ComponentName=Bilesen_N2
+VendorName=GüvenlikTakimi
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_component_with_nonlocalized_names]
+ComponentLocale=0
+ComponentIdOffset=0
+ComponentName=NonLocalizedName
+VendorName=NonLocalizedVendor
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_component_with_unspecified_names]
+ComponentLocale=-1
+ComponentIdOffset=0
+ComponentName=Component_N2
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_component_with_particular_names]
+ComponentLocale=14
+ComponentIdOffset=0
+ComponentName=Bilesen_N2
+VendorName=GüvenlikTakimi
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+// SEC-SCR-API-0003
+
+[component_with_empty_localizables]
+SoftwareType=plain
+IsLocalisable=True
+LocalesCount=0
+
+[component_with_empty_name]
+SoftwareType=plain
+ComponentName=
+VendorName=Symbian
+
+[update_component_set_empty_name]
+ComponentIdOffset=0
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=111
+ComponentName=
+VendorName=newVendorName
+PropertyLocale=0
+
+// SEC-SCR-API-0004
+
+[component_with_multiple_names]
+SoftwareType=plain
+IsLocalisable=True
+LocalesCount=2
+ComponentName0=ComponentThree
+VendorName0=VendorThree
+ComponentLocale0=1 //English
+ComponentName1=CåmponentTre
+VendorName1=FörsäljareTre
+ComponentLocale1=6 //Swedish
+
+[update_component_attributes]
+ComponentIdOffset=0
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=12345
+ComponentName=UppdateraCåmponentTre
+VendorName=NyFörsäljareTre
+PropertyLocale=6 //Swedish
+
+[verify_updated_component_attributes]
+FilterName=UppdateraCåmponentTre
+FilterVendor=NyFörsäljareTre
+ComponentIdOffset=0
+ComponentName=UppdateraCåmponentTre
+VendorName=NyFörsäljareTre
+SoftwareType=plain
+GlobalIdName=
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=12345
+ScomoState=0
+InstalledDrives=
+Version=0.1
+
+
+// SEC-SCR-API-0005
+
+[set_single_localized_property]
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=SingleLocalizedProperty
+PropertyType0=3
+PropertyValue0=alocalizedstring
+PropertyLocale0=10
+
+[get_single_localized_property]
+ComponentIdOffset=0
+PropertyName=SingleLocalizedProperty
+PropertyType=3
+PropertyValue=alocalizedstring
+PropertyLocale=10
+
+[get_single_non_localized_property]
+ComponentIdOffset=0
+PropertyName=StringProperty
+PropertyType=1
+PropertyValue=astring
+
+[get_single_int_property]
+ComponentIdOffset=0
+PropertyName=IntegerProperty
+PropertyType=2
+PropertyValue=111
+
+[set_multiple_localized_property]
+ComponentIdOffset=0
+PropertiesCount=3
+PropertyName0=MultiLocalizedProperty
+PropertyType0=3
+PropertyValue0=currentlocalestring
+PropertyLocale0=1
+PropertyName1=MultiLocalizedProperty
+PropertyType1=3
+PropertyValue1=nonlocalizedstring
+PropertyLocale1=0
+PropertyName2=MultiLocalizedProperty
+PropertyType2=3
+PropertyValue2=anotherlocalestring
+PropertyLocale2=10
+
+[get_nonlocalized_version_property]
+ComponentIdOffset=0
+PropertyName=MultiLocalizedProperty
+PropertyType=3
+PropertyValue=nonlocalizedstring
+PropertyLocale=0 // Non-localized
+
+[get_unspecified_version_property]
+ComponentIdOffset=0
+PropertyName=MultiLocalizedProperty
+PropertyType=3
+PropertyValue=currentlocalestring
+PropertyLocale=1
+
+[get_specific_version_property]
+ComponentIdOffset=0
+PropertyName=MultiLocalizedProperty
+PropertyType=3
+PropertyValue=anotherlocalestring
+PropertyLocale=10
+
+[all_unspecified_locale_properties]
+ComponentIdOffset=0
+PropertyLocale=-1 //Unspecified
+PropertiesCount=4
+PropertyName0=StringProperty
+PropertyType0=1
+PropertyValue0=astring
+PropertyName1=IntegerProperty
+PropertyType1=2
+PropertyValue1=111
+PropertyName2=MultiLocalizedProperty
+PropertyType2=3
+PropertyValue2=nonlocalizedstring
+PropertyLocale2=1
+PropertyName3=LocalizedProperty
+PropertyType3=3
+PropertyValue3=alocalizedstring
+PropertyLocale3=1
+
+[all_non_localized_properties]
+ComponentIdOffset=0
+PropertyLocale=0 //Non-localized
+PropertiesCount=3
+PropertyName0=StringProperty
+PropertyType0=1
+PropertyValue0=astring
+PropertyName1=IntegerProperty
+PropertyType1=2
+PropertyValue1=111
+PropertyName2=MultiLocalizedProperty
+PropertyType2=3
+PropertyValue2=nonlocalizedstring
+PropertyLocale2=1
+
+[all_particular_properties]
+ComponentIdOffset=0
+PropertyLocale=10 // Particular
+PropertiesCount=2
+PropertyName0=SingleLocalizedProperty
+PropertyType0=3
+PropertyValue0=alocalizedstring
+PropertyLocale0=1
+PropertyName1=MultiLocalizedProperty
+PropertyType1=3
+PropertyValue1=anotherlocalestring
+PropertyLocale1=10
+
+// SEC-SCR-API-0006
+
+[new_component_properties]
+ComponentIdOffset=0
+PropertiesCount=3
+PropertyName0=StringProperty
+PropertyType0=1
+PropertyValue0=updatedstring
+PropertyName1=IntegerProperty
+PropertyType1=2
+PropertyValue1=222
+PropertyName2=LocalizedProperty
+PropertyType2=3
+PropertyValue2=updatedlocalizedstring
+PropertyLocale2=1
+
+// SEC-SCR-API-0007
+
+[first_component_files]
+ComponentIdOffset=0
+FileCount= 2
+FileName0=c:\logs\scr_test0.txt
+FileName1=z:\logs\scr_test1.txt
+
+[second_component_files]
+ComponentIdOffset=1
+FileCount= 2
+FileName0=z:\logs\scr_test1.txt
+FileName1=d:\logs\scr_test2.txt
+SetSize=3
+
+[third_component_files]
+ComponentIdOffset=2
+FileCount= 2
+FileName0=c:\logs\scr_test0.txt
+FileName1=c:\logs\scr_test3.txt
+
+
+// SEC-SCR-API-0008
+
+[component_files]
+ComponentIdOffset=0
+FileCount= 2
+FileName0=c:\logs\scr_test4.txt
+FileName1=z:\logs\scr_test5.txt
+
+[component_file1_properties]
+ComponentIdOffset=0
+FileName=c:\logs\scr_test4.txt
+PropertiesCount=2
+PropertyName0=TestFilePropertyStr
+PropertyType0=1
+PropertyValue0=abc
+PropertyName1=TestFilePropertyInt
+PropertyType1=2
+PropertyValue1=111
+
+[component_file2_properties]
+ComponentIdOffset=0
+FileName=z:\logs\scr_test5.txt
+PropertiesCount=2
+PropertyName0=TestFilePropertyStr
+PropertyType0=1
+PropertyValue0=def
+PropertyName1=TestFilePropertyInt
+PropertyType1=2
+PropertyValue1=222
+
+[component_file_property]
+ComponentIdOffset=0
+FileName=z:\logs\scr_test5.txt
+PropertyName=TestFilePropertyStr
+PropertyType=1
+PropertyValue=def
+
+// SEC-SCR-API-0009
+
+[delete_component_properties]
+ComponentIdOffset=0
+PropertiesCount=2
+PropertyName0=IntegerProperty
+PropertyType0=2
+PropertyValue0=111
+PropertyName1=LocalizedProperty
+PropertyType1=3
+PropertyValue1=alocalizedstring
+PropertyLocale1=1
+
+[component_properties_left]
+ComponentIdOffset=0
+PropertiesCount=1
+// This property should be left
+PropertyName0=StringProperty
+PropertyType0=1
+PropertyValue0=astring
+
+
+// SEC-SCR-API-0010
+
+[delete_common_file1_property1]
+ComponentIdOffset=0
+FileName=c:\common_file_1.txt
+PropertyName=TestFilePropertyInt
+
+[common_file1_properties_left]
+ComponentIdOffset=0
+FileName=c:\common_file_1.txt
+PropertiesCount=1
+PropertyName0=TestFilePropertyStr
+PropertyType0=1
+PropertyValue0=afile1string
+
+[delete_common_file2_property1]
+ComponentIdOffset=0
+FileName=z:\common_file_2.txt
+PropertyName=TestFilePropertyStr
+
+[common_file2_properties_left]
+ComponentIdOffset=0
+FileName=z:\common_file_2.txt
+PropertiesCount=1
+PropertyName0=TestFilePropertyInt
+PropertyType0=2
+PropertyValue0=102
+
+
+// SEC-SCR-API-0011
+
+[component_files_to_be_unregistered]
+ComponentIdOffset=0
+FileCount= 2
+FileName0=c:\file_to_be_unregistered.txt
+FileName1=z:\file_to_be_left.txt
+
+[component_file_properties_to_be_unregistered]
+ComponentIdOffset=0
+FileName=c:\file_to_be_unregistered.txt
+PropertiesCount=2
+PropertyName0=TestFilePropertyStr
+PropertyType0=1
+PropertyValue0=component11File1
+PropertyName1=TestFilePropertyInt
+PropertyType1=2
+PropertyValue1=111
+
+[unregister_component_file]
+ComponentIdOffset=0
+FileName=c:\file_to_be_unregistered.txt
+
+[unregistered_file_property]
+ComponentIdOffset=0
+FileName=c:\file_to_be_unregistered.txt
+PropertyName=TestFilePropertyInt
+PropertyType=2
+PropertyValue=111
+
+[registered_files]
+ComponentIdOffset=0
+FileCount= 1
+FileName0=z:\file_to_be_left.txt
+
+
+// SEC-SCR-API-0012
+
+[component_to_be_deleted]
+SoftwareType=plain
+ComponentName=Component2bDeleted
+VendorName=Symbian
+
+[delete_component]
+ComponentIdOffset=0
+
+[deleted_component_properties]
+ComponentIdOffset=0
+PropertiesCount=0
+PropertyName0=DummyProperty
+PropertyType0=1
+PropertyValue0=DummyValue
+
+[deleted_component_files]
+ComponentIdOffset=0
+FileCount= 0
+
+[deleted_component_file1_properties]
+ComponentIdOffset=0
+FileCount=1
+FileName0=c:\common_file_1.txt
+PropertiesCount=1
+PropertyName0=DummyProperty
+PropertyType0=1
+PropertyValue0=DummyValue
+
+[verify_component_deleted]
+FilterName=Component2bDeleted
+ComponentIdOffset=0
+ComponentName=Component2bDeleted
+VendorName=Symbian
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=C,Z
+Version=
+
+[delete_non_existing_component]
+ComponentId=123456
+
+// SEC-SCR-API-0013
+
+[add_component_with_default_language]
+SoftwareType=dummy
+IsLocalisable=True
+LocalesCount=2
+ComponentName0=Élément_N4
+VendorName0=SécuritéÉquipe
+ComponentLocale0=2 //French
+ComponentName1=Component_N4
+VendorName1=SecurityTeam
+ComponentLocale1=1 // English - Default
+
+[add_component_with_nondefault_language_only]
+SoftwareType=dummy
+IsLocalisable=True
+LocalesCount=1
+ComponentName0=Bilesen_N5
+VendorName0=GüvenlikTakimi
+ComponentLocale0=14 //Turkish
+
+[get_component_with_default_language]
+ComponentIdOffset=1
+ComponentName=Component_N4
+VendorName=SecurityTeam
+SoftwareType=dummy
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_component_with_unspecified_language]
+ComponentLocale=-1 // KUnspecifiedLocale
+ComponentIdOffset=1
+ComponentName=Component_N4
+VendorName=SecurityTeam
+SoftwareType=dummy
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_component_with_specified_language]
+ComponentLocale=2 // French
+ComponentIdOffset=1
+ComponentName=Élément_N4
+VendorName=SécuritéÉquipe
+SoftwareType=faux
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_component_with_nondefault_language_only_1]
+ComponentIdOffset=0
+ComponentName=Bilesen_N5
+VendorName=GüvenlikTakimi
+SoftwareType=dummy
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_component_with_nondefault_language_only_2]
+ComponentLocale=14 //Turkish
+ComponentIdOffset=0
+ComponentName=Bilesen_N5
+VendorName=GüvenlikTakimi
+SoftwareType=kukla
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_component_with_nondefault_language_only_3]
+ComponentLocale=15 //Icelandic
+ComponentIdOffset=0
+ComponentName=Bilesen_N5
+VendorName=GüvenlikTakimi
+SoftwareType=dummy
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_component_with_nondefault_language_only_4]
+ComponentLocale=0 //Non-specified locale
+ComponentIdOffset=0
+ComponentName=Bilesen_N5
+VendorName=GüvenlikTakimi
+SoftwareType=dummy
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+// SEC-SCR-API-0014
+
+[get_non_existing_component]
+ComponentId=-1	// This Id is shouldn't exist.
+ComponentName=DummyName
+VendorName=DummyName
+SoftwareType=dummy
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+
+// SEC-SCR-API-0015
+
+[getfileproperties_of_nonexisting_component]
+ComponentId=-1
+FileName=c:\common_file_1.txt
+PropertiesCount=2
+PropertyName0=TestFilePropertyStr
+PropertyType0=1
+PropertyValue0=afile1string
+PropertyName1=TestFilePropertyInt
+PropertyType1=2
+PropertyValue1=101
+
+[getfileproperties_of_nonexisting_file]
+ComponentIdOffset=0
+FileName=c:\nonexisting.file
+PropertiesCount=2
+PropertyName0=TestFilePropertyStr
+PropertyType0=1
+PropertyValue0=afile1string
+PropertyName1=TestFilePropertyInt
+PropertyType1=2
+PropertyValue1=101
+
+
+// SEC-SCR-API-0016
+
+
+[getfileproperty_of_nonexisting_component]
+ComponentId=-1
+FileName=z:\common_file_2.txt
+PropertyName=TestFilePropertyStr
+
+[getfileproperty_of_nonexisting_file]
+ComponentId=0
+FileName=z:\nonexisting.file
+PropertyName=TestFilePropertyStr
+
+[getfileproperty_of_nonexisting_property]
+ComponentId=0
+FileName=z:\common_file_2.txt
+PropertyName=NonexistingProperty
+
+
+// SEC-SCR-API-0017
+
+[register_file_to_first_component]
+ComponentIdOffset=0
+FileCount= 1
+FileName0=z:\get_file_components.txt
+
+[register_file_to_second_component]
+ComponentIdOffset=1
+FileCount= 1
+FileName0=z:\get_file_components.txt
+
+[component1_file_property]
+ComponentIdOffset=0
+FileName=z:\get_file_components.txt
+PropertiesCount=1
+PropertyName0=TestFilePropertyStr
+PropertyType0=1
+PropertyValue0=afile2string
+
+[component2_file_property]
+ComponentIdOffset=0
+FileName=z:\get_file_components.txt
+PropertiesCount=1
+PropertyName0=TestFilePropertyStr
+PropertyType0=1
+PropertyValue0=afile2string
+
+[get_file_components]
+ComponentsCount=2
+ComponentIdOffset0=0
+ComponentIdOffset1=1
+FileName=z:\get_file_components.txt
+
+
+// SEC-SCR-API-0018
+
+
+[component_properties_with_localizables]
+ComponentIdOffset=0
+PropertiesCount=5
+PropertyName0=ComponentPropertyString
+PropertyType0=1
+PropertyValue0=qwe
+PropertyName1=ComponentPropertyInteger
+PropertyType1=2
+PropertyValue1=123456789
+PropertyName2=ComponentPropertyLocalizable
+PropertyType2=3
+PropertyValue2=uo
+PropertyLocale2=1
+PropertyName3=ComponentPropertyLocalizable
+PropertyType3=3
+PropertyValue3=üö
+PropertyLocale3=14
+PropertyName4=ComponentPropertyAnotherLocalizable
+PropertyType4=3
+PropertyValue4=ç
+PropertyLocale4=14
+
+[component_nonlocalized_properties]
+ComponentIdOffset=0
+PropertiesCount=3
+PropertyName0=ComponentPropertyString
+PropertyType0=1
+PropertyValue0=qwe
+PropertyName1=ComponentPropertyInteger
+PropertyType1=2
+PropertyValue1=123456789
+PropertyName2=ComponentPropertyLocalizable
+PropertyType2=3
+PropertyValue2=uo
+PropertyLocale2=1
+
+[component_localized_properties]
+ComponentIdOffset=0
+PropertyLocale=14
+PropertiesCount=2
+PropertyName0=ComponentPropertyLocalizable
+PropertyType0=3
+PropertyValue0=üö
+PropertyLocale0=14
+PropertyName1=ComponentPropertyAnotherLocalizable
+PropertyType1=3
+PropertyValue1=ç
+PropertyLocale1=14
+
+// SEC-SCR-API-0019
+
+[get_plugin_with_mimetype_1]
+MimeType=x-epoc/x-sisx-app
+PluginUid=271080388
+
+[get_plugin_with_mimetype_2]
+MimeType=text/plain
+PluginUid=271080402
+
+[get_plugin_with_componentid]
+ComponentIdOffset=0
+PluginUid=271080402
+
+
+// SEC_SCR_API_0020
+
+[component_with_dummy_type]
+SoftwareType=dummy
+ComponentName=ComponentOne
+VendorName=VendorOne
+
+[component_with_plain_type]
+SoftwareType=plain
+ComponentName=ComponentTwo
+VendorName=VendorTwo
+
+[second_component_with_dummy_type]
+SoftwareType=dummy
+ComponentName=ComponentThree
+VendorName=VendorThree
+
+[get_dummy_components]
+FilterSoftwareType=dummy
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=ComponentOne
+VendorName0=VendorOne
+SoftwareType0=dummy
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=0
+ComponentName1=ComponentThree
+VendorName1=VendorThree
+SoftwareType1=dummy
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+
+
+// SEC-SCR-API-0021
+
+[first_component_with_same_vendor]
+SoftwareType=plain
+ComponentName=FirstComponent
+VendorName=SameVendor
+
+[second_component_with_same_vendor]
+SoftwareType=plain
+ComponentName=SecondComponent
+VendorName=SameVendor
+
+[component_with_different_vendor]
+SoftwareType=plain
+ComponentName=ThirdComponent
+VendorName=DifferentVendor
+
+[get_components_by_vendor]
+FilterVendor=SameVendor
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=FirstComponent
+VendorName0=SameVendor
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=1
+ComponentName1=SecondComponent
+VendorName1=SameVendor
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+
+
+// SEC-SCR-API-0022
+
+[first_component_properties]
+ComponentIdOffset=2
+PropertiesCount=8
+PropertyName0=S1
+PropertyType0=1
+PropertyValue0=Value1
+PropertyName1=S2
+PropertyType1=1
+PropertyValue1=Value2
+PropertyName2=I1
+PropertyType2=2
+PropertyValue2=1
+PropertyName3=I2
+PropertyType3=2
+PropertyValue3=2
+PropertyName4=L1
+PropertyType4=3
+PropertyValue4=Locale1
+PropertyLocale4=1 //English
+PropertyName5=L1
+PropertyType5=3
+PropertyValue5=Yerel1
+PropertyLocale5=14 //Turkish
+PropertyName6=L2
+PropertyType6=3
+PropertyValue6=Locale2
+PropertyLocale6=1 //English
+PropertyName7=L2
+PropertyType7=3
+PropertyValue7=Yerel2
+PropertyLocale7=14 //Turkish
+
+[second_component_properties]
+ComponentIdOffset=1
+PropertiesCount=8
+PropertyName0=S1
+PropertyType0=1
+PropertyValue0=Value1
+PropertyName1=S2
+PropertyType1=1
+PropertyValue1=AnotherValue2
+PropertyName2=I1
+PropertyType2=2
+PropertyValue2=11
+PropertyName3=I2
+PropertyType3=2
+PropertyValue3=2
+PropertyName4=L1
+PropertyType4=3
+PropertyValue4=Locale1
+PropertyLocale4=1 //English
+PropertyName5=L1
+PropertyType5=3
+PropertyValue5=Yerel1
+PropertyLocale5=14 //Turkish
+PropertyName6=L2
+PropertyType6=3
+PropertyValue6=AnotherLocale2
+PropertyLocale6=1 //English
+PropertyName7=L2
+PropertyType7=3
+PropertyValue7=DigerYerel2
+PropertyLocale7=14 //Turkish
+
+[third_component_properties]
+ComponentIdOffset=0
+PropertiesCount=8
+PropertyName0=S1
+PropertyType0=1
+PropertyValue0=AnotherValue1
+PropertyName1=S2
+PropertyType1=1
+PropertyValue1=Value2
+PropertyName2=I1
+PropertyType2=2
+PropertyValue2=11
+PropertyName3=I2
+PropertyType3=2
+PropertyValue3=22
+PropertyName4=L1
+PropertyType4=3
+PropertyValue4=AnotherLocale1
+PropertyLocale4=1 //English
+PropertyName5=L1
+PropertyType5=3
+PropertyValue5=DigerYerel1
+PropertyLocale5=14 //Turkish
+PropertyName6=L2
+PropertyType6=3
+PropertyValue6=AnotherLocale2
+PropertyLocale6=1 //English
+PropertyName7=L2
+PropertyType7=3
+PropertyValue7=DigerYerel2
+PropertyLocale7=14 //Turkish
+
+[get_components_with_integer_property1]
+FilterPropertiesCount=1
+FilterPropertyName0=I1
+FilterIntProperty0=11
+ComponentsCount=2
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=0
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+GlobalIdName1=
+SoftwareType1=plain
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+
+[get_components_with_integer_property2]
+FilterPropertiesCount=1
+FilterPropertyName0=I2
+FilterIntProperty0=2
+SetSize=2
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=1
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+
+[get_components_with_string_property1]
+FilterPropertiesCount=1
+FilterPropertyName0=S1
+FilterStringProperty0=Value1
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=1
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+
+[get_components_with_string_property2]
+FilterPropertiesCount=1
+FilterPropertyName0=S2
+FilterStringProperty0=AnotherValue2
+ComponentsCount=1
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+
+[get_components_with_localized_property1]
+FilterPropertiesCount=1
+FilterPropertyName0=L1
+FilterStringProperty0=Locale1
+FilterPropertyLocale0=1 //English
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=1
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+
+[get_components_with_localized_property2]
+FilterPropertiesCount=1
+FilterPropertyName0=L2
+FilterStringProperty0=DigerYerel2
+FilterPropertyLocale0=14 //Turkish
+ComponentsCount=2
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=0
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+
+// SEC-SCR-API-0023
+
+[files_to_first_component]
+ComponentIdOffset=2
+FileCount=2
+FileName0=c:\f1.txt
+FileName1=d:\f2.txt
+
+[files_to_second_component]
+ComponentIdOffset=1
+FileCount=2
+FileName0=d:\f2.txt
+FileName1=e:\f3.txt
+
+[files_to_third_component]
+ComponentIdOffset=0
+FileCount=2
+FileName0=c:\f1.txt
+FileName1=e:\f3.txt
+
+[get_components_with_file1]
+FilterFile=c:\f1.txt
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C,D
+Version0=
+ComponentIdOffset1=0
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=C,E
+Version1=
+
+[get_components_with_file2]
+FilterFile=d:\f2.txt
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C,D
+Version0=
+ComponentIdOffset1=1
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=D,E
+Version1=
+
+[get_components_with_file3]
+FilterFile=e:\f3.txt
+ComponentsCount=2
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=D,E
+Version0=
+ComponentIdOffset1=0
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=C,E
+Version1=
+
+
+// SEC-SCR-API-0024
+
+[update_first_component_attributes]
+ComponentIdOffset=0
+Version=1.2.3
+Removable=True
+DrmProtected=False
+Hidden=True
+KnownRevoked=False
+OriginVerified=True
+ComponentSize=1024
+ComponentName=GeneralComponent
+VendorName=Symbian
+PropertyLocale=1 //English
+
+[update_second_component_attributes]
+ComponentIdOffset=1
+Version=4.5.6
+Removable=False
+DrmProtected=True
+Hidden=False
+KnownRevoked=True
+OriginVerified=False
+ComponentSize=2048
+ComponentName=GeneralComponent
+VendorName=Symbian
+PropertyLocale=1 //English
+
+[get_removable_components]
+FilterIsRemovable=True
+ComponentsCount=1
+ComponentIdOffset0=0
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+DrmProtected0=False
+Hidden0=True
+KnownRevoked0=False
+OriginVerified0=True
+ComponentSize0=1024
+ScomoState0=0
+InstalledDrives0=
+Version0=1.2.3
+
+[get_unremovable_components]
+FilterIsRemovable=False
+ComponentsCount=1
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=False
+DrmProtected0=True
+Hidden0=False
+KnownRevoked0=True
+OriginVerified0=False
+ComponentSize0=2048
+ScomoState0=0
+InstalledDrives0=
+Version0=4.5.6
+
+[get_drmprotected_components]
+FilterIsDrmProtected=True
+ComponentsCount=1
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=False
+DrmProtected0=True
+Hidden0=False
+KnownRevoked0=True
+OriginVerified0=False
+ComponentSize0=2048
+ScomoState0=0
+InstalledDrives0=
+Version0=4.5.6
+
+[get_drmunprotected_components]
+FilterIsDrmProtected=False
+ComponentsCount=1
+ComponentIdOffset0=0
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+DrmProtected0=False
+Hidden0=True
+KnownRevoked0=False
+OriginVerified0=True
+ComponentSize0=1024
+ScomoState0=0
+InstalledDrives0=
+Version0=1.2.3
+
+[get_hidden_components]
+FilterIsHidden=True
+ComponentsCount=1
+ComponentIdOffset0=0
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+DrmProtected0=False
+Hidden0=True
+KnownRevoked0=False
+OriginVerified0=True
+ComponentSize0=1024
+ScomoState0=0
+InstalledDrives0=
+Version0=1.2.3
+
+[get_nonhidden_components]
+FilterIsHidden=False
+ComponentsCount=1
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=False
+DrmProtected0=True
+Hidden0=False
+KnownRevoked0=True
+OriginVerified0=False
+ComponentSize0=2048
+ScomoState0=0
+InstalledDrives0=
+Version0=4.5.6
+
+[get_knownrevoked_components]
+FilterIsKnownRevoked=True
+ComponentsCount=1
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=False
+DrmProtected0=True
+Hidden0=False
+KnownRevoked0=True
+OriginVerified0=False
+ComponentSize0=2048
+ScomoState0=0
+InstalledDrives0=
+Version0=4.5.6
+
+[get_knownunrevoked_components]
+FilterIsKnownRevoked=False
+ComponentsCount=1
+ComponentIdOffset0=0
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+DrmProtected0=False
+Hidden0=True
+KnownRevoked0=False
+OriginVerified0=True
+ComponentSize0=1024
+ScomoState0=0
+InstalledDrives0=
+Version0=1.2.3
+
+[get_originverified_components]
+FilterIsOriginVerified=True
+ComponentsCount=1
+ComponentIdOffset0=0
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+DrmProtected0=False
+Hidden0=True
+KnownRevoked0=False
+OriginVerified0=True
+ComponentSize0=1024
+ScomoState0=0
+InstalledDrives0=
+Version0=1.2.3
+
+[get_originnonverified_components]
+FilterIsOriginVerified=False
+ComponentsCount=1
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=False
+DrmProtected0=True
+Hidden0=False
+KnownRevoked0=True
+OriginVerified0=False
+ComponentSize0=2048
+ScomoState0=0
+InstalledDrives0=
+Version0=4.5.6
+
+// SEC-SCR-API-0025
+
+[update_component_scomostate]
+ComponentIdOffset=1
+ScomoState=1
+
+[get_non_activated_components]
+FilterScomoState=1
+ComponentsCount=1
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=False
+DrmProtected0=True
+Hidden0=False
+KnownRevoked0=True
+OriginVerified0=False
+ComponentSize0=2048
+ScomoState0=1
+InstalledDrives0=
+Version0=4.5.6
+
+
+// SEC-SCR-API-0027
+
+[files_of_first_component]
+ComponentIdOffset=2
+FileCount=4
+FileName0=c:\component28.txt
+FileName1=d:\component28.txt
+FileName2=x:\component28.txt
+FileName3=z:\component28.txt
+
+[files_of_second_component]
+ComponentIdOffset=1
+FileCount=3
+FileName0=c:\component29.txt
+FileName1=e:\component29.txt
+FileName2=x:\component29.txt
+
+[files_of_third_component]
+ComponentIdOffset=0
+FileCount=2
+FileName0=x:\component30.txt
+FileName1=z:\component30.txt
+
+[components_on_driveC]
+FilterDrivesList=C
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C,D,X,Z
+Version0=
+ComponentIdOffset1=1
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=C,E,X
+Version1=
+
+[components_on_driveD]
+FilterDrivesList=D
+ComponentsCount=1
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C,D,X,Z
+Version0=
+
+[components_on_driveX]
+FilterDrivesList=X
+ComponentsCount=3
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C,D,X,Z
+Version0=
+ComponentIdOffset1=1
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=C,E,X
+Version1=
+ComponentIdOffset2=0
+ComponentName2=GeneralComponent
+VendorName2=Symbian
+SoftwareType2=plain
+GlobalIdName2=
+Removable2=True
+ComponentSize2=0
+ScomoState2=0
+InstalledDrives2=X,Z
+Version2=
+
+[components_on_driveZ]
+FilterDrivesList=Z
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C,D,X,Z
+Version0=
+ComponentIdOffset1=0
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=X,Z
+Version1=
+
+[components_on_driveCE]
+FilterDrivesList=C,E
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C,D,X,Z
+Version0=
+ComponentIdOffset1=1
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=C,E,X
+Version1=
+
+[components_on_driveCZ]
+FilterDrivesList=C,Z
+ComponentsCount=3
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C,D,X,Z
+Version0=
+ComponentIdOffset1=1
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=C,E,X
+Version1=
+ComponentIdOffset2=0
+ComponentName2=GeneralComponent
+VendorName2=Symbian
+SoftwareType2=plain
+GlobalIdName2=
+Removable2=True
+ComponentSize2=0
+ScomoState2=0
+InstalledDrives2=X,Z
+Version2=
+
+
+// SEC-SCR-API-0027
+
+[first_registration_of_file]
+ComponentIdOffset=1
+FileCount=1
+FileName0=y:\multiple_registered.txt
+
+[second_registration_of_file]
+ComponentIdOffset=0
+FileCount=1
+FileName0=y:\multiple_registered.txt
+
+[get_components_with_multiply_registered_file_1]
+FilterFile=y:\multiple_registered.txt
+ComponentsCount=2
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=Y
+Version0=
+ComponentIdOffset1=0
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=Y
+Version1=
+
+[unregister_first_component_file]
+ComponentIdOffset=1
+FileName=y:\multiple_registered.txt
+
+[get_components_with_multiply_registered_file_2]
+FilterFile=y:\multiple_registered.txt
+ComponentsCount=1
+ComponentIdOffset0=0
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=Y
+Version0=
+
+[unregister_second_component_file]
+ComponentIdOffset=0
+FileName=y:\multiple_registered.txt
+
+[get_components_with_multiply_registered_file_3]
+FilterFile=y:\multiple_registered.txt
+ComponentsCount=0
+ComponentIdOffset0=0
+
+
+// SEC-SCR-API-0028
+
+[transaction_component]
+SoftwareType=plain
+ComponentName=TransactionComponent
+VendorName=Symbian
+FileName=c:\transaction_test.txt
+PropertyName=TransactionProperty
+PropertyType=2
+PropertyValue=333
+
+[transaction_component_attributes]
+ComponentIdOffset=0
+ComponentName=TransactionComponent
+VendorName=Symbian
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=C
+Version=
+
+[transaction_component_properties_rollback]
+ComponentIdOffset=0
+PropertiesCount=0
+PropertyName0=TransactionProperty
+PropertyType0=2
+PropertyValue0=333
+
+[transaction_component_properties_commit]
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=TransactionProperty
+PropertyType0=2
+PropertyValue0=333
+
+[transaction_files]
+ComponentIdOffset=0
+FileCount=1
+FileName0=c:\transaction_test.txt
+
+// SEC-SCR-API-0029
+
+[commit_common_component]
+SoftwareType=plain
+ComponentName=TransactionComponent
+VendorName=Symbian
+FileName=c:\transaction_test.txt
+PropertyName=TransactionProperty
+PropertyType=2
+PropertyValue=333
+CommitTransaction=True
+
+
+// SEC-SCR-API-0030
+
+[cancel_common_component]
+SoftwareType=plain
+ComponentName=TransactionComponent
+VendorName=Symbian
+FileName=c:\transaction_test.txt
+PropertyName=TransactionProperty
+PropertyType=2
+PropertyValue=333
+CancelTransaction=True
+
+// SEC-SCR-API-0031
+
+[begin_before_subsession]
+BeginTransactionBeforeSubsession=True
+
+[open_reading_in_same_session]
+OpenSubsessionInTheSameSession=True
+
+// SEC-SCR-API-0032
+
+[begin_after_subsession]
+BeginTransactionAfterSubsession=True
+
+[begin_after_subsession_in_same_session]
+BeginTransactionInTheSameSession=True
+
+[mutating_operation_with_subsession]
+MutatingOperationWithSubsession=True
+
+// SEC-SCR-API-0033
+
+[begin_after_another_begin]
+BeginTransactionAfterAnotherBegin=True
+
+
+// SEC-SCR-API-0034
+
+[commit_another_transaction]
+CommitTransaction=True
+
+[another_transaction_mutating]
+InvokeMutatingFunction=True
+
+[another_transaction_nonmutating]
+InvokeNonMutatingFunction=True
+
+// SEC-SCR-API-0035
+
+[cancel_another_transaction]
+CancelTransaction=True
+
+
+// SEC-SCR-API-0036
+
+[multiple_subsessions]
+MultipleSubsessions=True
+
+[multiple_active_subsessions]
+MultipleActiveSubsessions=True
+
+// SEC-SCR-API-0037
+
+[write_after_begin]
+WriteAfterBeginTransaction=True
+
+
+// SEC-SCR-API-0038
+
+[read_after_begin]
+ReadAfterBeginTransaction=True
+
+
+// SEC-SCR-API-0039
+
+[all_components]
+ComponentsCount=3
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=1
+ComponentName1=ComponentOne
+VendorName1=VendorOne
+SoftwareType1=dummy
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+ComponentIdOffset2=0
+ComponentName2=GeneralComponent
+VendorName2=Symbian
+SoftwareType2=plain
+GlobalIdName2=
+Removable2=True
+ComponentSize2=0
+ScomoState2=0
+InstalledDrives2=
+Version2=
+
+
+// SEC-SCR-API-0040
+
+[concurrent_component_1]
+SoftwareType=plain
+ComponentName=ConcurrentComponent1
+VendorName=Symbian
+
+[concurrent_component_2]
+SoftwareType=plain
+ComponentName=ConcurrentComponent2
+VendorName=Symbian
+
+[concurrent_component1_attributes]
+ComponentIdOffset=1
+ComponentName=ConcurrentComponent1
+VendorName=Symbian
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[concurrent_component2_attributes]
+ComponentIdOffset=0
+ComponentName=ConcurrentComponent2
+VendorName=Symbian
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[concurrent_component_properties]
+ComponentIdOffset=1
+PropertiesCount=3
+PropertyName0=StringProperty
+PropertyType0=1
+PropertyValue0=astring
+PropertyName1=IntegerProperty
+PropertyType1=2
+PropertyValue1=111
+PropertyName2=LocalizedProperty
+PropertyType2=3
+PropertyValue2=alocalizedstring
+PropertyLocale2=1
+
+// SEC-SCR-API-0041
+
+[ismediapresent_positive_files_register1]
+ComponentIdOffset=0
+FileCount=1
+FileName0=c:\a.txt
+
+[ismediapresent_positive_files_register2]
+ComponentIdOffset=1
+FileCount=4
+FileName0=c:\a.txt
+FileName1=c:\abc\b.txt
+FileName2=Z:\a.txt
+FileName3=z:\def\b.txt
+
+[ismediapresent_positive_files_check1]
+ExpectedMediaPresent=True
+ComponentIdOffset=0
+
+[ismediapresent_positive_files_check2]
+ExpectedMediaPresent=True
+ComponentIdOffset=1
+
+// SEC-SCR-API-0042
+
+[ismediapresent_negative_files_register1]
+ComponentIdOffset=0
+FileCount=1
+FileName0=q:\a.txt
+
+[ismediapresent_negative_files_register2]
+ComponentIdOffset=1
+FileCount=5
+FileName0=c:\a.txt
+FileName1=c:\abc\b.txt
+FileName2=C:\b.txt
+FileName3=Q:\def\b.txt
+FileName4=q:\def\e.txt
+
+[ismediapresent_negative_files_check1]
+ExpectedMediaPresent=False
+ComponentIdOffset=0
+
+[ismediapresent_negative_files_check2]
+ExpectedMediaPresent=False
+ComponentIdOffset=1
+
+[ismediapresent_negative_non_existent_component]
+ExpectedMediaPresent=False
+ComponentId=1234567
+
+// SEC-SCR-API-0043
+
+[lower_case_property]
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=caseinsensitivepropertyname
+PropertyType0=1
+PropertyValue0=alllowercase
+
+[mixed_lower_case_property]
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=CAseInSENSitivePROPERtynamE
+PropertyType0=1
+PropertyValue0=miXedCasE
+
+[lower_case_file_name]
+ComponentIdOffset=0
+FileCount= 1
+FileName0=c:\case_insensitive_file.txt
+
+
+[filter_mixed_case_property_name]
+FilterPropertiesCount=1
+FilterPropertyName0=CaSeiNsensiTIVEproperTYnaMe
+FilterStrProperty0=alllowercase
+ComponentsCount=1
+ComponentIdOffset0=0
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C
+Version0=
+
+[filter_mixed_case_file_name]
+FilterFile=C:\caSE_inseNSitive_FILe.txt
+ComponentsCount=1
+ComponentIdOffset0=0
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C
+Version0=
+
+[case_insensitive_mimetype]
+MimeType=teXT/pLAiN
+PluginUid=271080402
+
+// SEC-SCR-API-0044
+[all_components_component_ids_test44]
+ComponentsCount=2
+ComponentIdOffset0=0
+ComponentIdOffset1=1 
+
+// SEC-SCR-API-0045
+[wrong_software_type_name]
+SoftwareType=justSomeDummySoftwareType
+ComponentName=GeneralComponent
+VendorName=Symbian
+
+[no_locales_in_add_component]
+SoftwareType=justSomeDummySoftwareType
+LocalesCount=0
+IsLocalisable=True
+
+[no_drive_file_name]
+ComponentIdOffset=0
+FileCount=1
+FileName0=test.fil
+
+[register_file_twice]
+ComponentIdOffset=0
+FileCount=1
+FileName0=c:\normal.fil
+
+[nonexisting_file_property]
+ComponentIdOffset=0
+FileName=c:\normal.fil
+PropertyName=ThisPropertyDoesNotExist
+PropertyType=1
+PropertyValue=def
+
+[unregister_file_twice]
+ComponentIdOffset=0
+FileName=c:\normal.fil
+
+[missing_single_property]
+ComponentIdOffset=0
+PropertyName=ThisPropertyDoesNotExist
+PropertyType=2
+PropertyValue=111
+
+[get_plugin_for_nonexisting_mimetype]
+MimeType=unknown/type
+PluginUid=271080388
+
+[set_negative_component_size]
+ComponentIdOffset=0
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=-667
+ComponentName=newName
+VendorName=newVendorName
+PropertyLocale=0
+
+[add_component_invalid_operation_type]
+SoftwareType=plain
+ComponentName=InvalidOpType
+VendorName=Symbian
+GlobalIdName=testglobalid
+OperationType=101
+
+// SEC-SCR-API-0046 (and other composite filter tests)
+[first_component_file]
+ComponentIdOffset=0
+FileCount=1
+FileName0=c:\normal.fil
+
+[third_component_file]
+ComponentIdOffset=2
+FileCount=1
+FileName0=c:\normal.fil
+
+[second_component_property]
+ComponentIdOffset=1
+PropertiesCount=1
+PropertyName0=TestProperty
+PropertyType0=1
+PropertyValue0=Test
+
+[fourth_component_property]
+ComponentIdOffset=3
+PropertiesCount=1
+PropertyName0=TestProperty
+PropertyType0=1
+PropertyValue0=Test
+
+[fourth_component_file]
+ComponentIdOffset=3
+FileCount=1
+FileName0=c:\normal.fil
+
+[get_components_with_file_and_property_empty]
+FilterPropertiesCount=1
+FilterPropertyName0=TestProperty
+FilterStringProperty0=Test
+FilterFile=c:\normal.fil
+ComponentsCount=0
+
+[get_components_with_file_and_property_fourth]
+FilterPropertiesCount=1
+FilterPropertyName0=TestProperty
+FilterStringProperty0=Test
+FilterFile=c:\normal.fil
+ComponentsCount=1
+ComponentIdOffset0=3
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C
+Version0=
+
+[filter_test_names_test49]
+SoftwareType=plain
+ComponentName=FilterTestComponent
+VendorName=FilterTestVendor
+
+[get_components_with_names_file_and_property_fourth]
+FilterPropertiesCount=1
+FilterPropertyName0=TestProperty
+FilterStringProperty0=Test
+FilterFile=c:\normal.fil
+FilterName=FilterTestComponent
+FilterVendor=FilterTestVendor
+ComponentsCount=1
+ComponentIdOffset0=3
+ComponentName0=FilterTestComponent
+VendorName0=FilterTestVendor
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=C
+Version0=
+
+[filter_test_names_vendor_test50]
+SoftwareType=plain
+ComponentName=GeneralComponent
+VendorName=FilterTestVendor
+
+[get_components_with_vendor_and_property_second]
+FilterPropertiesCount=1
+FilterPropertyName0=TestProperty
+FilterStringProperty0=Test
+FilterVendor=FilterTestVendor
+ComponentsCount=1
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=FilterTestVendor
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+
+// SEC-SCR-API-0051
+[single_int64_property]
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=SingleInt64Property
+PropertyType0=2
+PropertyValue0=72057594037927935
+
+[get_single_int64_property]
+ComponentIdOffset=0
+PropertyName=SingleInt64Property
+PropertyType=2
+PropertyValue=72057594037927935
+
+[update_single_int64_property]
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=SingleInt64Property
+PropertyType0=2
+PropertyValue0=72057594037927932
+
+[get_updated_int64_property]
+ComponentIdOffset=0
+PropertyName=SingleInt64Property
+PropertyType=2
+PropertyValue=72057594037927932
+
+[verify_in64_property_filter]
+FilterPropertiesCount=1
+FilterPropertyName0=SingleInt64Property
+FilterIntProperty0=72057594037927932
+ComponentsCount=1
+ComponentIdOffset0=0
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+
+[multiple_int64_properties]
+ComponentIdOffset=0
+PropertiesCount=3
+PropertyName0=StringProperty
+PropertyType0=1
+PropertyValue0=astring
+PropertyName1=IntegerProperty
+PropertyType1=2
+PropertyValue1=72057594037927932
+PropertyName2=LocalizedProperty
+PropertyType2=3
+PropertyValue2=alocalizedstring
+PropertyLocale2=1
+
+// SEC-SCR-API-0052
+
+[component1_test52]
+SoftwareType=plain
+ComponentName=ComponentA
+VendorName=FilterTestVendor
+
+[component2_test52]
+SoftwareType=plain
+ComponentName=ComponentB
+VendorName=FilterTestVendor
+
+[component3_test52]
+SoftwareType=plain
+ComponentName=ComponentC
+VendorName=FilterTestVendor
+
+[first_component_property_test52]
+ComponentIdOffset=0
+PropertiesCount=2
+PropertyName0=PropertyA
+PropertyType0=1
+PropertyValue0=Test
+PropertyName1=PropertyB
+PropertyType1=2
+PropertyValue1=1
+
+[second_component_property_test52]
+ComponentIdOffset=1
+PropertiesCount=2
+PropertyName0=PropertyB
+PropertyType0=2
+PropertyValue0=1
+PropertyName1=PropertyC
+PropertyType1=2
+PropertyValue1=2
+
+[third_component_property_test52]
+ComponentIdOffset=2
+PropertiesCount=3
+PropertyName0=PropertyA
+PropertyType0=1
+PropertyValue0=Test
+PropertyName1=PropertyB
+PropertyType1=2
+PropertyValue1=1
+PropertyName2=PropertyC
+PropertyType2=2
+PropertyValue2=2
+
+[get_components_with_int_properties_test52]
+FilterPropertiesCount=2
+FilterPropertyName0=PropertyB
+FilterIntProperty0=1
+FilterPropertyName1=PropertyC
+FilterIntProperty1=2
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=ComponentC
+VendorName0=FilterTestVendor
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=1
+ComponentName1=ComponentB
+VendorName1=FilterTestVendor
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+
+[get_components_with_str_int_property_test52]
+FilterPropertiesCount=2
+FilterPropertyName0=PropertyA
+FilterStringProperty0=Test
+FilterPropertyName1=PropertyB
+FilterIntProperty1=1
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=ComponentC
+VendorName0=FilterTestVendor
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=0
+ComponentName1=ComponentA
+VendorName1=FilterTestVendor
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+
+// SEC-SCR-API-0053
+[verify_first_component_count_test53]
+ComponentIdOffset=0
+ExpectedFilesCount=2
+
+[verify_second_component_count_test53]
+ComponentIdOffset=1
+ExpectedFilesCount=0
+
+// SEC-SCR-API-0054
+[component1_test54]
+SoftwareType=plain
+ComponentName=RightComponent
+VendorName=RightVendor
+
+[component2_test54]
+SoftwareType=plain
+ComponentName=RightComponent
+VendorName=WrongVendor
+
+[component3_test54]
+SoftwareType=plain
+ComponentName=RightComponent
+VendorName=RightVendor
+
+[component4_test54]
+SoftwareType=plain
+ComponentName=WrongComponent
+VendorName=RightVendor
+
+[component5_test54]
+SoftwareType=dummy
+ComponentName=RightComponent
+VendorName=RightVendor
+
+[get_components_subsession_test54]
+FilterSoftwareType=plain
+FilterName=RightComponent
+FilterVendor=RightVendor
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=RightComponent
+VendorName0=RightVendor
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=4
+ComponentName1=RightComponent
+VendorName1=RightVendor
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+
+[get_component_ids_test54]
+FilterSoftwareType=plain
+FilterName=RightComponent
+FilterVendor=RightVendor
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentIdOffset1=4
+
+// SEC-SCR-API-0055
+[huge_component_test55_update]
+ComponentIdOffset=0
+Version=0.1
+Removable=False
+DrmProtected=False
+Hidden=False
+KnownRevoked=False
+OriginVerified=False
+ComponentName=UpdatedName
+VendorName=UpdatedVendor
+PropertyLocale=6
+ComponentSize=281474976710655
+
+[huge_component_test55_verify]
+ComponentsCount=1
+ComponentIdOffset0=0
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=False
+ComponentSize0=281474976710655
+ScomoState0=0
+InstalledDrives0=
+Version0=0.1
+
+// SEC-SCR-API-0057
+[component1_test57]
+SoftwareType=plain
+ComponentName=Component1
+VendorName=Symbian
+
+[component2_test57]
+SoftwareType=plain
+ComponentName=Component2
+VendorName=Symbian
+
+[component3_test57]
+SoftwareType=plain
+ComponentName=Component3
+VendorName=Symbian
+
+[component1_properties]
+ComponentIdOffset=2
+PropertiesCount=2
+PropertyName0=TestProperty
+PropertyType0=3
+PropertyValue0=EnglishValue
+PropertyLocale0=1
+PropertyName1=TestProperty
+PropertyType1=3
+PropertyValue1=JustValue
+PropertyLocale1=0 // KLangNone
+
+[component2_properties]
+ComponentIdOffset=1
+PropertiesCount=2
+PropertyName0=TestProperty
+PropertyType0=3
+PropertyValue0=EnglishValue
+PropertyLocale0=1
+PropertyName1=TestProperty
+PropertyType1=3
+PropertyValue1=JustValue
+PropertyLocale1=0 // KLangNone
+
+[component3_properties]
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=TestProperty
+PropertyType0=3
+PropertyValue0=EnglishValue
+PropertyLocale0=0
+
+[get_components_english_property_test57]
+FilterPropertiesCount=1
+FilterPropertyName0=TestProperty
+FilterStringProperty0=EnglishValue
+FilterPropertyLocale0=1 //English
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=Component1
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=1
+ComponentName1=Component2
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+
+[get_components_any_property_test57]
+FilterPropertiesCount=1
+FilterPropertyName0=TestProperty
+FilterStringProperty0=EnglishValue
+FilterPropertyLocale0=-1 //KLangUnspecified
+ComponentsCount=3
+ComponentIdOffset0=2
+ComponentName0=Component1
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+ComponentIdOffset1=1
+ComponentName1=Component2
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=True
+ComponentSize1=0
+ScomoState1=0
+InstalledDrives1=
+Version1=
+ComponentIdOffset2=0
+ComponentName2=Component3
+VendorName2=Symbian
+SoftwareType2=plain
+GlobalIdName2=
+Removable2=True
+ComponentSize2=0
+ScomoState2=0
+InstalledDrives2=
+Version2=
+
+[get_components_negative_property_test57]
+FilterPropertiesCount=1
+FilterPropertyName0=TestProperty
+FilterStringProperty0=EnglishValue
+FilterPropertyLocale0=6 //KLangSwedish
+ComponentsCount=0
+
+// SEC-SCR-API-0058
+
+[component_with_global_id]
+SoftwareType=plain
+ComponentName=GeneralComponent
+VendorName=Symbian
+GlobalIdName=uniqueglobalid
+
+[component_attributes_with_global_id]
+ComponentIdOffset=0
+ComponentName=GeneralComponent
+VendorName=Symbian
+SoftwareType=plain
+GlobalIdName=uniqueglobalid
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[component_with_]
+
+// SEC-SCR-API-0059
+
+[supplier_component]
+SoftwareType=plain
+ComponentName=SupplierComponent1
+VendorName=Symbian
+GlobalIdName=suppliercomponent1globalid
+
+[supplier_component_globalid]
+GlobalIdName=suppliercomponent1globalid
+SoftwareType=plain
+ComponentIdOffset=0
+
+[dependant_component]
+SoftwareType=dummy
+ComponentName=DependantComponent1
+VendorName=Symbian
+GlobalIdName=dependantcomponent1globalid
+
+[dependant_component_globalid]
+ComponentIdOffset=0
+ComponentName=DependantComponent1
+VendorName=Symbian
+SoftwareType=dummy
+GlobalIdName=dependantcomponent1globalid
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[dependency_with_existing_components]
+SupplierGlobalIdName=suppliercomponent1globalid
+SupplierSwTypeName=plain
+DependantGlobalIdName=dependantcomponent1globalid
+DependantSwTypeName=dummy
+
+[dependant_components]
+GlobalIdType=Supplier
+GlobalIdName=suppliercomponent1globalid
+SoftwareType=plain
+GlobalIdCount=1
+GlobalIdName0=dependantcomponent1globalid
+SoftwareType0=dummy
+
+[supplier_components]
+GlobalIdType=Dependant
+GlobalIdName=dependantcomponent1globalid
+SoftwareType=dummy
+GlobalIdCount=1
+GlobalIdName0=suppliercomponent1globalid
+SoftwareType0=plain
+
+[deleted_supplier]
+GlobalIdType=Supplier
+GlobalIdName=suppliercomponent1globalid
+SoftwareType=plain
+GlobalIdCount=0
+
+[deleted_dependant]
+GlobalIdType=Dependant
+GlobalIdName=dependantcomponent1globalid
+SoftwareType=dummy
+GlobalIdCount=0
+
+[second_supplier_component]
+SoftwareType=dummy
+ComponentName=SupplierComponent2
+VendorName=Symbian
+GlobalIdName=suppliercomponent2globalid
+
+[dependency_with_second_supplier]
+SupplierGlobalIdName=suppliercomponent2globalid
+SupplierSwTypeName=dummy
+DependantGlobalIdName=dependantcomponent1globalid
+DependantSwTypeName=dummy
+
+[all_supplier_components]
+GlobalIdType=Dependant
+GlobalIdName=dependantcomponent1globalid
+SoftwareType=dummy
+GlobalIdCount=2
+GlobalIdName0=suppliercomponent1globalid
+SoftwareType0=plain
+GlobalIdName1=suppliercomponent2globalid
+SoftwareType1=dummy
+
+[second_dependant_component]
+SoftwareType=plain
+ComponentName=DependantComponent2
+VendorName=Symbian
+GlobalIdName=dependantcomponent2globalid
+
+[dependency_with_second_dependant]
+SupplierGlobalIdName=suppliercomponent2globalid
+SupplierSwTypeName=dummy
+DependantGlobalIdName=dependantcomponent2globalid
+DependantSwTypeName=plain
+
+[all_dependant_components]
+GlobalIdType=Supplier
+GlobalIdName=suppliercomponent2globalid
+SoftwareType=dummy
+GlobalIdCount=2
+GlobalIdName0=dependantcomponent2globalid
+SoftwareType0=plain
+GlobalIdName1=dependantcomponent1globalid
+SoftwareType1=dummy
+
+[dependency_to_nonexisting_component]
+SupplierGlobalIdName=nonexistingsuppliercomponentglobalid
+SupplierSwTypeName=nonexistinginstaller
+DependantGlobalIdName=dependantcomponent2globalid
+DependantSwTypeName=plain
+
+[existing_and_nonexisting_suppliers]
+GlobalIdType=Dependant
+GlobalIdName=dependantcomponent2globalid
+SoftwareType=plain
+GlobalIdCount=2
+GlobalIdName0=nonexistingsuppliercomponentglobalid
+SoftwareType0=nonexistinginstaller
+GlobalIdName1=suppliercomponent2globalid
+SoftwareType1=dummy
+
+[delete_second_dependant]
+ComponentIdOffset=0
+
+[suppliers_of_deleted_dependant]
+GlobalIdType=Dependant
+GlobalIdName=dependantcomponent2globalid
+SoftwareType=plain
+GlobalIdCount=0
+
+[delete_first_supplier]
+ComponentIdOffset=3
+
+[remained_dependencies]
+GlobalIdType=Supplier
+GlobalIdName=suppliercomponent1globalid
+SoftwareType=plain
+GlobalIdCount=1
+GlobalIdName0=dependantcomponent1globalid
+SoftwareType0=dummy
+
+[dependency_with_nonexisting_components]
+SupplierGlobalIdName=nonexistingsupplier
+SupplierSwTypeName=plain
+DependantGlobalIdName=nonexistingdependant
+DependantSwTypeName=plain
+
+[dependant_nonexisting_components]
+GlobalIdType=Supplier
+GlobalIdName=nonexistingsupplier
+SoftwareType=plain
+GlobalIdCount=1
+GlobalIdName0=nonexistingdependant
+SoftwareType0=plain
+
+[supplier_nonexisting_components]
+GlobalIdType=Dependant
+GlobalIdName=nonexistingdependant
+SoftwareType=plain
+GlobalIdCount=1
+GlobalIdName0=nonexistingsupplier
+SoftwareType0=plain
+
+// SEC-SCR-API-0061
+
+[update_first_component_attributes_test61]
+ComponentIdOffset=2
+Version=1.2.3
+Removable=True
+DrmProtected=True
+Hidden=True
+KnownRevoked=False
+OriginVerified=True
+ComponentSize=2048
+ComponentName=GeneralComponent
+VendorName=Symbian
+PropertyLocale=1 //English
+
+[update_second_component_attributes_test61]
+ComponentIdOffset=1
+Version=8.3.5
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=4096
+ComponentName=GeneralComponent
+VendorName=Symbian
+PropertyLocale=1 //English
+
+[update_third_component_attributes_test61]
+ComponentIdOffset=0
+Version=5.6.6
+Removable=False
+DrmProtected=False
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=512
+ComponentName=GeneralComponent
+VendorName=Symbian
+PropertyLocale=1 //English
+
+[get_components_with_drm_hidden_common_properties]
+FilterIsDrmProtected=True
+FilterIsHidden=True
+ComponentsCount=2
+ComponentIdOffset0=2
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+DrmProtected0=True
+Hidden0=True
+KnownRevoked0=False
+OriginVerified0=True
+ComponentSize0=2048
+ScomoState0=0
+InstalledDrives0=
+Version0=1.2.3
+ComponentIdOffset1=1
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=False
+DrmProtected1=True
+Hidden1=True
+KnownRevoked1=True
+OriginVerified1=True
+ComponentSize1=4096
+ScomoState1=0
+InstalledDrives1=
+Version1=8.3.5
+
+[get_components_with_originverified_knownrevoked_properties]
+FilterIsOriginVerified=True
+FilterIsKnownRevoked=True
+ComponentsCount=2
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=False
+DrmProtected0=True
+Hidden0=True
+KnownRevoked0=True
+OriginVerified0=True
+ComponentSize0=4096
+ScomoState0=0
+InstalledDrives0=
+Version0=8.3.5
+ComponentIdOffset1=0
+ComponentName1=GeneralComponent
+VendorName1=Symbian
+SoftwareType1=plain
+GlobalIdName1=
+Removable1=False
+DrmProtected1=False
+Hidden1=True
+KnownRevoked1=True
+OriginVerified1=True
+ComponentSize1=512
+ScomoState1=0
+InstalledDrives1=
+Version1=5.6.6
+
+[get_components_with_common_and_customized_attributes]
+FilterIsDrmProtected=True
+FilterPropertiesCount=1
+FilterPropertyName0=TestProperty
+FilterStringProperty0=Test
+ComponentsCount=1
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=False
+DrmProtected0=True
+Hidden0=True
+KnownRevoked0=True
+OriginVerified0=True
+ComponentSize0=4096
+ScomoState0=0
+InstalledDrives0=
+Version0=8.3.5
+
+// SEC-SCR-API-0062
+
+[versioned_dependency]
+SupplierGlobalIdName=suppliercomponent1globalid
+SupplierSwTypeName=plain
+VersionFrom=1.2.3
+VersionTo=9.8.7
+DependantGlobalIdName=dependantcomponent1globalid
+DependantSwTypeName=dummy
+
+
+[versioned_dependant_components]
+GlobalIdType=Supplier
+GlobalIdName=suppliercomponent1globalid
+SoftwareType=plain
+GlobalIdCount=1
+GlobalIdName0=dependantcomponent1globalid
+SoftwareType0=dummy
+VersionFrom0=1.2.3
+VersionTo0=9.8.7
+
+[versioned_supplier_components]
+GlobalIdType=Dependant
+GlobalIdName=dependantcomponent1globalid
+SoftwareType=dummy
+GlobalIdCount=1
+GlobalIdName0=suppliercomponent1globalid
+SoftwareType0=plain
+VersionFrom0=1.2.3
+VersionTo0=9.8.7
+
+[versioned_dependency_with_second_supplier]
+SupplierGlobalIdName=suppliercomponent2globalid
+SupplierSwTypeName=dummy
+VersionFrom=
+VersionTo=2.3.110
+DependantGlobalIdName=dependantcomponent1globalid
+DependantSwTypeName=dummy
+
+[versioned_all_supplier_components]
+GlobalIdType=Dependant
+GlobalIdName=dependantcomponent1globalid
+SoftwareType=dummy
+GlobalIdCount=2
+GlobalIdName0=suppliercomponent1globalid
+SoftwareType0=plain
+VersionFrom0=1.2.3
+VersionTo0=9.8.7
+GlobalIdName1=suppliercomponent2globalid
+SoftwareType1=dummy
+VersionFrom1=
+VersionTo1=2.3.110
+
+[versioned_dependency_with_second_dependant]
+SupplierGlobalIdName=suppliercomponent2globalid
+SupplierSwTypeName=dummy
+VersionFrom=1.45.987
+VersionTo=
+DependantGlobalIdName=dependantcomponent2globalid
+DependantSwTypeName=plain
+
+[versioned_all_dependant_components]
+GlobalIdType=Supplier
+GlobalIdName=suppliercomponent2globalid
+SoftwareType=dummy
+GlobalIdCount=2
+GlobalIdName0=dependantcomponent2globalid
+SoftwareType0=plain
+VersionFrom0=1.45.987
+VersionTo0=
+GlobalIdName1=dependantcomponent1globalid
+SoftwareType1=dummy
+VersionFrom1=
+VersionTo1=2.3.110
+
+// SEC-SCR-API-0063
+
+[add_nonlocalized_software_type]
+OperationType=NonLocalized
+
+[component_nonlocalized_software_type]
+SoftwareType=test_nonlocalizedinstaller_uniquename
+ComponentName=GeneralComponent
+VendorName=SymbianSecurityTeam
+
+[add_localized_software_type]
+OperationType=Localized
+
+[component_localized_software_type]
+SoftwareType=test_localizedinstaller_uniquename
+ComponentName=GeneralComponent
+VendorName=Symbian
+
+[add_software_type_without_mime_types]
+OperationType=NoMimeType
+
+[non_orphaned_component]
+ExpectedComponentOrphaned=False
+ComponentIdOffset=0
+
+[orphaned_component]
+ExpectedComponentOrphaned=True
+ComponentIdOffset=1
+
+[orphaned_component_attributes]
+ComponentIdOffset=1
+ComponentName=GeneralComponent
+VendorName=SymbianSecurityTeam
+SoftwareType=test_nonlocalizedinstaller_uniquename
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_orphaned_component_by_vendor]
+FilterVendor=SymbianSecurityTeam
+ComponentsCount=1
+ComponentIdOffset0=1
+ComponentName0=GeneralComponent
+VendorName0=SymbianSecurityTeam
+SoftwareType0=test_nonlocalizedinstaller_uniquename
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=
+Version0=
+
+[orphaned_non_existing_component]
+ExpectedComponentOrphaned=False
+ComponentId=123456
+
+[update_orphaned_component_attributes]
+ComponentIdOffset=1
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=12345
+ComponentName=UpdatedComponentName
+VendorName=UpdatedVendorName
+PropertyLocale=10
+
+[orphaned_component_files]
+ComponentIdOffset=1
+FileCount= 2
+FileName0=c:\logs\orphaned_test0.txt
+FileName1=z:\logs\orphaned_test1.txt
+
+[orphaned_component_properties]
+ComponentIdOffset=1
+PropertiesCount=1
+PropertyName0=OrphanedStringProperty
+PropertyType0=1
+PropertyValue0=orphanedstring
+
+[non_orphaned_component_after_reinstalling_swtype]
+ExpectedComponentOrphaned=False
+ComponentIdOffset=1
+
+[add_localized_software_type_with_different_plugin_uid]
+OperationType=LocalizedWithDifferentPluginUid
+
+[add_localized_software_type_with_extra_name]
+OperationType=LocalizedWithExtraName
+
+[add_localized_software_type_with_missing_name]
+OperationType=LocalizedWithMissingName
+
+[add_localized_software_type_with_extra_mime]
+OperationType=LocalizedExtraMime
+
+[add_localized_software_type_with_missing_mime]
+OperationType=LocalizedMissingMime
+
+[add_multiple_sid_with_launcher_executable]
+OperationType=MultipleSidAndLauncherExecutable
+
+// SEC-SCR-API-0064
+[drives_management_register_files]
+ComponentIdOffset=0
+FileCount= 3
+FileName0=c:\test1.txt
+FileName1=c:\test2.txt
+FileName2=d:\test3.txt
+
+[drives_management_both_drives]
+ComponentIdOffset=0
+ComponentName=GeneralComponent
+VendorName=Symbian
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=C,D
+Version=
+
+[drives_management_c_drive]
+ComponentIdOffset=0
+ComponentName=GeneralComponent
+VendorName=Symbian
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=C
+Version=
+
+[drives_management_unregister_first_c_file]
+ComponentIdOffset=0
+FileName=c:\test1.txt
+
+[drives_management_unregister_second_c_file]
+ComponentIdOffset=0
+FileName=c:\test2.txt
+
+[drives_management_unregister_first_d_file]
+ComponentIdOffset=0
+FileName=d:\test3.txt
+
+// SEC-SCR-API-0065
+[component_with_localizables_test65]
+SoftwareType=plain
+IsLocalisable=True
+LocalesCount=1
+ComponentName0=Component_Test65
+VendorName0=SecurityTeam
+ComponentLocale0=1 //English
+
+[set_base_language_property_test65]
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=SingleLocalizedProperty
+PropertyType0=3
+PropertyValue0=alocalizedstring
+PropertyLocale0=1
+
+[get_base_language_property_test65]
+ComponentIdOffset=0
+PropertyName=SingleLocalizedProperty
+PropertyType=3
+PropertyValue=alocalizedstring
+PropertyLocale=1 
+
+[get_child_language_property_test65]
+ComponentIdOffset=0
+PropertyName=SingleLocalizedProperty
+PropertyType=3
+PropertyValue=alocalizedstring
+PropertyLocale=10
+
+[get_unspecified_language_property_test65]
+ComponentIdOffset=0
+PropertyName=SingleLocalizedProperty
+PropertyType=3
+PropertyValue=alocalizedstring
+PropertyLocale=-1
+
+[get_component_with_unspecified_names_test65]
+ComponentLocale=-1
+ComponentIdOffset=0
+ComponentName=Component_Test65
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_component_with_base_language_test65]
+ComponentLocale=1
+ComponentIdOffset=0
+ComponentName=Component_Test65
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[get_component_with_child_language_test65]
+ComponentLocale=10
+ComponentIdOffset=0
+ComponentName=Component_Test65
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+// SEC-SCR-API-0066
+
+[common_component_names_with_version]
+SoftwareType=plain
+ComponentName=GeneralComponent
+VendorName=Symbian
+Version=1.2.3
+
+[update_common_component_names]
+SoftwareType=plain
+ComponentName=UpdatedGeneralComponent
+VendorName=Symbian
+GlobalIdName=updatedglobalid
+OperationType=2
+
+[log_entries]
+LogsCount=3
+ComponentName0=GeneralComponent
+SoftwareType0=plain
+Version0=1.2.3
+GlobalIdName0=
+OperationType0=0
+ComponentName1=GeneralComponent
+SoftwareType1=plain
+Version1=1.2.3
+GlobalIdName1=
+OperationType1=1
+ComponentName2=UpdatedGeneralComponent
+SoftwareType2=plain
+Version2=
+GlobalIdName2=updatedglobalid
+OperationType2=2
+
+[dummy_log_entries]
+LogsCount=1
+SoftwareType=dummy
+ComponentName0=ComponentOne
+SoftwareType0=dummy
+Version0=
+GlobalIdName0=
+OperationType0=0
+
+[component_with_currentlocale_name]
+SoftwareType=plain
+IsLocalisable=True
+LocalesCount=3
+ComponentName0=Cåmponent_N2
+VendorName0=SäkerhetLag
+ComponentLocale0=6 //Swedish
+ComponentName1=Component_NoLocale
+VendorName1=SecurityTeam
+ComponentLocale1=0
+ComponentName2=Component_CurrentLocale
+VendorName2=SecurityTeam
+ComponentLocale2=1 //English
+
+[component_with_nonlocalized_name]
+SoftwareType=plain
+IsLocalisable=True
+LocalesCount=2
+ComponentName0=Cåmponent_N2
+VendorName0=SäkerhetLag
+ComponentLocale0=6 //Swedish
+ComponentName1=Component_NoLocale
+VendorName1=SecurityTeam
+ComponentLocale1=0
+
+[component_with_localized_name]
+SoftwareType=plain
+IsLocalisable=True
+LocalesCount=2
+ComponentName0=Cåmponent_N2
+VendorName0=SäkerhetLag
+ComponentLocale0=6 //Swedish
+ComponentName1=Component_French
+VendorName1=SecurityTeam
+ComponentLocale1=2
+
+[name_log_entries]
+LogsCount=3
+ComponentName0=Component_CurrentLocale
+SoftwareType0=plain
+Version0=
+GlobalIdName0=
+OperationType0=0
+ComponentName1=Component_NoLocale
+SoftwareType1=plain
+Version1=
+GlobalIdName1=
+OperationType1=0
+ComponentName2=Cåmponent_N2
+SoftwareType2=plain
+Version2=
+GlobalIdName2=
+OperationType2=0
+
+[readonly_log_entries]
+LogsCount=1
+ComponentName0=GeneralComponent
+SoftwareType0=plain
+Version0=1.2.3
+GlobalIdName0=
+OperationType0=0
+
+[writable_log_entries]
+LogsCount=2
+ComponentName0=GeneralComponent
+SoftwareType0=plain
+Version0=1.2.3
+GlobalIdName0=
+OperationType0=0
+ComponentName1=GeneralComponent
+SoftwareType1=plain
+Version1=
+GlobalIdName1=
+OperationType1=0
+
+[hidden_common_component_names]
+SoftwareType=plain
+ComponentName=RomGeneralComponent
+VendorName=Symbian
+GlobalIdName=romglobalid
+OperationType=3
+
+[hidden_log_entries]
+LogsCount=0
+
+[read_only_log_file]
+LogFileReadOnly=True
+
+[writable_log_file]
+LogFileReadOnly=False
+
+[log_file_size]
+LogsCount=1001
+
+// SEC-SCR-API-0067
+
+[less_version_1]
+VersionLeft=1.2.32.4
+VersionRight=1.3
+ExpectedResult=-1
+
+[less_version_2]
+VersionLeft=1.2
+VersionRight=1.2.1
+ExpectedResult=-1
+
+[less_version_3]
+VersionLeft=1.2
+VersionRight=1.2.0.0.1
+ExpectedResult=-1
+
+[great_version_1]
+VersionLeft=1.2.32.4.67890
+VersionRight=1.2.32.4.67889
+ExpectedResult=1
+
+[great_version_2]
+VersionLeft=1.5.9
+VersionRight=1.5
+ExpectedResult=1
+
+[great_version_3]
+VersionLeft=1.5.0.0.0.12.0
+VersionRight=1.5.0
+ExpectedResult=1
+
+[equal_version_1]
+VersionLeft=5678.9000.7654
+VersionRight=5678.9000.7654
+ExpectedResult=0
+
+[equal_version_2]
+VersionLeft=1.2
+VersionRight=1.2.0
+ExpectedResult=0
+
+[equal_version_3]
+VersionLeft=1.5.9.0
+VersionRight=1.5.9
+ExpectedResult=0
+
+[equal_version_4]
+VersionLeft=1.5.
+VersionRight=1.5
+ExpectedResult=0
+
+[wrong_version_1]
+VersionLeft=1.5..2
+VersionRight=1.5
+ExpectedResult=0
+
+[wrong_version_2]
+VersionLeft=.1.5.
+VersionRight=1.5
+ExpectedResult=0
+
+[wrong_version_3]
+VersionLeft=
+VersionRight=1.5
+ExpectedResult=0
+
+[wrong_version_4]
+VersionLeft=1.5
+VersionRight=
+ExpectedResult=0
+
+[wrong_version_5]
+VersionLeft=abc.123
+VersionRight=0.0.1
+ExpectedResult=0
+
+// SEC-SCR-API-0068
+
+[iscomponentonrom_positive]
+ComponentIdOffset=0
+FileCount=4
+FileName0=c:\a.txt
+FileName1=c:\abc\b.txt
+FileName2=Z:\a.txt
+FileName3=z:\def\b.txt
+
+[iscomponentonrom_positive_check]
+ExpectedROMResult=True
+ComponentIdOffset=0
+
+[iscomponentonrom_negative]
+ComponentIdOffset=1
+FileCount=3
+FileName0=Y:\a.txt
+FileName1=c:\def\d.txt
+FileName2=E:\abc\b.txt
+
+[iscomponentonrom_negative_check]
+ExpectedROMResult=False
+ComponentIdOffset=1
+
+// SEC-SCR-API-0069
+
+[check_default_componentpresence]
+CompPresenceValue=True
+ComponentIdOffset=0
+
+[componentpresence_set_false]
+SetCompPresence=True
+CompPresenceValue=False
+ComponentIdOffset=0
+
+[componentpresence_set_true]
+SetCompPresence=True
+CompPresenceValue=True
+ComponentIdOffset=0
+
+[register_component_files]
+ComponentIdOffset=0
+FileCount=6
+FileName0=c:\a.txt
+FileName1=c:\abc\b.txt
+FileName2=z:\a.txt
+FileName3=e:\asd\f.txt
+FileName4=y:\abc.txt
+FileName5=q:\qwe\p.txt
+
+[componentpresence_is_false]
+CompPresenceValue=False
+ComponentIdOffset=0
+
+// SEC-SCR-API-0070
+[add_component_with_same_localizables_test70]
+SoftwareType=plain
+IsLocalisable=True
+LocalesCount=2
+ComponentName0=Component_Test70
+VendorName0=SecurityTeam
+ComponentLocale0=1 
+ComponentName1=Component_Test70
+VendorName1=SecurityTeam
+ComponentLocale1=1 
+
+[get_component_with_same_localizables_names_test70]
+ComponentLocale=-1
+ComponentIdOffset=0
+ComponentName=Component_Test70
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+FilterName=Component_Test70
+
+[set_same_localized_property_test70]
+ComponentIdOffset=0
+PropertiesCount=3
+PropertyName0=MultiLocalizedProperty
+PropertyType0=3
+PropertyValue0=samestring
+PropertyLocale0=1
+PropertyName1=MultiLocalizedProperty
+PropertyType1=3
+PropertyValue1=samestring
+PropertyLocale1=0
+PropertyName2=MultiLocalizedProperty
+PropertyType2=3
+PropertyValue2=samestring
+PropertyLocale2=10
+
+[get_component_with_same_localizables_properties_test70]
+ComponentLocale=-1
+ComponentIdOffset=0
+ComponentName=Component_Test70
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+FilterPropertiesCount=1
+FilterPropertyName0=MultiLocalizedProperty
+FilterStringProperty0=samestring
+FilterPropertyLocale0=-1 //KLangUnspecified
+
+// SEC-SCR-API-0071
+[component_empty_vendor_name]
+SoftwareType=plain
+ComponentName=GeneralComponent
+VendorName= 
+
+[get_component_with_empty_vendor_name_test71]
+ComponentIdOffset=0
+ComponentName=GeneralComponent
+VendorName=
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+FilterVendor=
+
+// SEC-SCR-API-0072
+[update_component_set_huge_name_vendor]
+ComponentIdOffset=0
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=0
+ComponentName=stanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustana
+VendorName=newVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVennew
+PropertyLocale=0
+
+[get_component_huge_name_vendor]
+ComponentIdOffset=0
+ComponentName=stanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustana
+VendorName=newVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVennew
+SoftwareType=plain
+GlobalIdName=
+ScomoState=0
+InstalledDrives=
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=0
+
+[component_huge_property]
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=StringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringProper
+PropertyType0=1
+PropertyValue0=astringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastr
+
+[register_file_huge_test]
+ComponentIdOffset=0
+FileCount= 1
+FileName0=z:\file.txtfile
+
+[component_huge_file_property]
+ComponentIdOffset=0
+FileName=z:\file.txtfile
+PropertiesCount=1
+PropertyName0=TestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFile
+PropertyType0=1
+PropertyValue0=TestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFilePropertyValTestFil
+
+[get_component_by_huge_name_vendor]
+ComponentIdOffset=0
+ComponentName=stanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustana
+VendorName=newVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVennew
+SoftwareType=plain
+GlobalIdName=
+ScomoState=0
+InstalledDrives=
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=0
+FilterName=stanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustana
+FilterVendor=newVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVennew
+
+[get_component_by_huge_property]
+ComponentIdOffset=0
+ComponentName=stanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustana
+VendorName=newVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVendorNamenewVennew
+SoftwareType=plain
+GlobalIdName=
+ScomoState=0
+InstalledDrives=
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=0
+FilterPropertiesCount=1
+FilterPropertyName0=StringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringProper
+FilterStringProperty0=astringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastringastr
+
+// SEC-SCR-API-0073
+[very_huge_component_name]
+SoftwareType=plain
+ComponentName=stanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanastanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustana
+VendorName= 
+
+[very_huge_component_vendor_name]
+SoftwareType=plain
+ComponentName=stana
+VendorName=stanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanastanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustana
+
+[update_component_set_very_huge_name]
+ComponentIdOffset=0
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=0
+ComponentName=stanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanastanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustana
+VendorName=new
+PropertyLocale=0
+
+[update_component_set_very_huge_vendor]
+ComponentIdOffset=0
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=0
+ComponentName=new
+VendorName=stanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanastanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustana
+PropertyLocale=0
+
+[set_component_very_huge_property_name]
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=StringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringProperStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringProper
+PropertyType0=1
+PropertyValue0=astri
+
+[set_component_very_huge_property_value]
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=astri
+PropertyType0=1
+PropertyValue0=StringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringProperStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringProper
+
+[component_very_huge_file_property_name]
+ComponentIdOffset=0
+FileName=z:\file.txtfile
+PropertiesCount=1
+PropertyName0=TestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFileTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFile
+PropertyType0=1
+PropertyValue0=TestFilePropertyValTestF
+
+[component_very_huge_file_property_value]
+ComponentIdOffset=0
+FileName=z:\file.txtfile
+PropertiesCount=1
+PropertyName0=TestFilePropertyStrTestFil
+PropertyType0=1
+PropertyValue0=TestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFileTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFilePropertyStrTestFile
+
+[get_component_by_very_huge_name]
+ComponentIdOffset=0
+ComponentName=staname
+VendorName=newVendo
+SoftwareType=plain
+GlobalIdName=
+ScomoState=0
+InstalledDrives=
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=0
+FilterName=stanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanastanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustana
+
+[get_component_by_very_huge_vendor]
+ComponentIdOffset=0
+ComponentName=stanam
+VendorName=newVendorNam
+SoftwareType=plain
+GlobalIdName=
+ScomoState=0
+InstalledDrives=
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=0
+FilterVendor=stanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanastanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustanamejustana
+
+[get_component_by_very_huge_property_name]
+ComponentIdOffset=0
+ComponentName=stan
+VendorName=newVe
+SoftwareType=plain
+GlobalIdName=
+ScomoState=0
+InstalledDrives=
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=0
+FilterPropertiesCount=1
+FilterPropertyName0=StringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringProperStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringProper
+FilterStringProperty0=a
+FilterPropertyLocale0=1 
+
+[get_component_by_very_huge_property_value]
+ComponentIdOffset=0
+ComponentName=stanamejustaname
+VendorName=newV
+SoftwareType=plain
+GlobalIdName=
+ScomoState=0
+InstalledDrives=
+Version=0.1
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=0
+FilterPropertiesCount=1
+FilterPropertyName0=a
+FilterStringProperty0=StringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringProperStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringPropertyStringProper
+FilterPropertyLocale0=1 
+
+// SEC-SCR-API-0075
+[close_session_with_open_subsession]
+CloseSessionWithoutClosingSubsession=True
+
+// SEC-SCR-API-0076
+
+[test76_component_without_drives]
+SoftwareType=plain
+ComponentName=test76-Component1
+VendorName=Symbian
+
+[test76_component_with_drives]
+SoftwareType=plain
+ComponentName=test76-Component2
+VendorName=Symbian
+
+[register_files_consider_drives_false_test76]
+ComponentIdOffset=1
+FileCount=2
+FileName0=p:\file1
+ConsiderDrives0=False
+FileName1=m:\file2
+ConsiderDrives1=False
+
+[register_files_consider_drives_true_test76]
+ComponentIdOffset=0
+FileCount=2
+FileName0=p:\file3
+FileName1=m:\file4
+
+[components_on_driveP_test76]
+FilterDrivesList=P
+ComponentsCount=1
+ComponentIdOffset0=0
+ComponentName0=test76-Component2
+VendorName0=Symbian
+SoftwareType0=plain
+GlobalIdName0=
+Removable0=True
+ComponentSize0=0
+ScomoState0=0
+InstalledDrives0=P,M
+Version0=
+
+[component_files_test76]
+ComponentIdOffset=1
+FileCount=2
+FileName0=p:\file1
+FileName1=m:\file2
+
+[get_no_drives_component_test76]
+ComponentIdOffset=1
+ComponentName=test76-Component1
+VendorName=Symbian
+SoftwareType=plain
+GlobalIdName=
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+// API-SEC-SCR-API-0077
+
+[component_localized_info]
+SoftwareType=plain
+IsLocalisable=True
+LocalesCount=4
+ComponentName0=Component_N2
+VendorName0=SecurityTeam
+ComponentLocale0=1 //English
+ComponentName1=Cåmponent_N2
+VendorName1=SäkerhetLag
+ComponentLocale1=6 //Swedish
+ComponentName2=Bilesen_N2
+VendorName2=GüvenlikTakimi
+ComponentLocale2=14 //Turkish
+ComponentName3=NonLocalizedName
+VendorName3=NonLocalizedVendor
+ComponentLocale3=0 //Default or Unique
+
+[verify_component_localized_info]
+ComponentIdOffset=0
+LocalesCount=4
+ComponentName0=Component_N2
+VendorName0=SecurityTeam
+ComponentLocale0=1 //English
+ComponentName1=Cåmponent_N2
+VendorName1=SäkerhetLag
+ComponentLocale1=6 //Swedish
+ComponentName2=Bilesen_N2
+VendorName2=GüvenlikTakimi
+ComponentLocale2=14 //Turkish
+ComponentName3=NonLocalizedName
+VendorName3=NonLocalizedVendor
+ComponentLocale3=0 //Default or Unique
+
+
+[scr_backup_db]
+SourceFilePath=c:\sys\install\scr\scr.db
+TargetFilePath=c:\sys\install\scr\backup.db
+
+[scr_restore_db]
+SourceFilePath=c:\sys\install\scr\backup.db
+TargetFilePath=c:\sys\install\scr\scr.db
+
+[backup_file]
+DbFilePath=c:\sys\install\scr\backup.db
+JournalFilePath=c:\sys\install\scr\scr.db-journal
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+//
+// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+//
+
+
+PRINT Run all of the SCR tests.
+
+RUN_SCRIPT z:\tusif\tscrdatalayer\tscr_datalayer.script
+RUN_SCRIPT z:\tusif\tscr\tscr_api.script
+RUN_SCRIPT z:\tusif\tscr\tscr_versioning.script
+RUN_SCRIPT z:\tusif\tscr\tscr_appreginfo.script
+RUN_SCRIPT z:\tusif\tscr\tscrapparc.script
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr_api.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1475 @@
+//
+// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+// This script implements Software Component Registry API tests.
+// All APIs provided by SCR are covered by the test cases below.
+// For more information about the test cases, please see TMS:\Security,Privacy and Control Protection\USIF\SCR\tscr_api
+// 
+//
+
+PRINT Run Software Component Registry (SCR) API Tests
+
+// Load Suite
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscr -SharedData // SharedData is used for sharing the componentid between test steps
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+
+// Delete the SCR Database file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0001
+//! @SYMTestCaseDesc 		Change current locale to english as some test cases assume it & Add a single software component with component name and vendor
+
+START_TESTCASE API-SEC-SCR-API-0001
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini common_component_attributes
+
+END_TESTCASE API-SEC-SCR-API-0001
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0002
+//! @SYMTestCaseDesc 		Adding a single software component with localizables names
+
+START_TESTCASE API-SEC-SCR-API-0002
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_localizables
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini verify_component_localizables1 
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini verify_component_localizables2
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini verify_component_localizables3
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_nonlocalized_names
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_unspecified_names
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_particular_names
+
+END_TESTCASE API-SEC-SCR-API-0002
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0003
+//! @SYMTestCaseDesc 		Adding a software component with an empty component localizable object
+
+START_TESTCASE API-SEC-SCR-API-0003
+
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_empty_localizables
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_empty_name
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP !Result=-6 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_component_set_empty_name
+RUN_TEST_STEP 100 tscr SCRDeleteComponent z:\tusif\tscr\tscr.ini delete_component
+
+END_TESTCASE API-SEC-SCR-API-0003
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0004
+//! @SYMTestCaseDesc 		Set attributes of a software component
+
+START_TESTCASE API-SEC-SCR-API-0004
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_multiple_names
+RUN_TEST_STEP 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_component_attributes
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini verify_updated_component_attributes
+
+END_TESTCASE API-SEC-SCR-API-0004
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0005
+//! @SYMTestCaseDesc 		Add general and localizable properties of a software component.
+
+START_TESTCASE API-SEC-SCR-API-0005
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini common_component_properties
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini common_component_properties
+
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini set_single_localized_property
+RUN_TEST_STEP 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini get_single_localized_property
+RUN_TEST_STEP 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini get_single_non_localized_property
+RUN_TEST_STEP 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini get_single_int_property
+
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini set_multiple_localized_property
+RUN_TEST_STEP 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini get_nonlocalized_version_property
+RUN_TEST_STEP 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini get_unspecified_version_property
+RUN_TEST_STEP 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini get_specific_version_property
+
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini all_unspecified_locale_properties
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini all_non_localized_properties
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini all_particular_properties
+
+END_TESTCASE API-SEC-SCR-API-0005
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0006
+//! @SYMTestCaseDesc 		Update general and localizable properties of a software component.
+
+START_TESTCASE API-SEC-SCR-API-0006
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini common_component_properties
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini common_component_properties
+
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini new_component_properties
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini new_component_properties
+
+END_TESTCASE API-SEC-SCR-API-0006
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0007
+//! @SYMTestCaseDesc 		Register files to existing components.
+
+START_TESTCASE API-SEC-SCR-API-0007
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini first_component_files
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini second_component_files
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini third_component_files
+
+RUN_TEST_STEP 100 tscr ScrFileListSubsession z:\tusif\tscr\tscr.ini first_component_files
+RUN_TEST_STEP 100 tscr ScrFileListSubsession z:\tusif\tscr\tscr.ini second_component_files
+RUN_TEST_STEP 100 tscr ScrFileListSubsession z:\tusif\tscr\tscr.ini third_component_files
+
+END_TESTCASE API-SEC-SCR-API-0007
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0008
+//! @SYMTestCaseDesc 		Add general properties of a registered file
+
+START_TESTCASE API-SEC-SCR-API-0008
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini component_files
+
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini component_file1_properties
+RUN_TEST_STEP 100 tscr SCRGetFileProperties z:\tusif\tscr\tscr.ini component_file1_properties
+
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini component_file2_properties
+RUN_TEST_STEP 100 tscr SCRGetFileProperties z:\tusif\tscr\tscr.ini component_file2_properties
+
+RUN_TEST_STEP 100 tscr SCRGetFileProperty z:\tusif\tscr\tscr.ini component_file_property
+
+END_TESTCASE API-SEC-SCR-API-0008
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0009
+//! @SYMTestCaseDesc 		Delete component properties
+
+START_TESTCASE API-SEC-SCR-API-0009
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini common_component_properties
+
+RUN_TEST_STEP 100 tscr SCRDeleteComponentProperty z:\tusif\tscr\tscr.ini delete_component_properties
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties    z:\tusif\tscr\tscr.ini component_properties_left
+
+END_TESTCASE API-SEC-SCR-API-0009
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0010
+//! @SYMTestCaseDesc 		Delete file properties
+
+START_TESTCASE API-SEC-SCR-API-0010
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini common_files
+
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini common_file1_properties
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini common_file2_properties
+
+RUN_TEST_STEP 100 tscr SCRDeleteFileProperty z:\tusif\tscr\tscr.ini delete_common_file1_property1
+RUN_TEST_STEP 100 tscr SCRGetFileProperties  z:\tusif\tscr\tscr.ini common_file1_properties_left
+RUN_TEST_STEP 100 tscr SCRDeleteFileProperty z:\tusif\tscr\tscr.ini delete_common_file2_property1
+RUN_TEST_STEP 100 tscr SCRGetFileProperties  z:\tusif\tscr\tscr.ini common_file2_properties_left
+
+END_TESTCASE API-SEC-SCR-API-0010
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0011
+//! @SYMTestCaseDesc 		Unregister a component file
+
+START_TESTCASE API-SEC-SCR-API-0011
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini component_files_to_be_unregistered
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini component_file_properties_to_be_unregistered
+
+RUN_TEST_STEP 100 tscr SCRUnregisterFile z:\tusif\tscr\tscr.ini unregister_component_file
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetFileProperty z:\tusif\tscr\tscr.ini unregistered_file_property
+RUN_TEST_STEP 100 tscr ScrFileListSubsession z:\tusif\tscr\tscr.ini registered_files
+
+END_TESTCASE API-SEC-SCR-API-0011
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0012
+//! @SYMTestCaseDesc 		Delete a component
+
+START_TESTCASE API-SEC-SCR-API-0012
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_to_be_deleted
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini common_component_properties
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini common_files
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini common_file1_properties
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini common_file2_properties
+
+RUN_TEST_STEP 100 tscr SCRDeleteComponent z:\tusif\tscr\tscr.ini delete_component
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini deleted_component_properties
+RUN_TEST_STEP 100 tscr ScrFileListSubsession z:\tusif\tscr\tscr.ini deleted_component_files
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetFileProperty z:\tusif\tscr\tscr.ini deleted_component_file1_properties
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini common_component_attributes
+RUN_TEST_STEP !Result=Fail 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini verify_component_deleted
+RUN_TEST_STEP !Result=-1 100 tscr SCRDeleteComponent z:\tusif\tscr\tscr.ini delete_non_existing_component
+
+END_TESTCASE API-SEC-SCR-API-0012
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0013
+//! @SYMTestCaseDesc 		Retrieve software component entry
+
+START_TESTCASE API-SEC-SCR-API-0013
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini add_component_with_default_language
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini add_component_with_nondefault_language_only
+
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_default_language
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_unspecified_language
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_specified_language
+
+// Try getting the component without specifying locale - we should get the first available language
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_nondefault_language_only_1
+// Try getting the component while specifying matching locale
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_nondefault_language_only_2
+// Try getting the component while specifying a different locale - we should fail
+RUN_TEST_STEP !Result=-10323 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_nondefault_language_only_3
+// Try getting the component while specifying a "non-localized" locale - we should fail
+RUN_TEST_STEP !Result=-10323 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_nondefault_language_only_4
+
+END_TESTCASE API-SEC-SCR-API-0013
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0014
+//! @SYMTestCaseDesc 		Try to retrieve a non-existing software component
+
+START_TESTCASE API-SEC-SCR-API-0014
+
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_non_existing_component
+
+END_TESTCASE API-SEC-SCR-API-0014
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0015
+//! @SYMTestCaseDesc 		Negative tests for retrieving multiple file properties
+
+START_TESTCASE API-SEC-SCR-API-0015
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini common_files
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini common_file1_properties
+
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetFileProperties z:\tusif\tscr\tscr.ini getfileproperties_of_nonexisting_component
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetFileProperties z:\tusif\tscr\tscr.ini getfileproperties_of_nonexisting_file
+
+END_TESTCASE API-SEC-SCR-API-0015
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0016
+//! @SYMTestCaseDesc 		Negative tests for retrieving single file property
+
+START_TESTCASE API-SEC-SCR-API-0016
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini common_files
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini common_file2_properties
+
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetFileProperty z:\tusif\tscr\tscr.ini getfileproperty_of_nonexisting_component
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetFileProperty z:\tusif\tscr\tscr.ini getfileproperty_of_nonexisting_file
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetFileProperty z:\tusif\tscr\tscr.ini getfileproperty_of_nonexisting_property
+
+END_TESTCASE API-SEC-SCR-API-0016
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0017
+//! @SYMTestCaseDesc 		Get file components
+
+START_TESTCASE API-SEC-SCR-API-0017
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini register_file_to_first_component
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini register_file_to_second_component
+
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini component1_file_property
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini component2_file_property
+
+RUN_TEST_STEP 100 tscr SCRGetFileComponents z:\tusif\tscr\tscr.ini get_file_components
+
+END_TESTCASE API-SEC-SCR-API-0017
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0018
+//! @SYMTestCaseDesc 		Get component properties
+
+START_TESTCASE API-SEC-SCR-API-0018
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini component_properties_with_localizables
+
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini component_nonlocalized_properties
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini component_localized_properties
+
+END_TESTCASE API-SEC-SCR-API-0018
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0019
+//! @SYMTestCaseDesc 		Get Plugin UID with Mime Type and Component Id
+
+START_TESTCASE API-SEC-SCR-API-0019
+
+RUN_TEST_STEP 100 tscr SCRGetPlugin z:\tusif\tscr\tscr.ini get_plugin_with_mimetype_1
+RUN_TEST_STEP 100 tscr SCRGetPlugin z:\tusif\tscr\tscr.ini get_plugin_with_mimetype_2
+RUN_TEST_STEP 100 tscr SCRGetPlugin z:\tusif\tscr\tscr.ini get_plugin_with_componentid
+
+END_TESTCASE API-SEC-SCR-API-0019
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0020
+//! @SYMTestCaseDesc 		Get components by software type
+
+START_TESTCASE API-SEC-SCR-API-0020
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_dummy_type
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_plain_type
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini second_component_with_dummy_type
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_dummy_components
+
+END_TESTCASE API-SEC-SCR-API-0020
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0021
+//! @SYMTestCaseDesc 		Get components by vendor
+
+START_TESTCASE API-SEC-SCR-API-0021
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini first_component_with_same_vendor
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini second_component_with_same_vendor
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_different_vendor
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_by_vendor
+
+END_TESTCASE API-SEC-SCR-API-0021
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0022
+//! @SYMTestCaseDesc 		Get components by component properties
+
+START_TESTCASE API-SEC-SCR-API-0022
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini first_component_properties
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini second_component_properties
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini third_component_properties
+
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_integer_property1
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_integer_property2
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_string_property1
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_string_property2
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_localized_property1
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_localized_property2
+
+END_TESTCASE API-SEC-SCR-API-0022
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0023
+//! @SYMTestCaseDesc 		Get components by files
+
+START_TESTCASE API-SEC-SCR-API-0023
+
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini files_to_first_component
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini files_to_second_component
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini files_to_third_component
+
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_file1
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_file2
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_file3
+
+END_TESTCASE API-SEC-SCR-API-0023
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0024
+//! @SYMTestCaseDesc 		Get components by common component attributes
+
+START_TESTCASE API-SEC-SCR-API-0024
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+RUN_TEST_STEP 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_first_component_attributes
+RUN_TEST_STEP 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_second_component_attributes
+
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_removable_components
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_unremovable_components
+
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_drmprotected_components
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_drmunprotected_components
+
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_hidden_components
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_nonhidden_components
+
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_knownrevoked_components
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_knownunrevoked_components
+
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_originverified_components
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_originnonverified_components
+
+END_TESTCASE API-SEC-SCR-API-0024
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0025
+//! @SYMTestCaseDesc 		Set component SCOMO state
+
+START_TESTCASE API-SEC-SCR-API-0025
+
+RUN_TEST_STEP 100 tscr SCRSetScomoState z:\tusif\tscr\tscr.ini update_component_scomostate
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_non_activated_components
+
+END_TESTCASE API-SEC-SCR-API-0025
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0026
+//! @SYMTestCaseDesc 		Get components by installed drives
+
+START_TESTCASE API-SEC-SCR-API-0026
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini files_of_first_component
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini files_of_second_component
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini files_of_third_component
+
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini components_on_driveC
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini components_on_driveD
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini components_on_driveX
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini components_on_driveZ
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini components_on_driveCE
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini components_on_driveCZ
+
+END_TESTCASE API-SEC-SCR-API-0026
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0027
+//! @SYMTestCaseDesc 		Unregister the file registered to multiple files
+
+START_TESTCASE API-SEC-SCR-API-0027
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini first_registration_of_file
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini second_registration_of_file
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_multiply_registered_file_1
+
+RUN_TEST_STEP 100 tscr SCRUnregisterFile z:\tusif\tscr\tscr.ini unregister_first_component_file
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_multiply_registered_file_2
+
+RUN_TEST_STEP 100 tscr SCRUnregisterFile z:\tusif\tscr\tscr.ini unregister_second_component_file
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_multiply_registered_file_3
+
+END_TESTCASE API-SEC-SCR-API-0027
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0028
+//! @SYMTestCaseDesc 		Uncommitted transactions are rollbacked automatically
+
+START_TESTCASE API-SEC-SCR-API-0028
+
+RUN_TEST_STEP 100 tscr SCRApplyTransaction z:\tusif\tscr\tscr.ini transaction_component
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini transaction_component_attributes
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini transaction_component_properties_rollback
+RUN_TEST_STEP !Result=Fail 100 tscr ScrFileListSubsession z:\tusif\tscr\tscr.ini transaction_files
+
+END_TESTCASE API-SEC-SCR-API-0028
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0029
+//! @SYMTestCaseDesc 		Commit a started transaction.
+
+START_TESTCASE API-SEC-SCR-API-0029
+
+RUN_TEST_STEP 100 tscr SCRApplyTransaction z:\tusif\tscr\tscr.ini commit_common_component
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini transaction_component_attributes
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini transaction_component_properties_commit
+RUN_TEST_STEP 100 tscr ScrFileListSubsession z:\tusif\tscr\tscr.ini transaction_files
+
+END_TESTCASE API-SEC-SCR-API-0029
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0030
+//! @SYMTestCaseDesc 		Cancel a started transaction.
+
+START_TESTCASE API-SEC-SCR-API-0030
+
+RUN_TEST_STEP 100 tscr SCRApplyTransaction z:\tusif\tscr\tscr.ini cancel_common_component
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini transaction_component_attributes
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini transaction_component_properties
+RUN_TEST_STEP !Result=Fail 100 tscr ScrFileListSubsession z:\tusif\tscr\tscr.ini transaction_files
+
+END_TESTCASE API-SEC-SCR-API-0030
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0031
+//! @SYMTestCaseDesc 		Create a reading session while a transaction is in progress
+
+START_TESTCASE API-SEC-SCR-API-0031
+
+// First, try to create a reading sub-session while a transaction owned by another session is in progress
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini begin_before_subsession
+// Then, try to create a reading sub-session while a transaction owned by the same session is in progress
+// Also, try creating a transaction while a sub-session is in progress (opposite order)
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini open_reading_in_same_session
+
+END_TESTCASE API-SEC-SCR-API-0031
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0032
+//! @SYMTestCaseDesc 		Create a transaction while a reading session is in progress
+
+START_TESTCASE API-SEC-SCR-API-0032
+
+// First, try to begin a transaction while a reading sub-session created in another session is in progress
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini begin_after_subsession
+// Try doing a mutating operation while a subsession is in progress
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini mutating_operation_with_subsession
+// Then, try to begin a transaction while a reading sub-session created in the same session is in progress
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini begin_after_subsession_in_same_session
+
+END_TESTCASE API-SEC-SCR-API-0032
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0033
+//! @SYMTestCaseDesc 		Create a transaction while another transaction is in progress
+
+START_TESTCASE API-SEC-SCR-API-0033
+
+RUN_TEST_STEP !Result=-10320 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini begin_after_another_begin
+
+END_TESTCASE API-SEC-SCR-API-0033
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0034
+//! @SYMTestCaseDesc 		Create a transaction while another transaction is in progress.
+//!				In addition, invoke mutating and non-mutating functions from another transaction.				
+
+START_TESTCASE API-SEC-SCR-API-0034
+
+RUN_TEST_STEP !Result=-10322 100 tscr SCRManageAnotherTransaction z:\tusif\tscr\tscr.ini commit_another_transaction
+RUN_TEST_STEP !Result=-10320 100 tscr SCRManageAnotherTransaction z:\tusif\tscr\tscr.ini another_transaction_mutating
+RUN_TEST_STEP 100 tscr SCRManageAnotherTransaction z:\tusif\tscr\tscr.ini another_transaction_nonmutating
+
+END_TESTCASE API-SEC-SCR-API-0034
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0035
+//! @SYMTestCaseDesc 		Cancel a transaction while another transaction is in progress
+
+START_TESTCASE API-SEC-SCR-API-0035
+
+RUN_TEST_STEP !Result=-10322 100 tscr SCRManageAnotherTransaction z:\tusif\tscr\tscr.ini cancel_another_transaction
+
+END_TESTCASE API-SEC-SCR-API-0035
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0036
+//! @SYMTestCaseDesc 		Open a subsession while another subsession is already opened by another session
+
+START_TESTCASE API-SEC-SCR-API-0036
+
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini multiple_subsessions
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini multiple_active_subsessions
+
+END_TESTCASE API-SEC-SCR-API-0036
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0037
+//! @SYMTestCaseDesc 		Invoke a mutating SCR interface while a transaction created by a different session is in progress.
+
+START_TESTCASE API-SEC-SCR-API-0037
+
+RUN_TEST_STEP !Result=-10320 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini write_after_begin
+
+END_TESTCASE API-SEC-SCR-API-0037
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0038
+//! @SYMTestCaseDesc 		Invoke a non-mutating SCR interface while a transaction created by a different session is in progress.
+
+START_TESTCASE API-SEC-SCR-API-0038
+
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini read_after_begin
+
+END_TESTCASE API-SEC-SCR-API-0038
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0039
+//! @SYMTestCaseDesc 		Retrieve all components from SCR
+
+START_TESTCASE API-SEC-SCR-API-0039
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_dummy_type
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini all_components
+
+END_TESTCASE API-SEC-SCR-API-0039
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0040
+//! @SYMTestCaseDesc 		Concurrent tests
+
+START_TESTCASE API-SEC-SCR-API-0040
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+CONCURRENT
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini concurrent_component_1
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini concurrent_component_2
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini concurrent_component_properties
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini concurrent_component1_attributes
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini concurrent_component2_attributes
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini concurrent_component_properties
+CONSECUTIVE
+
+END_TESTCASE API-SEC-SCR-API-0040
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0041
+//! @SYMTestCaseDesc 		IsMediaPresent - positive tests
+
+START_TESTCASE API-SEC-SCR-API-0041
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini ismediapresent_positive_files_register1
+RUN_TEST_STEP 100 tscr SCRIsMediaPresent z:\tusif\tscr\tscr.ini ismediapresent_positive_files_check1
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini ismediapresent_positive_files_register2
+RUN_TEST_STEP 100 tscr SCRIsMediaPresent z:\tusif\tscr\tscr.ini ismediapresent_positive_files_check2
+
+END_TESTCASE API-SEC-SCR-API-0041
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0042
+//! @SYMTestCaseDesc 		IsMediaPresent - negative tests
+
+START_TESTCASE API-SEC-SCR-API-0042
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini ismediapresent_negative_files_register1
+RUN_TEST_STEP 100 tscr SCRIsMediaPresent z:\tusif\tscr\tscr.ini ismediapresent_negative_files_check1
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini ismediapresent_negative_files_register2
+RUN_TEST_STEP 100 tscr SCRIsMediaPresent z:\tusif\tscr\tscr.ini ismediapresent_negative_files_check2
+RUN_TEST_STEP !Result=-1 100 tscr SCRIsMediaPresent z:\tusif\tscr\tscr.ini ismediapresent_negative_non_existent_component
+
+END_TESTCASE API-SEC-SCR-API-0042
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0043
+//! @SYMTestCaseDesc 		SCR property and file names are case-insensitive	
+
+START_TESTCASE API-SEC-SCR-API-0043
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini lower_case_property
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini lower_case_file_name
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini filter_mixed_case_property_name
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini filter_mixed_case_file_name
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini mixed_lower_case_property
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini mixed_lower_case_property
+RUN_TEST_STEP 100 tscr SCRGetPlugin z:\tusif\tscr\tscr.ini get_plugin_with_mimetype_1
+
+END_TESTCASE API-SEC-SCR-API-0043
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0044
+//! @SYMTestCaseDesc 		Get only component Ids by using a NULL filter.	
+
+START_TESTCASE API-SEC-SCR-API-0044
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRGetComponentIds z:\tusif\tscr\tscr.ini all_components_component_ids_test44
+
+END_TESTCASE API-SEC-SCR-API-0044
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0045
+//! @SYMTestCaseDesc  		Various negative tests
+
+START_TESTCASE API-SEC-SCR-API-0045
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP !Result=-46 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini wrong_software_type_name
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini no_locales_in_add_component
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP !Result=-6 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini no_drive_file_name
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini register_file_twice
+// Try to register the same file twice - should not return an error
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini register_file_twice
+// Try to get nonexisting file property
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetFileProperty z:\tusif\tscr\tscr.ini nonexisting_file_property
+// Try to unregister the same file twice - should not return an error
+RUN_TEST_STEP 100 tscr SCRUnregisterFile z:\tusif\tscr\tscr.ini unregister_file_twice
+RUN_TEST_STEP 100 tscr SCRUnregisterFile z:\tusif\tscr\tscr.ini unregister_file_twice
+// Try to get nonexisting property
+RUN_TEST_STEP !Result=-1 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini missing_single_property
+// Try to get plugin for non-existing MIME type
+RUN_TEST_STEP !Result=-10303 100 tscr SCRGetPlugin z:\tusif\tscr\tscr.ini get_plugin_for_nonexisting_mimetype 
+// Try setting a negative component size
+RUN_TEST_STEP !Result=-6 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini set_negative_component_size
+// Add component with invalid operation type
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini add_component_invalid_operation_type
+END_TESTCASE API-SEC-SCR-API-0045
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0046
+//! @SYMTestCaseDesc 		Get components using composite filters - part 1
+
+START_TESTCASE API-SEC-SCR-API-0046
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add components
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Register the same file to components 1, 3
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini first_component_file
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini third_component_file
+// Add the same property to components 2, 4
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini second_component_property
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini fourth_component_property
+// Get all components with same file and property
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_file_and_property_empty
+
+END_TESTCASE API-SEC-SCR-API-0046
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0047
+//! @SYMTestCaseDesc 		Get components using composite filters - part 2
+
+START_TESTCASE API-SEC-SCR-API-0047
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add components
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Do not register files
+// Add the same property to components 2, 4
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini second_component_property
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini fourth_component_property
+// Get all components with same file and property
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_file_and_property_empty
+
+END_TESTCASE API-SEC-SCR-API-0047
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0048
+//! @SYMTestCaseDesc 		Get components using composite filters - part 3
+
+START_TESTCASE API-SEC-SCR-API-0048
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add components
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Register file to fourth component
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini fourth_component_file
+// Add the same property to components 2, 4
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini second_component_property
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini fourth_component_property
+// Get all components with same file and property
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_file_and_property_fourth
+
+END_TESTCASE API-SEC-SCR-API-0048
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0049
+//! @SYMTestCaseDesc 		Get components using composite filters - part 4
+
+START_TESTCASE API-SEC-SCR-API-0049
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add components
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini filter_test_names_test49
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini filter_test_names_test49
+// Register file to fourth component
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini fourth_component_file
+// Add the same property to components 2, 4
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini second_component_property
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini fourth_component_property
+// Get all components with same file and property
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_names_file_and_property_fourth
+
+END_TESTCASE API-SEC-SCR-API-0049
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0050
+//! @SYMTestCaseDesc 		Get components using composite filters - part 5
+
+START_TESTCASE API-SEC-SCR-API-0050
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add components
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini filter_test_names_vendor_test50
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Add the same property to the second component
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini second_component_property
+// Get all components with same vendor name and property
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_vendor_and_property_second
+
+END_TESTCASE API-SEC-SCR-API-0050
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0051
+//! @SYMTestCaseDesc 		Test Int64 component property functionality
+
+START_TESTCASE API-SEC-SCR-API-0051
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Check adding an int64 property
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini single_int64_property
+RUN_TEST_STEP 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini get_single_int64_property
+// Check updating an int64 property
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini update_single_int64_property
+RUN_TEST_STEP 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini get_updated_int64_property
+
+// Check filters on int64 property
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini verify_in64_property_filter
+
+RUN_TEST_STEP 100 tscr SCRDeleteComponentProperty z:\tusif\tscr\tscr.ini single_int64_property
+
+// Check handling multiple properties, where one of them is int64
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini multiple_int64_properties
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini multiple_int64_properties
+
+END_TESTCASE API-SEC-SCR-API-0051
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0052
+//! @SYMTestCaseDesc 		Get components using composite filters - part 6
+
+START_TESTCASE API-SEC-SCR-API-0052
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add components
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component3_test52
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component2_test52
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component1_test52
+// Add string property A and int property B to the first component
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini first_component_property_test52
+// Add int property B and int property C to the second component
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini second_component_property_test52
+// Add string property A, int property B and int property C to the third component
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini third_component_property_test52
+// Get all components with integer properties B and C
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_int_properties_test52
+// Get all components with string property A and integer property B
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_str_int_property_test52
+
+END_TESTCASE API-SEC-SCR-API-0052
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0053
+//! @SYMTestCaseDesc 		Check GetComponentFilesCountL API
+
+START_TESTCASE API-SEC-SCR-API-0053
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add two components
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Register two files for the first component
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini first_component_files
+// Verify files count for both components
+RUN_TEST_STEP 100 tscr SCRGetComponentFilesCount z:\tusif\tscr\tscr.ini verify_first_component_count_test53
+RUN_TEST_STEP 100 tscr SCRGetComponentFilesCount z:\tusif\tscr\tscr.ini verify_second_component_count_test53
+
+END_TESTCASE API-SEC-SCR-API-0053
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0054
+//! @SYMTestCaseDesc 		Get components using composite filters - part 7
+
+START_TESTCASE API-SEC-SCR-API-0054
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add components
+// Components 1,2,3,4 have the same software type
+// Components 1,3,4,5 have the same vendor
+// Components 1,2,3,5 have the same name 
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component1_test54
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component2_test54
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component3_test54
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component4_test54
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component5_test54
+// Retrieve all components with given name, software type and vendor - components 1 and 3 should match
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_subsession_test54
+// Repeat the same, but for component ids 
+RUN_TEST_STEP 100 tscr SCRGetComponentIds z:\tusif\tscr\tscr.ini get_component_ids_test54
+
+END_TESTCASE API-SEC-SCR-API-0054
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0055
+//! @SYMTestCaseDesc 		Verify adding and retrieving components with large size
+
+START_TESTCASE API-SEC-SCR-API-0055
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini huge_component_test55_update
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini huge_component_test55_verify
+
+END_TESTCASE API-SEC-SCR-API-0055
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0057
+//! @SYMTestCaseDesc 		Check filters for multiple locales in properties
+
+START_TESTCASE API-SEC-SCR-API-0057
+
+// Components 1,2 have value EnglishValue for the test property for ELangEnglish and JustValue for ELangNone
+// Component 3 has value EnglishValue for the test property for ELangNone
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component1_test57
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component2_test57
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component3_test57
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini component1_properties
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini component2_properties
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini component3_properties
+// Retrieve all components with the test property EnglishValue for ELangEnglish
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_english_property_test57
+// Retrieve all components with the test property EnglishValue for any locale
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_any_property_test57
+// Retrieve all components with the test property EnglishValue for ELangSwedish
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_negative_property_test57
+
+END_TESTCASE API-SEC-SCR-API-0057
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0058
+//! @SYMTestCaseDesc 		Add a single software component with global id.
+
+START_TESTCASE API-SEC-SCR-API-0058
+
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_global_id
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini component_attributes_with_global_id
+// Add another component with the same global id
+RUN_TEST_STEP !Result=-11 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_global_id
+
+END_TESTCASE API-SEC-SCR-API-0058
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0059
+//! @SYMTestCaseDesc 		Add a new component dependency.
+
+START_TESTCASE API-SEC-SCR-API-0059
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// First add the supplier component (S1)
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini supplier_component
+RUN_TEST_STEP 100 tscr SCRGetComponentId z:\tusif\tscr\tscr.ini supplier_component_globalid
+// Then add the dependant component (D1)
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini dependant_component
+RUN_TEST_STEP 100 tscr SCRGetComponentWithGlobalId z:\tusif\tscr\tscr.ini dependant_component_globalid
+// Add dependency between the supplier and dependant components (D1 -> S1)
+RUN_TEST_STEP 100 tscr SCRAddComponentDependency z:\tusif\tscr\tscr.ini dependency_with_existing_components
+// Check the dependancy added successfully
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini dependant_components
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini supplier_components
+// Add another component which will be supplier (S2)
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini second_supplier_component
+// Add a second dependancy where the lastly added component is supplier. (D1 -> S2)
+RUN_TEST_STEP 100 tscr SCRAddComponentDependency z:\tusif\tscr\tscr.ini dependency_with_second_supplier
+// Get the all suppliers of the dependant component (D1)
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini all_supplier_components
+// Add another component which will be a dependant. (D2)
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini second_dependant_component
+// Add a second dependency where the D2 depends on S2
+RUN_TEST_STEP 100 tscr SCRAddComponentDependency z:\tusif\tscr\tscr.ini dependency_with_second_dependant
+// Get the all dependants of the supplier component (S2)
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini all_dependant_components
+// Try to duplicate an existing dependency
+RUN_TEST_STEP !Result=-11 100 tscr SCRAddComponentDependency z:\tusif\tscr\tscr.ini dependency_with_second_dependant
+// Add a dependency to non-existing supplier
+RUN_TEST_STEP 100 tscr SCRAddComponentDependency z:\tusif\tscr\tscr.ini dependency_to_nonexisting_component
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini existing_and_nonexisting_suppliers
+// Delete D2
+RUN_TEST_STEP 100 tscr SCRDeleteComponent z:\tusif\tscr\tscr.ini delete_second_dependant
+// Get the suppliers of the deleted dependant (D2). Should be empty.
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini suppliers_of_deleted_dependant
+// Get the all suppliers of the dependant component (D1). Should be deleted.
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini all_supplier_components
+// Delete S1
+RUN_TEST_STEP 100 tscr SCRDeleteComponent z:\tusif\tscr\tscr.ini delete_first_supplier
+// Dependencies where S1 is supplier should remain
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini remained_dependencies
+
+END_TESTCASE API-SEC-SCR-API-0059
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0060
+//! @SYMTestCaseDesc 		Delete the component dependency.
+
+START_TESTCASE API-SEC-SCR-API-0060
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// First, add a dependency between two existing components, and then delete that dependency
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini supplier_component
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini dependant_component
+RUN_TEST_STEP 100 tscr SCRAddComponentDependency z:\tusif\tscr\tscr.ini dependency_with_existing_components
+RUN_TEST_STEP 100 tscr SCRDeleteComponentDependency z:\tusif\tscr\tscr.ini dependency_with_existing_components
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini deleted_dependant
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini deleted_supplier
+// Secondly, add a dependency between two non-existing components and then delete it.
+RUN_TEST_STEP 100 tscr SCRAddComponentDependency z:\tusif\tscr\tscr.ini dependency_with_nonexisting_components
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini dependant_nonexisting_components
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini supplier_nonexisting_components
+
+END_TESTCASE API-SEC-SCR-API-0060
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0061
+//! @SYMTestCaseDesc 		Get components using composite filters - part 8
+
+START_TESTCASE API-SEC-SCR-API-0061
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add components
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Set common component attributes
+RUN_TEST_STEP 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_first_component_attributes_test61
+RUN_TEST_STEP 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_second_component_attributes_test61
+RUN_TEST_STEP 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_third_component_attributes_test61
+// Add a property to the second component
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini second_component_property
+// Get all components with two common properties
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_drm_hidden_common_properties
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_originverified_knownrevoked_properties
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_components_with_common_and_customized_attributes
+
+END_TESTCASE API-SEC-SCR-API-0061
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0062
+//! @SYMTestCaseDesc 		Add & query versioned component dependency.
+
+START_TESTCASE API-SEC-SCR-API-0062
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// First add the supplier component (S1)
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini supplier_component
+// Then add the dependant component (D1)
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini dependant_component
+// Add dependency between the supplier and dependant components (D1 -> S1)
+RUN_TEST_STEP 100 tscr SCRAddComponentDependency z:\tusif\tscr\tscr.ini versioned_dependency
+// Check the dependancy added successfully
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini versioned_dependant_components
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini versioned_supplier_components
+// Add another component which will be supplier (S2)
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini second_supplier_component
+// Add a second dependancy where the lastly added component is supplier. (D1 -> S2)
+RUN_TEST_STEP 100 tscr SCRAddComponentDependency z:\tusif\tscr\tscr.ini versioned_dependency_with_second_supplier
+// Get the all suppliers of the dependant component (D1)
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini versioned_all_supplier_components
+// Add another component which will be a dependant. (D2)
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini second_dependant_component
+// Add a second dependency where the D2 depends on S2
+RUN_TEST_STEP 100 tscr SCRAddComponentDependency z:\tusif\tscr\tscr.ini versioned_dependency_with_second_dependant
+// Get the all dependants of the supplier component (S2)
+RUN_TEST_STEP 100 tscr SCRGetGlobalIdList z:\tusif\tscr\tscr.ini versioned_all_dependant_components
+
+END_TESTCASE API-SEC-SCR-API-0062
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0063
+//! @SYMTestCaseDesc 		Post-manufacture plugin management tests
+
+START_TESTCASE API-SEC-SCR-API-0063
+
+// Add a sofwtare component type with only unique name
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_nonlocalized_software_type
+// Add a component to check that the non-localized software type has been added successfully
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_nonlocalized_software_type
+// Check that the component is not orphaned 
+RUN_TEST_STEP 100 tscr SCRIsComponentOrphaned z:\tusif\tscr\tscr.ini non_orphaned_component
+// Add a sofwtare component type with unique and localized names
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_localized_software_type
+// Add a component to check that the localized software type has been added successfully
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_localized_software_type
+// Try to add a component without specifying MIME types
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_software_type_without_mime_types
+// Delete a software component type
+RUN_TEST_STEP 100 tscr SCRDeleteSoftwareType z:\tusif\tscr\tscr.ini
+// Check that the component is orphaned 
+RUN_TEST_STEP 100 tscr SCRIsComponentOrphaned z:\tusif\tscr\tscr.ini orphaned_component
+// Get the orphaned component
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini orphaned_component_attributes
+// Get the orphaned component via filter
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_orphaned_component_by_vendor
+// Set the common properties of the orphaned component
+RUN_TEST_STEP !Result=-46 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_orphaned_component_attributes
+// Try to register some files to the orphaned component
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini orphaned_component_files
+// Try to add a sutom property to the orphaned component
+RUN_TEST_STEP !Result=-46 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini orphaned_component_properties
+// Re-add the sofwtare component type with only unique name
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_nonlocalized_software_type
+// Check that the component is not orphaned 
+RUN_TEST_STEP 100 tscr SCRIsComponentOrphaned z:\tusif\tscr\tscr.ini non_orphaned_component_after_reinstalling_swtype
+// Check if a non-existing component is orphaned
+RUN_TEST_STEP !Result=-1 100 tscr SCRIsComponentOrphaned z:\tusif\tscr\tscr.ini orphaned_non_existing_component
+// Add the same software type again
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_nonlocalized_software_type
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_nonlocalized_software_type
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_localized_software_type_with_different_plugin_uid
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_localized_software_type_with_extra_name
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_localized_software_type_with_missing_name
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_localized_software_type_with_extra_mime
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_localized_software_type_with_missing_mime
+// Add multiple sid with launcher executable
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_multiple_sid_with_launcher_executable
+END_TESTCASE API-SEC-SCR-API-0063
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0064
+//! @SYMTestCaseDesc 		Verify drive bitmask management
+
+START_TESTCASE API-SEC-SCR-API-0064
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Register 2 files on drive C and one file on drive D
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini drives_management_register_files
+// Verify that both C and D drives are used by the component
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini drives_management_both_drives
+// Unregister one file on drive C
+RUN_TEST_STEP 100 tscr SCRUnregisterFile z:\tusif\tscr\tscr.ini drives_management_unregister_first_c_file
+// Verify that both C and D drives are used by the component
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini drives_management_both_drives
+// Unregister one file on drive D
+RUN_TEST_STEP 100 tscr SCRUnregisterFile z:\tusif\tscr\tscr.ini drives_management_unregister_first_d_file
+// Verify that drive C is used by the component
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini drives_management_c_drive
+// Unregister second file on drive C
+RUN_TEST_STEP 100 tscr SCRUnregisterFile z:\tusif\tscr\tscr.ini drives_management_unregister_second_c_file
+// Verify that no drives are used by the component
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini common_component_attributes
+
+END_TESTCASE API-SEC-SCR-API-0064
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0065
+//! @SYMTestCaseDesc 		Verify language downgrade path functionality
+
+START_TESTCASE API-SEC-SCR-API-0065
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add a single component
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_localizables_test65
+// Set a localizable property for language English
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini set_base_language_property_test65
+// Get the property for language English
+RUN_TEST_STEP 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini get_base_language_property_test65
+// Get the property for language American
+RUN_TEST_STEP 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini get_child_language_property_test65
+// Get the property for non-specified locale
+RUN_TEST_STEP 100 tscr SCRGetComponentProperty z:\tusif\tscr\tscr.ini get_unspecified_language_property_test65
+// Get component for unspecified, English and American locale
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_unspecified_names_test65
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_base_language_test65
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_with_child_language_test65
+
+END_TESTCASE API-SEC-SCR-API-0065
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0066
+//! @SYMTestCaseDesc 		Install log history tests
+
+START_TESTCASE API-SEC-SCR-API-0066
+
+// Delete database and log files
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini log_file 
+// Add a new component with version (since version is set in the same session, it is reflected to the log record)
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names_with_version
+// Delete the component
+RUN_TEST_STEP 100 tscr SCRDeleteComponent z:\tusif\tscr\tscr.ini delete_component
+// Add the upgrade version of deleted component
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini update_common_component_names
+// Get log entries and compare with the expected ones
+RUN_TEST_STEP 100 tscr SCRGetLogEntries z:\tusif\tscr\tscr.ini log_entries
+// Add a component and then set its version. Since a new session is started, version is not reflected the log record.
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_component_attributes
+// Add a component with dummy type
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_dummy_type
+// Get the log entries for dummy software type
+RUN_TEST_STEP 100 tscr SCRGetLogEntries z:\tusif\tscr\tscr.ini dummy_log_entries
+// Test the recorded component name for various situations
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini log_file 
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_currentlocale_name
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_nonlocalized_name
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_with_localized_name
+RUN_TEST_STEP 100 tscr SCRGetLogEntries z:\tusif\tscr\tscr.ini name_log_entries
+// Delete log file for the following test steps
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini log_file 
+// Add a component to create log file
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names_with_version
+// Make the log file read-only
+RUN_TEST_STEP 100 tscr SCRSetLogFileReadOnlyAttr z:\tusif\tscr\tscr.ini read_only_log_file
+// Try to write into the read-only log file by adding a component 
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Verify that the component log couldn't be added, but the component has been added successfully
+RUN_TEST_STEP 100 tscr SCRGetLogEntries z:\tusif\tscr\tscr.ini readonly_log_entries
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini common_component_attributes
+// Make sure SCR server shuts
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+// Make the file writable
+RUN_TEST_STEP 100 tscr SCRSetLogFileReadOnlyAttr z:\tusif\tscr\tscr.ini writable_log_file
+// Try to add the component again
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Verify that the component log has been added this time
+RUN_TEST_STEP 100 tscr SCRGetLogEntries z:\tusif\tscr\tscr.ini writable_log_entries
+// Delete the log file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini log_file 
+// Add a component with EScrCompHidden type
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini hidden_common_component_names
+// Get log entries. No log is written for a hidden component operation type.
+RUN_TEST_STEP 100 tscr SCRGetLogEntries z:\tusif\tscr\tscr.ini hidden_log_entries
+// Delete the log file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini log_file 
+// Create the scr log file which includes maximum allowed records
+RUN_TEST_STEP 500 tscr SCRCreateLogFile z:\tusif\tscr\tscr.ini log_file_size
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Delete the log file not to affect other tests' performance
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini log_file 
+
+END_TESTCASE API-SEC-SCR-API-0066
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0067
+//! @SYMTestCaseDesc 		Version comparetor tests
+
+START_TESTCASE API-SEC-SCR-API-0067
+
+RUN_TEST_STEP 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini less_version_1 
+RUN_TEST_STEP 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini less_version_2
+RUN_TEST_STEP 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini less_version_3
+RUN_TEST_STEP 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini great_version_1
+RUN_TEST_STEP 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini great_version_2
+RUN_TEST_STEP 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini great_version_3
+RUN_TEST_STEP 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini equal_version_1
+RUN_TEST_STEP 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini equal_version_2
+RUN_TEST_STEP 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini equal_version_3
+RUN_TEST_STEP 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini equal_version_4
+RUN_TEST_STEP !Result=-6 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini wrong_version_1
+RUN_TEST_STEP !Result=-6 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini wrong_version_2
+RUN_TEST_STEP !Result=-6 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini wrong_version_3
+RUN_TEST_STEP !Result=-6 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini wrong_version_4
+RUN_TEST_STEP !Result=-6 100 tscr SCRCompareVersions z:\tusif\tscr\tscr.ini wrong_version_5
+
+END_TESTCASE API-SEC-SCR-API-0067
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0068
+//! @SYMTestCaseDesc 		Test if an isntalled component is on read-only drive
+
+START_TESTCASE API-SEC-SCR-API-0068
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini iscomponentonrom_positive
+RUN_TEST_STEP 100 tscr SCRIsComponentOnReadOnlyDrive z:\tusif\tscr\tscr.ini iscomponentonrom_positive_check
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini iscomponentonrom_negative
+RUN_TEST_STEP 100 tscr SCRIsComponentOnReadOnlyDrive z:\tusif\tscr\tscr.ini iscomponentonrom_negative_check
+
+END_TESTCASE API-SEC-SCR-API-0068
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0069
+//! @SYMTestCaseDesc		Tests for component presence
+
+START_TESTCASE API-SEC-SCR-API-0069
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Check for default componet presence value
+RUN_TEST_STEP 100 tscr ScrComponentPresence z:\tusif\tscr\tscr.ini check_default_componentpresence
+// Set the component presence value to false
+RUN_TEST_STEP 100 tscr ScrComponentPresence z:\tusif\tscr\tscr.ini componentpresence_set_false
+// Reset component presence value to true
+RUN_TEST_STEP 100 tscr ScrComponentPresence z:\tusif\tscr\tscr.ini componentpresence_set_true
+// Register the component files
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini register_component_files
+// Check for presence after the files registration
+RUN_TEST_STEP 100 tscr ScrComponentPresence z:\tusif\tscr\tscr.ini componentpresence_is_false
+// Set the component presence value to false after files being registered
+RUN_TEST_STEP 100 tscr ScrComponentPresence z:\tusif\tscr\tscr.ini componentpresence_set_false
+
+END_TESTCASE API-SEC-SCR-API-0069
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0070
+//! @SYMTestCaseDesc 		Verify that having the same name on different component's localizables works correctly
+
+START_TESTCASE API-SEC-SCR-API-0070
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add a component with same names on two different locales
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini add_component_with_same_localizables_test70
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_component_with_same_localizables_names_test70
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini set_same_localized_property_test70
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_component_with_same_localizables_properties_test70
+
+END_TESTCASE API-SEC-SCR-API-0070
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0071
+//! @SYMTestCaseDesc 		Verify that filters on empty vendor names work correctly
+
+START_TESTCASE API-SEC-SCR-API-0071
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add a component with a normal vendor name
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+// Add a component with an empty vendor name
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_empty_vendor_name
+// Retrieve all components with empty vendor names
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_component_with_empty_vendor_name_test71
+
+END_TESTCASE API-SEC-SCR-API-0071
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0072
+//! @SYMTestCaseDesc 		Verify that setting very long attributes works
+
+START_TESTCASE API-SEC-SCR-API-0072
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Add a component with a regular attributes
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_component_set_huge_name_vendor
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini component_huge_property
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_component_huge_name_vendor
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_component_by_huge_name_vendor
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_component_by_huge_property
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini register_file_huge_test
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini component_huge_file_property
+RUN_TEST_STEP 100 tscr SCRGetComponentProperties z:\tusif\tscr\tscr.ini component_huge_property
+RUN_TEST_STEP 100 tscr SCRGetFileProperties z:\tusif\tscr\tscr.ini component_huge_file_property
+
+END_TESTCASE API-SEC-SCR-API-0072
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0073
+//! @SYMTestCaseDesc 		Verify that setting extremely long attributes doesn't work and that a proper error code is returned
+
+START_TESTCASE API-SEC-SCR-API-0073
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini very_huge_component_name
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini very_huge_component_vendor_name
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP !Result=-6 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_component_set_very_huge_name
+RUN_TEST_STEP !Result=-6 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr.ini update_component_set_very_huge_vendor
+RUN_TEST_STEP !Result=-6 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini set_component_very_huge_property_name
+RUN_TEST_STEP !Result=-6 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr.ini set_component_very_huge_property_value
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini register_file_huge_test
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini component_very_huge_file_property_name
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr.ini component_very_huge_file_property_value
+RUN_TEST_STEP !Result=-6 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_component_by_very_huge_name
+RUN_TEST_STEP !Result=-6 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_component_by_very_huge_vendor
+RUN_TEST_STEP !Result=-6 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_component_by_very_huge_property_name
+RUN_TEST_STEP !Result=-6 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini get_component_by_very_huge_property_value
+
+END_TESTCASE API-SEC-SCR-API-0073
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0074
+//! @SYMTestCaseDesc 		Verify that invalid parameters in filters don't cause failures
+
+START_TESTCASE API-SEC-SCR-API-0074
+
+RUN_TEST_STEP 100 tscr SCRValuesNegative z:\tusif\tscr\tscr.ini
+
+END_TESTCASE API-SEC-SCR-API-0074
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0075
+//! @SYMTestCaseDesc 		Try closing a session whilst a subsession is open
+
+START_TESTCASE API-SEC-SCR-API-0075
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Make sure that sub-sessions will have entries to iterate on by adding a component
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini close_session_with_open_subsession
+
+END_TESTCASE API-SEC-SCR-API-0075
+
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-0076
+//! @SYMTestCaseDesc 		Verify registering files when setting aConsiderForInstalledDrives to false
+
+START_TESTCASE API-SEC-SCR-API-0076
+
+RUN_TEST_STEP 100 tscr SCRDeleteAllComponents z:\tusif\tscr\tscr.ini
+// Register two components with different names
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini test76_component_without_drives
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini test76_component_with_drives
+// Register same files to both components, while setting the flag to false for the first component
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini register_files_consider_drives_false_test76
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr.ini register_files_consider_drives_true_test76
+// Check that filter on components which have files on drive P does not return component 1, but returns component 2
+RUN_TEST_STEP 100 tscr ScrComponentRegistrySubsession z:\tusif\tscr\tscr.ini components_on_driveP_test76
+// Verify that files were registered to the first component
+RUN_TEST_STEP 100 tscr ScrFileListSubsession z:\tusif\tscr\tscr.ini component_files_test76
+// Verify that the first component does not list any registered drives
+RUN_TEST_STEP 100 tscr SCRGetComponent z:\tusif\tscr\tscr.ini get_no_drives_component_test76
+END_TESTCASE API-SEC-SCR-API-0076
+
+
+//! @SYMTestCaseID		API-SEC-SCR-API-0077
+//! @SYMTestCaseDesc 		Add a single software component with localized information and retrieve the same
+
+START_TESTCASE API-SEC-SCR-API-0077
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini component_localized_info
+RUN_TEST_STEP 100 tscr SCRGetComponentLocalizedInfo z:\tusif\tscr\tscr.ini verify_component_localized_info
+END_TESTCASE API-SEC-SCR-API-0077
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr_app_performance_cases.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,87 @@
+//
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+// This script implements SCR Applicaiton Registry Performance Tests.
+//
+
+PRINT Run SCR Applicaiton Registry Performance Tests
+
+LOAD_SUITE tscr
+LOAD_SUITE tscrapparc
+// Load the event logger test suite
+LOAD_SUITE EventLogServer -SharedData
+
+// Load SCR test suite
+LOAD_SUITE tscr -SharedData // SharedData is used for sharing the componentid between test steps
+SHARED_DATA z:\tusif\tscr\tscr_performance.ini shared_data
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+
+//! @SYMTestCaseID				APPINSTALL-SCR-APP-PERFORMANCE-0001
+//! @SYMTestCaseDesc 			The time taken to add a minimal appregistration data (without localized info and opaque data).
+//! SYMTestPerformanceTarget	100ms
+START_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0001
+RUN_TEST_STEP 100 tscr Performance-SCRAddApplicationEntry z:\tusif\tscr\tscr_performance.ini add_minimal_app_reg_info
+RUN_TEST_STEP 100 tscrapparc Performance-ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_performance.ini get_add_minimal_app_reg_info
+END_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0001
+
+//! @SYMTestCaseID				APPINSTALL-SCR-APP-PERFORMANCE-0002
+//! @SYMTestCaseDesc 			The time taken to add a minimal appregistration data (without localized info).
+//! SYMTestPerformanceTarget	150ms
+START_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0002
+RUN_TEST_STEP 100 tscr Performance-SCRAddApplicationEntry z:\tusif\tscr\tscr_performance.ini add_minimal_app_reg_info_with_opaquedata
+RUN_TEST_STEP 100 tscrapparc Performance-ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_performance.ini get_add_minimal_app_reg_info_with_opaquedata
+END_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0002
+
+//! @SYMTestCaseID				APPINSTALL-SCR-APP-PERFORMANCE-0003
+//! @SYMTestCaseDesc 			The time taken to add an appregistration data (without localized info and opaque data).
+//! SYMTestPerformanceTarget	150ms
+START_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0003
+RUN_TEST_STEP 100 tscr Performance-SCRAddApplicationEntry z:\tusif\tscr\tscr_performance.ini add_app_reg_info_no_localized
+RUN_TEST_STEP 100 tscrapparc Performance-ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_performance.ini get_add_app_reg_info_no_localized
+END_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0003
+
+//! @SYMTestCaseID				APPINSTALL-SCR-APP-PERFORMANCE-0004
+//! @SYMTestCaseDesc 			The time taken to add an appregistration data (without localized info).
+//! SYMTestPerformanceTarget	200ms
+START_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0004
+RUN_TEST_STEP 100 tscr Performance-SCRAddApplicationEntry z:\tusif\tscr\tscr_performance.ini add_app_reg_info_no_localized_with_opaquedata
+RUN_TEST_STEP 100 tscrapparc Performance-ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_performance.ini get_add_app_reg_info_no_localized_with_opaquedata
+END_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0004
+
+//! @SYMTestCaseID				APPINSTALL-SCR-APP-PERFORMANCE-0005
+//! @SYMTestCaseDesc 			The time taken to add an appregistration data with 1 localized info.
+//! SYMTestPerformanceTarget	200ms
+START_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0005
+RUN_TEST_STEP 100 tscr Performance-SCRAddApplicationEntry z:\tusif\tscr\tscr_performance.ini add_app_reg_info_1_localized
+RUN_TEST_STEP 100 tscrapparc Performance-ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_performance.ini get_add_app_reg_info_1_localized
+END_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0005
+
+//! @SYMTestCaseID				APPINSTALL-SCR-APP-PERFORMANCE-0006
+//! @SYMTestCaseDesc 			The time taken to add an appregistration data with 2 localized info.
+//! SYMTestPerformanceTarget	200ms
+START_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0006
+RUN_TEST_STEP 100 tscr Performance-SCRAddApplicationEntry z:\tusif\tscr\tscr_performance.ini add_app_reg_info_2_localized
+RUN_TEST_STEP 100 tscrapparc Performance-ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_performance.ini get_add_app_reg_info_2_localized
+END_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0006
+
+//! @SYMTestCaseID				APPINSTALL-SCR-APP-PERFORMANCE-0007
+//! @SYMTestCaseDesc 			The time taken to add an appregistration data with 5 localized info.
+//! SYMTestPerformanceTarget	200ms
+START_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0007
+RUN_TEST_STEP 100 tscr Performance-SCRAddApplicationEntry z:\tusif\tscr\tscr_performance.ini add_app_reg_info_5_localized
+RUN_TEST_STEP 100 tscrapparc Performance-ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_performance.ini get_add_app_reg_info_5_localized
+END_TESTCASE APPINSTALL-SCR-APP-PERFORMANCE-0007
+
+//RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr_appreginfo.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,2632 @@
+// Configuration file for Application Registration API Tests
+[db_file]
+DbFilePath=c:\sys\install\scr\scr.db
+JournalFilePath=c:\sys\install\scr\scr.db-journal
+
+[log_file]
+DbFilePath=c:\private\10285bc0\scr.log
+JournalFilePath=c:\private\10285bc0\scr_tmp.log
+
+[add_app_reg_info_4]
+IsMultiApp=True
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001237
+AppFile=appname4
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+OpaqueData=somedata
+OwnedFileCount=2
+FileName0=file0
+FileName1=file2
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueData0=servicedata
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+LocalizableAppInfoCount=2
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile
+LocNumberOfAppIcons0=2
+ViewDataCount0=1
+VwUid0=45689123
+VwScreenMode0=0
+VwCaption0=vc
+VwIconFileName0=viewiconfile
+VwNumberOfAppIcons0=0
+LocShortCaption1=sc0
+LocAppLanguage1=1
+LocGroupName1=Games
+LocCaption1=c0
+LocIconFileName1=iconfile
+LocNumberOfAppIcons1=2
+ViewDataCount1=1
+VwUid1=45689123
+VwScreenMode1=0
+VwCaption1=vc
+VwIconFileName1=viewiconfile
+VwNumberOfAppIcons1=0
+PropertiesCount=3
+PropertyName0=p1
+PropertyType0=3
+PropertyValue0=asd
+PropertyLocale0=0
+PropertyName1=p2
+PropertyType1=2
+PropertyValue1=101
+PropertyName2=p3
+PropertyType2=1
+PropertyValue2=asdfg
+
+[add_app_reg_info_5]
+IsMultiApp=True
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001238
+AppFile=appname5
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+OpaqueData=somedata
+OwnedFileCount=2
+FileName0=file0
+FileName1=file2
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueData0=servicedata
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+LocalizableAppInfoCount=2
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile
+LocNumberOfAppIcons0=2
+ViewDataCount0=1
+VwUid0=45689123
+VwScreenMode0=0
+VwCaption0=vc
+VwIconFileName0=viewiconfile
+VwNumberOfAppIcons0=0
+LocShortCaption1=sc0
+LocAppLanguage1=1
+LocGroupName1=Games
+LocCaption1=c0
+LocIconFileName1=iconfile
+LocNumberOfAppIcons1=2
+ViewDataCount1=1
+VwUid1=45689123
+VwScreenMode1=0
+VwCaption1=vc
+VwIconFileName1=viewiconfile
+VwNumberOfAppIcons1=0
+PropertiesCount=3
+PropertyName0=p1
+PropertyType0=3
+PropertyValue0=asd
+PropertyLocale0=0
+PropertyName1=p2
+PropertyType1=2
+PropertyValue1=101
+PropertyName2=p3
+PropertyType2=1
+PropertyValue2=asdfg
+
+[add_app_reg_info]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+OwnedFileCount=2
+FileName0=file0
+FileName1=file2
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=1
+ServiceOpaqueData0=servicedata
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+LocalizableAppInfoCount=2
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile
+LocNumberOfAppIcons0=2
+ViewDataCount0=1
+VwUid0=45689123
+VwScreenMode0=0
+VwCaption0=vc
+VwIconFileName0=viewiconfile
+VwNumberOfAppIcons0=0
+LocShortCaption1=sc0
+LocAppLanguage1=1
+LocGroupName1=Games
+LocCaption1=c0
+LocIconFileName1=iconfile
+LocNumberOfAppIcons1=2
+ViewDataCount1=1
+VwUid1=45689123
+VwScreenMode1=0
+VwCaption1=vc
+VwIconFileName1=viewiconfile
+VwNumberOfAppIcons1=0
+PropertiesCount=3
+PropertyName0=p1
+PropertyType0=3
+PropertyValue0=asd
+PropertyLocale0=0
+PropertyName1=p2
+PropertyType1=2
+PropertyValue1=101
+PropertyName2=p3
+PropertyType2=1
+PropertyValue2=asdfg
+
+[add_app_reg_info_21]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+OwnedFileCount=2
+FileName0=file0
+FileName1=file2
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=1
+ServiceOpaqueData0=servicedata
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=1
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile
+LocNumberOfAppIcons0=2
+ViewDataCount0=1
+VwUid0=45689123
+VwScreenMode0=0
+VwCaption0=vc
+VwIconFileName0=viewiconfile
+VwNumberOfAppIcons0=0
+PropertiesCount=3
+PropertyName0=p1
+PropertyType0=3
+PropertyValue0=asd
+PropertyLocale0=0
+PropertyName1=p2
+PropertyType1=2
+PropertyValue1=101
+PropertyName2=p3
+PropertyType2=1
+PropertyValue2=asdfg
+
+[del_app_entry]
+UseGlobalId=True
+GlobalIdName=Component_Global
+SoftwareType=plain
+ComponentIdOffset=0
+
+
+[add_app_reg_info_sameappuid]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+
+[add_app_reg_info_sameappfile_1]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global1221
+AppUid=A0001221
+AppFile=appname
+
+[add_app_reg_info_sameappfile_2]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global1221
+AppUid=A0001221
+AppFile=ApPnAmE
+
+[add_app_reg_info_nullappuid]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=0
+AppFile=appname
+
+[add_app_reg_info_nullappfile]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+AppUid=A0006789
+GlobalIdName=Component_Global
+AppFile=
+
+[add_app_reg_info_nocaptioniconinfo]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0006789
+AppFile=appname
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=1
+ServiceOpaqueData0=servicedata
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=1
+LocGroupName0=Games
+VwDataCount0=1
+VwUid0=45689123
+VwScreenMode0=0
+
+[test_component_app1]
+IsMultiApp=True
+SoftwareType=plain
+ComponentName=TestComponent
+VendorName=AppInstallTeam
+GlobalIdName=TestComponentGlobalId
+AppUid=81110008
+AppFile=TestApp.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games123
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=Null
+OwnedFileCount=2
+FileName0=TestApp0
+FileName1=TestApp1
+
+[del_test_component]
+UseGlobalId=True
+GlobalIdName=TestComponentGlobalId
+SoftwareType=plain
+ComponentIdOffset=0
+
+[test_component_app2]
+IsMultiApp=True
+SoftwareType=plain
+ComponentName=TestComponent
+VendorName=AppInstallTeam
+GlobalIdName=TestComponentGlobalId
+AppUid=81110009
+AppFile=TestApp1.exe
+Attributes=0
+Hidden=6
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games1234
+DefaultScreenNumber=4
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=Null
+OwnedFileCount=1
+FileName0=TestApp2
+
+[add_app_to_non_existent_comp]
+UseComponentId=369
+AppUid=8111000A
+AppFile=TestApp123.exe
+Attributes=0
+Hidden=1
+Embeddability=2
+NewFile=0
+Launch=4
+GroupName=XYZ123
+DefaultScreenNumber=8
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=Null
+OwnedFileCount=1
+FileName0=TestApp123
+
+[appownedfiles]
+AppUid=A0001234
+OwnedFileCount=2
+FileName0=file0
+FileName1=file2
+
+[add_app_reg_info_noappownedfiles]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+OwnedFileCount=0
+
+[noappownedfiles]
+AppUid=A0001234
+OwnedFileCount=0
+
+[add_app_reg_info_nogroupname]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+OwnedFileCount=0
+
+[appcapability]
+AppUid=A0001234
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+
+[appcapability_nogroupname]
+AppUid=A0001234
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=
+
+[add_app_reg_info_nolocalizedinfo]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+
+[add_app_reg_info_nocaptionandiconinfo]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=1
+LocGroupName0=Games
+
+[add_app_reg_info_onlylocalizedinfo]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=1
+LocGroupName0=Games
+
+[add_app_reg_info_noviewcaptionandiconinfo]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=1
+LocGroupName0=Games
+ViewDataCount=1
+VwUid0=45689123
+VwScreenMode0=0
+
+[appicon]
+AppUid=A0001234
+LocIconFileName=iconfile
+
+[noappicon]
+AppUid=A0001234
+LocIconFileName
+
+[appviewicon]
+AppUid=A0001234
+VwUid=45689123
+VwIconFileName=viewiconfile
+
+[noappviewicon]
+AppUid=A0001234
+VwUid=0
+VwIconFileName
+
+[add_app_reg_info_nolocalizedinfoforenglish]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=24
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile_IntFr
+LocNumberOfAppIcons0=2
+ViewDataCount0=2
+VwUid0=45689123
+VwScreenMode0=0
+VwCaption0=vc0
+VwIconFileName0=viewiconfile_IntFr0
+VwNumberOfAppIcons0=1
+VwUid1=45689124
+VwScreenMode1=1
+VwCaption1=vc1
+VwIconFileName1=viewiconfile_IntFr1
+VwNumberOfAppIcons1=1
+
+[appicon_nolocalizedinfoforenglish]
+AppUid=A0001234
+LocIconFileName=iconfile_IntFr
+
+[appviewicon_nolocalizedinfoforenglish]
+AppUid=A0001234
+VwUid=45689123
+VwIconFileName=viewiconfile_IntFr0
+
+[add_app_reg_info_noviewdatafornearestlanguage]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=24
+AppOpaqueData0=somedata
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=24
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile_IntFr
+LocNumberOfAppIcons0=2
+
+[noviewdatafornearestlanguage]
+AppUid=A0001234
+VwUid=45689123
+VwIconFileName
+
+
+//APPINS-SCR-APPREGINFO-API-0028
+
+[add_app_with_localizable_info]
+ComponentName=ComponentXYZ
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global_XYZ
+AppUid=A0000111
+AppFile=appname111
+
+LocalizableAppInfoCount=3
+
+LocShortCaption0=sc0
+LocAppLanguage0=1
+LocGroupName0=Games
+ViewDataCount0=3
+VwUid0=1
+VwScreenMode0=0
+VwCaption0=cap1
+VwIconFileName0=icon1
+VwNumberOfAppIcons0=0
+VwUid1=2
+VwScreenMode1=1
+VwCaption1=cap2
+VwIconFileName1=icon2
+VwNumberOfAppIcons1=1
+VwUid2=3
+VwScreenMode2=0
+VwCaption2=cap3
+VwIconFileName2=icon3
+VwNumberOfAppIcons2=1
+
+LocShortCaption1=sc1
+LocAppLanguage1=10
+LocGroupName1=Games
+ViewDataCount1=2
+VwUid3=4
+VwScreenMode3=1
+VwCaption3=cap4
+VwIconFileName3=icon4
+VwNumberOfAppIcons3=1
+VwUid4=5
+VwScreenMode4=0
+VwCaption4=cap5
+VwIconFileName4=icon5
+VwNumberOfAppIcons4=1
+
+LocShortCaption2=sc2
+LocAppLanguage2=20
+LocGroupName2=Games
+ViewDataCount2=1
+VwUid5=6
+VwScreenMode5=1
+VwCaption5=cap5
+VwIconFileName5=icon5
+VwNumberOfAppIcons5=3
+
+
+[get_app_view_info]
+AppUid=A0000111
+
+ViewDataCount=3
+VwUid0=1
+VwScreenMode0=0
+VwCaption0=cap1
+VwIconFileName0=icon1
+VwNumberOfAppIcons0=0
+VwUid1=2
+VwScreenMode1=1
+VwCaption1=cap2
+VwIconFileName1=icon2
+VwNumberOfAppIcons1=1
+VwUid2=3
+VwScreenMode2=0
+VwCaption2=cap3
+VwIconFileName2=icon3
+VwNumberOfAppIcons2=1
+
+//APPINS-SCR-APPREGINFO-API-0029
+
+[add_app_with_partial_view_info]
+ComponentName=ComponentXYZ
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global_XYZ
+AppUid=A0000222
+AppFile=appname222
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=sc3
+LocAppLanguage0=1
+LocGroupName0=Games
+ViewDataCount0=1
+VwUid0=6
+VwScreenMode0=0
+
+[get_app_view_info_partial]
+AppUid=A0000222
+ViewDataCount=1
+VwUid0=6
+VwScreenMode0=0
+
+//APPINS-SCR-APPREGINFO-API-0029b
+
+[add_app_with_partial_view_info_2]
+ComponentName=ComponentXYZ
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global_XYZ
+AppUid=A0000222
+AppFile=appname222
+
+LocalizableAppInfoCount=1
+LocShortCaption0=sc3
+LocAppLanguage0=1
+LocGroupName0=Games
+ViewDataCount0=0
+
+[get_app_view_info_partial_2]
+AppUid=A0000222
+ViewDataCount=0
+
+//APPINS-SCR-APPREGINFO-API-0030
+[get_view_info_for_nonexisting_app]
+AppUid=A0000456
+ViewDataCount=0
+
+//APPINS-SCR-APPREGINFO-API-0031
+
+[add_app_with_localizable_info_for_international_french]
+ComponentName=ComponentXYZ
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global_XYZ
+AppUid=A0000333
+AppFile=appname333
+
+LocalizableAppInfoCount=2
+
+LocShortCaption0=sc0
+LocAppLanguage0=24
+LocGroupName0=Games
+ViewDataCount0=3
+VwUid0=1
+VwScreenMode0=0
+VwCaption0=cap1
+VwIconFileName0=icon1
+VwNumberOfAppIcons0=0
+VwUid1=2
+VwScreenMode1=1
+VwCaption1=cap2
+VwIconFileName1=icon2
+VwNumberOfAppIcons1=1
+VwUid2=3
+VwScreenMode2=0
+VwCaption2=cap3
+VwIconFileName2=icon3
+VwNumberOfAppIcons2=1
+
+LocShortCaption1=sc1
+LocAppLanguage1=1
+LocGroupName1=Games
+ViewDataCount1=2
+VwUid3=4
+VwScreenMode3=1
+VwCaption3=cap4
+VwIconFileName3=icon4
+VwNumberOfAppIcons3=1
+VwUid4=5
+VwScreenMode4=0
+VwCaption4=cap5
+VwIconFileName4=icon5
+VwNumberOfAppIcons4=1
+
+
+[get_app_view_french]
+AppUid=A0000333
+
+ViewDataCount=3
+VwUid0=1
+VwScreenMode0=0
+VwCaption0=cap1
+VwIconFileName0=icon1
+VwNumberOfAppIcons0=0
+VwUid1=2
+VwScreenMode1=1
+VwCaption1=cap2
+VwIconFileName1=icon2
+VwNumberOfAppIcons1=1
+VwUid2=3
+VwScreenMode2=0
+VwCaption2=cap3
+VwIconFileName2=icon3
+VwNumberOfAppIcons2=1
+
+[get_app_view_german]
+AppUid=A0000333
+ViewDataCount=0
+
+//common delete for APPINS-SCR-APPREGINFO-API-0028, APPINS-SCR-APPREGINFO-API-0029, APPINS-SCR-APPREGINFO-API-0031
+
+[del_app_entry_details]
+UseGlobalId=True
+GlobalIdName=Component_Global_XYZ
+SoftwareType=plain
+ComponentIdOffset=0
+
+
+//for tc API-SEC-SCR-API-0031 to 0039
+
+[AppInfoFilter0001-AP-loc01]
+IsVerification=ETrue
+AIFAllApps=ETrue
+AppEntriesCount=2
+TAppInfoUID0=11111111
+TAppInfoFileName0=allaps
+TAppInfoCaption0=captionApp1loc01
+TAppInfoShortCaption0=sc01
+TAppInfoUID1=22222222
+TAppInfoFileName1=secondApp
+TAppInfoCaption1=captionApp2loc01
+TAppInfoShortCaption1=scapp01
+NoOfEntries=5
+
+[AppInfoFilter0001-AP-loc02]
+IsVerification=ETrue
+AIFAllApps=ETrue
+AppEntriesCount=2
+TAppInfoUID0=11111111
+TAppInfoFileName0=allaps
+TAppInfoCaption0=cl02
+TAppInfoShortCaption0=sc02
+TAppInfoUID1=22222222
+TAppInfoFileName1=secondApp
+TAppInfoCaption1=captionApp2loc02
+TAppInfoShortCaption1=scapp02
+NoOfEntries=1
+
+[AppInfoFilter0002-AP-loc01]
+IsVerification=ETrue
+AIFAllApps=ETrue
+AIFAllAppsScreenMode=1
+AppEntriesCount=1
+TAppInfoUID0=11111111
+TAppInfoFileName0=allaps
+TAppInfoCaption0=captionApp1loc01
+TAppInfoShortCaption0=sc01
+NoOfEntries=2
+
+[AppInfoFilter0002-AP-loc01-A]
+IsVerification=ETrue
+AIFAllApps=ETrue
+AIFAllAppsScreenMode=0
+AppEntriesCount=2
+TAppInfoUID0=11111111
+TAppInfoFileName0=allaps
+TAppInfoCaption0=captionApp1loc01
+TAppInfoShortCaption0=sc01
+TAppInfoUID1=22222222
+TAppInfoFileName1=secondApp
+TAppInfoCaption1=captionApp2loc01
+TAppInfoShortCaption1=scapp01
+
+NoOfEntries=100
+
+[AppInfoFilter0002-AP-loc01-B]
+IsVerification=ETrue
+AIFAllApps=ETrue
+AIFAllAppsScreenMode=0
+LocaleValue=02
+AppEntriesCount=2
+TAppInfoUID0=11111111
+TAppInfoFileName0=allaps
+TAppInfoCaption0=cl02
+TAppInfoShortCaption0=sc02
+TAppInfoUID1=22222222
+TAppInfoFileName1=secondApp
+TAppInfoCaption1=captionApp2loc02
+TAppInfoShortCaption1=scapp02
+
+NoOfEntries=100
+
+[AppInfoFilter0003-AP-loc01]
+IsVerification=ETrue
+AIFEmbApps=ETrue
+AppEntriesCount=2
+TAppInfoUID0=33333333
+TAppInfoFileName0=ThirdApp
+TAppInfoShortCaption0=scapp01
+TAppInfoUID1=55555555
+TAppInfoFileName1=fifthApp
+NoOfEntries=2
+
+[AppInfoFilter0003-AP-loc01-A]
+IsVerification=ETrue
+AIFEmbApps=ETrue
+AIFEmbAppScreanMode=5
+LocaleValue=02
+AppEntriesCount=0
+
+[AppInfoFilter0003-AP-loc01-B]
+IsVerification=ETrue
+AIFEmbApps=ETrue
+AIFEmbAppScreanMode=5
+LocaleValue=02
+AppEntriesCount=0
+
+[AppInfoFilter0003-AP-loc01-C]
+IsVerification=ETrue
+AIFEmbApps=ETrue
+AIFEmbAppScreanMode=5
+LocaleValue=01
+AppEntriesCount=1
+TAppInfoUID0=33333333
+TAppInfoFileName0=ThirdApp
+TAppInfoShortCaption0=scapp01
+
+[AppInfoFilter0003-AP-loc01-D]
+IsVerification=ETrue
+AIFEmbApps=ETrue
+AIFEmbAppScreanMode=0
+LocaleValue=01
+AppEntriesCount=1
+TAppInfoUID0=33333333
+TAppInfoFileName0=ThirdApp
+TAppInfoShortCaption0=scapp01
+
+
+[AppInfoFilter0004-AP-loc01]
+IsVerification=ETrue
+AIFFilEmbAppsEmbedabilityFilter=1
+EFilterVal0=6
+AppEntriesCount=2
+TAppInfoUID0=11111111
+TAppInfoFileName0=embedableApps
+TAppInfoUID1=22222222
+TAppInfoFileName1=secondApp
+NoOfEntries=2
+
+[AppInfoFilter0004-AP-loc01-A]
+IsVerification=ETrue
+AIFFilEmbAppsEmbedabilityFilter=2
+EFilterVal0=6
+EFilterVal1=5
+AppEntriesCount=3
+TAppInfoUID0=11111111
+TAppInfoFileName0=embedableApps
+TAppInfoUID1=22222222
+TAppInfoFileName1=secondApp
+TAppInfoUID2=33333333
+TAppInfoFileName2=ThirdApp
+TAppInfoShortCaption2=scapp01
+NoOfEntries=2
+
+[AppInfoFilter0004-AP-loc01-B]
+IsVerification=ETrue
+AIFFilEmbAppsEmbedabilityFilter=2
+AIFFilEmbAppsEmbedableScreenMode=5
+EFilterVal0=6
+EFilterVal1=5
+AppEntriesCount=1
+TAppInfoUID0=33333333
+TAppInfoFileName0=ThirdApp
+TAppInfoShortCaption0=scapp01
+NoOfEntries=2
+
+[AppInfoFilter0004-AP-loc01-C]
+IsVerification=ETrue
+AIFFilEmbAppsEmbedabilityFilter=3
+AIFFilEmbAppsEmbedableScreenMode=5
+EFilterVal0=7
+EFilterVal1=8
+EFilterVal1=9
+AppEntriesCount=0
+NoOfEntries=2
+ 
+[AppInfoFilter0005-AP-loc01]
+IsVerification=ETrue
+AIFFilAppsWithCapMask=1
+AIFFilAppsWithCapValue=1
+AppEntriesCount=3
+TAppInfoUID0=11111111
+TAppInfoFileName0=embedableApps
+TAppInfoUID1=55555555
+TAppInfoFileName1=fifthApp
+TAppInfoUID2=33333333
+TAppInfoFileName2=ThirdApp
+TAppInfoShortCaption2=scapp01
+NoOfEntries=2
+
+[AppInfoFilter0005-AP-loc01-A]
+IsVerification=ETrue
+AIFFilAppsWithCapMask=1
+AIFFilAppsWithCapValue=1
+AIFFilAppsWithCapScreenMode=5
+AppEntriesCount=1
+TAppInfoUID0=33333333
+TAppInfoFileName0=ThirdApp
+TAppInfoShortCaption0=scapp01 
+NoOfEntries=2
+
+[AppInfoFilter0005-AP-loc01-B]
+IsVerification=ETrue
+AIFFilAppsWithCapMask=8
+AIFFilAppsWithCapValue=8
+AIFFilAppsWithCapScreenMode=5
+AppEntriesCount=0
+NoOfEntries=2
+
+[AppInfoFilter0006-AP-loc01]
+IsVerification=ETrue
+AIFServerApps=A99611
+AppEntriesCount=2
+TAppInfoUID0=11111111
+TAppInfoFileName0=allaps
+TAppInfoCaption0=captionApp1loc01
+TAppInfoShortCaption0=sc01
+TAppInfoUID1=22222222
+TAppInfoFileName1=secondApp
+TAppInfoCaption1=captionApp2loc01
+TAppInfoShortCaption1=scapp01
+NoOfEntries=5
+
+[AppInfoFilter0006-AP-loc01-A]
+IsVerification=ETrue
+AIFServerApps=A99612
+AppEntriesCount=1
+TAppInfoUID0=11111111
+TAppInfoFileName0=allaps
+TAppInfoCaption0=captionApp1loc01
+TAppInfoShortCaption0=sc01
+
+[AppInfoFilter0006-AP-loc01-B]
+NoVerification=ETrue
+AIFServerApps=A99615
+
+[AppInfoFilter0006-AP-loc01-C]
+IsVerification=ETrue
+AIFServerApps=1531C82
+AIFServerAppsScreenMode=5
+AppEntriesCount=1
+TAppInfoUID0=22222222
+TAppInfoFileName0=secondApp
+TAppInfoCaption0=captionApp2loc01
+TAppInfoShortCaption0=scapp01
+
+[AppInfoFilter0006-AP-loc01-D]
+NoVerification=ETrue
+AIFServerApps=1531C82
+AIFServerAppsScreenMode=5
+
+
+[AppInfoFilter0008-AP-loc01]
+IsVerification=ETrue
+AIFAllApps=ETrue
+AppEntriesCount=2
+TAppInfoUID0=11111111
+TAppInfoFileName0=allaps
+TAppInfoCaption0=captionApp1loc01
+TAppInfoShortCaption0=sc01
+TAppInfoUID1=22222222
+TAppInfoFileName1=secondApp
+TAppInfoCaption1=captionApp2loc01
+TAppInfoShortCaption1=scapp01
+NoOfEntries=-1
+
+[AppInfoFilter0008-AP-loc01-A]
+IsVerification=ETrue
+AIFAllApps=ETrue
+AIFAllAppsScreenMode=-1
+AppEntriesCount=0
+NoOfEntries=2
+
+[AppInfoFilter0009-AP-loc01]
+IsVerification=ETrue
+AIFFilAppsWithCapMask=-4
+AIFFilAppsWithCapValue=-5
+AppEntriesCount=0
+
+[AppInfoFilter0009-AP-loc01-A]
+IsVerification=ETrue
+AIFFilAppsWithCapMask=98989
+AIFFilAppsWithCapValue=87878
+AppEntriesCount=0
+
+[AppInfoFilter0010-AP-loc01]
+IsVerification=EFalse
+
+[AppEntryData01]
+IsMultiApp=True
+SoftwareType=plain
+ComponentName=TestComponent
+VendorName=AppInstallTeam
+GlobalIdName=TestComponentGlobalId
+AppUid=11111111
+AppFile=allaps
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=application
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+OwnedFileCount=2
+FileName0=file0
+FileName1=file1
+ServiceInfoCount=2
+ServiceUid0=A99611
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=1
+ServiceOpaqueData0=servicedata
+ServiceUid1=A99612
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale1=1
+ServiceOpaqueData1=servicedata1
+LocalizableAppInfoCount=2
+LocShortCaption0=sc01
+LocAppLanguage0=01
+LocGroupName0=application01
+LocCaption0=captionApp1loc01
+LocIconFileName0=iconfile01
+LocNumberOfAppIcons0=2
+ViewDataCount0=2
+VwUid0=11116001
+VwScreenMode0=1
+VwCaption0=vc1111116001
+VwIconFileName0=vcf1111116001
+VwNumberOfAppIcons0=5
+VwUid1=11116002
+VwScreenMode1=0
+VwCaption1=vc1111116002
+VwIconFileName1=vc1111116002
+VwNumberOfAppIcons1=0
+LocShortCaption1=sc02
+LocAppLanguage1=02
+LocGroupName1=application02
+LocCaption1=cl02
+LocIconFileName1=iconfile02
+LocNumberOfAppIcons1=100
+ViewDataCount1=2
+VwUid2=11116003
+VwScreenMode2=1
+VwCaption2=vc1111116003
+VwIconFileName2=vc1111116003
+VwNumberOfAppIcons2=0
+VwUid3=11116004
+VwScreenMode3=0
+VwCaption3=vc1111116004
+VwIconFileName3=vc1111116004
+VwNumberOfAppIcons3=1
+PropertiesCount=1
+PropertyName0=p1
+PropertyType0=3
+PropertyValue0=asd
+PropertyLocale0=0
+
+[AppEntryData02]
+IsMultiApp=True
+SoftwareType=plain
+ComponentName=TestComponent
+VendorName=AppInstallTeam
+GlobalIdName=TestComponentGlobalId
+AppUid=22222222
+AppFile=secondApp
+Attributes=09
+Hidden=0
+Embeddability=01
+NewFile=0
+Launch=0
+GroupName=application
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+OwnedFileCount=1
+FileName0=secondComponentFirstFile
+ServiceInfoCount=5
+ServiceUid0=A99611
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=servicedata
+ServiceUid1=1531C82
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=servicedata1
+ServiceUid2=1531C83
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale2=0
+ServiceOpaqueData2=servicedata2
+ServiceUid3=1531C84
+ServiceOpaqueDataInfoCount3=1
+ServiceOpaqueLocale3=0
+ServiceOpaqueData3=servicedata3
+ServiceUid4=1531C85
+ServiceOpaqueDataInfoCount4=1
+ServiceOpaqueLocale4=0
+ServiceOpaqueData4=servicedata4
+LocalizableAppInfoCount=2
+LocShortCaption0=scapp01
+LocAppLanguage0=01
+LocGroupName0=game01
+LocCaption0=captionApp2loc01
+LocIconFileName0=iconfile01
+LocNumberOfAppIcons0=2
+ViewDataCount0=2
+VwUid0=22226001
+VwScreenMode0=0
+VwCaption0=vc2222226001
+VwIconFileName0=vcf2222226001
+VwNumberOfAppIcons0=5
+VwUid1=22226002
+VwScreenMode1=5
+VwCaption1=vc2222226002
+VwIconFileName1=vc2222226002
+VwNumberOfAppIcons1=0
+LocShortCaption1=scapp02
+LocAppLanguage1=02
+LocGroupName1=game02
+LocCaption1=captionApp2loc02
+LocIconFileName1=iconfile02
+LocNumberOfAppIcons1=100
+ViewDataCount1=2
+VwUid2=22226003
+VwScreenMode2=1
+VwCaption2=vc2222226003
+VwIconFileName2=vc2222226003
+VwNumberOfAppIcons2=0
+VwUid3=22226004
+VwScreenMode3=0
+VwCaption3=vc2222226004
+VwIconFileName3=vc2222226004
+VwNumberOfAppIcons3=1
+PropertiesCount=1
+PropertyName0=p1
+PropertyType0=3
+PropertyValue0=asd
+PropertyLocale0=0
+
+[AppEntryDataForTC-AppInfoFilter0003-AP-01]
+IsMultiApp=True
+SoftwareType=plain
+ComponentName=TestComponent
+VendorName=AppInstallTeam
+GlobalIdName=TestComponentGlobalId
+AppUid=11111111
+AppFile=embedableApps
+Attributes=01
+Hidden=0
+Embeddability=06
+NewFile=0
+Launch=0
+GroupName=application
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+
+[AppEntryDataForTC-AppInfoFilter0003-AP-02]
+IsMultiApp=True
+SoftwareType=plain
+ComponentName=TestComponent
+VendorName=AppInstallTeam
+GlobalIdName=TestComponentGlobalId
+AppUid=22222222
+AppFile=secondApp
+Attributes=02
+Hidden=0
+Embeddability=06
+NewFile=0
+Launch=0
+GroupName=application
+DefaultScreenNumber=1
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+
+[AppEntryDataForTC-AppInfoFilter0003-AP-04]
+IsMultiApp=True
+SoftwareType=plain
+ComponentName=TestComponent
+VendorName=AppInstallTeam
+GlobalIdName=TestComponentGlobalId
+AppUid=44444444
+AppFile=fourthApp
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=utility
+DefaultScreenNumber=1
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+
+[AppEntryDataForTC-AppInfoFilter0003-AP-05]
+IsMultiApp=True
+SoftwareType=plain
+ComponentName=TestComponent
+VendorName=AppInstallTeam
+GlobalIdName=TestComponentGlobalId
+AppUid=55555555
+AppFile=fifthApp
+Attributes=01
+Hidden=0
+Embeddability=02
+NewFile=0
+Launch=0
+GroupName=utility
+DefaultScreenNumber=1
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+
+[AppEntryDataForTC-AppInfoFilter0003-AP-03]
+IsMultiApp=True
+SoftwareType=plain
+ComponentName=TestComponent
+VendorName=AppInstallTeam
+GlobalIdName=TestComponentGlobalId
+AppUid=33333333
+AppFile=ThirdApp
+Attributes=03
+Hidden=0
+Embeddability=01
+NewFile=0
+Launch=0
+GroupName=tools
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+OwnedFileCount=1
+FileName0=dummeyfile
+LocalizableAppInfoCount=2
+LocShortCaption0=scapp01
+LocAppLanguage0=01
+LocGroupName0=tools01
+ViewDataCount0=2
+VwUid0=333336001
+VwScreenMode0=0
+VwCaption0=vc3333336001
+VwIconFileName0=vcf3333336001
+VwNumberOfAppIcons0=5
+VwUid1=333336002
+VwScreenMode1=5
+VwCaption1=vc3333336002
+VwIconFileName1=vc3333336002
+VwNumberOfAppIcons1=0
+LocShortCaption1=scapp02
+LocAppLanguage1=02
+LocGroupName1=tools02
+ViewDataCount1=2
+VwUid2=333336003
+VwScreenMode2=1
+VwCaption2=vc3333336003
+VwIconFileName2=vc3333336003
+VwNumberOfAppIcons2=0
+VwUid3=333336004
+VwScreenMode3=0
+VwCaption3=vc3333336004
+VwIconFileName3=vc3333336004
+VwNumberOfAppIcons3=1
+
+[AppEntryDataForTC-AppInfoFilter0004-AP-03]
+IsMultiApp=True
+SoftwareType=plain
+ComponentName=TestComponent
+VendorName=AppInstallTeam
+GlobalIdName=TestComponentGlobalId
+AppUid=33333333
+AppFile=ThirdApp
+Attributes=03
+Hidden=0
+Embeddability=05
+NewFile=0
+Launch=0
+GroupName=tools
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+OwnedFileCount=1
+FileName0=dummeyfile
+LocalizableAppInfoCount=2
+LocShortCaption0=scapp01
+LocAppLanguage0=01
+LocGroupName0=tools01
+ViewDataCount0=2
+VwUid0=333336001
+VwScreenMode0=0
+VwCaption0=vc3333336001
+VwIconFileName0=vcf3333336001
+VwNumberOfAppIcons0=5
+VwUid1=333336002
+VwScreenMode1=5
+VwCaption1=vc3333336002
+VwIconFileName1=vc3333336002
+VwNumberOfAppIcons1=0
+LocShortCaption1=scapp02
+LocAppLanguage1=02
+LocGroupName1=tools02
+ViewDataCount1=2
+VwUid2=333336003
+VwScreenMode2=1
+VwCaption2=vc3333336003
+VwIconFileName2=vc3333336003
+VwNumberOfAppIcons2=0
+VwUid3=333336004
+VwScreenMode3=0
+VwCaption3=vc3333336004
+VwIconFileName3=vc3333336004
+VwNumberOfAppIcons3=1
+
+[langauge_to_english]
+language=01
+
+[langauge_to_english_american]
+language=10
+
+[langauge_to_french]
+language=02
+
+[langauge_to_german]
+language=03
+
+[del_component_and_AppEntry]
+UseGlobalId=True
+GlobalIdName=TestComponentGlobalId
+SoftwareType=plain
+ComponentIdOffset=0
+
+[shared_data]
+shared_data_num = 1
+shared_name_1 = ComponentId  
+
+
+//APPINS-SCR-APPREGINFO-API-0042
+[add_app_reg_info_invalid_localizable_info]
+ComponentName=ComponentXYZ
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global_XYZ
+AppUid=A0000567
+AppFile=appname567
+
+LocalizableAppInfoCount=3
+
+LocShortCaption0=sc0
+LocAppLanguage0=1
+LocGroupName0=Games
+ViewDataCount0=3
+VwUid0=1
+VwScreenMode0=0
+VwCaption0=cap1
+VwIconFileName0=icon1
+VwNumberOfAppIcons0=0
+VwUid1=2
+VwScreenMode1=1
+VwCaption1=cap2
+VwIconFileName1=icon2
+VwNumberOfAppIcons1=1
+VwUid2=3
+VwScreenMode2=0
+VwCaption2=cap3
+VwIconFileName2=icon3
+VwNumberOfAppIcons2=1
+
+LocShortCaption1=sc1
+LocAppLanguage1=1
+LocGroupName1=Games
+ViewDataCount1=2
+VwUid3=4
+VwScreenMode3=1
+VwCaption3=cap4
+VwIconFileName3=icon4
+VwNumberOfAppIcons3=1
+VwUid4=5
+VwScreenMode4=0
+VwCaption4=cap5
+VwIconFileName4=icon5
+VwNumberOfAppIcons4=1
+
+LocShortCaption2=sc2
+LocAppLanguage2=20
+LocGroupName2=Games
+ViewDataCount2=1
+VwUid5=6
+VwScreenMode5=1
+VwCaption5=cap5
+VwIconFileName5=icon5
+VwNumberOfAppIcons5=3
+
+[add_app_reg_info_English]
+IsMultiApp=True
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+OwnedFileCount=2
+FileName0=file0
+FileName1=file2
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=1
+ServiceOpaqueData0=servicedata
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=1
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile
+LocNumberOfAppIcons0=2
+ViewDataCount0=1
+VwUid0=45689123
+VwScreenMode0=0
+VwCaption0=vc
+VwIconFileName0=viewiconfile
+VwNumberOfAppIcons0=0
+PropertiesCount=1
+PropertyName0=p1
+PropertyType0=2
+PropertyValue0=100
+
+[add_app_reg_info_complete_for_english]
+IsMultiApp=True
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001235
+AppFile=appname1
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+OwnedFileCount=2
+FileName0=file0
+FileName1=file2
+ServiceInfoCount=2
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=1
+ServiceOpaqueData0=servicedata
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+ServiceDataTypePriority1=1
+ServiceDataType1=richtext/plain
+ServiceUid1=3ADE68B2
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale1=1
+ServiceOpaqueData1=servicedata
+ServiceDataTypeCount1=0
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=01
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile
+LocNumberOfAppIcons0=2
+ViewDataCount0=3
+VwUid0=1
+VwScreenMode0=0
+VwCaption0=cap1
+VwIconFileName0=icon1
+VwNumberOfAppIcons0=0
+VwUid1=2
+VwScreenMode1=1
+VwCaption1=cap2
+VwIconFileName1=icon2
+VwNumberOfAppIcons1=1
+VwUid2=3
+VwScreenMode2=0
+PropertiesCount=2
+PropertyName0=p1
+PropertyType0=3
+PropertyValue0=asd
+PropertyLocale0=0
+PropertyName1=p2
+PropertyType1=2
+PropertyValue1=101
+
+[add_app_reg_info_complete_for_nearestlanguage]
+IsMultiApp=True
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001236
+AppFile=appname2
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=24
+AppOpaqueData0=somedata
+OwnedFileCount=2
+FileName0=file0
+FileName1=file2
+ServiceInfoCount=2
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=24
+ServiceOpaqueData0=servicedata
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+ServiceDataTypePriority1=1
+ServiceDataType1=richtext/plain
+ServiceUid1=3ADE68B2
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale1=24
+ServiceOpaqueData1=servicedata
+ServiceDataTypeCount1=0
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=24
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile
+LocNumberOfAppIcons0=2
+ViewDataCount0=3
+VwUid0=1
+VwScreenMode0=0
+VwCaption0=cap1
+VwIconFileName0=icon1
+VwNumberOfAppIcons0=0
+VwUid1=2
+VwScreenMode1=1
+VwCaption1=cap2
+VwIconFileName1=icon2
+VwNumberOfAppIcons1=1
+VwUid2=3
+VwScreenMode2=0
+PropertiesCount=1
+PropertyName0=p1
+PropertyType0=3
+PropertyValue0=asd
+PropertyLocale0=0
+
+[add_app_reg_info_noviewdatafornearestlanguage_english]
+IsMultiApp=True
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001236
+AppFile=appname3
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=1
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile_En
+LocNumberOfAppIcons0=2
+
+[ApplicationRegistrationData_Negative_NoOfEntries]
+Locale  = 01
+NoOfEntries=-2
+AppRegEntriesConfigCount=1
+configsection0 = add_app_reg_info
+
+[ApplicationRegistrationData_NotExist]
+AppRegEntriesConfigCount=1
+configsection0 = app_reg_info_no_localizable_info
+
+[app_reg_info_no_localizable_info]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+LocalizableAppInfoCount=0
+
+[ApplicationRegistrationData_MultipleApp_for_english]
+Locale  = 01
+NoOfEntries=3
+AppRegEntriesConfigCount=3
+configsection0 = add_app_reg_info_English
+configsection1 = add_app_reg_info_complete_for_english
+configsection2 = add_app_reg_info_noviewdatafornearestlanguage_english
+
+[ApplicationRegistrationData_complete_for_english_Test09]
+Locale  = 01
+NoOfEntries=3
+AppRegAppUidCount=3
+AppRegAppUid0 = abc
+AppRegAppUid1 = abd
+AppRegAppUid2 = A0001235
+AppRegEntriesConfigCount=1
+configsection0 = add_app_reg_info_complete_for_english
+
+[ApplicationRegistrationData_complete_for_english_Test10]
+Locale  = 01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0 = A0001235
+AppRegEntriesConfigCount=0
+
+[ApplicationRegistrationData_MultipleApp_for_english_test11]
+Locale  = 01
+NoOfEntries=1
+AppRegAppUidCount=2
+AppRegAppUid0 = A0001234
+AppRegAppUid1 = A0001236
+AppRegEntriesConfigCount=2
+configsection0 = add_app_reg_info_English
+configsection1 = add_app_reg_info_noviewdatafornearestlanguage_english
+
+[ApplicationRegistrationData_MultipleApp_for_english_test12]
+Locale  = 01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0 = A0001235
+AppRegEntriesConfigCount=0
+
+[ApplicationRegistrationData_MultipleApp_for_english_test13]
+Locale  = 01
+NoOfEntries=2
+AppRegAppUidCount=1
+AppRegAppUid0 = A0001235
+AppRegEntriesConfigCount=4
+configsection0 = add_app_reg_info_complete_for_english
+configsection1 = add_app_reg_info_noviewdatafornearestlanguage_english
+configsection2 = add_app_reg_info_4
+configsection3 = add_app_reg_info_5
+
+[ApplicationRegistrationData_MultipleApp_NoLocale]
+NoOfEntries=3
+AppRegEntriesConfigCount=3
+configsection0 = add_app_reg_info_21
+configsection1 = add_app_reg_info_complete_for_english
+configsection2 = add_app_reg_info_noviewdatafornearestlanguage_english
+
+[ApplicationRegistrationData_noappownedfiles]
+AppRegEntriesConfigCount=1
+configsection0 = add_app_reg_info_onlylocalizedinfo
+
+[ApplicationRegistrationData_noviewdatafornearestlanguage]
+AppRegEntriesConfigCount=1
+configsection0 = add_app_reg_info_noviewdatafornearestlanguage
+
+[ApplicationRegistrationData_complete_for_english]
+AppRegEntriesConfigCount=1
+configsection0 = add_app_reg_info_complete_for_english
+
+[ApplicationRegistrationData_complete_for_nearestlanguage]
+AppRegEntriesConfigCount=1
+configsection0 = add_app_reg_info_complete_for_nearestlanguage
+
+
+
+//APPINS-SCR-APPREGINFO-API-0043
+[add_app1_with_service_info]
+IsMultiApp=True
+ComponentName=ComponentXYZ
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global_XYZ
+AppUid=A0000777
+AppFile=appname1
+
+ServiceInfoCount=2
+ServiceUid0=3ADE67DF
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=opaquedata1
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=doc
+ServiceDataTypePriority1=1
+ServiceDataType1=txt
+
+ServiceUid1=3ADE684E
+ServiceDataTypeCount1=1
+ServiceDataTypePriority2=4
+ServiceDataType2=text/plain
+
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+
+[add_app2_with_service_info]
+IsMultiApp=True
+ComponentName=ComponentXYZ
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global_XYZ
+AppUid=A0000888
+AppFile=appname2
+
+ServiceInfoCount=1
+ServiceUid0=3ADE67DF
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=opaquedata3
+ServiceDataTypeCount0=3
+ServiceDataTypePriority0=10
+ServiceDataType0=doc
+ServiceDataTypePriority1=1
+ServiceDataType1=txt
+ServiceDataTypePriority2=5
+ServiceDataType2=richtext
+
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+
+[add_app3_with_service_info]
+IsMultiApp=True
+ComponentName=ComponentXYZ
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global_XYZ
+AppUid=A0000999
+AppFile=appname3
+
+ServiceInfoCount=1
+ServiceUid0=3ADE68BD
+ServiceOpaqueData0=opaquedata4
+ServiceDataTypeCount0=0
+
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+
+[add_app4_with_service_info]
+IsMultiApp=True
+ComponentName=ComponentXYZ
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global_XYZ
+AppUid=A0000666
+AppFile=appname4
+
+ServiceInfoCount=1
+ServiceUid0=3ADE67DF
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=opaquedata5
+ServiceDataTypeCount0=0
+
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+
+
+[get_service_info_given_appuid]
+FilterToSet=1
+AppUid=A0000777
+ServiceInfoCount=2
+ServiceUid0=3ADE67DF
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=opaquedata1
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=doc
+ServiceDataTypePriority1=1
+ServiceDataType1=txt
+
+ServiceUid1=3ADE684E
+ServiceDataTypeCount1=1
+ServiceDataTypePriority2=4
+ServiceDataType2=text/plain
+
+
+[get_service_info_given_serviceuid]
+FilterToSet=2
+ServiceUid=3ADE67DF
+ServiceInfoCount=3
+
+ServiceUid0=3ADE67DF
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=opaquedata1
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=doc
+ServiceDataTypePriority1=1
+ServiceDataType1=txt
+
+ServiceUid1=3ADE67DF
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=opaquedata3
+ServiceDataTypeCount1=3
+ServiceDataTypePriority2=10
+ServiceDataType2=doc
+ServiceDataTypePriority3=1
+ServiceDataType3=txt
+ServiceDataTypePriority4=5
+ServiceDataType4=richtext
+
+ServiceUid2=3ADE67DF
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale2	=0
+ServiceOpaqueData2=opaquedata5
+ServiceDataTypeCount2=0
+
+
+[get_service_info_given_serviceuid_and_datatype]
+FilterToSet=3
+ServiceUid=3ADE67DF
+ServiceDataType=txt
+ServiceInfoCount=2
+
+ServiceUid0=3ADE67DF
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=opaquedata1
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=txt
+
+ServiceUid1=3ADE67DF
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=opaquedata3
+ServiceDataTypeCount1=1
+ServiceDataTypePriority1=1
+ServiceDataType1=txt
+
+[get_service_info_given_appuid_and_serviceuid]
+FilterToSet=4
+AppUid=A0000777
+ServiceUid=3ADE67DF
+ServiceInfoCount=1
+ServiceUid0=3ADE67DF
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=opaquedata1
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=doc
+ServiceDataTypePriority1=1
+ServiceDataType1=txt
+
+
+[del_app_with_service_info]
+UseGlobalId=True
+GlobalIdName=Component_Global_XYZ
+SoftwareType=plain
+ComponentIdOffset=0
+
+
+//APPINS-SCR-APPREGINFO-API-0044
+
+[get_service_info_given_nonexisting_appuid]
+FilterToSet=1
+AppUid=A0000678
+
+[get_service_info_given_nonexisting_serviceuid]
+FilterToSet=2
+ServiceUid=3ADE69A7
+
+[get_service_info_given_nonexisting_serviceuid_and_datatype1]
+FilterToSet=3
+ServiceUid=3ADE67DF
+ServiceDataType=text/plain
+
+[get_service_info_given_nonexisting_serviceuid_and_datatype2]
+FilterToSet=3
+ServiceUid=3ADE69A7
+ServiceDataType=doc
+
+[get_service_info_given_nonexisting_serviceuid_and_datatype3]
+FilterToSet=3
+ServiceUid=3ADE69A7
+ServiceDataType=html
+
+[get_service_info_given_nonexisting_appuid_and_serviceuid1]
+FilterToSet=4
+AppUid=A0000678
+ServiceUid=3ADE67DF
+
+[get_service_info_given_nonexisting_appuid_and_serviceuid2]
+FilterToSet=4
+AppUid=A0000777
+ServiceUid=3ADE67EB
+
+[get_service_info_given_nonexisting_appuid_and_serviceuid2]
+FilterToSet=4
+AppUid=A0000678
+ServiceUid=3ADE67EB
+
+//APPINS-SCR-APPREGINFO-API-0045
+[add_app1_comp1]
+IsMultiApp=True
+ComponentName=Component1
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global1
+AppUid=A0000111
+AppFile=appname1
+
+[add_app2_comp1]
+IsMultiApp=True
+ComponentName=Component1
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global1
+AppUid=A0000222
+AppFile=appname2
+
+[add_app3_comp1]
+IsMultiApp=True
+ComponentName=Component1
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global1
+AppUid=A0000333
+AppFile=appname3
+
+[add_app4_comp2]
+ComponentName=Component2
+VendorName=VendorXYZ
+SoftwareType=plain
+GlobalIdName=Component_Global2
+AppUid=A0000444
+AppFile=appname4
+
+
+[app_to_comp_mapping]
+AppUid=A0000222
+GlobalIdName=Component_Global1
+SoftwareType=plain
+
+[comp_to_app_mapping]
+GlobalIdName=Component_Global1
+SoftwareType=plain
+AppCount=3
+AppUid0=A0000111
+AppUid1=A0000222
+AppUid2=A0000333
+
+[del_comp1]
+UseGlobalId=True
+GlobalIdName=Component_Global1
+SoftwareType=plain
+
+[del_comp2]
+UseGlobalId=True
+GlobalIdName=Component_Global2
+SoftwareType=plain
+
+
+[nonexisting_appuid]
+AppUid=A0000456
+GlobalIdName=Non_existing
+SoftwareType=invalid
+
+
+[nonexisting_compid]
+GlobalIdName=Non_existing
+SoftwareType=invalid
+AppCount=0
+
+[app_reg_info_get_serviceuid]
+AppUid=A0001234
+NoOfServiceUids=1
+ServiceUid0=3ADE68B1
+
+[app_reg_info_get_appfordatatype]
+AppUid=A0001234
+ServiceDataType=text/plain
+UidExists=True
+
+[app_reg_info_get_appfordatatypeandservice]
+AppUid=A0001234
+ServiceDataType=text/plain
+ServiceUid=3ADE68B1
+UidExists=True
+
+[app_reg_info_get_defaultscreennumber]
+AppUid=A0001234
+DefaultScreenNumber=0
+
+[app_reg_info_get_iconcount]
+AppUid=A0001234
+LocNumberOfAppIcons=2
+
+[app_reg_info_get_applanguage]
+AppUid=A0001234
+LocAppLanguage=1
+
+[AppEntryData02_get_serviceuid]
+AppUid=22222222
+NoOfServiceUids=5
+ServiceUid0=A99611
+ServiceUid1=1531C82
+ServiceUid2=1531C83
+ServiceUid3=1531C84
+ServiceUid4=1531C85
+
+[test_component_app1_get_serviceUid]
+AppUid=81110008
+NoOfServiceUids=0
+
+[app_reg_info_get_appfordatatype_notexist]
+AppUid=A0001234
+UidExists=False
+ServiceDataType=richtext/plain
+
+[app_reg_info_get_appfordatatypeandservice_notexist]
+ServiceDataType=richtext/plain
+ServiceUid=3ADE68B1
+UidExists=False
+
+[add_app1_with_service_info_get_notexists]
+AppUid=A0000777
+
+[SimultaneousCreateTransaction]
+IsMultiApp=True
+SimultaneousCreateTransaction=True
+AIFAllApps=ETrue
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=11111111
+AppFile=embedableApps
+Attributes=01
+Hidden=0
+Embeddability=06
+NewFile=0
+Launch=0
+GroupName=application
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+
+[SimultaneousWriteReadAppInfoSameSession]
+IsMultiApp=True
+SimultaneousWriteReadAppInfoSameSession=True
+AIFAllApps=ETrue
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=11111111
+AppFile=embedableApps
+Attributes=01
+Hidden=0
+Embeddability=06
+NewFile=0
+Launch=0
+GroupName=application
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+
+[SimultaneousWriteAppInfoDiffSession]
+IsMultiApp=True
+SimultaneousWriteAppInfoDiffSession=True
+AIFAllApps=ETrue
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=11111111
+AppFile=embedableApps
+Attributes=01
+Hidden=0
+Embeddability=06
+NewFile=0
+Launch=0
+GroupName=application
+DefaultScreenNumber=0
+
+[SimultaneousReadAppInfoDiffSessionWithoutTransaction]
+IsMultiApp=True
+SimultaneousReadAppInfoDiffSessionWithoutTransaction=True
+AIFAllApps=ETrue
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=11111111
+AppFile=embedableApps
+Attributes=01
+Hidden=0
+Embeddability=06
+NewFile=0
+Launch=0
+GroupName=application
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+
+[add_app_reg_info_ObjectWithoutOptionalFields]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+ObjectWithoutOptionalFields=True
+AppUid=A0001234
+AppFile=appname
+
+//APPINS-SCR-APPREGINFO-API-0051 and APPINS-SCR-APPREGINFO-API-0052
+
+[add_app_with_localizable_info_english_and_international_french]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+LocalizableAppInfoCount=2
+LocShortCaption0=english_short_caption
+LocAppLanguage0=1
+LocCaption0=english_caption
+LocShortCaption1=international_french_short_caption
+LocAppLanguage1=24
+LocCaption1=international_french_caption
+
+[get_app_info_default_locale_english]
+AppUid=A0001234
+AppFile=appname
+ShortCaption=english_short_caption
+Caption=english_caption
+
+[get_app_info_default_locale_international_french]
+AppUid=A0001234
+AppFile=appname
+ShortCaption=international_french_short_caption
+Caption=international_french_caption
+
+[get_app_info_for_nonexisting_app]
+AppUid=A0004321
+
+[get_app_info_international_french]
+AppUid=A0001234
+AppFile=appname
+ShortCaption=international_french_short_caption
+Caption=international_french_caption
+Locale=24
+
+[get_app_info_french]
+AppUid=A0001234
+AppFile=appname
+ShortCaption=international_french_short_caption
+Caption=international_french_caption
+Locale=2
+
+[get_app_info_german_nonexiting]
+AppUid=A0001234
+AppFile=appname
+Locale=3
+
+[SCROutOfMemory_App_RegistrationInfo]
+IsMultiApp=True
+IsAppInfoOomTest=True
+AIFAllApps=ETrue
+SoftwareType=plain
+ComponentName=TestComponent
+VendorName=AppInstallTeam
+GlobalIdName=TestComponentGlobal
+AppUid=A0001244
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=somedata
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=1
+LocGroupName0=Games
+ViewDataCount=1
+VwUid0=45689123
+VwScreenMode0=0
+
+[add_array_of_opaque_data]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001432
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=4
+AppOpaqueLocale0=0
+AppOpaqueData0=somedata
+AppOpaqueLocale1=1
+AppOpaqueData1=
+AppOpaqueLocale2=2
+AppOpaqueData2= 
+AppOpaqueLocale3=3
+AppOpaqueData3=
+OwnedFileCount=0
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=4
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=servicedata
+ServiceOpaqueLocale1=1
+ServiceOpaqueData1=servicedata1
+ServiceOpaqueLocale2=2
+ServiceOpaqueData2= servicedata2
+ServiceOpaqueLocale3=3
+ServiceOpaqueData3= servicedata3
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+
+[get_service_opaquedata]
+FilterToSet=1
+AppUid=A0001432
+ServiceUid=3ADE68B1
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=servicedata
+
+
+[test_app_opaque_data_1]
+AppRegEntriesConfigCount=1
+configsection0=opaque_data_new_1
+Locale=0
+
+[test_app_opaque_data_2]
+AppRegEntriesConfigCount=1
+configsection0=opaque_data_new_2
+Locale=1
+
+[test_app_opaque_data_3]
+AppRegEntriesConfigCount=1
+configsection0=opaque_data_new_3
+Locale=2
+
+[test_app_opaque_data_4]
+AppRegEntriesConfigCount=1
+configsection0=opaque_data_new_4
+Locale=3
+
+[add_array_of_opaque_data_new]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001432
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=4
+AppOpaqueLocale0=0
+AppOpaqueData0=somedata
+AppOpaqueLocale1=1
+AppOpaqueData1=
+AppOpaqueLocale2=2
+AppOpaqueData2= 
+AppOpaqueLocale3=3
+AppOpaqueData3=
+OwnedFileCount=0
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=4
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=servicedata
+ServiceOpaqueLocale1=1
+ServiceOpaqueData1=servicedata1
+ServiceOpaqueLocale2=2
+ServiceOpaqueData2= servicedata2
+ServiceOpaqueLocale3=3
+ServiceOpaqueData3= servicedata3
+LocalizableAppInfoCount=4
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+LocShortCaption1=sc0
+LocAppLanguage1=1
+LocGroupName1=Games
+LocShortCaption2=sc0
+LocAppLanguage2=2
+LocGroupName2=Games
+LocShortCaption3=sc0
+LocAppLanguage3=3
+LocGroupName3=Games
+
+[opaque_data_new_1]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001432
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=0
+AppOpaqueData0=somedata
+OwnedFileCount=0
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=servicedata
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+
+[opaque_data_new_2]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001432
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=1
+AppOpaqueData0=
+OwnedFileCount=0
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=1
+ServiceOpaqueData0=servicedata1
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=1
+LocGroupName0=Games
+
+
+[opaque_data_new_3]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001432
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=2
+AppOpaqueData0= 
+OwnedFileCount=0
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=2
+ServiceOpaqueData0= servicedata2
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=2
+LocGroupName0=Games
+
+
+[opaque_data_new_4]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001432
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=3
+AppOpaqueData0=
+OwnedFileCount=0
+ServiceInfoCount=1
+ServiceUid0=3ADE68B1
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=3
+ServiceOpaqueData0= servicedata3
+LocalizableAppInfoCount=1
+LocShortCaption0=sc0
+LocAppLanguage0=3
+LocGroupName0=Games
+
+[add_app_reg_info_with_only_default_locale]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001236
+AppFile=appname34
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+OpaqueData=somedata
+LocalizableAppInfoCount=1
+LocShortCaption0=NonLocalizedAPP
+LocAppLanguage0=0
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile_En
+LocNumberOfAppIcons0=2
+
+[get_app_info_only_default_locale]
+AppUid=A0001236
+AppFile=appname34
+Locale=0
+ShortCaption=NonLocalizedAPP
+Caption=c0
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr_appreginfo.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,613 @@
+//
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This script tests SCR Application Registration APIs.
+// 
+//
+
+PRINT Run SCR Application Registration API Tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+LOAD_SUITE tSisRegistryTest
+
+// Delete the SCR Database file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr_appreginfo.ini db_file 
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0001
+//! @SYMTestCaseDesc 		Add an applications registration info
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0001
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0001
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0002
+//! @SYMTestCaseDesc 		Add an applications registration info with same appuid
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0002
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_sameappuid
+RUN_TEST_STEP !Result=-11 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_sameappuid
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0002
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0002a
+//! @SYMTestCaseDesc 		Add an applications registration info with same app file name
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0002a
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_sameappuid
+RUN_TEST_STEP !Result=-11 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_sameappfile_1
+// Checking the same app file name with a combination of lower and upper case
+RUN_TEST_STEP !Result=-11 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_sameappfile_2
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0002a
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0003
+//! @SYMTestCaseDesc 		Add an applications registration info with null app uid
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0003
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_nullappuid
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0003
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0004
+//! @SYMTestCaseDesc 		Add an applications registration info with null app file
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0004
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_nullappfile
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0004
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0005
+//! @SYMTestCaseDesc 		Add an applications registration info with doesnot have a caption and icon info associated to it.
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0005
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_nocaptioniconinfo
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0005
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0006
+//! @SYMTestCaseDesc 		Inserting multiple applications to the same component
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0006
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini test_component_app1
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini test_component_app2
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry  z:\tusif\tscr\tscr_appreginfo.ini del_test_component
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0006
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0007
+//! @SYMTestCaseDesc 		Adding an application to a non-existent component
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0007
+RUN_TEST_STEP !Result=-1 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_to_non_existent_comp
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0007
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0008
+//! @SYMTestCaseDesc 		Get the Service ID Array for a specific App Uid.
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0008
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetAppServicesUids z:\tusif\tscr\tscr_appreginfo.ini app_reg_info_get_serviceuid
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0008
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0009
+//! @SYMTestCaseDesc 		Get the App ID for a specific Datatype.
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0009
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetAppForDataType z:\tusif\tscr\tscr_appreginfo.ini app_reg_info_get_appfordatatype
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0009
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0010
+//! @SYMTestCaseDesc 		Get the App ID for a specific Datatype and Service Type.
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0010
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetAppForDataTypeAndService z:\tusif\tscr\tscr_appreginfo.ini app_reg_info_get_appfordatatypeandservice
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0010
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0011
+//! @SYMTestCaseDesc 		Get the default screen number for a specific App Uid.
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0011
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetDefaultScreenNumber z:\tusif\tscr\tscr_appreginfo.ini app_reg_info_get_defaultscreennumber
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0011
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0012
+//! @SYMTestCaseDesc 		Get the number of defined icons for a specific App Uid.
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0012
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetNumberOfDefinedIcons z:\tusif\tscr\tscr_appreginfo.ini app_reg_info_get_iconcount
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0012
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0013
+//! @SYMTestCaseDesc 		Get the Application Language for a specific Locale
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0013
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetApplicationLanguage z:\tusif\tscr\tscr_appreginfo.ini app_reg_info_get_applanguage
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0013
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0014
+//! @SYMTestCaseDesc 		Get Files owned by an application
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0014
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetAppOwnedFilesEntry z:\tusif\tscr\tscr_appreginfo.ini appownedfiles
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0014
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0015
+//! @SYMTestCaseDesc 		Get Files owned by an application , not found
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0015
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_noappownedfiles
+RUN_TEST_STEP 100 tscr SCRGetAppOwnedFilesEntry z:\tusif\tscr\tscr_appreginfo.ini noappownedfiles
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0015
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0016
+//! @SYMTestCaseDesc 		Get application capability
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0016
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetAppCapabilityEntry z:\tusif\tscr\tscr_appreginfo.ini appcapability
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0016
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0017
+//! @SYMTestCaseDesc 		Get application capability, no group name
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0017
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_nogroupname
+RUN_TEST_STEP 100 tscr SCRGetAppCapabilityEntry z:\tusif\tscr\tscr_appreginfo.ini appcapability_nogroupname
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0017
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0018
+//! @SYMTestCaseDesc 		Get application Icon
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0018
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetAppIconEntry z:\tusif\tscr\tscr_appreginfo.ini appicon
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0018
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0019
+//! @SYMTestCaseDesc 		Get application Icon , not found as localized info not present
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0019
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_nolocalizedinfo
+RUN_TEST_STEP_RESULT -1 100 tscr SCRGetAppIconEntry z:\tusif\tscr\tscr_appreginfo.ini noappicon
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0019
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0020
+//! @SYMTestCaseDesc 		Get application Icon , not found as caption and icon info not present
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0020
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_onlylocalizedinfo
+RUN_TEST_STEP_RESULT -1 100 tscr SCRGetAppIconEntry z:\tusif\tscr\tscr_appreginfo.ini noappicon
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0020
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0021
+//! @SYMTestCaseDesc 		Get application Icon , found caption and icon info for nearest locale 
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0021
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_nolocalizedinfoforenglish
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscr SCRGetAppIconEntry z:\tusif\tscr\tscr_appreginfo.ini appicon_nolocalizedinfoforenglish
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0021
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0022
+//! @SYMTestCaseDesc 		Get application View Icon
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0022
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetAppViewIconEntry z:\tusif\tscr\tscr_appreginfo.ini appviewicon
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0022
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0023
+//! @SYMTestCaseDesc 		Get application View Icon , not found as localized info not present
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0023
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_nolocalizedinfo
+RUN_TEST_STEP_RESULT -1 100 tscr SCRGetAppViewIconEntry z:\tusif\tscr\tscr_appreginfo.ini noappviewicon
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0023
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0024
+//! @SYMTestCaseDesc 		Get application View Icon , not found as view data not present
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0024
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_onlylocalizedinfo
+RUN_TEST_STEP_RESULT -1 100 tscr SCRGetAppViewIconEntry z:\tusif\tscr\tscr_appreginfo.ini noappviewicon
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0024
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0025
+//! @SYMTestCaseDesc 		Get application View Icon , not found as views caption and icon info not present
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0025
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_noviewcaptionandiconinfo
+RUN_TEST_STEP_RESULT -1 100 tscr SCRGetAppViewIconEntry z:\tusif\tscr\tscr_appreginfo.ini noappviewicon
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0025
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0026
+//! @SYMTestCaseDesc 		Get application View Icon ,  found view caption and icon info for nearest locale
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0026
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_nolocalizedinfoforenglish
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscr SCRGetAppViewIconEntry z:\tusif\tscr\tscr_appreginfo.ini appviewicon_nolocalizedinfoforenglish
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0026
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0027
+//! @SYMTestCaseDesc 		Get application View Icon ,  no view caption and icon info for nearest locale
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0027
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_noviewdatafornearestlanguage
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP_RESULT -1 100 tscr SCRGetAppViewIconEntry z:\tusif\tscr\tscr_appreginfo.ini noviewdatafornearestlanguage
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0027
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0028
+//! @SYMTestCaseDesc 		Get the view info details associated with an application
+
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0028
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_with_localizable_info
+RUN_TEST_STEP 100 tscr ScrGetAppViewInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_view_info
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry_details
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0028
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0029
+//! @SYMTestCaseDesc 		Get the partial (caption and icon non-existing) view info details associated with an application
+
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0029
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_with_partial_view_info
+RUN_TEST_STEP 100 tscr ScrGetAppViewInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_view_info_partial
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry_details
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0029
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0029b
+//! @SYMTestCaseDesc 		Attempt to get the view info details associated with an application (view data associated to locale not present, although matching locale found)
+
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0029b
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_with_partial_view_info_2
+RUN_TEST_STEP 100 tscr ScrGetAppViewInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_view_info_partial_2
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry_details
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0029b
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0030
+//! @SYMTestCaseDesc 		Get the non existent view info details associated with an non existing application
+
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0030
+RUN_TEST_STEP !Result=-1 100 tscr ScrGetAppViewInfo z:\tusif\tscr\tscr_appreginfo.ini 
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0030
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0031
+//! @SYMTestCaseDesc 		Get the view info details to the nearest language associated with an application when found and if not found
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0031
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_with_localizable_info_for_international_french
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscr ScrGetAppViewInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_view_french
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscr ScrGetAppViewInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_view_german
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry_details
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0031
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0032
+//! @SYMTestCaseDesc 		Getallapps without screen mode
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0032
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryData01
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryData02
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession  z:\tusif\tscr\tscr_appreginfo.ini	AppInfoFilter0001-AP-loc01
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tusif\tscr\tscr_appreginfo.ini langauge_to_french
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession  z:\tusif\tscr\tscr_appreginfo.ini	AppInfoFilter0001-AP-loc02
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tusif\tscr\tscr_appreginfo.ini langauge_to_english_american
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession  z:\tusif\tscr\tscr_appreginfo.ini	AppInfoFilter0001-AP-loc01
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tusif\tscr\tscr_appreginfo.ini langauge_to_english
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry  z:\tusif\tscr\tscr_appreginfo.ini	del_component_and_AppEntry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0032
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0033
+//! @SYMTestCaseDesc 		Getallapps with screen mode , screen mode considered 1, 0
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0033
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryData01
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryData02
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0002-AP-loc01
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0002-AP-loc01-A
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0002-AP-loc01-B
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry  z:\tusif\tscr\tscr_appreginfo.ini	del_component_and_AppEntry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0033
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0034
+//! @SYMTestCaseDesc 		GetallEmbeddableApps with and without screen mode , screen mode considered 0, 5
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0034
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-01
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-02
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-03
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-04
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-05
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0003-AP-loc01
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tusif\tscr\tscr_appreginfo.ini langauge_to_french
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0003-AP-loc01-A
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tusif\tscr\tscr_appreginfo.ini langauge_to_english
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0003-AP-loc01-B
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0003-AP-loc01-C
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0003-AP-loc01-D
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry  z:\tusif\tscr\tscr_appreginfo.ini	del_component_and_AppEntry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0034
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0035
+//! @SYMTestCaseDesc 		GetFillteredAppsWithEmbeddabilityFilter  with and without screen mode , screen mode considered 0, 5 
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0035
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-01
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-02
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0004-AP-03
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-04
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-05
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0004-AP-loc01
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0004-AP-loc01-A
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0004-AP-loc01-B
+RUN_TEST_STEP 1000 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0004-AP-loc01-C
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry  z:\tusif\tscr\tscr_appreginfo.ini	del_component_and_AppEntry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0035
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0036
+//! @SYMTestCaseDesc 		GetFillteredAppsWithCapabilityMaskAndValue with and without screen mode , screen mode considered 0, 5 
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0036
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-01
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-02
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-03
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-04
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-05
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0005-AP-loc01
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0005-AP-loc01-A
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0005-AP-loc01-B
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry  z:\tusif\tscr\tscr_appreginfo.ini	del_component_and_AppEntry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0036
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0037
+//! @SYMTestCaseDesc 		GetServerApps with and without screen mode , screen mode considered 0, 5
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0037
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryData01
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryData02
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0006-AP-loc01
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0006-AP-loc01-A
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0006-AP-loc01-B
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tusif\tscr\tscr_appreginfo.ini langauge_to_french
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0006-AP-loc01-D
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tusif\tscr\tscr_appreginfo.ini langauge_to_english
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession z:\tusif\tscr\tscr_appreginfo.ini AppInfoFilter0006-AP-loc01-C
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry  z:\tusif\tscr\tscr_appreginfo.ini	del_component_and_AppEntry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0037
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0038
+//! @SYMTestCaseDesc 		Negative test for  getallapps with and without screen mode
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0038
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryData01
+RUN_TEST_STEP 1000 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryData02
+RUN_TEST_STEP !Result=-6 100 tscr ScrAppViewSubsession  z:\tusif\tscr\tscr_appreginfo.ini  AppInfoFilter0008-AP-loc01
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession  z:\tusif\tscr\tscr_appreginfo.ini	AppInfoFilter0008-AP-loc01-A
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_component_and_AppEntry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0038
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0039
+//! @SYMTestCaseDesc 		Negative test for GetFillteredAppsWithCapabilityMaskAndValue, big value passed for mask and value
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0039
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-01
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-02
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-03
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-04
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryDataForTC-AppInfoFilter0003-AP-05
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession  z:\tusif\tscr\tscr_appreginfo.ini	AppInfoFilter0009-AP-loc01
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession  z:\tusif\tscr\tscr_appreginfo.ini	AppInfoFilter0009-AP-loc01-A
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_component_and_AppEntry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0039
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0040
+//! @SYMTestCaseDesc 		Pass NULL as filter 
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0040
+RUN_TEST_STEP 100 tscr ScrAppViewSubsession  z:\tusif\tscr\tscr_appreginfo.ini	AppInfoFilter0010-AP-loc01
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0040
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0041
+//! @SYMTestCaseDesc 		Attempt to add an application's registration info that contains two sets of localizable inforamtion for the same locale
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0041
+RUN_TEST_STEP !Result=-11 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_invalid_localizable_info
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0041
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0042
+//! @SYMTestCaseDesc 		Get the serviceinfo details requested depending on the provided filters set	
+
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0042
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app1_with_service_info
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app2_with_service_info
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app3_with_service_info
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app4_with_service_info
+RUN_TEST_STEP 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_appuid
+RUN_TEST_STEP 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_serviceuid
+RUN_TEST_STEP 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_serviceuid_and_datatype
+RUN_TEST_STEP 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_appuid_and_serviceuid
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_with_service_info
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0042
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0043
+//! @SYMTestCaseDesc 		Get non existing serviceinfo details requested depending on the provided filters set	
+
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0043
+RUN_TEST_STEP !Result=-1 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_nonexisting_appuid
+RUN_TEST_STEP !Result=-1 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_nonexisting_serviceuid
+RUN_TEST_STEP !Result=-1 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_nonexisting_serviceuid_and_datatype1
+RUN_TEST_STEP !Result=-1 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_nonexisting_serviceuid_and_datatype2
+RUN_TEST_STEP !Result=-1 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_nonexisting_serviceuid_and_datatype3
+RUN_TEST_STEP !Result=-1 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_nonexisting_appuid_and_serviceuid1
+RUN_TEST_STEP !Result=-1 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_nonexisting_appuid_and_serviceuid2
+RUN_TEST_STEP !Result=-1 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_info_given_nonexisting_appuid_and_serviceuid3
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0043
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0044
+//! @SYMTestCaseDesc 		Get the associated componentId, given the appUid, and get all the apps associated to a particular componentId.
+
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0044
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app1_comp1
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app2_comp1
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app3_comp1
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app4_comp2
+RUN_TEST_STEP 100 tscr ScrGetComponentIdForApp z:\tusif\tscr\tscr_appreginfo.ini app_to_comp_mapping
+RUN_TEST_STEP 100 tscr ScrGetAppUidsForComponent z:\tusif\tscr\tscr_appreginfo.ini comp_to_app_mapping
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_comp1
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_comp2
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0044
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0045
+//! @SYMTestCaseDesc 		Get the componentId associted to a non existing app and fetch the apps associated to a non existing component.
+
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0045
+RUN_TEST_STEP !Result=-1 100 tscr ScrGetComponentIdForApp z:\tusif\tscr\tscr_appreginfo.ini nonexisting_appuid
+RUN_TEST_STEP !Result=-1 100 tscr ScrGetAppUidsForComponent z:\tusif\tscr\tscr_appreginfo.ini nonexisting_compid
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0045
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0046
+//! @SYMTestCaseDesc 		Get the Service UID Array for a specific App Uid.
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0046
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini AppEntryData02
+RUN_TEST_STEP 100 tscr SCRGetAppServicesUids z:\tusif\tscr\tscr_appreginfo.ini AppEntryData02_get_serviceuid
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_component_and_AppEntry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0046
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0047
+//! @SYMTestCaseDesc 		Get the Service UID Array for a specific App Uid, Uid Not exists.
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0047
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini test_component_app1
+RUN_TEST_STEP 100 tscr SCRGetAppServicesUids z:\tusif\tscr\tscr_appreginfo.ini test_component_app1_get_serviceUid
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_test_component
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0047
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0048
+//! @SYMTestCaseDesc 		Get the App Uid for an App having specific DataType, app does not exists.
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0048
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetAppForDataType z:\tusif\tscr\tscr_appreginfo.ini app_reg_info_get_appfordatatype_notexist
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0048
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0049
+//! @SYMTestCaseDesc 		Get the App Uid for an App having specific DataType and service uid, app does not exists.
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0049
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRGetAppForDataTypeAndService z:\tusif\tscr\tscr_appreginfo.ini app_reg_info_get_appfordatatypeandservice_notexist
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0049
+
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0050
+//! @SYMTestCaseDesc 		Get the App Uid for an App having specific DataType and service uid, app does not exists.
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0050
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app1_with_service_info
+RUN_TEST_STEP 100 tscr SCRGetDefaultScreenNumber z:\tusif\tscr\tscr_appreginfo.ini add_app1_with_service_info_get_notexists
+RUN_TEST_STEP 100 tscr SCRGetNumberOfDefinedIcons z:\tusif\tscr\tscr_appreginfo.ini add_app1_with_service_info_get_notexists
+RUN_TEST_STEP 100 tscr SCRGetApplicationLanguage z:\tusif\tscr\tscr_appreginfo.ini add_app1_with_service_info_get_notexists
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_with_service_info
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0050
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0051
+//! @SYMTestCaseDesc 		Get the applicaiton information for a given AppUid when no locale is specified. Get application information for a non existing app.
+
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0051
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_with_localizable_info_english_and_international_french
+RUN_TEST_STEP 100 tscr ScrGetAppInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_info_default_locale_english
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscr ScrGetAppInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_info_default_locale_international_french
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscr ScrGetAppInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_info_for_nonexisting_app
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0051
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0052
+//! @SYMTestCaseDesc 		Get the applicaiton information for a given AppUid and a given locale
+
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0052
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_with_localizable_info_english_and_international_french
+RUN_TEST_STEP 100 tscr ScrGetAppInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_info_international_french
+RUN_TEST_STEP 100 tscr ScrGetAppInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_info_french
+RUN_TEST_STEP 100 tscr ScrGetAppInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_info_german_nonexiting
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0052
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0053
+//! @SYMTestCaseDesc 		create  transactions for two sessions
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0053
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP_RESULT -10320 100 tscr ScrAddConcurrentApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini SimultaneousCreateTransaction
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0053
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0054
+//! @SYMTestCaseDesc 		Create the transaction then write the data and read the db using the same session/subsession
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0054
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr ScrAddConcurrentApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini SimultaneousWriteReadAppInfoSameSession
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0054
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0055
+//! @SYMTestCaseDesc 		Create the transaction for the first session and add appInfo, then add another appInfo using other session without transaction
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0055
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP_RESULT -10320 100 tscr ScrAddConcurrentApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini SimultaneousWriteAppInfoDiffSession
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0055
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0056
+//! @SYMTestCaseDesc 		Simultaneosly Reading the db with two differnt subsessions without a transaction
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0056
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr ScrAddConcurrentApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini SimultaneousReadAppInfoDiffSessionWithoutTransaction
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0056
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0057
+//! @SYMTestCaseDesc 		Add an applications registration info, using the Interface without optional fields
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0057
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_ObjectWithoutOptionalFields
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0057
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0058
+//! @SYMTestCaseDesc 		Add array of opaque data with different values
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0058
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_array_of_opaque_data
+RUN_TEST_STEP 100 tscr ScrGetAppServiceInfo z:\tusif\tscr\tscr_appreginfo.ini get_service_opaquedata
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0058
+
+//! @SYMTestCaseID		APPINS-SCR-APPREGINFO-API-0059
+//! @SYMTestCaseDesc 		Get the application information for a given AppUid when only a default locale is specified. Get application information 
+START_TESTCASE APPINS-SCR-APPREGINFO-API-0059
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_with_only_default_locale
+RUN_TEST_STEP 100 tscr ScrGetAppInfo z:\tusif\tscr\tscr_appreginfo.ini get_app_info_only_default_locale
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPREGINFO-API-0059
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr_oom.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+//
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+// 
+//
+
+PRINT Run all SCR performance tests.
+LOAD_SUITE tscr
+
+// Copy SCR DB
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini scr_medium_db
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-OOM-0001
+//! @SYMTestCaseDesc 	Testing for OOM condition at various locations in SCR Server
+
+START_TESTCASE API-SEC-SCR-API-OOM-0001
+RUN_TEST_STEP -1 tscr SCROutOfMemory
+END_TESTCASE API-SEC-SCR-API-OOM-0001
+
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini scr_multiapp
+
+//! @SYMTestCaseID 		API-SEC-SCR-API-OOM-0002
+//! @SYMTestCaseDesc 	Testing for OOM condition at various locations in SCR Server for operations on application registration info
+
+START_TESTCASE API-SEC-SCR-API-OOM-0002
+RUN_TEST_STEP -1 tscr SCROutOfMemory z:\tusif\tscr\tscr_appreginfo.ini SCROutOfMemory_App_RegistrationInfo
+END_TESTCASE API-SEC-SCR-API-OOM-0002
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr_performance.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,795 @@
+// Configuration file for SCR Performance Tests
+
+[shared_data]
+shared_data_num = 1
+shared_name_1 = ComponentId 
+
+[filter_removable]
+MaxDuration=750
+FilterIsRemovable=True
+ComponentsCount=0
+NoVerification=True
+
+[component_names]
+MaxDuration=1200
+SoftwareType=plain
+ComponentName=PerformanceTestComponent
+VendorName=Symbian
+GlobalIdName=performancetestglobalid
+
+[component_localizable_names]
+MaxDuration=900
+SoftwareType=plain
+IsLocalisable=True
+LocalesCount=3
+ComponentName0=LocalizableTestComponent
+VendorName0=SecurityTeam
+ComponentLocale0=1 //English
+ComponentName1=TestCåmponent
+VendorName1=SäkerhetLag
+ComponentLocale1=6 //Swedish
+ComponentName2=TestBileseni
+VendorName2=GüvenlikTakimi
+ComponentLocale2=14 //Turkish
+
+[register_file]
+MaxDuration=2000
+ComponentIdOffset=0
+FileCount= 1
+FileName0=c:\performance_test.txt
+
+[update_component_attributes]
+MaxDuration=1100
+ComponentIdOffset=0
+Version=2.1.9
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=9999
+ComponentName=UppdateraCåmponentTre
+VendorName=NyFörsäljareTre
+PropertyLocale=6 //Swedish
+
+[updated_component]
+MaxDuration=60
+ComponentIdOffset=0
+ComponentName=LocalizableTestComponent
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=
+Removable=False
+DrmProtected=True
+Hidden=True
+KnownRevoked=True
+OriginVerified=True
+ComponentSize=9999
+ScomoState=0
+InstalledDrives=C
+Version=2.1.9
+
+[file_property]
+MaxDuration=800
+ComponentIdOffset=0
+FileName=c:\performance_test.txt
+PropertiesCount=1
+PropertyName0=TestFilePropertyStr
+PropertyType0=1
+PropertyValue0=abc
+
+[component_property]
+MaxDuration=450
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=StringProperty
+PropertyType0=1
+PropertyValue0=astring
+
+[localizable_component_property]
+MaxDuration=450
+ComponentIdOffset=0
+PropertiesCount=1
+PropertyName0=LocalizedProperty
+PropertyType0=3
+PropertyValue0=alocalizedstring
+PropertyLocale0=1
+
+[unregister_file]
+MaxDuration=1200
+ComponentIdOffset=0
+FileName=c:\performance_test.txt
+
+[delete_file_property]
+MaxDuration=750
+ComponentIdOffset=0
+FileName=c:\performance_test.txt
+PropertyName=TestFilePropertyStr
+
+[delete_component]
+MaxDuration=1150
+ComponentIdOffset=0
+
+[install_component]
+MaxDuration=2050
+
+[full_component_properties]
+MaxDuration=250
+ComponentIdOffset=0
+PropertiesCount=33
+PropertyName0=StringProperty0
+PropertyType0=1
+PropertyValue0=string0
+PropertyName1=IntegerProperty1
+PropertyType1=2
+PropertyValue1=589241380
+PropertyName2=IntegerProperty2
+PropertyType2=2
+PropertyValue2=589241381
+PropertyName3=IntegerProperty3
+PropertyType3=2
+PropertyValue3=589241382
+PropertyName4=IntegerProperty4
+PropertyType4=2
+PropertyValue4=589241383
+PropertyName5=IntegerProperty5
+PropertyType5=2
+PropertyValue5=589241384
+PropertyName6=IntegerProperty6
+PropertyType6=2
+PropertyValue6=589241385
+PropertyName7=IntegerProperty7
+PropertyType7=2
+PropertyValue7=589241386
+PropertyName8=IntegerProperty8
+PropertyType8=2
+PropertyValue8=589241387
+PropertyName9=IntegerProperty9
+PropertyType9=2
+PropertyValue9=589241388
+PropertyName10=IntegerProperty10
+PropertyType10=2
+PropertyValue10=589241389
+PropertyName11=IntegerProperty11
+PropertyType11=2
+PropertyValue11=589241390
+PropertyName12=IntegerProperty12
+PropertyType12=2
+PropertyValue12=589241391
+PropertyName13=IntegerProperty13
+PropertyType13=2
+PropertyValue13=589241392
+PropertyName14=IntegerProperty14
+PropertyType14=2
+PropertyValue14=589241393
+PropertyName15=IntegerProperty15
+PropertyType15=2
+PropertyValue15=589241394
+PropertyName16=IntegerProperty16
+PropertyType16=2
+PropertyValue16=589241395
+PropertyName17=IntegerProperty17
+PropertyType17=2
+PropertyValue17=589241396
+PropertyName18=IntegerProperty18
+PropertyType18=2
+PropertyValue18=589241397
+PropertyName19=IntegerProperty19
+PropertyType19=2
+PropertyValue19=589241398
+PropertyName20=IntegerProperty20
+PropertyType20=2
+PropertyValue20=589241399
+PropertyName21=StringProperty21
+PropertyType21=1
+PropertyValue21=string21
+PropertyName22=StringProperty22
+PropertyType22=1
+PropertyValue22=string22
+PropertyName23=StringProperty23
+PropertyType23=1
+PropertyValue23=string23
+PropertyName24=StringProperty24
+PropertyType24=1
+PropertyValue24=string24
+PropertyName25=IntegerProperty25
+PropertyType25=2
+PropertyValue25=589241400
+PropertyName26=IntegerProperty26
+PropertyType26=2
+PropertyValue26=589241401
+PropertyName27=IntegerProperty27
+PropertyType27=2
+PropertyValue27=589241402
+PropertyName28=IntegerProperty28
+PropertyType28=2
+PropertyValue28=589241403
+PropertyName29=IntegerProperty29
+PropertyType29=2
+PropertyValue29=589241404
+PropertyName30=IntegerProperty30
+PropertyType30=2
+PropertyValue30=589241405
+PropertyName31=IntegerProperty31
+PropertyType31=2
+PropertyValue31=589241406
+PropertyName32=StringProperty32
+PropertyType32=1
+PropertyValue32=string32
+
+[full_files_registration]
+ComponentIdOffset=0
+FileCount= 10
+FileName0=c:\performance_test0.txt
+FileName1=c:\performance_test1.txt
+FileName2=c:\performance_test2.txt
+FileName3=c:\performance_test3.txt
+FileName4=c:\performance_test4.txt
+FileName5=c:\performance_test5.txt
+FileName6=c:\performance_test6.txt
+FileName7=c:\performance_test7.txt
+FileName8=c:\performance_test8.txt
+FileName9=c:\performance_test9.txt
+
+[full_file_properties]
+MaxDuration=140
+ComponentIdOffset=0
+FileName=c:\performance_test5.txt
+PropertiesCount=8
+PropertyName0=FileStringProperty0
+PropertyType0=1
+PropertyValue0=filestring0
+PropertyName1=FileIntegerProperty1
+PropertyType1=2
+PropertyValue1=111111111
+PropertyName2=FileIntegerProperty2
+PropertyType2=2
+PropertyValue2=222222222
+PropertyName3=FileIntegerProperty3
+PropertyType3=2
+PropertyValue3=333333333
+PropertyName4=FileIntegerProperty4
+PropertyType4=2
+PropertyValue4=444444444
+PropertyName5=FileIntegerProperty5
+PropertyType5=2
+PropertyValue5=555555555
+PropertyName6=FileIntegerProperty6
+PropertyType6=2
+PropertyValue6=666666666
+PropertyName7=FileStringProperty7
+PropertyType7=1
+PropertyValue7=filestring7
+
+[specific_file_property]
+MaxDuration=50
+ComponentIdOffset=0
+FileName=c:\performance_test5.txt
+PropertyName=FileIntegerProperty4
+PropertyType=2
+PropertyValue=444444444
+
+[specific_component_property]
+MaxDuration=50
+ComponentIdOffset=0
+PropertyName=IntegerProperty20
+PropertyType=2
+PropertyValue=589241399
+
+[localizable_component_properties]
+ComponentIdOffset=0
+PropertiesCount=3
+PropertyName0=LocalizedProperty
+PropertyType0=3
+PropertyValue0=alocalizedstring
+PropertyLocale0=1
+PropertyName1=LocalizedProperty
+PropertyType1=3
+PropertyValue1=anotherlocale
+PropertyLocale1=7
+PropertyName2=LocalizedProperty
+PropertyType2=3
+PropertyValue2=somelocale
+PropertyLocale2=9
+
+[specific_localized_component_property]
+MaxDuration=50
+ComponentIdOffset=0
+PropertyName=LocalizedProperty
+PropertyType=3
+PropertyValue=alocalizedstring
+PropertyLocale=1
+
+[all_components]
+MaxDuration=1150
+FilterSoftwareType=plain
+ComponentsCount=0
+NoVerification=True
+
+[filter_name_vendor]
+MaxDuration=100
+FilterName=LocalizableTestComponent
+FilterVendor=SecurityTeam
+ComponentsCount=0
+NoVerification=True
+
+[filter_name_vendor_property]
+MaxDuration=250
+FilterName=LocalizableTestComponent
+FilterVendor=SecurityTeam
+FilterPropertiesCount=1
+FilterPropertyName0=IntegerProperty28
+FilterIntProperty0=589241403
+ComponentsCount=0
+NoVerification=True
+
+[filter_property]
+MaxDuration=100
+FilterPropertiesCount=1
+FilterPropertyName0=IntegerProperty17
+FilterIntProperty0=589241396
+ComponentsCount=0
+NoVerification=True
+
+[filter_file]
+MaxDuration=100
+FilterFile=c:\performance_test8.txt
+ComponentsCount=0
+NoVerification=True
+
+[filter_drive]
+MaxDuration=950
+FilterDrivesList=L
+ComponentsCount=0
+NoVerification=True
+
+[dependency]
+MaxDuration=950
+SupplierGlobalIdName=nonexistingsupplier
+SupplierSwTypeName=plain
+DependantGlobalIdName=nonexistingdependant
+DependantSwTypeName=plain
+
+[supplier_components]
+MaxDuration=50
+GlobalIdType=Dependant
+GlobalIdName=TestDependantGlobalId
+SoftwareType=plain
+NoVerification=True
+
+[dependant_components]
+MaxDuration=50
+GlobalIdType=Supplier
+GlobalIdName=TestSupplierGlobalId
+SoftwareType=plain
+NoVerification=True
+
+[component_globalid]
+MaxDuration=100
+ComponentIdOffset=3
+ComponentName=PerformanceTestComponent
+VendorName=Symbian
+SoftwareType=plain
+GlobalIdName=performancetestglobalid
+Removable=True
+ComponentSize=0
+ScomoState=0
+InstalledDrives=
+Version=
+
+[add_minimal_app_reg_info]
+MaxDuration=100
+IsMultiApp=True
+ComponentName=Component
+VendorName=OSSITeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=ABCD1234
+AppFile=minimal_app
+Attributes=4
+Hidden=1
+Embeddability=2
+NewFile=1
+Launch=1
+GroupName=Games
+DefaultScreenNumber=2
+
+[get_add_minimal_app_reg_info]
+MaxDuration=50
+Locale=01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0=ABCD1234
+AppRegEntriesConfigCount=1
+configsection0=add_minimal_app_reg_info
+
+[add_minimal_app_reg_info_with_opaquedata]
+MaxDuration=150
+IsMultiApp=True
+ComponentName=Component
+VendorName=OSSITeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=ABCD1235
+AppFile=minimal_app_with_opaquedata
+Attributes=4
+Hidden=1
+Embeddability=2
+NewFile=1
+Launch=1
+GroupName=Games
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=0
+AppOpaqueData0=somedata_for_minimal_app_with_opaquedata
+
+[get_add_minimal_app_reg_info_with_opaquedata]
+MaxDuration=50
+Locale=04
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0=ABCD1235
+AppRegEntriesConfigCount=1
+configsection0=add_minimal_app_reg_info_with_opaquedata
+
+[add_app_reg_info_no_localized]
+MaxDuration=150
+IsMultiApp=True
+ComponentName=Component
+VendorName=OSSITeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=ABCD1236
+AppFile=app_no_localizedata
+Attributes=4
+Hidden=1
+Embeddability=2
+NewFile=1
+Launch=1
+GroupName=Games
+DefaultScreenNumber=2
+OwnedFileCount=2
+FileName0=c:\some\path\file0
+FileName1=k:\some\path\file2
+ServiceInfoCount=2
+ServiceUid0=3ADE68B1
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+ServiceUid1=3ADE68B2
+ServiceDataTypeCount1=2
+ServiceDataTypePriority1=2
+ServiceDataType1=text/plain1
+ServiceDataType2=text/plain2
+LocalizableAppInfoCount=0
+
+[get_add_app_reg_info_no_localized]
+MaxDuration=50
+Locale=01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0=ABCD1236
+AppRegEntriesConfigCount=1
+configsection0=add_app_reg_info_no_localized
+
+[add_app_reg_info_no_localized_with_opaquedata]
+MaxDuration=200
+IsMultiApp=True
+ComponentName=Component
+VendorName=OSSITeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=ABCD1237
+AppFile=app_no_localizedata_with_opaquedata
+Attributes=4
+Hidden=1
+Embeddability=2
+NewFile=1
+Launch=1
+GroupName=Games
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=0
+AppOpaqueData0=somedata_for_app_with_opaquedata
+OwnedFileCount=2
+FileName0=c:\some\path\file0
+FileName1=k:\some\path\file2
+ServiceInfoCount=2
+ServiceUid0=3ADE68B1
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=servicedata_3ADE68B1_for_app_with_opaquedata
+ServiceUid1=3ADE68B2
+ServiceDataTypeCount1=2
+ServiceDataTypePriority1=2
+ServiceDataType1=text/plain1
+ServiceDataType2=text/plain2
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=servicedata_3ADE68B2_for_app_with_opaquedata
+LocalizableAppInfoCount=0
+
+[get_add_app_reg_info_no_localized_with_opaquedata]
+MaxDuration=50
+Locale=04
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0=ABCD1237
+AppRegEntriesConfigCount=1
+configsection0=add_app_reg_info_no_localized_with_opaquedata
+
+[add_app_reg_info_1_localized]
+MaxDuration=200
+IsMultiApp=True
+ComponentName=Component
+VendorName=OSSITeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=ABCD1238
+AppFile=app_1_localizedata
+Attributes=4
+Hidden=1
+Embeddability=2
+NewFile=1
+Launch=1
+GroupName=Games
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=0
+AppOpaqueData0=somedata_for_app_with_opaquedata
+OwnedFileCount=2
+FileName0=c:\some\path\file0
+FileName1=k:\some\path\file2
+ServiceInfoCount=2
+ServiceUid0=3ADE68B1
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=servicedata_3ADE68B1_for_app_with_opaquedata
+ServiceUid1=3ADE68B2
+ServiceDataTypeCount1=2
+ServiceDataTypePriority1=2
+ServiceDataType1=text/plain1
+ServiceDataType2=text/plain2
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=servicedata_3ADE68B2_for_app_with_opaquedata
+LocalizableAppInfoCount=1
+LocShortCaption0=shortcaption0
+LocAppLanguage0=0
+LocGroupName0=Games0
+LocCaption0=caption0
+LocIconFileName0=some/iconfile
+LocNumberOfAppIcons0=2
+ViewDataCount0=1
+VwUid0=123456
+VwScreenMode0=0
+VwCaption0=someviewcaption
+VwIconFileName0=viewiconfile
+VwNumberOfAppIcons0=0
+
+[get_add_app_reg_info_1_localized]
+MaxDuration=50
+Locale=01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0=ABCD1238
+AppRegEntriesConfigCount=1
+configsection0=add_app_reg_info_1_localized
+
+[add_app_reg_info_2_localized]
+MaxDuration=200
+IsMultiApp=True
+ComponentName=Component
+VendorName=OSSITeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=ABCD1239
+AppFile=app_2_localizedata
+Attributes=4
+Hidden=1
+Embeddability=2
+NewFile=1
+Launch=1
+GroupName=Games
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=2
+AppOpaqueLocale0=0
+AppOpaqueData0=somedata_for_app_with_opaquedata
+AppOpaqueLocale1=1
+AppOpaqueData1=somedata_for_app_with_opaquedata_EN
+OwnedFileCount=2
+FileName0=c:\some\path\file0
+FileName1=k:\some\path\file2
+ServiceInfoCount=2
+ServiceUid0=3ADE68B1
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+ServiceOpaqueDataInfoCount0=2
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=servicedata_3ADE68B1_for_app_with_opaquedata
+ServiceOpaqueLocale1=1
+ServiceOpaqueData1=servicedata_3ADE68B1_for_app_with_opaquedata_EN
+ServiceUid1=3ADE68B2
+ServiceDataTypeCount1=2
+ServiceDataTypePriority1=2
+ServiceDataType1=text/plain1
+ServiceDataType2=text/plain2
+ServiceOpaqueDataInfoCount1=2
+ServiceOpaqueLocale2=0
+ServiceOpaqueData2=servicedata_3ADE68B2_for_app_with_opaquedata
+ServiceOpaqueLocale3=1
+ServiceOpaqueData3=servicedata_3ADE68B2_for_app_with_opaquedata_EN
+LocalizableAppInfoCount=2
+LocShortCaption0=shortcaption0
+LocAppLanguage0=0
+LocGroupName0=Games0
+LocCaption0=caption0
+LocIconFileName0=some/iconfile0
+LocNumberOfAppIcons0=24
+ViewDataCount0=1
+VwUid0=123456
+VwScreenMode0=0
+VwCaption0=someviewcaption0
+VwIconFileName0=viewiconfile0
+VwNumberOfAppIcons0=1
+LocShortCaption1=shortcaption1
+LocAppLanguage1=1
+LocGroupName1=Games1
+LocCaption1=caption1
+LocIconFileName1=some/iconfile1
+LocNumberOfAppIcons1=25
+ViewDataCount1=1
+VwUid1=456789
+VwScreenMode1=0
+VwCaption1=someviewcaption1
+VwIconFileName1=viewiconfile1
+VwNumberOfAppIcons1=12
+
+[get_add_app_reg_info_2_localized]
+MaxDuration=50
+Locale=01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0=ABCD1239
+AppRegEntriesConfigCount=1
+configsection0=add_app_reg_info_2_localized
+
+[add_app_reg_info_5_localized]
+MaxDuration=300
+IsMultiApp=True
+ComponentName=Component
+VendorName=OSSITeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=ABCD1240
+AppFile=app_5_localizedata
+Attributes=4
+Hidden=1
+Embeddability=2
+NewFile=1
+Launch=1
+GroupName=Games
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=5
+AppOpaqueLocale0=0
+AppOpaqueData0=somedata_for_app_with_opaquedata
+AppOpaqueLocale1=1
+AppOpaqueData1=somedata_for_app_with_opaquedata_EN
+AppOpaqueLocale2=2
+AppOpaqueData2=somedata_for_app_with_opaquedata_FR
+AppOpaqueLocale3=3
+AppOpaqueData3=somedata_for_app_with_opaquedata_GE
+AppOpaqueLocale4=4
+AppOpaqueData4=somedata_for_app_with_opaquedata_SP
+OwnedFileCount=2
+FileName0=c:\some\path\file0
+FileName1=k:\some\path\file2
+ServiceInfoCount=2
+ServiceUid0=3ADE68B1
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+ServiceOpaqueDataInfoCount0=5
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=servicedata_3ADE68B1_for_app_with_opaquedata
+ServiceOpaqueLocale1=1
+ServiceOpaqueData1=servicedata_3ADE68B1_for_app_with_opaquedata_EN
+ServiceOpaqueLocale2=2
+ServiceOpaqueData2=servicedata_3ADE68B1_for_app_with_opaquedata_FR
+ServiceOpaqueLocale3=3
+ServiceOpaqueData3=servicedata_3ADE68B1_for_app_with_opaquedata_GE
+ServiceOpaqueLocale4=4
+ServiceOpaqueData4=servicedata_3ADE68B1_for_app_with_opaquedata_SP
+ServiceUid1=3ADE68B2
+ServiceDataTypeCount1=2
+ServiceDataTypePriority1=2
+ServiceDataType1=text/plain1
+ServiceDataType2=text/plain2
+ServiceOpaqueDataInfoCount1=5
+ServiceOpaqueLocale5=0
+ServiceOpaqueData5=servicedata_3ADE68B2_for_app_with_opaquedata
+ServiceOpaqueLocale6=1
+ServiceOpaqueData6=servicedata_3ADE68B2_for_app_with_opaquedata_EN
+ServiceOpaqueLocale7=2
+ServiceOpaqueData7=servicedata_3ADE68B2_for_app_with_opaquedata_FR
+ServiceOpaqueLocale8=3
+ServiceOpaqueData8=servicedata_3ADE68B2_for_app_with_opaquedata_GE
+ServiceOpaqueLocale9=4
+ServiceOpaqueData9=servicedata_3ADE68B2_for_app_with_opaquedata_SP
+LocalizableAppInfoCount=5
+LocShortCaption0=shortcaption0
+LocAppLanguage0=0
+LocGroupName0=Games0
+LocCaption0=caption0
+LocIconFileName0=some/iconfile0
+LocNumberOfAppIcons0=24
+ViewDataCount0=1
+VwUid0=123456
+VwScreenMode0=0
+VwCaption0=someviewcaption0
+VwIconFileName0=viewiconfile0
+VwNumberOfAppIcons0=1
+LocShortCaption1=shortcaption1
+LocAppLanguage1=1
+LocGroupName1=Games1
+LocCaption1=caption1
+LocIconFileName1=some/iconfile1
+LocNumberOfAppIcons1=25
+ViewDataCount1=1
+VwUid1=456789
+VwScreenMode1=0
+VwCaption1=someviewcaption1
+VwIconFileName1=viewiconfile1
+VwNumberOfAppIcons1=12
+LocShortCaption2=shortcaption1
+LocAppLanguage2=2
+LocGroupName2=Games2
+LocCaption2=caption2
+LocIconFileName2=some/iconfile2
+LocNumberOfAppIcons1=26
+ViewDataCount2=1
+VwUid2=4567891
+VwScreenMode2=0
+VwCaption2=someviewcaption2
+VwIconFileName2=viewiconfile2
+VwNumberOfAppIcons2=122
+LocShortCaption3=shortcaption3
+LocAppLanguage3=3
+LocGroupName3=Games3
+LocCaption3=caption3
+LocIconFileName3=some/iconfile3
+LocNumberOfAppIcons3=23
+ViewDataCount3=1
+VwUid3=4567893
+VwScreenMode3=0
+VwCaption3=someviewcaption3
+VwIconFileName3=viewiconfile3
+VwNumberOfAppIcons3=123
+LocShortCaption4=shortcaption4
+LocAppLanguage4=4
+LocGroupName4=Games4
+LocCaption4=caption4
+LocIconFileName4=some/iconfile4
+LocNumberOfAppIcons4=254
+ViewDataCount4=4
+VwUid4=4567894
+VwScreenMode4=0
+VwCaption4=someviewcaption4
+VwIconFileName4=viewiconfile4
+VwNumberOfAppIcons4=12
+
+[get_add_app_reg_info_5_localized]
+MaxDuration=100
+Locale=01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0=ABCD1240
+AppRegEntriesConfigCount=1
+configsection0=add_app_reg_info_5_localized
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr_performance.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+//
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+// 
+//
+
+PRINT Run all SCR performance tests.
+LOAD_SUITE tscr
+
+// Copy small SCR DB
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini scr_backup_db
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini scr_small_db
+
+// Run SCR performance tests for a small size db
+RUN_SCRIPT z:\tusif\tscr\tscr_performance_cases.script
+
+
+// Copy medium SCR DB
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini scr_medium_db
+
+// Run SCR performance tests for a small size db
+RUN_SCRIPT z:\tusif\tscr\tscr_performance_cases.script
+
+
+// Copy large SCR DB
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini scr_large_db
+
+// Run SCR performance tests for a small size db
+RUN_SCRIPT z:\tusif\tscr\tscr_performance_cases.script
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini scr_restore_db
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini backup_file 
+
+// Run scr performance with app registration info
+RUN_SCRIPT z:\tusif\tscr\tscr_app_performance_cases.script
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr_performance_cases.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,373 @@
+//
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+// This script implements Software Component Registry Performance tests.
+// For more information about the test cases, please see TMS:\Security,Privacy and Control Protection\USIF\SCR\tscr_performance
+// 
+//
+
+PRINT Run Software Component Registry (SCR) Performance Tests
+
+// Load the event logger test suite
+LOAD_SUITE EventLogServer -SharedData
+
+// Load SCR test suite
+LOAD_SUITE tscr -SharedData // SharedData is used for sharing the componentid between test steps
+SHARED_DATA z:\tusif\tscr\tscr_performance.ini shared_data
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0001
+//! @SYMTestCaseDesc 		The time taken to generate a localised list of removable software components.
+//! SYMTestPerformanceTarget   1000ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0001
+
+RUN_TEST_STEP 100 tscr Performance-ScrComponentRegistrySubsession z:\tusif\tscr\tscr_performance.ini filter_removable
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0001
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0002
+//! @SYMTestCaseDesc 		The time taken to add a new component to the Components table.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0002
+
+RUN_TEST_STEP 100 tscr Performance-SCRAddComponent z:\tusif\tscr\tscr_performance.ini component_names
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0002
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0003
+//! @SYMTestCaseDesc 		The time taken to add a new component with localizable names to the Components table.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0003
+
+RUN_TEST_STEP 100 tscr Performance-SCRAddComponent z:\tusif\tscr\tscr_performance.ini component_localizable_names
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0003
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0004
+//! @SYMTestCaseDesc 		The time taken to register a file to an existing component.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0004
+
+RUN_TEST_STEP 100 tscr Performance-SCRRegisterFile z:\tusif\tscr\tscr_performance.ini register_file
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0004
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0005
+//! @SYMTestCaseDesc 		The time taken to set 9 common properties of an existing component.
+//! SYMTestPerformanceTarget   500ms (~50ms for each common property)
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0005
+
+RUN_TEST_STEP 250 tscr Performance-SCRSetCommonProperty z:\tusif\tscr\tscr_performance.ini update_component_attributes
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0005
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0006
+//! @SYMTestCaseDesc 		The time taken to set a custom property of an registered file.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0006
+
+RUN_TEST_STEP 100 tscr Performance-SCRAddFileProperty z:\tusif\tscr\tscr_performance.ini file_property
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0006
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0007
+//! @SYMTestCaseDesc 		The time taken to update a common property of a component.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0007
+
+RUN_TEST_STEP 100 tscr Performance-SCRSetComponentProperty z:\tusif\tscr\tscr_performance.ini component_property
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0007
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0008
+//! @SYMTestCaseDesc 		The time taken to update a localizable property (name or vendor) of a component.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0008
+
+RUN_TEST_STEP 100 tscr Performance-SCRSetComponentProperty z:\tusif\tscr\tscr_performance.ini localizable_component_property
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0008
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0009
+//! @SYMTestCaseDesc 		The time taken to unregister a file from a component.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0009
+
+RUN_TEST_STEP 100 tscr Performance-SCRUnregisterFile z:\tusif\tscr\tscr_performance.ini unregister_file
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0009
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0010
+//! @SYMTestCaseDesc 		The time taken to delete a custom component property.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0010
+
+RUN_TEST_STEP 100 tscr Performance-SCRDeleteComponentProperty z:\tusif\tscr\tscr_performance.ini component_property
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0010
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0011
+//! @SYMTestCaseDesc 		The time taken to delete a custom file property.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0011
+
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr_performance.ini register_file
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr_performance.ini file_property
+RUN_TEST_STEP 100 tscr Performance-SCRDeleteFileProperty z:\tusif\tscr\tscr_performance.ini delete_file_property
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0011
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0012
+//! @SYMTestCaseDesc 		The time taken to delete a component together with all its properties and files.
+//! SYMTestPerformanceTarget   500ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0012
+
+// Add a complete component which to delete.
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr_performance.ini component_localizable_names
+RUN_TEST_STEP 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr_performance.ini update_component_attributes
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr_performance.ini full_component_properties
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr_performance.ini full_files_registration
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr_performance.ini full_file_properties
+RUN_TEST_STEP 500 tscr Performance-SCRDeleteComponent z:\tusif\tscr\tscr_performance.ini delete_component
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0012
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0013
+//! @SYMTestCaseDesc 		The time taken to install a typical component installed by SWI.
+//! SYMTestPerformanceTarget   1000ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0013
+
+// Measure a complete component installation performance. The component values are hardcoded.
+RUN_TEST_STEP 1000 tscr Performance-SCRInstallComponent z:\tusif\tscr\tscr_performance.ini install_component
+// Add another complete component which is used by the rest of test cases.
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr_performance.ini component_localizable_names
+RUN_TEST_STEP 100 tscr SCRSetCommonProperty z:\tusif\tscr\tscr_performance.ini update_component_attributes
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr_performance.ini full_component_properties
+RUN_TEST_STEP 100 tscr SCRRegisterFile z:\tusif\tscr\tscr_performance.ini full_files_registration
+RUN_TEST_STEP 100 tscr SCRAddFileProperty z:\tusif\tscr\tscr_performance.ini full_file_properties
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0013
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0014
+//! @SYMTestCaseDesc 		The time taken to retrieve a component registry entry by using the component Id.
+//! SYMTestPerformanceTarget   60ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0014
+
+RUN_TEST_STEP 50 tscr Performance-SCRGetComponent z:\tusif\tscr\tscr_performance.ini updated_component
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0014
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0015
+//! @SYMTestCaseDesc 		The time taken to retrieve a specific file property.
+//! SYMTestPerformanceTarget   50ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0015
+
+RUN_TEST_STEP 50 tscr Performance-SCRGetFileProperty  z:\tusif\tscr\tscr_performance.ini specific_file_property
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0015
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0016
+//! @SYMTestCaseDesc 		The time taken to retrieve all properties of a file
+//! SYMTestPerformanceTarget   200ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0016
+
+RUN_TEST_STEP 200 tscr Performance-SCRGetFileProperties z:\tusif\tscr\tscr_performance.ini full_file_properties
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0016
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0017
+//! @SYMTestCaseDesc 		The time taken to retrieve a specific component property.
+//! SYMTestPerformanceTarget   50ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0017
+
+RUN_TEST_STEP 50 tscr Performance-SCRGetComponentProperty z:\tusif\tscr\tscr_performance.ini specific_component_property
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0017
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0018
+//! @SYMTestCaseDesc 		The time taken to retrieve all properties of a typical component installed by SWI.
+//! SYMTestPerformanceTarget   300ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0018
+
+RUN_TEST_STEP 300 tscr Performance-SCRGetComponentProperties z:\tusif\tscr\tscr_performance.ini full_component_properties
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0018
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0019
+//! @SYMTestCaseDesc 		The time taken to retrieve a specific localized component property.
+//! SYMTestPerformanceTarget   50ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0019
+
+RUN_TEST_STEP 100 tscr SCRSetComponentProperty z:\tusif\tscr\tscr_performance.ini localizable_component_properties
+RUN_TEST_STEP 50 tscr Performance-SCRGetComponentProperty z:\tusif\tscr\tscr_performance.ini specific_localized_component_property
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0019
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0020
+//! @SYMTestCaseDesc 		The time taken to filter all components for an installer
+//! SYMTestPerformanceTarget   1200ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0020
+
+RUN_TEST_STEP 1000 tscr Performance-ScrComponentRegistrySubsession z:\tusif\tscr\tscr_performance.ini all_components
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0020
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0021
+//! @SYMTestCaseDesc 		The time taken to filter components by using name and vendor.
+//! SYMTestPerformanceTarget   70ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0021
+
+RUN_TEST_STEP 70 tscr Performance-ScrComponentRegistrySubsession z:\tusif\tscr\tscr_performance.ini filter_name_vendor
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0021
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0022
+//! @SYMTestCaseDesc 		The time taken to filter components by using name,vendor and a property.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0022
+
+RUN_TEST_STEP 100 tscr Performance-ScrComponentRegistrySubsession z:\tusif\tscr\tscr_performance.ini filter_name_vendor_property
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0022
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0023
+//! @SYMTestCaseDesc 		The time taken to filter components by using a single property.
+//! SYMTestPerformanceTarget   70ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0023
+
+RUN_TEST_STEP 70 tscr Performance-ScrComponentRegistrySubsession z:\tusif\tscr\tscr_performance.ini filter_property
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0023
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0024
+//! @SYMTestCaseDesc 		The time taken to filter components by a file name.
+//! SYMTestPerformanceTarget   70ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0024
+
+RUN_TEST_STEP 70 tscr Performance-ScrComponentRegistrySubsession z:\tusif\tscr\tscr_performance.ini filter_file
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0024
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0025
+//! @SYMTestCaseDesc 		The time taken to filter components installed into a specific drive.
+//! SYMTestPerformanceTarget   1100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0025
+
+RUN_TEST_STEP 1000 tscr Performance-ScrComponentRegistrySubsession z:\tusif\tscr\tscr_performance.ini filter_drive
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0025
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0026
+//! @SYMTestCaseDesc 		The time taken to add a new dependency to the SCR.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0026
+
+RUN_TEST_STEP 100 tscr Performance-SCRAddComponentDependency z:\tusif\tscr\tscr_performance.ini dependency
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0026
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0027
+//! @SYMTestCaseDesc 		The time taken to delete an existing dependency from the SCR.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0027
+
+RUN_TEST_STEP 100 tscr Performance-SCRDeleteComponentDependency z:\tusif\tscr\tscr_performance.ini dependency
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0027
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0028
+//! @SYMTestCaseDesc 		The time taken to list all suppliers of a dependant component.
+//! SYMTestPerformanceTarget   50ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0028
+
+RUN_TEST_STEP 100 tscr Performance-SCRGetGlobalIdList z:\tusif\tscr\tscr_performance.ini supplier_components
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0028
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0029
+//! @SYMTestCaseDesc 		The time taken to list all dependants of a supplier component.
+//! SYMTestPerformanceTarget   50ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0029
+
+RUN_TEST_STEP 100 tscr Performance-SCRGetGlobalIdList z:\tusif\tscr\tscr_performance.ini dependant_components
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0029
+
+
+//! @SYMTestCaseID		API-SEC-SCR-PERFORMANCE-0030
+//! @SYMTestCaseDesc 		The time taken to retrieve a component with its global id.
+//! SYMTestPerformanceTarget   100ms
+
+START_TESTCASE API-SEC-SCR-PERFORMANCE-0030
+
+RUN_TEST_STEP 100 tscr Performance-SCRGetComponentWithGlobalId z:\tusif\tscr\tscr_performance.ini component_globalid
+
+END_TESTCASE API-SEC-SCR-PERFORMANCE-0030
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr_versioning.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,118 @@
+//
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+// This script implements Software Component Registry compatibility and versioning tests.
+// For more information about the test cases, please see TMS:\Security,Privacy and Control Protection\USIF\SCR\tscr_versioning
+// 
+//
+
+PRINT Run Software Component Registry (SCR) Versioning Tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData // SharedData is used for sharing the componentid between test steps
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+
+//! @SYMTestCaseID		API-SEC-SCR-VERSIONING-0001
+//! @SYMTestCaseDesc 		Negative test - check that version table is required
+
+START_TESTCASE API-SEC-SCR-VERSIONING-0001
+
+// Delete the SCR Database file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+// Copy a corrupted DB file - does not contain version table
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini corrupted_db_file_no_version_table
+RUN_TEST_STEP !Result=-2 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+END_TESTCASE API-SEC-SCR-VERSIONING-0001
+
+
+//! @SYMTestCaseID		API-SEC-SCR-VERSIONING-0002
+//! @SYMTestCaseDesc 		Negative test - check that entries in version table are required
+
+START_TESTCASE API-SEC-SCR-VERSIONING-0002
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+// Copy a corrupted DB file - does not have entries in the version table
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini corrupted_db_file_no_version_entries
+RUN_TEST_STEP !Result=-2 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+END_TESTCASE API-SEC-SCR-VERSIONING-0002
+
+
+//! @SYMTestCaseID		API-SEC-SCR-VERSIONING-0003
+//! @SYMTestCaseDesc 		Negative test - check that older major versions are not allowed
+
+START_TESTCASE API-SEC-SCR-VERSIONING-0003
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+// Copy a DB file with an older major version
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini db_file_older_major_version
+RUN_TEST_STEP !Result=-2 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+END_TESTCASE API-SEC-SCR-VERSIONING-0003
+
+
+//! @SYMTestCaseID		API-SEC-SCR-VERSIONING-0004
+//! @SYMTestCaseDesc 		Negative test - check that newer major versions are not allowed
+
+START_TESTCASE API-SEC-SCR-VERSIONING-0004
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+// Copy a DB file with an newer major version
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini db_file_newer_major_version
+RUN_TEST_STEP !Result=-2 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+END_TESTCASE API-SEC-SCR-VERSIONING-0004
+
+
+//! @SYMTestCaseID		API-SEC-SCR-VERSIONING-0005
+//! @SYMTestCaseDesc 		Positive test - check that newer minor versions are allowed
+
+START_TESTCASE API-SEC-SCR-VERSIONING-0005
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+// Copy a DB file with an newer minor version
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini db_file_newer_minor_version
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+END_TESTCASE API-SEC-SCR-VERSIONING-0005
+
+
+//! @SYMTestCaseID		API-SEC-SCR-VERSIONING-0006
+//! @SYMTestCaseDesc 		Positive test - check that older minor versions are allowed
+
+START_TESTCASE API-SEC-SCR-VERSIONING-0006
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+// Copy a DB file with an older minor version
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini db_file_older_minor_version
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+END_TESTCASE API-SEC-SCR-VERSIONING-0006
+
+
+//! @SYMTestCaseID		API-SEC-SCR-VERSIONING-0007
+//! @SYMTestCaseDesc 		Positive test - check that different build numbers are allowed
+
+START_TESTCASE API-SEC-SCR-VERSIONING-0007
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+// Copy a DB file with a different build number
+RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini db_file_different_build_number
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\tscr\tscr.ini common_component_names
+
+END_TESTCASE API-SEC-SCR-VERSIONING-0007
+
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscrapparc.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,174 @@
+//
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+// This script tests SCR Application Registration APIs which can only be accessed by apparc.
+// 
+//
+
+PRINT Run SCR Application Registration API Tests for Apparc Subsession
+
+// Load Suite
+LOAD_SUITE tscr -SharedData
+LOAD_SUITE tscrapparc
+LOAD_SUITE tSisRegistryTest
+SHARED_DATA z:\tusif\tscr\tscr_appreginfo.ini shared_data
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0001
+//! @SYMTestCaseDesc 		Complete appregistration data for nearest locale, subsession opened without locale
+START_TESTCASE APPINS-SCR-APPARC-API-0001
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_complete_for_nearestlanguage
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_complete_for_nearestlanguage
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0001
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0002
+//! @SYMTestCaseDesc 		Complete appregistration data for current locale(english), subsession opened without locale
+START_TESTCASE APPINS-SCR-APPARC-API-0002
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_complete_for_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_complete_for_english
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0002
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0003
+//! @SYMTestCaseDesc 		No view data exist for the nearest locale (subsession opened without locale)
+START_TESTCASE APPINS-SCR-APPARC-API-0003
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_noviewdatafornearestlanguage
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_noviewdatafornearestlanguage
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0003
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0004
+//! @SYMTestCaseDesc 		No app owned files exist for an appliction info (subsession opened without locale)
+START_TESTCASE APPINS-SCR-APPARC-API-0004
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_onlylocalizedinfo
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_noappownedfiles
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0004
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0005
+//! @SYMTestCaseDesc 		multiple appliction registration info exist for the locale(subsession opened without locale).
+START_TESTCASE APPINS-SCR-APPARC-API-0005
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_21
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_complete_for_english
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_noviewdatafornearestlanguage_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_MultipleApp_NoLocale
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0005
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0006
+//! @SYMTestCaseDesc 		multiple appliction registration info exist for the locale(subsession opened with locale).
+START_TESTCASE APPINS-SCR-APPARC-API-0006
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_complete_for_english
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_noviewdatafornearestlanguage_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_MultipleApp_for_english
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0006
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0007
+//! @SYMTestCaseDesc 		no corrosponding app reg info exist for the locale(subsession opened without locale).
+START_TESTCASE APPINS-SCR-APPARC-API-0007
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_nolocalizedinfoforenglish
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_NotExist
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0007
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0008
+//! @SYMTestCaseDesc 		Number of entries to be opened is negative(subsession opened with locale).
+START_TESTCASE APPINS-SCR-APPARC-API-0008
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP_RESULT -6 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_Negative_NoOfEntries
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0008
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0009
+//! @SYMTestCaseDesc 		Compare app opaque data
+START_TESTCASE APPINS-SCR-APPARC-API-0009
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_array_of_opaque_data_new
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini test_app_opaque_data_1
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini test_app_opaque_data_2
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini test_app_opaque_data_3
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini test_app_opaque_data_4
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0009
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0014
+//! @SYMTestCaseDesc 		Appregistration data of current locale(english) for user defined AppUids.
+//! @SYMTestActions 		Add One(1) Appregistration data. Fetch Appregistration data for Three(3) user defined AppUids.
+//					 		[1 AppUid is present in DB, 2 AppUid not present].
+START_TESTCASE APPINS-SCR-APPARC-API-0014
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_complete_for_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_complete_for_english_Test09
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0014
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0010
+//! @SYMTestCaseDesc 		Appregistration data of current locale(english) for user defined AppUids. [No AppUid present in DB]
+//! @SYMTestActions 		Add no Appregistration data. Fetch Appregistration data for One(1) user defined AppUids.
+START_TESTCASE APPINS-SCR-APPARC-API-0010
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_complete_for_english_Test10
+END_TESTCASE APPINS-SCR-APPARC-API-0010
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0011
+//! @SYMTestCaseDesc 		multiple appliction registration info exist for user defined AppUid.
+//! @SYMTestActions 		Add Three(3) Appregistration data. Fetch Appregistration data for Two(2) user defined AppUids.
+//					 		[All 3 AppUid is present in DB].
+START_TESTCASE APPINS-SCR-APPARC-API-0011
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_complete_for_english
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_noviewdatafornearestlanguage_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_MultipleApp_for_english_test11
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0011
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0012
+//! @SYMTestCaseDesc 		Fetch AppRegistration data corresponding to user defined AppUids.
+//! @SYMTestActions 		Add Two(2) Appregistration data. Fetch Appregistration data for One(1) user
+//					 		defined AppUids which is not present in DB. [2 AppUid is present in DB, Requested AppUid not present].
+START_TESTCASE APPINS-SCR-APPARC-API-0012
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_noviewdatafornearestlanguage_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_MultipleApp_for_english_test12
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0012
+
+
+//! @SYMTestCaseID		APPINS-SCR-APPARC-API-0013
+//! @SYMTestCaseDesc 		Test for Concurrent Application Registration View Entry API
+//! @SYMTestActions 		Add Four(4) Appregistration data. Fetch Appregistration data for Two(2) Entries using 
+//					 		ApplicationRegistrationViewEntry API. Then fetch user defined AppUids.
+START_TESTCASE APPINS-SCR-APPARC-API-0013
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_complete_for_english
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_noviewdatafornearestlanguage_english
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_4
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini add_app_reg_info_5
+RUN_TEST_STEP 100 tscrapparc ScrMultipleSubsessionsForAppRegistryView z:\tusif\tscr\tscr_appreginfo.ini ApplicationRegistrationData_MultipleApp_for_english_test13
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tscr\tscr_appreginfo.ini del_app_entry
+END_TESTCASE APPINS-SCR-APPARC-API-0013
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/appmanagersteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,296 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "appmanagersteps.h"
+#include "tscrdefs.h"
+
+using namespace Usif;
+
+// -----------CScrIsMediaPresentStep-----------------
+
+CScrIsMediaPresentStep::CScrIsMediaPresentStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrIsMediaPresentStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrIsMediaPresentStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();
+	TBool expectedMediaPresent(EFalse);
+	if (!GetBoolFromConfig(ConfigSection(), _L("ExpectedMediaPresent"), expectedMediaPresent))
+		{
+		PrintErrorL(_L("ExpectedMediaPresent property not found"), KErrNotFound);
+		}
+	TBool foundMediaPresent = iScrSession.IsMediaPresentL(componentId);
+	if (foundMediaPresent != expectedMediaPresent)
+		{
+		ERR_PRINTF4(_L("Mismatch for IsMediaPresentL for component id %d. Expected %d and the result was %d."), componentId, expectedMediaPresent, foundMediaPresent);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CScrIsMediaPresentStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrIsComponentOrphanedStep-----------------
+
+CScrIsComponentOrphanedStep::CScrIsComponentOrphanedStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrIsComponentOrphanedStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrIsComponentOrphanedStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();
+	TBool expectedComponentOrphaned(EFalse);
+	if (!GetBoolFromConfig(ConfigSection(), _L("ExpectedComponentOrphaned"), expectedComponentOrphaned))
+		{
+		PrintErrorL(_L("ExpectedComponentOrphaned property not found"), KErrNotFound);
+		}
+	TBool foundComponentOrphaned = iScrSession.IsComponentOrphanedL(componentId);
+	if (foundComponentOrphaned != expectedComponentOrphaned)
+		{
+		ERR_PRINTF4(_L("Mismatch for IsComponentOrphanedL for component id %d. Expected %d and the result was %d."), componentId, expectedComponentOrphaned, foundComponentOrphaned);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CScrIsComponentOrphanedStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrCompareVersionsStep-----------------
+
+CScrCompareVersionsStep::CScrCompareVersionsStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrCompareVersionsStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrCompareVersionsStep::ImplTestStepL()
+	{
+	HBufC *lVer = GetVersionFromConfigL(KVersionLeft());
+	CleanupStack::PushL(lVer);
+	
+	HBufC *rVer = GetVersionFromConfigL(KVersionRight());
+	CleanupStack::PushL(rVer);
+	
+	if(!lVer || !rVer)
+		PrintErrorL(_L("Missing version!"), KErrNotFound);
+	
+	TInt expectedResult;
+	if (!GetIntFromConfig(ConfigSection(), KExpectedResult, expectedResult))
+		PrintErrorL(_L("The expected result param could not be found in configuration."), KErrNotFound);
+	
+	TInt retrievedResult = iScrSession.CompareVersionsL(*lVer, *rVer);
+	
+	if(retrievedResult > 0)
+		retrievedResult = 1;
+	else if(retrievedResult < 0)
+		retrievedResult = -1;
+	
+	if(retrievedResult != expectedResult)
+		PrintErrorL(_L("The retrieved result (%d) is different from the expected one (%d)."), KErrNotFound, retrievedResult, expectedResult);
+	
+	CleanupStack::PopAndDestroy(2, lVer); // lVer, rVer
+	}
+
+void CScrCompareVersionsStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrIsComponentOnReadOnlyDriveStep-----------------
+
+CScrIsComponentOnReadOnlyDriveStep::CScrIsComponentOnReadOnlyDriveStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrIsComponentOnReadOnlyDriveStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrIsComponentOnReadOnlyDriveStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();
+	TBool expectedROMResult(EFalse);
+	if (!GetBoolFromConfig(ConfigSection(), _L("ExpectedROMResult"), expectedROMResult))
+		{
+		PrintErrorL(_L("ExpectedROMResult property not found"), KErrNotFound);
+		}
+	
+	TBool result = iScrSession.IsComponentOnReadOnlyDriveL(componentId);
+	if (result != expectedROMResult)
+		{
+		ERR_PRINTF4(_L("Mismatch for IsComponentOnReadOnlyDriveL for component id %d. Expected %d and the result was %d."), componentId, expectedROMResult, result);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CScrIsComponentOnReadOnlyDriveStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrComponentPresenceStep-----------------
+
+CScrComponentPresenceStep::CScrComponentPresenceStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrComponentPresenceStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrComponentPresenceStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();
+	
+	TBool compPresenceValue(ETrue);
+	if (!GetBoolFromConfig(ConfigSection(), _L("CompPresenceValue"), compPresenceValue))
+		{
+		PrintErrorL(_L("CompPresenceValue property not found"), KErrNotFound);
+		}
+		
+	TBool setCompPresence(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("SetCompPresence"), setCompPresence);
+	if (setCompPresence)
+		{		
+		iScrSession.SetIsComponentPresentL(componentId, compPresenceValue);
+		}
+	
+	TBool result = iScrSession.IsComponentPresentL(componentId);
+	if (result != compPresenceValue)
+		{
+		ERR_PRINTF4(_L("Mismatch for IsComponentPresentL for component id %d. Expected %d and the result was %d."), componentId, compPresenceValue, result);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CScrComponentPresenceStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrEMMCComponentStep-----------------
+
+CScrEMMCComponentStep::CScrEMMCComponentStep(CScrTestServer& aParent)   : CScrTestStep(aParent)
+    {
+    }
+
+void CScrEMMCComponentStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrEMMCComponentStep::ImplTestStepL()
+    {
+    TInt noOfComponents(0);
+    GetIntFromConfig(ConfigSection(), KNoOfComponents, noOfComponents);
+    
+    TPtrC formatDrive;
+    GetStringFromConfig(ConfigSection(), KFormatDrive, formatDrive);
+    TInt drive;
+    RFs fs;
+    User::LeaveIfError(fs.Connect());
+    User::LeaveIfError(fs.CharToDrive(formatDrive[0], drive));
+    fs.Close();
+    TDriveList filterFormatDrive;
+    filterFormatDrive.FillZ(KMaxDrives);
+    filterFormatDrive[drive] = 1;
+        
+    CComponentFilter* componentFilter = CComponentFilter::NewLC();
+    componentFilter->SetInstalledDrivesL(filterFormatDrive);
+            
+    RArray<TComponentId> foundComponentIds;
+    CleanupClosePushL(foundComponentIds);
+        
+    iScrSession.GetComponentIdsL(foundComponentIds, componentFilter);
+    
+    if (foundComponentIds.Count() != noOfComponents)
+        {
+        ERR_PRINTF1(_L("Mismatch for number of components found."));
+        SetTestStepResult(EFail);
+        }
+    CleanupStack::PopAndDestroy(2);
+    }
+
+void CScrEMMCComponentStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+// -----------CScrComponentPresentForNameVendorStep-----------------
+
+CScrComponentPresentForNameVendorStep::CScrComponentPresentForNameVendorStep(CScrTestServer& aParent)   : CScrTestStep(aParent)
+    {
+    }
+
+void CScrComponentPresentForNameVendorStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrComponentPresentForNameVendorStep::ImplTestStepL()
+    {
+    TPtrC name;
+    GetStringFromConfig(ConfigSection(), KComponentName, name);
+    
+    TPtrC vendor;
+    GetStringFromConfig(ConfigSection(), KVendorName, vendor);
+    
+    CComponentFilter* componentFilter = CComponentFilter::NewLC();
+    componentFilter->SetNameL(name);
+    componentFilter->SetVendorL(vendor);
+    
+    RArray<TComponentId> foundComponentIds;
+    CleanupClosePushL(foundComponentIds);
+        
+    iScrSession.GetComponentIdsL(foundComponentIds, componentFilter);
+    
+    TInt noOfComponents(0);
+    GetIntFromConfig(ConfigSection(), KNoOfComponents, noOfComponents);
+        
+    if (foundComponentIds.Count() != noOfComponents)
+        {
+        ERR_PRINTF1(_L("Mismatch for number of components found."));
+        SetTestStepResult(EFail);
+        }
+    CleanupStack::PopAndDestroy(2);
+    }
+
+void CScrComponentPresentForNameVendorStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/appreginfosteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1399 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements test steps for component management APIs in the SCR
+*
+*/
+
+#include "appreginfosteps.h"
+#include "tscrdefs.h"
+#include <scs/cleanuputils.h>
+#include <usif/usiferror.h>
+
+using namespace Usif;
+
+// -----------CScrAddApplicationEntryStep-----------------
+
+CScrAddApplicationEntryStep::CScrAddApplicationEntryStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrAddApplicationEntryStep::ImplTestStepPreambleL()
+    {
+    User::LeaveIfError(iScrSession.Connect());    
+    }
+
+void CScrAddApplicationEntryStep::ImplTestStepL()
+    {
+    TComponentId compId = 0;
+    TBool newComponentAdded(EFalse);
+   
+    // Checking if have already inserted the component
+    TBool isMultiApp(EFalse);
+    GetBoolFromConfig(ConfigSection(), _L("IsMultiApp"), isMultiApp);
+    if (isMultiApp)
+        {
+        INFO_PRINTF1(_L("Checking if the component is already present"));
+        CGlobalComponentId *globalId = GetGlobalComponentIdLC();
+        TRAP_IGNORE(compId = iScrSession.GetComponentIdL(globalId->GlobalIdName(), globalId->SoftwareTypeName()););
+        CleanupStack::PopAndDestroy(globalId);
+        }
+
+	// Try adding the app to a component. The add operation will fail if the component is not present.
+	if (!compId) 
+		{
+		if (GetIntFromConfig(ConfigSection(), _L("UseComponentId"), compId))
+			INFO_PRINTF2(_L("Adding a new AppRegInfo to component %d"), compId);
+		}
+    
+    // The component is not present already
+    if (!compId)   
+        {
+        INFO_PRINTF1(_L("Adding a new component."));
+        compId = AddNonLocalisableComponentL(iScrSession);
+        newComponentAdded = ETrue;
+        }
+
+	INFO_PRINTF1(_L("Get reg info from config file."));
+	const CApplicationRegistrationData* appRegData = GetAppRegInfoFromConfigLC();
+	
+	if (iIsPerformanceTest)
+        StartTimer(); // Start the timer in the case of a performance tests        
+	TRAPD(err, iScrSession.AddApplicationEntryL(compId, *appRegData));
+    if (iIsPerformanceTest)
+        StopTimerAndPrintResultL(); // Stop the timer and analyze the time taken after performance tests
+        
+	if (err != KErrNone)
+	    {
+		if (newComponentAdded)
+			{
+			// We are going to delete the component with no apps
+			iScrSession.DeleteComponentL(compId);
+			}
+		User::Leave(err);
+	    }
+
+	CleanupStack::PopAndDestroy();
+	}
+    
+void CScrAddApplicationEntryStep::ImplTestStepPostambleL()
+    {
+   
+    }
+
+
+// -----------CScrDeleteApplicationEntriesStep-----------------
+
+CScrDeleteApplicationEntriesStep::CScrDeleteApplicationEntriesStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrDeleteApplicationEntriesStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrDeleteApplicationEntriesStep::ImplTestStepL()
+    {
+    TComponentId compId = 0;
+   
+    INFO_PRINTF1(_L("Fetching the component Id."));
+    
+    TUid appUid = TUid::Null();
+    TRAP_IGNORE(GetAppUidL(appUid));
+    
+    if(appUid == TUid::Null())
+        {
+        SetTestStepResult(EPass);
+        CGlobalComponentId *globalId = GetGlobalComponentIdLC();
+        compId = iScrSession.GetComponentIdL(globalId->GlobalIdName(), globalId->SoftwareTypeName());
+        CleanupStack::PopAndDestroy(globalId);
+        }
+    else
+        {
+        compId = iScrSession.GetComponentIdForAppL(appUid);
+        }
+
+    INFO_PRINTF2(_L("Deleting app entries for component %d"), compId);
+    iScrSession.DeleteApplicationEntriesL(compId);
+    INFO_PRINTF2(_L("Deleting component %d"), compId);
+    iScrSession.DeleteComponentL(compId);    
+    }
+    
+void CScrDeleteApplicationEntriesStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+CSCRGetAppServicesUids::CSCRGetAppServicesUids(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CSCRGetAppServicesUids::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CSCRGetAppServicesUids::ImplTestStepL()
+    {
+	TUid appUid, serviceUid;
+	TInt noOfServiceUids = 0;
+	RArray<TUid> expectedServiceUids;
+	RArray<TUid> obtainedServiceUids;
+	TBuf<20> serviceUidName;
+    CleanupClosePushL(expectedServiceUids);
+    CleanupClosePushL(obtainedServiceUids);
+    GetIntFromConfig(ConfigSection(), _L("NoOfServiceUids"), noOfServiceUids);
+    for (TUint i = 0; i < noOfServiceUids; ++i)
+        {                
+        serviceUidName = KServiceUid;
+        GenerateIndexedAttributeNameL(serviceUidName, i);
+        GetUidFromConfig(ConfigSection(), serviceUidName, serviceUid);
+        expectedServiceUids.AppendL(serviceUid);
+        }
+        
+	GetAppUidL(appUid);
+	RRegistrationInfoForApplication InfoQuerySubSession;
+	CleanupClosePushL(InfoQuerySubSession);	
+	
+	InfoQuerySubSession.OpenL(iScrSession, appUid);
+
+	TRAPD(err,InfoQuerySubSession.GetAppServicesUidsL(obtainedServiceUids));
+	
+	TInt noOfExpectedServiceUids = expectedServiceUids.Count();
+	TInt noOfObtainedServiceUids = obtainedServiceUids.Count();
+	 if(err != KErrNone && err !=KErrNotFound)
+         {
+         INFO_PRINTF2(_L("Failed to Get App Uid , error: %d"), err);
+         SetTestStepResult(EFail);        
+         }      
+	         	              
+	    
+	if(noOfExpectedServiceUids != noOfObtainedServiceUids)
+	    {
+	    INFO_PRINTF3(_L("Service Uid's Count doesn't match: expected/obtained Uid count: %d/%d"), noOfExpectedServiceUids, noOfObtainedServiceUids);
+	    SetTestStepResult(EFail);	 
+	    }
+	else
+	    {
+        //Comparing expected result and Obtained Result
+        for(TInt i=0 ; i < noOfExpectedServiceUids ; i++)
+            {
+            if(expectedServiceUids[i] != obtainedServiceUids[i])
+                {
+                INFO_PRINTF3(_L("Service Uid doesn't match: expected/obtained Uid: 0x%08x/0x%08x"), expectedServiceUids[i].iUid, obtainedServiceUids[i].iUid);
+                SetTestStepResult(EFail);           
+                }
+            }	
+	    }
+	InfoQuerySubSession.Close();	
+	obtainedServiceUids.Close();
+	expectedServiceUids.Close();
+	CleanupStack::Pop(3, &expectedServiceUids);	    
+    }
+    
+void CSCRGetAppServicesUids::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+CSCRGetAppForDataType::CSCRGetAppForDataType(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CSCRGetAppForDataType::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CSCRGetAppForDataType::ImplTestStepL()
+    {
+    TUid obtainedAppUid,expectedAppUid;
+        
+    TPtrC dataType;
+    if(!GetStringFromConfig(ConfigSection(), KServiceDataType, dataType))
+        {
+        INFO_PRINTF1(_L("Failed to Get Data Type from ini"));
+        SetTestStepResult(EFail);      
+        }
+    
+    TBool uidExists = EFalse;
+    GetUidFromConfig(ConfigSection(), KAppUid, expectedAppUid);
+    GetBoolFromConfig(ConfigSection(), _L("UidExists"), uidExists);
+
+    RApplicationRegistrationInfo InfoQuerySubSession;
+    CleanupClosePushL(InfoQuerySubSession);
+    
+    
+    InfoQuerySubSession.OpenL(iScrSession);
+
+    TRAPD(err,obtainedAppUid = InfoQuerySubSession.GetAppForDataTypeL(dataType));        
+         
+     if(err != KErrNone && uidExists)
+         {
+         INFO_PRINTF2(_L("Failed to Get App Uid , error: %d"), err);
+         SetTestStepResult(EFail);        
+         }      
+         
+     //Comparing expected result and Obtained Result
+     if(expectedAppUid != obtainedAppUid && uidExists)
+         {
+         INFO_PRINTF3(_L("App Uid doesn't match: expected/obtained Uid: 0x%08x/0x%08x"), expectedAppUid, obtainedAppUid);
+         SetTestStepResult(EFail);        
+         }         
+    
+    InfoQuerySubSession.Close();        
+    CleanupStack::PopAndDestroy();        
+    }
+    
+void CSCRGetAppForDataType::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+CSCRGetAppForDataTypeAndService::CSCRGetAppForDataTypeAndService(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CSCRGetAppForDataTypeAndService::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CSCRGetAppForDataTypeAndService::ImplTestStepL()
+    {
+    TUid obtainedAppUid, expectedAppUid, serviceUid;    
+        
+    TPtrC dataType;
+    if(!GetStringFromConfig(ConfigSection(), KServiceDataType, dataType))
+        {
+        INFO_PRINTF1(_L("Failed to Get Data Type from ini"));
+        SetTestStepResult(EFail);      
+        }
+    
+    //Get serviceUid from ini
+    if(!GetUidFromConfig(ConfigSection(), KServiceUid, serviceUid))
+        {
+        INFO_PRINTF1(_L("Failed to Service uid from ini"));
+        SetTestStepResult(EFail);
+        }
+    
+    //Get expected Appuid from ini
+    GetUidFromConfig(ConfigSection(), KAppUid, expectedAppUid);
+    
+    TBool uidExists = EFalse;
+    GetBoolFromConfig(ConfigSection(), _L("UidExists"), uidExists);
+    
+    RApplicationRegistrationInfo InfoQuerySubSession;
+    CleanupClosePushL(InfoQuerySubSession);
+    InfoQuerySubSession.OpenL(iScrSession);
+    
+    TRAPD(err,obtainedAppUid = InfoQuerySubSession.GetAppForDataTypeAndServiceL(dataType,serviceUid));
+        
+    if(err != KErrNone && uidExists)
+        {
+        INFO_PRINTF2(_L("Failed to Get App Uid , error: %d"), err);
+        SetTestStepResult(EFail);        
+        }      
+        
+    //Comparing expected result and Obtained Result
+    if(expectedAppUid != obtainedAppUid && uidExists)
+        {
+        INFO_PRINTF3(_L("App Uid doesn't match: expected/obtained Uid: 0x%08x/0x%08x"), expectedAppUid, obtainedAppUid);
+        SetTestStepResult(EFail);        
+        }    
+    
+    InfoQuerySubSession.Close();        
+    CleanupStack::PopAndDestroy();        
+    }
+    
+void CSCRGetAppForDataTypeAndService::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+CSCRGetDefaultScreenNumber::CSCRGetDefaultScreenNumber(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CSCRGetDefaultScreenNumber::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CSCRGetDefaultScreenNumber::ImplTestStepL()
+    {
+    TUid appUid;
+    TInt obtaineddefaultScreenNumber = 0 , expecteddefaultScreenNumber = 0;
+    
+    //Get the Default screen Number from the ini to compare
+    GetIntFromConfig(ConfigSection(), _L("DefaultScreenNumber"), expecteddefaultScreenNumber);
+               
+    GetAppUidL(appUid);
+    RRegistrationInfoForApplication InfoQuerySubSession;
+    CleanupClosePushL(InfoQuerySubSession);
+    INFO_PRINTF1(_L("After subsession creation"));
+    
+    InfoQuerySubSession.OpenL(iScrSession, appUid);
+    TRAPD(err, obtaineddefaultScreenNumber = InfoQuerySubSession.DefaultScreenNumberL());
+
+    if(err != KErrNone && expecteddefaultScreenNumber != 0)
+       {
+       INFO_PRINTF2(_L("Failed to Get Default Screen Number, error: %d"), err);
+       SetTestStepResult(EFail);        
+       }      
+       
+   //Comparing expected result and Obtained Result
+   if(expecteddefaultScreenNumber != obtaineddefaultScreenNumber && expecteddefaultScreenNumber != 0)
+       {
+       INFO_PRINTF3(_L("Screen Number doesn't match: expected/obtained Uid: %d/%d"), expecteddefaultScreenNumber, obtaineddefaultScreenNumber);
+       SetTestStepResult(EFail);        
+       }    
+    
+    InfoQuerySubSession.Close();        
+    CleanupStack::PopAndDestroy();
+    }
+    
+void CSCRGetDefaultScreenNumber::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+CSCRGetNumberOfDefinedIcons::CSCRGetNumberOfDefinedIcons(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CSCRGetNumberOfDefinedIcons::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CSCRGetNumberOfDefinedIcons::ImplTestStepL()
+    {
+    TUid appUid;
+    TInt obtainedIconcount = 0, expectedIconcount = 0;
+    
+    //Get the Expected Number of App Icons from the ini to compare
+    GetIntFromConfig(ConfigSection(), KLocNumberOfAppIcons, expectedIconcount);
+    GetAppUidL(appUid);
+    RRegistrationInfoForApplication InfoQuerySubSession;    
+    CleanupClosePushL(InfoQuerySubSession);
+    
+    InfoQuerySubSession.OpenL(iScrSession, appUid);
+            
+    TRAPD(err,obtainedIconcount = InfoQuerySubSession.NumberOfOwnDefinedIconsL());
+    
+    if(err != KErrNone && expectedIconcount != 0)
+       {
+       INFO_PRINTF2(_L("Failed to Get Deafult Screen Number, error: %d"), err);
+       SetTestStepResult(EFail);        
+       }      
+       
+    //Comparing expected result and Obtained Result
+    if(expectedIconcount != obtainedIconcount && expectedIconcount != -1)
+       {
+       INFO_PRINTF3(_L("Number of Defined Icons for App doesn't match: expected/obtained Uid: %d/%d"), expectedIconcount, obtainedIconcount);
+       SetTestStepResult(EFail);        
+       } 
+    
+    InfoQuerySubSession.Close();        
+    CleanupStack::PopAndDestroy();
+        
+    }
+    
+void CSCRGetNumberOfDefinedIcons::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+CSCRGetApplicationLanguage::CSCRGetApplicationLanguage(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CSCRGetApplicationLanguage::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CSCRGetApplicationLanguage::ImplTestStepL()
+    {
+    TUid appUid;    
+    TInt obtainedCurrentLanguage = 0, expectedCurrentLanguage = 0;
+    
+    //Get the Expected Current application Language from the ini to compare
+    GetIntFromConfig(ConfigSection(), KLocAppLanguage, expectedCurrentLanguage);
+    
+    GetAppUidL(appUid);
+    INFO_PRINTF1(_L("Before subsession creation"));
+
+    RRegistrationInfoForApplication InfoQuerySubSession;
+    CleanupClosePushL(InfoQuerySubSession);
+    
+    InfoQuerySubSession.OpenL(iScrSession, appUid);
+    
+    TRAPD(err, obtainedCurrentLanguage = (TInt)InfoQuerySubSession.ApplicationLanguageL());
+    
+    if(err != KErrNone && expectedCurrentLanguage != 0)
+       {
+       INFO_PRINTF2(_L("Failed to Get Current App Language, error: %d"), err);
+       SetTestStepResult(EFail);        
+       }      
+       
+    //Comparing expected result and Obtained Result
+    if(expectedCurrentLanguage != obtainedCurrentLanguage && expectedCurrentLanguage != 0)
+       {
+       INFO_PRINTF3(_L("Number of Defined Icons for App doesn't match: expected/obtained Uid: %d/%d"), expectedCurrentLanguage, obtainedCurrentLanguage);
+       SetTestStepResult(EFail);        
+       } 
+        
+    InfoQuerySubSession.Close();     
+    CleanupStack::PopAndDestroy(&InfoQuerySubSession);
+    }
+    
+void CSCRGetApplicationLanguage::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+// -----------CScrGetAppOwnedFilesEntryStep-----------------
+
+CScrGetAppOwnedFilesEntryStep::CScrGetAppOwnedFilesEntryStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrGetAppOwnedFilesEntryStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrGetAppOwnedFilesEntryStep::ImplTestStepL()
+    {
+    INFO_PRINTF1(_L("Get the UID from the ini for which the sub session is to be opened"));
+    TUid  appUid;
+    GetAppUidL(appUid);
+    
+    INFO_PRINTF1(_L("Get the expected App owned files from ini"));
+    RPointerArray<HBufC> appOwnedFilesFromIni;
+    GetAppOwnedFilesL(appOwnedFilesFromIni);
+   
+    INFO_PRINTF1(_L("Open the sub session for the UID"));
+    RRegistrationInfoForApplication AppRegInfoQueryAppSubSession;    
+    TRAPD(sessionerr,AppRegInfoQueryAppSubSession.OpenL(iScrSession,appUid));
+    if(KErrNone != sessionerr)
+           {
+           INFO_PRINTF2(_L("Failed to create the subsession to the SCR server (Error:%d)."), sessionerr);
+           User::Leave(sessionerr);
+           }    
+    
+    INFO_PRINTF1(_L("Retrieving the App Owned Files form db."));
+    RPointerArray<HBufC> appOwnedFilesArray;     
+    TInt err = KErrNone;
+    TRAP(err, AppRegInfoQueryAppSubSession.GetAppOwnedFilesL(appOwnedFilesArray));
+    if(KErrNone == err)
+        {
+        INFO_PRINTF1(_L("Comparing the retrieved AppOwned files with the expected files within the ini"));
+        if(CompareAppOwnedFileNamesL(appOwnedFilesArray,appOwnedFilesFromIni))
+            SetTestStepResult(EPass);
+        else
+            SetTestStepResult(EFail);
+        }
+    else
+        {
+        appOwnedFilesArray.ResetAndDestroy();    
+        appOwnedFilesFromIni.ResetAndDestroy();
+        AppRegInfoQueryAppSubSession.Close();
+        User::Leave(err);
+        }               
+   
+    //closing the resource handles
+    appOwnedFilesArray.ResetAndDestroy();    
+    appOwnedFilesFromIni.ResetAndDestroy();
+    AppRegInfoQueryAppSubSession.Close();
+    }
+    
+TBool CScrGetAppOwnedFilesEntryStep::CompareAppOwnedFileNamesL(RPointerArray<HBufC>& aActualValue,RPointerArray<HBufC>& aExpetedValue)
+    {
+    TInt expectedCount = aExpetedValue.Count();
+    TInt actualCount = aActualValue.Count();
+    TBool result = ETrue;
+    if(  expectedCount != actualCount )
+        return EFalse;
+        
+    for(TInt i = 0 ; i < actualCount ; i++)            
+        {
+        if(!aExpetedValue.Find(aActualValue[i]))
+             {
+             result = EFalse;
+             break;
+             }
+        }
+    
+    return result;
+    }
+
+void CScrGetAppOwnedFilesEntryStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+
+
+// -----------CScrGetAppCharacteristicsEntryStep-----------------
+
+CScrGetAppCharacteristicsEntryStep::CScrGetAppCharacteristicsEntryStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrGetAppCharacteristicsEntryStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();    
+    }
+
+void CScrGetAppCharacteristicsEntryStep::ImplTestStepL()
+    {
+    INFO_PRINTF1(_L("Get the UID from the ini for which the sub session is to be opened"));
+    TUid  appUid;
+    GetAppUidL(appUid);
+    
+    INFO_PRINTF1(_L("Get the expected capabilty for an app from ini"));
+    TInt attributes, hidden, embeddability, newFile, launch;
+    TPtrC groupName;
+    if(GetIntFromConfig(ConfigSection(), _L("Attributes"), attributes) == EFalse)
+        PrintErrorL(_L("AppUid was not found!"), KErrNotFound);
+    if(GetIntFromConfig(ConfigSection(), _L("Hidden"), hidden) == EFalse)
+        PrintErrorL(_L("AppUid was not found!"), KErrNotFound);
+    if(GetIntFromConfig(ConfigSection(), _L("Embeddability"), embeddability) == EFalse)
+        PrintErrorL(_L("AppUid was not found!"), KErrNotFound);
+    if(GetIntFromConfig(ConfigSection(), _L("NewFile"), newFile) == EFalse)
+        PrintErrorL(_L("AppUid was not found!"), KErrNotFound);
+    if(GetIntFromConfig(ConfigSection(), _L("Launch"), launch) == EFalse)
+        PrintErrorL(_L("AppUid was not found!"), KErrNotFound);
+    GetStringFromConfig(ConfigSection(), _L("GroupName"), groupName);
+    
+    INFO_PRINTF1(_L("Open the sub session for the UID"));
+    RRegistrationInfoForApplication AppRegInfoQueryAppSubSession;
+    TRAPD(sessionerr,AppRegInfoQueryAppSubSession.OpenL(iScrSession,appUid));
+    if(KErrNone != sessionerr)
+               {
+               INFO_PRINTF2(_L("Failed to create the subsession to the SCR server (Error:%d)."), sessionerr);
+               User::Leave(sessionerr);
+               }    
+    
+    INFO_PRINTF1(_L("Retrieving characteristics for an app form db."));
+    Usif::TApplicationCharacteristics appCharacteristics ;
+    TInt err = KErrNone;
+    TRAP(err, AppRegInfoQueryAppSubSession.GetAppCharacteristicsL(appCharacteristics));
+    if(KErrNone ==err)
+        {
+        INFO_PRINTF1(_L("Comparing the retrieved App characteristics with the expected app characteristics within the ini"));
+  
+        if(appCharacteristics.iEmbeddability != embeddability || appCharacteristics.iAppIsHidden != hidden || appCharacteristics.iSupportsNewFile != newFile || appCharacteristics.iLaunchInBackground != launch || appCharacteristics.iGroupName.Compare(groupName))
+            SetTestStepResult(EFail);   
+        else
+            SetTestStepResult(EPass);
+        }
+    else
+        {
+        AppRegInfoQueryAppSubSession.Close();        
+        User::Leave(err);
+        }  
+    //closing the resource handles    
+    AppRegInfoQueryAppSubSession.Close();
+    }
+    
+
+void CScrGetAppCharacteristicsEntryStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();    
+    }
+
+
+// -----------CScrGetAppIconFileNameEntryStep-----------------
+
+CScrGetAppIconEntryStep::CScrGetAppIconEntryStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrGetAppIconEntryStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();    
+    }
+
+void CScrGetAppIconEntryStep::ImplTestStepL()
+    {        
+    TVerdict result = EFail;
+    INFO_PRINTF1(_L("Get the UID from the ini for which the sub session is to be opened"));
+    TUid  appUid;
+    GetAppUidL(appUid);
+    
+    INFO_PRINTF1(_L("Get the expected filename of the Icon for an app from ini"));
+    TPtrC IconFileName;
+    if(GetStringFromConfig(ConfigSection(), _L("LocIconFileName"), IconFileName) == EFalse)
+            {           
+            PrintErrorL(_L("AppUid was not found!"), KErrNotFound);
+            }
+    
+    INFO_PRINTF1(_L("Open the sub session for the UID"));
+    RRegistrationInfoForApplication AppRegInfoQueryAppSubSession;
+    TRAPD(sessionerr,AppRegInfoQueryAppSubSession.OpenL(iScrSession,appUid));
+    if(KErrNone != sessionerr)
+            {
+            INFO_PRINTF2(_L("Failed to create the subsession to the SCR server (Error:%d)."), sessionerr);
+            User::Leave(sessionerr);
+            }      
+    
+    
+    HBufC* filename = NULL;        
+    INFO_PRINTF1(_L("Retrieving the Icon for an app form db."));
+   
+    TInt err = KErrNotFound;
+    TRAP(err, AppRegInfoQueryAppSubSession.GetAppIconL(filename));    
+    if(KErrNone == err)
+      {
+      INFO_PRINTF1(_L("Comparing the retrieved App Icon with the expected app capability within the ini"));               
+            if(!IconFileName.Compare(*filename))
+            {
+            result = EPass;            
+            }            
+       }
+    else
+      {
+      if(NULL != filename)
+          delete filename;
+      AppRegInfoQueryAppSubSession.Close();      
+      User::Leave(err);
+      }     
+       
+  
+    SetTestStepResult(result);   
+    if(NULL != filename)
+        delete filename;
+    
+    //closing the resource handles    
+    AppRegInfoQueryAppSubSession.Close(); 
+    }
+    
+
+void CScrGetAppIconEntryStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();    
+    }
+
+
+// -----------CScrGetAppViewIconEntryStep-----------------
+
+CScrGetAppViewIconEntryStep::CScrGetAppViewIconEntryStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrGetAppViewIconEntryStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();    
+    }
+
+void CScrGetAppViewIconEntryStep::ImplTestStepL()
+    {
+    INFO_PRINTF1(_L("Get the App UID and View Uid from the ini for which the sub session is to be opened"));
+    TUid  appUid;
+    TInt viewUid;
+    GetAppUidL(appUid);
+    
+    if(GetIntFromConfig(ConfigSection(), _L("VwUid"), viewUid) == EFalse)
+        {
+        PrintErrorL(_L("View Uid was not found!"), KErrNotFound);
+        }
+    
+    INFO_PRINTF1(_L("Get the expected filename of the View Icon for an app from ini"));
+    TPtrC appFileName; 
+    if(GetStringFromConfig(ConfigSection(), _L("VwIconFileName"), appFileName)== EFalse)
+       {
+       PrintErrorL(_L("View Icon file Name was not found!"), KErrNotFound);
+       }
+    
+    INFO_PRINTF1(_L("Open the sub session for the UID"));
+    RRegistrationInfoForApplication AppRegInfoQueryAppSubSession;
+    TRAPD(sessionerr,AppRegInfoQueryAppSubSession.OpenL(iScrSession,appUid));
+    if(KErrNone != sessionerr)
+          {
+          INFO_PRINTF2(_L("Failed to create the subsession to the SCR server (Error:%d)."), sessionerr);
+          User::Leave(sessionerr);
+          }    
+    
+    INFO_PRINTF1(_L("Retrieving the view icon file for an app form db."));   
+    
+    HBufC* filename = NULL;     
+    TUid viewId = TUid::Uid(viewUid);
+    
+    TInt err = KErrNotFound;
+    TRAP(err, AppRegInfoQueryAppSubSession.GetAppViewIconL(viewId,filename));
+    if(KErrNone == err)
+        {
+        INFO_PRINTF1(_L("Comparing the retrieved view icon file with the expected view icon file within the ini"));
+       
+        if(!appFileName.Compare(*filename))
+            {
+            SetTestStepResult(EPass);           
+            }
+        else
+            {
+            SetTestStepResult(EFail);    
+            }
+        }
+    else
+        {
+        if(NULL != filename)
+            delete filename;        
+        AppRegInfoQueryAppSubSession.Close();
+        User::Leave(err);
+        }
+    if(NULL != filename)
+        delete filename; 
+    //closing the resource handles    
+    AppRegInfoQueryAppSubSession.Close();
+    }
+    
+
+void CScrGetAppViewIconEntryStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();    
+    }
+
+
+// -----------CScrGetAppViewsStep-----------------
+
+CScrGetAppViewsStep::CScrGetAppViewsStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrGetAppViewsStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrGetAppViewsStep::ImplTestStepL()
+    {
+    TUid appUid;    
+    GetAppUidL(appUid);
+    RPointerArray<Usif::CAppViewData> appViewInfoArrayExpected;
+    CleanupResetAndDestroyPushL(appViewInfoArrayExpected);
+    GetViewDataInfoFromConfigL(appViewInfoArrayExpected);
+        
+    RPointerArray<Usif::CAppViewData> appViewInfoArrayRetrieved;
+    CleanupResetAndDestroyPushL(appViewInfoArrayRetrieved);   
+      
+    RRegistrationInfoForApplication infoQuerySubSession;
+    CleanupClosePushL(infoQuerySubSession); 
+            
+    infoQuerySubSession.OpenL(iScrSession, appUid);
+    
+    // Start timer just before invocation of SCR API
+    StartTimer();
+    infoQuerySubSession.GetAppViewsL(appViewInfoArrayRetrieved);
+            
+    if(appViewInfoArrayExpected.Count()!=appViewInfoArrayRetrieved.Count())
+        {
+        ERR_PRINTF1(_L("Returned view data entry count doesnt match the expected count")); 
+        SetTestStepResult(EFail);
+        }
+    else
+        {
+        for(TInt i=0;i<appViewInfoArrayExpected.Count();i++)
+                {
+                const CCaptionAndIconInfo *captionAndIconInfoExpected = appViewInfoArrayExpected[i]->CaptionAndIconInfo();
+                const CCaptionAndIconInfo *captionAndIconInfoRetrieved = appViewInfoArrayRetrieved[i]->CaptionAndIconInfo();
+                if((appViewInfoArrayExpected[i]->Uid()!= appViewInfoArrayRetrieved[i]->Uid())||(appViewInfoArrayExpected[i]->ScreenMode()!= appViewInfoArrayRetrieved[i]->ScreenMode())||(NotEqual(captionAndIconInfoExpected, captionAndIconInfoRetrieved)))  
+                    {
+                    ERR_PRINTF1(_L("Returned view data entry values don't match with the expected ones."));
+                    SetTestStepResult(EFail);
+                    }
+                else
+                    {
+                    INFO_PRINTF2(_L("View details associated with view data entry %d"), i);
+                    INFO_PRINTF3(_L("ViewData Expected: Uid-%d, ScreenMode-%d"), (appViewInfoArrayExpected[i]->Uid()).iUid, appViewInfoArrayExpected[i]->ScreenMode());
+                    INFO_PRINTF3(_L("ViewData Retrieved: Uid-%d, ScreenMode-%d"), (appViewInfoArrayRetrieved[i]->Uid()).iUid, appViewInfoArrayRetrieved[i]->ScreenMode());
+                    if(captionAndIconInfoExpected!=NULL)
+                        {
+                        INFO_PRINTF4(_L("Associated caption details Expected: Caption-%S, No.of Icons-%d, IconFilename-%S"),&(captionAndIconInfoExpected->Caption()), captionAndIconInfoExpected->NumOfAppIcons(), &(captionAndIconInfoExpected->IconFileName()));
+                        INFO_PRINTF4(_L("Associated caption details Retrieved: Caption-%S, No.of Icons-%d, IconFilename-%S"), &(captionAndIconInfoRetrieved->Caption()), captionAndIconInfoRetrieved->NumOfAppIcons(), &(captionAndIconInfoRetrieved->IconFileName()));
+                        }
+                    else
+                        {
+                        INFO_PRINTF1(_L("No expected caption and icon info. No retrieved caption and icon info."));
+                        }
+                    }
+                }
+            }    
+            infoQuerySubSession.Close();
+            CleanupStack::PopAndDestroy(1, &infoQuerySubSession); 
+            CleanupStack::Pop(2,&appViewInfoArrayExpected); 
+            appViewInfoArrayRetrieved.ResetAndDestroy();
+            appViewInfoArrayExpected.ResetAndDestroy();
+            
+        }
+    
+void CScrGetAppViewsStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+
+// -----------CScrGetAppServiceInfoStep-----------------
+
+CScrGetAppServiceInfoStep::CScrGetAppServiceInfoStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrGetAppServiceInfoStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrGetAppServiceInfoStep::ImplTestStepL()
+    {
+    RApplicationRegistrationInfo infoQuerySubSession;
+    CleanupClosePushL(infoQuerySubSession);
+    infoQuerySubSession.OpenL(iScrSession);    
+    
+    TUid serviceUid, appUid;      
+    RPointerArray<Usif::CServiceInfo> appServiceInfoArrayExpected;
+    CleanupResetAndDestroyPushL(appServiceInfoArrayExpected);
+               
+    RPointerArray<Usif::CServiceInfo> appServiceInfoArrayRetrieved;
+    CleanupResetAndDestroyPushL(appServiceInfoArrayRetrieved);   
+
+    CAppServiceInfoFilter* appServiceInfoFilter = CAppServiceInfoFilter::NewLC();
+    
+    TInt filterToSet(0);
+    if (!GetIntFromConfig(ConfigSection(), _L("FilterToSet"), filterToSet))
+        PrintErrorL(_L("Filter to be set was not found!"), KErrNotFound);
+    
+    switch(filterToSet)
+        {
+        case 1:
+            {
+            
+            //Testing GetAppServiceInfo given the appUid
+            if (!GetUidFromConfig(ConfigSection(), _L("AppUid"), appUid))
+                PrintErrorL(_L("AppUid was not found!"), KErrNotFound);
+            INFO_PRINTF2(_L("AppUid is 0x%x"), appUid.iUid);
+            
+            appServiceInfoFilter->SetAppUidForServiceInfo(appUid);
+            
+            GetAppServiceInfoL(appServiceInfoArrayExpected);
+            
+            infoQuerySubSession.GetServiceInfoL(appServiceInfoFilter, appServiceInfoArrayRetrieved);
+            break;
+            }
+        case 2:
+            {
+            //Testing GetAppServiceInfo given the serviceUid
+           
+            if(!GetUidFromConfig(ConfigSection(), _L("ServiceUid"), serviceUid))
+                PrintErrorL(_L("ServiceUid was not found!"), KErrNotFound);            
+            INFO_PRINTF2(_L("ServiceUid is 0x%x"), serviceUid.iUid);
+            
+            appServiceInfoFilter->SetServiceUidForServiceImplementations(serviceUid);
+            
+            GetAppServiceInfoL(appServiceInfoArrayExpected);
+                                    
+            infoQuerySubSession.GetServiceInfoL(appServiceInfoFilter, appServiceInfoArrayRetrieved);
+            break;
+            }
+        case 3:
+            {
+            //Testing GetAppServiceInfo given the serviceUid and dataType
+            TPtrC dataType;
+            if (!GetUidFromConfig(ConfigSection(), _L("ServiceUid"), serviceUid))
+                PrintErrorL(_L("ServiceUid was not found!"), KErrNotFound);            
+            INFO_PRINTF2(_L("ServiceUid is 0x%x"), serviceUid.iUid);
+            
+            if(!GetStringFromConfig(ConfigSection(), _L("ServiceDataType"), dataType))
+                PrintErrorL(_L("DataType was not found!"), KErrNotFound);
+            INFO_PRINTF2(_L("DataType is %S"), &dataType);
+            
+            appServiceInfoFilter->SetServiceUidAndDatatTypeForServiceImplementationsL(serviceUid, dataType);
+            
+            GetAppServiceInfoL(appServiceInfoArrayExpected);
+            
+            infoQuerySubSession.GetServiceInfoL(appServiceInfoFilter, appServiceInfoArrayRetrieved);
+            break;
+            }
+        case 4:
+            {
+            //Testing GetAppServiceInfo given the appUid and serviceUid
+            if (!GetUidFromConfig(ConfigSection(), _L("AppUid"), appUid))
+                PrintErrorL(_L("AppUid was not found!"), KErrNotFound);
+            INFO_PRINTF2(_L("AppUid is 0x%x"), appUid.iUid);
+            
+            if (!GetUidFromConfig(ConfigSection(), _L("ServiceUid"), serviceUid))
+                PrintErrorL(_L("ServiceUid was not found!"), KErrNotFound);            
+            INFO_PRINTF2(_L("ServiceUid is 0x%x"), serviceUid.iUid);
+            
+            appServiceInfoFilter->SetAppUidAndServiceUidForOpaqueData(appUid, serviceUid);
+            
+            GetAppServiceInfoL(appServiceInfoArrayExpected);
+            
+            infoQuerySubSession.GetServiceInfoL(appServiceInfoFilter, appServiceInfoArrayRetrieved);
+            break;
+            }
+        default:
+            ERR_PRINTF1(_L("Incorrect value for filterToSet, values range from 1-4"));
+            SetTestStepResult(EFail);
+            break;
+        }
+    
+    //check if they r equal
+    if(NotEqualL(appServiceInfoArrayExpected, appServiceInfoArrayRetrieved))
+        {
+        ERR_PRINTF1(_L("Returned service data entry doesnt match the expected values")); 
+        SetTestStepResult(EFail);
+        }
+    
+    //clean up
+    CleanupStack::PopAndDestroy(4,&infoQuerySubSession); //appServiceInfoFilter, appServiceInfoArrayRetrieved, appServiceInfoArrayExpected, infoQuerySubSession 
+    }
+    
+void CScrGetAppServiceInfoStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+
+// -----------CScrGetComponentIdForApp-----------------
+
+CScrGetComponentIdForApp::CScrGetComponentIdForApp(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrGetComponentIdForApp::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrGetComponentIdForApp::ImplTestStepL()
+    {
+    TUid appUid;
+    CGlobalComponentId *globalId = GetGlobalComponentIdLC();
+    TComponentId expectedCompId, retrievedCompId;
+    if (!GetUidFromConfig(ConfigSection(), _L("AppUid"), appUid))
+        PrintErrorL(_L("AppUid was not found!"), KErrNotFound);
+    
+    //Given the GlobalIdName and software type of the component anticipated, fetch the value of the expected ComponentId value.
+    expectedCompId = iScrSession.GetComponentIdL(globalId->GlobalIdName(), globalId->SoftwareTypeName());    
+    CleanupStack::PopAndDestroy(globalId);
+
+    //Fetch the ComponentId associated to the given App.
+    retrievedCompId = iScrSession.GetComponentIdForAppL(appUid);
+    
+    INFO_PRINTF3(_L("Retrieved ComponentId is %d, and Expected componentId is %d "), retrievedCompId, expectedCompId);
+    if(retrievedCompId != expectedCompId)
+        {
+        ERR_PRINTF1(_L("Retrieved componentId  doesnot match the expected values")); 
+        SetTestStepResult(EFail);
+        }
+    }
+    
+void CScrGetComponentIdForApp::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+
+// -----------CScrGetAppUidsForComponent-----------------
+
+CScrGetAppUidsForComponent::CScrGetAppUidsForComponent(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrGetAppUidsForComponent::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrGetAppUidsForComponent::ImplTestStepL()
+    {
+    TComponentId compId;
+    TInt appCount = 0;
+    RArray<TUid> expectedAppUid, retrievedAppUid;
+    CleanupClosePushL(expectedAppUid);
+    CleanupClosePushL(retrievedAppUid);
+    TUid appUid;
+    TBuf<20> appUidTxt;
+    CGlobalComponentId *globalId = GetGlobalComponentIdLC();
+    
+    //Given the GlobalIdName and software type of the component, fetch the value of the componentId value whose associated apps have to be subsequently fetched.
+    compId = iScrSession.GetComponentIdL(globalId->GlobalIdName(), globalId->SoftwareTypeName());
+    CleanupStack::PopAndDestroy(globalId);
+
+    if (!GetIntFromConfig(ConfigSection(), _L("AppCount"), appCount))
+        PrintErrorL(_L("AppCount was not found!"), KErrNotFound);
+  
+    for(TInt i=0; i<appCount; i++)
+        {
+        appUidTxt = KAppUid; 
+        GenerateIndexedAttributeNameL(appUidTxt, i);
+        if(!GetUidFromConfig(ConfigSection(), appUidTxt, appUid))
+            PrintErrorL(_L("%S was not found!"), KErrNotFound, &appUidTxt);
+        expectedAppUid.AppendL(appUid);
+        }
+    
+    //Get the apps associated to the given componentId.
+    INFO_PRINTF2(_L("Fetching apps asssociated to ComponentId %d"), compId);
+    iScrSession.GetAppUidsForComponentL(compId, retrievedAppUid);
+    if(expectedAppUid.Count()!= retrievedAppUid.Count())
+        {
+        ERR_PRINTF1(_L("Count of the retrieved appUids doesnt match the expected count")); 
+        SetTestStepResult(EFail);
+        }
+    retrievedAppUid.SortSigned();
+    expectedAppUid.SortSigned();
+    
+    for(TInt i=0; i<expectedAppUid.Count();i++)
+        {
+        if(retrievedAppUid[i].iUid != expectedAppUid[i].iUid)
+            {
+            ERR_PRINTF3(_L("Mismatch in expected and retrieved AppUids! Expected Uid: %d, Retrieved Uid: %d"), expectedAppUid[i].iUid, retrievedAppUid[i].iUid); 
+            SetTestStepResult(EFail);
+            break;
+            }
+        }
+    
+    CleanupStack::PopAndDestroy(2, &expectedAppUid);     //retrievedAppUid, expectedAppUid     
+    }
+    
+void CScrGetAppUidsForComponent::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+// -----------CScrAddConcurrentApplicationEntryStep-----------------
+
+CScrAddConcurrentApplicationEntryStep::CScrAddConcurrentApplicationEntryStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrAddConcurrentApplicationEntryStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrAddConcurrentApplicationEntryStep::ImplTestStepL()
+    {
+    TBool isSimultaneousCreateTransaction = EFalse;
+    TBool isSimultaneousWriteReadAppInfoSameSession = EFalse;
+    TBool isSimultaneousWriteAppInfoDiffSession = EFalse;
+    TBool isSimultaneousReadAppInfoDiffSessionWithoutTransaction = EFalse;
+        
+    GetBoolFromConfig(ConfigSection(), _L("SimultaneousCreateTransaction"), isSimultaneousCreateTransaction);
+    GetBoolFromConfig(ConfigSection(), _L("SimultaneousWriteReadAppInfoSameSession"), isSimultaneousWriteReadAppInfoSameSession);
+    GetBoolFromConfig(ConfigSection(), _L("SimultaneousWriteAppInfoDiffSession"), isSimultaneousWriteAppInfoDiffSession);
+    GetBoolFromConfig(ConfigSection(), _L("SimultaneousReadAppInfoDiffSessionWithoutTransaction"), isSimultaneousReadAppInfoDiffSessionWithoutTransaction);
+    
+    Usif::RSoftwareComponentRegistry scrSession1, scrSession2;    
+    TBool newComponentAdded(EFalse);
+    // connect to the SCR
+    scrSession1.Connect();
+    scrSession2.Connect();
+        
+    if(isSimultaneousCreateTransaction)
+        {         
+        // Create two transactions using two diffrent Scr Sessions, transactrion creation for 
+        // second scr session will fail( KErrScrWriteOperationInProgress)
+        TRAPD(err, scrSession1.CreateTransactionL());
+        if(KErrNone != err)
+            {
+            INFO_PRINTF2(_L("Failed to Create Transaction , error: %d"), err);
+            SetTestStepResult(EFail);        
+            }
+        else
+            {
+            //it will fail with KErrScrWriteOperationInProgress since two simultaneous transactions are not allowed.
+            scrSession2.CreateTransactionL();            
+            }
+        }
+    else if(isSimultaneousWriteReadAppInfoSameSession)
+        {        
+        //Create a transaction for the scr session , add the application info, then using the same scr session
+        //create a subsession to read the app Info, will successfuly read the app info(fron SCR Journal)
+        TComponentId compId = 0;        
+        CAppInfoFilter* appinfoFilter=NULL ;
+        TBool isMultiApp(EFalse);
+        
+        // Create transaction 
+        TRAPD(err, scrSession1.CreateTransactionL());
+        if(KErrNone != err)
+            {
+            INFO_PRINTF2(_L("Failed to Create Transaction , error: %d"), err);
+            SetTestStepResult(EFail);        
+            }
+        
+        //WRITE INTO THE DB(Add App Info)
+        GetBoolFromConfig(ConfigSection(), _L("IsMultiApp"), isMultiApp);
+        if (isMultiApp)
+            {
+            INFO_PRINTF1(_L("Checking if the component is already present"));
+            CGlobalComponentId *globalId = GetGlobalComponentIdLC();
+            TRAP_IGNORE(compId = iScrSession.GetComponentIdL(globalId->GlobalIdName(), globalId->SoftwareTypeName()););
+            CleanupStack::PopAndDestroy(globalId);
+            }
+        
+        // Try adding the app to a component. The add operation will fail if the component is not present.
+        if (!compId) 
+            {
+            if (GetIntFromConfig(ConfigSection(), _L("UseComponentId"), compId))
+                INFO_PRINTF2(_L("Adding a new AppRegInfo to component %d"), compId);
+            }
+        
+        // The component is not present already
+        if (!compId)   
+            {
+            INFO_PRINTF1(_L("Adding a new component."));
+            compId = AddNonLocalisableComponentL(iScrSession);
+            newComponentAdded = ETrue;
+            }
+        
+        INFO_PRINTF1(_L("Get reg info from config file."));
+        const CApplicationRegistrationData* appRegData = GetAppRegInfoFromConfigLC();
+        TRAP(err, scrSession1.AddApplicationEntryL(compId, *appRegData));  
+        if(KErrNone != err)
+           {
+           INFO_PRINTF2(_L("Failed to Create Transaction , error: %d"), err);
+           SetTestStepResult(EFail); 
+           if (newComponentAdded)
+               {
+               // We are going to delete the component with no apps
+               scrSession1.DeleteComponentL(compId);
+               }
+           }
+
+        INFO_PRINTF1(_L("Read appinfo filter from configuration"));
+        TRAP(err, ReadAppInfoFilterFromConfigL(&appinfoFilter));
+        if (KErrNotFound==err)
+            {
+            delete appinfoFilter;
+            appinfoFilter=NULL;
+            }
+        
+        //READ FROM th DB the AppRegInfo
+        RApplicationInfoView  subSession;
+        CleanupClosePushL(subSession);
+        subSession.OpenViewL(scrSession1,appinfoFilter);
+        if(appinfoFilter)
+                delete appinfoFilter;
+        
+        RPointerArray<Usif::TAppRegInfo> appRegInfoSet;               
+        subSession.GetNextAppInfoL(5, appRegInfoSet);                      
+        
+        //No Need To Commit The Transaction as we only need to check whether we can read while the transaction(Write) is Alive.
+        
+        appRegInfoSet.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(&subSession);        
+        CleanupStack::Pop();
+        delete appRegData;
+        }
+    
+    else if(isSimultaneousWriteAppInfoDiffSession)
+        {
+        //Using two scr sessions ,create a transaction for only the first scr session(because creation of transaction for the second will result into an error)
+        //, add the application info using both the scr sessions ,the second addition will result into an error( KErrScrWriteOperationInProgress) 
+        TComponentId compId = 0;             
+        TBool isMultiApp(EFalse);
+        
+        // Create transaction 
+        TRAPD(err, scrSession1.CreateTransactionL());
+        if(KErrNone != err)
+            {
+            INFO_PRINTF2(_L("Failed to Create Transaction , error: %d"), err);
+            SetTestStepResult(EFail);        
+            }
+        
+        //WRITE INTO THE DB(Add App Info)
+        GetBoolFromConfig(ConfigSection(), _L("IsMultiApp"), isMultiApp);
+        if (isMultiApp)
+            {
+            INFO_PRINTF1(_L("Checking if the component is already present"));
+            CGlobalComponentId *globalId = GetGlobalComponentIdLC();
+            TRAP_IGNORE(compId = iScrSession.GetComponentIdL(globalId->GlobalIdName(), globalId->SoftwareTypeName()););
+            CleanupStack::PopAndDestroy(globalId);
+            }
+        
+        // Try adding the app to a component. The add operation will fail if the component is not present.
+        if (!compId) 
+            {
+            if (GetIntFromConfig(ConfigSection(), _L("UseComponentId"), compId))
+                INFO_PRINTF2(_L("Adding a new AppRegInfo to component %d"), compId);
+            }
+        
+        // The component is not present already
+        if (!compId)   
+            {
+            INFO_PRINTF1(_L("Adding a new component."));
+            compId = AddNonLocalisableComponentL(iScrSession);
+            newComponentAdded = ETrue;
+            }
+        
+        INFO_PRINTF1(_L("Get reg info from config file."));
+        const CApplicationRegistrationData* appRegData = GetAppRegInfoFromConfigLC();
+        TRAP(err, scrSession1.AddApplicationEntryL(compId, *appRegData));  
+        if(KErrNone != err)
+            {
+            INFO_PRINTF2(_L("Failed to Create Transaction , error: %d"), err);
+            SetTestStepResult(EFail); 
+            if (newComponentAdded)
+               {
+               // We are going to delete the component with no apps
+               scrSession1.DeleteComponentL(compId);
+               }
+            }
+        
+        //Trying to write(app app info) to the db while scrSession1 is alredy in process of writing. 
+        //It will fail with KErrScrWriteOperationInProgress since a transaction is alredy alive.
+        scrSession2.AddApplicationEntryL(compId, *appRegData);
+        CleanupStack::Pop();
+        delete appRegData;        
+        }
+    
+    else if(isSimultaneousReadAppInfoDiffSessionWithoutTransaction)
+        {
+        //Two subsessions without a transaction simultaneously reading the db. 
+        CAppInfoFilter* appinfoFilter=NULL ;                   
+       
+        INFO_PRINTF1(_L("Read appinfo filter from configuration"));
+        TRAPD(err, ReadAppInfoFilterFromConfigL(&appinfoFilter));
+        if (KErrNotFound==err)
+           {
+           delete appinfoFilter;
+           appinfoFilter=NULL;
+           }
+        CleanupStack::PushL(appinfoFilter);
+        
+     
+        //READ the AppRegInfo for (scrSession1/subSession) and (scrSession2/subSession2)
+        RApplicationInfoView  subSession, subSession2;
+        CleanupClosePushL(subSession);
+        CleanupClosePushL(subSession2);
+        
+        subSession.OpenViewL(scrSession1,appinfoFilter);
+        subSession2.OpenViewL(scrSession2,appinfoFilter);        
+                
+        
+        RPointerArray<Usif::TAppRegInfo> appRegInfoSet, appRegInfoSet2;
+               
+        subSession.GetNextAppInfoL(5, appRegInfoSet);        
+        subSession2.GetNextAppInfoL(5, appRegInfoSet2);
+             
+        appRegInfoSet.ResetAndDestroy();
+        appRegInfoSet2.ResetAndDestroy();
+        
+        CleanupStack::PopAndDestroy(2, &subSession); 
+        CleanupStack::PopAndDestroy(appinfoFilter);
+        }    
+
+    //Close the sessions
+    scrSession1.Close();
+    scrSession2.Close();    
+    }
+    
+void CScrAddConcurrentApplicationEntryStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+// -----------CScrGetAppInfoStep-----------------
+
+CScrGetAppInfoStep::CScrGetAppInfoStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrGetAppInfoStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrGetAppInfoStep::ImplTestStepL()
+    {
+    TLanguage locale;
+    TBool result;
+    TAppRegInfo retrievedAppRegEntry;
+    TUid uid;
+    TPtrC fullName, caption, shortCaption;
+
+    _LIT(KAppInfoUid, "AppUid");
+    if (!GetUidFromConfig(ConfigSection(), KAppInfoUid, uid))
+        {
+         ERR_PRINTF2(_L("The application Uid type param %S could not be found in configuration."), &KAppInfoUid);
+         User::Leave(KErrNotFound);
+        }
+        
+    _LIT(KAppInfoApplicationFilename, "AppFile");
+    if(!GetStringFromConfig(ConfigSection(), KAppInfoApplicationFilename, fullName))
+       {
+       fullName.Set(KNull);
+       }
+ 
+    _LIT(KAppInfoCaption, "Caption");
+    if(!GetStringFromConfig(ConfigSection(), KAppInfoCaption, caption))
+       {
+       caption.Set(KNull);
+       }
+ 
+    _LIT(KAppInfoShortCaption, "ShortCaption");
+    if(!GetStringFromConfig(ConfigSection(), KAppInfoShortCaption, shortCaption))
+       {
+       shortCaption.Set(KNull);
+       }
+
+    RApplicationRegistrationInfo infoQuerySubSession;
+    CleanupClosePushL(infoQuerySubSession);
+    infoQuerySubSession.OpenL(iScrSession);    
+
+    _LIT(KLocaleParam, "Locale");
+    if(GetLocaleFromConfigL(KLocaleParam,locale))
+        {
+        result = infoQuerySubSession.GetAppInfoL(uid, retrievedAppRegEntry, locale);
+        }
+    else
+        {
+        result = infoQuerySubSession.GetAppInfoL(uid, retrievedAppRegEntry);
+        }
+    
+    if(result)
+        {
+        INFO_PRINTF3(_L("Expected Uid:0x%x Retrieved Uid:0x%x"), uid, retrievedAppRegEntry.Uid()); 
+        INFO_PRINTF3(_L("Expected filename:%S Retrieved Filename: %s"), &fullName, retrievedAppRegEntry.FullName().PtrZ());
+        INFO_PRINTF3(_L("Expected caption:%S Retrieved caption: %s"), &caption, retrievedAppRegEntry.Caption().PtrZ());
+        INFO_PRINTF3(_L("Expected short caption:%S Retrieved caption: %s"), &shortCaption, retrievedAppRegEntry.ShortCaption().PtrZ());
+        }
+    else
+        {
+        INFO_PRINTF1(_L("The given application Uid is absent in the database.")); 
+        }
+    
+    if(fullName!=retrievedAppRegEntry.FullName() ||caption!=retrievedAppRegEntry.Caption()|| shortCaption!=retrievedAppRegEntry.ShortCaption())
+        {
+        ERR_PRINTF1(_L("Mismatch in expected and retrieved values! ")); 
+        SetTestStepResult(EFail);
+        }
+    else
+        {
+        INFO_PRINTF1(_L("Expected and retrieved results match."));
+        }
+
+    CleanupStack::PopAndDestroy(&infoQuerySubSession);    
+    }
+ 
+void CScrGetAppInfoStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/componentmanagementsteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,605 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the test steps for component management APIs in the SCR 
+*
+*/
+
+
+#include "componentmanagementsteps.h"
+#include "tscrdefs.h"
+#include <scs/cleanuputils.h>
+
+using namespace Usif;
+
+
+// -----------CScrAddComponentStep-----------------
+
+CScrAddComponentStep::CScrAddComponentStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrAddComponentStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+Usif::TComponentId CScrAddComponentStep::AddLocalisableComponentL()
+	{
+	RPointerArray<CLocalizableComponentInfo> componentInfo;
+	CleanupResetAndDestroyPushL(componentInfo);
+	GetLocalisedComponentsFromConfigL(componentInfo);
+	
+	TPtrC swTypeName;
+	GetSoftwareTypeNameL(swTypeName);
+	
+	TScrComponentOperationType operationType(EScrCompInstall);
+	TInt opTypeInt(0);
+	if(GetIntFromConfig(ConfigSection(), KOperationType, opTypeInt))
+		{
+		operationType = static_cast<TScrComponentOperationType>(opTypeInt);
+		}
+		
+	TComponentId componentId;
+	TPtrC globalIdName;
+	if(GetGlobalIdNameL(globalIdName))
+		componentId = iScrSession.AddComponentL(componentInfo, swTypeName, &globalIdName,operationType);
+	else
+		componentId = iScrSession.AddComponentL(componentInfo, swTypeName,NULL,operationType);
+	
+	CleanupStack::PopAndDestroy(&componentInfo);
+	return componentId;
+	}
+
+void CScrAddComponentStep::ImplTestStepL()
+	{		
+	TBool isLocalisable(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("IsLocalisable"), isLocalisable);
+	TComponentId componentId(0);
+	
+	if (isLocalisable)
+		componentId = AddLocalisableComponentL();
+	else
+		componentId = AddNonLocalisableComponentL(iScrSession);
+	
+	TPtrC version;
+	if (GetStringFromConfig(ConfigSection(), KVersionName, version))
+		{
+		// Version param is provided. Set the version of the component.
+		iScrSession.SetComponentVersionL(componentId, version);
+		}
+			
+	AppendSharedComponentIdL(componentId);
+	}
+
+
+void CScrAddComponentStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrSetComponentPropertyStep-----------------
+
+CScrSetComponentPropertyStep::CScrSetComponentPropertyStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrSetComponentPropertyStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrSetComponentPropertyStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();
+
+	RPointerArray<CPropertyEntry> properties;
+	CleanupResetAndDestroyPushL(properties);
+	GetPropertiesFromConfigL(properties, ETrue); // ETrue means that the localizable properties are supported.
+	TInt count = properties.Count();
+	for(TInt i=0; i<count; ++i)
+		{
+		CPropertyEntry::TPropertyType propertyType = properties[i]->PropertyType();
+		switch(propertyType)
+			{
+			case CPropertyEntry::EBinaryProperty:
+				{
+				CBinaryPropertyEntry* binaryProperty = dynamic_cast<CBinaryPropertyEntry*>(properties[i]);
+				iScrSession.SetComponentPropertyL(componentId, binaryProperty->PropertyName(), binaryProperty->BinaryValue());
+				break;
+				}
+			case CPropertyEntry::ELocalizedProperty:
+				{
+				CLocalizablePropertyEntry *locProperty = static_cast<CLocalizablePropertyEntry*>(properties[i]);
+				iScrSession.SetComponentPropertyL(componentId, locProperty->PropertyName(), locProperty->StrValue(), locProperty->LocaleL());
+				break;
+				}
+			case CPropertyEntry::EIntProperty:
+				{
+				CIntPropertyEntry *intProperty = dynamic_cast<CIntPropertyEntry*>(properties[i]);
+				iScrSession.SetComponentPropertyL(componentId, intProperty->PropertyName(), intProperty->Int64Value());
+				}
+			}// switch
+		}// for
+	
+	CleanupStack::PopAndDestroy(&properties);
+	}
+
+void CScrSetComponentPropertyStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrRegisterFileStep-----------------
+
+CScrRegisterFileStep::CScrRegisterFileStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrRegisterFileStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrRegisterFileStep::ImplTestStepL()
+	{
+	RPointerArray<HBufC> fileList;
+	CleanupResetAndDestroyPushL(fileList);
+	GetFileNameListFromConfigL(fileList);
+	
+	TInt componentId = GetComponentIdL();
+	
+	TInt fileCount = fileList.Count();
+	
+	for(TInt i=0; i<fileCount; ++i)
+		{
+		// Fetch the Boolean flag which would tell SCR that the registered file needn't affect the drive list used by the component. The flag is optional with default ETrue
+		_LIT(KConsiderDrivesPrefix, "ConsiderDrives");
+		TBuf<MAX_SCR_PARAM_LENGTH> considerDrivesParamName = KConsiderDrivesPrefix();
+		GenerateIndexedAttributeNameL(considerDrivesParamName, i);
+		TBool considerFileInDriveList(ETrue);
+		(void)GetBoolFromConfig(ConfigSection(), considerDrivesParamName, considerFileInDriveList);
+		
+		iScrSession.RegisterComponentFileL(componentId, *fileList[i], considerFileInDriveList);
+		}
+	CleanupStack::PopAndDestroy(&fileList);
+	}
+
+void CScrRegisterFileStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrAddFilePropertyStep-----------------
+CScrAddFilePropertyStep::CScrAddFilePropertyStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrAddFilePropertyStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrAddFilePropertyStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();
+	
+	TPtrC fileName;
+	GetFileNameFromConfigL(fileName);	
+	
+	RPointerArray<CPropertyEntry> propertiesAdded;
+	CleanupResetAndDestroyPushL(propertiesAdded);
+	GetPropertiesFromConfigL(propertiesAdded);
+	
+	TInt count = propertiesAdded.Count();
+	for(TInt i=0; i<count; ++i)
+		{
+		CPropertyEntry::TPropertyType propertyType = propertiesAdded[i]->PropertyType();
+		switch(propertyType)
+			{
+			case CPropertyEntry::EBinaryProperty:
+				{
+				CBinaryPropertyEntry *binaryProperty = dynamic_cast<CBinaryPropertyEntry*>(propertiesAdded[i]);
+				iScrSession.SetFilePropertyL(componentId, fileName, binaryProperty->PropertyName(), binaryProperty->BinaryValue());
+				break;
+				}
+			case CPropertyEntry::EIntProperty:
+				{
+				CIntPropertyEntry *intProperty = dynamic_cast<CIntPropertyEntry*>(propertiesAdded[i]);
+				iScrSession.SetFilePropertyL(componentId, fileName, intProperty->PropertyName(), intProperty->IntValue());
+				break;
+				}
+			case CPropertyEntry::ELocalizedProperty:
+				{
+				PrintErrorL(_L("Localizable properties are not supported for files!"), KErrAbort);
+				}								
+			}// switch
+		}// for
+	
+	CleanupStack::PopAndDestroy(&propertiesAdded);
+	}
+
+void CScrAddFilePropertyStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrSetCommonPropertyStep-----------------
+CScrSetCommonPropertyStep::CScrSetCommonPropertyStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrSetCommonPropertyStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrSetCommonPropertyStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();
+	
+	TPtrC version;
+	if(!GetStringFromConfig(ConfigSection(), KVersionName, version))
+		PrintErrorL(_L("Version was not found!"), KErrNotFound);
+
+	TBool isRemovable;
+	if(!GetBoolFromConfig(ConfigSection(), KRemovableName, isRemovable))
+		PrintErrorL(_L("Removable was not found!"), KErrNotFound);
+
+	TBool isDrmProtected;
+	if(!GetBoolFromConfig(ConfigSection(), KDrmProtectedName, isDrmProtected))
+		PrintErrorL(_L("DrmProtected flag was not found!"), KErrNotFound);
+
+	TBool isHidden;
+	if(!GetBoolFromConfig(ConfigSection(), KHiddenName, isHidden))
+		PrintErrorL(_L("Hidden flag was not found!"), KErrNotFound);
+
+	TBool isKnownRevoked;
+	if(!GetBoolFromConfig(ConfigSection(), KKnownRevokedName, isKnownRevoked))
+		PrintErrorL(_L("KnownRevoked flag was not found!"), KErrNotFound);
+
+	TBool isOriginVerified;
+	if(!GetBoolFromConfig(ConfigSection(), KOriginVerifiedName, isOriginVerified))
+		PrintErrorL(_L("OriginVerified flag was not found!"), KErrNotFound);
+
+	TInt64 componentSize(0);
+	if(!Get64BitIntegerFromConfigL(KComponentSizeName(), componentSize))
+		PrintErrorL(_L("ComponentSize was not found!"), KErrNotFound);
+	
+	TLanguage locale(ELangNone);
+	if(!GetLocaleFromConfigL(locale))
+		PrintErrorL(_L("Locale was not found!"), KErrNotFound);
+	
+	TPtrC componentName;
+	GetComponentNameFromConfigL(componentName);
+
+	TPtrC vendorName;
+	GetVendorNameFromConfigL(vendorName);
+
+	StartTimer();
+    iScrSession.SetComponentVersionL(componentId, version);
+    iScrSession.SetIsComponentRemovableL(componentId, isRemovable);
+    iScrSession.SetIsComponentDrmProtectedL(componentId, isDrmProtected);
+    iScrSession.SetIsComponentHiddenL(componentId, isHidden);
+    iScrSession.SetIsComponentKnownRevokedL(componentId, isKnownRevoked);
+    iScrSession.SetIsComponentOriginVerifiedL(componentId, isOriginVerified);
+    iScrSession.SetComponentSizeL(componentId, componentSize);
+    iScrSession.SetComponentNameL(componentId, componentName, locale);
+    iScrSession.SetVendorNameL(componentId, vendorName, locale);	
+	
+	}
+
+void CScrSetCommonPropertyStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrDeleteComponentPropertyStep-----------------
+CScrDeleteComponentPropertyStep::CScrDeleteComponentPropertyStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrDeleteComponentPropertyStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrDeleteComponentPropertyStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();		
+	RPointerArray<CPropertyEntry> propertiesToBeDeleted;
+	CleanupResetAndDestroyPushL(propertiesToBeDeleted);
+	GetPropertiesFromConfigL(propertiesToBeDeleted);
+	
+	TInt propCount = propertiesToBeDeleted.Count();
+	for(TInt i=0; i<propCount; ++i)
+		{
+		iScrSession.DeleteComponentPropertyL(componentId, propertiesToBeDeleted[i]->PropertyName());
+		}
+	CleanupStack::PopAndDestroy(&propertiesToBeDeleted);
+	}
+
+void CScrDeleteComponentPropertyStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrDeleteFilePropertyStep-----------------
+CScrDeleteFilePropertyStep::CScrDeleteFilePropertyStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrDeleteFilePropertyStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrDeleteFilePropertyStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();
+
+	TPtrC propertyName;
+	if (!GetStringFromConfig(ConfigSection(), KPropertyNameParam, propertyName))
+		PrintErrorL(_L("Property was not found!"), KErrNotFound);	
+	
+	TPtrC fileName;
+	GetFileNameFromConfigL(fileName);			
+
+	iScrSession.DeleteFilePropertyL(componentId, fileName, propertyName);
+	}
+
+void CScrDeleteFilePropertyStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrUnregisterFileStep-----------------
+CScrUnregisterFileStep::CScrUnregisterFileStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrUnregisterFileStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrUnregisterFileStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();
+	
+	TPtrC fileName;
+	GetFileNameFromConfigL(fileName);			
+
+	iScrSession.UnregisterComponentFileL(componentId, fileName);
+	}
+
+void CScrUnregisterFileStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrDeleteComponentStep-----------------
+CScrDeleteComponentStep::CScrDeleteComponentStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrDeleteComponentStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrDeleteComponentStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();
+	iScrSession.DeleteComponentL(componentId);
+	}
+
+void CScrDeleteComponentStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrDeleteAllComponentsStep-----------------
+CScrDeleteAllComponentsStep::CScrDeleteAllComponentsStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrDeleteAllComponentsStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrDeleteAllComponentsStep::ImplTestStepL()
+	{
+	RArray<TInt> componentList;
+	CleanupClosePushL(componentList);
+	ReadAllSharedComponentIdsL(componentList);
+	
+	TInt componentCount = componentList.Count();
+	for(TInt i=0; i<componentCount; ++i)
+		{
+		TRAPD(err,iScrSession.DeleteComponentL(componentList[i]));
+		if(KErrNone == err)
+			{
+			INFO_PRINTF2(_L("Component Id %d has been deleted."), componentList[i]);
+			}
+		else if(KErrNotFound == err)
+			{ // Since some components might have been deleted in the previous test cases, ignore this error.
+			INFO_PRINTF2(_L("Component Id %d has already been deleted."), componentList[i]);
+			}
+		else
+			{
+			ERR_PRINTF3(_L("Component Id %d couldn't be deleted. Error Number:%d"),componentList[i],err);
+			SetTestStepResult(EFail);
+			}
+		};
+	CleanupStack::PopAndDestroy(&componentList);
+	
+	TBuf<MAX_SCR_BUFFER_LENGTH> componentIdBuf = KNullDesC();
+	WriteSharedDataL(KComponentIdName, componentIdBuf, ESetText);
+	}
+
+void CScrDeleteAllComponentsStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrInstallComponentStep-----------------
+
+CScrInstallComponentStep::CScrInstallComponentStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrInstallComponentStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrInstallComponentStep::ImplTestStepL()
+	{
+	// BEGIN transaction
+	iScrSession.CreateTransactionL();
+	
+	// Add component record with localizable names
+	RPointerArray<CLocalizableComponentInfo> localNames;
+	CleanupResetAndDestroyPushL(localNames);
+	CLocalizableComponentInfo *localName1 = CLocalizableComponentInfo::NewLC(_L("name1"), _L("vendor1"),ELangEnglish);
+	localNames.AppendL(localName1);
+	CleanupStack::Pop(localName1);
+	CLocalizableComponentInfo *localName2 = CLocalizableComponentInfo::NewLC(_L("name2"), _L("vendor2"),ELangAmerican);
+	localNames.AppendL(localName2);
+	CleanupStack::Pop(localName2);
+	TComponentId compId = iScrSession.AddComponentL(localNames, _L("plain"));
+	CleanupStack::PopAndDestroy(&localNames);
+	
+	// Set common component attributes
+	iScrSession.SetComponentVersionL(compId, _L("2.1.3"));
+	iScrSession.SetComponentSizeL(compId, 2346);
+	iScrSession.SetIsComponentRemovableL(compId, EFalse);
+	
+	// Set custom component attributes
+	TBuf<10> propName;
+	for(TInt i=0; i<27; ++i)
+		{
+		propName.Copy(_L("intprop"));
+		propName.AppendNum(i);
+		iScrSession.SetComponentPropertyL(compId, propName, i);
+		}
+	for(TInt i=0; i<6; ++i)
+		{
+		propName.Copy(_L("strprop"));
+		propName.AppendNum(i);
+		iScrSession.SetComponentPropertyL(compId, propName, propName);
+		}
+	
+	// Register files
+	TBuf<50> fileName;
+	for(TInt i=0; i<10; ++i)
+		{
+		fileName.Copy(_L("c:\\file"));
+		fileName.AppendNum(i);
+		fileName.Append(_L(".txt"));
+		iScrSession.RegisterComponentFileL(compId, fileName);
+		}
+	
+	// Set file properties
+	for(TInt i=0; i<6; ++i)
+		{
+		propName.Copy(_L("fintprop"));
+		propName.AppendNum(i);
+		iScrSession.SetFilePropertyL(compId, fileName, propName, i);
+		}
+	TBuf8<50> propValue;
+	for(TInt i=0; i<3; ++i)
+		{
+		propName.Copy(_L("fstrprop"));
+		propName.AppendNum(i);
+		propValue.Copy(_L8("propValue"));
+		propValue.AppendNum(i);
+		iScrSession.SetFilePropertyL(compId, fileName, propName, propValue);
+		}
+		
+	// Commit transaction
+	iScrSession.CommitTransactionL();
+	}
+	
+void CScrInstallComponentStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrAddComponentDependencyStep-----------------
+
+CScrAddComponentDependencyStep::CScrAddComponentDependencyStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrAddComponentDependencyStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrAddComponentDependencyStep::ImplTestStepL()
+	{		
+	CGlobalComponentId *supplierGlobalId  = GetGlobalComponentIdLC(KSupplierGlobalIdName(), KSupplierSwTypeName());
+	
+	HBufC *versionFrom = GetVersionFromConfigL(KVersionFrom);
+	if(versionFrom)
+		CleanupStack::PushL(versionFrom);
+	HBufC *versionTo = GetVersionFromConfigL(KVersionTo);
+	if(versionTo)
+		CleanupStack::PushL(versionTo);
+	CVersionedComponentId *supplierVersionedId = CVersionedComponentId::NewL(*supplierGlobalId, versionFrom, versionTo);
+	if(versionTo)
+		CleanupStack::PopAndDestroy(versionTo);
+	if(versionFrom)
+		CleanupStack::PopAndDestroy(versionFrom);
+	CleanupStack::PopAndDestroy(supplierGlobalId);
+	CleanupStack::PushL(supplierVersionedId);
+	
+	CGlobalComponentId *dependantGlobalId = GetGlobalComponentIdLC(KDependantGlobalIdName(), KDependantSwTypeName());
+	iScrSession.AddComponentDependencyL(*supplierVersionedId, *dependantGlobalId);
+	CleanupStack::PopAndDestroy(2, supplierVersionedId); // supplierVersionedId, dependantGlobalId
+	}
+
+
+void CScrAddComponentDependencyStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrDeleteComponentDependencyStep-----------------
+
+CScrDeleteComponentDependencyStep::CScrDeleteComponentDependencyStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrDeleteComponentDependencyStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrDeleteComponentDependencyStep::ImplTestStepL()
+	{		
+	CGlobalComponentId *supplierGlobalId  = GetGlobalComponentIdLC(KSupplierGlobalIdName(), KSupplierSwTypeName());
+	CGlobalComponentId *dependantGlobalId = GetGlobalComponentIdLC(KDependantGlobalIdName(), KDependantSwTypeName());
+	iScrSession.DeleteComponentDependencyL(*supplierGlobalId, *dependantGlobalId);
+	CleanupStack::PopAndDestroy(2, supplierGlobalId); // supplierGlobalId, dependantGlobalId
+	}
+
+
+void CScrDeleteComponentDependencyStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/componentquerysteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,755 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements test steps for component query APIs in the SCR
+*
+*/
+
+
+#include "componentquerysteps.h"
+#include <scs/cleanuputils.h>
+#include <usif/scr/screntries.h>
+#include "tscrdefs.h"
+
+using namespace Usif;
+
+// -----------CScrGetComponentStep-----------------
+
+CScrGetComponentStep::CScrGetComponentStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentStep::ImplTestStepL()
+	{
+	CComponentEntry *componentExpected = GetComponentEntryFromConfigLC();	
+	CComponentEntry *componentRetrieved = CComponentEntry::NewL();
+	CleanupStack::PushL(componentRetrieved);
+	
+	TLanguage locale = KUnspecifiedLocale;
+	GetLocaleFromConfigL(KComponentLocaleName, locale);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	if(!iScrSession.GetComponentL(componentExpected->ComponentId(), *componentRetrieved, locale))
+		{
+		ERR_PRINTF2(_L("Component Id %d doesn't exist!."), componentExpected->ComponentId());
+		User::Leave(KErrNotFound);
+		}
+	
+	TTime time = componentRetrieved->InstallTimeL(); // For the sake of coverage print install time
+	INFO_PRINTF2(_L("Component InstallTime is %ld."), componentRetrieved->InstallTimeL().Int64());
+	
+	if(*componentExpected != *componentRetrieved)
+		{
+		ERR_PRINTF5(_L("Returned component entry values(%S,%S) don't match with the expected ones(%S,%S)."),&componentRetrieved->Name(),&componentRetrieved->Vendor(),&componentExpected->Name(),&componentExpected->Vendor());
+		SetTestStepResult(EFail);
+		}
+	
+	CleanupStack::PopAndDestroy(2, componentExpected); // componentExpected, componentRetrieved
+	}
+
+void CScrGetComponentStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetComponentLocalizedStep-----------------
+
+CScrGetComponentLocalizedStep::CScrGetComponentLocalizedStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrGetComponentLocalizedStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrGetComponentLocalizedStep::ImplTestStepL()
+    {
+    TComponentId expectedComponentId = GetComponentIdL();
+    RPointerArray<Usif::CLocalizableComponentInfo> compLocalizedInfoArrayExpected;
+    CleanupResetAndDestroyPushL(compLocalizedInfoArrayExpected);
+    
+    GetLocalisedComponentsFromConfigL(compLocalizedInfoArrayExpected);
+    
+    RPointerArray<Usif::CLocalizableComponentInfo> compLocalizedInfoArrayRetrieved;
+    // Start timer just before invocation of SCR API
+    StartTimer();
+    CleanupResetAndDestroyPushL(compLocalizedInfoArrayRetrieved);
+    iScrSession.GetComponentLocalizedInfoL(expectedComponentId, compLocalizedInfoArrayRetrieved);
+    if(compLocalizedInfoArrayExpected.Count()!=compLocalizedInfoArrayRetrieved.Count())
+        {
+        ERR_PRINTF1(_L("Returned component entry count doesnt match the expected count")); 
+        SetTestStepResult(EFail);
+        }
+    else
+        {
+        for(TInt i=0;i<compLocalizedInfoArrayExpected.Count();i++)
+            {
+            if((compLocalizedInfoArrayExpected[i]->NameL()!=compLocalizedInfoArrayExpected[i]->NameL())||(compLocalizedInfoArrayExpected[i]->VendorL()!=compLocalizedInfoArrayExpected[i]->VendorL())||(compLocalizedInfoArrayExpected[i]->Locale()!=compLocalizedInfoArrayExpected[i]->Locale()))
+                {
+                ERR_PRINTF7(_L("Returned component entry values(%S,%S,%d) don't match with the expected ones(%S,%S,%d)."),&(compLocalizedInfoArrayRetrieved[i]->NameL()),&(compLocalizedInfoArrayRetrieved[i]->VendorL()),compLocalizedInfoArrayRetrieved[i]->Locale(),&(compLocalizedInfoArrayExpected[i]->NameL()),&(compLocalizedInfoArrayExpected[i]->VendorL()),compLocalizedInfoArrayExpected[i]->Locale());
+                SetTestStepResult(EFail);
+                }
+            }
+        }           
+        
+    CleanupStack::Pop(2,&compLocalizedInfoArrayExpected); //compLocalizedInfoArrayExpected ,compLocalizedInfoArrayRetrieved 
+    compLocalizedInfoArrayRetrieved.ResetAndDestroy();
+    compLocalizedInfoArrayExpected.ResetAndDestroy();
+    }
+    
+void CScrGetComponentLocalizedStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+
+
+// -----------CScrGetFilePropertiesStep-----------------
+
+CScrGetFilePropertiesStep::CScrGetFilePropertiesStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetFilePropertiesStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetFilePropertiesStep::ImplTestStepL()
+	{
+	TComponentId componentId = GetComponentIdL();
+	
+	TPtrC fileName;
+	GetFileNameFromConfigL(fileName);	
+	
+	RPointerArray<CPropertyEntry> expectedFileProperties;
+	CleanupResetAndDestroyPushL(expectedFileProperties);	
+	GetPropertiesFromConfigL(expectedFileProperties);	
+
+	RPointerArray<CPropertyEntry> retrievedFileProperties;
+	CleanupResetAndDestroyPushL(retrievedFileProperties);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	iScrSession.GetFilePropertiesL(componentId, fileName, retrievedFileProperties);
+	
+	if(!ComparePropertiesL(expectedFileProperties, retrievedFileProperties))
+		{
+		ERR_PRINTF1(_L("Retrieved file properties don't match with the expected ones."));
+		SetTestStepResult(EFail);	
+		}
+	CleanupStack::PopAndDestroy(2, &expectedFileProperties); // expectedFileProperties, retrievedFileProperties
+	}
+
+void CScrGetFilePropertiesStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+
+// -----------CScrGetFilePropertyStep-----------------
+
+CScrGetFilePropertyStep::CScrGetFilePropertyStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetFilePropertyStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetFilePropertyStep::ImplTestStepL()
+	{
+	TComponentId componentId = GetComponentIdL();
+	
+	CPropertyEntry *expectedProperty = GetPropertyFromConfigLC(ETrue);
+	
+	TPtrC fileName;
+	GetFileNameFromConfigL(fileName);	
+	// Start timer just before invocation of SCR API
+	StartTimer();	
+	CPropertyEntry *retrievedProperty = iScrSession.GetFilePropertyL(componentId, fileName, expectedProperty->PropertyName());
+	
+	if(!retrievedProperty)
+		{
+		ERR_PRINTF1(_L("The requested file property couldn't be found!"));
+		User::Leave(KErrNotFound);
+		}
+	CleanupStack::PushL(retrievedProperty);
+		
+	if(*retrievedProperty != *expectedProperty)
+		{
+		ERR_PRINTF3(_L("The retrieved property(%S) doesn't match with the expected one(%S)."), &retrievedProperty->PropertyName(), &expectedProperty->PropertyName());
+		SetTestStepResult(EFail);
+		}
+	CleanupStack::PopAndDestroy(2, expectedProperty); // expectedProperty, retrievedProperty
+	}
+
+void CScrGetFilePropertyStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetFileComponentsStep-----------------
+
+CScrGetFileComponentsStep::CScrGetFileComponentsStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetFileComponentsStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetFileComponentsStep::ImplTestStepL()
+	{
+	TPtrC fileName;
+	GetFileNameFromConfigL(fileName);
+
+	RArray<TComponentId> expectedComponents;
+	CleanupClosePushL(expectedComponents);
+	GetComponentIdsFromConfigL(expectedComponents);
+	
+	RArray<TComponentId> foundComponents;
+	CleanupClosePushL(foundComponents);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	iScrSession.GetComponentsL(fileName, foundComponents);
+	
+	CompareComponentIdsL(foundComponents, expectedComponents);
+	
+	CleanupStack::PopAndDestroy(2, &expectedComponents); // expectedComponents, foundComponents
+	}
+
+void CScrGetFileComponentsStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetComponentPropertyStep-----------------
+
+CScrGetComponentPropertyStep::CScrGetComponentPropertyStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentPropertyStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentPropertyStep::ImplTestStepL()
+	{
+	TComponentId componentId = GetComponentIdL();
+	
+	CPropertyEntry *expectedProperty = GetPropertyFromConfigLC(ETrue,0,ETrue);
+	CPropertyEntry *retrievedProperty(0);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	switch(expectedProperty->PropertyType())
+		{
+		case CPropertyEntry::EBinaryProperty:
+		case CPropertyEntry::EIntProperty:
+			{
+			retrievedProperty = iScrSession.GetComponentPropertyL(componentId, expectedProperty->PropertyName());
+			break;
+			}
+		case CPropertyEntry::ELocalizedProperty:
+			{
+			CLocalizablePropertyEntry *locProperty = static_cast<CLocalizablePropertyEntry*>(expectedProperty);
+			retrievedProperty = iScrSession.GetComponentPropertyL(componentId, locProperty->PropertyName(), locProperty->LocaleL());
+			break;
+			}
+		}// switch
+	
+	if(!retrievedProperty)
+		{
+		ERR_PRINTF1(_L("The requested component property couldn't be found!"));
+		User::Leave(KErrNotFound);
+		}
+	CleanupStack::PushL(retrievedProperty);
+	
+	if(*retrievedProperty != *expectedProperty)
+		{
+		ERR_PRINTF3(_L("The retrieved property(%S) doesn't match with the expected one(%S)."), &retrievedProperty->PropertyName(), &expectedProperty->PropertyName());
+		SetTestStepResult(EFail);
+		}
+	CleanupStack::PopAndDestroy(2, expectedProperty); // expectedProperty, retrievedProperty
+	}
+
+void CScrGetComponentPropertyStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+
+// -----------CScrGetComponentPropertiesStep-----------------
+
+CScrGetComponentPropertiesStep::CScrGetComponentPropertiesStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentPropertiesStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentPropertiesStep::ImplTestStepL()
+	{
+	TComponentId componentId = GetComponentIdL();
+
+	RPointerArray<CPropertyEntry> expectedProperties;
+	CleanupResetAndDestroyPushL(expectedProperties);	
+	GetPropertiesFromConfigL(expectedProperties, ETrue); // ETrue means that localizable properties are supported
+	
+	RPointerArray<CPropertyEntry> foundProperties;
+	CleanupResetAndDestroyPushL(foundProperties);
+	
+	TLanguage locale = static_cast<TLanguage>(0);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	if(GetLocaleFromConfigL(locale))
+		{
+		iScrSession.GetComponentPropertiesL(componentId, foundProperties, locale);
+		}
+	else
+		{
+		iScrSession.GetComponentPropertiesL(componentId, foundProperties);
+		}
+
+	if (!ComparePropertiesL(foundProperties, expectedProperties))
+		{
+		ERR_PRINTF1(_L("The retrieved properties are different from the expected ones."));
+		SetTestStepResult(EFail);
+		}
+	
+	CleanupStack::PopAndDestroy(2, &expectedProperties); // expectedProperties, foundProperties	
+	}
+
+void CScrGetComponentPropertiesStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetComponentIdsStep-----------------
+
+CScrGetComponentIdsStep::CScrGetComponentIdsStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentIdsStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentIdsStep::ImplTestStepL()
+	{
+	CComponentFilter *componentFilter = ReadComponentFilterFromConfigLC();
+	INFO_PRINTF1(_L("Read component filter from configuration"));
+	
+	// Get expected list of component ids from config
+	RArray<TComponentId> expectedComponentIds;
+	CleanupClosePushL(expectedComponentIds);
+	GetComponentIdsFromConfigL(expectedComponentIds);
+			
+	RArray<TComponentId> foundComponentIds;
+	CleanupClosePushL(foundComponentIds);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	iScrSession.GetComponentIdsL(foundComponentIds, componentFilter);
+		
+	CompareComponentIdsL(foundComponentIds, expectedComponentIds);
+		
+	CleanupStack::PopAndDestroy(3, componentFilter); // foundComponentIds, expectedComponentIds, componentFilter
+	}
+
+void CScrGetComponentIdsStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetComponentFilesCountStep-----------------
+
+CScrGetComponentFilesCountStep::CScrGetComponentFilesCountStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentFilesCountStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentFilesCountStep::ImplTestStepL()
+	{
+	TComponentId componentId = GetComponentIdL();
+	TInt expectedFilesCountTmp(0);
+	if (!GetIntFromConfig(ConfigSection(), _L("ExpectedFilesCount"), expectedFilesCountTmp))
+		{
+		PrintErrorL(_L("ExpectedFilesCount property was not found!"), KErrNotFound);
+		}
+	if (expectedFilesCountTmp < 0)
+		{
+		PrintErrorL(_L("ExpectedFilesCount is negative!"), KErrArgument);
+		}
+	TUint expectedFilesCount = static_cast<TUint>(expectedFilesCountTmp);
+	
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	TUint foundFilesCount = iScrSession.GetComponentFilesCountL(componentId);
+	
+	if (foundFilesCount != expectedFilesCount)
+		{
+		ERR_PRINTF4(_L("The retrieved files count is different from the expected one for component %d. Expected %d, but found %d"),
+				componentId, foundFilesCount, expectedFilesCount);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CScrGetComponentFilesCountStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+
+// -----------CScrGetComponentWithGlobalIdStep-----------------
+
+CScrGetComponentWithGlobalIdStep::CScrGetComponentWithGlobalIdStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentWithGlobalIdStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentWithGlobalIdStep::ImplTestStepL()
+	{
+	CComponentEntry *componentExpected = GetComponentEntryFromConfigLC();	
+	TLanguage locale = KUnspecifiedLocale;
+	GetLocaleFromConfigL(KComponentLocaleName, locale);
+	
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	CComponentEntry *componentRetrieved = iScrSession.GetComponentL(componentExpected->GlobalId(), componentExpected->SoftwareType());
+	if(!componentRetrieved)
+		{
+		INFO_PRINTF3(_L("Global Id (%S,%S) doesn't exist!."), &componentExpected->GlobalId(), &componentExpected->SoftwareType());
+		User::Leave(KErrNotFound);
+		}
+	CleanupStack::PushL(componentRetrieved);
+	
+	if(*componentExpected != *componentRetrieved)
+		{
+		ERR_PRINTF5(_L("Returned component entry values(%S,%S) don't match with the expected ones(%S,%S)."),&componentRetrieved->Name(),&componentRetrieved->Vendor(),&componentExpected->Name(),&componentExpected->Vendor());
+		SetTestStepResult(EFail);
+		}
+	
+	CleanupStack::PopAndDestroy(2, componentExpected); // componentExpected, componentRetrieved
+	}
+
+void CScrGetComponentWithGlobalIdStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetComponentIdStep-----------------
+
+CScrGetComponentIdStep::CScrGetComponentIdStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentIdStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentIdStep::ImplTestStepL()
+	{
+	CGlobalComponentId *globalId = GetGlobalComponentIdLC();
+	TComponentId expectedCompId = GetComponentIdL();
+	
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	TComponentId retrievedCompId = iScrSession.GetComponentIdL(globalId->GlobalIdName(), globalId->SoftwareTypeName());
+	CleanupStack::PopAndDestroy(globalId);
+	
+	if(expectedCompId != retrievedCompId)
+		{
+		ERR_PRINTF3(_L("Returned component id (%d) don't match with the expected one(%d)."), retrievedCompId, expectedCompId);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CScrGetComponentIdStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetGlobalIdListStep-----------------
+
+CScrGetGlobalIdListStep::CScrGetGlobalIdListStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetGlobalIdListStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetGlobalIdListStep::ImplTestStepL()
+	{
+	CGlobalComponentId *globalId = GetGlobalComponentIdLC();
+	
+	TBool noVerification = EFalse;
+	GetBoolFromConfig(ConfigSection(), _L("NoVerification"), noVerification);
+	RPointerArray<CVersionedComponentId> expectedVerCompIdList;
+	CleanupResetAndDestroyPushL(expectedVerCompIdList);
+	if(!noVerification)
+		{
+		GetExpectedVersionedComponentIdListL(expectedVerCompIdList);
+		}
+	
+	RPointerArray<CVersionedComponentId> retrievedVerCompIdList;
+	CleanupResetAndDestroyPushL(retrievedVerCompIdList);
+	
+	TPtrC globalIdType;
+	if (!GetStringFromConfig(ConfigSection(), KGlobalIdType, globalIdType))
+		PrintErrorL(_L("Global Id Type was not found!"), KErrNotFound);
+
+	// Start timer just before invocation of SCR API
+    StartTimer();
+	
+	if(!globalIdType.CompareF(_L("Dependant")))
+		iScrSession.GetSupplierComponentsL(*globalId, retrievedVerCompIdList);
+	else if (!globalIdType.CompareF(_L("Supplier")))
+		iScrSession.GetDependantComponentsL(*globalId, retrievedVerCompIdList);
+	else {
+		 ERR_PRINTF1(_L("The global Id type couldn't be identified."));
+		 SetTestStepResult(EFail);
+		 }
+	
+	if (!noVerification && !CompareVersionedComponentIdsL(retrievedVerCompIdList, expectedVerCompIdList))
+		{
+		ERR_PRINTF1(_L("The retrieved global Ids are different from the expected ones."));
+		SetTestStepResult(EFail);
+		}
+
+	CleanupStack::PopAndDestroy(3, globalId); // depGlobalId, expectedGlobalIdList, retrievedGlobalIdList
+	}
+
+void CScrGetGlobalIdListStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+	
+// -----------CScrValuesNegativeStep-----------------
+CScrValuesNegativeStep::CScrValuesNegativeStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrValuesNegativeStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrValuesNegativeStep::ImplTestStepL()
+	{
+	CComponentFilter* componentFilter = CComponentFilter::NewLC();
+	TDriveList driveList;
+	// Set an empty drive list
+	componentFilter->SetInstalledDrivesL(driveList);
+	RSoftwareComponentRegistryView subSession;
+	CleanupClosePushL(subSession);	
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	TRAPD(err, subSession.OpenViewL(iScrSession, componentFilter));	
+	if (err != KErrArgument)
+		{
+		ERR_PRINTF2(_L("Received incorrect error %d on missing param in filter."), err);
+		SetTestStepResult(EFail);
+		}
+	CleanupStack::PopAndDestroy(2, componentFilter); // subSession
+	}
+
+void CScrValuesNegativeStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrOom-----------------
+SCROufOfMemory::SCROufOfMemory(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	iFailRate = 0;		
+	}
+
+void SCROufOfMemory::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void SCROufOfMemory::ImplTestStepL()
+	{
+	TInt i = 5000;		
+	while(i--)
+		{    
+		iScrSession.SetServerHeapFail(++iFailRate);
+		TRAPD(err, ExecuteL());
+		if (err != KErrNone || err != KErrNoMemory)		    
+			{
+			INFO_PRINTF2(_L("Error in oom Test : %d "),err);
+			}	
+		iScrSession.ResetServerHeapFail();		
+		}
+	
+	}
+
+void SCROufOfMemory::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+void SCROufOfMemory::ApplicationRegistrationOperationsL(Usif::RSoftwareComponentRegistry& aScrSession)
+    {    
+    TComponentId compId = 0;
+    TBool newComponentAdded(EFalse);
+   
+    // Checking if have already inserted the component
+    TBool isMultiApp(EFalse);
+    GetBoolFromConfig(ConfigSection(), _L("IsMultiApp"), isMultiApp);
+    if (isMultiApp)
+        {
+        INFO_PRINTF1(_L("Checking if the component is already present"));
+        CGlobalComponentId *globalId = GetGlobalComponentIdLC();
+        TRAP_IGNORE(compId = aScrSession.GetComponentIdL(globalId->GlobalIdName(), globalId->SoftwareTypeName()););
+        CleanupStack::PopAndDestroy(globalId);
+        }
+
+    // Try adding the app to a component. The add operation will fail if the component is not present.
+    if (!compId) 
+        {
+        if (GetIntFromConfig(ConfigSection(), _L("UseComponentId"), compId))
+            INFO_PRINTF2(_L("Adding a new AppRegInfo to component %d"), compId);
+        }
+    
+    // The component is not present already
+    if (!compId)   
+        {
+        INFO_PRINTF1(_L("Adding a new component."));
+        compId = AddNonLocalisableComponentL(aScrSession);
+        newComponentAdded = ETrue;
+        }
+
+    INFO_PRINTF1(_L("Get reg info from config file."));
+    const CApplicationRegistrationData* appRegData = GetAppRegInfoFromConfigLC();
+    TRAPD(err, aScrSession.AddApplicationEntryL(compId, *appRegData));  
+    
+    if (err != KErrNone && err != KErrAlreadyExists )
+        {
+        if (newComponentAdded)
+            {
+            // We are going to delete the component with no apps
+            aScrSession.DeleteComponentL(compId);
+            }
+        User::Leave(err);
+        }
+
+    CleanupStack::PopAndDestroy();
+    
+    //Read from DB the AppRegInfo
+    CAppInfoFilter* appInfoFilter=NULL ;
+    INFO_PRINTF1(_L("Read appinfo filter from configuration"));
+    TRAP(err, ReadAppInfoFilterFromConfigL(&appInfoFilter));    
+    if (KErrNotFound==err)
+        {
+        delete appInfoFilter;
+        appInfoFilter=NULL;
+        }   
+    
+    CleanupStack::PushL(appInfoFilter);
+    RApplicationInfoView  subSession;
+    CleanupClosePushL(subSession);
+    subSession.OpenViewL(aScrSession,appInfoFilter);
+    if(appInfoFilter)
+        {        
+        delete appInfoFilter;
+        appInfoFilter = NULL;
+        }
+    
+    RPointerArray<Usif::TAppRegInfo> appRegInfoSet;   
+    do
+      {
+      subSession.GetNextAppInfoL(5, appRegInfoSet);       
+      appRegInfoSet.ResetAndDestroy();
+      }while(0 != appRegInfoSet.Count()); 
+    
+    CleanupStack::Pop(&subSession);
+    subSession.Close();
+    CleanupStack::Pop();
+        
+    // Delete the component
+    aScrSession.DeleteComponentL(compId);
+    }
+
+
+void SCROufOfMemory::ExecuteL()
+	{
+	TBool isAppInfoOomTest(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("IsAppInfoOomTest"), isAppInfoOomTest);
+	//Connect to the SCR server
+    Usif::RSoftwareComponentRegistry scr;
+    TInt err = scr.Connect();
+    
+    if (err != KErrNone)
+        {
+        INFO_PRINTF1(_L("Failed to connect to the SCR server"));
+        User::Leave(err);
+        }
+    CleanupClosePushL(scr);
+
+	INFO_PRINTF2(_L("HeapFail set for %d allocation"),iFailRate);
+
+    if(isAppInfoOomTest)
+        {
+        ApplicationRegistrationOperationsL(scr);
+        }
+    else
+        {
+        // Create an SCR view
+        RSoftwareComponentRegistryView scrView;
+        scrView.OpenViewL(scr);
+        CleanupClosePushL(scrView);
+    
+        // Iterate over the matching components
+        CComponentEntry* entry = CComponentEntry::NewLC();
+        while (scrView.NextComponentL(*entry))
+            {
+            RPointerArray<Usif::CLocalizableComponentInfo> compLocalizedInfoArray;
+            CleanupResetAndDestroyPushL(compLocalizedInfoArray);
+            scr.GetComponentLocalizedInfoL(entry->ComponentId(), compLocalizedInfoArray);
+            CleanupStack::Pop(&compLocalizedInfoArray);
+            compLocalizedInfoArray.ResetAndDestroy();
+            }
+        
+        scrView.Close();
+        CleanupStack::PopAndDestroy();
+        CleanupStack::Pop();
+        }	
+    CleanupStack::PopAndDestroy();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/deletescrdbstep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "deletescrdbstep.h"
+
+// -----------CScrDeleteDbFileStep-----------------
+
+CScrDeleteDbFileStep::CScrDeleteDbFileStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrDeleteDbFileStep::ImplTestStepPreambleL()
+	{
+	User::LeaveIfError(iScrAccessor.Connect());
+	}
+
+void CScrDeleteDbFileStep::DeleteFileL(const TDesC& aFilePath)
+	{
+	TInt err = iScrAccessor.DeleteFile(aFilePath);
+	TInt tries = 0;
+	
+	while((KErrNone != err && KErrNotFound != err && KErrPathNotFound != err) && tries++ < 60)
+		{
+		User::After(500000);
+		err = iScrAccessor.DeleteFile(aFilePath);
+		}
+	if(KErrNone != err && KErrNotFound != err && KErrPathNotFound != err)
+		{
+		ERR_PRINTF3(_L("%S file couldn't be deleted! Error=%d"), &aFilePath, err);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CScrDeleteDbFileStep::ImplTestStepL()
+	{
+	TPtrC dbFilePath;
+	if (!GetStringFromConfig(ConfigSection(), _L("DbFilePath"), dbFilePath))
+		PrintErrorL(_L("Database File Path was not found!"), KErrNotFound);
+	
+	TPtrC journalFilePath;
+	if (!GetStringFromConfig(ConfigSection(), _L("JournalFilePath"), journalFilePath))
+		PrintErrorL(_L("Journal File Path was not found!"), KErrNotFound);
+		
+	DeleteFileL(dbFilePath);
+	DeleteFileL(journalFilePath);
+	User::After(500000);
+	}
+
+void CScrDeleteDbFileStep::ImplTestStepPostambleL()
+	{
+	iScrAccessor.Close();
+	}
+
+// -----------CScrCopyDbFileStep-----------------
+
+CScrCopyDbFileStep::CScrCopyDbFileStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrCopyDbFileStep::ImplTestStepPreambleL()
+	{
+	User::LeaveIfError(iScrAccessor.Connect());
+	}
+
+
+void CScrCopyDbFileStep::ImplTestStepL()
+	{
+	TPtrC sourceFilePath;
+	if (!GetStringFromConfig(ConfigSection(), _L("SourceFilePath"), sourceFilePath))
+		PrintErrorL(_L("Source File Path was not found!"), KErrNotFound);
+	
+	TPtrC targetFilePath;
+	if (!GetStringFromConfig(ConfigSection(), _L("TargetFilePath"), targetFilePath))
+		PrintErrorL(_L("Target File Path was not found!"), KErrNotFound);
+		
+	User::LeaveIfError(iScrAccessor.CopyFile(sourceFilePath, targetFilePath));
+	}
+
+void CScrCopyDbFileStep::ImplTestStepPostambleL()
+	{
+	iScrAccessor.Close();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/installloghistorysteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,276 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "installloghistorysteps.h"
+#include <scs/cleanuputils.h>
+#include "tscrdefs.h"
+#include <usif/scr/screntries.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "screntries_internal.h"
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+
+using namespace Usif;
+
+_LIT(KScrLogFile, "!:\\private\\10285bc0\\scr.log");
+
+// -----------CScrGetLogEntriesStep-----------------
+
+CScrGetLogEntriesStep::CScrGetLogEntriesStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetLogEntriesStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetLogEntriesStep::GetLogEntriesFromConfigL(RPointerArray<CScrLogEntry>& aLogEntries)
+	{
+	TInt logCount = 0;
+	if (!GetIntFromConfig(ConfigSection(), KLogsCountParamName, logCount))
+		PrintErrorL(_L("Logs count was not found!"), KErrNotFound);
+		
+	if (logCount < 0)
+			PrintErrorL(_L("Logs count is negative!"), KErrNotFound);
+	
+	TBuf<MAX_SCR_PARAM_LENGTH> componentNameParam, swTypeNameParam, versionParam, operationTypeParam, globalIdParam;
+	
+	for(TInt index=0; index < logCount; ++index)	
+		{
+		componentNameParam = KComponentName;
+		swTypeNameParam = KSoftwareTypeName;
+		versionParam = KVersionName;
+		operationTypeParam = KOperationType;
+		globalIdParam = KGlobalIdName;
+			
+		GenerateIndexedAttributeNameL(componentNameParam, index);
+		GenerateIndexedAttributeNameL(swTypeNameParam, index);
+		GenerateIndexedAttributeNameL(versionParam, index);
+		GenerateIndexedAttributeNameL(operationTypeParam, index);
+		GenerateIndexedAttributeNameL(globalIdParam, index);
+		
+		TPtrC componentName;
+		if (!GetStringFromConfig(ConfigSection(), componentNameParam, componentName))
+			{
+			ERR_PRINTF2(_L("The component name param %S could not be found in configuration."), &componentNameParam);
+			User::Leave(KErrNotFound);
+			}
+		
+		TPtrC swTypeName;
+		if (!GetStringFromConfig(ConfigSection(), swTypeNameParam, swTypeName))
+			{
+			ERR_PRINTF2(_L("The software type name param %S could not be found in configuration."), &swTypeNameParam);
+			User::Leave(KErrNotFound);
+			}
+		
+		TPtrC version;
+		if (!GetStringFromConfig(ConfigSection(), versionParam, version))
+			{
+			ERR_PRINTF2(_L("The version param %S could not be found in configuration."), &versionParam);
+			User::Leave(KErrNotFound);
+			}
+		
+		TInt operationType;
+		if (!GetIntFromConfig(ConfigSection(), operationTypeParam, operationType))
+			{
+			ERR_PRINTF2(_L("The operation type param %S could not be found in configuration."), &operationTypeParam);
+			User::Leave(KErrNotFound);
+			}
+		
+		TPtrC globalId;
+		if (!GetStringFromConfig(ConfigSection(), globalIdParam, globalId))
+			{
+			ERR_PRINTF2(_L("The global id param %S could not be found in configuration."), &globalIdParam);
+			User::Leave(KErrNotFound);
+			}
+		
+		CScrLogEntry *logEntry = CScrLogEntry::NewLC(componentName, swTypeName, globalId, version, static_cast<TScrComponentOperationType>(operationType));
+		aLogEntries.AppendL(logEntry);
+		CleanupStack::Pop(logEntry); // Ownership is transferred
+		}
+	}
+
+TBool operator ==(CScrLogEntry& aLhsEntry, CScrLogEntry& aRhsEntry)
+	{
+	return (aLhsEntry.ComponentName() == aRhsEntry.ComponentName() && 
+			aLhsEntry.SoftwareTypeName() == aRhsEntry.SoftwareTypeName()&& 
+			aLhsEntry.ComponentVersion() == aRhsEntry.ComponentVersion()&&
+			aLhsEntry.GlobalId() == aRhsEntry.GlobalId()&&
+			aLhsEntry.OperationType() == aRhsEntry.OperationType());
+	}
+
+TBool operator !=(CScrLogEntry& aLhsEntry, CScrLogEntry& aRhsEntry)
+	{
+	return !(aLhsEntry == aRhsEntry);
+	}
+
+TBool CScrGetLogEntriesStep::CompareLogEntriesL(RPointerArray<CScrLogEntry>& aFoundLogEntries, RPointerArray<CScrLogEntry>& aExpectedLogEntries)
+	{
+	TInt foundEntriesCount = aFoundLogEntries.Count();
+	TInt expectedEntriesCount = aExpectedLogEntries.Count();
+		
+	if (foundEntriesCount != expectedEntriesCount)
+		{
+		ERR_PRINTF3(_L("The number of expected log entries %d did not match the number of provided log entries %d."), expectedEntriesCount, foundEntriesCount);
+		return EFalse; 
+		}
+		
+	for (TInt i = 0; i < foundEntriesCount; ++i)
+		{
+		if (*aFoundLogEntries[i] != *aExpectedLogEntries[i])
+			{
+            ERR_PRINTF2(_L("Log entry %d did not match."), i);
+            ERR_PRINTF2(_L("current device lang is %d"), User::Language());
+			
+			ERR_PRINTF6(_L("found values are name %S, type %S, version %S, globalid %S, optype is %d"),
+                            &(aFoundLogEntries[i]->ComponentName()),
+                            &(aFoundLogEntries[i]->SoftwareTypeName()), 
+                            &(aFoundLogEntries[i]->ComponentVersion()), 
+                            &(aFoundLogEntries[i]->GlobalId()),
+                            aFoundLogEntries[i]->OperationType());
+
+            ERR_PRINTF6(_L("expected values were name %S, type %S, version %S, globalid %S, optype is %d"),
+							&(aExpectedLogEntries[i]->ComponentName()) ,
+                            &(aExpectedLogEntries[i]->SoftwareTypeName()) , 
+                            &(aExpectedLogEntries[i]->ComponentVersion()), 
+                            &(aExpectedLogEntries[i]->GlobalId()), 
+                            aExpectedLogEntries[i]->OperationType() );
+            return EFalse;
+			}
+		}	
+	return ETrue;
+	}
+	
+void CScrGetLogEntriesStep::ImplTestStepL()
+	{
+	TBool isLogFileReadOnly = EFalse; 
+	(void)GetBoolFromConfig(ConfigSection(), _L("LogFileReadOnly"), isLogFileReadOnly); // since this is an optional param, ignore the return code.
+	if(isLogFileReadOnly)
+		{
+		RBuf fn;
+		fn.CreateL(KMaxFileName);
+		fn.CleanupClosePushL();
+		fn.Copy(KScrLogFile);
+		RFs fs;
+		User::Leave(fs.Connect());
+		CleanupClosePushL(fs);
+		fn[0] = fs.GetSystemDriveChar();
+		User::LeaveIfError(fs.SetAtt(fn, KEntryAttReadOnly, 0));
+		CleanupStack::PopAndDestroy(2, &fn); // fn, fs
+		}
+
+	RPointerArray<CScrLogEntry> expectedLogEntries;
+	CleanupResetAndDestroyPushL(expectedLogEntries);
+	GetLogEntriesFromConfigL(expectedLogEntries);
+	
+	TPtrC *ptrSwTypeName = NULL;
+	TPtrC swTypeName;
+	if (GetStringFromConfig(ConfigSection(), KSoftwareTypeName, swTypeName))
+		{
+		ptrSwTypeName = &swTypeName; 
+		}
+	
+	RPointerArray<CScrLogEntry> retrievedLogEntries;
+	CleanupResetAndDestroyPushL(retrievedLogEntries);
+	
+	iScrSession.RetrieveLogEntriesL(retrievedLogEntries, ptrSwTypeName);
+	
+	if (!CompareLogEntriesL(retrievedLogEntries, expectedLogEntries))
+		{
+		ERR_PRINTF1(_L("The retrieved log entries are different from the expected ones."));
+		SetTestStepResult(EFail);
+		}
+		
+	CleanupStack::PopAndDestroy(2, &expectedLogEntries); // expectedLogEntries, retrievedLogEntries	
+	}
+
+void CScrGetLogEntriesStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrSetLogFileReadOnlyAttrStep-----------------
+
+CScrSetLogFileReadOnlyAttrStep::CScrSetLogFileReadOnlyAttrStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrSetLogFileReadOnlyAttrStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+	
+void CScrSetLogFileReadOnlyAttrStep::ImplTestStepL()
+	{
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+				
+	RBuf fn;
+	fn.CreateL(KMaxFileName);
+	fn.CleanupClosePushL();
+	fn.Copy(KScrLogFile);
+	fn[0] = fs.GetSystemDriveChar();
+			
+	TBool isLogFileReadOnly = EFalse; 
+	if(!GetBoolFromConfig(ConfigSection(), _L("LogFileReadOnly"), isLogFileReadOnly))
+		PrintErrorL(_L("LogFileReadOnly flag was not found!"), KErrNotFound);
+	
+	if(isLogFileReadOnly)
+		User::LeaveIfError(fs.SetAtt(fn, KEntryAttReadOnly, 0));
+	else
+		User::LeaveIfError(fs.SetAtt(fn, 0, KEntryAttReadOnly));
+	
+	CleanupStack::PopAndDestroy(2, &fs); // fs, fn
+	}
+
+void CScrSetLogFileReadOnlyAttrStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrCreateLogFileStep-----------------
+
+CScrCreateLogFileStep::CScrCreateLogFileStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrCreateLogFileStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+	
+void CScrCreateLogFileStep::ImplTestStepL()
+	{
+	TInt numOfRecords;
+	if (!GetIntFromConfig(ConfigSection(), KLogsCountParamName, numOfRecords))
+		PrintErrorL(_L("The logs count param could not be found in configuration!"), KErrNotFound);
+	
+	TComponentId compId (0);
+	
+	for(TInt i=0; i<numOfRecords; ++i)
+		{
+		compId = iScrSession.AddComponentL(_L("TestComponentName"), _L("TestComponentVendor"),_L("plain"));
+		iScrSession.SetComponentVersionL(compId,_L("1.2.3"));
+		}
+	}
+
+void CScrCreateLogFileStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/pluginmanagementsteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* appmanagersteps.cpp
+*
+*/
+
+
+#include "pluginmanagementsteps.h"
+
+using namespace Usif;
+
+// -----------CScrAddSoftwareTypeStep-----------------
+
+CScrAddSoftwareTypeStep::CScrAddSoftwareTypeStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrAddSoftwareTypeStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	User::LeaveIfError(iScrAccessor.Connect());
+	}
+
+void CScrAddSoftwareTypeStep::ImplTestStepL()
+	{
+	TPtrC operationType;
+	if (!GetStringFromConfig(ConfigSection(), _L("OperationType"), operationType))
+		PrintErrorL(_L("Operation type could not be found in configuration."), KErrNotFound);
+	
+	_LIT(KNonLocalizedSwTypeName, "NonLocalized");
+	_LIT(KLocalizedSwTypeName, "Localized");
+	_LIT(KSwTypeNoMimeType, "NoMimeType");
+	_LIT(KLocalizedSwTypeDiffPluginUid, "LocalizedWithDifferentPluginUid");
+	_LIT(KLocalizedSwTypeExtraName, "LocalizedWithExtraName");
+	_LIT(KLocalizedSwTypeMissingName, "LocalizedWithMissingName");
+	_LIT(KLocalizedSwTypeExtraMime, "LocalizedExtraMime");
+	_LIT(KLocalizedSwTypeMissingMime, "LocalizedMissingMime");
+	_LIT(KMultipleSidAndLauncherExecutable, "MultipleSidAndLauncherExecutable");
+	
+	RScrAccessor::TAccessorOperationResult opResult = RScrAccessor::EOpSucessful;
+	
+	if(KNonLocalizedSwTypeName() == operationType)
+		{
+		iScrAccessor.AddSoftwareTypeL(RScrAccessor::EAddNonLocalizedSoftwareType, opResult, iTimeMeasuredExternally);
+		}
+	else if(KLocalizedSwTypeName() == operationType)
+		{
+		iScrAccessor.AddSoftwareTypeL(RScrAccessor::EAddLocalizedSoftwareType, opResult, iTimeMeasuredExternally);
+		}
+	else if(KSwTypeNoMimeType() == operationType)
+		{
+		TRAPD(err, iScrAccessor.AddSoftwareTypeL(RScrAccessor::EAddSofwtareTypeWithoutMimeTypes, opResult, iTimeMeasuredExternally));
+		if(KErrArgument != err)
+			{
+			ERR_PRINTF3(_L("The result of the function (%d) is not expected (%d)!"), err, KErrArgument);
+			SetTestStepResult(EFail);
+			}
+		}
+	else if(KLocalizedSwTypeDiffPluginUid() == operationType)
+		{
+		iScrAccessor.AddSoftwareTypeL(RScrAccessor::EAddLocalizedSoftwareTypeWithDifferentPluginUid, opResult, iTimeMeasuredExternally);
+		}
+	else if(KLocalizedSwTypeExtraName() == operationType)
+		{
+		iScrAccessor.AddSoftwareTypeL(RScrAccessor::EAddLocalizedSoftwareTypeWithExtraName, opResult, iTimeMeasuredExternally);
+		}
+	else if(KLocalizedSwTypeMissingName() == operationType)
+		{
+		iScrAccessor.AddSoftwareTypeL(RScrAccessor::EAddLocalizedSoftwareTypeWithMissingName, opResult, iTimeMeasuredExternally);
+		}
+	else if(KLocalizedSwTypeExtraMime() == operationType)
+		{
+		iScrAccessor.AddSoftwareTypeL(RScrAccessor::EAddLocalizedSoftwareTypeWithExtraMime, opResult, iTimeMeasuredExternally);
+		}
+	else if(KLocalizedSwTypeMissingMime() == operationType)
+		{
+		iScrAccessor.AddSoftwareTypeL(RScrAccessor::EAddLocalizedSoftwareTypeWithMissingMime, opResult, iTimeMeasuredExternally);
+		}
+	else if(KMultipleSidAndLauncherExecutable() == operationType)
+	    {
+	    iScrAccessor.AddSoftwareTypeL(RScrAccessor::EAddMultipleSidWithLauncherExecutable, opResult, iTimeMeasuredExternally);
+	    }
+	else
+		{
+		ERR_PRINTF2(_L("The operation type (%S) couldn't be recognised!"), &operationType);
+		SetTestStepResult(EFail);
+		}
+	
+	if(opResult != RScrAccessor::EOpSucessful)
+		{
+		SetTestStepResult(EFail);
+		switch(opResult)
+			{
+			case RScrAccessor::EOpFailSwTypeNotFound:
+				ERR_PRINTF1(_L("The newly added software type couldn't be found in SCR!"));
+				break;
+			case RScrAccessor::EOpFailUnexpectedPluginUid:
+				ERR_PRINTF1(_L("The plugin Uid of the newly added software type doesn't match the expected one!"));
+				break;
+			default:
+				ERR_PRINTF1(_L("Unknown test result received!"));
+			}
+		}
+	}
+
+void CScrAddSoftwareTypeStep::ImplTestStepPostambleL()
+	{
+	iScrAccessor.Close();
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrDeleteSoftwareTypeStep-----------------
+
+CScrDeleteSoftwareTypeStep::CScrDeleteSoftwareTypeStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrDeleteSoftwareTypeStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	User::LeaveIfError(iScrAccessor.Connect());
+	}
+
+void CScrDeleteSoftwareTypeStep::ImplTestStepL()
+	{
+	RScrAccessor::TAccessorOperationResult opResult = RScrAccessor::EOpSucessful;
+	
+	iScrAccessor.DeleteSoftwareTypeL(opResult, iTimeMeasuredExternally);
+	
+	if(opResult != RScrAccessor::EOpSucessful)
+		{
+		SetTestStepResult(EFail);
+		switch(opResult)
+			{
+			case RScrAccessor::EOpFailUnexpectedMimeTypeNum:
+				ERR_PRINTF1(_L("The number of deleted MIME types is unexpected!"));
+				break;
+			case RScrAccessor::EOpFailReturnedUnexpectedMimeType:
+				ERR_PRINTF1(_L("One of the returned deleted MIME type is unexpected!"));
+				break;
+			case RScrAccessor::EOpFailSwTypeStillExists:
+				ERR_PRINTF1(_L("The deleted sofwtare type still exists in SCR!"));
+				break;
+			default:
+				ERR_PRINTF1(_L("Unknown test result received!"));	
+			}
+		}
+	}
+
+void CScrDeleteSoftwareTypeStep::ImplTestStepPostambleL()
+	{
+	iScrAccessor.Close();
+	CScrTestStep::ImplTestStepPostambleL();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/sifsteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the test steps for SIF-oriented APIs in the SCR
+*
+*/
+
+
+#include "sifsteps.h"
+#include <scs/cleanuputils.h>
+#include "tscrdefs.h"
+
+using namespace Usif;
+
+// -----------CScrGetPluginStep-----------------
+
+CScrGetPluginStep::CScrGetPluginStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetPluginStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+
+void CScrGetPluginStep::ImplTestStepL()
+	{
+	TUid expectedPluginUid = GetPluginUidFromConfigL();
+	TUid retPluginUid = TUid::Null();
+	
+	TPtrC mimeType;
+	if(GetMimeTypeFromConfigL(mimeType))
+		{
+		retPluginUid = iScrSession.GetPluginUidL(mimeType);
+		}
+	else
+		{
+		TComponentId componentId = GetComponentIdL();
+		retPluginUid = iScrSession.GetPluginUidL(componentId);
+		}
+	
+	if(retPluginUid != expectedPluginUid)
+		{
+		ERR_PRINTF3(_L("Returned plugin Uid (%d) doesn't match with the expected one(%d)."), retPluginUid.iUid, expectedPluginUid.iUid);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CScrGetPluginStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+TUid CScrGetPluginStep::GetPluginUidFromConfigL()
+	{
+	TInt pluginUid;
+	if (!GetIntFromConfig(ConfigSection(), KPluginUidName, pluginUid))
+			PrintErrorL(_L("Plugin UID was not found!"), KErrNotFound);	
+	return TUid::Uid(pluginUid);
+	}
+
+TBool CScrGetPluginStep::GetMimeTypeFromConfigL(TPtrC& aMimeType)
+	{
+	return GetStringFromConfig(ConfigSection(), KMimeTypeName, aMimeType);
+	}
+
+// -----------CScrSetScomoStateStep-----------------
+
+CScrSetScomoStateStep::CScrSetScomoStateStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrSetScomoStateStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrSetScomoStateStep::ImplTestStepL()
+	{
+	TInt componentId = GetComponentIdL();
+	
+	TScomoState scomoState;
+	if (!GetScomoStateFromConfigL(scomoState, _L("ScomoState")))
+		PrintErrorL(_L("ScomoState attribute not found"), KErrNotFound);
+	
+	iScrSession.SetScomoStateL(componentId, scomoState);
+	}
+
+void CScrSetScomoStateStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/subsessionsteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,505 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements test steps for the subsessions interfaces in the SCR
+*
+*/
+
+
+#include "subsessionsteps.h"
+#include <scs/cleanuputils.h>
+#include "tscrdefs.h"
+
+using namespace Usif;
+
+TBool IsEqual(const CComponentEntry& aLhsEntry, const CComponentEntry& aRhsEntry)
+	{
+	return (aLhsEntry == aRhsEntry);
+	}
+
+TBool operator ==(const Usif::TAppRegInfo& aLhsEntry, const Usif::TAppRegInfo& aRhsEntry)
+    {
+    return (aLhsEntry.Uid() == aRhsEntry.Uid() && 
+            aLhsEntry.FullName() == aRhsEntry.FullName() &&  
+            aLhsEntry.Caption() == aRhsEntry.Caption() &&  
+            aLhsEntry.ShortCaption() == aRhsEntry.ShortCaption());
+    }
+TBool operator !=(const TAppRegInfo& aLhsEntry, const TAppRegInfo& aRhsEntry)
+    {
+    return !operator ==(aLhsEntry, aRhsEntry);
+    }
+
+TBool IsEqual(const TAppRegInfo& aLhsEntry, const TAppRegInfo& aRhsEntry)
+    {
+    return (aLhsEntry == aRhsEntry);
+    }
+
+
+TBool IsEqual(const HBufC& aLhs, const HBufC& aRhs)
+	{
+	return const_cast<HBufC &>(aLhs).Des() == const_cast<HBufC &>(aRhs).Des();
+	}
+
+template <class T> TBool VerifyMatchingL(const T* aObj, RPointerArray<T>& aExpectedArray)
+	{
+	TInt pos = aExpectedArray.Find(aObj, IsEqual);
+	if (pos != KErrNotFound)
+		{
+		T* foundObj = aExpectedArray[pos];
+		delete foundObj;
+		aExpectedArray.Remove(pos);
+		return ETrue;
+		}
+	return EFalse;
+	}
+
+
+// -----------CScrGetComponentStep-----------------
+
+CScrComponentRegistrySubsessionStep::CScrComponentRegistrySubsessionStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrComponentRegistrySubsessionStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrComponentRegistrySubsessionStep::GetComponentEntriesFromConfigL(RPointerArray<CComponentEntry>& aEntries)
+	{
+	TInt componentsCount(0);
+	if (!GetIntFromConfig(ConfigSection(), KComponentsCountName, componentsCount))
+		{
+		CComponentEntry *componentEntry = GetComponentEntryFromConfigLC();
+		aEntries.AppendL(componentEntry);
+		CleanupStack::Pop(componentEntry);
+		}
+	
+	for (TInt i = 0; i < componentsCount; ++i)
+		{
+		CComponentEntry *componentEntry = GetComponentEntryFromConfigLC(EFalse,i);
+		aEntries.AppendL(componentEntry);
+		CleanupStack::Pop(componentEntry);
+		}
+	}
+
+void CScrComponentRegistrySubsessionStep::VerifyNonReturnedEntriesL(const RPointerArray<CComponentEntry>& aExpectedEntries)
+	{
+	// Check if we need to verify the returned components
+	// Performance tests don't need verification.
+	TBool noVerification = EFalse;
+	GetBoolFromConfig(ConfigSection(), _L("NoVerification"), noVerification);
+	if(noVerification) return;
+
+	if (aExpectedEntries.Count() > 0)
+		{
+		TComponentId componentId = aExpectedEntries[0]->ComponentId(); 
+		const TDesC& componentName = aExpectedEntries[0]->Name();
+		ERR_PRINTF3(_L("At least one expected entry was not returned by the API - id %d, name %S"), componentId, &componentName);
+		SetTestStepResult(EFail);
+		}	
+	}
+
+void CScrComponentRegistrySubsessionStep::TestSingleModeL(const RSoftwareComponentRegistryView& aSubSession, RPointerArray<CComponentEntry>& aExpectedEntries)
+	{
+	// Check if we need to verify the returned components
+	// Performance tests don't need verification. Because the impact verification on performance results.
+	// In addition, we cannot simply verify some test cases such as retrieving all components or removable components. 
+	// Because, the perforamce test databases are populated with random data, and in the future we cannot guarantee 
+	// the values will stay same if the databases are recreated.
+	
+	TBool noVerification = EFalse;
+	GetBoolFromConfig(ConfigSection(), _L("NoVerification"), noVerification);
+
+	// Read continuously entries from the sub-session
+	while (1)
+		{
+		CComponentEntry* componentEntry = aSubSession.NextComponentL();
+		if (componentEntry == NULL)
+			break; // No more entries were found
+		CleanupStack::PushL(componentEntry);
+		
+		if(noVerification)
+			{
+			CleanupStack::PopAndDestroy(componentEntry);
+			continue;
+			}
+		// For each entry, check whether it was found in the expected array.
+		// If found, delete it from the expected array. If not, fail the test step
+		if (!VerifyMatchingL(componentEntry, aExpectedEntries))
+			{
+			ERR_PRINTF2(_L("The API returned an unexpected entry with id %d"), componentEntry->ComponentId());
+			SetTestStepResult(EFail);		
+			CleanupStack::PopAndDestroy(componentEntry);
+			return;
+			}
+				
+		CleanupStack::PopAndDestroy(componentEntry);
+		}
+			
+	// At the end, check whether there were expected entries which were not found
+	VerifyNonReturnedEntriesL(aExpectedEntries);
+	}
+
+void CScrComponentRegistrySubsessionStep::TestSetModeL(const RSoftwareComponentRegistryView& aSubSession, TInt aSetSize, RPointerArray<CComponentEntry>& aExpectedEntries)
+	{
+	// Check if we need to verify the returned components
+	// Performance tests don't need verification. See TestSingleModeL for more information.
+	TBool noVerification = EFalse;
+	GetBoolFromConfig(ConfigSection(), _L("NoVerification"), noVerification);
+
+	while (1)
+		{
+		RPointerArray<CComponentEntry> componentSet;
+		CleanupResetAndDestroyPushL(componentSet);
+		
+		aSubSession.NextComponentSetL(aSetSize, componentSet);
+		TInt returnedComponentsCount = componentSet.Count(); 
+		if (returnedComponentsCount <= 0)
+			{
+			CleanupStack::PopAndDestroy(&componentSet);
+			break;
+			}
+		
+		if(noVerification) 
+			{
+			CleanupStack::PopAndDestroy(&componentSet);
+			continue;
+			}
+				
+		for (TInt i = 0; i < returnedComponentsCount; ++i)
+			{
+			if (!VerifyMatchingL(componentSet[i], aExpectedEntries))
+				{
+				ERR_PRINTF2(_L("The API returned an unexpected entry with id %d"), componentSet[i]->ComponentId());
+				SetTestStepResult(EFail);				
+				CleanupStack::PopAndDestroy(&componentSet);
+				return;
+				}
+			}
+		
+		CleanupStack::PopAndDestroy(&componentSet);
+		}
+	
+	VerifyNonReturnedEntriesL(aExpectedEntries); 
+	}
+
+void CScrComponentRegistrySubsessionStep::ImplTestStepL()
+	{	
+	CComponentFilter* componentFilter = ReadComponentFilterFromConfigLC();
+	INFO_PRINTF1(_L("Read component filter from configuration"));
+	
+	INFO_PRINTF1(_L("Opened subsession to SCR"));
+	
+	//Get testing mode from configuration (sets or single iteration)
+	//Delegate the actual invocation and comparison according to the testing mode	
+	TInt setSize = GetSetSizeFromConfigL();
+	INFO_PRINTF2(_L("Test set size %d"), setSize);
+	
+	// Read expected results from config
+	RPointerArray<CComponentEntry> expectedComponentEntries;
+	CleanupResetAndDestroyPushL(expectedComponentEntries);
+	GetComponentEntriesFromConfigL(expectedComponentEntries);
+	StartTimer();
+	// Open the subsession
+	RSoftwareComponentRegistryView subSession;
+	CleanupClosePushL(subSession);	
+	subSession.OpenViewL(iScrSession, componentFilter);
+		
+	if (setSize == 1)
+		TestSingleModeL(subSession, expectedComponentEntries);
+	else
+		TestSetModeL(subSession, setSize, expectedComponentEntries);
+		
+	CleanupStack::PopAndDestroy(3, componentFilter); // expectedComponentEntries, subSession, componentFilter
+	}
+
+void CScrComponentRegistrySubsessionStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrFileListSubsessionStep-----------------
+
+CScrFileListSubsessionStep::CScrFileListSubsessionStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrFileListSubsessionStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrFileListSubsessionStep::VerifyNonReturnedFilesL(const RPointerArray<HBufC>& aExpectedFiles)
+	{
+	if (aExpectedFiles.Count() > 0)
+		{
+		HBufC* fileName = aExpectedFiles[0]; 
+		ERR_PRINTF2(_L("At least one expected files was not returned by the API - name %S"), fileName);
+		SetTestStepResult(EFail);
+		}	
+	}
+
+void CScrFileListSubsessionStep::ReportUnexpectedFileL(const TDesC& aUnexpectedFileName)
+	{
+	ERR_PRINTF2(_L("The API returned an unexpected file entry with name %S"), &aUnexpectedFileName);
+	SetTestStepResult(EFail);		
+	}
+
+void CScrFileListSubsessionStep::TestSingleModeL(const RSoftwareComponentRegistryFilesList& aSubSession, 
+													 RPointerArray<HBufC> &aExpectedFiles)
+	{
+	FOREVER
+		{
+		HBufC *nextFile = aSubSession.NextFileL();
+		if (!nextFile)
+			break;
+		CleanupStack::PushL(nextFile);
+		
+		if (!VerifyMatchingL(nextFile, aExpectedFiles))
+			{
+			ReportUnexpectedFileL(*nextFile);
+			CleanupStack::PopAndDestroy(nextFile);
+			return;
+			}
+		
+		CleanupStack::PopAndDestroy(nextFile);
+		}
+	
+	VerifyNonReturnedFilesL(aExpectedFiles);
+	}
+
+void CScrFileListSubsessionStep::TestSetModeL(const RSoftwareComponentRegistryFilesList& aSubSession, TInt aSetSize, 
+											 	  RPointerArray<HBufC>& aExpectedFiles)
+	{
+	FOREVER
+		{
+		RPointerArray<HBufC> foundFiles;
+		CleanupResetAndDestroyPushL(foundFiles);
+		
+		aSubSession.NextFileSetL(aSetSize, foundFiles);
+		TInt returnedFilesCount = foundFiles.Count(); 
+		if (returnedFilesCount <= 0)
+			{
+			CleanupStack::PopAndDestroy(&foundFiles);
+			break;
+			}
+		for (TInt i = 0; i < returnedFilesCount; ++i)
+			{
+			if (!VerifyMatchingL(foundFiles[i], aExpectedFiles))
+				{
+				ReportUnexpectedFileL(*foundFiles[i]);
+				CleanupStack::PopAndDestroy(&foundFiles);
+				return;
+				}
+			}
+		
+		CleanupStack::PopAndDestroy(&foundFiles);
+		}
+	VerifyNonReturnedFilesL(aExpectedFiles);
+	}
+
+
+void CScrFileListSubsessionStep::ImplTestStepL()
+	{	
+	TInt componentId = GetComponentIdL();
+	RSoftwareComponentRegistryFilesList subSession;
+	CleanupClosePushL(subSession);
+	
+	subSession.OpenListL(iScrSession, componentId);
+	
+	RPointerArray<HBufC> expectedFiles;
+	CleanupResetAndDestroyPushL(expectedFiles);
+	
+	GetFileNameListFromConfigL(expectedFiles);
+	TInt setSize = GetSetSizeFromConfigL();
+
+	if (setSize > 1)
+		TestSingleModeL(subSession, expectedFiles);
+	else
+		TestSetModeL(subSession, setSize, expectedFiles);	
+			
+	CleanupStack::PopAndDestroy(2, &subSession); //expectedEntries 
+	}
+
+void CScrFileListSubsessionStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CAppInfoView-----------------
+
+CAppInfoView::CAppInfoView(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CAppInfoView::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CAppInfoView::GetAppEntryFromConfigL(RPointerArray<Usif::TAppRegInfo>& aEntries)
+    {
+    TInt appEntriesCount(0);
+    TAppRegInfo *appRegInfo=NULL;
+    if (!GetIntFromConfig(ConfigSection(), KAppEntriesCountName, appEntriesCount))
+        {
+        appRegInfo = GetAppInfoFromConfigL(ETrue);
+        aEntries.AppendL(appRegInfo);
+        }
+    
+    for (TInt i = 0; i < appEntriesCount; ++i)
+        {
+        appRegInfo = GetAppInfoFromConfigL(EFalse,i);
+        aEntries.AppendL(appRegInfo);
+        }
+    }
+
+void CAppInfoView::VerifyNonReturnedEntriesL(const RPointerArray<Usif::TAppRegInfo>& aExpectedEntries)
+    {
+    // Check if we need to verify the returned components
+    // Performance tests don't need verification.
+    TBool noVerification = EFalse;
+    GetBoolFromConfig(ConfigSection(), _L("NoVerification"), noVerification);
+    if(noVerification) return;
+
+    if (aExpectedEntries.Count() > 0)
+        {
+        TUid appUid = aExpectedEntries[0]->Uid(); 
+        const TDesC& appName = aExpectedEntries[0]->FullName();
+        ERR_PRINTF3(_L("At least one expected entry was not returned by the API - id %d, name %S"), appUid, &appName);
+        SetTestStepResult(EFail);
+        }   
+    }
+
+void CAppInfoView::TestSessionL(TInt aNoOfEntries, const RApplicationInfoView& aSubSession, RPointerArray<Usif::TAppRegInfo>& aExpectedEntries)
+    {
+    // Check if we need to verify the returned components
+    // Performance tests don't need verification.
+    TBool isVerification = EFalse;
+    TInt noOfEntriesMatched = 0;
+    TInt totalExpectedEntriesCount = aExpectedEntries.Count();
+    GetBoolFromConfig(ConfigSection(), _L("IsVerification"), isVerification);
+    while (1)
+            {
+            RPointerArray<Usif::TAppRegInfo> appRegInfoSet;
+            aSubSession.GetNextAppInfoL(aNoOfEntries, appRegInfoSet);
+            TInt returnedAppRegInfoCount = appRegInfoSet.Count(); 
+            if (returnedAppRegInfoCount <= 0)
+                {
+                INFO_PRINTF2(_L("May be negative case... no entries found ...Entries count read is %d "),returnedAppRegInfoCount);                
+				appRegInfoSet.Close();
+                break;
+                }
+            
+            if(!isVerification) 
+                {
+                //INFO_PRINTF2(_L("Read Appuid is  %S"),appRegInfoSet[0]->iFullName );
+                INFO_PRINTF3(_L("No of entries read is %d and first appuid is %d "),returnedAppRegInfoCount,  appRegInfoSet[0]->Uid());
+               
+                    TAppRegInfo* tp=NULL;
+                    for (TInt i = 0; i<returnedAppRegInfoCount; i++ )
+                        {
+                    tp=appRegInfoSet[i];
+                    delete tp;
+                        }
+                appRegInfoSet.Close();
+				continue;
+                }
+                    
+            for (TInt i = 0; i < returnedAppRegInfoCount; ++i)
+                {
+                if (VerifyMatchingL(appRegInfoSet[i], aExpectedEntries))                    
+                    {                                          
+                    ++noOfEntriesMatched;
+                    }
+                }            
+            TAppRegInfo* tp=NULL;
+            for(TInt i = 0; i<returnedAppRegInfoCount; ++i)
+               {
+               tp=appRegInfoSet[i];
+               delete tp;
+               }
+            appRegInfoSet.Close();     
+            if(noOfEntriesMatched == totalExpectedEntriesCount)
+                break;
+            }
+        
+    VerifyNonReturnedEntriesL(aExpectedEntries); 
+    
+    }
+
+void CAppInfoView::ImplTestStepL()
+	{	
+	CAppInfoFilter* appinfoFilter=NULL ;
+
+	INFO_PRINTF1(_L("Read appinfo filter from configuration"));
+	TRAPD(err, ReadAppInfoFilterFromConfigL(&appinfoFilter));
+	if (KErrNotFound==err)
+	    {
+	    delete appinfoFilter;
+	    appinfoFilter=NULL;
+	    }
+	RPointerArray<TAppRegInfo> expectedAppRegEntries;
+    CleanupResetAndDestroyPushL(expectedAppRegEntries);
+	TInt noOfEntries(1);
+	GetIntFromConfig(ConfigSection(), _L("NoOfEntries"), noOfEntries);
+	
+	TBool isVerification = EFalse;
+	GetBoolFromConfig(ConfigSection(), _L("IsVerification"), isVerification);
+	if(isVerification) 
+	{
+        GetAppEntryFromConfigL(expectedAppRegEntries);
+        INFO_PRINTF1(_L("Read expected entries for verification "));
+	}
+    
+	INFO_PRINTF1(_L("Opened subsession to SCR"));
+    TBool callGetNextAppWithLocale=EFalse;
+    TInt appLocale;
+    if (GetIntFromConfig(ConfigSection(), _L("LocaleValue"), appLocale))
+        callGetNextAppWithLocale=ETrue;
+	RApplicationInfoView  subSession;
+	CleanupClosePushL(subSession);
+
+	if(callGetNextAppWithLocale)
+	    {
+	    subSession.OpenViewL(iScrSession,appinfoFilter, (TLanguage)appLocale);
+	    }
+	else
+	    {
+	    subSession.OpenViewL(iScrSession,appinfoFilter);
+	    }
+
+	if(appinfoFilter)
+	    delete appinfoFilter;
+
+    TRAPD(err1,TestSessionL(noOfEntries, subSession, expectedAppRegEntries));
+
+	TInt count = expectedAppRegEntries.Count();
+	TAppRegInfo* tp=NULL;
+	for (TInt i = 0; i<count; i++ )
+	    {
+	    tp=expectedAppRegEntries[i];
+	    delete tp;
+	    }
+	expectedAppRegEntries.Close();
+	CleanupStack::PopAndDestroy(2, &expectedAppRegEntries); //expectedAppRegEntries, subSession
+	if (KErrNone!=err1)
+	    User::Leave(err1);
+	}
+
+void CAppInfoView::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/transactionmanagementsteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,362 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the test steps for transaction management APIs in the SCR
+*
+*/
+
+
+#include "transactionmanagementsteps.h"
+
+using namespace Usif;
+
+
+// -----------CScrApplyTransactionStep-----------------
+
+CScrApplyTransactionStep::CScrApplyTransactionStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrApplyTransactionStep::ImplTestStepPreambleL()
+	{
+	// empty
+	}
+
+
+void CScrApplyTransactionStep::ImplTestStepL()
+	{
+	User::LeaveIfError(iScrSession.Connect());
+	iScrSession.CreateTransactionL();
+	
+	// Add a new component into SCR database
+	TComponentId componentId= AddNonLocalisableComponentL(iScrSession);
+	AppendSharedComponentIdL(componentId);
+	
+	// Register a file to the component
+	TPtrC fileName;
+	GetFileNameFromConfigL(fileName);
+	iScrSession.RegisterComponentFileL(componentId, fileName);
+	
+	// Get a property from config file and set it.
+	CPropertyEntry *property = GetPropertyFromConfigLC(ETrue);
+	if(property->PropertyType() != CPropertyEntry::EIntProperty)
+		{
+		ERR_PRINTF1(_L("The property is not an integer property which is expected!"));
+		User::Leave(KErrArgument);
+		}
+	CIntPropertyEntry *propertyInt = dynamic_cast<CIntPropertyEntry*>(property);
+	iScrSession.SetComponentPropertyL(componentId, propertyInt->PropertyName(), propertyInt->IntValue());
+	CleanupStack::PopAndDestroy(propertyInt);
+	
+	// Commit the transaction if it is marked in the configuration
+	TBool isCommitTransaction(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("CommitTransaction"), isCommitTransaction);
+	if(isCommitTransaction)
+		{
+		iScrSession.CommitTransactionL();
+		}
+	
+	// Cancel thetransaction if it is marked in the configuration
+	TBool isCancelTransaction(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("CancelTransaction"), isCancelTransaction);
+	if(isCancelTransaction)
+		{
+		iScrSession.RollbackTransactionL();
+		}
+	
+	// Close the session
+	iScrSession.Close();
+	}
+
+void CScrApplyTransactionStep::ImplTestStepPostambleL()
+	{
+	// empty
+	}
+
+
+// -----------CScrCreateTransactionStep-----------------
+
+void OpenSessionLC(RSoftwareComponentRegistry& aSession)
+	{
+	User::LeaveIfError(aSession.Connect());
+	CleanupClosePushL(aSession);
+	}
+
+void CreateTransactionL(RSoftwareComponentRegistry& aSession)
+	{
+	aSession.CreateTransactionL();
+	}
+	
+void OpenSubsessionL(RSoftwareComponentRegistry aSession, RSoftwareComponentRegistryView& aSubsession)
+	{
+	CComponentFilter *filter = CComponentFilter::NewL(); // NewL is used for the sake of coverage
+	CleanupStack::PushL(filter);
+	aSubsession.OpenViewL(aSession, filter);
+	CleanupStack::PopAndDestroy(filter);
+	}	
+
+void OpenSubsessionLC(RSoftwareComponentRegistry aSession, RSoftwareComponentRegistryView& aSubsession)
+	{
+	OpenSubsessionL(aSession, aSubsession);
+	CleanupClosePushL(aSubsession);
+	}
+
+CScrCreateTransactionStep::CScrCreateTransactionStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrCreateTransactionStep::ImplTestStepPreambleL()
+	{
+	// empty
+	}
+
+
+void CScrCreateTransactionStep::ImplTestStepL()
+	{
+	RSoftwareComponentRegistry session1;
+	RSoftwareComponentRegistry session2;
+	RSoftwareComponentRegistryView subsession;
+	RSoftwareComponentRegistryView subsession2;
+	
+	TBool isBeginTransactionBeforeSubsession(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("BeginTransactionBeforeSubsession"), isBeginTransactionBeforeSubsession);
+	if(isBeginTransactionBeforeSubsession)
+		{
+		OpenSessionLC(session1);
+		CreateTransactionL(session1);
+		OpenSessionLC(session2);
+		OpenSubsessionLC(session2, subsession);
+		CleanupStack::PopAndDestroy(3, &session1);
+		}
+	
+	TBool isOpenSubsessionInTheSameSession(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("OpenSubsessionInTheSameSession"), isOpenSubsessionInTheSameSession);
+	if(isOpenSubsessionInTheSameSession)
+		{
+		OpenSessionLC(session1);
+		CreateTransactionL(session1);
+		OpenSubsessionLC(session1, subsession);
+		CleanupStack::PopAndDestroy(2, &session1);
+		
+		// Now do the same,  but in reverse order
+		OpenSessionLC(session1);
+		OpenSubsessionLC(session1, subsession);		
+		CreateTransactionL(session1);
+		CleanupStack::PopAndDestroy(2, &session1);
+		}
+		
+	TBool isBeginTransactionAfterSubsession(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("BeginTransactionAfterSubsession"), isBeginTransactionAfterSubsession);
+	if(isBeginTransactionAfterSubsession)
+		{		
+		OpenSessionLC(session1);
+		OpenSessionLC(session2);
+		OpenSubsessionLC(session1, subsession);
+		CreateTransactionL(session2);
+		CleanupStack::PopAndDestroy(3, &session1);
+		}
+	
+	TBool isBeginTransactionInTheSameSession(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("BeginTransactionInTheSameSession"), isBeginTransactionInTheSameSession);
+	if(isBeginTransactionAfterSubsession)
+		{		
+		OpenSessionLC(session1);
+		OpenSubsessionLC(session1, subsession);
+		CreateTransactionL(session1);
+		CleanupStack::PopAndDestroy(2, &session1);
+		}
+		
+	TBool isBeginAfterAnotherBegin(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("BeginTransactionAfterAnotherBegin"), isBeginAfterAnotherBegin);
+	if(isBeginAfterAnotherBegin)
+		{
+		OpenSessionLC(session1);
+		CreateTransactionL(session1);
+		OpenSessionLC(session2);
+		CreateTransactionL(session2);
+		CleanupStack::PopAndDestroy(2, &session1);
+		}
+	
+	TBool isMultipleSubsessions(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("MultipleSubsessions"), isMultipleSubsessions);
+	if(isMultipleSubsessions)
+		{
+		OpenSessionLC(session1);
+		OpenSubsessionLC(session1, subsession);
+		OpenSessionLC(session2);
+		OpenSubsessionLC(session2, subsession2);
+		CleanupStack::PopAndDestroy(4, &session1);
+		}
+	
+	TBool isWriteAfterBegin(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("WriteAfterBeginTransaction"), isWriteAfterBegin);
+	if(isWriteAfterBegin)
+		{
+		OpenSessionLC(session1);
+		CreateTransactionL(session1);
+		OpenSessionLC(session2);
+		session2.AddComponentL(_L("test"),_L("vendor"),_L("plain"));	
+		CleanupStack::PopAndDestroy(2, &session1);
+		}
+	
+	TBool isReadAfterBegin(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("ReadAfterBeginTransaction"), isReadAfterBegin);
+	if(isReadAfterBegin)
+		{
+		OpenSessionLC(session1);
+		CreateTransactionL(session1);
+		OpenSessionLC(session2);
+		CComponentEntry *entry = CComponentEntry::NewLC();
+		session2.GetComponentL(1, *entry);	
+		CleanupStack::PopAndDestroy(3, &session1);
+		}
+		
+	TBool mutatingOperationWithSubsession(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("MutatingOperationWithSubsession"), mutatingOperationWithSubsession);
+	if(mutatingOperationWithSubsession)
+		{
+		OpenSessionLC(session1);
+		OpenSubsessionLC(session1, subsession);
+		OpenSessionLC(session2);
+		session2.AddComponentL(_L("test"),_L("vendor"),_L("plain"));
+		CleanupStack::PopAndDestroy(3, &session1); // session2, subsession
+		}	
+		
+	TBool closeSessionWithoutClosingSubsession(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("CloseSessionWithoutClosingSubsession"), closeSessionWithoutClosingSubsession);
+  	if(closeSessionWithoutClosingSubsession)
+   		{
+   		OpenSessionLC(session1);
+  		CreateTransactionL(session1);
+  		OpenSubsessionL(session1, subsession);
+  		OpenSubsessionL(session1, subsession2);
+  		CComponentEntry *entry = subsession.NextComponentL();
+  		CleanupStack::PushL(entry);
+  		CComponentEntry *entry2 = subsession2.NextComponentL();
+  		CleanupStack::PushL(entry2);		
+  		CleanupStack::PopAndDestroy(3, &session1); // entry, entry2
+		}
+	
+	
+	TBool isMultipleActiveSubsessions (EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("MultipleActiveSubsessions"), isMultipleActiveSubsessions);
+ 	if(isMultipleActiveSubsessions)
+ 	    {
+		OpenSessionLC(session1);
+ 	 	OpenSubsessionLC(session1, subsession);
+ 	 	TInt foundRecords (0);
+ 	 	CComponentEntry *entry = subsession.NextComponentL();
+ 	 	if(entry)
+			{
+			++foundRecords;
+ 	 	 	delete entry;
+ 	 	 	entry = NULL;
+ 	 	 	}
+
+		OpenSessionLC(session2);
+ 	 	CComponentFilter *filter = CComponentFilter::NewL(); // NewL is used for the sake of coverage
+ 	 	CleanupStack::PushL(filter);
+ 	 	filter->SetNameL(_L("nonexistingcomponentnamefortransactionmanagementtest"));
+ 	 	filter->SetVendorL(_L("nonexistingvendornamefortransactionmanagementtest"));
+ 	 	subsession2.OpenViewL(session2, filter);
+ 	 	CleanupStack::PopAndDestroy(filter);
+ 	 	CleanupClosePushL(subsession2);
+ 	 	
+ 	 	CComponentEntry *entry2 = subsession2.NextComponentL();
+ 	 	if(entry2)
+			{
+ 	 	 	delete entry2;
+ 	 	 	entry2 = NULL;
+ 	 	 	entry2 = subsession2.NextComponentL();
+ 	 	 	ERR_PRINTF1(_L("Subsession2 has unexpectedly retrieved a component!"));
+ 	 	 	SetTestStepResult(EFail);
+ 	 	 	}
+		CleanupStack::PopAndDestroy(2, &session2); // session2, subsession2
+
+ 	 	entry = subsession.NextComponentL();
+ 	 	while(entry)
+			{
+ 	 	 	++foundRecords;
+ 	 	 	delete entry;
+ 	 	 	entry = NULL;
+ 	 	 	entry = subsession.NextComponentL();
+ 	 	 	}
+		if(foundRecords < 2)
+			{
+ 	 	 	ERR_PRINTF1(_L("Subsession1 has unexpectedly reached the end of the view!"));
+ 	 	 	SetTestStepResult(EFail);
+ 	 	 	}
+		CleanupStack::PopAndDestroy(2, &session1);
+ 	 	}	
+	}
+
+void CScrCreateTransactionStep::ImplTestStepPostambleL()
+	{
+	// empty
+	}
+
+// -----------CScrManageAnotherTransactionStep-----------------
+
+CScrManageAnotherTransactionStep::CScrManageAnotherTransactionStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrManageAnotherTransactionStep::ImplTestStepPreambleL()
+	{
+	// empty
+	}
+
+
+void CScrManageAnotherTransactionStep::ImplTestStepL()
+	{
+	User::LeaveIfError(iScrSession.Connect());
+	iScrSession.CreateTransactionL();
+	
+	RSoftwareComponentRegistry anotherSession;
+	User::LeaveIfError(anotherSession.Connect());
+	CleanupClosePushL(anotherSession);
+	
+	// Commit the transaction if it is marked in the configuration
+	TBool isCommitTransaction(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("CommitTransaction"), isCommitTransaction);
+	if(isCommitTransaction)
+		anotherSession.CommitTransactionL();
+	
+	TBool isCancelTransaction(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("CancelTransaction"), isCancelTransaction);
+	if(isCancelTransaction)
+		anotherSession.RollbackTransactionL();
+	
+	TBool isInvokeMutatingFunction(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("InvokeMutatingFunction"), isInvokeMutatingFunction);
+	if(isInvokeMutatingFunction)
+		anotherSession.AddComponentL(_L("test"), _L("vendor"),_L("plain"));
+	
+	TBool isInvokeNonMutatingFunction(EFalse);
+	GetBoolFromConfig(ConfigSection(), _L("InvokeNonMutatingFunction"), isInvokeNonMutatingFunction);
+	if(isInvokeNonMutatingFunction)
+		{
+		RArray<TComponentId> componentIdList;
+		anotherSession.GetComponentIdsL(componentIdList);
+		componentIdList.Close();
+		}
+	
+	CleanupStack::PopAndDestroy(&anotherSession);
+	iScrSession.Close();
+	}
+
+void CScrManageAnotherTransactionStep::ImplTestStepPostambleL()
+	{
+	// empty
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/tscrserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,268 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the test server of the Software Component Registry test harness
+*
+*/
+
+
+#include "tscrserver.h" 			// TEF Test Server
+#include "tscrstep.h" 				// TEF Steps Test Code
+#include "componentmanagementsteps.h"
+#include "componentquerysteps.h"
+#include "transactionmanagementsteps.h"
+#include "subsessionsteps.h"
+#include "sifsteps.h"
+#include "appmanagersteps.h"
+#include "deletescrdbstep.h"
+#include "pluginmanagementsteps.h"
+#include "installloghistorysteps.h"
+#include "appreginfosteps.h"
+
+CScrTestServer* CScrTestServer::NewL()
+/**
+	Called inside the MainL() function to create and start the CTestServer derived server.
+	@return Instance of the test server
+ */
+	{	
+	CScrTestServer* server = new (ELeave) CScrTestServer();
+	CleanupStack::PushL(server);
+	User::LeaveIfError(server->iFs.Connect());
+	User::LeaveIfError(server->iFs.ShareProtected());
+	User::LeaveIfError(server->iFs.CreatePrivatePath(server->iFs.GetSystemDrive()));
+	server->ConstructL(KScrTestServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+	
+	
+CScrTestServer::~CScrTestServer()
+/**
+ 	Destructor.
+ */
+	{
+	iFs.Close();	
+	}
+
+
+LOCAL_C void MainL()
+	{
+	
+	CActiveScheduler *scheduler = new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(scheduler);
+
+	CScrTestServer* server = NULL;
+	
+	// Create the CTestServer derived server
+	TRAPD(err,server = CScrTestServer::NewL());
+	if(!err)
+		{
+		// Sync with the client and enter the active scheduler
+		RProcess::Rendezvous(KErrNone);
+		scheduler->Start();
+		}
+		
+	delete server;
+	delete scheduler;
+	}
+
+
+GLDEF_C TInt E32Main()
+/**
+ * @return - Standard Epoc error code on process exit
+ * Process entry point. Called by client using RProcess API
+ */
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAPD(err,MainL());
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return err;
+    }
+
+TBool CScrTestServer::IsPerformanceTestStep(const TDesC& aStepName, TPtrC& aStrippedName)
+	{
+	_LIT(KPerformanceStepKeyWord, "Performance-");
+	if (KErrNotFound == aStepName.FindF(KPerformanceStepKeyWord()))
+		{
+		aStrippedName.Set(aStepName);
+		return EFalse;
+		}
+	
+	TInt len = KPerformanceStepKeyWord().Length();
+	aStrippedName.Set(aStepName.Mid(len));
+	return ETrue;
+	}
+
+CTestStep* CScrTestServer::CreateTestStep(const TDesC& aStepName)
+/**
+	Creates a new test step.
+	@param aStepName The name of the requested test step.
+	@return A pointer to the object of the requested test step.
+ */
+	{
+	TBool performanceStep = EFalse;
+	TPtrC strippedStepName;
+	performanceStep = IsPerformanceTestStep(aStepName, strippedStepName);
+	
+	// Initialise test step object to NULL if no TEF steps are assigned
+	CTestStep* testStep = NULL;
+	
+	if (strippedStepName == KScrAddComponentStep)
+		testStep = new CScrAddComponentStep(*this);
+	else if (strippedStepName == KScrSetComponentPropertyStep)
+		testStep = new CScrSetComponentPropertyStep(*this);
+	else if (strippedStepName == KScrRegisterFileStep)
+		testStep = new CScrRegisterFileStep(*this);
+	else if (strippedStepName == KScrAddFilePropertyStep)
+		testStep = new CScrAddFilePropertyStep(*this);
+	else if (strippedStepName == KScrSetCommonPropertyStep)
+		testStep = new CScrSetCommonPropertyStep(*this);
+	else if (strippedStepName == KScrDeleteComponentPropertyStep)
+		testStep = new CScrDeleteComponentPropertyStep(*this);	
+	else if (strippedStepName == KScrDeleteFilePropertyStep)
+		testStep = new CScrDeleteFilePropertyStep(*this);	
+	else if (strippedStepName == KScrUnregisterFileStep)
+		testStep = new CScrUnregisterFileStep(*this);
+	else if (strippedStepName == KScrDeleteComponentStep)
+		testStep = new CScrDeleteComponentStep(*this);
+	else if (strippedStepName == KScrDeleteAllComponentsStep)
+		testStep = new CScrDeleteAllComponentsStep(*this);
+	else if (strippedStepName == KScrApplyTransactionStep)
+		testStep = new CScrApplyTransactionStep(*this);
+	else if (strippedStepName == KScrCreateTransactionStep)
+		testStep = new CScrCreateTransactionStep(*this);
+	else if (strippedStepName == KScrManageAnotherTransactionStep)
+		testStep = new CScrManageAnotherTransactionStep(*this);	
+	else if (strippedStepName == KScrGetComponentStep)
+		testStep = new CScrGetComponentStep(*this);
+	else if (strippedStepName == KScrGetComponentLocalizedStep)
+	        testStep = new CScrGetComponentLocalizedStep(*this);
+	else if (strippedStepName == KScrGetFilePropertiesStep)
+		testStep = new CScrGetFilePropertiesStep(*this);	
+	else if (strippedStepName == KScrGetFilePropertyStep)
+		testStep = new CScrGetFilePropertyStep(*this);	
+	else if (strippedStepName == KScrGetFileComponentsStep)
+		testStep = new CScrGetFileComponentsStep(*this);
+	else if (strippedStepName == KScrGetComponentPropertiesStep)
+		testStep = new CScrGetComponentPropertiesStep(*this);
+	else if (strippedStepName == KScrGetComponentIdsStep)
+		testStep = new CScrGetComponentIdsStep(*this);
+	else if (strippedStepName == KScrGetComponentPropertyStep)
+		testStep = new CScrGetComponentPropertyStep(*this);
+	else if (strippedStepName == KScrComponentRegistrySubsessionStep)
+		testStep = new CScrComponentRegistrySubsessionStep(*this);
+	else if (strippedStepName == KScrFileListSubsessionStep)
+		testStep = new CScrFileListSubsessionStep(*this);
+	else if (strippedStepName == KScrGetPluginStep)
+		testStep = new CScrGetPluginStep(*this);
+	else if (strippedStepName == KScrSetScomoStateStep)
+		testStep = new CScrSetScomoStateStep(*this);	
+	else if (strippedStepName == KScrIsMediaPresentStep)
+		testStep = new CScrIsMediaPresentStep(*this);		
+	else if (strippedStepName == KScrInstallComponentStep)
+		testStep = new CScrInstallComponentStep(*this);
+	else if (strippedStepName == KScrGetComponentFilesCountStep)
+		testStep = new CScrGetComponentFilesCountStep(*this);
+	else if (strippedStepName == KScrAddComponentDependencyStep)
+		testStep = new CScrAddComponentDependencyStep(*this);
+	else if (strippedStepName == KScrDeleteComponentDependencyStep)
+		testStep = new CScrDeleteComponentDependencyStep(*this);
+	else if (strippedStepName == KScrGetComponentWithGlobalIdStep)
+		testStep = new CScrGetComponentWithGlobalIdStep(*this);
+	else if (strippedStepName == KScrGetComponentIdStep)
+		testStep = new CScrGetComponentIdStep(*this);
+	else if (strippedStepName == KScrGetGlobalIdList)
+		testStep = new CScrGetGlobalIdListStep(*this);	
+	else if (strippedStepName == KScrDeleteDbFileStep)
+		testStep = new CScrDeleteDbFileStep(*this);
+	else if (strippedStepName == KScrAddSoftwareTypeStep)
+		testStep = new CScrAddSoftwareTypeStep(*this);
+	else if (strippedStepName == KScrDeleteSoftwareTypeStep)
+		testStep = new CScrDeleteSoftwareTypeStep(*this);
+	else if (strippedStepName == KScrIsComponentOrphaned)
+		testStep = new CScrIsComponentOrphanedStep(*this);
+	else if (strippedStepName == KScrCopyDbFileStep)
+		testStep = new CScrCopyDbFileStep(*this);
+	else if (strippedStepName == KScrGetLogEntriesStep)
+		testStep = new CScrGetLogEntriesStep(*this);
+	else if (strippedStepName == KScrSetLogFileReadOnlyAttrStep)
+		testStep = new CScrSetLogFileReadOnlyAttrStep(*this);
+	else if (strippedStepName == KScrCreateLogFileStep)
+		testStep = new CScrCreateLogFileStep(*this);
+	else if (strippedStepName == KScrCompareVersions)
+		testStep = new CScrCompareVersionsStep(*this);
+	else if (strippedStepName == KScrIsComponentOnReadOnlyDrive)
+		testStep = new CScrIsComponentOnReadOnlyDriveStep(*this);
+	else if (strippedStepName == KScrComponentPresence)
+		testStep = new CScrComponentPresenceStep(*this);
+  	else if (strippedStepName == KScrValuesNegativeStep)
+  		testStep = new CScrValuesNegativeStep(*this);		
+  	else if (strippedStepName == KScrOutOfMemoryStep)
+  		testStep = new SCROufOfMemory(*this);
+  	else if (strippedStepName == KScrAddApplicationEntry)
+  	    testStep = new CScrAddApplicationEntryStep(*this);
+  	else if (strippedStepName == KScrDeleteApplicationEntry)
+	  	testStep = new CScrDeleteApplicationEntriesStep(*this);
+	else if (strippedStepName == KSCRGetAppServicesUids)
+  	    testStep = new CSCRGetAppServicesUids(*this);
+	else if (strippedStepName == KSCRGetAppForDataType)
+	    testStep = new CSCRGetAppForDataType(*this);	    
+	else if (strippedStepName == KSCRGetAppForDataTypeAndService)
+	    testStep = new CSCRGetAppForDataTypeAndService(*this);	    
+	else if (strippedStepName == KSCRGetDefaultScreenNumber)
+	    testStep = new CSCRGetDefaultScreenNumber(*this);
+    else if (strippedStepName == KSCRGetNumberOfDefinedIcons)
+        testStep = new CSCRGetNumberOfDefinedIcons(*this);	    
+    else if (strippedStepName == KSCRGetApplicationLanguage)
+        testStep = new CSCRGetApplicationLanguage(*this);	
+    else if (strippedStepName == KScrGetAppOwnedFilesEntry)
+        testStep = new CScrGetAppOwnedFilesEntryStep(*this);
+    else if (strippedStepName == KScrGetAppCapabilityEntry)
+        testStep = new CScrGetAppCharacteristicsEntryStep(*this);
+    else if (strippedStepName == KScrGetAppIconEntry)
+        testStep = new CScrGetAppIconEntryStep(*this);
+    else if (strippedStepName == KScrGetAppViewIconEntry)
+        testStep = new CScrGetAppViewIconEntryStep(*this);	
+	else if (strippedStepName == KScrGetAppViewInfoStep)
+            testStep = new CScrGetAppViewsStep(*this);
+	else if (strippedStepName == KScrAppViewSubsessionStep)
+  		testStep = new CAppInfoView(*this);
+    else if (strippedStepName == KScrGetAppServiceInfoStep)
+        testStep = new CScrGetAppServiceInfoStep(*this);
+    else if (strippedStepName == KScrGetComponentIdForAppStep)
+        testStep = new CScrGetComponentIdForApp(*this);
+    else if (strippedStepName == KScrGetAppUidsForComponentStep)
+        testStep = new CScrGetAppUidsForComponent(*this);
+	else if (strippedStepName == KScrAddConcurrentApplicationEntryStep)
+        testStep = new CScrAddConcurrentApplicationEntryStep(*this);	
+    else if (strippedStepName == KScrGetAppInfoStep)
+        testStep = new CScrGetAppInfoStep(*this);
+    else if (strippedStepName == KScrComponentOnEMMC)
+           testStep = new CScrEMMCComponentStep(*this);
+    else if (strippedStepName == KScrComponentPresentForNameVendor)
+         testStep = new CScrComponentPresentForNameVendorStep(*this);
+	if(performanceStep)
+		{
+		CScrTestStep *scrTestStep = dynamic_cast<CScrTestStep*>(testStep);
+		scrTestStep->MarkAsPerformanceStep();
+		}
+	
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/tscrstep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1668 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the basic test step for the Software Component Registry test harness
+*
+*/
+
+
+#include "tscrstep.h"
+#include "tscrserver.h"
+#include "tscrdefs.h"
+#include <f32file.h>
+#include <scs/cleanuputils.h>
+#include <usif/sif/sifutils.h>
+
+using namespace Usif;
+
+
+CScrTestStep::CScrTestStep(CScrTestServer& aParent)
+// Constructor.
+	: iParent(aParent)
+	{	
+	}
+
+CScrTestStep::~CScrTestStep()
+// Destructor.
+	{
+	iScrSession.Close();
+	}
+
+void CScrTestStep:: MarkAsPerformanceStep()
+	{
+	iIsPerformanceTest = ETrue;
+	}
+
+void CScrTestStep::PrintPerformanceLog(TTime aTime)
+	{
+	TDateTime timer = aTime.DateTime();
+	INFO_PRINTF6(_L("%S,%d:%d:%d:%d"), &KPerformanceTestInfo(), timer.Hour(), timer.Minute(), timer.Second(), timer.MicroSecond());
+	}
+
+void CScrTestStep::StartTimer()
+	{
+	iStartTime.HomeTime();
+	PrintPerformanceLog(iStartTime);
+	}
+
+void CScrTestStep::StopTimerAndPrintResultL()
+	{
+	TTime endTime;
+	endTime.HomeTime();
+	PrintPerformanceLog(endTime);
+	
+	TTimeIntervalMicroSeconds duration = endTime.MicroSecondsFrom(iStartTime);
+	TInt actualDuration = I64INT(duration.Int64())/1000; // in millisecond
+	
+	if(iTimeMeasuredExternally)
+		{ // if the time is measured by the scr accessor, update the actual time with the external time.
+		actualDuration = iTimeMeasuredExternally;
+		}
+	
+	TInt maxDuration = 0;
+	if(!GetIntFromConfig(ConfigSection(), KMaxDurationName, maxDuration))
+		{
+		ERR_PRINTF2(_L("%S could not be found in configuration."), &KMaxDurationName());
+		User::Leave(KErrNotFound);
+		}
+	else
+		{
+		INFO_PRINTF3(_L("%S,%d"), &KMaxTestCaseDuration(), maxDuration);
+		INFO_PRINTF3(_L("%S,%d"), &KActualTestCaseDuration(), actualDuration);
+		}
+	
+	if(actualDuration <= maxDuration)
+		{
+		INFO_PRINTF2(_L("This test meets performance requirement (Duration=%d)."), actualDuration);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("This test does not meet performance requirement (Duration=%d)."), actualDuration);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CScrTestStep::ImplTestStepPreambleL()
+/**
+ 	From COomTestStep.
+ */
+	{
+	User::LeaveIfError(iScrSession.Connect());
+	if(iIsPerformanceTest)
+		{
+		StartTimer();
+		}
+	}
+
+void CScrTestStep::ImplTestStepL()
+/**
+	From COomTestStep.
+ */
+	{
+	// empty
+	}
+
+
+void CScrTestStep::ImplTestStepPostambleL()
+/**
+ 	From COomTestStep.
+ */
+	{
+	if(iIsPerformanceTest)
+		{
+		StopTimerAndPrintResultL();
+		}
+	}
+
+
+RScsClientBase* CScrTestStep::ClientHandle()
+/**
+ 	From COomTestStep.
+ */
+	{
+	return &iScrSession;
+	}
+
+void CScrTestStep::PrintErrorL(const TDesC& aMsg, TInt aErrNum,...)
+	{
+	VA_LIST list;
+	VA_START(list, aErrNum);
+	
+	RBuf msgBuf;
+	msgBuf.CreateL(MAX_SCR_ERROR_MESSAGE_LENGTH);
+	msgBuf.CleanupClosePushL();
+	msgBuf.AppendFormatList(aMsg, list);
+	
+	ERR_PRINTF1(msgBuf);
+	SetTestStepResult(EFail);
+
+	CleanupStack::PopAndDestroy(&msgBuf);
+	User::Leave(aErrNum);
+	}
+
+//--------------------Code for properties' comparison
+
+TBool operator ==(const TDriveList& aLhsEntry, const TDriveList& aRhsEntry)
+	{
+	// If two drives are equal, each byte of them must be zero or non-zero together. 
+	// Otherwise, the drive lists are different.
+	for(TInt driveNumber=EDriveA; driveNumber<=EDriveZ; ++driveNumber)
+		{ 
+		if((aLhsEntry[driveNumber] || aRhsEntry[driveNumber]) && !(aLhsEntry[driveNumber] && aRhsEntry[driveNumber]))
+			return EFalse;
+		}
+	return ETrue;
+	}
+
+TBool operator ==(const CComponentEntry& aLhsEntry, const CComponentEntry& aRhsEntry)
+	{
+	return (aLhsEntry.ComponentId() == aRhsEntry.ComponentId() && 
+			aLhsEntry.Name() == aRhsEntry.Name()&& 
+			aLhsEntry.Vendor() == aRhsEntry.Vendor() && 
+			aLhsEntry.SoftwareType() == aRhsEntry.SoftwareType() &&
+			aLhsEntry.GlobalId() == aRhsEntry.GlobalId() &&
+			aLhsEntry.IsRemovable() == aRhsEntry.IsRemovable() && 
+			aLhsEntry.IsDrmProtected() == aRhsEntry.IsDrmProtected() && 
+			aLhsEntry.IsHidden() == aRhsEntry.IsHidden() && 
+			aLhsEntry.IsKnownRevoked() == aRhsEntry.IsKnownRevoked() && 
+			aLhsEntry.IsOriginVerified() == aRhsEntry.IsOriginVerified() && 
+			aLhsEntry.ComponentSize() == aRhsEntry.ComponentSize() &&
+			aLhsEntry.ScomoState() == aRhsEntry.ScomoState() && 
+			aLhsEntry.InstalledDrives() == aRhsEntry.InstalledDrives() && 
+			aLhsEntry.Version() == aRhsEntry.Version());
+	}
+
+TBool operator !=(const CComponentEntry& aLhsEntry, const CComponentEntry& aRhsEntry)
+	{
+	return !operator ==(aLhsEntry, aRhsEntry);
+	}
+
+TBool operator ==(CLocalizablePropertyEntry& lhsEntry, CLocalizablePropertyEntry& rhsEntry)
+	{
+	return lhsEntry.StrValue() == rhsEntry.StrValue();
+	}
+
+TBool operator ==(CBinaryPropertyEntry& lhsEntry, CBinaryPropertyEntry& rhsEntry)
+	{
+	return lhsEntry.BinaryValue() == rhsEntry.BinaryValue();
+	}
+
+TBool operator ==(CIntPropertyEntry& lhsEntry, CIntPropertyEntry& rhsEntry)
+	{
+	return lhsEntry.Int64Value() == rhsEntry.Int64Value();
+	}
+
+template <class T> TBool CompareProperty(CPropertyEntry& lhsEntry, CPropertyEntry& rhsEntry)
+	{
+	// Cannot use reference dynamic_cast - Symbian does not support std::bad_cast or any other exception	
+	T& lhsSubclassEntry = static_cast<T &>(lhsEntry);
+	T& rhsSubclassEntry = static_cast<T &>(rhsEntry);
+	return (lhsSubclassEntry == rhsSubclassEntry);	
+	}
+
+TBool operator ==(CPropertyEntry& lhsEntry, CPropertyEntry& rhsEntry)
+	{
+	CPropertyEntry::TPropertyType lhsPropertyType = lhsEntry.PropertyType();
+	CPropertyEntry::TPropertyType rhsPropertyType = rhsEntry.PropertyType();
+	if (lhsPropertyType != rhsPropertyType)
+		return EFalse;
+	
+	switch (rhsPropertyType)
+		{
+		case CPropertyEntry::EBinaryProperty:
+			{
+			return CompareProperty<CBinaryPropertyEntry>(lhsEntry, rhsEntry);
+			}
+		case CPropertyEntry::ELocalizedProperty:
+			{
+			return CompareProperty<CLocalizablePropertyEntry>(lhsEntry, rhsEntry);
+			}			
+		case CPropertyEntry::EIntProperty:
+			{
+			return CompareProperty<CIntPropertyEntry>(lhsEntry, rhsEntry);
+			}
+		default:
+			ASSERT(0);
+		}
+	ASSERT(0);
+	return ETrue; // Should not reach here
+	}
+
+TBool operator !=(CPropertyEntry& lhsEntry, CPropertyEntry& rhsEntry)
+	{
+	return !operator ==(lhsEntry, rhsEntry);
+	}
+
+
+TBool CScrTestStep::ComparePropertiesL(RPointerArray<CPropertyEntry>& aFoundProperties, RPointerArray<CPropertyEntry>& aExpectedProperties)
+	{
+	TInt foundPropertiesCount = aFoundProperties.Count();
+	
+	if (aExpectedProperties.Count() != foundPropertiesCount)
+		{
+		ERR_PRINTF3(_L("The number of expected properties %d did not match the number of found properties %d."), aExpectedProperties.Count(), foundPropertiesCount);
+		return EFalse; 
+		}
+	
+	for (TInt i = 0; i < foundPropertiesCount; ++i)
+		{
+		if (*aFoundProperties[i] != *aExpectedProperties[i])
+			{
+			ERR_PRINTF2(_L("Property %d did not match."), i);
+			return EFalse;
+			}
+		}	
+	return ETrue;
+	}
+
+TBool operator ==(const CGlobalComponentId& lhsEntry, const CGlobalComponentId& rhsEntry)
+	{
+	return (lhsEntry.GlobalIdName() == rhsEntry.GlobalIdName()) && 
+		   (lhsEntry.SoftwareTypeName() == rhsEntry.SoftwareTypeName());
+	}
+
+TBool operator !=(const CGlobalComponentId& lhsEntry, const CGlobalComponentId& rhsEntry)
+	{
+	return !operator==(lhsEntry,rhsEntry);
+	}
+
+TBool operator ==(const CVersionedComponentId& lhsEntry, const CVersionedComponentId& rhsEntry)
+	{
+	return (lhsEntry.GlobalId() == rhsEntry.GlobalId()) &&
+		   ((lhsEntry.VersionFrom()?*lhsEntry.VersionFrom():KNullDesC()) == (rhsEntry.VersionFrom()?*rhsEntry.VersionFrom():KNullDesC())) &&
+		   ((lhsEntry.VersionTo()?*lhsEntry.VersionTo():KNullDesC()) == (rhsEntry.VersionTo()?*rhsEntry.VersionTo():KNullDesC()));
+	}
+
+TBool operator !=(CVersionedComponentId& lhsEntry, CVersionedComponentId& rhsEntry)
+	{
+	return !operator==(lhsEntry,rhsEntry);
+	}
+
+TBool CScrTestStep::CompareVersionedComponentIdsL(RPointerArray<CVersionedComponentId>& aFoundVerCompIdList, RPointerArray<CVersionedComponentId>& aExpectedVerCompIdList)
+	{
+	TInt foundVerCompIdsCount = aFoundVerCompIdList.Count();
+	TInt expectedVerCompIdsCount = aExpectedVerCompIdList.Count();
+	
+	if (foundVerCompIdsCount != expectedVerCompIdsCount)
+		{
+		ERR_PRINTF3(_L("The number of expected versioned component Ids %d did not match the number of found ones %d."), expectedVerCompIdsCount, foundVerCompIdsCount);
+		return EFalse; 
+		}
+	
+	for (TInt i = 0; i < foundVerCompIdsCount; ++i)
+		{
+		if (*aFoundVerCompIdList[i] != *aExpectedVerCompIdList[i])
+			{
+			ERR_PRINTF2(_L("Versioned Component Id %d did not match."), i);
+			return EFalse;
+			}
+		}	
+	
+	return ETrue;
+	}
+
+void CScrTestStep::CompareComponentIdsL(RArray<TComponentId>& aFoundComponents, RArray<TComponentId>& aExpectedComponents)
+	{
+	TInt foundComponentsCount = aFoundComponents.Count();
+	if (foundComponentsCount != aExpectedComponents.Count())
+		{
+		ERR_PRINTF3(_L("The number of expected components %d did not match the number of found components %d."), aExpectedComponents.Count(), foundComponentsCount);
+		SetTestStepResult(EFail);
+		return;			
+		}
+
+	aFoundComponents.Sort();
+	aExpectedComponents.Sort();	
+	for (TInt i = 0; i < foundComponentsCount; ++i)
+		{
+		if (aFoundComponents[i] < aExpectedComponents[i])
+			{
+			ERR_PRINTF2(_L("Component %d was not expected in the test."), aFoundComponents[i]);
+			SetTestStepResult(EFail);
+			break;
+			}
+		else if (aExpectedComponents[i] < aFoundComponents[i])
+			{
+			ERR_PRINTF2(_L("Component %d was expected, but not found."), aExpectedComponents[i]);
+			SetTestStepResult(EFail);
+			break;			
+			}
+		}	
+	}
+
+
+// Helper functions for getting commong attributes from configuration
+
+void CScrTestStep::GetSoftwareTypeNameL(TPtrC& aSwTypeName)
+	{
+	if (!GetStringFromConfig(ConfigSection(), KSoftwareTypeName, aSwTypeName))
+		PrintErrorL(_L("Software Type was not found!"), KErrNotFound);
+	}
+
+TBool CScrTestStep::GetGlobalIdNameL(TPtrC& aGlobalIdName)
+	{
+	if (!GetStringFromConfig(ConfigSection(), KGlobalIdName, aGlobalIdName))
+		return EFalse;
+	return ETrue;
+	}
+
+Usif::CGlobalComponentId* CScrTestStep::GetGlobalComponentIdLC()
+	{
+	TPtrC globalIdName;
+	if (!GetGlobalIdNameL(globalIdName))
+		PrintErrorL(_L("Global Id Name was not found!"), KErrNotFound);
+		
+	TPtrC swTypeName;
+	GetSoftwareTypeNameL(swTypeName);
+		
+	return CGlobalComponentId::NewLC(globalIdName, swTypeName);
+	}
+
+Usif::CGlobalComponentId* CScrTestStep::GetGlobalComponentIdLC(const TDesC& aGlobalIdName, const TDesC& aSwTypeName)
+	{
+	TPtrC globalIdName;
+	if (!GetStringFromConfig(ConfigSection(), aGlobalIdName, globalIdName))
+		PrintErrorL(_L("Global Id Name was not found!"), KErrNotFound);
+	
+	TPtrC swTypeName;
+	if (!GetStringFromConfig(ConfigSection(), aSwTypeName, swTypeName))
+		PrintErrorL(_L("Software Type Name was not found!"), KErrNotFound);
+	
+	return CGlobalComponentId::NewLC(globalIdName, swTypeName);
+	}
+
+HBufC* CScrTestStep::GetVersionFromConfigL(const TDesC& aVersionName)
+	{
+	TPtrC version(KNullDesC());
+	if(!GetStringFromConfig(ConfigSection(), aVersionName, version))
+		return NULL;
+	return version.AllocL();
+	}
+
+void CScrTestStep::GetExpectedVersionedComponentIdListL(RPointerArray<CVersionedComponentId>& aVerCompIdList)
+	{
+	TInt globalIdCount(0);
+	if(!GetIntFromConfig(ConfigSection(), KGlobalIdCount, globalIdCount))
+			PrintErrorL(_L("Global Id count was not found!"), KErrNotFound);
+			
+	TBuf<MAX_SCR_PARAM_LENGTH> paramGlobalIdName, paramSwTypeName, paramVersionFrom, paramVersionTo;
+	
+	for(TInt i=0; i<globalIdCount; ++i)
+		{
+		paramGlobalIdName = KGlobalIdName;	
+		paramSwTypeName = KSoftwareTypeName;
+		paramVersionFrom = KVersionFrom;
+		paramVersionTo = KVersionTo;
+		
+		GenerateIndexedAttributeNameL(paramGlobalIdName, i);
+		GenerateIndexedAttributeNameL(paramSwTypeName, i);
+		GenerateIndexedAttributeNameL(paramVersionFrom, i);
+		GenerateIndexedAttributeNameL(paramVersionTo, i);
+		
+		TPtrC globalIdName;
+		if (!GetStringFromConfig(ConfigSection(), paramGlobalIdName, globalIdName))
+			{
+			ERR_PRINTF2(_L("The %S param could not be found in configuration."), &paramGlobalIdName);
+			User::Leave(KErrNotFound);
+			}
+		
+		TPtrC swTypeName;
+		if (!GetStringFromConfig(ConfigSection(), paramSwTypeName, swTypeName))
+			{
+			ERR_PRINTF2(_L("The %S param could not be found in configuration."), &paramSwTypeName);
+			User::Leave(KErrNotFound);
+			}
+		
+		HBufC *versionFrom = GetVersionFromConfigL(paramVersionFrom);
+		if(versionFrom)
+			CleanupStack::PushL(versionFrom);
+		HBufC *versionTo = GetVersionFromConfigL(paramVersionTo);
+		if(versionTo)
+			CleanupStack::PushL(versionTo);
+				
+		CGlobalComponentId *globalId = CGlobalComponentId::NewLC(globalIdName, swTypeName);
+		CVersionedComponentId *verCompId = CVersionedComponentId::NewLC(*globalId, versionFrom, versionTo);
+		aVerCompIdList.AppendL(verCompId);
+		CleanupStack::Pop(verCompId); // owned by the array
+		CleanupStack::PopAndDestroy(globalId);
+		if(versionTo)
+			CleanupStack::PopAndDestroy(versionTo);
+		if(versionFrom)
+			CleanupStack::PopAndDestroy(versionFrom);
+		}
+	}
+
+void CScrTestStep::AppendSharedComponentIdL(Usif::TComponentId aComponentId)
+	{
+	TBuf<MAX_SCR_BUFFER_LENGTH> componentIdBuf;
+	ReadSharedDataL(KComponentIdName, componentIdBuf);
+	componentIdBuf.AppendNum(aComponentId);
+	componentIdBuf.Append(KComponentIdDelimeter);
+	WriteSharedDataL(KComponentIdName, componentIdBuf, ESetText);
+	}
+
+void CScrTestStep::ReadAllSharedComponentIdsL(RArray<TInt>& aComponentList)
+	{
+	TBuf<MAX_SCR_BUFFER_LENGTH> componentIdBuf;
+	ReadSharedDataL(KComponentIdName, componentIdBuf);
+		
+	TLex parser(componentIdBuf);
+	TChar currentChar;
+	
+	parser.Mark();
+	while(!parser.Eos())
+		{
+		currentChar = parser.Get();
+		if(KComponentIdDelimeter == currentChar)
+			{
+			TPtrC token = parser.MarkedToken();
+			TLex tokenLex(token);
+			TInt componentId;
+			tokenLex.Val(componentId);
+			aComponentList.AppendL(componentId);
+			parser.Mark();
+			}
+		}
+	}
+
+TInt CScrTestStep::ReadSharedComponentIdL(TInt aOffset)
+	{
+	RArray<TInt> componentList;
+	CleanupClosePushL(componentList);
+	ReadAllSharedComponentIdsL(componentList);
+	
+	TInt maxListIndex = componentList.Count() - 1;
+	if(aOffset<0 || aOffset>maxListIndex)
+		PrintErrorL(_L("Component Id offset is not valid!"), KErrArgument);
+	
+	TInt componentId = componentList[maxListIndex - aOffset];
+	CleanupStack::PopAndDestroy(&componentList);
+	return componentId;
+	}
+
+TBool CScrTestStep::GetLocaleFromConfigL(const TDesC& aParamName, TLanguage &aLocale)
+	{
+	TInt localeParam;
+	if (!GetIntFromConfig(ConfigSection(), aParamName, localeParam))
+		return EFalse;
+	aLocale = static_cast<TLanguage>(localeParam);
+	return ETrue;
+	}
+
+TBool CScrTestStep::GetLocaleFromConfigL(TLanguage &aLocale)
+	{
+	return GetLocaleFromConfigL(KPropertyLocaleParam, aLocale);
+	}
+
+TInt CScrTestStep::GetComponentIdL()
+	{
+	TInt componentId(0);
+	if(GetIntFromConfig(ConfigSection(), KComponentIdName, componentId))
+		return componentId;
+	
+	TInt componentIdOffset;
+	if (!GetIntFromConfig(ConfigSection(), KComponentIdOffsetName, componentIdOffset))
+		PrintErrorL(_L("ComponentId Offset was not found!"), KErrNotFound);
+	
+	componentId = ReadSharedComponentIdL(componentIdOffset);
+	INFO_PRINTF2(_L("Component Id %d"), componentId);
+	return componentId;
+	}
+
+void CScrTestStep::GetFileNameFromConfigL(TPtrC& aFileName)
+	{
+	if (!GetStringFromConfig(ConfigSection(), KFileName, aFileName))
+		PrintErrorL(_L("FileName was not found!"), KErrNotFound);
+	}
+
+void CScrTestStep::GetFileNameListFromConfigL(RPointerArray<HBufC>& aFileList)
+	{
+	TInt fileCount(0);
+	if(!GetIntFromConfig(ConfigSection(), KFileCount, fileCount))
+		PrintErrorL(_L("File count was not found!"), KErrNotFound);
+		
+	TBuf<MAX_SCR_PARAM_LENGTH> paramName;
+	for(TInt i=0; i<fileCount; ++i)
+		{
+		paramName = KFileName;	
+		GenerateIndexedAttributeNameL(paramName, i);
+		TPtrC fileName;
+		if (!GetStringFromConfig(ConfigSection(), paramName, fileName))
+			{
+			ERR_PRINTF2(_L("The File Name param %S could not be found in configuration."), &paramName);
+			User::Leave(KErrNotFound);
+			}
+		HBufC* fileNameBuf = fileName.AllocLC();
+		aFileList.AppendL(fileNameBuf);
+		CleanupStack::Pop(fileNameBuf);
+		}
+	}
+
+void CScrTestStep::GetComponentNameFromConfigL(TPtrC& aComponentName)
+	{
+	if(!GetStringFromConfig(ConfigSection(), KComponentName, aComponentName))
+		PrintErrorL(_L("Component name was not found!"), KErrNotFound);
+	}
+
+void CScrTestStep::GetVendorNameFromConfigL(TPtrC& aVendorName)
+	{
+	if(!GetStringFromConfig(ConfigSection(), KVendorName, aVendorName))
+		PrintErrorL(_L("Vendor name was not found!"), KErrNotFound);
+	}
+
+CComponentEntry* CScrTestStep::GetComponentEntryFromConfigLC(TBool aIsSingle, TInt aIndex)
+	{
+	// First, we need to generate the property name
+	TBuf<MAX_SCR_PARAM_LENGTH> componentIdParam, componentIdOffsetParam, componentNameParam, componentVendorParam, softwareTypeNameParam;
+	TBuf<MAX_SCR_PARAM_LENGTH> globalIdParam, installedDrivesParam, isRemovableParam, componentSizeParam, scomoStateParam, versionParam;
+	TBuf<MAX_SCR_PARAM_LENGTH> isDrmProtectedParam, isHiddenParam, isKnownRevokedParam, isOriginVerifiedParam; 
+	
+	componentIdParam = KComponentIdName;
+	componentIdOffsetParam = KComponentIdOffsetName;
+	componentNameParam = KComponentName;
+	componentVendorParam = KVendorName;
+	softwareTypeNameParam = KSoftwareTypeName;
+	globalIdParam = KGlobalIdName;
+	isRemovableParam = KRemovableName;
+	isDrmProtectedParam = KDrmProtectedName;
+	isHiddenParam = KHiddenName;
+	isKnownRevokedParam = KKnownRevokedName;
+	isOriginVerifiedParam = KOriginVerifiedName;
+	componentSizeParam = KComponentSizeName;
+	scomoStateParam = KComponentScomoStateName;
+	installedDrivesParam = KInstalledDrivesName;
+	versionParam = KVersionName;
+	
+	if (!aIsSingle)
+		{
+		GenerateIndexedAttributeNameL(componentIdParam, aIndex);
+		GenerateIndexedAttributeNameL(componentIdOffsetParam, aIndex);
+		GenerateIndexedAttributeNameL(componentNameParam, aIndex);
+		GenerateIndexedAttributeNameL(componentVendorParam, aIndex);
+		GenerateIndexedAttributeNameL(softwareTypeNameParam, aIndex);
+		GenerateIndexedAttributeNameL(globalIdParam, aIndex);
+		GenerateIndexedAttributeNameL(isRemovableParam, aIndex);
+		GenerateIndexedAttributeNameL(isDrmProtectedParam, aIndex);
+		GenerateIndexedAttributeNameL(isHiddenParam, aIndex);
+		GenerateIndexedAttributeNameL(isKnownRevokedParam, aIndex);
+		GenerateIndexedAttributeNameL(isOriginVerifiedParam, aIndex);
+		GenerateIndexedAttributeNameL(componentSizeParam, aIndex);
+		GenerateIndexedAttributeNameL(scomoStateParam, aIndex);
+		GenerateIndexedAttributeNameL(installedDrivesParam, aIndex);
+		GenerateIndexedAttributeNameL(versionParam, aIndex);
+		}
+		
+	TComponentId componentId(0);
+	if (!GetIntFromConfig(ConfigSection(), componentIdParam, componentId))
+		{
+		TInt componentIdOffset;
+		if (!GetIntFromConfig(ConfigSection(), componentIdOffsetParam, componentIdOffset))
+			PrintErrorL(_L("The component entry params %S and %S could not be found in configuration."), KErrNotFound, &componentIdParam, &componentIdOffsetParam);
+		
+		componentId = ReadSharedComponentIdL(componentIdOffset);
+		INFO_PRINTF2(_L("Component Id %d"), componentId);
+		}
+		
+	TPtrC componentName;
+	if (!GetStringFromConfig(ConfigSection(), componentNameParam, componentName))
+		PrintErrorL(_L("The component entry param %S could not be found in configuration."), KErrNotFound, &componentNameParam);
+			
+	TPtrC componentVendor;
+	if (!GetStringFromConfig(ConfigSection(), componentVendorParam, componentVendor))
+		PrintErrorL(_L("The component entry param %S could not be found in configuration."), KErrNotFound, &componentVendorParam);
+	
+	TPtrC softwareTypeName;
+	if (!GetStringFromConfig(ConfigSection(), softwareTypeNameParam, softwareTypeName))
+		PrintErrorL(_L("The component entry param %S could not be found in configuration."), KErrNotFound, &softwareTypeNameParam);
+	
+	TPtrC globalId(KNullDesC);
+	(void)GetStringFromConfig(ConfigSection(), globalIdParam, globalId); // This is an optional attribute. It is not crucial even if it is not provided.
+	
+	TBool isRemovable;
+	if (!GetBoolFromConfig(ConfigSection(), isRemovableParam, isRemovable))
+		PrintErrorL(_L("The component entry param %S could not be found in configuration."), KErrNotFound, &isRemovableParam);
+		
+	TInt64 componentSize;
+	if (!Get64BitIntegerFromConfigL(componentSizeParam, componentSize))
+		PrintErrorL(_L("The component entry param %S could not be found in configuration."), KErrNotFound, &componentSizeParam);	
+		
+	TInt scomoStateValue;
+	if (!GetIntFromConfig(ConfigSection(), scomoStateParam, scomoStateValue))
+		PrintErrorL(_L("The component entry param %S could not be found in configuration."), KErrNotFound, &scomoStateParam);
+	TScomoState scomoState = static_cast<TScomoState>(scomoStateValue);
+			
+	TDriveList driveList;
+	if(!GetInstalledDrivesFromConfigL(driveList, installedDrivesParam))
+		PrintErrorL(_L("The component entry param %S could not be found in configuration."), KErrNotFound, &installedDrivesParam);
+		
+	TPtrC version;
+	if (!GetStringFromConfig(ConfigSection(), versionParam, version))
+		PrintErrorL(_L("The component entry param %S could not be found in configuration."), KErrNotFound, &versionParam);
+	
+	TBool isDrmProtected = EFalse;
+	(void)GetBoolFromConfig(ConfigSection(), isDrmProtectedParam, isDrmProtected); // This is an optional attribute. It is not crucial even if it is not provided.
+
+	TBool isHidden = EFalse;
+	(void)GetBoolFromConfig(ConfigSection(), isHiddenParam, isHidden); // This is an optional attribute. It is not crucial even if it is not provided.
+	
+	TBool isKnownRevoked = EFalse;
+	(void)GetBoolFromConfig(ConfigSection(), isKnownRevokedParam, isKnownRevoked); // This is an optional attribute. It is not crucial even if it is not provided.
+		
+	TBool isOriginVerified = EFalse;
+	(void)GetBoolFromConfig(ConfigSection(), isOriginVerifiedParam, isOriginVerified); // This is an optional attribute. It is not crucial even if it is not provided.
+	
+	_LIT(KInstallTime, "20080706:112000");	
+	
+	return CComponentEntry::NewLC(componentId, componentName, componentVendor, softwareTypeName, globalId, isRemovable, componentSize, scomoState, driveList, version, KInstallTime, isDrmProtected, isHidden, isKnownRevoked, isOriginVerified);
+	}
+
+void CScrTestStep::GenerateIndexedAttributeNameL(TDes& aInitialAttributeName, TInt aIndex)
+	{
+	const TInt MAX_INT_STR_LEN = 8;
+	TBuf<MAX_INT_STR_LEN> integerAppendStr;
+	integerAppendStr.Format(_L("%d"), aIndex);
+	aInitialAttributeName.Append(integerAppendStr);
+	}
+
+TBool CScrTestStep::Get64BitIntegerFromConfigL(const TDesC& aConfigKeyName, TInt64& aRetVal)
+	{
+	TPtrC int64Str;
+	if (!GetStringFromConfig(ConfigSection(), aConfigKeyName, int64Str))
+		return EFalse;
+
+	TLex lex(int64Str);
+	User::LeaveIfError(lex.Val(aRetVal));
+	return ETrue;
+	}
+
+CPropertyEntry* CScrTestStep::GetPropertyFromConfigLC(TBool aIsSingle, TInt aIndex, TBool aSupportLocalized)
+	{
+	// This function can be used for getting a single property, which is defined by attributes such as PropertyName etc.
+	// or a property in a set - in this case the properties would be PropertyType0, PropertyName0 etc.
+	// aIsSingle defines the working mode. aIndex applies only if aIsSingle is false
+	
+	// First, we need to generate the property name
+	TBuf<MAX_SCR_PARAM_LENGTH> propertyTypeParam, propertyNameParam, propertyValueParam, propertyLocaleParam;
+	propertyTypeParam = KPropertyTypeParam;
+	propertyNameParam = KPropertyNameParam;
+	propertyValueParam = KPropertyValueParam;
+	propertyLocaleParam = KPropertyLocaleParam;
+	if (!aIsSingle)
+		{
+		GenerateIndexedAttributeNameL(propertyTypeParam, aIndex);
+		GenerateIndexedAttributeNameL(propertyNameParam, aIndex);
+		GenerateIndexedAttributeNameL(propertyValueParam, aIndex);
+		GenerateIndexedAttributeNameL(propertyLocaleParam, aIndex);
+		}
+
+	TPtrC propertyName;
+	if (!GetStringFromConfig(ConfigSection(), propertyNameParam, propertyName))
+		{
+		ERR_PRINTF2(_L("The property name param %S could not be found in configuration."), &propertyNameParam);
+		User::Leave(KErrNotFound);
+		}
+	
+	TInt propertyTypeInt;
+	if (!GetIntFromConfig(ConfigSection(), propertyTypeParam, propertyTypeInt))
+		{
+		ERR_PRINTF2(_L("The property type param %S could not be found in configuration."), &propertyTypeParam);
+		User::Leave(KErrNotFound);
+		}
+	
+	CPropertyEntry::TPropertyType propertyType = static_cast<CPropertyEntry::TPropertyType>(propertyTypeInt);
+	
+	CPropertyEntry* propertyEntry(NULL);
+	switch (propertyType)
+		{
+		case CPropertyEntry::EBinaryProperty:
+		case CPropertyEntry::ELocalizedProperty:
+			{
+			TPtrC propertyStrValue;
+			if (!GetStringFromConfig(ConfigSection(), propertyValueParam, propertyStrValue))
+				{
+				ERR_PRINTF2(_L("The property value param %S could not be found in configuration."), &propertyValueParam);
+				User::Leave(KErrNotFound);
+				}
+			if(!aSupportLocalized || propertyType == CPropertyEntry::EBinaryProperty)
+				{
+				HBufC8* buffer8Bit = ConvertBufferTo8bitL(propertyStrValue);
+				CleanupStack::PushL(buffer8Bit);
+				propertyEntry = CBinaryPropertyEntry::NewL(propertyName, *buffer8Bit);
+				CleanupStack::PopAndDestroy(buffer8Bit);
+				break;
+				}
+			// Handle ELocalProperty case
+			TLanguage locale;
+			if (!GetLocaleFromConfigL(propertyLocaleParam, locale))
+				{
+				ERR_PRINTF2(_L("The property locale param %S could not be found in configuration."), &propertyLocaleParam);
+				User::Leave(KErrNotFound);	
+				}
+			propertyEntry = CLocalizablePropertyEntry::NewL(propertyName, propertyStrValue, locale);
+			break;						
+			}
+		case CPropertyEntry::EIntProperty:
+			{
+			TInt64 int64Value;
+			if (!Get64BitIntegerFromConfigL(propertyValueParam, int64Value))
+				{
+				ERR_PRINTF2(_L("The integer param %S could not be found in configuration."), &propertyValueParam);
+				User::Leave(KErrNotFound);
+				}
+			propertyEntry = CIntPropertyEntry::NewL(propertyName, int64Value);
+			break;
+			}			
+		}
+	CleanupStack::PushL(propertyEntry);
+	return propertyEntry;
+	}
+
+void CScrTestStep::GetPropertiesFromConfigL(RPointerArray<CPropertyEntry>& aProperties, TBool aSupportLocalized)
+	{
+	TInt propertiesCount = 0;
+	if (!GetIntFromConfig(ConfigSection(), KPropertiesCountParamName, propertiesCount))
+	    {
+	    INFO_PRINTF1(_L("Properties count was not found!"));
+	    return;
+	    }
+	
+	if (propertiesCount < 0)
+	    {
+	    INFO_PRINTF1(_L("Properties count was negative !"));
+	    return;
+	    }
+	
+	for (TInt i = 0; i < propertiesCount; ++i)
+		{
+		CPropertyEntry *propertyEntry = GetPropertyFromConfigLC(EFalse, i, aSupportLocalized);
+		User::LeaveIfError(aProperties.Append(propertyEntry));
+		CleanupStack::Pop(propertyEntry);
+		}
+	}
+
+void CScrTestStep::GetComponentIdsFromConfigL(RArray<TComponentId>& aComponentIds)
+	{
+	TInt componentsCount = 0;
+	if (!GetIntFromConfig(ConfigSection(), KComponentsCountName, componentsCount))
+		PrintErrorL(_L("Components count was not found!"), KErrNotFound);
+		
+	TBuf<MAX_SCR_PARAM_LENGTH> paramName;
+	 
+	for (TInt i = 0; i < componentsCount; ++i)
+		{
+		paramName = KComponentIdOffsetName;	
+		GenerateIndexedAttributeNameL(paramName, i);
+		TInt componentIdOffset(0);
+		if (!GetIntFromConfig(ConfigSection(), paramName, componentIdOffset))
+			{
+			ERR_PRINTF2(_L("The component id param %S could not be found in configuration."), &paramName);
+			User::Leave(KErrNotFound);
+			}
+		TInt componentId = ReadSharedComponentIdL(componentIdOffset);
+		aComponentIds.AppendL(componentId);
+		}
+	}
+
+void CScrTestStep::GetComponentLocalizablesFromConfigL(TInt aIndex, TPtrC& aName, TPtrC& aVendor, TLanguage& aLocale)
+	{
+	TBuf<20> vendorParamName, componentParamName, localeParamName;
+	vendorParamName = KVendorName;
+	GenerateIndexedAttributeNameL(vendorParamName, aIndex);
+			
+	componentParamName = KComponentName;
+	GenerateIndexedAttributeNameL(componentParamName, aIndex);
+			
+	localeParamName = KComponentLocaleName;
+	GenerateIndexedAttributeNameL(localeParamName, aIndex);
+			
+	if (!GetStringFromConfig(ConfigSection(), componentParamName, aName))
+		PrintErrorL(_L("Localised component name was not found!"), KErrNotFound);
+	if (!GetStringFromConfig(ConfigSection(), vendorParamName, aVendor))
+		PrintErrorL(_L("Localised vendor name was not found!"), KErrNotFound);
+	if (!GetLocaleFromConfigL(localeParamName, aLocale))
+		PrintErrorL(_L("Locale was not found!"), KErrNotFound);
+	}
+
+void CScrTestStep::GetLocalisedComponentsFromConfigL(RPointerArray<Usif::CLocalizableComponentInfo>& aComponentInfo)
+	{
+	TInt localesCount = 0;
+	if (!GetIntFromConfig(ConfigSection(), _L("LocalesCount"), localesCount))
+		PrintErrorL(_L("Locales count was not found!"), KErrNotFound);	
+	
+	for (TUint i = 0; i < localesCount; ++i)
+		{
+		TPtrC componentName, vendorName;
+		TLanguage locale;
+		GetComponentLocalizablesFromConfigL(i, componentName, vendorName, locale);
+		
+		CLocalizableComponentInfo* localisableComponentInfo(0);
+		// If-condition is used for the sake of coverage 
+		if(i)
+			{
+			localisableComponentInfo = CLocalizableComponentInfo::NewLC(componentName, vendorName, locale);
+			}
+		else
+			{
+			localisableComponentInfo = CLocalizableComponentInfo::NewL(componentName, vendorName, locale);
+			CleanupStack::PushL(localisableComponentInfo);
+			}
+		aComponentInfo.AppendL(localisableComponentInfo);
+		CleanupStack::Pop(localisableComponentInfo);
+		}	
+	}
+
+TBool CScrTestStep::GetInstalledDrivesFromConfigL(TDriveList& aDriveList, const TDesC& aAttributeName)
+	{
+	TPtrC installedDrives;
+	if (!GetStringFromConfig(ConfigSection(), aAttributeName, installedDrives))
+		{
+		return EFalse;
+		}
+	
+	TLex parser(installedDrives);
+	TChar currentChar;
+	aDriveList.FillZ(KMaxDrives);
+	
+	parser.Mark();
+	while(!parser.Eos())
+		{
+		currentChar = parser.Get();
+		if(KComponentIdDelimeter == currentChar || parser.Eos())
+			{
+			TPtrC token = parser.MarkedToken();
+			TLex tokenLex(token);		
+			TInt driveNumber(0);
+			driveNumber = token[0] - 'A';
+			if(driveNumber < EDriveA || driveNumber > EDriveZ)
+				{
+				ERR_PRINTF3(_L("%S contains an unexpected token(%S)."), &aAttributeName, &token);
+				User::Leave(KErrArgument);
+				}
+			++aDriveList[driveNumber];
+			parser.Mark();
+			}
+		}
+	return ETrue;
+	}
+
+TBool CScrTestStep::GetScomoStateFromConfigL(TScomoState& aScomoState, const TDesC& aAttributeName)
+	{
+	TInt tempScomoState(0);
+	if (!GetIntFromConfig(ConfigSection(), aAttributeName, tempScomoState))
+		return EFalse;
+		
+	aScomoState = static_cast<TScomoState>(tempScomoState);
+	return ETrue;
+	}
+
+
+TInt CScrTestStep::GetSetSizeFromConfigL()
+	{
+	TInt setSize(1);
+	GetIntFromConfig(ConfigSection(), KSetSizeName, setSize);
+	if (setSize < 1)
+		PrintErrorL(_L("Invalid set size in component filter definition"), KErrArgument);
+	return setSize;
+	}
+
+Usif::TComponentId CScrTestStep::AddNonLocalisableComponentL(Usif::RSoftwareComponentRegistry& aScrSession)
+	{
+	TPtrC componentName;
+	GetComponentNameFromConfigL(componentName);
+	TPtrC vendorName;;
+	GetVendorNameFromConfigL(vendorName);
+	TPtrC swTypeName;
+	GetSoftwareTypeNameL(swTypeName);
+	
+	TScrComponentOperationType operationType(EScrCompInstall);
+	
+	TInt opTypeInt(0);
+	if(GetIntFromConfig(ConfigSection(), KOperationType, opTypeInt))
+		{
+		operationType = static_cast<TScrComponentOperationType>(opTypeInt);
+		}
+		
+	Usif::TComponentId componentId;
+	TPtrC globalIdName;
+	if(GetGlobalIdNameL(globalIdName))
+		componentId = aScrSession.AddComponentL(componentName, vendorName, swTypeName, &globalIdName, operationType);
+	else
+		componentId = aScrSession.AddComponentL(componentName, vendorName, swTypeName, NULL, operationType);
+	
+	return componentId;
+	}
+
+void CScrTestStep::ReadFilterPropertiesL(CComponentFilter* aFilter, TInt aPropertiesCount)
+	{
+	for (TInt i = 0; i < aPropertiesCount; ++i)
+		{		
+		TBuf<MAX_SCR_PARAM_LENGTH> propertyNameParam, intAttributeParam, strAttributeParam, localeAttributeParam;
+		
+		propertyNameParam = _L("FilterPropertyName");
+		GenerateIndexedAttributeNameL(propertyNameParam, i);
+				
+		TPtrC propertyName;
+		if (!GetStringFromConfig(ConfigSection(), propertyNameParam, propertyName))
+			{			
+			PrintErrorL(_L("Property name for property was not found in filter"), KErrNotFound);
+			}		
+		
+		intAttributeParam = _L("FilterIntProperty");
+		GenerateIndexedAttributeNameL(intAttributeParam, i);		
+		
+		strAttributeParam = _L("FilterStringProperty");
+		GenerateIndexedAttributeNameL(strAttributeParam, i);
+		
+		localeAttributeParam = _L("FilterPropertyLocale");
+		GenerateIndexedAttributeNameL(localeAttributeParam, i);		
+		
+		TPtrC propertyStrValue;		
+		TInt64 int64Value;
+		
+		if (Get64BitIntegerFromConfigL(intAttributeParam, int64Value))
+			{			
+			aFilter->AddPropertyL(propertyName, int64Value);
+			continue;
+			}
+		
+		if (!GetStringFromConfig(ConfigSection(), strAttributeParam, propertyStrValue))
+			continue;
+
+		TLanguage locale;
+		if (GetLocaleFromConfigL(localeAttributeParam, locale))
+			{
+			aFilter->AddPropertyL(propertyName, propertyStrValue, locale);
+			}
+		else
+			{
+			HBufC8* buffer8bit = ConvertBufferTo8bitL(propertyStrValue);
+			CleanupStack::PushL(buffer8bit);
+			aFilter->AddPropertyL(propertyName, *buffer8bit);
+			CleanupStack::PopAndDestroy(buffer8bit);
+			}									
+		} 
+	}
+
+CComponentFilter* CScrTestStep::ReadComponentFilterFromConfigLC()
+	{
+	CComponentFilter* componentFilter = CComponentFilter::NewLC();
+	
+	TPtrC filterName;
+	if (GetStringFromConfig(ConfigSection(), _L("FilterName"), filterName))
+		componentFilter->SetNameL(filterName);
+	
+	TPtrC filterVendor;
+	if (GetStringFromConfig(ConfigSection(), _L("FilterVendor"), filterVendor))
+		componentFilter->SetVendorL(filterVendor);
+	
+	TPtrC filterSwType;
+	if (GetStringFromConfig(ConfigSection(), _L("FilterSoftwareType"), filterSwType))
+	componentFilter->SetSoftwareTypeL(filterSwType);
+	
+	TScomoState scomoState;
+	if (GetScomoStateFromConfigL(scomoState, _L("FilterScomoState")))
+		componentFilter->SetScomoStateL(scomoState);
+	
+	TDriveList filterInstalledDrives;
+	_LIT(KFilterInstalledDrives, "FilterDrivesList");
+	if (GetInstalledDrivesFromConfigL(filterInstalledDrives, KFilterInstalledDrives()))
+		componentFilter->SetInstalledDrivesL(filterInstalledDrives);
+	
+	TBool filterIsRemovable(EFalse);
+	if (GetBoolFromConfig(ConfigSection(), _L("FilterIsRemovable"), filterIsRemovable))
+		componentFilter->SetRemovable(filterIsRemovable);
+	
+	TInt propertiesCount(0);
+	if (GetIntFromConfig(ConfigSection(), _L("FilterPropertiesCount"), propertiesCount))
+		{
+		ReadFilterPropertiesL(componentFilter, propertiesCount);
+		}
+		
+	TPtrC filterFile;
+	if (GetStringFromConfig(ConfigSection(), _L("FilterFile"), filterFile))
+		componentFilter->SetFileL(filterFile);
+	
+	TBool filterIsDrmProtected(EFalse);
+	if (GetBoolFromConfig(ConfigSection(), _L("FilterIsDrmProtected"), filterIsDrmProtected))
+		componentFilter->SetDrmProtected(filterIsDrmProtected);
+	
+	TBool filterIsHidden(EFalse);
+	if (GetBoolFromConfig(ConfigSection(), _L("FilterIsHidden"), filterIsHidden))
+		componentFilter->SetHidden(filterIsHidden);
+	
+	TBool filterIsKnownRevoked(EFalse);
+	if (GetBoolFromConfig(ConfigSection(), _L("FilterIsKnownRevoked"), filterIsKnownRevoked))
+		componentFilter->SetKnownRevoked(filterIsKnownRevoked);
+	
+	TBool filterIsOriginVerified(EFalse);
+	if (GetBoolFromConfig(ConfigSection(), _L("FilterIsOriginVerified"), filterIsOriginVerified))
+		componentFilter->SetOriginVerified(filterIsOriginVerified);
+	
+	return componentFilter;
+	}
+
+void CScrTestStep::GetAppOwnedFilesL(RPointerArray<HBufC>& aOwnedFileArray)
+	{
+	TInt ownedFileCount = 0;
+	GetIntFromConfig(ConfigSection(), _L("OwnedFileCount"), ownedFileCount);
+	for (TUint i = 0; i < ownedFileCount; ++i)
+		{
+		TPtrC tOwnedFileName;
+		TBuf<20> fileName;
+		fileName = KOwnedFileName;
+		GenerateIndexedAttributeNameL(fileName, i);
+		GetStringFromConfig(ConfigSection(), fileName, tOwnedFileName);
+		HBufC* ownedFileName = tOwnedFileName.AllocLC();
+		aOwnedFileArray.AppendL(ownedFileName);
+		CleanupStack::Pop(ownedFileName);
+		}	
+	}
+
+void CScrTestStep::GetAppServiceInfoL(RPointerArray<CServiceInfo>& aServiceInfoArray)
+	{
+	TInt serviceInfoCount = 0;
+	TInt totalOpaqueDataCount = 0;
+	TInt totalServiceDataTypeCount = 0;
+	GetIntFromConfig(ConfigSection(), _L("ServiceInfoCount"), serviceInfoCount);
+	for (TUint i = 0; i < serviceInfoCount; ++i)
+		{
+		// service Uid
+        TBuf<20> uid;
+		TUid serviceUid;
+		uid = KServiceUid;
+		GenerateIndexedAttributeNameL(uid, i);
+		GetUidFromConfig(ConfigSection(), uid, serviceUid);
+		
+		// service opaque data
+		RPointerArray<COpaqueData> serviceOpaqueDataInfoArray;
+		TBuf<27> servOpaqueDataCountStr;
+		servOpaqueDataCountStr = KServiceOpaqueDataInfoCount;
+		GenerateIndexedAttributeNameL(servOpaqueDataCountStr, i);
+		TInt serviceOpaqueDataInfoCount = 0;
+		GetIntFromConfig(ConfigSection(), servOpaqueDataCountStr, serviceOpaqueDataInfoCount);
+		GetServiceOpaqueDataInfoL(serviceOpaqueDataInfoArray, serviceOpaqueDataInfoCount, totalOpaqueDataCount);
+		totalOpaqueDataCount += serviceOpaqueDataInfoCount;
+		//CleanupStack::PushL(&serviceOpaqueDataInfoArray);
+
+		// service data type
+		TBuf<21> serviceDataTypeCountString;
+		serviceDataTypeCountString = KServiceDataTypeCount;
+		GenerateIndexedAttributeNameL(serviceDataTypeCountString, i);
+		TInt serviceDataTypeCount = 0;
+		GetIntFromConfig(ConfigSection(), serviceDataTypeCountString, serviceDataTypeCount);
+		totalServiceDataTypeCount+=serviceDataTypeCount;
+		RPointerArray<CDataType> serviceDataTypeArray;
+		for (TUint j = 0; j < serviceDataTypeCount; ++j)
+			{
+			TInt indexToRead = totalServiceDataTypeCount-serviceDataTypeCount+j;
+			TInt serviceDataTypePriority;
+			TPtrC serviceType;
+			TBuf<25> priority, type;
+			priority = KServiceDataTypePriority;
+			GenerateIndexedAttributeNameL(priority, indexToRead);
+			GetIntFromConfig(ConfigSection(), priority, serviceDataTypePriority);
+			type = KServiceDataType;
+			GenerateIndexedAttributeNameL(type, indexToRead);
+			GetStringFromConfig(ConfigSection(), type, serviceType);
+			CDataType* serviceDataType = CDataType::NewLC(serviceDataTypePriority,serviceType);
+			serviceDataTypeArray.AppendL(serviceDataType);
+			CleanupStack::Pop(serviceDataType);
+			}
+		
+		CServiceInfo* serviceInfo = CServiceInfo::NewLC(serviceUid, serviceOpaqueDataInfoArray, serviceDataTypeArray);
+		aServiceInfoArray.AppendL(serviceInfo);
+		CleanupStack::Pop(serviceInfo);
+		}
+	}
+
+void CScrTestStep::GetAppLocalizableInfoL(RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoArray)
+	{
+	TInt localizableAppInfoCount = 0;
+	TInt totalViewDataCount=0;
+	GetIntFromConfig(ConfigSection(), _L("LocalizableAppInfoCount"), localizableAppInfoCount);
+	for (TUint i = 0; i < localizableAppInfoCount; ++i)
+		{
+		TPtrC locShortCaption;
+		TLanguage locLanguage;
+		TInt lang;
+		TPtrC locGroupName;
+		TBuf<20> shortCaption, language, groupName, viewDataCount;
+		shortCaption = KLocShortCaption;
+		GenerateIndexedAttributeNameL(shortCaption, i);
+		GetStringFromConfig(ConfigSection(), shortCaption, locShortCaption);
+		language = KLocAppLanguage;
+		GenerateIndexedAttributeNameL(language, i);
+		GetIntFromConfig(ConfigSection(), language, lang);
+
+		locLanguage = static_cast<TLanguage>(lang);
+		groupName = KLocGroupName;
+		GenerateIndexedAttributeNameL(groupName, i);
+		GetStringFromConfig(ConfigSection(), groupName, locGroupName);
+		
+		TPtrC locCaption;
+		TPtrC locIconFileName;
+		TInt locNoOfAppIcons = 0;
+		TBuf<20> caption, iconFileName, noOfAppIcons;
+		caption = KLocCaption;
+		GenerateIndexedAttributeNameL(caption, i);
+		GetStringFromConfig(ConfigSection(), caption, locCaption);
+		iconFileName = KLocIconFileName;
+		GenerateIndexedAttributeNameL(iconFileName, i);
+		GetStringFromConfig(ConfigSection(), iconFileName, locIconFileName);
+		noOfAppIcons = KLocNumberOfAppIcons;
+		GenerateIndexedAttributeNameL(noOfAppIcons, i);
+		GetIntFromConfig(ConfigSection(), noOfAppIcons, locNoOfAppIcons);
+		CCaptionAndIconInfo* captionAndIconInfo = NULL;
+		if(locCaption.Length() != 0 || locIconFileName.Length() !=0 || locNoOfAppIcons != 0)
+		  {
+		   captionAndIconInfo = CCaptionAndIconInfo::NewLC(locCaption,locIconFileName,locNoOfAppIcons);
+		  }
+		else
+		  CleanupStack::PushL(captionAndIconInfo);
+		
+		TInt viewDataCountForLocale = 0;
+		viewDataCount=KViewDataCount;
+		GenerateIndexedAttributeNameL(viewDataCount, i);
+		GetIntFromConfig(ConfigSection(), viewDataCount , viewDataCountForLocale);
+		totalViewDataCount+=viewDataCountForLocale;
+		RPointerArray<CAppViewData> viewDataArray;
+		for (TUint i = 0; i < viewDataCountForLocale; ++i)
+			{
+			TInt viewScreenMode,vUid,indexToRead;
+			TBuf<20> uid, screenMode;
+			uid = KVwUid;
+			indexToRead=totalViewDataCount-viewDataCountForLocale+i;
+			GenerateIndexedAttributeNameL(uid, indexToRead);
+			GetIntFromConfig(ConfigSection(), uid, vUid);
+			TUid viewUid = TUid::Uid(vUid);
+			screenMode = KVwScreenMode;
+			GenerateIndexedAttributeNameL(screenMode, indexToRead);
+			GetIntFromConfig(ConfigSection(), screenMode, viewScreenMode);
+			
+			TPtrC viewCaption;
+			TPtrC viewIconFileName;
+			TInt viewNoOfAppIcons = 0;
+			TBuf<20> caption, iconFileName, noOfAppIcons;
+			caption = KVwCaption;
+			GenerateIndexedAttributeNameL(caption, indexToRead);
+			GetStringFromConfig(ConfigSection(), caption, viewCaption);
+			iconFileName = KVwIconFileName;
+			GenerateIndexedAttributeNameL(iconFileName, indexToRead);
+			GetStringFromConfig(ConfigSection(), iconFileName, viewIconFileName);
+			noOfAppIcons = KVwNumberOfAppIcons;
+			GenerateIndexedAttributeNameL(noOfAppIcons, indexToRead);
+			GetIntFromConfig(ConfigSection(), noOfAppIcons, viewNoOfAppIcons);
+			CCaptionAndIconInfo* viewCaptionAndIconInfo = NULL;
+			if(viewCaption.Length() != 0 || viewIconFileName.Length() !=0 || viewNoOfAppIcons != 0)
+			  {
+			   viewCaptionAndIconInfo = CCaptionAndIconInfo::NewLC(viewCaption,viewIconFileName,viewNoOfAppIcons);
+			  }
+			else
+			  CleanupStack::PushL(viewCaptionAndIconInfo);			
+			
+			CAppViewData* viewData = CAppViewData::NewLC(viewUid,viewScreenMode,viewCaptionAndIconInfo);
+			viewDataArray.AppendL(viewData);
+			CleanupStack::Pop(2, viewCaptionAndIconInfo);
+			}
+
+		CLocalizableAppInfo* localizableAppInfo = CLocalizableAppInfo::NewLC(locShortCaption,locLanguage,locGroupName,captionAndIconInfo,viewDataArray);
+		aLocalizableAppInfoArray.AppendL(localizableAppInfo);
+		CleanupStack::Pop(localizableAppInfo);
+		CleanupStack::Pop(captionAndIconInfo);
+		}
+	}
+
+void CScrTestStep::GetAppOpaqueDataInfoL(RPointerArray<Usif::COpaqueData>& aAppOpaqueDataInfoArray)
+    {
+    TInt appOpaqueDataInfoCount = 0;
+    
+    GetIntFromConfig(ConfigSection(), _L("AppOpaqueDataInfoCount"), appOpaqueDataInfoCount);
+    for (TUint i = 0; i < appOpaqueDataInfoCount; ++i)
+        {
+        TBuf<16> localeAttr;
+        localeAttr = KAppOpaqueDataLocale;
+        TInt locale = 0;
+        GenerateIndexedAttributeNameL(localeAttr, i);
+        GetIntFromConfig(ConfigSection(), localeAttr, locale);
+        
+
+                    
+        TBuf<14> opaqueDataAttr;
+        opaqueDataAttr = KAppOpaqueData;
+        TPtrC opaqueData;
+        GenerateIndexedAttributeNameL(opaqueDataAttr, i);
+        GetStringFromConfig(ConfigSection(), opaqueDataAttr, opaqueData);
+                
+        TPtrC8 blobOpaqueData((TUint8*)opaqueData.Ptr(), opaqueData.Length()*2);
+
+        COpaqueData* appOpaqueData = COpaqueData::NewLC(blobOpaqueData, (TLanguage) locale);
+        aAppOpaqueDataInfoArray.AppendL(appOpaqueData);
+        CleanupStack::Pop(appOpaqueData);
+        }    
+    }
+
+void CScrTestStep::GetServiceOpaqueDataInfoL(RPointerArray<Usif::COpaqueData>& aServiceOpaqueDataInfoArray, TInt aServiceOpaqueDataInfoCount, TInt aStartingIndex)
+    {
+    for (TUint i = 0; i < aServiceOpaqueDataInfoCount; ++i)
+        {
+        TBuf<20> localeAttr;
+        localeAttr = KServiceOpaqueLocale;
+        TInt locale = 0;
+        TInt indexToRead = i + aStartingIndex;
+        GenerateIndexedAttributeNameL(localeAttr, indexToRead);
+        GetIntFromConfig(ConfigSection(), localeAttr, locale);
+                    
+        TBuf<18> opaqueDataAttr;
+        opaqueDataAttr = KServiceOpaqueData;
+        TPtrC opaqueData;
+        GenerateIndexedAttributeNameL(opaqueDataAttr, indexToRead);
+        GetStringFromConfig(ConfigSection(), opaqueDataAttr, opaqueData);
+                
+        TPtrC8 blobOpaqueData((TUint8*)opaqueData.Ptr(), opaqueData.Length()*2);
+
+        COpaqueData* serviceOpaqueData = COpaqueData::NewLC(blobOpaqueData, (TLanguage) locale);
+        aServiceOpaqueDataInfoArray.AppendL(serviceOpaqueData);
+        CleanupStack::Pop(serviceOpaqueData);
+        }    
+    }
+
+CApplicationRegistrationData* CScrTestStep::GetAppRegInfoFromConfigLC()
+	{
+	TUid appUid;
+	GetAppUidL(appUid);
+
+	TPtrC appFile; 
+	TBuf<128> appFileBuf;
+	_LIT(KAppFileName, "appName%d");
+	if(!GetStringFromConfig(ConfigSection(), _L("AppFile"), appFile))
+	    {
+	    TBool generateNewUid(EFalse);
+		//Generate appFile Name from the appUid.
+	    if (GetBoolFromConfig(ConfigSection(), _L("GenerateNewUid"), generateNewUid))
+	         {
+	         appFileBuf.Format(KAppFileName, appUid);
+	         appFile.Set(appFileBuf);
+	         }
+	    }
+
+	TInt attributes, hidden, embeddability, newFile, launch, defScreenNo;
+	GetIntFromConfig(ConfigSection(), _L("Attributes"), attributes);
+	GetIntFromConfig(ConfigSection(), _L("Hidden"), hidden);
+	GetIntFromConfig(ConfigSection(), _L("Embeddability"), embeddability);
+	GetIntFromConfig(ConfigSection(), _L("NewFile"), newFile);
+	GetIntFromConfig(ConfigSection(), _L("Launch"), launch);
+
+	TPtrC groupName; 
+	GetStringFromConfig(ConfigSection(), _L("GroupName"), groupName);
+	
+	GetIntFromConfig(ConfigSection(), _L("DefaultScreenNumber"), defScreenNo);
+	
+	RPointerArray<HBufC> ownedFileArray;
+	GetAppOwnedFilesL(ownedFileArray);
+	CleanupStack::PushL(&ownedFileArray);
+	RPointerArray<CServiceInfo> serviceInfoArray;
+	GetAppServiceInfoL(serviceInfoArray);
+	CleanupStack::PushL(&serviceInfoArray);
+	RPointerArray<CLocalizableAppInfo> localizableAppInfoArray;
+	GetAppLocalizableInfoL(localizableAppInfoArray);
+	CleanupStack::PushL(&localizableAppInfoArray);
+
+	RPointerArray<COpaqueData> appOpaqueDataInfoArray;
+	GetAppOpaqueDataInfoL(appOpaqueDataInfoArray);
+	CleanupStack::PushL(&appOpaqueDataInfoArray);
+
+	RPointerArray<CPropertyEntry> appPropertyArray;
+	GetPropertiesFromConfigL(appPropertyArray, ETrue);
+	CleanupStack::PushL(&appPropertyArray);
+	INFO_PRINTF1(_L("Going to create CApplicationRegistrationData obj."));
+	
+	TBool ObjectWithoutOptionalFields = EFalse;
+	GetBoolFromConfig(ConfigSection(), _L("ObjectWithoutOptionalFields"), ObjectWithoutOptionalFields);
+	CApplicationRegistrationData* appRegData = NULL;
+	if(ObjectWithoutOptionalFields)
+	    {
+	    appRegData = CApplicationRegistrationData::NewLC(ownedFileArray, serviceInfoArray, localizableAppInfoArray, appPropertyArray, appUid, appFile);
+	    }
+	else
+	    {
+	    TApplicationCharacteristics appCharacteristics;
+	    appCharacteristics.iAttributes = attributes;
+	    appCharacteristics.iAppIsHidden = hidden;
+	    appCharacteristics.iEmbeddability = TApplicationCharacteristics::TAppEmbeddability(embeddability);
+	    appCharacteristics.iGroupName = groupName;
+	    appCharacteristics.iLaunchInBackground = launch;
+	    
+        appRegData = CApplicationRegistrationData::NewLC(ownedFileArray, serviceInfoArray, localizableAppInfoArray, appPropertyArray, appOpaqueDataInfoArray, appUid, appFile, appCharacteristics, defScreenNo);	    
+	    }
+	
+	INFO_PRINTF1(_L("Created CApplicationRegistrationData obj."));
+	CleanupStack::Pop(6);
+	CleanupStack::PushL(appRegData);
+	return appRegData;
+	}
+
+TComponentId CScrTestStep::GetCompIdFromConfigL()
+	{
+	TInt cId;
+	GetIntFromConfig(ConfigSection(), _L("ComponentId"), cId);
+	INFO_PRINTF1(_L("returning compid value from CScrTestStep::GetCompIdFromConfigL."));
+	return static_cast<TComponentId>(cId);
+	}
+
+void CScrTestStep::GetAppUidL(TUid& aAppUid)
+    {
+    TBool generateNewUid(EFalse);
+    if (!GetUidFromConfig(ConfigSection(), _L("AppUid"), aAppUid))
+        {
+        if (GetBoolFromConfig(ConfigSection(), _L("GenerateNewUid"), generateNewUid))
+            {
+            INFO_PRINTF1(_L("Generating new UID"));
+			//Find an unused UID and return it.
+            aAppUid = GenerateNewAppUidL();
+            }
+        else
+            {
+            PrintErrorL(_L("AppUid was not found!"), KErrNotFound);
+            }
+        }  
+    INFO_PRINTF2(_L("AppUid is 0x%x"), aAppUid.iUid);
+    }
+	
+TUid CScrTestStep::GetServiceUidL()
+    {
+    TUid serviceUid;
+    TInt tmpuid=0, i=0;
+    TBuf<25> uid;
+    
+    uid = KServiceUid;
+    GenerateIndexedAttributeNameL(uid, i);
+    if(!GetIntFromConfig(ConfigSection(), uid, tmpuid))
+         PrintErrorL(_L("Service Uid was not found!"), KErrNotFound);
+    serviceUid.iUid=tmpuid;
+    INFO_PRINTF2(_L("Service Uid %d"), serviceUid.iUid);
+    return serviceUid;
+    }
+
+TBool CScrTestStep::GetUidFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TUid& aUid)
+    {
+    TInt val;
+    if(GetHexFromConfig(aSectName, aKeyName, val))
+        {
+        aUid = TUid::Uid(val);
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }
+    }
+
+Usif::TAppRegInfo* CScrTestStep::GetAppInfoFromConfigL(TBool aIsSingle , TInt aIndex )
+	{
+    Usif::TAppRegInfo *appinfo=NULL;
+    
+    TBuf<MAX_SCR_PARAM_LENGTH> applicationUidParam, applicationFileNameParam, applicationCaptionParam, applicationShortCaptionParam;
+    applicationUidParam = KIntTAppInfoUID;
+    applicationFileNameParam = KStringTAppInfoFileName;
+    applicationCaptionParam = KStringTAppInfoCaption;
+    applicationShortCaptionParam = KStringTAppInfoShortCaption;
+            
+    if (!aIsSingle)
+        {
+        INFO_PRINTF1(_L("Preparing Index "));
+        GenerateIndexedAttributeNameL(applicationUidParam, aIndex);
+        GenerateIndexedAttributeNameL(applicationFileNameParam, aIndex);
+        GenerateIndexedAttributeNameL(applicationCaptionParam, aIndex);
+        GenerateIndexedAttributeNameL(applicationShortCaptionParam, aIndex);
+        }
+
+    TUid applicationUid;
+    if (!GetUidFromConfig(ConfigSection(), applicationUidParam, applicationUid))
+        {
+         ERR_PRINTF2(_L("The application Uid type param %S could not be found in configuration."), &applicationUidParam);
+         User::Leave(KErrNotFound);
+        }
+        
+    TPtrC applicationFileName;
+    if (!GetStringFromConfig(ConfigSection(), applicationFileNameParam, applicationFileName))
+        {
+        ERR_PRINTF2(_L("The application file name param %S could not be found in configuration."), &applicationFileNameParam);
+        User::Leave(KErrNotFound);
+        }
+    TPtrC applicationCaption;
+    if (!GetStringFromConfig(ConfigSection(), applicationCaptionParam, applicationCaption))
+        {
+        INFO_PRINTF2(_L("The application caption param %S could not be found in configuration."), &applicationCaptionParam);
+       
+        }
+    TPtrC applicationShortCaption;
+    if (!GetStringFromConfig(ConfigSection(), applicationShortCaptionParam, applicationShortCaption))
+        {
+        appinfo = new TAppRegInfo(applicationUid , applicationFileName, applicationCaption);
+        INFO_PRINTF2(_L("The application short caption param %S could not be found in configuration."), &applicationShortCaptionParam);
+        }
+    else
+        appinfo = new TAppRegInfo(applicationUid , applicationFileName, applicationCaption,applicationShortCaption);
+
+    return appinfo;
+    }
+
+void CScrTestStep::ReadAppInfoFilterFromConfigL(Usif::CAppInfoFilter** aFilter)
+    {
+    *aFilter=CAppInfoFilter::NewL();
+    Usif::CAppInfoFilter *aAppInfoFilter=*aFilter;
+      
+    TBool filterToSet(EFalse);
+    TInt screenMode(0);
+    if (GetBoolFromConfig(ConfigSection(), _L("AIFAllApps"), filterToSet))
+        {
+        if (filterToSet)
+            aAppInfoFilter->SetAllApps();
+        if (GetIntFromConfig(ConfigSection(), _L("AIFAllAppsScreenMode"), screenMode ))
+            aAppInfoFilter->SetAllApps(screenMode);
+        return ;
+        }
+    if (GetBoolFromConfig(ConfigSection(), _L("AIFEmbApps"), filterToSet))
+        {
+        if (filterToSet)
+            aAppInfoFilter->SetEmbeddableApps();
+        if (GetIntFromConfig(ConfigSection(), _L("AIFEmbAppScreanMode"), screenMode ))
+            aAppInfoFilter->SetEmbeddableApps(screenMode);
+        return ;
+        }
+    TInt filterValue(0);
+    if (GetIntFromConfig(ConfigSection(), _L("AIFFilEmbAppsEmbedabilityFilter"), filterValue))
+        {
+		TInt readFilterVal(0);
+        Usif::TEmbeddableFilter embadibilityFilter ;
+        for (TInt i=0 ; i <filterValue;i++)
+            {
+            TBuf<20>  filterName=_L("EFilterVal");
+            GenerateIndexedAttributeNameL(filterName, i);
+            if(GetIntFromConfig(ConfigSection(), filterName, readFilterVal))
+			embadibilityFilter.AddEmbeddability(TApplicationCharacteristics::TAppEmbeddability(readFilterVal));
+            }
+        if (GetIntFromConfig(ConfigSection(), _L("AIFFilEmbAppsEmbedableScreenMode"), screenMode ))
+            aAppInfoFilter->SetEmbeddabilityFilterWithScreenMode(embadibilityFilter,screenMode);
+        else
+            aAppInfoFilter->SetEmbeddabilityFilter(embadibilityFilter);
+        return ;
+        }
+    if (GetIntFromConfig(ConfigSection(), _L("AIFFilAppsWithCapMask"), filterValue))
+        {
+        TInt capValue(0);
+        if (GetIntFromConfig(ConfigSection(), _L("AIFFilAppsWithCapValue"), capValue))
+           {
+           if (GetIntFromConfig(ConfigSection(), _L("AIFFilAppsWithCapScreenMode"), screenMode ))
+               aAppInfoFilter->SetCapabilityAttributeMaskAndValue(filterValue,capValue,screenMode);
+           else
+               aAppInfoFilter->SetCapabilityAttributeMaskAndValue(filterValue,capValue);
+           }
+        return ;
+        }
+    TUid filterUId;
+    if (GetUidFromConfig(ConfigSection(), _L("AIFServerApps"), filterUId))
+        {
+        if (GetIntFromConfig(ConfigSection(), _L("AIFServerAppsScreenMode"), screenMode ))
+            aAppInfoFilter->SetServerApps(filterUId,screenMode);
+        else
+            aAppInfoFilter->SetServerApps(filterUId);
+        return ;
+        }
+    User::Leave(KErrNotFound);
+    }
+
+void CScrTestStep::GetViewDataInfoFromConfigL(RPointerArray<CAppViewData>& aAppViewInfoArray)
+    {
+    TInt viewDataCount=0;
+    GetIntFromConfig(ConfigSection(), _L("ViewDataCount"), viewDataCount);
+    for (TUint i = 0; i < viewDataCount; ++i)
+        {
+        TInt viewScreenMode,vUid;
+        TBuf<20> uid, screenMode;
+        uid = KVwUid;
+        GenerateIndexedAttributeNameL(uid, i);
+        GetIntFromConfig(ConfigSection(), uid, vUid);
+        TUid viewUid = TUid::Uid(vUid);
+        screenMode = KVwScreenMode;
+        GenerateIndexedAttributeNameL(screenMode, i);
+        GetIntFromConfig(ConfigSection(), screenMode, viewScreenMode);
+           
+        TPtrC viewCaption;
+        TPtrC viewIconFileName;
+        TInt viewNoOfAppIcons = 0;
+        TBuf<20> caption, iconFileName, noOfAppIcons;
+        caption = KVwCaption;
+        GenerateIndexedAttributeNameL(caption, i);
+        GetStringFromConfig(ConfigSection(), caption, viewCaption);
+        iconFileName = KVwIconFileName;
+        GenerateIndexedAttributeNameL(iconFileName, i);
+        GetStringFromConfig(ConfigSection(), iconFileName, viewIconFileName);
+        noOfAppIcons = KVwNumberOfAppIcons;
+        GenerateIndexedAttributeNameL(noOfAppIcons, i);
+        GetIntFromConfig(ConfigSection(), noOfAppIcons, viewNoOfAppIcons);
+        CCaptionAndIconInfo* viewCaptionAndIconInfo = NULL;
+        if(viewCaption.Length() != 0 || viewIconFileName.Length() !=0 || viewNoOfAppIcons != 0)
+            {
+            viewCaptionAndIconInfo = CCaptionAndIconInfo::NewLC(viewCaption,viewIconFileName,viewNoOfAppIcons);
+            }
+        else
+            {
+            CleanupStack::PushL(viewCaptionAndIconInfo);          
+            }
+        CAppViewData* viewData = CAppViewData::NewLC(viewUid,viewScreenMode,viewCaptionAndIconInfo);
+        aAppViewInfoArray.AppendL(viewData);
+        CleanupStack::Pop(2, viewCaptionAndIconInfo);
+        }
+    }
+
+TBool CScrTestStep::NotEqual(const Usif::CCaptionAndIconInfo *aLhsEntry, const Usif::CCaptionAndIconInfo *aRhsEntry) const
+    {
+    if(aLhsEntry != NULL  && aRhsEntry != NULL )
+        {
+        if ((aLhsEntry->Caption() != aRhsEntry->Caption())||(aLhsEntry->IconFileName() != aRhsEntry->IconFileName() )||(aLhsEntry->NumOfAppIcons() != aRhsEntry->NumOfAppIcons()))
+        return ETrue;
+        else 
+        return EFalse;
+        }
+    else
+        {
+        if(aLhsEntry == NULL && aRhsEntry == NULL)
+            return EFalse;
+        else return ETrue;
+        }
+    }
+
+TBool CScrTestStep::NotEqualL(
+        const RPointerArray<Usif::CServiceInfo>& aLhsEntry,
+        const RPointerArray<Usif::CServiceInfo>& aRhsEntry) const
+    {
+    TInt result(EFalse);
+    if (aLhsEntry.Count() != aRhsEntry.Count())
+        result = ETrue;
+
+    else
+        {
+        for (TInt i = 0; i < aLhsEntry.Count(); i++)
+            {
+            // Compare Uids
+            if (aLhsEntry[i]->Uid() != aRhsEntry[i]->Uid())
+                {
+                result = ETrue;
+                break;
+                }
+
+            // Compare Opaque Data Array
+            RPointerArray<Usif::COpaqueData> lhsOpaqueData =
+                    aLhsEntry[i]->OpaqueData();
+            CleanupResetAndDestroyPushL(lhsOpaqueData);
+            RPointerArray<Usif::COpaqueData> rhsOpaqueData =
+                    aRhsEntry[i]->OpaqueData();
+            CleanupResetAndDestroyPushL(rhsOpaqueData);
+            if (lhsOpaqueData.Count() != rhsOpaqueData.Count())
+                {
+                CleanupStack::Pop(2, &lhsOpaqueData);
+                result = ETrue;
+                break;
+                }
+            else
+                {
+                for (TInt j = 0; j < rhsOpaqueData.Count(); j++)
+                    {
+                    if (lhsOpaqueData[j]->Language()
+                            != rhsOpaqueData[j]->Language()
+                            || lhsOpaqueData[j]->OpaqueData()
+                                    != rhsOpaqueData[j]->OpaqueData())
+                        {
+                        CleanupStack::Pop(2, &lhsOpaqueData);
+                        result = ETrue;
+                        break;
+                        }
+                    }
+                }
+            CleanupStack::Pop(2, &lhsOpaqueData);
+
+            // Data Entry
+            RPointerArray<Usif::CDataType> aLhsDataEntry =
+                    aLhsEntry[i]->DataTypes();
+            CleanupResetAndDestroyPushL(aLhsDataEntry);
+            RPointerArray<Usif::CDataType> aRhsDataEntry =
+                    aRhsEntry[i]->DataTypes();
+            CleanupResetAndDestroyPushL(aRhsDataEntry);
+            if (aLhsDataEntry.Count() != aRhsDataEntry.Count())
+                {
+                CleanupStack::Pop(2, &aLhsDataEntry);
+                result = ETrue;
+                break;
+                }
+            else
+                {
+                for (TInt j = 0; j < aLhsDataEntry.Count(); j++)
+                    {
+                    if (aLhsDataEntry[j]->Priority()
+                            != aRhsDataEntry[j]->Priority()
+                            || aLhsDataEntry[j]->Type()
+                                    != aRhsDataEntry[j]->Type())
+                        {
+                        CleanupStack::Pop(2, &aLhsDataEntry);
+                        result = ETrue;
+                        break;
+                        }
+                    }
+                }
+            CleanupStack::Pop(2, &aLhsDataEntry);
+            }
+        }
+    return result;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscraccessor/inc/tscraccessor_client.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* SCR Accessor - client interface
+*
+*/
+
+
+/**
+ @file 
+ @test
+ @internalComponent
+*/
+
+#ifndef TSCRACCESSOR_CLIENT_H
+#define TSCRACCESSOR_CLIENT_H
+
+#include <e32std.h>
+#include <usif/scr/scr.h>
+
+
+class RScrAccessor : public RSessionBase
+	{
+public:
+	enum TAccessorOperationType
+		{
+		EAddNonLocalizedSoftwareType,
+		EAddLocalizedSoftwareType,
+		EAddSofwtareTypeWithoutMimeTypes,
+		EAddLocalizedSoftwareTypeWithDifferentPluginUid,
+		EAddLocalizedSoftwareTypeWithExtraName,
+		EAddLocalizedSoftwareTypeWithMissingName,
+		EAddLocalizedSoftwareTypeWithExtraMime,
+		EAddLocalizedSoftwareTypeWithMissingMime,
+		EAddMultipleSidWithLauncherExecutable
+		};
+	
+	enum TAccessorOperationResult
+		{
+		EOpSucessful,
+		EOpFailSwTypeNotFound,
+		EOpFailUnexpectedPluginUid,
+		EOpFailUnexpectedMimeTypeNum,
+		EOpFailReturnedUnexpectedMimeType,
+		EOpFailSwTypeStillExists
+		};
+public: 
+	TInt Connect();
+
+	/**
+	 	Adds a new software type name to the SCR database. 
+	 	The properties of the software type are chosen by the server.
+		
+		@param aOpType The type of the software type adding operation. For example, add a software type with localized names.
+		@param aOpResult Specific information about the result of the operation.
+		@param aSpentTimeInMillisecond The time spent to perform this operation.
+	 */
+	void AddSoftwareTypeL(TAccessorOperationType aOpType, TAccessorOperationResult& aOpResult, TInt& aSpentTimeInMillisecond);
+	
+	/**
+		Deletes a sofware type name entry and all its mime types from the registry.
+		The server decides which software type will be deleted.
+		
+		@param aOpResult Specific information about the result of the operation.				
+		@param aSpentTimeInMillisecond The time spent to perform this operation.
+	 */
+	void DeleteSoftwareTypeL(TAccessorOperationResult& aOpResult, TInt& aSpentTimeInMillisecond);
+	
+	/**
+		Deletes a given file from the system.
+		This function is intended to mainly delete TCB files.
+		
+		@param aFilePath The full path of the file being deleted.
+		@return KErrNone if successful, otherwise one of the other system-wide error codes.
+	 */
+	TInt DeleteFile(const TDesC& aFilePath);
+	
+	/**
+		Copies a given file into a destination file.
+		This function is intended to mainly copy TCB files.
+			
+		@param aSourceFilePath Path indicating the file to be copied.
+		@param aDestinationFilePath Path indicating the directory into which the file is to be copied.
+		@return KErrNone if successful, otherwise one of the other system-wide error codes.
+	 */
+	TInt CopyFile(const TDesC& aSourceFilePath, const TDesC& aDestinationFilePath);
+	};
+
+#endif	// TSCRACCESSOR_CLIENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscraccessor/inc/tscraccessor_common.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* SCR Accessor - shared client/server definitions
+*
+*/
+
+
+/**
+ @file 
+ @test
+ @internalComponent
+*/
+
+#include <e32std.h>
+
+_LIT(KScrAccessServerName, "ScrAcessorServer");
+_LIT(KScrAccessServerBinary, "tscraccessor");		// EXE name
+const TUid KScrAccessServerUid3 = {0x10202DCA};
+
+enum TScrAccessMessages
+	{
+	EAddSoftwareType,
+	EDeleteSoftwareType,
+	EDeleteFile,
+	ECopyFile
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscraccessor/inc/tscraccessor_server_session.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Scr Acessor - server and session classes
+*
+*/
+
+
+/**
+ @file 
+ @test
+ @internalComponent
+*/
+
+#ifndef TSCRACCESSOR_SERVER_SESSION_H
+#define TSCRACCESSOR_SERVER_SESSION_H
+
+#include <e32base.h>
+#include <usif/scr/scr.h>
+
+//////////////////////// Server declarations /////////////////////////
+
+enum TScrAccessPanic
+	{
+	EPanicBadDescriptor,
+	EPanicIllegalFunction
+	};
+
+void PanicClient(const RMessagePtr2& aMessage, TScrAccessPanic aPanic);
+
+class CScrAccessServer : public CServer2
+	{
+public:
+	static CServer2* NewLC();
+	virtual ~CScrAccessServer();
+	void AddSession();
+	void DropSession();
+	inline Usif::RSoftwareComponentRegistry& ScrSession();
+private:
+	CScrAccessServer();
+	void ConstructL();
+	CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
+private:
+	TInt iSessionCount;
+	Usif::RSoftwareComponentRegistry iScrSession;
+	};
+
+inline Usif::RSoftwareComponentRegistry& CScrAccessServer::ScrSession()
+	{
+	return iScrSession;
+	}
+
+//////////////////////// Session declarations /////////////////////////
+
+class CScrAccessSession : public CSession2
+	{
+public:
+	CScrAccessSession();
+	void CreateL();
+private:
+	~CScrAccessSession();
+	inline CScrAccessServer& Server();
+	void ServiceL(const RMessage2& aMessage);
+	void ServiceError(const RMessage2& aMessage, TInt aError);
+private:
+	RMessagePtr2 iReceiveMsg;
+	};
+
+inline CScrAccessServer& CScrAccessSession::Server()
+	{return *static_cast<CScrAccessServer*>(const_cast<CServer2*>(CSession2::Server()));}
+
+#endif	// TSCRACCESSOR_SERVER_SESSION_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscraccessor/source/tscraccessor_client.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Scr Accessor - client interface implementation
+*
+*/
+
+
+/**
+ @file 
+ @test
+ @internalComponent
+*/
+ 
+#include "tscraccessor_client.h"
+#include "tscraccessor_common.h"
+
+static TInt StartScrAccessServer()
+	{
+	const TUidType serverUid(KNullUid, KNullUid, KScrAccessServerUid3);
+	RProcess server;
+	TInt err = server.Create(KScrAccessServerBinary, KNullDesC, serverUid);
+	if (err != KErrNone)
+		{
+		return err;
+		}
+	TRequestStatus stat;
+	server.Rendezvous(stat);
+	if (stat != KRequestPending)
+		{
+		server.Kill(0);		// abort startup
+		}
+	else
+		{
+		server.Resume();	// logon OK - start the server
+		}
+	User::WaitForRequest(stat);		// wait for start or death
+	// we can't use the 'exit reason' if the server panicked as this
+	// is the panic 'reason' and may be '0' which cannot be distinguished
+	// from KErrNone
+	err = (server.ExitType() == EExitPanic) ? KErrGeneral : stat.Int();
+	server.Close();
+	return err;
+	}
+
+//
+// Connect to the server, attempting to start it if necessary
+//
+TInt RScrAccessor::Connect()
+	{
+	TInt retry = 2;
+	for (;;)
+		{
+		TInt err = CreateSession(KScrAccessServerName, TVersion(0, 0, 0), 2);
+		if (err != KErrNotFound && err != KErrServerTerminated)
+			{
+			return err;
+			}
+		if (--retry == 0)
+			{
+			return err;
+			}
+		err = StartScrAccessServer();
+		if (err != KErrNone && err != KErrAlreadyExists)
+			{
+			return err;
+			}
+		}
+	}
+
+void RScrAccessor::AddSoftwareTypeL(TAccessorOperationType aOpType, TAccessorOperationResult& aOpResult, TInt& aSpentTimeInMillisecond)
+	{
+	TPckg<TAccessorOperationResult> opResult(aOpResult);
+	TPckg<TInt> time(aSpentTimeInMillisecond);
+	User::LeaveIfError(SendReceive(EAddSoftwareType, TIpcArgs(aOpType, &opResult, &time)));
+	}
+
+void RScrAccessor::DeleteSoftwareTypeL(TAccessorOperationResult& aOpResult, TInt& aSpentTimeInMillisecond)
+	{
+	TPckg<TAccessorOperationResult> opResult(aOpResult);
+	TPckg<TInt> time(aSpentTimeInMillisecond);
+	User::LeaveIfError(SendReceive(EDeleteSoftwareType, TIpcArgs(&opResult, &time)));
+	}
+
+TInt RScrAccessor::DeleteFile(const TDesC& aFilePath)
+	{
+	return SendReceive(EDeleteFile, TIpcArgs(&aFilePath));
+	}
+
+TInt RScrAccessor::CopyFile(const TDesC& aSourceFilePath, const TDesC& aDestinationFilePath)
+	{
+	return SendReceive(ECopyFile, TIpcArgs(&aSourceFilePath, &aDestinationFilePath));
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscraccessor/source/tscraccessor_server_session.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,470 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Scr Accessor - server and implementation
+*
+*/
+
+
+/**
+ @file 
+ @test
+ @internalComponent
+*/
+
+#include "tscraccessor_server_session.h"
+#include "tscraccessor_common.h"
+#include "tscraccessor_client.h"
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "screntries_internal.h"
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <scs/cleanuputils.h>
+#include <usif/usiferror.h>
+#include <usif/scr/screntries_platform.h>
+using namespace Usif;
+
+/////////////////////// Utility functions //////////////////////////////
+void StartTimer(TTime& aTimer)
+	{
+	aTimer.HomeTime();
+	}
+
+TInt StopTimer(TTime aStartTimer)
+	{
+	TTime endTime;
+	endTime.HomeTime();
+		
+	TTimeIntervalMicroSeconds duration = endTime.MicroSecondsFrom(aStartTimer);
+	TInt actualDuration = I64INT(duration.Int64())/1000; // in millisecond
+	return actualDuration;
+	}
+
+//////////////////////// Server implementation /////////////////////////
+
+CServer2* CScrAccessServer::NewLC()
+	{
+	CScrAccessServer* self=new(ELeave) CScrAccessServer;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CScrAccessServer::CScrAccessServer()
+	:CServer2(0, ESharableSessions)
+	{
+	}
+
+CScrAccessServer::~CScrAccessServer()
+	{
+	iScrSession.Close();
+	}
+
+void CScrAccessServer::ConstructL()
+	{
+	StartL(KScrAccessServerName);
+	}
+
+CSession2* CScrAccessServer::NewSessionL(const TVersion&, const RMessage2&) const
+	{
+	return new(ELeave) CScrAccessSession();
+	}
+
+void CScrAccessServer::AddSession()
+	{
+	++iSessionCount;
+	}
+
+void CScrAccessServer::DropSession()
+	{
+	--iSessionCount;
+	if(!iSessionCount)
+		CActiveScheduler::Stop();
+	}
+
+
+//////////////////////// Session implementation /////////////////////////
+CScrAccessSession::CScrAccessSession()
+	{
+	}
+
+void CScrAccessSession::CreateL()
+	{
+	Server().AddSession();
+	}
+
+CScrAccessSession::~CScrAccessSession()
+	{
+	Server().DropSession();
+	}
+
+HBufC* ReadDescFromMessageLC(const RMessage2& aMessage, TInt aSlot)
+	{
+	TInt len = aMessage.GetDesLengthL(aSlot);
+	HBufC* desc = HBufC::NewLC(len);
+	TPtr ptrDesc(desc->Des());
+	aMessage.ReadL(aSlot, ptrDesc);
+	return desc;
+	}
+
+void VerifySoftwareTypeAdditionL(TInt& aError, RScrAccessor::TAccessorOperationResult& aOpResult, RSoftwareComponentRegistry& aScrSession, const TDesC& aMimeType, TUid aExpectedPluginUid)
+	{
+	// Do verification, there is no error until this step
+	if(KErrNone == aError)
+		{ // if adding software type operation is successful, check if the software type has really been added to teh sCR.
+		  // Get the plugin uid of the newly added MIME type
+		TUid retrievedPluginUid;
+		TRAP(aError, retrievedPluginUid = aScrSession.GetPluginUidL(aMimeType));
+		if(KErrNone == aError)
+			{ // if the plugin uid is found, then compare it with the expected one.
+			if(retrievedPluginUid != aExpectedPluginUid)
+				aOpResult = RScrAccessor::EOpFailUnexpectedPluginUid;
+			}
+		else if(KErrNotFound == aError)
+			aOpResult = RScrAccessor::EOpFailSwTypeNotFound;
+		// if the returned error is different from KErrNone and KErrNotFound, pass it to the client.
+		}
+	}
+
+void GenerateTestDataL(RPointerArray<HBufC>& aMimeTypes, const TDesC& aBaseMimeTypeName, TInt aMimeTypeNum, RPointerArray<CLocalizedSoftwareTypeName>& aLocalizedSwTypeNames, const TDesC& aBaseSwTypeName, TInt aSwTypesNum)
+	{
+	RBuf buf;
+	buf.CreateL(aBaseMimeTypeName.Length() + 3); // 3 is extra bytes to append number to the buffer
+	buf.CleanupClosePushL();
+	buf.Copy(aBaseMimeTypeName);
+	
+	for(TInt i=0; i<aMimeTypeNum; ++i)
+		{
+		buf.AppendNum(i);
+		HBufC *name = buf.AllocLC();
+		aMimeTypes.AppendL(name);
+		CleanupStack::Pop(name);
+		buf.SetLength(buf.Length()-1);
+		}
+	buf.Close();
+	
+	buf.CreateL(aBaseSwTypeName.Length() + 3);
+	buf.Copy(aBaseSwTypeName);
+	
+	for(TInt i=0; i<aSwTypesNum; ++i)
+		{
+		buf.AppendNum(i);
+		CLocalizedSoftwareTypeName *localizedName = CLocalizedSoftwareTypeName::NewL(buf, TLanguage(i+1));
+		CleanupStack::PushL(localizedName); // Use NewL for coverage
+		aLocalizedSwTypeNames.AppendL(localizedName);
+		CleanupStack::Pop(localizedName); // ownership is transferred
+		}
+	CleanupStack::PopAndDestroy(&buf);
+	}
+
+TInt AddSoftwareTypeL(RSoftwareComponentRegistry& aScrSession, const TDesC& aUniqueSwTypeName, TUid aSifPluginUid, RArray<TCustomAccessInfo> aInstallerSids, const TDesC& aBaseMimeTypeName, TInt aMimeTypeNum, const TDesC& aBaseSwTypeName, TInt aSwTypesNum, const TDesC& aLauncherExecutable, RScrAccessor::TAccessorOperationResult& aOpResult)
+	{
+	RPointerArray<HBufC> mimeTypesArray;
+	CleanupResetAndDestroyPushL(mimeTypesArray);
+	RPointerArray<CLocalizedSoftwareTypeName> localizedSwNames;
+	CleanupResetAndDestroyPushL(localizedSwNames);
+						
+	GenerateTestDataL(mimeTypesArray, aBaseMimeTypeName, aMimeTypeNum, localizedSwNames, aBaseSwTypeName, aSwTypesNum);
+	
+	RPointerArray<CLocalizedSoftwareTypeName> *plocalizedSwNames = 	&localizedSwNames;
+	if(!aSwTypesNum)
+		plocalizedSwNames = NULL;
+	
+	HBufC *mimeType2BChecked (0);
+	if(mimeTypesArray.Count() > 0)
+		mimeType2BChecked = mimeTypesArray[0]->AllocLC();
+	else
+		mimeType2BChecked = KNullDesC().AllocLC();
+	
+	Usif::CSoftwareTypeRegInfo* swType = Usif::CSoftwareTypeRegInfo::NewL(aUniqueSwTypeName);
+	CleanupStack::PushL(swType);
+	swType->SetSifPluginUid(aSifPluginUid);
+	for(TInt i=0;i<aInstallerSids.Count(); ++i)
+		{
+		swType->SetCustomAccessL(aInstallerSids[i]);
+		}
+	if(aMimeTypeNum)
+	    {
+	    for(TInt i=0;i<mimeTypesArray.Count(); ++i)
+	        {
+	        swType->SetMimeTypeL(mimeTypesArray[i]->Des());
+	        }
+        }
+	
+	swType->SetLauncherExecutableL(aLauncherExecutable);
+	if(plocalizedSwNames)
+	    {
+	    for(TInt i=0;i<plocalizedSwNames->Count(); ++i)
+	        {
+	        swType->SetLocalizedSoftwareTypeNameL(plocalizedSwNames->operator [](i)->Locale(), plocalizedSwNames->operator [](i)->NameL());
+	        }
+	    }
+	
+	TRAPD(err, aScrSession.AddSoftwareTypeL(*swType));
+	VerifySoftwareTypeAdditionL(err, aOpResult, aScrSession, *mimeType2BChecked, aSifPluginUid);
+	CleanupStack::PopAndDestroy(4, &mimeTypesArray); // mimeTypesArray, localizedSwNames, mimeType2BChecked
+	return err;
+	}
+
+void CScrAccessSession::ServiceL(const RMessage2& aMessage)
+	{
+	TInt err(0);
+	TTime timer;
+	StartTimer(timer);
+	TInt actualTestDuration(0);
+	
+	RScrAccessor::TAccessorOperationResult opResult = RScrAccessor::EOpSucessful;
+	
+	TScrAccessMessages f = static_cast<TScrAccessMessages>(aMessage.Function());
+	
+	if(EAddSoftwareType == f || EDeleteSoftwareType == f)
+		{
+		User::LeaveIfError(Server().ScrSession().Connect());
+		// create transaction on SCR for mutable operations
+		Server().ScrSession().CreateTransactionL();
+		}
+	
+	switch (f)
+		{
+		case EAddSoftwareType:
+			{
+			RScrAccessor::TAccessorOperationType opType = static_cast<RScrAccessor::TAccessorOperationType>(aMessage.Int0());
+			
+			TUid localizedSifPluginUid = {0xA01B7222};
+			RArray<TCustomAccessInfo> locSidArray;
+			CleanupClosePushL(locSidArray);
+			               
+			TCustomAccessInfo id1(TSecureId(0x10285BC9), static_cast<TAccessMode>(1));
+			locSidArray.AppendL(id1);
+			                    
+			_LIT(KMimeTypeBaseNameLocalized, "test_mimetype_localizedinstaller");
+			_LIT(KSwTypeBaseLocalizableName, "test_localizedinstaller_name");
+			_LIT(KSwTypeUniqueNameLocalized, "test_localizedinstaller_uniquename");
+								
+			switch(opType)
+				{
+				case RScrAccessor::EAddNonLocalizedSoftwareType:
+					{	
+					TUid sifPluginUid = {0xA01B7211};
+			
+					RArray<TCustomAccessInfo> sidArray;
+					CleanupClosePushL(sidArray);
+					    
+					TCustomAccessInfo id1(TSecureId(0x10285BC9), static_cast<TAccessMode>(1));
+					TCustomAccessInfo id2(TSecureId(0xAAEEDD11), static_cast<TAccessMode>(1));
+					sidArray.AppendL(id1);
+					sidArray.AppendL(id2);
+					    
+					_LIT(KMimeTypeBaseName, "test_mimetype_nonlocalizedinstaller");
+					_LIT(KSwTypeUniqueName, "test_nonlocalizedinstaller_uniquename");
+										
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueName, sifPluginUid, sidArray,  KMimeTypeBaseName, 2, KNullDesC, 0, KNullDesC, opResult);
+					CleanupStack::PopAndDestroy(&sidArray);
+					break;
+					}
+				case RScrAccessor::EAddLocalizedSoftwareType:
+					{
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 2, KNullDesC, opResult);
+					break;
+					}
+				case RScrAccessor::EAddSofwtareTypeWithoutMimeTypes:
+					{
+					TUid sifPluginUid = {0xA01B7333};
+					RArray<TCustomAccessInfo> sidArray;
+					CleanupClosePushL(sidArray);
+					                    
+					TCustomAccessInfo id1(TSecureId(0x10285BC9), static_cast<TAccessMode>(1));
+					sidArray.AppendL(id1);	
+					_LIT(KSwTypeUniqueName, "test_nomimeinstaller_uniquename");
+					
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueName, sifPluginUid, sidArray, KNullDesC, 0, KNullDesC, 0, KNullDesC, opResult);
+					CleanupStack::PopAndDestroy(&sidArray);
+					break;
+					} 
+				case RScrAccessor::EAddLocalizedSoftwareTypeWithDifferentPluginUid:
+					{
+					TUid localizedDifferentSifPluginUid = {0xCC1B7333};
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedDifferentSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 2, KNullDesC, opResult);
+					if(KErrAlreadyExists == err)
+						err = KErrNone; // The expected result is KErrAlreadyExists. So return no error to the test client.
+					break;
+					}
+				case RScrAccessor::EAddLocalizedSoftwareTypeWithExtraName:
+					{
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 3, KNullDesC, opResult);
+					if(KErrAlreadyExists == err)
+						err = KErrNone; // The expected result is KErrAlreadyExists. So return no error to the test client.
+					break;
+					}
+				case RScrAccessor::EAddLocalizedSoftwareTypeWithMissingName:
+					{
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 1, KNullDesC, opResult);
+					if(KErrAlreadyExists == err)
+						err = KErrNone; // The expected result is KErrAlreadyExists. So return no error to the test client.
+					break;
+					}
+				case RScrAccessor::EAddLocalizedSoftwareTypeWithExtraMime:
+					{
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 3, KSwTypeBaseLocalizableName, 2, KNullDesC, opResult);
+					if(KErrAlreadyExists == err)
+						err = KErrNone; // The expected result is KErrAlreadyExists. So return no error to the test client.
+					break;
+					}
+				case RScrAccessor::EAddLocalizedSoftwareTypeWithMissingMime:
+					{
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 1, KSwTypeBaseLocalizableName, 2, KNullDesC, opResult);
+					if(KErrAlreadyExists == err)
+						err = KErrNone; // The expected result is KErrAlreadyExists. So return no error to the test client.
+					break;
+					}
+				case RScrAccessor::EAddMultipleSidWithLauncherExecutable:
+				    {
+				    TUid sifPluginUid = {0xA01B7212};
+				    _LIT(KSwTypeUniqueName, "test_uniquename");
+				    _LIT(KMimeTypeBaseName, "test_mimetype");
+				    _LIT(KLauncherExecutable, "LauncherExecutable");
+				    RArray<TCustomAccessInfo> sidArray;
+				    CleanupClosePushL(sidArray);
+				                            
+				    TCustomAccessInfo id1(TSecureId(0x10285BC9), static_cast<TAccessMode>(1));
+				    TCustomAccessInfo id2(TSecureId(0xAAEEDD11), static_cast<TAccessMode>(1));
+				    TCustomAccessInfo id3(TSecureId(0xAAEEEE11), static_cast<TAccessMode>(1));
+
+				    sidArray.AppendL(id1);
+				    sidArray.AppendL(id2);
+				    sidArray.AppendL(id3);
+				    
+				    err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueName, sifPluginUid, sidArray, KMimeTypeBaseName, 1, KNullDesC, 0, KLauncherExecutable, opResult);
+				    CleanupStack::PopAndDestroy(&sidArray);
+				    break;
+				    }
+				} // switch(opType)
+			CleanupStack::PopAndDestroy(&locSidArray);
+			actualTestDuration = StopTimer(timer);
+			break;
+			}
+		case EDeleteSoftwareType:
+			{
+			_LIT(KSwTypeUniqueName, "test_nonlocalizedinstaller_uniquename");
+			_LIT(KMimeTypeBaseName, "test_mimetype_nonlocalizedinstaller");
+			RPointerArray<HBufC> deletedMimeTypes;
+			CleanupResetAndDestroyPushL(deletedMimeTypes);
+			TRAP(err, Server().ScrSession().DeleteSoftwareTypeL(KSwTypeUniqueName,deletedMimeTypes));
+			actualTestDuration = StopTimer(timer);
+				
+			// If the delete operation is successfull, check the returned MIME types deleted are as expected.
+			// If the delete operation fails, just return the error code to teh client.
+			if(KErrNone == err) 
+				{
+				RPointerArray<HBufC> mimeTypesArray;
+				CleanupResetAndDestroyPushL(mimeTypesArray);
+				RPointerArray<CLocalizedSoftwareTypeName> localizedSwNames;
+				GenerateTestDataL(mimeTypesArray, KMimeTypeBaseName, 2, localizedSwNames, KNullDesC, 0);
+
+				TInt expectedMimeTypesCount = mimeTypesArray.Count();
+				TInt retrievedMimeTypesCount = deletedMimeTypes.Count();
+				if(retrievedMimeTypesCount != expectedMimeTypesCount)
+					opResult = RScrAccessor::EOpFailUnexpectedMimeTypeNum;
+				else
+					{
+					for(TInt i=0; i<retrievedMimeTypesCount; ++i)
+						{
+						if(*(deletedMimeTypes[i]) != *(mimeTypesArray[i]))
+							opResult = RScrAccessor::EOpFailUnexpectedMimeTypeNum;;
+						} // for
+					} // if-else
+				
+				TRAP(err, Server().ScrSession().GetPluginUidL(KSwTypeUniqueName));
+				if(KErrNone == err)
+					{
+					// The plugin UID has been retrieved successfully. This is unexpected result.
+					opResult = RScrAccessor::EOpFailSwTypeStillExists;
+					}
+				else if(KErrSifUnsupportedSoftwareType == err)
+					{
+					// The plugin UID couldn't be found as expected. As the operation is successfull,
+					// return KErrNone to the client
+					err = KErrNone;
+					}
+				CleanupStack::PopAndDestroy(&mimeTypesArray);
+				} 
+			CleanupStack::PopAndDestroy(&deletedMimeTypes);
+			break;
+			}
+		case EDeleteFile:
+			{
+			HBufC *file = ReadDescFromMessageLC(aMessage, 0);
+			RFs fs;
+			User::LeaveIfError(fs.Connect());
+			CleanupClosePushL(fs);
+			err = fs.Delete(*file);
+			CleanupStack::PopAndDestroy(2, file); // file, fs
+			break;
+			}
+		case ECopyFile:
+			{
+			HBufC *sourceFile = ReadDescFromMessageLC(aMessage, 0);
+			HBufC *targetFile = ReadDescFromMessageLC(aMessage, 1);
+			RFs fs;
+			User::LeaveIfError(fs.Connect());
+			CleanupClosePushL(fs);
+			
+			CFileMan* fileManager = CFileMan::NewL(fs);
+			CleanupStack::PushL(fileManager);
+			err = fileManager->Copy(*sourceFile, *targetFile, 0);
+
+			// Reset the read-only attribute on the copied file
+			TTime time;
+			User::LeaveIfError(fileManager->Attribs(*targetFile, 0, KEntryAttReadOnly, time));		
+			CleanupStack::PopAndDestroy(4, sourceFile); // sourceFile, targetFile, fs, fileManager
+			break;
+			}
+		default:
+			{
+			PanicClient(aMessage, EPanicIllegalFunction);
+			break;
+			}
+		}
+	
+	if(EAddSoftwareType == f || EDeleteSoftwareType == f)
+		{
+		// create transaction on SCR for mutable operations
+		Server().ScrSession().CommitTransactionL();
+		
+		TPckg<TInt> timePckg(actualTestDuration);
+		TPckg<RScrAccessor::TAccessorOperationResult> opResultPckg(opResult);
+			
+		if(EDeleteSoftwareType == f)
+			{
+			aMessage.WriteL(0, opResultPckg);
+			aMessage.WriteL(1, timePckg);
+			}
+		else if (EAddSoftwareType == f)
+			{
+			aMessage.WriteL(1, opResultPckg);
+			aMessage.WriteL(2, timePckg);
+			}
+		}
+
+	aMessage.Complete(err);
+	}
+
+void CScrAccessSession::ServiceError(const RMessage2& aMessage, TInt aError)
+	{
+	if (aError == KErrBadDescriptor)
+		PanicClient(aMessage, EPanicBadDescriptor);
+	CSession2::ServiceError(aMessage,aError);
+	}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscraccessor/source/tscraccessor_startup.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Scr Accessor - entry point
+*
+*/
+
+
+/**
+ @file 
+ @test
+ @internalComponent
+*/
+
+#include <e32std.h>
+#include <e32base.h>
+
+#include "tscraccessor_server_session.h"
+#include "tscraccessor_common.h"
+
+//
+// Perform server initialisation, in particular creation of the scheduler and 
+// server and then run the scheduler
+//
+static void RunServerL()
+	{
+	// naming the server thread after the server helps to debug panics
+	User::LeaveIfError(RThread().RenameMe(KScrAccessServerName));
+	//
+	// create and install the active scheduler we need
+	CActiveScheduler* sched = new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(sched);
+	CActiveScheduler::Install(sched);
+	//
+	// create the server (leave it on the cleanup stack)
+	CScrAccessServer::NewLC();
+
+	//
+	// Initialisation complete, now signal the client
+	RProcess::Rendezvous(KErrNone);
+
+	//
+	// Ready to run
+	CActiveScheduler::Start();
+	//
+	// Cleanup the server and scheduler
+	CleanupStack::PopAndDestroy(2, sched);
+	}
+
+//
+// Server process entry-point
+//
+TInt E32Main()
+	{
+	__UHEAP_MARK;
+
+	//
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	TInt r = KErrNoMemory;
+	if (cleanup)
+		{
+		TRAP(r, RunServerL());
+		delete cleanup;
+		}
+	//
+
+	__UHEAP_MARKEND;
+	return r;
+	}
+
+void PanicClient(const RMessagePtr2& aMessage, TScrAccessPanic aPanic)
+	{
+	_LIT(KPanic,"ScrAccessServer");
+	aMessage.Panic(KPanic,aPanic);		// Also completes the message
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrapparc/inc/appreginfoapparcsteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the basic test step for the Software Component Registry test harness
+*
+*/
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+#ifndef APPREGINFOAPPARCSTEPS_H_
+#define APPREGINFOAPPARCSTEPS_H_
+
+#include <scs/oomteststep.h>
+#include <usif/scr/scr.h>
+
+using namespace Usif;
+
+class CScrApparcTestServer;
+
+_LIT(KScrApplicationRegistrationViewSubsessionStep,"ScrGetApplicationRegistrationView");
+_LIT(KScrMultipleSubsessionsForAppRegistryViewStep,"ScrMultipleSubsessionsForAppRegistryView");
+
+class CScrGetApplicationRegistrationViewSubsessionStep : public COomTestStep
+/**
+    TEF test step which exercises the SCR GetApplicationRegistrationView interface
+ */
+    {
+public:
+    CScrGetApplicationRegistrationViewSubsessionStep();
+    ~CScrGetApplicationRegistrationViewSubsessionStep();
+    
+    void MarkAsPerformanceStep();
+    
+protected:    
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();   
+    
+    // Utility Functions
+    void PrintErrorL(const TDesC& aMsg, TInt aErrNum,...);
+    
+    static void GenerateIndexedAttributeNameL(TDes& aInitialAttributeName, TInt aIndex);
+    TBool GetUidFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TUid& aUid);
+    // For reading data from ini file
+    Usif::CApplicationRegistrationData* GetAppRegInfoFromConfigLC(HBufC* aConfigSection = NULL);
+    void GetAppOwnedFilesL(RPointerArray<HBufC>& aOwnedFileArray, HBufC* aConfigSection = NULL);
+    void GetAppServiceInfoL(RPointerArray<Usif::CServiceInfo>& aServiceInfoArray, HBufC* aConfigSection = NULL);
+    void GetAppLocalizableInfoL(RPointerArray<Usif::CLocalizableAppInfo>& aLocalizableAppInfoArray, HBufC* aConfigSection = NULL);
+    void GetAppOpaqueDataInfoL(RPointerArray<Usif::COpaqueData>& aAppOpaqueDataInfoArray, HBufC* aConfigSection = NULL);
+    void GetServiceOpaqueDataInfoL(RPointerArray<Usif::COpaqueData>& aServiceOpaqueDataInfoArray, TInt aServiceOpaqueDataInfoCount, TInt aStartingIndex, HBufC* aConfigSection = NULL);
+    TBool Get64BitIntegerFromConfigL(const TDesC& aConfigKeyName, TInt64& aRetVal,HBufC* aConfigsection = NULL);
+    CPropertyEntry* GetPropertyFromConfigLC(TBool aIsSingle, TInt aIndex, TBool aSupportLocalized, HBufC* aConfigsection = NULL);
+    void GetAppPropertiesL(RPointerArray<Usif::CPropertyEntry>& aAppPropertyArray, TBool aSupportLocalized, HBufC* aConfigSection = NULL );
+    void GetAppUidL(TUid& aAppUid, HBufC* aConfigsection = NULL);
+        
+    // For comparing data 
+    TBool CompareApplicationRegistrationDataL(Usif::CApplicationRegistrationData *aActualData, Usif::CApplicationRegistrationData *aExpectedData);
+    TBool CompareFileOwnershipInfo(RPointerArray<HBufC> aActualData, RPointerArray<HBufC> aExpectedData);
+    TBool CompareServiceInfoL(RPointerArray<Usif::CServiceInfo> aActualData,  RPointerArray<Usif::CServiceInfo> aExpectedData);
+    TBool CompareDataType(RPointerArray<Usif::CDataType> aActualData,  RPointerArray<Usif::CDataType> aExpectedData);
+    TBool CompareLocalizableAppInfo(RPointerArray<Usif::CLocalizableAppInfo> aActualData,  RPointerArray<Usif::CLocalizableAppInfo> aExpectedData);
+    TBool CompareCaptionandIconInfo(const CCaptionAndIconInfo* aActualData, const CCaptionAndIconInfo* aExpectedData);
+    TBool CompareViewData(RPointerArray<Usif::CAppViewData> aActualData,  RPointerArray<Usif::CAppViewData> aExpectedData);
+    TBool CompareOpaqueDataL(RPointerArray<Usif::COpaqueData> aActualData,  RPointerArray<Usif::COpaqueData> aExpectedData);
+    
+    void GetApplicationRegistrationDataFromConfigL(RPointerArray<Usif::CApplicationRegistrationData>& aEntries);
+    
+    void StartTimer();
+    void StopTimerAndPrintResultL();
+    void PrintPerformanceLog(TTime aTime);
+    
+protected:    
+    Usif::RSoftwareComponentRegistry iScrSession;
+    TBool iIsPerformanceTest;
+    
+private:    
+    TTime iStartTime;
+    };
+
+
+class CScrMultipleSubsessionsForAppRegistryViewStep : public CScrGetApplicationRegistrationViewSubsessionStep
+/**
+    TEF test step which exercises the SCR CScrAddConcurrentApplicationRegistrationViewEntryStep interface
+ */
+    {
+public:
+    CScrMultipleSubsessionsForAppRegistryViewStep();
+    ~CScrMultipleSubsessionsForAppRegistryViewStep();
+    
+protected:      
+    void ImplTestStepPreambleL();
+    void ImplTestStepL();
+    void ImplTestStepPostambleL();
+    };
+
+#endif /* APPREGINFOAPPARCSTEPS_H_ */
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrapparc/inc/tscrapparcserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the test server of the Software Component Registry test harness
+*
+*/
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+#ifndef TSCRAPPARCSERVER_H_
+#define TSCRAPPARCSERVER_H_
+
+#include <test/testexecuteserverbase.h>
+
+_LIT(KScrApparcTestServerName, "tscrapparc");
+
+class CScrApparcTestServer : public CTestServer
+/**
+    Describes the test server for the SCR-Apparc test harness.
+ */
+    {
+public:
+    static CScrApparcTestServer* NewL();
+    virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+    ~CScrApparcTestServer();
+
+private:
+    TBool IsPerformanceTestStep(const TDesC& aStepName, TPtrC& aStrippedName);
+    };
+    
+#endif /* TSCRAPPARCSERVER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrapparc/source/appreginfoapparcsteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1312 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the test steps for component management APIs in the SCR
+*
+*/
+
+#include "appreginfoapparcsteps.h"
+#include "tscrdefs.h"
+#include <scs/cleanuputils.h>
+#include <barsread.h> 
+using namespace Usif;
+
+void CScrGetApplicationRegistrationViewSubsessionStep::PrintPerformanceLog(TTime aTime)
+    {
+    TDateTime timer = aTime.DateTime();
+    INFO_PRINTF6(_L("%S,%d:%d:%d:%d"), &KPerformanceTestInfo(), timer.Hour(), timer.Minute(), timer.Second(), timer.MicroSecond());
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::StartTimer()
+    {
+    iStartTime.HomeTime();
+    PrintPerformanceLog(iStartTime);
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::StopTimerAndPrintResultL()
+    {
+    TTime endTime;
+    endTime.HomeTime();
+    PrintPerformanceLog(endTime);
+    
+    TTimeIntervalMicroSeconds duration = endTime.MicroSecondsFrom(iStartTime);
+    TInt actualDuration = I64INT(duration.Int64())/1000; // in millisecond
+        
+    TInt maxDuration = 0;
+    if(!GetIntFromConfig(ConfigSection(), KMaxDurationName, maxDuration))
+        {
+        ERR_PRINTF2(_L("%S could not be found in configuration."), &KMaxDurationName());
+        User::Leave(KErrNotFound);
+        }
+    else
+        {
+        INFO_PRINTF3(_L("%S,%d"), &KMaxTestCaseDuration(), maxDuration);
+        INFO_PRINTF3(_L("%S,%d"), &KActualTestCaseDuration(), actualDuration);
+        }
+    
+    if(actualDuration <= maxDuration)
+        {
+        INFO_PRINTF2(_L("This test meets performance requirement (Duration=%d)."), actualDuration);
+        }
+    else
+        {
+        ERR_PRINTF2(_L("This test does not meet performance requirement (Duration=%d)."), actualDuration);
+        SetTestStepResult(EFail);
+        }
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GenerateIndexedAttributeNameL(TDes& aInitialAttributeName, TInt aIndex)
+    {
+    const TInt MAX_INT_STR_LEN = 8;
+    TBuf<MAX_INT_STR_LEN> integerAppendStr;
+    integerAppendStr.Format(_L("%d"), aIndex);
+    aInitialAttributeName.Append(integerAppendStr);
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppOwnedFilesL(RPointerArray<HBufC>& aOwnedFileArray,HBufC* aConfigSection)
+    {
+    TInt ownedFileCount = 0;
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+       configsection = ConfigSection().AllocL();
+    else
+       configsection = aConfigSection->AllocL();
+    
+    GetIntFromConfig(*configsection, _L("OwnedFileCount"), ownedFileCount);
+    for (TUint i = 0; i < ownedFileCount; ++i)
+        {
+        TPtrC tOwnedFileName;
+        TBuf<20> fileName;
+        fileName = KOwnedFileName;
+        GenerateIndexedAttributeNameL(fileName, i);
+        GetStringFromConfig(*configsection, fileName, tOwnedFileName);
+        HBufC* ownedFileName = tOwnedFileName.AllocLC();
+        aOwnedFileArray.AppendL(ownedFileName);
+        CleanupStack::Pop(ownedFileName);
+        }
+    delete configsection;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::GetUidFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TUid& aUid)
+    {
+    TInt val;
+    if(GetHexFromConfig(aSectName, aKeyName, val))
+        {
+        aUid = TUid::Uid(val);
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::PrintErrorL(const TDesC& aMsg, TInt aErrNum,...)
+    {
+    VA_LIST list;
+    VA_START(list, aErrNum);
+    
+    RBuf msgBuf;
+    msgBuf.CreateL(MAX_SCR_ERROR_MESSAGE_LENGTH);
+    msgBuf.CleanupClosePushL();
+    msgBuf.AppendFormatList(aMsg, list);
+    
+    ERR_PRINTF1(msgBuf);
+    SetTestStepResult(EFail);
+
+    CleanupStack::PopAndDestroy(&msgBuf);
+    User::Leave(aErrNum);
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppUidL(TUid& aAppUid, HBufC* aConfigSection)
+    {    
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+       configsection = ConfigSection().AllocL();
+    else
+       configsection = aConfigSection->AllocL();
+    
+    if (!GetUidFromConfig(*configsection, _L("AppUid"), aAppUid))
+        {
+        delete configsection;
+        PrintErrorL(_L("AppUid was not found!"), KErrNotFound);        
+        }    
+    INFO_PRINTF2(_L("AppUid is 0x%x"), aAppUid.iUid);
+    delete configsection;
+    }
+    
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppServiceInfoL(
+        RPointerArray<CServiceInfo>& aServiceInfoArray, HBufC* aConfigSection)
+    {
+    TInt serviceInfoCount = 0;
+    TInt totalOpaqueDataCount = 0;
+    TInt totalServiceDataTypeCount = 0;
+    HBufC* configsection;
+    if (aConfigSection == NULL)
+        configsection = ConfigSection().AllocL();
+    else
+        configsection = aConfigSection->AllocL();
+
+    GetIntFromConfig(*configsection, _L("ServiceInfoCount"),
+            serviceInfoCount);
+    for (TUint i = 0; i < serviceInfoCount; ++i)
+        {
+        // service Uid
+        TBuf<20> uid;
+        TUid serviceUid;
+        uid = KServiceUid;
+        GenerateIndexedAttributeNameL(uid, i);
+        GetUidFromConfig(*configsection, uid, serviceUid);
+
+        // service opaque data
+        RPointerArray<COpaqueData> serviceOpaqueDataInfoArray;
+        TBuf<27> servOpaqueDataCountStr;
+        servOpaqueDataCountStr = KServiceOpaqueDataInfoCount;
+        GenerateIndexedAttributeNameL(servOpaqueDataCountStr, i);
+        TInt serviceOpaqueDataInfoCount = 0;
+        GetIntFromConfig(*configsection, servOpaqueDataCountStr, serviceOpaqueDataInfoCount);
+        GetServiceOpaqueDataInfoL(serviceOpaqueDataInfoArray, serviceOpaqueDataInfoCount, totalOpaqueDataCount, configsection);
+        totalOpaqueDataCount += serviceOpaqueDataInfoCount;
+                
+        //GetServiceOpaqueDataInfoL(serviceOpaqueDataInfoArray);
+        //CleanupStack::PushL(&serviceOpaqueDataInfoArray);
+
+        // service data type
+        TBuf<21> serviceDataTypeCountString;
+        serviceDataTypeCountString = KServiceDataTypeCount;
+        GenerateIndexedAttributeNameL(serviceDataTypeCountString, i);
+        TInt serviceDataTypeCount = 0;
+        GetIntFromConfig(*configsection, serviceDataTypeCountString,
+                serviceDataTypeCount);
+        totalServiceDataTypeCount += serviceDataTypeCount;
+        RPointerArray<CDataType> serviceDataTypeArray;
+        for (TUint j = 0; j < serviceDataTypeCount; ++j)
+            {
+            TInt indexToRead = totalServiceDataTypeCount
+                    - serviceDataTypeCount + j;
+            TInt serviceDataTypePriority;
+            TPtrC serviceType;
+            TBuf<25> priority, type;
+            priority = KServiceDataTypePriority;
+            GenerateIndexedAttributeNameL(priority, indexToRead);
+            GetIntFromConfig(*configsection, priority,
+                    serviceDataTypePriority);
+            type = KServiceDataType;
+            GenerateIndexedAttributeNameL(type, indexToRead);
+            GetStringFromConfig(*configsection, type, serviceType);
+            CDataType* serviceDataType = CDataType::NewLC(
+                    serviceDataTypePriority, serviceType);
+            serviceDataTypeArray.AppendL(serviceDataType);
+            CleanupStack::Pop(serviceDataType);
+            }
+
+        CServiceInfo* serviceInfo = CServiceInfo::NewLC(serviceUid,
+                serviceOpaqueDataInfoArray, serviceDataTypeArray);
+        aServiceInfoArray.AppendL(serviceInfo);
+        CleanupStack::Pop(serviceInfo);
+        }
+    delete configsection;
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppLocalizableInfoL(RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoArray, HBufC* aConfigSection)
+    {
+    TInt localizableAppInfoCount = 0;
+    TInt totalViewDataCount=0;
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+      configsection = ConfigSection().AllocL();
+    else
+      configsection = aConfigSection->AllocL();
+    
+    GetIntFromConfig(*configsection, _L("LocalizableAppInfoCount"), localizableAppInfoCount);
+    for (TUint i = 0; i < localizableAppInfoCount; ++i)
+        {
+        TPtrC locShortCaption;
+        TLanguage locLanguage = (TLanguage)0;
+        TInt lang;
+        TPtrC locGroupName;
+        TBuf<20> shortCaption, language, groupName, viewDataCount;
+        shortCaption = KLocShortCaption;
+        GenerateIndexedAttributeNameL(shortCaption, i);
+        GetStringFromConfig(*configsection, shortCaption, locShortCaption);
+        language = KLocAppLanguage;
+        GenerateIndexedAttributeNameL(language, i);
+        GetIntFromConfig(*configsection, language, lang);
+        locLanguage = static_cast<TLanguage>(lang);
+        groupName = KLocGroupName;
+        GenerateIndexedAttributeNameL(groupName, i);
+        GetStringFromConfig(*configsection, groupName, locGroupName);
+        
+        TPtrC locCaption;
+        TPtrC locIconFileName;
+        TInt locNoOfAppIcons = 0;
+        TBuf<20> caption, iconFileName, noOfAppIcons;
+        caption = KLocCaption;
+        GenerateIndexedAttributeNameL(caption, i);
+        GetStringFromConfig(*configsection, caption, locCaption);
+        iconFileName = KLocIconFileName;
+        GenerateIndexedAttributeNameL(iconFileName, i);
+        GetStringFromConfig(*configsection, iconFileName, locIconFileName);
+        noOfAppIcons = KLocNumberOfAppIcons;
+        GenerateIndexedAttributeNameL(noOfAppIcons, i);
+        GetIntFromConfig(*configsection, noOfAppIcons, locNoOfAppIcons);
+        CCaptionAndIconInfo* captionAndIconInfo = NULL;
+        if(locCaption.Length() != 0 || locIconFileName.Length() !=0 || locNoOfAppIcons != 0)
+          {
+           captionAndIconInfo = CCaptionAndIconInfo::NewLC(locCaption,locIconFileName,locNoOfAppIcons);
+          }
+        else
+          CleanupStack::PushL(captionAndIconInfo);
+        
+        TInt viewDataCountForLocale = 0;
+        viewDataCount=KViewDataCount;
+        GenerateIndexedAttributeNameL(viewDataCount, i);
+        GetIntFromConfig(*configsection, viewDataCount , viewDataCountForLocale);
+        totalViewDataCount+=viewDataCountForLocale;
+        RPointerArray<CAppViewData> viewDataArray;
+        for (TUint i = 0; i < viewDataCountForLocale; ++i)
+            {
+            TInt viewScreenMode = 0 ,vUid,indexToRead;
+            TBuf<20> uid, screenMode;
+            uid = KVwUid;
+            indexToRead=totalViewDataCount-viewDataCountForLocale+i;
+            GenerateIndexedAttributeNameL(uid, indexToRead);
+            GetIntFromConfig(*configsection, uid, vUid);
+            TUid viewUid = TUid::Uid(vUid);
+            screenMode = KVwScreenMode;
+            GenerateIndexedAttributeNameL(screenMode, indexToRead);
+            GetIntFromConfig(*configsection, screenMode, viewScreenMode);
+            
+            TPtrC viewCaption;
+            TPtrC viewIconFileName;
+            TInt viewNoOfAppIcons = 0;
+            TBuf<20> caption, iconFileName, noOfAppIcons;
+            caption = KVwCaption;
+            GenerateIndexedAttributeNameL(caption, indexToRead);
+            GetStringFromConfig(*configsection, caption, viewCaption);
+            iconFileName = KVwIconFileName;
+            GenerateIndexedAttributeNameL(iconFileName, indexToRead);
+            GetStringFromConfig(*configsection, iconFileName, viewIconFileName);
+            noOfAppIcons = KVwNumberOfAppIcons;
+            GenerateIndexedAttributeNameL(noOfAppIcons, indexToRead);
+            GetIntFromConfig(*configsection, noOfAppIcons, viewNoOfAppIcons);
+            CCaptionAndIconInfo* viewCaptionAndIconInfo = NULL;
+            if(viewCaption.Length() != 0 || viewIconFileName.Length() !=0 || viewNoOfAppIcons != 0)
+              {
+               viewCaptionAndIconInfo = CCaptionAndIconInfo::NewLC(viewCaption,viewIconFileName,viewNoOfAppIcons);
+              }
+            else
+              CleanupStack::PushL(viewCaptionAndIconInfo);          
+            
+            CAppViewData* viewData = CAppViewData::NewLC(viewUid,viewScreenMode,viewCaptionAndIconInfo);
+            viewDataArray.AppendL(viewData);
+            CleanupStack::Pop(2, viewCaptionAndIconInfo);
+            }
+
+        CLocalizableAppInfo* localizableAppInfo = CLocalizableAppInfo::NewLC(locShortCaption,locLanguage,locGroupName,captionAndIconInfo,viewDataArray);
+        aLocalizableAppInfoArray.AppendL(localizableAppInfo);
+        CleanupStack::Pop(localizableAppInfo);
+        CleanupStack::Pop(captionAndIconInfo);
+        }
+    delete configsection;
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppOpaqueDataInfoL(RPointerArray<Usif::COpaqueData>& aAppOpaqueDataInfoArray, HBufC* aConfigSection)
+    {
+    TInt appOpaqueDataInfoCount = 0;
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+      configsection = ConfigSection().AllocL();
+    else
+      configsection = aConfigSection->AllocL();
+
+    GetIntFromConfig(*configsection, _L("AppOpaqueDataInfoCount"), appOpaqueDataInfoCount);
+    for (TUint i = 0; i < appOpaqueDataInfoCount; ++i)
+        {
+        TBuf<16> localeAttr;
+        localeAttr = KAppOpaqueDataLocale;
+        TInt locale = 0;
+        GenerateIndexedAttributeNameL(localeAttr, i);
+        GetIntFromConfig(*configsection, localeAttr, locale);
+                    
+        TBuf<14> opaqueDataAttr;
+        opaqueDataAttr = KAppOpaqueData;
+        TPtrC opaqueData;
+        GenerateIndexedAttributeNameL(opaqueDataAttr, i);
+        GetStringFromConfig(*configsection, opaqueDataAttr, opaqueData);
+
+        TPtrC8 blobOpaqueData((TUint8*)opaqueData.Ptr(), opaqueData.Length()*2);
+
+        COpaqueData* appOpaqueData = COpaqueData::NewLC(blobOpaqueData, (TLanguage) locale);
+        aAppOpaqueDataInfoArray.AppendL(appOpaqueData);
+        CleanupStack::Pop(1, appOpaqueData);
+        }
+    delete configsection;
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetServiceOpaqueDataInfoL(RPointerArray<Usif::COpaqueData>& aServiceOpaqueDataInfoArray, TInt aServiceOpaqueDataInfoCount, TInt aStartingIndex, HBufC* aConfigSection)
+    {
+    for (TUint i = 0; i < aServiceOpaqueDataInfoCount; ++i)
+        {
+        TBuf<20> localeAttr;
+        localeAttr = KServiceOpaqueLocale;
+        TInt locale = 0;
+        TInt indexToRead = i + aStartingIndex;
+        GenerateIndexedAttributeNameL(localeAttr, indexToRead);
+        GetIntFromConfig(*aConfigSection, localeAttr, locale);
+                    
+        TBuf<18> opaqueDataAttr;
+        opaqueDataAttr = KServiceOpaqueData;
+        TPtrC opaqueData;
+        GenerateIndexedAttributeNameL(opaqueDataAttr, indexToRead);
+        GetStringFromConfig(*aConfigSection, opaqueDataAttr, opaqueData);
+                
+        TPtrC8 blobOpaqueData((TUint8*)opaqueData.Ptr(), opaqueData.Length()*2);
+        COpaqueData* serviceOpaqueData = COpaqueData::NewLC(blobOpaqueData, (TLanguage) locale);
+        aServiceOpaqueDataInfoArray.AppendL(serviceOpaqueData);
+        CleanupStack::Pop(1, serviceOpaqueData);
+        }    
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::Get64BitIntegerFromConfigL(const TDesC& aConfigKeyName, TInt64& aRetVal,HBufC* aConfigSection)
+    {
+    TPtrC int64Str;
+    HBufC* configsection;
+        if(aConfigSection == NULL)
+            configsection = ConfigSection().AllocLC();
+        else
+            configsection = aConfigSection->AllocLC();
+    
+    if (!GetStringFromConfig(*configsection, aConfigKeyName, int64Str))
+        return EFalse;
+
+    TLex lex(int64Str);
+    User::LeaveIfError(lex.Val(aRetVal));
+    CleanupStack::PopAndDestroy(configsection);
+    return ETrue;
+    }
+
+CPropertyEntry* CScrGetApplicationRegistrationViewSubsessionStep::GetPropertyFromConfigLC(TBool aIsSingle, TInt aIndex, TBool aSupportLocalized,HBufC* aConfigSection)
+    {
+    // This function can be used for getting a single property, which is defined by attributes such as PropertyName etc.
+    // or a property in a set - in this case the properties would be PropertyType0, PropertyName0 etc.
+    // aIsSingle defines the working mode. aIndex applies only if aIsSingle is false
+    
+    // First, we need to generate the property name
+    TBuf<MAX_SCR_PARAM_LENGTH> propertyTypeParam, propertyNameParam, propertyValueParam, propertyLocaleParam;
+    propertyTypeParam = KPropertyTypeParam;
+    propertyNameParam = KPropertyNameParam;
+    propertyValueParam = KPropertyValueParam;
+    propertyLocaleParam = KPropertyLocaleParam;
+    if (!aIsSingle)
+        {
+        GenerateIndexedAttributeNameL(propertyTypeParam, aIndex);
+        GenerateIndexedAttributeNameL(propertyNameParam, aIndex);
+        GenerateIndexedAttributeNameL(propertyValueParam, aIndex);
+        GenerateIndexedAttributeNameL(propertyLocaleParam, aIndex);
+        }
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+        configsection = ConfigSection().AllocLC();
+    else
+        configsection = aConfigSection->AllocLC();
+    
+    TPtrC propertyName;
+    if (!GetStringFromConfig(*configsection, propertyNameParam, propertyName))
+        {
+        ERR_PRINTF2(_L("The property name param %S could not be found in configuration."), &propertyNameParam);
+        User::Leave(KErrNotFound);
+        }
+    
+    TInt propertyTypeInt;
+    if (!GetIntFromConfig(*configsection, propertyTypeParam, propertyTypeInt))
+        {
+        ERR_PRINTF2(_L("The property type param %S could not be found in configuration."), &propertyTypeParam);
+        User::Leave(KErrNotFound);
+        }
+    
+    CPropertyEntry::TPropertyType propertyType = static_cast<CPropertyEntry::TPropertyType>(propertyTypeInt);
+    
+    CPropertyEntry* propertyEntry(NULL);
+    switch (propertyType)
+        {
+        case CPropertyEntry::EBinaryProperty:
+        case CPropertyEntry::ELocalizedProperty:
+            {
+            TPtrC propertyStrValue;
+            if (!GetStringFromConfig(*configsection, propertyValueParam, propertyStrValue))
+                {
+                ERR_PRINTF2(_L("The property value param %S could not be found in configuration."), &propertyValueParam);
+                User::Leave(KErrNotFound);
+                }
+            if(!aSupportLocalized || propertyType == CPropertyEntry::EBinaryProperty)
+                {
+                HBufC8* buffer8Bit = ConvertBufferTo8bitL(propertyStrValue);
+                CleanupStack::PushL(buffer8Bit);
+                propertyEntry = CBinaryPropertyEntry::NewL(propertyName, *buffer8Bit);
+                CleanupStack::PopAndDestroy(buffer8Bit);
+                break;
+                }
+            // Handle ELocalProperty case
+            TLanguage locale;
+            TInt localeParam;
+            if (!GetIntFromConfig(*configsection, propertyLocaleParam, localeParam))
+                {
+                ERR_PRINTF2(_L("The property locale param %S could not be found in configuration."), &propertyLocaleParam);
+                User::Leave(KErrNotFound);  
+                }
+            locale = static_cast<TLanguage>(localeParam);
+            propertyEntry = CLocalizablePropertyEntry::NewL(propertyName, propertyStrValue, locale);
+            break;                      
+            }
+        case CPropertyEntry::EIntProperty:
+            {
+            TInt64 int64Value;
+            if (!Get64BitIntegerFromConfigL(propertyValueParam, int64Value, configsection))
+                {
+                ERR_PRINTF2(_L("The integer param %S could not be found in configuration."), &propertyValueParam);
+                User::Leave(KErrNotFound);
+                }
+            propertyEntry = CIntPropertyEntry::NewL(propertyName, int64Value);
+            break;
+            }           
+        }
+    CleanupStack::PopAndDestroy(configsection);
+    CleanupStack::PushL(propertyEntry);
+    return propertyEntry;
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppPropertiesL(RPointerArray<CPropertyEntry>& aAppPropertyArray,TBool aSupportLocalized, HBufC* aConfigSection)
+    {
+    TInt propertiesCount = 0;  
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+      configsection = ConfigSection().AllocLC();
+    else
+      configsection = aConfigSection->AllocLC();
+     
+    if (!GetIntFromConfig(*configsection, KPropertiesCountParamName, propertiesCount))
+       {
+        INFO_PRINTF1(_L("Properties count was not found!"));
+        CleanupStack::PopAndDestroy(configsection);
+        return;
+        }
+    
+    if (propertiesCount < 0)
+        {
+        INFO_PRINTF1(_L("Properties count was negative !"));
+        CleanupStack::PopAndDestroy(configsection);
+        return;
+        }
+    
+    for (TInt i = 0; i < propertiesCount; ++i)
+        {
+        CPropertyEntry *propertyEntry = GetPropertyFromConfigLC(EFalse, i, aSupportLocalized,configsection);
+        User::LeaveIfError(aAppPropertyArray.Append(propertyEntry));
+        CleanupStack::Pop(propertyEntry);
+        }
+    CleanupStack::PopAndDestroy(configsection);
+    }
+
+CApplicationRegistrationData* CScrGetApplicationRegistrationViewSubsessionStep::GetAppRegInfoFromConfigLC(HBufC* aConfigSection )
+    {
+    TUid appUid;
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+       configsection = ConfigSection().AllocLC();
+    else
+       configsection = aConfigSection->AllocLC();
+    
+    GetAppUidL(appUid, configsection);
+
+    TPtrC appFile; 
+    
+    GetStringFromConfig(*configsection, _L("AppFile"), appFile);
+    
+    TInt attributes = 0, hidden = 0, embeddability = 0, newFile = 0, launch = 0, defScreenNo = 0;
+    GetIntFromConfig(*configsection, _L("Attributes"), attributes);
+    GetIntFromConfig(*configsection, _L("Hidden"), hidden);
+    GetIntFromConfig(*configsection, _L("Embeddability"), embeddability);
+    GetIntFromConfig(*configsection, _L("NewFile"), newFile);
+    GetIntFromConfig(*configsection, _L("Launch"), launch);
+
+    TPtrC groupName; 
+    GetStringFromConfig(*configsection, _L("GroupName"), groupName);
+    
+    GetIntFromConfig(*configsection, _L("DefaultScreenNumber"), defScreenNo);
+    
+    RPointerArray<HBufC> ownedFileArray;
+    GetAppOwnedFilesL(ownedFileArray, configsection);
+    CleanupStack::PushL(&ownedFileArray);
+    RPointerArray<CServiceInfo> serviceInfoArray;
+    GetAppServiceInfoL(serviceInfoArray, configsection);
+    CleanupStack::PushL(&serviceInfoArray);
+    RPointerArray<CLocalizableAppInfo> localizableAppInfoArray;
+    GetAppLocalizableInfoL(localizableAppInfoArray, configsection);
+    CleanupStack::PushL(&localizableAppInfoArray);
+    RPointerArray<COpaqueData> appOpaqueDataInfoArray;
+    GetAppOpaqueDataInfoL(appOpaqueDataInfoArray, configsection);
+    CleanupStack::PushL(&appOpaqueDataInfoArray);
+    RPointerArray<CPropertyEntry> appPropertyArray;
+    GetAppPropertiesL(appPropertyArray,ETrue, configsection);
+    CleanupStack::PushL(&appPropertyArray);
+    INFO_PRINTF1(_L("Going to create CApplicationRegistrationData obj."));
+    
+    TApplicationCharacteristics appCharacteristics;
+    appCharacteristics.iAttributes = attributes;
+    appCharacteristics.iAppIsHidden = hidden;
+    appCharacteristics.iEmbeddability = TApplicationCharacteristics::TAppEmbeddability(embeddability);
+    appCharacteristics.iGroupName = groupName;
+    appCharacteristics.iLaunchInBackground = launch;
+    CApplicationRegistrationData* appRegData = CApplicationRegistrationData::NewLC(ownedFileArray, serviceInfoArray, localizableAppInfoArray, appPropertyArray, appOpaqueDataInfoArray, appUid, appFile, appCharacteristics, defScreenNo);
+    INFO_PRINTF1(_L("Created CApplicationRegistrationData obj."));
+    CleanupStack::Pop(6);
+    CleanupStack::PopAndDestroy(configsection);
+    CleanupStack::PushL(appRegData);
+    return appRegData;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareFileOwnershipInfo(RPointerArray<HBufC> aActualData, RPointerArray<HBufC> aExpectedData)
+    {
+    TInt expectedAppOwnedFilesCount = aExpectedData.Count();
+    TInt actualAppOwnedFilesCount = aActualData.Count();
+    
+    if(actualAppOwnedFilesCount != expectedAppOwnedFilesCount)
+        {        
+        INFO_PRINTF1(_L("The no of expected owned files by an app is not same as the no of actual owned files"));
+        return EFalse;
+        }
+    
+    for (TInt i=0 ; i < expectedAppOwnedFilesCount ; i++)
+        {
+       if(!aExpectedData.Find(aActualData[i]))
+          {
+          INFO_PRINTF1(_L("The expected owned file name is not same as the actual file  name"));
+          return EFalse;      
+          }
+        }    
+    return ETrue;    
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareDataType(RPointerArray<Usif::CDataType> aActualData,  RPointerArray<Usif::CDataType> aExpectedData)
+    {
+    TInt expectedDataTypeCount = aExpectedData.Count();
+    TInt actualDataTypeCount = aActualData.Count();
+           
+    if(actualDataTypeCount != expectedDataTypeCount)
+      {        
+      INFO_PRINTF1(_L("The no of expected data types for a service is not same as the no of actual recieved data types"));
+      return EFalse;
+      }
+    for(TInt i = 0 ; i < expectedDataTypeCount ; i++)
+        {
+        if(aExpectedData[i]->Priority()!= aActualData[i]->Priority())
+           {
+           INFO_PRINTF1(_L("The expected priority for a service data type is not same as the actual recieved"));
+           return EFalse;      
+           }
+        
+        if(!(aExpectedData[i]->Type() == aActualData[i]->Type()))
+           {
+           INFO_PRINTF1(_L("The expected type for a service data type is not same as the actual recieved"));
+           return EFalse;      
+           }
+        }
+    return ETrue;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareOpaqueDataL(RPointerArray<Usif::COpaqueData> aActualData,  RPointerArray<Usif::COpaqueData> aExpectedData)
+    {
+    TInt expectedCount = aExpectedData.Count();
+    TInt actualCount = aActualData.Count();
+           
+    if(actualCount != expectedCount)
+      {        
+
+      INFO_PRINTF1(_L("The no of expected opaque data is not same as the no of actual opaque data"));
+      INFO_PRINTF2(_L("The expected data : %d"), expectedCount);
+      INFO_PRINTF2(_L("The actual data : %d"), actualCount);
+      return EFalse;
+      }
+    for(TInt i = 0 ; i < expectedCount ; i++)
+        {
+        if(aExpectedData[i]->Language()!= aActualData[i]->Language())
+           {
+           INFO_PRINTF1(_L("The expected lang for a service data type is not same as the actual recieved"));
+           return EFalse;      
+           }
+        
+        TBool compareWithDb = EFalse;
+        GetBoolFromConfig(ConfigSection(), _L("CompareWithDb"), compareWithDb);
+        
+        if(compareWithDb)
+            {
+            TResourceReader reader;
+            reader.SetBuffer(&aActualData[i]->OpaqueData());
+            HBufC16* actualDataBuffer = reader.ReadHBufCL();
+            CleanupStack::PushL(actualDataBuffer);
+            
+            TPtrC16 ptr16(reinterpret_cast<const TUint16*>(aExpectedData[i]->OpaqueData().Ptr()),(aExpectedData[i]->OpaqueData().Length()/2));
+            HBufC16* expectedDataBuffer = ptr16.AllocLC();
+            
+            if(*actualDataBuffer != *expectedDataBuffer)
+               {                
+               INFO_PRINTF1(_L("The expected data for a service opqdata is not same as the actual recieved"));
+               INFO_PRINTF2(_L("The expected data %S"), expectedDataBuffer);
+               INFO_PRINTF2(_L("The Actual data %S"), actualDataBuffer);
+               CleanupStack::PopAndDestroy(2, actualDataBuffer);
+               return EFalse;      
+               }
+            CleanupStack::PopAndDestroy(2, actualDataBuffer);
+
+            }
+        else
+            {
+            if(aActualData[i]->OpaqueData() != aExpectedData[i]->OpaqueData())
+               {                
+               INFO_PRINTF1(_L("The expected data for a service opqdata is not same as the actual recieved"));
+               INFO_PRINTF2(_L("The expected data %S"), &aExpectedData[i]->OpaqueData());
+               INFO_PRINTF2(_L("The Actual data %S"), &aActualData[i]->OpaqueData());
+               return EFalse;      
+               }
+            }
+        }
+    return ETrue;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareServiceInfoL(RPointerArray<Usif::CServiceInfo> aActualData,  RPointerArray<Usif::CServiceInfo> aExpectedData)
+    {
+    TInt expectedServicesCount = aExpectedData.Count();
+    TInt actualServicesCount = aActualData.Count();
+       
+    if(actualServicesCount != expectedServicesCount)
+      {        
+      INFO_PRINTF1(_L("The no of expected services for an app is not same as the no of actual services"));
+      return EFalse;
+      }
+    
+    for (TInt i=0 ; i < expectedServicesCount ; i++)
+      {
+        // Compare uids
+      if(aExpectedData[i]->Uid() != aActualData[i]->Uid())
+      {
+      INFO_PRINTF2(_L("Expected Uid 0x%08x"), aExpectedData[i]->Uid());
+      INFO_PRINTF2(_L("Actual Uid 0x%08x"), aActualData[i]->Uid());
+      INFO_PRINTF1(_L("The expected service uid is not same as the actual service uid"));
+      return EFalse;      
+      }
+
+      // Compare Opaque data
+      if(!CompareOpaqueDataL(aActualData[i]->OpaqueData(), aExpectedData[i]->OpaqueData()))
+        {
+        return EFalse;      
+        }
+      
+      //compare data type
+      if(!CompareDataType(aActualData[i]->DataTypes(), aExpectedData[i]->DataTypes()))
+          {
+          return EFalse;
+          }     
+      }
+    return ETrue; 
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareCaptionandIconInfo(const CCaptionAndIconInfo* aActualData,const CCaptionAndIconInfo* aExpectedData)
+    {       
+    if(aExpectedData == NULL && aActualData == NULL)
+      {
+      return ETrue;  
+      }
+    
+    if((aExpectedData == NULL && aActualData != NULL) || (aExpectedData != NULL && aActualData == NULL))
+      {
+      INFO_PRINTF1(_L("The caption and icon info  for a localizable is either not present ot not expected"));
+      return EFalse;   
+      }               
+            
+    if(aActualData->NumOfAppIcons() != aExpectedData->NumOfAppIcons())
+      {
+      INFO_PRINTF1(_L("The expected no od icons for a locale is not same as the actual recieved"));
+      return EFalse;
+      }
+           
+    if(aActualData->Caption().Compare(aExpectedData->Caption()))
+      {
+      INFO_PRINTF1(_L("The expected caption for a locale is not same as the actual recieved"));
+      return EFalse;
+      }
+       
+    if(aActualData->IconFileName().Compare(aExpectedData->IconFileName()))
+      {
+      INFO_PRINTF2(_L("Expected Icon File %S"), &aExpectedData->IconFileName());
+      INFO_PRINTF2(_L("Actual Icon File %S"), &aActualData->IconFileName());
+      INFO_PRINTF1(_L("The expected icon file name is not same as the actual recieves"));
+      return EFalse;
+      }
+    return ETrue;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareViewData(RPointerArray<Usif::CAppViewData> aActualData,  RPointerArray<Usif::CAppViewData> aExpectedData)
+    {
+    TInt expectedViewDataCount = aExpectedData.Count();
+    TInt actualViewDataCount = aActualData.Count();
+              
+    if(actualViewDataCount != expectedViewDataCount)
+      {        
+      INFO_PRINTF1(_L("The no of expected localizable info for an app is not same as the no of actual recieved"));
+      return EFalse;
+      }
+    for (TInt i=0 ; i < expectedViewDataCount ; i++)
+        {
+        if(aExpectedData[i]->ScreenMode() != aActualData[i]->ScreenMode())
+          {
+          INFO_PRINTF1(_L("The expected screen mode for a view is not same as the actual recieved"));
+          return EFalse;      
+          }              
+                 
+        if(aExpectedData[i]->Uid() != aActualData[i]->Uid())
+          {
+          INFO_PRINTF1(_L("The expected uid for a view is not same as the actual recieved"));
+          return EFalse;      
+          } 
+           
+        //compare captionandicon info
+       if(!CompareCaptionandIconInfo(aActualData[i]->CaptionAndIconInfo(),aExpectedData[i]->CaptionAndIconInfo()))
+          {
+          return EFalse;
+          }
+        }
+    return ETrue;                      
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareLocalizableAppInfo(RPointerArray<Usif::CLocalizableAppInfo> aActualData,  RPointerArray<Usif::CLocalizableAppInfo> aExpectedData)
+    {
+    TInt expectedLocalizableCount = aExpectedData.Count();
+    TInt actualLocalizableCount = aActualData.Count();
+          
+    if(actualLocalizableCount != expectedLocalizableCount)
+       {        
+       INFO_PRINTF1(_L("The no of expected localizable info for an app is not same as the no of actual recieved"));
+       return EFalse;
+       }
+    for (TInt i=0 ; i < expectedLocalizableCount ; i++)
+       {
+       if(aExpectedData[i]->ShortCaption().Compare(aActualData[i]->ShortCaption()))
+         {
+         INFO_PRINTF1(_L("The expected short caption for a localizable info is not same as the actual recieved"));
+         return EFalse;      
+         }
+       
+       if(aExpectedData[i]->GroupName().Compare(aActualData[i]->GroupName()))
+         {
+         INFO_PRINTF1(_L("The expected group name for a localizable info is not same as the actual recieved"));
+         return EFalse;      
+         }
+             
+       if(aExpectedData[i]->ApplicationLanguage() != aActualData[i]->ApplicationLanguage())
+         {
+         INFO_PRINTF1(_L("The expected locale for a localizable info is not same as the actual recieved"));
+         INFO_PRINTF2(_L("The expected language %d"), aExpectedData[i]->ApplicationLanguage());
+         INFO_PRINTF2(_L("The Actual language %d"), aActualData[i]->ApplicationLanguage());
+         return EFalse;      
+         } 
+       
+       //compare caption and icon info
+       if(!CompareCaptionandIconInfo(aActualData[i]->CaptionAndIconInfo(),aExpectedData[i]->CaptionAndIconInfo()))
+           {
+          return EFalse;
+           }
+       
+       // compare view data    
+       if(!CompareViewData(aActualData[i]->ViewDataList(), aExpectedData[i]->ViewDataList()))
+           {
+           return EFalse;
+           }
+       }
+    return ETrue;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareApplicationRegistrationDataL(
+        Usif::CApplicationRegistrationData *aActualData,
+        Usif::CApplicationRegistrationData *aExpectedData)
+    {
+    //comparing AppRegistrationInfo    
+    if (aActualData->AppUid() != aExpectedData->AppUid())
+        {
+        INFO_PRINTF2(_L("Actual AppUid is 0x%x"), aActualData->AppUid().iUid);
+        INFO_PRINTF2(_L("Expected AppUid is 0x%x"), aExpectedData->AppUid().iUid);
+        INFO_PRINTF1(_L("The expected App Uid is not same as the actual AppUid"));
+        return EFalse;
+        }
+
+    if (aActualData->AppFile().Compare(aExpectedData->AppFile()))
+        {
+        INFO_PRINTF2(_L("Expected app File %S"), &aExpectedData->AppFile());
+        INFO_PRINTF2(_L("Actual app File %S"), &aActualData->AppFile());
+        INFO_PRINTF1(_L("The expected App File is not same as the actual App File"));
+        return EFalse;
+        }
+
+    if (aActualData->Attributes() != aExpectedData->Attributes())
+        {
+        INFO_PRINTF1(_L("The expected App Attribute is not same as the actual App Attribute"));
+        return EFalse;
+        }
+
+    if (aActualData->Hidden() != aExpectedData->Hidden())
+        {
+        INFO_PRINTF1(_L("The expected Hidden Value is not same as the actual App Hidden Value"));
+        return EFalse;
+        }
+
+    if (aActualData->Embeddability() != aExpectedData->Embeddability())
+        {
+        INFO_PRINTF1(_L("The expected embeddability value is not same as the actual embeddability value"));
+        return EFalse;
+        }
+
+    if (aActualData->NewFile() != aExpectedData->NewFile())
+        {
+        INFO_PRINTF1(_L("The expected App NewFile Value is not same as the actual App NewFile Value"));
+        return EFalse;
+        }
+
+    if (aActualData->Launch() != aExpectedData->Launch())
+        {
+        INFO_PRINTF1(_L("The expected App Launch Value is not same as the actual App Launch Value"));
+        return EFalse;
+        }
+
+    if (aActualData->GroupName().Compare(aExpectedData->GroupName()))
+        {
+        INFO_PRINTF1(_L("The expected App Group Name is not same as the actual App Group Name"));
+        return EFalse;
+        }
+
+    if (aActualData->DefaultScreenNumber()
+            != aExpectedData->DefaultScreenNumber())
+        {
+        INFO_PRINTF1(_L("The expected App DefaultScreenNumber is not same as the actual App DefaultScreenNumber"));
+        return EFalse;
+        }
+
+    // Compare Opaque data
+    if (!CompareOpaqueDataL(aActualData->AppOpaqueData(),
+            aExpectedData->AppOpaqueData()))
+        {
+        return EFalse;
+        }
+
+    // comparing FileOwnershipInfo
+    if (!CompareFileOwnershipInfo(aActualData->OwnedFileArray(),
+            aExpectedData->OwnedFileArray()))
+        {
+        return EFalse;
+        }
+
+    // comparing  Service info
+    if (!CompareServiceInfoL(aActualData->ServiceArray(),
+            aExpectedData->ServiceArray()))
+        {
+        return EFalse;
+        }
+
+    //comparing localizable app info
+    if (!CompareLocalizableAppInfo(aActualData->LocalizableAppInfoList(),
+            aExpectedData->LocalizableAppInfoList()))
+        {
+        return EFalse;
+        }
+
+    return ETrue;
+    }
+
+//-----------------CScrGetApplicationRegistrationViewStep-------------
+
+CScrGetApplicationRegistrationViewSubsessionStep::CScrGetApplicationRegistrationViewSubsessionStep() 
+    {
+    
+    }
+
+CScrGetApplicationRegistrationViewSubsessionStep::~CScrGetApplicationRegistrationViewSubsessionStep()
+// Destructor.
+    {
+    iScrSession.Close();
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep:: MarkAsPerformanceStep()
+    {
+    iIsPerformanceTest = ETrue;
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::ImplTestStepPreambleL()
+    {
+    User::LeaveIfError(iScrSession.Connect());
+    }
+
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetApplicationRegistrationDataFromConfigL(RPointerArray<Usif::CApplicationRegistrationData>& aEntries)
+    {
+    TInt configSectionCount(0);
+    CApplicationRegistrationData *applicationRegistrationData = NULL;
+    TPtrC configSectionName(ConfigSection());
+    HBufC* cnfSecName = NULL;
+    
+    GetIntFromConfig(ConfigSection(), _L("AppRegEntriesConfigCount"), configSectionCount);          
+
+    for (TUint i = 0; i < configSectionCount; ++i)
+        {
+        TBuf<20> configSection = _L("configsection");
+        GenerateIndexedAttributeNameL(configSection, i);
+        GetStringFromConfig(ConfigSection(),configSection, configSectionName);
+        cnfSecName = configSectionName.AllocLC();
+        applicationRegistrationData = GetAppRegInfoFromConfigLC(cnfSecName);
+        aEntries.AppendL(applicationRegistrationData);
+        CleanupStack::Pop(applicationRegistrationData);
+        CleanupStack::PopAndDestroy(cnfSecName);
+        }  
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::ImplTestStepL()
+    {            
+    TInt locale;    
+    TInt expextedAppRegDataCount(0);
+    TInt actualAppRegDataCount(0);
+    TInt count = 0;
+    TInt remainingExpectedCount = 0;
+    TBool isFinish = EFalse;
+    TBool isError = EFalse;
+    TInt index = 0;
+      
+    RPointerArray<Usif::CApplicationRegistrationData> expectedAppRegData;
+    CleanupClosePushL(expectedAppRegData);
+    INFO_PRINTF1(_L("Read expected entries for verification "));
+    GetApplicationRegistrationDataFromConfigL(expectedAppRegData);
+    expextedAppRegDataCount = expectedAppRegData.Count();
+    remainingExpectedCount = expextedAppRegDataCount; 
+    
+    TInt noOfEntries(1);
+    GetIntFromConfig(ConfigSection(), _L("NoOfEntries"), noOfEntries);
+    
+    TInt noOfAppRegAppUid = 0;
+    TBuf<20> appRegAppUidName;
+    RArray<TUid> expectedAppRegAppUids;
+    CleanupClosePushL(expectedAppRegAppUids);
+
+    GetIntFromConfig(ConfigSection(), _L("AppRegAppUidCount"), noOfAppRegAppUid);
+    for (TUint i = 0; i < noOfAppRegAppUid; ++i)
+        {   
+        TUid appRegAppUid;
+        appRegAppUidName = _L("AppRegAppUid");
+        GenerateIndexedAttributeNameL(appRegAppUidName, i);
+        GetUidFromConfig(ConfigSection(), appRegAppUidName, appRegAppUid);
+        expectedAppRegAppUids.AppendL(appRegAppUid);
+        }
+    
+    TInt err = KErrNone;
+    RApplicationRegistryView subSession;
+    CleanupClosePushL(subSession);
+    if(GetIntFromConfig(ConfigSection(), _L("Locale"), locale))
+        {
+        if(expectedAppRegAppUids.Count())
+            {
+            TRAP(err,subSession.OpenViewL(iScrSession, expectedAppRegAppUids, (TLanguage)locale));
+            }
+        else
+            {
+            TRAP(err,subSession.OpenViewL(iScrSession, (TLanguage)locale));
+            }
+        if(KErrNone != err)
+            {
+            CleanupStack::PopAndDestroy(1,&subSession);
+            expectedAppRegAppUids.Close();
+            CleanupStack::Pop(2); //poping expectedAppRegAppUids expectedAppRegData            
+            expectedAppRegData.ResetAndDestroy();
+            User::Leave(err);
+            }
+        }
+    else
+        {
+        if(expectedAppRegAppUids.Count())
+            {
+            TRAP(err,subSession.OpenViewL(iScrSession, expectedAppRegAppUids));
+            }
+        else
+            {
+            TRAP(err,subSession.OpenViewL(iScrSession));
+            }
+        if(KErrNone != err)
+           {
+            CleanupStack::PopAndDestroy(1,&subSession);
+            expectedAppRegAppUids.Close();
+            CleanupStack::Pop(2); //poping expectedAppRegAppUids expectedAppRegData            
+            expectedAppRegData.ResetAndDestroy();
+            User::Leave(err);
+           }
+        }
+    
+    RPointerArray<CApplicationRegistrationData> actualAppRegData;
+    CleanupClosePushL(actualAppRegData);
+    
+    while(1)
+    {    
+    actualAppRegData.ResetAndDestroy();
+    
+    if(iIsPerformanceTest)
+        StartTimer();
+    TRAP(err,subSession.GetNextApplicationRegistrationInfoL(noOfEntries, actualAppRegData))
+    if(iIsPerformanceTest)
+        StopTimerAndPrintResultL();
+    
+    if( (KErrNone != err) || (iIsPerformanceTest && (EFail == TestStepResult())) )
+        {
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        expectedAppRegAppUids.Close();
+        CleanupStack::Pop(2); //poping expectedAppRegAppUids expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        User::Leave(err);
+        }
+    
+    actualAppRegDataCount = actualAppRegData.Count();
+    
+    if(remainingExpectedCount > noOfEntries)
+        {
+        count = noOfEntries;
+        remainingExpectedCount -=  count;        
+        }
+    else
+        {
+        count =  remainingExpectedCount;
+        isFinish = ETrue;
+        }
+        
+    if(isFinish)
+        {
+        break;
+        }
+    
+    if (count != actualAppRegDataCount)
+        {
+        INFO_PRINTF1(_L("actualAppRegDataCount is not same as expextedAppRegDataCount"));
+        SetTestStepResult(EFail);  
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        expectedAppRegAppUids.Close();
+        CleanupStack::Pop(2); //poping expectedAppRegAppUids expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        return;
+        }       
+    
+    for(TInt i=0 ; i < count ; i++)
+        {
+      if(!CompareApplicationRegistrationDataL(actualAppRegData[i], expectedAppRegData[index]))
+          {
+          SetTestStepResult(EFail);
+          isError = ETrue;
+          break;
+          }     
+      index++;
+        }
+    
+    if(isError)
+        {
+        break;
+        }    
+    }
+    
+    CleanupStack::Pop(1); //poping actualAppRegData 
+    actualAppRegData.ResetAndDestroy();
+    CleanupStack::PopAndDestroy(1,&subSession);
+    expectedAppRegAppUids.Close();
+    CleanupStack::Pop(2); //poping expectedAppRegAppUids expectedAppRegData
+    expectedAppRegData.ResetAndDestroy();
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::ImplTestStepPostambleL()
+    {
+    
+    }
+//-----------------CScrMultipleSubsessionsForAppRegistryViewStep-------------
+
+CScrMultipleSubsessionsForAppRegistryViewStep::CScrMultipleSubsessionsForAppRegistryViewStep() 
+    {
+    
+    }
+
+CScrMultipleSubsessionsForAppRegistryViewStep::~CScrMultipleSubsessionsForAppRegistryViewStep()
+// Destructor.
+    {
+    iScrSession.Close();
+    }
+
+void CScrMultipleSubsessionsForAppRegistryViewStep::ImplTestStepPreambleL()
+    {
+    User::LeaveIfError(iScrSession.Connect());
+    }
+
+void CScrMultipleSubsessionsForAppRegistryViewStep::ImplTestStepL()
+    {            
+    TInt locale;    
+    TInt actualAppRegDataCount(0);
+    TInt count = 0;
+    TInt index = 0;
+      
+    RPointerArray<Usif::CApplicationRegistrationData> expectedAppRegData;
+    CleanupClosePushL(expectedAppRegData);
+    INFO_PRINTF1(_L("Read expected entries for verification "));
+    GetApplicationRegistrationDataFromConfigL(expectedAppRegData);
+    
+    TInt noOfEntries(1);
+    GetIntFromConfig(ConfigSection(), _L("NoOfEntries"), noOfEntries);
+    
+    TInt noOfAppRegAppUid = 0;
+    TBuf<20> appRegAppUidName;
+    RArray<TUid> appUidsBeingQueried;
+    CleanupClosePushL(appUidsBeingQueried);
+
+    GetIntFromConfig(ConfigSection(), _L("AppRegAppUidCount"), noOfAppRegAppUid);
+    for (TUint i = 0; i < noOfAppRegAppUid; ++i)
+        {   
+        TUid appRegAppUid;
+        appRegAppUidName = _L("AppRegAppUid");
+        GenerateIndexedAttributeNameL(appRegAppUidName, i);
+        GetUidFromConfig(ConfigSection(), appRegAppUidName, appRegAppUid);
+        appUidsBeingQueried.AppendL(appRegAppUid);
+        }
+    
+    GetIntFromConfig(ConfigSection(), _L("Locale"), locale);
+    
+    TInt err = KErrNone;
+    RApplicationRegistryView subSession;
+    CleanupClosePushL(subSession);
+    
+    TRAP(err,subSession.OpenViewL(iScrSession, (TLanguage)locale));
+    if(KErrNone != err)
+        {
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData            
+        expectedAppRegData.ResetAndDestroy();
+        User::Leave(err);
+        }
+
+    RPointerArray<CApplicationRegistrationData> actualAppRegData;
+    CleanupClosePushL(actualAppRegData);
+    
+    actualAppRegData.ResetAndDestroy();
+    TRAP(err,subSession.GetNextApplicationRegistrationInfoL(noOfEntries, actualAppRegData));
+    if(KErrNone != err)
+        {
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        User::Leave(err);
+        }
+              
+    actualAppRegDataCount = actualAppRegData.Count();
+    count = noOfEntries;
+           
+    if (count != actualAppRegDataCount)
+        {
+        INFO_PRINTF1(_L("actualAppRegDataCount is not same as noOfEntries"));
+        SetTestStepResult(EFail);  
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        return;
+        }  
+       
+    for(TInt i=0 ; i < count ; i++)
+        {
+        // Compare the first "count" number of entries in the DB to the entries specified in the config file. 
+        if(!CompareApplicationRegistrationDataL(actualAppRegData[i], expectedAppRegData[index]))
+             {
+             SetTestStepResult(EFail);
+             break;
+             }     
+        index++;
+        }
+       
+    actualAppRegData.ResetAndDestroy();
+    TRAP(err,subSession.OpenViewL(iScrSession, appUidsBeingQueried, (TLanguage)locale));
+    if(KErrNone != err)
+        {
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData            
+        expectedAppRegData.ResetAndDestroy();
+        User::Leave(err);
+        }
+              
+    TRAP(err,subSession.GetNextApplicationRegistrationInfoL(noOfEntries, actualAppRegData))
+    if(KErrNone != err)
+        {
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        User::Leave(err);
+        }
+                    
+     actualAppRegDataCount = actualAppRegData.Count();
+     count = noOfAppRegAppUid;
+                  
+     if (count != actualAppRegDataCount)
+        {
+        INFO_PRINTF1(_L("actualAppRegDataCount is not same as noOfAppRegAppUid to be fetched"));
+        SetTestStepResult(EFail);  
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        return;
+        }     
+          
+     index = 0;
+     for(TInt i=0 ; i < count ; i++)
+        {
+         // Compare the entries fetched from the DB to the entries specified in the config file.
+        if(!CompareApplicationRegistrationDataL(actualAppRegData[i], expectedAppRegData[index]))
+           {
+           SetTestStepResult(EFail);
+           break;
+           }     
+        index++;
+        }
+
+    CleanupStack::Pop(1); //poping actualAppRegData 
+    actualAppRegData.ResetAndDestroy();
+    CleanupStack::PopAndDestroy(1,&subSession);
+    appUidsBeingQueried.Close();
+    CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData
+    expectedAppRegData.ResetAndDestroy();
+    }
+
+void CScrMultipleSubsessionsForAppRegistryViewStep::ImplTestStepPostambleL()
+    {
+    
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrapparc/source/tscrapparcserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the test server of the Software Component Registry test harness
+*
+*/
+
+#include "tscrapparcserver.h"             // TEF Test Server
+#include "appreginfoapparcsteps.h"
+
+
+CScrApparcTestServer* CScrApparcTestServer::NewL()
+/**
+    Called inside the MainL() function to create and start the CTestServer derived server.
+    @return Instance of the test server
+ */
+    {   
+    CScrApparcTestServer* server = new (ELeave) CScrApparcTestServer();
+    CleanupStack::PushL(server);    
+    server->ConstructL(KScrApparcTestServerName);
+    CleanupStack::Pop(server);
+    return server;
+    }
+    
+    
+CScrApparcTestServer::~CScrApparcTestServer()
+/**
+    Destructor.
+ */
+    {
+    
+    }
+
+
+LOCAL_C void MainL()
+    {
+    CActiveScheduler *scheduler = new(ELeave) CActiveScheduler;
+    CActiveScheduler::Install(scheduler);
+
+    CScrApparcTestServer* server = NULL;
+    
+    //Create the CScrApparcTestServer derived server
+    TRAPD(err,server = CScrApparcTestServer::NewL());
+    if(!err)
+       {
+       // Sync with the client and enter the active scheduler
+       RProcess::Rendezvous(KErrNone);
+       scheduler->Start();
+        }
+        
+    delete server;
+    delete scheduler;
+                
+    }
+
+
+GLDEF_C TInt E32Main()
+/**
+ * @return - Standard Epoc error code on process exit
+ * Process entry point. Called by client using RProcess API
+ */
+    {
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    if(cleanup == NULL)
+        {
+        return KErrNoMemory;
+        }
+    TRAPD(err,MainL());
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return err;
+    }
+
+TBool CScrApparcTestServer::IsPerformanceTestStep(const TDesC& aStepName, TPtrC& aStrippedName)
+    {
+    _LIT(KPerformanceStepKeyWord, "Performance-");
+    if (KErrNotFound == aStepName.FindF(KPerformanceStepKeyWord()))
+        {
+        aStrippedName.Set(aStepName);
+        return EFalse;
+        }
+    
+    TInt len = KPerformanceStepKeyWord().Length();
+    aStrippedName.Set(aStepName.Mid(len));
+    return ETrue;
+    }
+
+CTestStep* CScrApparcTestServer::CreateTestStep(const TDesC& aStepName)    
+    {    
+    CTestStep* testStep = NULL;
+    
+    TBool performanceStep = EFalse;
+    TPtrC strippedStepName;
+    performanceStep = IsPerformanceTestStep(aStepName, strippedStepName);
+    
+    if (strippedStepName == KScrApplicationRegistrationViewSubsessionStep)
+        testStep = new CScrGetApplicationRegistrationViewSubsessionStep();           
+    else if (strippedStepName == KScrMultipleSubsessionsForAppRegistryViewStep)
+        testStep = new CScrMultipleSubsessionsForAppRegistryViewStep();
+    
+    if (performanceStep && (strippedStepName == KScrApplicationRegistrationViewSubsessionStep))
+        {
+        // Currently we support performace testing for only CScrGetApplicationRegistrationViewSubsessionStep
+        CScrGetApplicationRegistrationViewSubsessionStep* scrTestStep = dynamic_cast<CScrGetApplicationRegistrationViewSubsessionStep*>(testStep);
+        scrTestStep->MarkAsPerformanceStep();
+        }
+    
+    return testStep;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrdatalayer/inc/datalayersteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the unit test steps for the SCR Data Layer.
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef TSCRDATALAYER_H
+#define TSCRDATALAYER_H
+
+#include "scrdatabase.h"
+#include "tscrdatalayerserver.h"
+
+#include <scs/oomteststep.h>
+using namespace Usif;
+
+// Constant used to name this test case
+_LIT(KScrDataLayerStep,"SCRDataLayer");
+
+class CScrTestDataLayer : public COomTestStep
+	{
+public:
+	CScrTestDataLayer(CScrDataLayerTestServer& aParent);
+	~CScrTestDataLayer();
+	void ImplTestStepPreambleL();
+	void ImplTestStepL();
+	void ImplTestStepPostambleL();
+	
+private:
+    void InsertRecordL(CStatement& aStmt, TInt aCol1, const TDesC& aCol2, const TDesC& aCol3);
+	void VerifyRecordL(CStatement& aStmt, TInt aCol1, const TDesC& aCol2, const TDesC& aCol3);
+	void ExecuteBadStatementL(CDatabase &aDb, TInt aTestNum, const TDesC& aStatement);
+	void PrintErrorL(const TDesC& aMsg, TInt aErrNum,...);
+	};
+
+#endif /* TSCRDATALAYER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrdatalayer/inc/tscrdatalayerserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the test server of the Software Component Registry data layer unit test
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef TSCRDATALAYERSERVER_H
+#define TSCRDATALAYERSERVER_H
+
+#include <test/testexecuteserverbase.h>
+
+_LIT(KScrDataLayerTestServerName, "tscrdatalayer");
+
+class CScrDataLayerTestServer : public CTestServer
+/**
+	Describes the test server for the SCR data layer unit test harness.
+ */
+	{
+public:
+	static CScrDataLayerTestServer* NewL();
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+	~CScrDataLayerTestServer();
+	};
+
+#endif /* TSCRSERVER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrdatalayer/scripts/data/nondb.db	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,2 @@
+This file is not a database file.
+It is used to simulate the non-database file.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrdatalayer/scripts/tscr_datalayer.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,79 @@
+//
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+// tscr_datalayer.script
+// Software Component Registry Tests
+
+PRINT Run Software Component Registry (SCR) - Data Layer Tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData // SharedData is used for sharing the componentid between test steps
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+
+// Delete the SCR Database file - this step ensures that the SCR DB is down before starting the test
+// As the Secure SQLite layer does not support two connections at the same time, this test step prevents this from happening
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+
+// Load Suite
+LOAD_SUITE tscrdatalayer
+
+// Create the private directory for tdatalayer
+RUN_UTILS MkDir c:\private\1028634C
+// Delete the SCR Database file if it has been left from the previous session
+RUN_UTILS DeleteFile c:\private\1028634C\scr.db
+// Copy the an empty scr db into the test harness private directory, so that the test harness won't require AllFiles.
+// Since tscrdatalayer test harness loads scrdatabase.dll, it cannot have AllFiles capability.
+RUN_UTILS CopyFile z:\tusif\tscr\data\scr-noversiontable.db c:\private\1028634C\scr.db
+RUN_UTILS MakeReadWrite c:\private\1028634C\scr.db
+// Copy the invalid scr db
+RUN_UTILS CopyFile z:\tusif\tscrdatalayer\data\nondb.db c:\private\1028634C\nonscr.db
+RUN_UTILS MakeReadWrite c:\private\1028634C\nonscr.db
+
+//********************** SEC-SCR-DataLayer : SCR DATA LAYER  **********************
+
+//! @SYMTestCaseID 		API-SEC-SCR-DataLayer-0001
+//! @SYMTestCaseDesc 		Unit tests for SCR Data Layer
+//! @SYMPREQ 			PREQ1269
+//! @SYMTestPriority 		Critical
+//! @SYMTestStatus   		3. Released
+//! @SYMTestActions 		Test Actions:
+//!				SEC-SCR-DataLayer-0001: Open database file
+//!				SEC-SCR-DataLayer-0002: Insert records
+//!				SEC-SCR-DataLayer-0003: Verify inserted records
+//!				SEC-SCR-DataLayer-0004: Update a record
+//!				SEC-SCR-DataLayer-0005: Verify updated record
+//!				SEC-SCR-DataLayer-0006: Delete a record
+//!                             SEC-SCR-DataLayer-0007: Verify the deleted record 	
+//!                             SEC-SCR-DataLayer-0008: Begin a transaction	
+//!                             SEC-SCR-DataLayer-0009: Insert a record while a transaction is active
+//!                             SEC-SCR-DataLayer-0010: Insert a second record while a transaction is active
+//!                             SEC-SCR-DataLayer-0011: Rollback the transaction.
+//!                             SEC-SCR-DataLayer-0012: Verify the rollback
+//!                             SEC-SCR-DataLayer-0013: Execute a bad SQL statement (1) 
+//!                             SEC-SCR-DataLayer-0014: Execute a bad SQL statement (2)
+//!                             SEC-SCR-DataLayer-0015: Execute a bad SQL statement (3)
+//!                             SEC-SCR-DataLayer-0016: Open a non-existing database
+//!                             SEC-SCR-DataLayer-0017: Open and work on a non-database file
+//!                             SEC-SCR-DataLayer-0018: Bind a column which doesn't exist
+//!                             SEC-SCR-DataLayer-0018: Retrieve the value of a column which doesn't exist
+//!                             SEC-SCR-DataLayer-0020: Retrieve the value of a column whose type doesn't match
+//! @SYMTestExpectedResults 	The intended database operations are performed successfully.
+//! @SYMTestType 		UT
+
+START_TESTCASE API-SEC-SCR-DataLayer-0001
+
+RUN_TEST_STEP 100 tscrdatalayer SCRDataLayer
+
+END_TESTCASE API-SEC-SCR-DataLayer-0001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrdatalayer/scripts/tscr_datalayer_oom.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,2 @@
+[datalayerOOM]
+OOMTest=True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrdatalayer/scripts/tscr_datalayer_oom.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,81 @@
+//
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+// tscr_datalayer_oom.script
+// Software Component Registry Database Layer Out-Of-Memory Tests
+
+PRINT Run Software Component Registry (SCR) - Data Layer OOM Tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData // SharedData is used for sharing the componentid between test steps
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+
+// Delete the SCR Database file - this step ensures that the SCR DB is down before starting the test
+// As the Secure SQLite layer does not support two connections at the same time, this test step prevents this from happening
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+
+// Load Suite
+LOAD_SUITE tscrdatalayer
+
+// Create the private directory for tdatalayer
+RUN_UTILS MkDir c:\private\1028634C
+// Delete the SCR Database file if it has been left from the previous session
+RUN_UTILS DeleteFile c:\private\1028634C\scr.db
+// Copy the an empty scr db into the test harness private directory, so that the test harness won't require AllFiles.
+// Since tscrdatalayer test harness loads scrdatabase.dll, it cannot have AllFiles capability.
+RUN_UTILS CopyFile z:\tusif\tscr\data\scr-noversiontable.db c:\private\1028634C\scr.db
+RUN_UTILS MakeReadWrite c:\private\1028634C\scr.db
+// Copy the invalid scr db
+RUN_UTILS CopyFile z:\tusif\tscrdatalayer\data\nondb.db c:\private\1028634C\nonscr.db
+RUN_UTILS MakeReadWrite c:\private\1028634C\nonscr.db
+
+//********************** SEC-SCR-DataLayer : SCR DATA LAYER  **********************
+
+//! @SYMTestCaseID 		API-SEC-SCR-DataLayer-OOM-0001
+//! @SYMTestCaseDesc 		Unit tests for SCR Data Layer
+//! @SYMPREQ 			PREQ1269
+//! @SYMTestPriority 		Critical
+//! @SYMTestStatus   		3. Released
+//! @SYMTestActions 		Test Actions:
+//!				• SEC-SCR-DataLayer-0001: Open database file
+//!				• SEC-SCR-DataLayer-0002: Insert records
+//!				• SEC-SCR-DataLayer-0003: Verify inserted records
+//!				• SEC-SCR-DataLayer-0004: Update a record
+//!				• SEC-SCR-DataLayer-0005: Verify updated record
+//!				• SEC-SCR-DataLayer-0006: Delete a record
+//!                             • SEC-SCR-DataLayer-0007: Verify the deleted record 	
+//!                             • SEC-SCR-DataLayer-0008: Begin a transaction	
+//!                             • SEC-SCR-DataLayer-0009: Insert a record while a transaction is active
+//!                             • SEC-SCR-DataLayer-0010: Insert a second record while a transaction is active
+//!                             • SEC-SCR-DataLayer-0011: Rollback the transaction.
+//!                             • SEC-SCR-DataLayer-0012: Verify the rollback
+//!                             • SEC-SCR-DataLayer-0013: Execute a bad SQL statement (1) 
+//!                             • SEC-SCR-DataLayer-0014: Execute a bad SQL statement (2)
+//!                             • SEC-SCR-DataLayer-0015: Execute a bad SQL statement (3)
+//!                             • SEC-SCR-DataLayer-0016: Open a non-existing database
+//!                             • SEC-SCR-DataLayer-0017: Open and work on a non-database file
+//!                             • SEC-SCR-DataLayer-0018: Bind a column which doesn't exist
+//!                             • SEC-SCR-DataLayer-0018: Retrieve the value of a column which doesn't exist
+//!                             • SEC-SCR-DataLayer-0020: Retrieve the value of a column whose type doesn't match
+//!
+//! @SYMTestExpectedResults 	• The intended database operations are performed successfully.
+//! @SYMTestType 		UT
+
+START_TESTCASE API-SEC-SCR-DataLayer-OOM-0001
+
+RUN_TEST_STEP 100 tscrdatalayer SCRDataLayer z:\tusif\tscrdatalayer\tscr_datalayer_oom.ini datalayerOOM
+
+END_TESTCASE API-SEC-SCR-DataLayer-OOM-0001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrdatalayer/source/datalayersteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,355 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the unit test steps for the SCR Data Layer.
+*
+*/
+
+
+#include "datalayersteps.h"
+
+
+CScrTestDataLayer::CScrTestDataLayer(CScrDataLayerTestServer&)
+// Constructor.
+	:	COomTestStep()
+	{
+	SetTestStepName(KScrDataLayerStep);
+	}
+
+CScrTestDataLayer::~CScrTestDataLayer()
+// Destructor.
+	{
+	}
+
+void CScrTestDataLayer::ImplTestStepPreambleL()
+	{
+	}
+
+void CScrTestDataLayer::ImplTestStepPostambleL()
+	{
+	}
+
+static const TUint MAX_SCR_ERROR_MESSAGE_LENGTH = 512;
+
+void CScrTestDataLayer::PrintErrorL(const TDesC& aMsg, TInt aErrNum,...)
+	{
+	VA_LIST list;
+	VA_START(list, aErrNum);
+	
+	RBuf msgBuf;
+	msgBuf.CreateL(MAX_SCR_ERROR_MESSAGE_LENGTH);
+	msgBuf.CleanupClosePushL();
+	msgBuf.AppendFormatList(aMsg, list);
+	
+	ERR_PRINTF1(msgBuf);
+	SetTestStepResult(EFail);
+
+	CleanupStack::PopAndDestroy(&msgBuf);
+	User::Leave(aErrNum);
+	}
+
+
+void CScrTestDataLayer::ImplTestStepL()
+	{
+	INFO_PRINTF1(_L("SCR Data Layer Unit Tests"));
+	
+	INFO_PRINTF1(_L(" SEC_SCR_DataLayer_0001: Open database file"));
+
+	_LIT(KDbFilePath, "c:\\private\\1028634C\\scr.db");
+	_LIT(KJournalFilePath, "c:\\private\\1028634C\\scr.db-journal");
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+	RFile databaseFile;
+	User::LeaveIfError(databaseFile.Open(fs, KDbFilePath, EFileShareAny|EFileWrite));
+	CleanupClosePushL(databaseFile);
+	RFile journalFile;
+	User::LeaveIfError(journalFile.Replace(fs, KJournalFilePath, EFileShareAny|EFileWrite));
+	CleanupClosePushL(journalFile);
+	CDatabase *db = CDatabase::NewL(databaseFile, journalFile);
+	CleanupStack::PushL(db);
+	
+	INFO_PRINTF1(_L(" SEC_SCR_DataLayer_0001.1: Negative test in LastInsertedIdL"));
+	TRAPD(err, db->LastInsertedIdL());
+	if (err != KErrNotFound)
+		PrintErrorL(_L("Unexpected error for LastInsertedIdL when nothing was inserted"), err);
+	
+	INFO_PRINTF1(_L(" SEC_SCR_DataLayer_0002: Insert records"));
+	_LIT(KScrTestInsert, "INSERT INTO Components(SoftwareTypeId,InstalledDrivesRefCount,Version,InstallTime) VALUES(?,?,?,?);");
+	CStatement* stmt = db->PrepareStatementLC(KScrTestInsert());
+	// Insert first record
+	const TInt KSoftTypeIdRow1 = 1;
+	_LIT(KInstalledDrivesRow1, "123");
+	_LIT(KVersionRow1, "1.1.1");
+	InsertRecordL(*stmt, KSoftTypeIdRow1, KInstalledDrivesRow1(), KVersionRow1());
+	// Insert second record
+	const TInt KSoftTypeIdRow2 = 2;
+	_LIT(KInstalledDrivesRow2, "456");
+	_LIT(KVersionRow2, "1.1.2");
+	InsertRecordL(*stmt, KSoftTypeIdRow2, KInstalledDrivesRow2(), KVersionRow2());
+	CleanupStack::PopAndDestroy(stmt);
+	
+	INFO_PRINTF1(_L(" SEC_SCR_DataLayer_0003: Verify inserted records"));
+	_LIT(KScrTestSelect, "SELECT SoftwareTypeId,InstalledDrivesRefCount,Version FROM Components;");
+	stmt = db->PrepareStatementLC(KScrTestSelect());
+	if(!stmt->ProcessNextRowL())
+		PrintErrorL(_L("Result row set contains unexpected number of records (0)!"), KErrGeneral);
+	VerifyRecordL(*stmt, KSoftTypeIdRow1, KInstalledDrivesRow1, KVersionRow1);
+	if(!stmt->ProcessNextRowL())
+		PrintErrorL(_L("Result row set contains unexpected number of records (1)!"), KErrGeneral);
+	VerifyRecordL(*stmt, KSoftTypeIdRow2, KInstalledDrivesRow2(), KVersionRow2());
+	if(stmt->ProcessNextRowL())
+		PrintErrorL(_L("Result row set contains more records than expected ones (2)!"), KErrGeneral);
+	CleanupStack::PopAndDestroy(stmt);
+	
+	INFO_PRINTF1(_L(" SEC_SCR_DataLayer_0004: Update a record"));
+	_LIT(KScrTestUpdate, "UPDATE Components SET Version=? WHERE InstalledDrivesRefCount=?;");
+	stmt = db->PrepareStatementLC(KScrTestUpdate());
+	_LIT(KNewVersionRow2, "6.7.9");
+	stmt->BindStrL(1, KNewVersionRow2());
+	stmt->BindStrL(2, KInstalledDrivesRow2());
+	stmt->ExecuteStatementL();
+	CleanupStack::PopAndDestroy(stmt);
+	
+	INFO_PRINTF1(_L(" SEC_SCR_DataLayer_0005: Verify updated record"));
+	_LIT(KScrTestSelectCond, "SELECT SoftwareTypeId,InstalledDrivesRefCount,Version FROM Components WHERE InstalledDrivesRefCount=?;");
+	stmt = db->PrepareStatementLC(KScrTestSelectCond());
+	stmt->BindStrL(1, KInstalledDrivesRow2());
+	if(!stmt->ProcessNextRowL())
+		PrintErrorL(_L("Updated record could not be found!"), KErrGeneral);
+	VerifyRecordL(*stmt, KSoftTypeIdRow2, KInstalledDrivesRow2(), KNewVersionRow2());
+	CleanupStack::PopAndDestroy(stmt);
+		
+	INFO_PRINTF1(_L(" SEC_SCR_DataLayer_0006: Delete a record"));
+	_LIT(KScrTestDelete, "DELETE FROM Components WHERE InstalledDrivesRefCount=?;");
+	stmt = db->PrepareStatementLC(KScrTestDelete());
+	stmt->BindStrL(1, KInstalledDrivesRow1());
+	stmt->ExecuteStatementL();
+	CleanupStack::PopAndDestroy(stmt);
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0007: Verify deleted record"));
+	_LIT(KScrTestSelectVerify, "SELECT * FROM Components WHERE InstalledDrivesRefCount=?;");
+	stmt = db->PrepareStatementLC(KScrTestSelectVerify());
+	stmt->BindStrL(1, KInstalledDrivesRow1());
+	if(stmt->ProcessNextRowL())
+		PrintErrorL(_L("Deleted record has been retrieved!"), KErrGeneral);
+	CleanupStack::PopAndDestroy(stmt);
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0008: Begin a transaction"));
+	_LIT(KScrTestBegin, "BEGIN TRANSACTION SCRUnitTest;");
+	stmt = db->PrepareStatementLC(KScrTestBegin());
+	stmt->ExecuteStatementL();
+	CleanupStack::PopAndDestroy(stmt);
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0009: Insert a record"));
+	stmt = db->PrepareStatementLC(KScrTestInsert());
+	const TInt KSoftTypeIdRow3 = 1;
+	_LIT(KInstalledDrivesRow3, "789");
+	_LIT(KVersionRow3, "1.1.3");
+	InsertRecordL(*stmt, KSoftTypeIdRow3, KInstalledDrivesRow3(), KVersionRow3());
+	CleanupStack::PopAndDestroy(stmt);
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0010: Insert second record"));
+	stmt = db->PrepareStatementLC(KScrTestInsert());
+	const TInt KSoftTypeIdRow4 = 3;
+	_LIT(KInstalledDrivesRow4, "001");
+	_LIT(KVersionRow4, "0.0.7");
+	InsertRecordL(*stmt, KSoftTypeIdRow4, KInstalledDrivesRow4(), KVersionRow4());
+	CleanupStack::PopAndDestroy(stmt);
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0011: Rollback the transaction"));
+	_LIT(KScrTestRollback, "ROLLBACK TRANSACTION SCRUnitTest;");
+	stmt = db->PrepareStatementLC(KScrTestRollback());
+	stmt->ExecuteStatementL();
+	CleanupStack::PopAndDestroy(stmt);
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0012: Verify rollback"));
+	stmt = db->PrepareStatementLC(KScrTestSelectVerify());
+	stmt->BindStrL(1, KInstalledDrivesRow3());
+	if(stmt->ProcessNextRowL())
+		PrintErrorL(_L("First record inserted  has been retrieved! It should have been rolled back!"), KErrGeneral);
+	stmt->ResetL();
+	stmt->BindStrL(1, KInstalledDrivesRow4());
+	if(stmt->ProcessNextRowL())
+		PrintErrorL(_L("Second record inserted  has been retrieved! It should have been rolled back!"), KErrGeneral);
+	CleanupStack::PopAndDestroy(stmt);
+	
+	ExecuteBadStatementL(*db, 13, _L("INSERT INTO Components;"));
+	ExecuteBadStatementL(*db, 14, _L(";"));
+	ExecuteBadStatementL(*db, 15, _L("SELECT * FROM Components;SELECT * FROM Files;"));
+		
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0016: Bind to a column which does not exist"));
+	stmt = db->PrepareStatementLC(KScrTestInsert());
+	TRAP(err, stmt->BindIntL(5, 1)); // There is no 5th column
+	if(err != KErrArgument)
+		PrintErrorL(_L("Unexpected error returned with binding to a non-existing column!"), err);
+	CleanupStack::PopAndDestroy(stmt);
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0017: Retrieve the value of a column which does not exist"));
+	stmt = db->PrepareStatementLC(KScrTestSelect());
+	if(!stmt->ProcessNextRowL())
+			PrintErrorL(_L("The database is empty!"), KErrGeneral);
+	TRAP(err,TPtrC ptrColX(stmt->StrColumnL(5))); // There is no 5th column
+	if(err != KErrArgument)
+		PrintErrorL(_L("Unexpected error returned with retrieving a non-existing column!"), err);
+	
+	TRAP(err,TPtrC ptrColX(stmt->StrColumnL(-1))); // Check negative value
+	if(err != KErrArgument)
+		PrintErrorL(_L("Unexpected error returned with retrieving a negative column!"), err);	
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0018: Retrieve the value of a column whose type doesn't match"));
+	TRAP(err,TPtrC ptrCol0(stmt->StrColumnL(0))); // Column0 is integer
+	if(err != KErrArgument)
+		PrintErrorL(_L("Unexpected error returned with retrieving the type mismatched column!"), err);
+	CleanupStack::PopAndDestroy(stmt);
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0019: Insert a record - attempt injecting raw SQL in parameters"));
+	stmt = db->PrepareStatementLC(KScrTestInsert());
+	const TInt KSoftTypeIdRowInject1 = 1;
+	_LIT(KRowInject1, "a?b");
+	_LIT(KVersionRowInject1, "???");
+	InsertRecordL(*stmt, KSoftTypeIdRowInject1, KRowInject1(), KVersionRowInject1());
+	
+	_LIT(KRowInject2, "';<>!?\\/.,~#:");
+	_LIT(KRowInject3, "\n\r\t\b");	
+	InsertRecordL(*stmt, KSoftTypeIdRowInject1, KRowInject2(), KRowInject3());
+	
+	CleanupStack::PopAndDestroy(stmt);	
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0020: Query - attempt injecting raw SQL"));
+	_LIT(KScrInjectTestQuery, "SELECT * FROM Components WHERE ComponentId=?;");
+	stmt = db->PrepareStatementLC(KScrInjectTestQuery());
+	stmt->BindStrL(1, KRowInject1());
+	stmt->ProcessNextRowL();
+	CleanupStack::PopAndDestroy(stmt);
+	
+	stmt = db->PrepareStatementLC(KScrInjectTestQuery());
+	stmt->BindStrL(1, KRowInject2());
+	stmt->ProcessNextRowL();
+	CleanupStack::PopAndDestroy(stmt);
+	
+	stmt = db->PrepareStatementLC(KScrInjectTestQuery());
+	stmt->BindStrL(1, KRowInject3());
+	stmt->ProcessNextRowL();		
+	CleanupStack::PopAndDestroy(stmt);	
+	
+	_LIT8(K8BitInstalledDrives, "testInstalledDrives");
+	_LIT8(K8BitVersion, "testVersion");
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0021: Test 8-bit field support"));
+	stmt = db->PrepareStatementLC(KScrTestInsert());
+	
+	stmt->BindIntL(1, 1);
+	stmt->BindBinaryL(2, K8BitInstalledDrives());	
+	stmt->BindBinaryL(3, K8BitVersion());
+	stmt->BindIntL(4, 0); // install time
+	stmt->ExecuteStatementL();
+	CleanupStack::PopAndDestroy(stmt);
+	// Try and do a select by 8-bit values, followed by their retrieval
+	_LIT(KScr8BitTestQuery, "SELECT InstalledDrivesRefCount, ComponentId FROM Components WHERE Version=?;");
+	stmt = db->PrepareStatementLC(KScr8BitTestQuery());
+	stmt->BindBinaryL(1, K8BitVersion());
+	if(!stmt->ProcessNextRowL())
+		PrintErrorL(_L("8-bit value SELECT did not match!"), KErrGeneral);
+	TPtrC8 ptrCol(stmt->BinaryColumnL(0));
+	if (ptrCol != K8BitInstalledDrives)
+		PrintErrorL(_L("8-bit values did not match!"), KErrGeneral);
+	TRAP(err, stmt->BinaryColumnL(1));
+	if (err != KErrArgument)
+		PrintErrorL(_L("Expected error on non-binary columnb did not match!"), KErrGeneral);
+
+	CleanupStack::PopAndDestroy(stmt);			
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0022: Try binding huge parameters"));	
+	stmt = db->PrepareStatementLC(KScrInjectTestQuery());
+  	static TUint charsCount = 1024;
+  	_LIT(KTestPrefix, "TestValuePrefix");
+  	
+  	// Test large localizable property with negative values
+  	RBuf propertyValue;
+  	propertyValue.CreateL(charsCount * 2 + KTestPrefix().Length());
+  	CleanupClosePushL(propertyValue);
+  	propertyValue.Copy(KTestPrefix);
+  	const TChar testChar(0xFFFD);
+  	propertyValue.AppendFill(testChar, charsCount);
+	TRAP(err, stmt->BindStrL(2, propertyValue));
+	if (err != KErrArgument)
+		PrintErrorL(_L("Expected error wasn't returned on large parameter!"), KErrGeneral);
+	CleanupStack::PopAndDestroy(&propertyValue);
+		
+	CleanupStack::PopAndDestroy(4, &databaseFile); // databaseFile, journalFile, db, stmt
+	
+	INFO_PRINTF1(_L("SEC_SCR_DataLayer_0023: Open and work on a non-database file"));
+	CDatabase* nondb(0); 
+
+	_LIT(KScrTestNonDbFile, "c:\\private\\1028634C\\nonscr.db");
+	_LIT(KScrTestNonDbFileJournal, "c:\\private\\1028634C\\nonscr.db-journal");
+	User::LeaveIfError(databaseFile.Open(fs, KScrTestNonDbFile, EFileShareAny|EFileRead));
+	CleanupClosePushL(databaseFile);
+	User::LeaveIfError(journalFile.Replace(fs, KScrTestNonDbFileJournal, EFileShareAny|EFileWrite));
+	CleanupClosePushL(journalFile);
+	nondb = CDatabase::NewL(databaseFile, journalFile);
+	CleanupStack::PushL(nondb);
+  	stmt = NULL;
+  	TRAP(err, stmt = nondb->PrepareStatementLC(KScrTestSelect()));
+  	if (stmt) 
+  		CleanupStack::PopAndDestroy(stmt);
+   	
+  	if(err == KErrNoMemory)
+  		User::Leave(err);
+  	else if(err != KErrNotFound)
+  		PrintErrorL(_L("Unexpected error returned with non-database file!"), err);			
+
+	CleanupStack::PopAndDestroy(4, &fs); // fs, databaseFile, journalFile, nondb
+	}
+
+void CScrTestDataLayer::InsertRecordL(CStatement& aStmt, TInt aCol1, const TDesC& aCol2, const TDesC& aCol3)
+	{
+	aStmt.BindIntL(1, aCol1);
+	aStmt.BindStrL(2, aCol2);
+	aStmt.BindStrL(3, aCol3);
+	aStmt.BindIntL(4, aCol1); // install time
+	aStmt.ExecuteStatementL();
+	aStmt.ResetL();
+	}
+
+void CScrTestDataLayer::VerifyRecordL(CStatement& aStmt, TInt aCol1, const TDesC& aCol2, const TDesC& aCol3)
+	{
+	TInt intCol1 = aStmt.IntColumnL(0);
+	TInt64 int64Col1 = aStmt.Int64ColumnL(0); // Due to coverage concerns
+	if((intCol1 != aCol1) || (int64Col1 != aCol1))
+		{
+		ERR_PRINTF1(_L("The integer column does not match with the returned one."));
+		SetTestStepResult(EFail);
+		User::Leave(KErrGeneral);
+		}
+	TPtrC ptrCol2(aStmt.StrColumnL(1));
+	TPtrC ptrCol3(aStmt.StrColumnL(2));
+	if(ptrCol2.Compare(aCol2) || ptrCol3.Compare(aCol3))
+		{
+		ERR_PRINTF1(_L("The string column does not match with the returned one."));
+		SetTestStepResult(EFail);
+		User::Leave(KErrGeneral);	
+		}
+	}
+
+void CScrTestDataLayer::ExecuteBadStatementL(CDatabase &aDb, TInt aTestNum, const TDesC& aStatement)
+	{
+	INFO_PRINTF3(_L("SEC_SCR_DataLayer_00%d: Run a badly constructed statement (%S)"), aTestNum, &aStatement);
+	CStatement	*stmt = NULL;
+	TRAPD(err, stmt = aDb.PrepareStatementLC(aStatement); 
+		  if(stmt) 
+			  CleanupStack::PopAndDestroy(stmt););// end of TRAPD
+	if(err != KErrArgument)
+			PrintErrorL(_L("The badly constructed statement did not cause the expected err"), err);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrdatalayer/source/tscrdatalayer.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the test server of the Software Component Registry test harness
+*
+*/
+
+
+#include "tscrdatalayerserver.h" 			// TEF Test Server
+#include "datalayersteps.h"
+
+CScrDataLayerTestServer* CScrDataLayerTestServer::NewL()
+/**
+	Called inside the MainL() function to create and start the CTestServer derived server.
+	@return Instance of the test server
+ */
+	{	
+	CScrDataLayerTestServer* server = new (ELeave) CScrDataLayerTestServer();
+	CleanupStack::PushL(server);
+	server->ConstructL(KScrDataLayerTestServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+	
+	
+CScrDataLayerTestServer::~CScrDataLayerTestServer()
+	{	
+	}
+
+
+LOCAL_C void MainL()
+	{	
+	CActiveScheduler *scheduler = new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(scheduler);
+
+	CScrDataLayerTestServer* server = NULL;
+	
+	// Create the CTestServer derived server
+	TRAPD(err,server = CScrDataLayerTestServer::NewL());
+	if(!err)
+		{
+		// Sync with the client and enter the active scheduler
+		RProcess::Rendezvous(KErrNone);
+		scheduler->Start();
+		}
+		
+	delete server;
+	delete scheduler;
+	}
+
+
+GLDEF_C TInt E32Main()
+/**
+ * @return - Standard Epoc error code on process exit
+ * Process entry point. Called by client using RProcess API
+ */
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAPD(err,MainL());
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return err;
+    }
+
+CTestStep* CScrDataLayerTestServer::CreateTestStep(const TDesC& aStepName)
+/**
+	Creates a new test step.
+	@param aStepName The name of the requested test step.
+	@return A pointer to the object of the requested test step.
+ */
+	{
+	// Initialise test step object to NULL if no TEF steps are assigned
+	CTestStep* testStep = NULL;
+	
+	if(aStepName == KScrDataLayerStep)
+		testStep = new CScrTestDataLayer(*this);
+
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/bwins/apprscparseru.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+EXPORTS
+	?ReadL@CAppRegInfoReader@@QAEPAVCApplicationRegistrationData@Usif@@ABV?$RArray@W4TLanguage@@@@@Z @ 1 NONAME ; class Usif::CApplicationRegistrationData * CAppRegInfoReader::ReadL(class RArray<enum TLanguage> const &)
+	?NewL@CAppRegInfoReader@@SAPAV1@AAVRFs@@ABVTDesC16@@@Z @ 2 NONAME ; class CAppRegInfoReader * CAppRegInfoReader::NewL(class RFs &, class TDesC16 const &)
+	??1CAppRegInfoReader@@UAE@XZ @ 3 NONAME ; CAppRegInfoReader::~CAppRegInfoReader(void)
+	?NewL@CAppRegInfoReader@@SAPAV1@AAVRFs@@ABVRFile@@@Z @ 4 NONAME ; class CAppRegInfoReader * CAppRegInfoReader::NewL(class RFs &, class RFile const &)
+
--- a/installationservices/swi/bwins/planU.DEF	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/bwins/planU.DEF	Tue Aug 31 15:21:33 2010 +0300
@@ -77,4 +77,7 @@
 	?IsDeviceMatchingLanguage@CApplication@Swi@@QBEHH@Z @ 76 NONAME ; int Swi::CApplication::IsDeviceMatchingLanguage(int) const
 	?SetSisHelper@CApplication@Swi@@QAEXABVRSisHelper@2@@Z @ 77 NONAME ; void Swi::CApplication::SetSisHelper(class Swi::RSisHelper const &)
 	?GetSisHelper@CApplication@Swi@@QAEAAVRSisHelper@2@XZ @ 78 NONAME ; class Swi::RSisHelper & Swi::CApplication::GetSisHelper(void)
+	?GetAffectedApps@CPlan@Swi@@QBEXAAV?$RArray@VTAppUpdateInfo@Swi@@@@@Z @ 79 NONAME ; void Swi::CPlan::GetAffectedApps(class RArray<class Swi::TAppUpdateInfo> &) const
+	?ResetAffectedApps@CPlan@Swi@@QAEXXZ @ 80 NONAME ; void Swi::CPlan::ResetAffectedApps(void)
+	?SetAffectedApps@CPlan@Swi@@QAEXAAV?$RArray@VTAppUpdateInfo@Swi@@@@@Z @ 81 NONAME ; void Swi::CPlan::SetAffectedApps(class RArray<class Swi::TAppUpdateInfo> &)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/bwins/plan_legacyU.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,83 @@
+EXPORTS
+	??1CPlan@Swi@@UAE@XZ @ 1 NONAME ; Swi::CPlan::~CPlan(void)
+	?AddEmbeddedApplicationL@CApplication@Swi@@QAEXPAV12@@Z @ 2 NONAME ; void Swi::CApplication::AddEmbeddedApplicationL(class Swi::CApplication *)
+	?AddFileL@CApplication@Swi@@QAEXABVCFileDescription@Sis@2@VTChar@@@Z @ 3 NONAME ; void Swi::CApplication::AddFileL(class Swi::Sis::CFileDescription const &, class TChar)
+	?AddInstallFileForProgress@CPlan@Swi@@QAEX_J@Z @ 4 NONAME ; void Swi::CPlan::AddInstallFileForProgress(long long)
+	?AddPropertyL@CApplication@Swi@@QAEXABVTProperty@12@@Z @ 5 NONAME ; void Swi::CApplication::AddPropertyL(class Swi::CApplication::TProperty const &)
+	?AddUninstallFileForProgress@CPlan@Swi@@QAEXXZ @ 6 NONAME ; void Swi::CPlan::AddUninstallFileForProgress(void)
+	?AppInfoL@CPlan@Swi@@QBEABVTAppInfo@2@XZ @ 7 NONAME ; class Swi::TAppInfo const & Swi::CPlan::AppInfoL(void) const
+	?ApplicationL@CPlan@Swi@@UBEABVCApplication@2@XZ @ 8 NONAME ; class Swi::CApplication const & Swi::CPlan::ApplicationL(void) const
+	?ControllerL@CApplication@Swi@@QBEABVCController@Sis@2@XZ @ 9 NONAME ; class Swi::Sis::CController const & Swi::CApplication::ControllerL(void) const
+	?DisplayFileOnInstallL@CApplication@Swi@@QAEXABVCFileDescription@Sis@2@VTChar@@@Z @ 10 NONAME ; void Swi::CApplication::DisplayFileOnInstallL(class Swi::Sis::CFileDescription const &, class TChar)
+	?DisplayFileOnUninstallL@CApplication@Swi@@QAEXABVCSisRegistryFileDescription@2@@Z @ 11 NONAME ; void Swi::CApplication::DisplayFileOnUninstallL(class Swi::CSisRegistryFileDescription const &)
+	?EmbeddedApplications@CApplication@Swi@@QBEABV?$RPointerArray@VCApplication@Swi@@@@XZ @ 12 NONAME ; class RPointerArray<class Swi::CApplication> const & Swi::CApplication::EmbeddedApplications(void) const
+	?FilesToAdd@CApplication@Swi@@QBEABV?$RPointerArray@VCSisRegistryFileDescription@Swi@@@@XZ @ 13 NONAME ; class RPointerArray<class Swi::CSisRegistryFileDescription> const & Swi::CApplication::FilesToAdd(void) const
+	?FilesToDisplayOnInstall@CApplication@Swi@@QBEABV?$RPointerArray@VCSisRegistryFileDescription@Swi@@@@XZ @ 14 NONAME ; class RPointerArray<class Swi::CSisRegistryFileDescription> const & Swi::CApplication::FilesToDisplayOnInstall(void) const
+	?FilesToDisplayOnUninstall@CApplication@Swi@@QBEABV?$RPointerArray@VCSisRegistryFileDescription@Swi@@@@XZ @ 15 NONAME ; class RPointerArray<class Swi::CSisRegistryFileDescription> const & Swi::CApplication::FilesToDisplayOnUninstall(void) const
+	?FilesToRemove@CApplication@Swi@@QBEABV?$RPointerArray@VCSisRegistryFileDescription@Swi@@@@XZ @ 16 NONAME ; class RPointerArray<class Swi::CSisRegistryFileDescription> const & Swi::CApplication::FilesToRemove(void) const
+	?FilesToRunOnInstall@CApplication@Swi@@QBEABV?$RPointerArray@VCSisRegistryFileDescription@Swi@@@@XZ @ 17 NONAME ; class RPointerArray<class Swi::CSisRegistryFileDescription> const & Swi::CApplication::FilesToRunOnInstall(void) const
+	?FilesToRunOnUninstall@CApplication@Swi@@QBEABV?$RPointerArray@VCSisRegistryFileDescription@Swi@@@@XZ @ 18 NONAME ; class RPointerArray<class Swi::CSisRegistryFileDescription> const & Swi::CApplication::FilesToRunOnUninstall(void) const
+	?FinalProgressBarValue@CPlan@Swi@@QBEJXZ @ 19 NONAME ; long Swi::CPlan::FinalProgressBarValue(void) const
+	?IsAugmentation@CApplication@Swi@@QBEHXZ @ 20 NONAME ; int Swi::CApplication::IsAugmentation(void) const
+	?IsInROM@CApplication@Swi@@QBEHXZ @ 21 NONAME ; int Swi::CApplication::IsInROM(void) const
+	?IsInstall@CApplication@Swi@@QBEHXZ @ 22 NONAME ; int Swi::CApplication::IsInstall(void) const
+	?IsPartialUpgrade@CApplication@Swi@@QBEHXZ @ 23 NONAME ; int Swi::CApplication::IsPartialUpgrade(void) const
+	?IsPreInstalledApp@CApplication@Swi@@QBEHXZ @ 24 NONAME ; int Swi::CApplication::IsPreInstalledApp(void) const
+	?IsPreInstalledPatch@CApplication@Swi@@QBEHXZ @ 25 NONAME ; int Swi::CApplication::IsPreInstalledPatch(void) const
+	?IsUninstall@CApplication@Swi@@QBEHXZ @ 26 NONAME ; int Swi::CApplication::IsUninstall(void) const
+	?IsUpgrade@CApplication@Swi@@QBEHXZ @ 27 NONAME ; int Swi::CApplication::IsUpgrade(void) const
+	?NewL@CApplication@Swi@@SAPAV12@XZ @ 28 NONAME ; class Swi::CApplication * Swi::CApplication::NewL(void)
+	?NewL@CPlan@Swi@@SAPAV12@XZ @ 29 NONAME ; class Swi::CPlan * Swi::CPlan::NewL(void)
+	?NewLC@CApplication@Swi@@SAPAV12@XZ @ 30 NONAME ; class Swi::CApplication * Swi::CApplication::NewLC(void)
+	?PackageL@CApplication@Swi@@QBEABVCSisRegistryPackage@2@XZ @ 31 NONAME ; class Swi::CSisRegistryPackage const & Swi::CApplication::PackageL(void) const
+	?Properties@CApplication@Swi@@QBEABV?$RArray@VTProperty@CApplication@Swi@@@@XZ @ 32 NONAME ; class RArray<class Swi::CApplication::TProperty> const & Swi::CApplication::Properties(void) const
+	?RemoveFileL@CApplication@Swi@@QAEXABVCSisRegistryFileDescription@2@@Z @ 33 NONAME ; void Swi::CApplication::RemoveFileL(class Swi::CSisRegistryFileDescription const &)
+	?RunFileOnInstallL@CApplication@Swi@@QAEXABVCFileDescription@Sis@2@VTChar@@@Z @ 34 NONAME ; void Swi::CApplication::RunFileOnInstallL(class Swi::Sis::CFileDescription const &, class TChar)
+	?RunFileOnUninstallL@CApplication@Swi@@QAEXABVCSisRegistryFileDescription@2@@Z @ 35 NONAME ; void Swi::CApplication::RunFileOnUninstallL(class Swi::CSisRegistryFileDescription const &)
+	?SetAppInfoL@CPlan@Swi@@QAEXABVTAppInfo@2@@Z @ 36 NONAME ; void Swi::CPlan::SetAppInfoL(class Swi::TAppInfo const &)
+	?SetApplication@CPlan@Swi@@UAEXPAVCApplication@2@@Z @ 37 NONAME ; void Swi::CPlan::SetApplication(class Swi::CApplication *)
+	?SetApplicationInformationL@CPlan@Swi@@QAEXABVTDesC16@@0ABVTVersion@@@Z @ 38 NONAME ; void Swi::CPlan::SetApplicationInformationL(class TDesC16 const &, class TDesC16 const &, class TVersion const &)
+	?SetAugmentation@CApplication@Swi@@QAEXABVCController@Sis@2@@Z @ 39 NONAME ; void Swi::CApplication::SetAugmentation(class Swi::Sis::CController const &)
+	?SetController@CApplication@Swi@@QAEXABVCController@Sis@2@@Z @ 40 NONAME ; void Swi::CApplication::SetController(class Swi::Sis::CController const &)
+	?SetController@CApplication@Swi@@QAEXVTUid@@@Z @ 41 NONAME ; void Swi::CApplication::SetController(class TUid)
+	?SetInROM@CApplication@Swi@@QAEXXZ @ 42 NONAME ; void Swi::CApplication::SetInROM(void)
+	?SetInstall@CApplication@Swi@@QAEXABVCController@Sis@2@@Z @ 43 NONAME ; void Swi::CApplication::SetInstall(class Swi::Sis::CController const &)
+	?SetOptionsL@CUserSelections@Swi@@QAEXABV?$RArray@H@@@Z @ 44 NONAME ; void Swi::CUserSelections::SetOptionsL(class RArray<int> const &)
+	?SetPackageL@CApplication@Swi@@QAEXABVCSisRegistryPackage@2@@Z @ 45 NONAME ; void Swi::CApplication::SetPackageL(class Swi::CSisRegistryPackage const &)
+	?SetPartialUpgrade@CApplication@Swi@@QAEXABVCController@Sis@2@@Z @ 46 NONAME ; void Swi::CApplication::SetPartialUpgrade(class Swi::Sis::CController const &)
+	?SetPreInstalledApp@CApplication@Swi@@QAEXABVCController@Sis@2@@Z @ 47 NONAME ; void Swi::CApplication::SetPreInstalledApp(class Swi::Sis::CController const &)
+	?SetPreInstalledPatch@CApplication@Swi@@QAEXABVCController@Sis@2@@Z @ 48 NONAME ; void Swi::CApplication::SetPreInstalledPatch(class Swi::Sis::CController const &)
+	?SetUninstallL@CApplication@Swi@@QAEXABVCSisRegistryPackage@2@@Z @ 49 NONAME ; void Swi::CApplication::SetUninstallL(class Swi::CSisRegistryPackage const &)
+	?SetUpgrade@CApplication@Swi@@QAEXABVCController@Sis@2@@Z @ 50 NONAME ; void Swi::CApplication::SetUpgrade(class Swi::Sis::CController const &)
+	?AddSisStubFileL@CApplication@Swi@@QAEXABVCSisRegistryFileDescription@2@@Z @ 51 NONAME ; void Swi::CApplication::AddSisStubFileL(class Swi::CSisRegistryFileDescription const &)
+	?CanPropagate@CApplication@Swi@@QBEHXZ @ 52 NONAME ; int Swi::CApplication::CanPropogate(void) const
+	?StubDrive@CApplication@Swi@@QBE?AVTChar@@XZ @ 53 NONAME ; class TChar Swi::CApplication::StubDrive(void) const
+	?SetPreInstalledApp@CApplication@Swi@@QAEXXZ @ 54 NONAME ; void Swi::CApplication::SetPreInstalledApp(void)
+	?SetPreInstalledPatch@CApplication@Swi@@QAEXXZ @ 55 NONAME ; void Swi::CApplication::SetPreInstalledPatch(void)
+	?RemoveFileL@CApplication@Swi@@QAEXABVTDesC16@@@Z @ 56 NONAME ; void Swi::CApplication::RemoveFileL(class TDesC16 const &)
+	?FilesToRunBeforeShutdown@CPlan@Swi@@QBEABV?$RPointerArray@VCSisRegistryFileDescription@Swi@@@@XZ @ 57 NONAME ; class RPointerArray<class Swi::CSisRegistryFileDescription> const & Swi::CPlan::FilesToRunBeforeShutdown(void) const
+	?RunFilesBeforeShutdownL@CPlan@Swi@@QAEXABVCSisRegistryFileDescription@2@@Z @ 58 NONAME ; void Swi::CPlan::RunFilesBeforeShutdownL(class Swi::CSisRegistryFileDescription const &)
+	?IsInstallSuCertBased@CApplication@Swi@@QBEHXZ @ 59 NONAME ; int Swi::CApplication::IsInstallSuCertBased(void) const
+	?SetInstallSuCertBased@CApplication@Swi@@QAEXXZ @ 60 NONAME ; void Swi::CApplication::SetInstallSuCertBased(void)
+	?AddFileL@CApplication@Swi@@QAEXABVCSisRegistryFileDescription@2@@Z @ 61 NONAME ; void Swi::CApplication::AddFileL(class Swi::CSisRegistryFileDescription const &)
+	?FilesToSkipOnInstall@CApplication@Swi@@QBEABV?$RPointerArray@VCSisRegistryFileDescription@Swi@@@@XZ @ 62 NONAME ; class RPointerArray<class Swi::CSisRegistryFileDescription> const & Swi::CApplication::FilesToSkipOnInstall(void) const
+	?SkipFileOnInstallL@CApplication@Swi@@QAEXABVCFileDescription@Sis@2@VTChar@@@Z @ 63 NONAME ; void Swi::CApplication::SkipFileOnInstallL(class Swi::Sis::CFileDescription const &, class TChar)
+	?SetDrmProtected@CApplication@Swi@@QAEXH@Z @ 64 NONAME ; void Swi::CApplication::SetDrmProtected(int)
+	?IsDrmProtected@CApplication@Swi@@QBEHXZ @ 65 NONAME ; int Swi::CApplication::IsDrmProtected(void) const
+	?FilesToRunAfterInstall@CPlan@Swi@@QBEABV?$RPointerArray@VCSisRegistryFileDescription@Swi@@@@XZ @ 66 NONAME ; class RPointerArray<class Swi::CSisRegistryFileDescription> const & Swi::CPlan::FilesToRunAfterInstall(void) const
+	?RunFileAfterInstallL@CPlan@Swi@@QAEXABVCFileDescription@Sis@2@VTChar@@H@Z @ 67 NONAME ; void Swi::CPlan::RunFileAfterInstallL(class Swi::Sis::CFileDescription const &, class TChar, int)
+	?AppArcRegFiles@CPlan@Swi@@QBEABV?$RPointerArray@VTDesC16@@@@XZ @ 68 NONAME ; class RPointerArray<class TDesC16> const & Swi::CPlan::AppArcRegFiles(void) const
+	?ContainsPlugins@CPlan@Swi@@QBEHXZ @ 69 NONAME ; int Swi::CPlan::ContainsPlugins(void) const
+	?SetContainsPlugins@CPlan@Swi@@QAEXH@Z @ 70 NONAME ; void Swi::CPlan::SetContainsPlugins(int)
+	?AddAppArcRegFileL@CPlan@Swi@@QAEXABVTDesC16@@@Z @ 71 NONAME ; void Swi::CPlan::AddAppArcRegFileL(class TDesC16 const &)
+	?ResetAppArcRegFiles@CPlan@Swi@@QAEXXZ @ 72 NONAME ; void Swi::CPlan::ResetAppArcRegFiles(void)
+	?CopyDeviceSupportedLanguagesL@CApplication@Swi@@QAEXABV?$RArray@H@@@Z @ 73 NONAME ; void Swi::CApplication::CopyDeviceSupportedLanguagesL(class RArray<int> const &)
+	?GetMatchingDeviceLanguages@CApplication@Swi@@QAEABV?$RArray@H@@XZ @ 74 NONAME ; class RArray<int> const & Swi::CApplication::GetMatchingDeviceLanguages(void)
+	?PopulateMatchingDeviceLanguagesL@CApplication@Swi@@QAEXH@Z @ 75 NONAME ; void Swi::CApplication::PopulateMatchingDeviceLanguagesL(int)
+	?IsDeviceMatchingLanguage@CApplication@Swi@@QBEHH@Z @ 76 NONAME ; int Swi::CApplication::IsDeviceMatchingLanguage(int) const
+	?SetSisHelper@CApplication@Swi@@QAEXABVRSisHelper@2@@Z @ 77 NONAME ; void Swi::CApplication::SetSisHelper(class Swi::RSisHelper const &)
+	?GetSisHelper@CApplication@Swi@@QAEAAVRSisHelper@2@XZ @ 78 NONAME ; class Swi::RSisHelper & Swi::CApplication::GetSisHelper(void)
+	?GetAffectedApps@CPlan@Swi@@QBEXAAV?$RArray@VTAppUpdateInfo@Swi@@@@@Z @ 79 NONAME ABSENT ; void Swi::CPlan::GetAffectedApps(class RArray<class Swi::TAppUpdateInfo> &) const
+	?ResetAffectedApps@CPlan@Swi@@QAEXXZ @ 80 NONAME ABSENT ; void Swi::CPlan::ResetAffectedApps(void)
+	?SetAffectedApps@CPlan@Swi@@QAEXAAV?$RArray@VTAppUpdateInfo@Swi@@@@@Z @ 81 NONAME ABSENT ; void Swi::CPlan::SetAffectedApps(class RArray<class Swi::TAppUpdateInfo> &)
+
--- a/installationservices/swi/bwins/sislauncherclientU.DEF	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/bwins/sislauncherclientU.DEF	Tue Aug 31 15:21:33 2010 +0300
@@ -10,8 +10,18 @@
 	?StartDocumentL@RSisLauncherSession@Swi@@QAEXABVTDesC16@@H@Z @ 9 NONAME ; void Swi::RSisLauncherSession::StartDocumentL(class TDesC16 const &, int)
 	?NotifyNewAppsL@RSisLauncherSession@Swi@@QAEXABV?$RPointerArray@VTDesC16@@@@@Z @ 10 NONAME ; void Swi::RSisLauncherSession::NotifyNewAppsL(class RPointerArray<class TDesC16> const &)
 	?CheckApplicationInUseL@RSisLauncherSession@Swi@@QAEXVTUid@@@Z @ 11 NONAME ABSENT ; void Swi::RSisLauncherSession::CheckApplicationInUseL(class TUid)
-	?ParseSwTypeRegFileL@RSisLauncherSession@Swi@@QAEXAAVRFile@@AAV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@@Z @ 12 NONAME ; void Swi::RSisLauncherSession::ParseSwTypeRegFileL(class RFile &, class RPointerArray<class Swi::CSoftwareTypeRegInfo> &)
+	?ParseSwTypeRegFileL@RSisLauncherSession@Swi@@QAEXAAVRFile@@AAV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@@Z @ 12 NONAME ; void Swi::RSisLauncherSession::ParseSwTypeRegFileL(class RFile &, class RPointerArray<class USif::CSoftwareTypeRegInfo> &)
 	?UnregisterSifLauncherMimeTypesL@RSisLauncherSession@Swi@@QAEXABV?$RPointerArray@VHBufC8@@@@@Z @ 13 NONAME ; void Swi::RSisLauncherSession::UnregisterSifLauncherMimeTypesL(class RPointerArray<class HBufC8> const &)
 	?RegisterSifLauncherMimeTypesL@RSisLauncherSession@Swi@@QAEXABV?$RPointerArray@VHBufC8@@@@@Z @ 14 NONAME ; void Swi::RSisLauncherSession::RegisterSifLauncherMimeTypesL(class RPointerArray<class HBufC8> const &)
 	?RunAfterEcomNotificationL@RSisLauncherSession@Swi@@QAEXABV?$RPointerArray@VCSisRegistryFileDescription@Swi@@@@@Z @ 15 NONAME ; void Swi::RSisLauncherSession::RunAfterEcomNotificationL(class RPointerArray<class Swi::CSisRegistryFileDescription> const &)
+	?AsyncParseResourceFileSizeL@RSisLauncherSession@Swi@@QAEXABVRFile@@ABV?$RArray@W4TLanguage@@@@AAVTRequestStatus@@@Z @ 16 NONAME ; void Swi::RSisLauncherSession::AsyncParseResourceFileSizeL(class RFile const &, class RArray<enum TLanguage> const &, class TRequestStatus &)
+	?SyncParseResourceFileL@RSisLauncherSession@Swi@@QAEPAVCApplicationRegistrationData@Usif@@ABVRFile@@ABV?$RArray@W4TLanguage@@@@@Z @ 17 NONAME ; class Usif::CApplicationRegistrationData * Swi::RSisLauncherSession::SyncParseResourceFileL(class RFile const &, class RArray<enum TLanguage> const &)
+	?NotifyNewAppsL@RSisLauncherSession@Swi@@QAEXABV?$RPointerArray@VCApplicationRegistrationData@Usif@@@@@Z @ 18 NONAME ; void Swi::RSisLauncherSession::NotifyNewAppsL(class RPointerArray<class Usif::CApplicationRegistrationData> const &)
+	?AsyncParseResourceFileDataL@RSisLauncherSession@Swi@@QAEPAVCApplicationRegistrationData@Usif@@H@Z @ 19 NONAME ; class Usif::CApplicationRegistrationData * Swi::RSisLauncherSession::AsyncParseResourceFileDataL(int)
+	?Close@RSisLauncherSession@Swi@@QAEXXZ @ 20 NONAME ; void Swi::RSisLauncherSession::Close(void)
+	?NotifyNewAppsL@RSisLauncherSession@Swi@@QAEXABV?$RArray@VTAppUpdateInfo@Swi@@@@@Z @ 21 NONAME ; void Swi::RSisLauncherSession::NotifyNewAppsL(class RArray<class Swi::TAppUpdateInfo> const &)
+	?ExternalizeL@TAppUpdateInfo@Swi@@QBEXAAVRWriteStream@@@Z @ 22 NONAME ; void Swi::TAppUpdateInfo::ExternalizeL(class RWriteStream &) const
+	??0TAppUpdateInfo@Swi@@QAE@VTUid@@W4InstallActions@1@@Z @ 23 NONAME ; Swi::TAppUpdateInfo::TAppUpdateInfo(class TUid, enum Swi::InstallActions)
+	?InternalizeL@TAppUpdateInfo@Swi@@QAEXAAVRReadStream@@@Z @ 24 NONAME ; void Swi::TAppUpdateInfo::InternalizeL(class RReadStream &)
+	??0TAppUpdateInfo@Swi@@QAE@XZ @ 25 NONAME ; Swi::TAppUpdateInfo::TAppUpdateInfo(void)
 
--- a/installationservices/swi/bwins/sisregistryclient_v2U.def	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/bwins/sisregistryclient_v2U.def	Tue Aug 31 15:21:33 2010 +0300
@@ -182,8 +182,8 @@
 	?RollbackTransactionL@RSisRegistryWritableSession@Swi@@QAEXXZ @ 181 NONAME ; void Swi::RSisRegistryWritableSession::RollbackTransactionL(void)
 	?SerializedSize@CSisRegistryFileDescription@Swi@@QBEKXZ @ 182 NONAME ; unsigned long Swi::CSisRegistryFileDescription::SerializedSize(void) const
 	?IsFileRegisteredL@RSisRegistrySession@Swi@@QAEHABVTDesC16@@@Z @ 183 NONAME ; int Swi::RSisRegistrySession::IsFileRegisteredL(class TDesC16 const &)
-	?UpdateEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplication@2@ABVTDesC8@@ABV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@_J@Z @ 184 NONAME ; void Swi::RSisRegistryWritableSession::UpdateEntryL(class Swi::CApplication const &, class TDesC8 const &, class RPointerArray<class Swi::CSoftwareTypeRegInfo> const &, long long)
-	?AddEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplication@2@ABVTDesC8@@ABV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@_J@Z @ 185 NONAME ; void Swi::RSisRegistryWritableSession::AddEntryL(class Swi::CApplication const &, class TDesC8 const &, class RPointerArray<class Swi::CSoftwareTypeRegInfo> const &, long long)
+	?UpdateEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplication@2@ABVTDesC8@@ABV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@_J@Z @ 184 NONAME ; void Swi::RSisRegistryWritableSession::UpdateEntryL(class Swi::CApplication const &, class TDesC8 const &, class RPointerArray<class Usif::CSoftwareTypeRegInfo> const &, long long)
+	?AddEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplication@2@ABVTDesC8@@ABV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@_J@Z @ 185 NONAME ; void Swi::RSisRegistryWritableSession::AddEntryL(class Swi::CApplication const &, class TDesC8 const &, class RPointerArray<class Usif::CSoftwareTypeRegInfo> const &, long long)
 	?GetComponentIdForUidL@RSisRegistrySession@Swi@@QAEHABVTUid@@@Z @ 186 NONAME ; int Swi::RSisRegistrySession::GetComponentIdForUidL(class TUid const &)
 	?SetNameL@CSisRegistryPackage@Swi@@QAEXABVTDesC16@@@Z @ 187 NONAME ; void Swi::CSisRegistryPackage::SetNameL(class TDesC16 const &)
 	??0RSisRegistryHelper@Swi@@QAE@XZ @ 188 NONAME ABSENT ; Swi::RSisRegistryHelper::RSisRegistryHelper(void)
@@ -192,4 +192,12 @@
 	?GetEquivalentLanguagesL@RSisRegistryHelper@Swi@@QAEXW4TLanguage@@AAV?$RArray@W4TLanguage@@@@@Z @ 191 NONAME ABSENT ; void Swi::RSisRegistryHelper::GetEquivalentLanguagesL(enum TLanguage, class RArray<enum TLanguage> &)
 	?GetMatchingSupportedLanguagesL@RSisRegistryWritableEntry@Swi@@QAEXAAV?$RArray@W4TLanguage@@@@@Z @ 192 NONAME ; void Swi::RSisRegistryWritableEntry::GetMatchingSupportedLanguagesL(class RArray<enum TLanguage> &)
 	?RegistryFilesL@RSisRegistryEntry@Swi@@QAEXAAV?$RPointerArray@VHBufC16@@@@@Z @ 193 NONAME ; void Swi::RSisRegistryEntry::RegistryFilesL(class RPointerArray<class HBufC16> &)
+	?GetComponentIdsForUidL@RSisRegistrySession@Swi@@QAEXAAVTUid@@AAV?$RArray@H@@@Z @ 194 NONAME ; void Swi::RSisRegistrySession::GetComponentIdsForUidL(class TUid &, class RArray<int> &)
+	?UpdateEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplication@2@ABVCApplicationRegistrationData@Usif@@ABVCSisRegistryPackage@2@@Z @ 195 NONAME ; void Swi::RSisRegistryWritableSession::UpdateEntryL(class Swi::CApplication const &, class Usif::CApplicationRegistrationData const &, class Swi::CSisRegistryPackage const &)
+	?GetAppUidsForComponentL@RSisRegistrySession@Swi@@QAEXAAHAAV?$RArray@VTUid@@@@@Z @ 196 NONAME ; void Swi::RSisRegistrySession::GetAppUidsForComponentL(int &, class RArray<class TUid> &)
+	?GetComponentIdForPackageL@RSisRegistrySession@Swi@@QBEHABVTDesC16@@0@Z @ 197 NONAME ; int Swi::RSisRegistrySession::GetComponentIdForPackageL(class TDesC16 const &, class TDesC16 const &) const
+	?AddEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplicationRegistrationData@Usif@@ABVCSisRegistryPackage@2@@Z @ 198 NONAME ; void Swi::RSisRegistryWritableSession::AddEntryL(class Usif::CApplicationRegistrationData const &, class Swi::CSisRegistryPackage const &)
+	?SetComponentPresenceL@RSisRegistryWritableSession@Swi@@QAEXHH@Z @ 199 NONAME ; void Swi::RSisRegistryWritableSession::SetComponentPresenceL(int, int)
+	?RemoveAppRegInfoL@RSisRegistrySession@Swi@@QAEXABVTDesC16@@@Z @ 200 NONAME ; void Swi::RSisRegistrySession::RemoveAppRegInfoL(class TDesC16 const &)
+	?AddAppRegInfoL@RSisRegistrySession@Swi@@QAEXABVTDesC16@@@Z @ 201 NONAME ; void Swi::RSisRegistrySession::AddAppRegInfoL(class TDesC16 const &)
 
--- a/installationservices/swi/bwins/sisregistryclient_v2_legacyU.def	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/bwins/sisregistryclient_v2_legacyU.def	Tue Aug 31 15:21:33 2010 +0300
@@ -192,4 +192,10 @@
 	?GetEquivalentLanguagesL@RSisRegistryHelper@Swi@@QAEXW4TLanguage@@AAV?$RArray@W4TLanguage@@@@@Z @ 191 NONAME ; void Swi::RSisRegistryHelper::GetEquivalentLanguagesL(enum TLanguage, class RArray<enum TLanguage> &)
 	?GetMatchingSupportedLanguagesL@RSisRegistryWritableEntry@Swi@@QAEXAAV?$RArray@W4TLanguage@@@@@Z @ 192 NONAME ; void Swi::RSisRegistryWritableEntry::GetMatchingSupportedLanguagesL(class RArray<enum TLanguage> &)
 	?RegistryFilesL@RSisRegistryEntry@Swi@@QAEXAAV?$RPointerArray@VHBufC16@@@@@Z @ 193 NONAME ; void Swi::RSisRegistryEntry::RegistryFilesL(class RPointerArray<class HBufC16> &)
+	?GetComponentIdsForUidL@RSisRegistrySession@Swi@@QAEXAAVTUid@@AAV?$RArray@H@@@Z @ 194 NONAME ABSENT ; void Swi::RSisRegistrySession::GetComponentIdsForUidL(class TUid &, class RArray<int> &)
+	?UpdateEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplication@2@ABVCApplicationRegistrationData@Usif@@ABVCSisRegistryPackage@2@@Z @ 195 NONAME ABSENT ; void Swi::RSisRegistryWritableSession::UpdateEntryL(class Swi::CApplication const &, class Usif::CApplicationRegistrationData const &, class Swi::CSisRegistryPackage const &)
+	?GetAppUidsForComponentL@RSisRegistrySession@Swi@@QAEXAAHAAV?$RArray@VTUid@@@@@Z @ 196 NONAME ABSENT ; void Swi::RSisRegistrySession::GetAppUidsForComponentL(int &, class RArray<class TUid> &)
+	?GetComponentIdForPackageL@RSisRegistrySession@Swi@@QBEHABVTDesC16@@0@Z @ 197 NONAME ABSENT ; int Swi::RSisRegistrySession::GetComponentIdForPackageL(class TDesC16 const &, class TDesC16 const &) const
+	?AddEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplicationRegistrationData@Usif@@ABVCSisRegistryPackage@2@@Z @ 198 NONAME ABSENT ; void Swi::RSisRegistryWritableSession::AddEntryL(class Usif::CApplicationRegistrationData const &, class Swi::CSisRegistryPackage const &)
+	?SetComponentPresenceL@RSisRegistryWritableSession@Swi@@QAEXHH@Z @ 199 NONAME ABSENT ; void Swi::RSisRegistryWritableSession::SetComponentPresenceL(int, int)
 
--- a/installationservices/swi/bwins/swtypereginfou.def	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/bwins/swtypereginfou.def	Tue Aug 31 15:21:33 2010 +0300
@@ -1,19 +1,7 @@
 EXPORTS
-	?SetLocalizedSoftwareTypeNameL@CSoftwareTypeRegInfo@Swi@@QAEXW4TLanguage@@ABVTDesC16@@@Z @ 1 NONAME ; void Swi::CSoftwareTypeRegInfo::SetLocalizedSoftwareTypeNameL(enum TLanguage, class TDesC16 const &)
-	?UnserializeUniqueSwTypeNamesL@SoftwareTypeRegInfoUtils@Swi@@SAXABVTDesC16@@AAV?$RArray@VTPtrC16@@@@@Z @ 2 NONAME ; void Swi::SoftwareTypeRegInfoUtils::UnserializeUniqueSwTypeNamesL(class TDesC16 const &, class RArray<class TPtrC16> &)
-	??1CLocalizedSoftwareTypeName@Swi@@UAE@XZ @ 3 NONAME ; Swi::CLocalizedSoftwareTypeName::~CLocalizedSoftwareTypeName(void)
-	?ExternalizeL@CLocalizedSoftwareTypeName@Swi@@QBEXAAVRWriteStream@@@Z @ 4 NONAME ; void Swi::CLocalizedSoftwareTypeName::ExternalizeL(class RWriteStream &) const
-	?SerializeArrayL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@AAVRBuf8@@@Z @ 5 NONAME ; void Swi::SoftwareTypeRegInfoUtils::SerializeArrayL(class RPointerArray<class Swi::CSoftwareTypeRegInfo> const &, class RBuf8 &)
-	?NewL@CLocalizedSoftwareTypeName@Swi@@SAPAV12@AAVRReadStream@@@Z @ 6 NONAME ; class Swi::CLocalizedSoftwareTypeName * Swi::CLocalizedSoftwareTypeName::NewL(class RReadStream &)
-	?SerializeUniqueSwTypeNamesL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@AAVRBuf16@@@Z @ 7 NONAME ; void Swi::SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(class RPointerArray<class Swi::CSoftwareTypeRegInfo> const &, class RBuf16 &)
-	??1CSoftwareTypeRegInfo@Swi@@UAE@XZ @ 8 NONAME ; Swi::CSoftwareTypeRegInfo::~CSoftwareTypeRegInfo(void)
-	?UnserializeArrayL@SoftwareTypeRegInfoUtils@Swi@@SAXAAVRReadStream@@AAV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@@Z @ 9 NONAME ; void Swi::SoftwareTypeRegInfoUtils::UnserializeArrayL(class RReadStream &, class RPointerArray<class Swi::CSoftwareTypeRegInfo> &)
-	?NewL@CLocalizedSoftwareTypeName@Swi@@SAPAV12@ABVTDesC16@@W4TLanguage@@@Z @ 10 NONAME ; class Swi::CLocalizedSoftwareTypeName * Swi::CLocalizedSoftwareTypeName::NewL(class TDesC16 const &, enum TLanguage)
-	?NewL@CSoftwareTypeRegInfo@Swi@@SAPAV12@ABVTDesC16@@@Z @ 11 NONAME ; class Swi::CSoftwareTypeRegInfo * Swi::CSoftwareTypeRegInfo::NewL(class TDesC16 const &)
-	?NewL@CSoftwareTypeRegInfo@Swi@@SAPAV12@AAVRReadStream@@@Z @ 12 NONAME ; class Swi::CSoftwareTypeRegInfo * Swi::CSoftwareTypeRegInfo::NewL(class RReadStream &)
-	?ExtractMimeTypesL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@AAV?$RPointerArray@VHBufC8@@@@@Z @ 13 NONAME ; void Swi::SoftwareTypeRegInfoUtils::ExtractMimeTypesL(class RPointerArray<class Swi::CSoftwareTypeRegInfo> const &, class RPointerArray<class HBufC8> &)
-	?ExternalizeL@CSoftwareTypeRegInfo@Swi@@QBEXAAVRWriteStream@@@Z @ 14 NONAME ; void Swi::CSoftwareTypeRegInfo::ExternalizeL(class RWriteStream &) const
-	?NewLC@CLocalizedSoftwareTypeName@Swi@@SAPAV12@ABVTDesC16@@W4TLanguage@@@Z @ 15 NONAME ; class Swi::CLocalizedSoftwareTypeName * Swi::CLocalizedSoftwareTypeName::NewLC(class TDesC16 const &, enum TLanguage)
-	?SetMimeTypeL@CSoftwareTypeRegInfo@Swi@@QAEXABVTDesC16@@@Z @ 16 NONAME ; void Swi::CSoftwareTypeRegInfo::SetMimeTypeL(class TDesC16 const &)
-	?ExternalizedSize@CSoftwareTypeRegInfo@Swi@@QBEHXZ @ 17 NONAME ; int Swi::CSoftwareTypeRegInfo::ExternalizedSize(void) const
+	?UnserializeUniqueSwTypeNamesL@SoftwareTypeRegInfoUtils@Swi@@SAXABVTDesC16@@AAV?$RArray@VTPtrC16@@@@@Z @ 1 NONAME ; void Swi::SoftwareTypeRegInfoUtils::UnserializeUniqueSwTypeNamesL(class TDesC16 const &, class RArray<class TPtrC16> &)
+	?SerializeArrayL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@AAVRBuf8@@@Z @ 2 NONAME ; void Swi::SoftwareTypeRegInfoUtils::SerializeArrayL(class RPointerArray<class Usif::CSoftwareTypeRegInfo> const &, class RBuf8 &)
+	?ExtractMimeTypesL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@AAV?$RPointerArray@VHBufC8@@@@@Z @ 3 NONAME ; void Swi::SoftwareTypeRegInfoUtils::ExtractMimeTypesL(class RPointerArray<class Usif::CSoftwareTypeRegInfo> const &, class RPointerArray<class HBufC8> &)
+	?SerializeUniqueSwTypeNamesL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@AAVRBuf16@@@Z @ 4 NONAME ; void Swi::SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(class RPointerArray<class Usif::CSoftwareTypeRegInfo> const &, class RBuf16 &)
+	?UnserializeArrayL@SoftwareTypeRegInfoUtils@Swi@@SAXAAVRReadStream@@AAV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@@Z @ 5 NONAME ; void Swi::SoftwareTypeRegInfoUtils::UnserializeArrayL(class RReadStream &, class RPointerArray<class Usif::CSoftwareTypeRegInfo> &)
 
--- a/installationservices/swi/bwins/uissclientU.DEF	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/bwins/uissclientU.DEF	Tue Aug 31 15:21:33 2010 +0300
@@ -97,7 +97,7 @@
 	?UpdateProgressBarL@RUiHandler@Swi@@QAEXABVTAppInfo@2@H@Z @ 96 NONAME ; void Swi::RUiHandler::UpdateProgressBarL(class Swi::TAppInfo const &, int)
 	?NewL@CDisplayText@Swi@@SAPAV12@ABVTAppInfo@2@W4TFileTextOption@2@ABVTDesC8@@@Z @ 97 NONAME ; class Swi::CDisplayText * Swi::CDisplayText::NewL(class Swi::TAppInfo const &, enum Swi::TFileTextOption, class TDesC8 const &)
 	?NewLC@CDisplayText@Swi@@SAPAV12@ABVTAppInfo@2@W4TFileTextOption@2@ABVTDesC8@@@Z @ 98 NONAME ; class Swi::CDisplayText * Swi::CDisplayText::NewLC(class Swi::TAppInfo const &, enum Swi::TFileTextOption, class TDesC8 const &)
-	?UpdateProgressBarValueL@CProgressBarValuePublisher@Swi@@QAEXH@Z @ 99 NONAME ; void Swi::CProgressBarValuePublisher::UpdateProgressBarValueL(int)
+	?UpdateProgressBarValueL@CProgressBarValuePublisher@Swi@@QAEHH@Z @ 99 NONAME ; void Swi::CProgressBarValuePublisher::UpdateProgressBarValueL(int)
 	?SetFinalProgressBarValue@CProgressBarValuePublisher@Swi@@QAEXH@Z @ 100 NONAME ; void Swi::CProgressBarValuePublisher::SetFinalProgressBarValue(int)
 	?SetProgressBarValuePublisher@RUiHandler@Swi@@QAEXPAVCProgressBarValuePublisher@2@@Z @ 101 NONAME ; void Swi::RUiHandler::SetProgressBarValuePublisher(class Swi::CProgressBarValuePublisher *)
 	?NewL@CProgressBarValuePublisher@Swi@@SAPAV12@XZ @ 102 NONAME ; class Swi::CProgressBarValuePublisher * Swi::CProgressBarValuePublisher::NewL(void)
@@ -107,4 +107,10 @@
 	?ExternalizeL@CNativeComponentInfo@Swi@@QBEXAAVRWriteStream@@@Z @ 106 NONAME ; void Swi::CNativeComponentInfo::ExternalizeL(class RWriteStream &) const
 	?InternalizeL@CNativeComponentInfo@Swi@@QAEXAAVRReadStream@@@Z @ 107 NONAME ; void Swi::CNativeComponentInfo::InternalizeL(class RReadStream &)
 	?GetComponentInfo@RUissSession@Swi@@QAEXABVTDesC8@@AAVTDes8@@AAVTRequestStatus@@@Z @ 108 NONAME ; void Swi::RUissSession::GetComponentInfo(class TDesC8 const &, class TDes8 &, class TRequestStatus &)
+	?IconFileName@CNativeApplicationInfo@CNativeComponentInfo@Swi@@QBEABVTDesC16@@XZ @ 109 NONAME ; class TDesC16 const & Swi::CNativeComponentInfo::CNativeApplicationInfo::IconFileName(void) const
+	?GroupName@CNativeApplicationInfo@CNativeComponentInfo@Swi@@QBEABVTDesC16@@XZ @ 110 NONAME ; class TDesC16 const & Swi::CNativeComponentInfo::CNativeApplicationInfo::GroupName(void) const
+	?AppUid@CNativeApplicationInfo@CNativeComponentInfo@Swi@@QBEABVTUid@@XZ @ 111 NONAME ; class TUid const & Swi::CNativeComponentInfo::CNativeApplicationInfo::AppUid(void) const
+	?Name@CNativeApplicationInfo@CNativeComponentInfo@Swi@@QBEABVTDesC16@@XZ @ 112 NONAME ; class TDesC16 const & Swi::CNativeComponentInfo::CNativeApplicationInfo::Name(void) const
+	??1CNativeApplicationInfo@CNativeComponentInfo@Swi@@UAE@XZ @ 113 NONAME ; Swi::CNativeComponentInfo::CNativeApplicationInfo::~CNativeApplicationInfo(void)
+	?NewLC@CNativeApplicationInfo@CNativeComponentInfo@Swi@@SAPAV123@ABVTUid@@ABVTDesC16@@11@Z @ 114 NONAME ; class Swi::CNativeComponentInfo::CNativeApplicationInfo * Swi::CNativeComponentInfo::CNativeApplicationInfo::NewLC(class TUid const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
 
--- a/installationservices/swi/bwins/uissclient_legacyu.def	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/bwins/uissclient_legacyu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -97,8 +97,8 @@
 	?UpdateProgressBarL@RUiHandler@Swi@@QAEXABVTAppInfo@2@H@Z @ 96 NONAME ; void Swi::RUiHandler::UpdateProgressBarL(class Swi::TAppInfo const &, int)
 	?NewL@CDisplayText@Swi@@SAPAV12@ABVTAppInfo@2@W4TFileTextOption@2@ABVTDesC8@@@Z @ 97 NONAME ; class Swi::CDisplayText * Swi::CDisplayText::NewL(class Swi::TAppInfo const &, enum Swi::TFileTextOption, class TDesC8 const &)
 	?NewLC@CDisplayText@Swi@@SAPAV12@ABVTAppInfo@2@W4TFileTextOption@2@ABVTDesC8@@@Z @ 98 NONAME ; class Swi::CDisplayText * Swi::CDisplayText::NewLC(class Swi::TAppInfo const &, enum Swi::TFileTextOption, class TDesC8 const &)
-	?CalculateProgressBarValue@CProgressBarValuePublisher@Swi@@QAEHH@Z @ 99 NONAME ; void Swi::CProgressBarValuePublisher::UpdateProgressBarValueL(int)
-	?SetFinalProgressBarValue@CProgressBarValuePublisher@Swi@@QAEXH@Z @ 100 NONAME ; void Swi::CProgressBarValuePublisher::SetFinalProgressBarValue(int)
-	?SetProgressBarValuePublisher@RUiHandler@Swi@@QAEXPAVCProgressBarValuePublisher@2@@Z @ 101 NONAME ; void Swi::RUiHandler::SetProgressBarValuePublisher(class Swi::CProgressBarValuePublisher *)
-	?NewL@CProgressBarValuePublisher@Swi@@SAPAV12@XZ @ 102 NONAME  ; class Swi::CProgressBarValuePublisher * Swi::CProgressBarValuePublisher::NewL(void)
-	
+	?UpdateProgressBarValueL@CProgressBarValuePublisher@Swi@@QAEXH@Z @ 99 NONAME ABSENT ; void Swi::CProgressBarValuePublisher::UpdateProgressBarValueL(int)
+	?SetFinalProgressBarValue@CProgressBarValuePublisher@Swi@@QAEXH@Z @ 100 NONAME ABSENT ; void Swi::CProgressBarValuePublisher::SetFinalProgressBarValue(int)
+	?SetProgressBarValuePublisher@RUiHandler@Swi@@QAEXPAVCProgressBarValuePublisher@2@@Z @ 101 NONAME ABSENT ; void Swi::RUiHandler::SetProgressBarValuePublisher(class Swi::CProgressBarValuePublisher *)
+	?NewL@CProgressBarValuePublisher@Swi@@SAPAV12@XZ @ 102 NONAME ABSENT ; class Swi::CProgressBarValuePublisher * Swi::CProgressBarValuePublisher::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/eabi/apprscparseru.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+EXPORTS
+	_ZN17CAppRegInfoReader4NewLER3RFsRK7TDesC16 @ 1 NONAME
+	_ZN17CAppRegInfoReader5ReadLERK6RArrayI9TLanguageE @ 2 NONAME
+	_ZN17CAppRegInfoReaderD0Ev @ 3 NONAME
+	_ZN17CAppRegInfoReaderD1Ev @ 4 NONAME
+	_ZN17CAppRegInfoReaderD2Ev @ 5 NONAME
+	_ZTI17CAppRegInfoReader @ 6 NONAME
+	_ZTV17CAppRegInfoReader @ 7 NONAME
+	_ZN17CAppRegInfoReader4NewLER3RFsRK5RFile @ 8 NONAME
+	_ZTI15CLocalizableRsc @ 9 NONAME
+	_ZTV15CLocalizableRsc @ 10 NONAME
+
--- a/installationservices/swi/eabi/planU.DEF	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/eabi/planU.DEF	Tue Aug 31 15:21:33 2010 +0300
@@ -83,4 +83,7 @@
 	_ZNK3Swi12CApplication24IsDeviceMatchingLanguageEi @ 82 NONAME
 	_ZN3Swi12CApplication12SetSisHelperERKNS_10RSisHelperE @ 83 NONAME
 	_ZN3Swi12CApplication12GetSisHelperEv @ 84 NONAME
+	_ZN3Swi5CPlan15SetAffectedAppsER6RArrayINS_14TAppUpdateInfoEE @ 85 NONAME
+	_ZN3Swi5CPlan17ResetAffectedAppsEv @ 86 NONAME
+	_ZNK3Swi5CPlan15GetAffectedAppsER6RArrayINS_14TAppUpdateInfoEE @ 87 NONAME
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/eabi/plan_legacyU.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,89 @@
+EXPORTS
+	_ZN3Swi12CApplication10SetInstallERKNS_3Sis11CControllerE @ 1 NONAME
+	_ZN3Swi12CApplication10SetUpgradeERKNS_3Sis11CControllerE @ 2 NONAME
+	_ZN3Swi12CApplication11RemoveFileLERKNS_27CSisRegistryFileDescriptionE @ 3 NONAME
+	_ZN3Swi12CApplication11SetPackageLERKNS_19CSisRegistryPackageE @ 4 NONAME
+	_ZN3Swi12CApplication12AddPropertyLERKNS0_9TPropertyE @ 5 NONAME
+	_ZN3Swi12CApplication13SetUninstallLERKNS_19CSisRegistryPackageE @ 6 NONAME
+	_ZN3Swi12CApplication13SetControllerE4TUid @ 7 NONAME
+	_ZN3Swi12CApplication13SetControllerERKNS_3Sis11CControllerE @ 8 NONAME
+	_ZN3Swi12CApplication15SetAugmentationERKNS_3Sis11CControllerE @ 9 NONAME
+	_ZN3Swi12CApplication17RunFileOnInstallLERKNS_3Sis16CFileDescriptionE5TChar @ 10 NONAME
+	_ZN3Swi12CApplication17SetPartialUpgradeERKNS_3Sis11CControllerE @ 11 NONAME
+	_ZN3Swi12CApplication18SetPreInstalledAppERKNS_3Sis11CControllerE @ 12 NONAME
+	_ZN3Swi12CApplication19RunFileOnUninstallLERKNS_27CSisRegistryFileDescriptionE @ 13 NONAME
+	_ZN3Swi12CApplication20SetPreInstalledPatchERKNS_3Sis11CControllerE @ 14 NONAME
+	_ZN3Swi12CApplication21DisplayFileOnInstallLERKNS_3Sis16CFileDescriptionE5TChar @ 15 NONAME
+	_ZN3Swi12CApplication23AddEmbeddedApplicationLEPS0_ @ 16 NONAME
+	_ZN3Swi12CApplication23DisplayFileOnUninstallLERKNS_27CSisRegistryFileDescriptionE @ 17 NONAME
+	_ZN3Swi12CApplication4NewLEv @ 18 NONAME
+	_ZN3Swi12CApplication5NewLCEv @ 19 NONAME
+	_ZN3Swi12CApplication8AddFileLERKNS_3Sis16CFileDescriptionE5TChar @ 20 NONAME
+	_ZN3Swi12CApplication8SetInROMEv @ 21 NONAME
+	_ZN3Swi15CUserSelections11SetOptionsLERK6RArrayIiE @ 22 NONAME
+	_ZN3Swi5CPlan11SetAppInfoLERKNS_8TAppInfoE @ 23 NONAME
+	_ZN3Swi5CPlan14SetApplicationEPNS_12CApplicationE @ 24 NONAME
+	_ZN3Swi5CPlan25AddInstallFileForProgressEx @ 25 NONAME
+	_ZN3Swi5CPlan26SetApplicationInformationLERK7TDesC16S3_RK8TVersion @ 26 NONAME
+	_ZN3Swi5CPlan27AddUninstallFileForProgressEv @ 27 NONAME
+	_ZN3Swi5CPlan4NewLEv @ 28 NONAME
+	_ZN3Swi5CPlanD0Ev @ 29 NONAME
+	_ZN3Swi5CPlanD1Ev @ 30 NONAME
+	_ZN3Swi5CPlanD2Ev @ 31 NONAME
+	_ZNK3Swi12CApplication10FilesToAddEv @ 32 NONAME
+	_ZNK3Swi12CApplication10PropertiesEv @ 33 NONAME
+	_ZNK3Swi12CApplication11ControllerLEv @ 34 NONAME
+	_ZNK3Swi12CApplication11IsUninstallEv @ 35 NONAME
+	_ZNK3Swi12CApplication13FilesToRemoveEv @ 36 NONAME
+	_ZNK3Swi12CApplication14IsAugmentationEv @ 37 NONAME
+	_ZNK3Swi12CApplication16IsPartialUpgradeEv @ 38 NONAME
+	_ZNK3Swi12CApplication17IsPreInstalledAppEv @ 39 NONAME
+	_ZNK3Swi12CApplication19FilesToRunOnInstallEv @ 40 NONAME
+	_ZNK3Swi12CApplication19IsPreInstalledPatchEv @ 41 NONAME
+	_ZNK3Swi12CApplication20EmbeddedApplicationsEv @ 42 NONAME
+	_ZNK3Swi12CApplication21FilesToRunOnUninstallEv @ 43 NONAME
+	_ZNK3Swi12CApplication23FilesToDisplayOnInstallEv @ 44 NONAME
+	_ZNK3Swi12CApplication25FilesToDisplayOnUninstallEv @ 45 NONAME
+	_ZNK3Swi12CApplication7IsInROMEv @ 46 NONAME
+	_ZNK3Swi12CApplication8PackageLEv @ 47 NONAME
+	_ZNK3Swi12CApplication9IsInstallEv @ 48 NONAME
+	_ZNK3Swi12CApplication9IsUpgradeEv @ 49 NONAME
+	_ZNK3Swi5CPlan12ApplicationLEv @ 50 NONAME
+	_ZNK3Swi5CPlan21FinalProgressBarValueEv @ 51 NONAME
+	_ZNK3Swi5CPlan8AppInfoLEv @ 52 NONAME
+	_ZTIN3Swi12CApplicationE @ 53 NONAME ; #<TI>#
+	_ZTIN3Swi5CPlanE @ 54 NONAME ; #<TI>#
+	_ZTVN3Swi12CApplicationE @ 55 NONAME ; #<VT>#
+	_ZTVN3Swi5CPlanE @ 56 NONAME ; #<VT>#
+	_ZN3Swi12CApplication15AddSisStubFileLERKNS_27CSisRegistryFileDescriptionE @ 57 NONAME
+	_ZNK3Swi12CApplication12CanPropagateEv @ 58 NONAME
+	_ZNK3Swi12CApplication9StubDriveEv @ 59 NONAME
+	_ZN3Swi12CApplication18SetPreInstalledAppEv @ 60 NONAME
+	_ZN3Swi12CApplication20SetPreInstalledPatchEv @ 61 NONAME
+	_ZN3Swi12CApplication11RemoveFileLERK7TDesC16 @ 62 NONAME
+	_ZN3Swi5CPlan23RunFilesBeforeShutdownLERKNS_27CSisRegistryFileDescriptionE @ 63 NONAME
+	_ZNK3Swi5CPlan24FilesToRunBeforeShutdownEv @ 64 NONAME
+	_ZN3Swi12CApplication21SetInstallSuCertBasedEv @ 65 NONAME
+	_ZNK3Swi12CApplication20IsInstallSuCertBasedEv @ 66 NONAME
+	_ZN3Swi12CApplication18SkipFileOnInstallLERKNS_3Sis16CFileDescriptionE5TChar @ 67 NONAME
+	_ZN3Swi12CApplication8AddFileLERKNS_27CSisRegistryFileDescriptionE @ 68 NONAME
+	_ZNK3Swi12CApplication20FilesToSkipOnInstallEv @ 69 NONAME
+	_ZN3Swi12CApplication15SetDrmProtectedEi @ 70 NONAME
+	_ZNK3Swi12CApplication14IsDrmProtectedEv @ 71 NONAME
+	_ZN3Swi5CPlan19ResetAppArcRegFilesEv @ 72 NONAME
+	_ZN3Swi5CPlan20RunFileAfterInstallLERKNS_3Sis16CFileDescriptionE5TChari @ 73 NONAME
+	_ZNK3Swi5CPlan14AppArcRegFilesEv @ 74 NONAME
+	_ZNK3Swi5CPlan15ContainsPluginsEv @ 75 NONAME
+	_ZNK3Swi5CPlan22FilesToRunAfterInstallEv @ 76 NONAME
+	_ZN3Swi5CPlan17AddAppArcRegFileLERK7TDesC16 @ 77 NONAME
+	_ZN3Swi5CPlan18SetContainsPluginsEi @ 78 NONAME
+	_ZN3Swi12CApplication26GetMatchingDeviceLanguagesEv @ 79 NONAME
+	_ZN3Swi12CApplication29CopyDeviceSupportedLanguagesLERK6RArrayIiE @ 80 NONAME
+	_ZN3Swi12CApplication32PopulateMatchingDeviceLanguagesLEi @ 81 NONAME
+	_ZNK3Swi12CApplication24IsDeviceMatchingLanguageEi @ 82 NONAME
+	_ZN3Swi12CApplication12SetSisHelperERKNS_10RSisHelperE @ 83 NONAME
+	_ZN3Swi12CApplication12GetSisHelperEv @ 84 NONAME
+	_ZN3Swi5CPlan15SetAffectedAppsER6RArrayINS_14TAppUpdateInfoEE @ 85 NONAME ABSENT
+	_ZN3Swi5CPlan17ResetAffectedAppsEv @ 86 NONAME ABSENT
+	_ZNK3Swi5CPlan15GetAffectedAppsER6RArrayINS_14TAppUpdateInfoEE @ 87 NONAME ABSENT
+	
--- a/installationservices/swi/eabi/sislauncherclientU.DEF	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/eabi/sislauncherclientU.DEF	Tue Aug 31 15:21:33 2010 +0300
@@ -9,8 +9,20 @@
 	_ZN3Swi19RSisLauncherSession7ConnectEv @ 8 NONAME
 	_ZN3Swi19RSisLauncherSession9ShutdownLERK6RArrayI4TUidEi @ 9 NONAME
 	_ZN3Swi19RSisLauncherSession14NotifyNewAppsLERK13RPointerArrayI7TDesC16E @ 10 NONAME
-	_ZN3Swi19RSisLauncherSession19ParseSwTypeRegFileLER5RFileR13RPointerArrayINS_20CSoftwareTypeRegInfoEE @ 11 NONAME
+	_ZN3Swi19RSisLauncherSession19ParseSwTypeRegFileLER5RFileR13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEE @ 11 NONAME
 	_ZN3Swi19RSisLauncherSession29RegisterSifLauncherMimeTypesLERK13RPointerArrayI6HBufC8E @ 12 NONAME
 	_ZN3Swi19RSisLauncherSession31UnregisterSifLauncherMimeTypesLERK13RPointerArrayI6HBufC8E @ 13 NONAME
 	_ZN3Swi19RSisLauncherSession25RunAfterEcomNotificationLERK13RPointerArrayINS_27CSisRegistryFileDescriptionEE @ 14 NONAME
+	_ZN3Swi19RSisLauncherSession14NotifyNewAppsLERK13RPointerArrayIN4Usif28CApplicationRegistrationDataEE @ 15 NONAME
+	_ZN3Swi19RSisLauncherSession22SyncParseResourceFileLERK5RFileRK6RArrayI9TLanguageE @ 16 NONAME
+	_ZN3Swi19RSisLauncherSession27AsyncParseResourceFileDataLEi @ 17 NONAME
+	_ZN3Swi19RSisLauncherSession27AsyncParseResourceFileSizeLERK5RFileRK6RArrayI9TLanguageER14TRequestStatus @ 18 NONAME
+	_ZN3Swi19RSisLauncherSession5CloseEv @ 19 NONAME
+	_ZN3Swi14TAppUpdateInfo12InternalizeLER11RReadStream @ 20 NONAME
+	_ZN3Swi14TAppUpdateInfoC1E4TUidNS_14InstallActionsE @ 21 NONAME
+	_ZN3Swi14TAppUpdateInfoC1Ev @ 22 NONAME
+	_ZN3Swi14TAppUpdateInfoC2E4TUidNS_14InstallActionsE @ 23 NONAME
+	_ZN3Swi14TAppUpdateInfoC2Ev @ 24 NONAME
+	_ZN3Swi19RSisLauncherSession14NotifyNewAppsLERK6RArrayINS_14TAppUpdateInfoEE @ 25 NONAME
+	_ZNK3Swi14TAppUpdateInfo12ExternalizeLER12RWriteStream @ 26 NONAME
 
--- a/installationservices/swi/eabi/sisregistryclient_v2U.def	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/eabi/sisregistryclient_v2U.def	Tue Aug 31 15:21:33 2010 +0300
@@ -154,8 +154,8 @@
 	_ZNK3Swi17RSisRegistryEntry6TrustLEv @ 153 NONAME
 	_ZN3Swi17RSisRegistryEntry12TrustStatusLEv @ 154 NONAME
 	_ZN3Swi18CSisRegistryObject14SetTrustStatusERKNS_15TSisTrustStatusE @ 155 NONAME ABSENT
-	_ZNK3Swi18CSisRegistryObject11TrustStatusEv @ 156 NONAME 
-	_ZNK3Swi18CSisRegistryObject20InstallChainIndiciesEv @ 157 NONAME 
+	_ZNK3Swi18CSisRegistryObject11TrustStatusEv @ 156 NONAME
+	_ZNK3Swi18CSisRegistryObject20InstallChainIndiciesEv @ 157 NONAME
 	_ZN3Swi19RSisRevocationEntry22CheckRevocationStatusLERK6TDesC8 @ 158 NONAME
 	_ZN3Swi19RSisRevocationEntry23CancelRevocationStatusLEv @ 159 NONAME
 	_ZN3Swi19RSisRevocationEntry21CheckRevocationStatusERK6TDesC8R14TRequestStatus @ 160 NONAME
@@ -172,7 +172,7 @@
 	_ZN3Swi17RSisRegistryEntry24RemoveWithLastDependentLEv @ 171 NONAME
 	_ZN3Swi17RSisRegistryEntry27SetRemoveWithLastDependentLE4TUid @ 172 NONAME
 	_ZN3Swi18CSisRegistryObject26SetRemoveWithLastDependentEv @ 173 NONAME ABSENT
-	_ZNK3Swi18CSisRegistryObject23RemoveWithLastDependentEv @ 174 NONAME 
+	_ZNK3Swi18CSisRegistryObject23RemoveWithLastDependentEv @ 174 NONAME
 	_ZN3Swi17RSisRegistryEntry20AugmentationsNumberLEv @ 175 NONAME
 	_ZN3Swi17RSisRegistryEntry10RemovableLEv @ 176 NONAME
 	_ZN3Swi19RSisRegistrySession18RemovablePackagesLER13RPointerArrayINS_19CSisRegistryPackageEE @ 177 NONAME
@@ -204,10 +204,10 @@
 	_ZN3Swi27RSisRegistryWritableSession20RollbackTransactionLEv @ 203 NONAME
 	_ZNK3Swi27CSisRegistryFileDescription14SerializedSizeEv @ 204 NONAME
 	_ZN3Swi19RSisRegistrySession17IsFileRegisteredLERK7TDesC16 @ 205 NONAME
-	_ZN3Swi27RSisRegistryWritableSession12UpdateEntryLERKNS_12CApplicationERK6TDesC8RK13RPointerArrayINS_20CSoftwareTypeRegInfoEEx @ 206 NONAME
-	_ZN3Swi27RSisRegistryWritableSession9AddEntryLERKNS_12CApplicationERK6TDesC8RK13RPointerArrayINS_20CSoftwareTypeRegInfoEEx @ 207 NONAME
+	_ZN3Swi27RSisRegistryWritableSession12UpdateEntryLERKNS_12CApplicationERK6TDesC8RK13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEEx @ 206 NONAME
+	_ZN3Swi27RSisRegistryWritableSession9AddEntryLERKNS_12CApplicationERK6TDesC8RK13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEEx @ 207 NONAME
 	_ZN3Swi19RSisRegistrySession21GetComponentIdForUidLERK4TUid @ 208 NONAME
-	_ZN3Swi19CSisRegistryPackage8SetNameLERK7TDesC16 @ 209 NONAME 
+	_ZN3Swi19CSisRegistryPackage8SetNameLERK7TDesC16 @ 209 NONAME
 	_ZN3Swi18RSisRegistryHelper23GetEquivalentLanguagesLE9TLanguageR6RArrayIS1_E @ 210 NONAME ABSENT
 	_ZN3Swi18RSisRegistryHelper5CloseEv @ 211 NONAME ABSENT
 	_ZN3Swi18RSisRegistryHelper7ConnectEv @ 212 NONAME ABSENT
@@ -215,5 +215,12 @@
 	_ZN3Swi18RSisRegistryHelperC2Ev @ 214 NONAME ABSENT
 	_ZN3Swi25RSisRegistryWritableEntry30GetMatchingSupportedLanguagesLER6RArrayI9TLanguageE @ 215 NONAME
 	_ZN3Swi17RSisRegistryEntry14RegistryFilesLER13RPointerArrayI7HBufC16E @ 216 NONAME
+	_ZN3Swi19RSisRegistrySession22GetComponentIdsForUidLER4TUidR6RArrayIiE @ 217 NONAME
+	_ZN3Swi19RSisRegistrySession23GetAppUidsForComponentLERiR6RArrayI4TUidE @ 218 NONAME
+	_ZN3Swi27RSisRegistryWritableSession12UpdateEntryLERKNS_12CApplicationERKN4Usif28CApplicationRegistrationDataERKNS_19CSisRegistryPackageE @ 219 NONAME
+	_ZN3Swi27RSisRegistryWritableSession9AddEntryLERKN4Usif28CApplicationRegistrationDataERKNS_19CSisRegistryPackageE @ 220 NONAME
+	_ZNK3Swi19RSisRegistrySession25GetComponentIdForPackageLERK7TDesC16S3_ @ 221 NONAME
+	_ZN3Swi27RSisRegistryWritableSession21SetComponentPresenceLEii @ 222 NONAME
+	_ZN3Swi19RSisRegistrySession14AddAppRegInfoLERK7TDesC16 @ 223 NONAME
+	_ZN3Swi19RSisRegistrySession17RemoveAppRegInfoLERK7TDesC16 @ 224 NONAME
 
-
--- a/installationservices/swi/eabi/sisregistryclient_v2_legacyU.def	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/eabi/sisregistryclient_v2_legacyU.def	Tue Aug 31 15:21:33 2010 +0300
@@ -215,4 +215,10 @@
 	_ZN3Swi18RSisRegistryHelperC2Ev @ 214 NONAME
 	_ZN3Swi25RSisRegistryWritableEntry30GetMatchingSupportedLanguagesLER6RArrayI9TLanguageE @ 215 NONAME
 	_ZN3Swi17RSisRegistryEntry14RegistryFilesLER13RPointerArrayI7HBufC16E @ 216 NONAME
+	_ZN3Swi19RSisRegistrySession22GetComponentIdsForUidLER4TUidR6RArrayIiE @ 217 NONAME ABSENT
+	_ZN3Swi19RSisRegistrySession23GetAppUidsForComponentLERiR6RArrayI4TUidE @ 218 NONAME ABSENT
+	_ZN3Swi27RSisRegistryWritableSession12UpdateEntryLERKNS_12CApplicationERKN4Usif28CApplicationRegistrationDataERKNS_19CSisRegistryPackageE @ 219 NONAME ABSENT
+	_ZN3Swi27RSisRegistryWritableSession9AddEntryLERKN4Usif28CApplicationRegistrationDataERKNS_19CSisRegistryPackageE @ 220 NONAME ABSENT
+	_ZNK3Swi19RSisRegistrySession25GetComponentIdForPackageLERK7TDesC16S3_ @ 221 NONAME ABSENT
+	_ZN3Swi27RSisRegistryWritableSession21SetComponentPresenceLEii @ 222 NONAME ABSENT
 
--- a/installationservices/swi/eabi/swtypereginfou.def	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/eabi/swtypereginfou.def	Tue Aug 31 15:21:33 2010 +0300
@@ -1,27 +1,7 @@
 EXPORTS
-	_ZN3Swi20CSoftwareTypeRegInfo12SetMimeTypeLERK7TDesC16 @ 1 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfo29SetLocalizedSoftwareTypeNameLE9TLanguageRK7TDesC16 @ 2 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfo4NewLER11RReadStream @ 3 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfo4NewLERK7TDesC16 @ 4 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfoD0Ev @ 5 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfoD1Ev @ 6 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfoD2Ev @ 7 NONAME
-	_ZN3Swi24SoftwareTypeRegInfoUtils15SerializeArrayLERK13RPointerArrayINS_20CSoftwareTypeRegInfoEER5RBuf8 @ 8 NONAME
-	_ZN3Swi24SoftwareTypeRegInfoUtils17ExtractMimeTypesLERK13RPointerArrayINS_20CSoftwareTypeRegInfoEERS1_I6HBufC8E @ 9 NONAME
-	_ZN3Swi24SoftwareTypeRegInfoUtils17UnserializeArrayLER11RReadStreamR13RPointerArrayINS_20CSoftwareTypeRegInfoEE @ 10 NONAME
-	_ZN3Swi24SoftwareTypeRegInfoUtils27SerializeUniqueSwTypeNamesLERK13RPointerArrayINS_20CSoftwareTypeRegInfoEER6RBuf16 @ 11 NONAME
-	_ZN3Swi24SoftwareTypeRegInfoUtils29UnserializeUniqueSwTypeNamesLERK7TDesC16R6RArrayI7TPtrC16E @ 12 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeName4NewLER11RReadStream @ 13 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeName4NewLERK7TDesC169TLanguage @ 14 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeName5NewLCERK7TDesC169TLanguage @ 15 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeNameD0Ev @ 16 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeNameD1Ev @ 17 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeNameD2Ev @ 18 NONAME
-	_ZNK3Swi20CSoftwareTypeRegInfo12ExternalizeLER12RWriteStream @ 19 NONAME
-	_ZNK3Swi20CSoftwareTypeRegInfo16ExternalizedSizeEv @ 20 NONAME
-	_ZNK3Swi26CLocalizedSoftwareTypeName12ExternalizeLER12RWriteStream @ 21 NONAME
-	_ZTIN3Swi20CSoftwareTypeRegInfoE @ 22 NONAME
-	_ZTIN3Swi26CLocalizedSoftwareTypeNameE @ 23 NONAME
-	_ZTVN3Swi20CSoftwareTypeRegInfoE @ 24 NONAME
-	_ZTVN3Swi26CLocalizedSoftwareTypeNameE @ 25 NONAME
+	_ZN3Swi24SoftwareTypeRegInfoUtils15SerializeArrayLERK13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEER5RBuf8 @ 1 NONAME
+	_ZN3Swi24SoftwareTypeRegInfoUtils17ExtractMimeTypesLERK13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEERS1_I6HBufC8E @ 2 NONAME
+	_ZN3Swi24SoftwareTypeRegInfoUtils17UnserializeArrayLER11RReadStreamR13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEE @ 3 NONAME
+	_ZN3Swi24SoftwareTypeRegInfoUtils27SerializeUniqueSwTypeNamesLERK13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEER6RBuf16 @ 4 NONAME
+	_ZN3Swi24SoftwareTypeRegInfoUtils29UnserializeUniqueSwTypeNamesLERK7TDesC16R6RArrayI7TPtrC16E @ 5 NONAME
 
--- a/installationservices/swi/eabi/uissclientU.DEF	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/eabi/uissclientU.DEF	Tue Aug 31 15:21:33 2010 +0300
@@ -162,4 +162,14 @@
 	_ZTIN3Swi20CNativeComponentInfoE @ 161 NONAME
 	_ZTVN3Swi20CNativeComponentInfoE @ 162 NONAME
 	_ZN3Swi12RUissSession16GetComponentInfoERK6TDesC8R5TDes8R14TRequestStatus @ 163 NONAME
+	_ZN3Swi20CNativeComponentInfo22CNativeApplicationInfo5NewLCERK4TUidRK7TDesC16S7_S7_ @ 164 NONAME
+	_ZN3Swi20CNativeComponentInfo22CNativeApplicationInfoD0Ev @ 165 NONAME
+	_ZN3Swi20CNativeComponentInfo22CNativeApplicationInfoD1Ev @ 166 NONAME
+	_ZN3Swi20CNativeComponentInfo22CNativeApplicationInfoD2Ev @ 167 NONAME
+	_ZNK3Swi20CNativeComponentInfo22CNativeApplicationInfo12IconFileNameEv @ 168 NONAME
+	_ZNK3Swi20CNativeComponentInfo22CNativeApplicationInfo4NameEv @ 169 NONAME
+	_ZNK3Swi20CNativeComponentInfo22CNativeApplicationInfo6AppUidEv @ 170 NONAME
+	_ZNK3Swi20CNativeComponentInfo22CNativeApplicationInfo9GroupNameEv @ 171 NONAME
+	_ZTIN3Swi20CNativeComponentInfo22CNativeApplicationInfoE @ 172 NONAME
+	_ZTVN3Swi20CNativeComponentInfo22CNativeApplicationInfoE @ 173 NONAME
 
--- a/installationservices/swi/eabi/uissclient_legacyu.def	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/eabi/uissclient_legacyu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -148,8 +148,8 @@
 	_ZN3Swi10RUiHandler18UpdateProgressBarLERKNS_8TAppInfoEi @ 147 NONAME
 	_ZN3Swi12CDisplayText4NewLERKNS_8TAppInfoENS_15TFileTextOptionERK6TDesC8 @ 148 NONAME
 	_ZN3Swi12CDisplayText5NewLCERKNS_8TAppInfoENS_15TFileTextOptionERK6TDesC8 @ 149 NONAME
-	_ZN3Swi10RUiHandler28SetProgressBarValuePublisherEPNS_26CProgressBarValuePublisherE @ 150 NONAME 
-	_ZN3Swi26CProgressBarValuePublisher25CalculateProgressBarValueEi @ 151 NONAME 
-	_ZN3Swi26CProgressBarValuePublisher24SetFinalProgressBarValueEi @ 152 NONAME 
-	_ZN3Swi26CProgressBarValuePublisher4NewLEv @ 153 NONAME 
+	_ZN3Swi10RUiHandler28SetProgressBarValuePublisherEPNS_26CProgressBarValuePublisherE @ 150 NONAME ABSENT
+	_ZN3Swi26CProgressBarValuePublisher23UpdateProgressBarValueLEi @ 151 NONAME ABSENT
+	_ZN3Swi26CProgressBarValuePublisher24SetFinalProgressBarValueEi @ 152 NONAME ABSENT
+	_ZN3Swi26CProgressBarValuePublisher4NewLEv @ 153 NONAME ABSENT
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/group/apprscparser.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/**
+ @file
+ apprscparser
+*/
+
+target      apprscparser.dll
+CAPABILITY 	All -Tcb
+targettype  DLL
+UID			0x1000008D 0x2002E943
+VENDORID 	0x70000001
+
+USERINCLUDE	../source/apprscparser
+USERINCLUDE	../inc
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN 
+
+SOURCEPATH	../source/apprscparser
+
+SOURCE		apprscparser.cpp
+
+LIBRARY euser.lib
+LIBRARY efsrv.lib
+LIBRARY estor.lib
+LIBRARY bafl.lib
+LIBRARY scrclient.lib
+
+SMPSAFE
\ No newline at end of file
--- a/installationservices/swi/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -58,13 +58,15 @@
 ../inc/swi/sisregistrylog.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/sisregistrylog.h)
 ../inc/swi/installtypes.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/installtypes.h)
 ../source/swiutils/swiutils.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/swiutils.h)
-
+../inc/swi/ipcutil.h 	  SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/ipcutil.h)
 // ROMKIT include
 ../inc/swi.iby /epoc32/rom/include/swi.iby
+../inc/swi_ncp.iby /epoc32/rom/include/swi_ncp.iby
 // swi.iby split into two part swi.iby and swiplugin.iby, swiplugin can be used by other team for implementing swi observer plug-in independently
 ../inc/swiplugin.iby /epoc32/rom/include/swiplugin.iby
 ../inc/switextshell.iby /epoc32/rom/include/switextshell.iby
-../inc/sisregistry_5.4.txt z:/system/data/sisregistry_5.4.txt
+../inc/swidaemon.iby /epoc32/rom/include/swidaemon.iby
+
 
 // export certstoretobin
 ../source/certstoretobin/Swicertstoretobin.pl	/epoc32/tools/swicertstoretobin.pl
@@ -72,6 +74,11 @@
 ../source/certstoretobin/Util.pm	/epoc32/tools/util.pm
 ../source/certstoretobin/AppGen.pm	/epoc32/tools/appgen.pm
 
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+../inc/sisregistry_5.3.txt z:/system/data/sisregistry_5.3.txt
+#endif
+
+
 PRJ_MMPFILES
 
 #ifndef TOOLS
@@ -91,6 +98,7 @@
 devinfosupportclient.mmp
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+apprscparser.mmp
 swtypereginfo.mmp
 #else
 integrityservices.mmp
@@ -109,17 +117,15 @@
 sisregistryserver_legacy.mmp
 #endif
 
-#ifndef __S60_
-daemon.mmp
-#endif
-
 plan.mmp
 sislauncherclient.mmp
 sislauncherserver.mmp
 installserver.mmp
 uiss.mmp
 backuprestore.mmp
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 swisidchecker.mmp
+#endif
 pkgremover.mmp
 #ifndef __WINS__
 sishelper_tshell.mmp
@@ -129,7 +135,6 @@
 #endif
 #endif
 
-
 PRJ_TESTMMPFILES
 
 makefile ../test/tdevcerts/maketestsis.fil
@@ -147,7 +152,7 @@
   ../test/tmimehandler/tmimehandler.mmp
   ../test/tuiadaptors/consoleserver.mmp
   ../test/tuiadaptors/consoleclient.mmp
-  ../test/tdaemon/tdaemon.mmp
+//  ../test/tdaemon/tdaemon.mmp
   ../test/tuiadaptors/tinstall.mmp
 
 #ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
@@ -212,7 +217,7 @@
 ../test/tsisfile/data/signedsis/swicertstore.dat /epoc32/winscw/c/tswi/certstore/tsis_swicertstore.dat
 ../test/tsisfile/data/signedsis/swicertstore_mandatory.dat /epoc32/winscw/c/tswi/certstore/swicertstore_mandatory.dat
 ../test/tsisfile/data/signedsis/swicertstore_sucert.dat /epoc32/winscw/c/tswi/certstore/swicertstore_sucert.dat
-
+../test/trevocation/swicertstore.dat /epoc32/winscw/c/tswi/trevocation/swicertstore.dat
 
 ../test/tsishelper/scripts/script /epoc32/winscw/c/tswi/tsishelper/scripts/tsishelper.script
 ../test/tsishelper/scripts/ini /epoc32/winscw/c/tswi/tsishelper/scripts/tsishelper.ini
@@ -331,6 +336,7 @@
 ../test/tuiscriptadaptors/scripts/tswiregcompfields.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tswiregcompfields.script
 ../test/tuiscriptadaptors/scripts/tswiregcompfields.ini /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tswiregcompfields.ini
 ../test/tsisregistrytest/Scripts/tsisregistrytest.script /epoc32/winscw/c/tswi/tsisregistrytest/scripts/tsisregistrytest.script
+../test/tsisregistrytest/Scripts/tsisregistrytest_tcb.script /epoc32/winscw/c/tswi/tsisregistrytest/scripts/tsisregistrytest_tcb.script
 ../test/tsisregistrytest/Scripts/tsisregistrytest.ini /epoc32/winscw/c/tswi/tsisregistrytest/scripts/tsisregistrytest.ini
 ../test/tsisregistrytest/Scripts/runregistrytests.script /epoc32/winscw/c/tswi/tsisregistrytest/scripts/runregistrytests.script
 ../test/tsisregistrytest/Scripts/generateregistrytestdata.script /epoc32/winscw/c/tswi/tsisregistrytest/scripts/generateregistrytestdata.script
@@ -369,6 +375,7 @@
 ../test/tsisregistrytest_legacy/Scripts/integritychecktest.ini /epoc32/winscw/c/tswi/tsisregistrytest/scripts/integritychecktest.ini
 ../test/tsisregistrytest_legacy/Scripts/integritychecktest5Install_winscw.script /epoc32/winscw/c/tswi/tsisregistrytest/scripts/integritychecktest5install_winscw.script
 ../test/tsisregistrytest_legacy/Scripts/integritychecktest5verify_winscw.script /epoc32/winscw/c/tswi/tsisregistrytest/scripts/integritychecktest5verify_winscw.script
+../test/writableswicertstore/certs/some_swicertstore.dat /epoc32/winscw/c/tswi/certstore/some_swicertstore.dat
 
 ../test/tsisregistrytest_legacy/data/backup.lst /epoc32/winscw/c/tswi/tsisregistrytest/data/backup.lst
 ../test/tsisregistrytest_legacy/data/hashForLang_txt.dat /epoc32/winscw/c/tswi/tsisregistrytest/data/hashforlang_txt.dat
@@ -458,6 +465,9 @@
 ../test/tuiscriptadaptors/scripts/testwritableswicertstore.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testwritableswicertstore.script
 ../test/tuiscriptadaptors/scripts/tuiscriptadaptors.ini /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tuiscriptadaptors.ini
 ../test/tuiscriptadaptors/scripts/tuiscriptadaptors.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tuiscriptadaptors.script
+../test/tuiscriptadaptors/scripts/nonusiftuiscriptadaptors.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/nonusiftuiscriptadaptors.script
+../test/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.ini /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.ini
+../test/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.script
 ../test/tuiscriptadaptors/scripts/tuiscriptadaptors_winscw.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tuiscriptadaptors_winscw.script
 ../test/tuiscriptadaptors/scripts/testvids.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testvids.script
 ../test/tuiscriptadaptors/scripts/testvids.ini /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testvids.ini
@@ -516,6 +526,10 @@
 ../test/tuiscriptadaptors/scripts/tcleanupinfrastructure_armv5.ini /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tcleanupinfrastructure_armv5.ini
 ../test/tuiscriptadaptors/scripts/tcleanupinfrastructure_armv5.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tcleanupinfrastructure_armv5.script
 ../test/tsisfile/data/files/uninstall_cdrive.log /epoc32/winscw/c/tswi/tuiscriptadaptors/data/uninstall_cdrive.log
+../test/tuiscriptadaptors/scripts/tswiappregintegration.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tswiappregintegration.script
+../test/tuiscriptadaptors/scripts/tswiappregintegration_stub.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tswiappregintegration_stub.script
+../test/tuiscriptadaptors/scripts/tswiappregintegration.ini /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tswiappregintegration.ini
+../test/tuiscriptadaptors/scripts/swiappregintegration_base01_stub.sis /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/swiappregintegration_base01_stub.sis 
 #else
 ../test/tuiscriptadaptors/scripts/tcleanupinfrastructure_legacy.ini /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tcleanupinfrastructure_legacy.ini
 ../test/tuiscriptadaptors/scripts/tcleanupinfrastructure_legacy.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tcleanupinfrastructure.script
@@ -892,6 +906,8 @@
 ../test/tuiscriptadaptors/scripts/testfotaupdate.ini		/epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testfotaupdate.ini
 ../test/tuiscriptadaptors/scripts/testfotaupdate1.script	/epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testfotaupdate1.script
 ../test/tuiscriptadaptors/scripts/testfotaupdate2.script	/epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testfotaupdate2.script
+../test/tuiscriptadaptors/scripts/fotaupdatestubapp1.sis		/epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/fotaupdatestubapp1.sis
+../test/tuiscriptadaptors/scripts/fotaupdatestubapp2.sis /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/fotaupdatestubapp2.sis
 
 // path substitution
 ../test/tpathsubst/scripts/tpathsubst.script /epoc32/winscw/c/tswi/tpathsubst/scripts/tpathsubst.script
@@ -931,17 +947,41 @@
 ../test/trevocation/scripts/tRevocation.ini	/epoc32/winscw/c/tswi/trevocation/scripts/trevocation.ini
 ../test/trevocation/scripts/tRevocation.script	/epoc32/winscw/c/tswi/trevocation/scripts/trevocation.script
 ../test/trevocation/scripts/tRevocation_unsigned.script	/epoc32/winscw/c/tswi/trevocation/scripts/trevocation_unsigned.script
+../test/trevocation/scripts/trevocationocsp_emulator.script	/epoc32/winscw/c/tswi/trevocation/scripts/trevocationocsp_emulator.script
+../test/trevocation/scripts/trevocationocsp_emulator_pre.bat /epoc32/winscw/c/tswi/trevocation/scripts/trevocationocsp_emulator_pre.bat
+../test/trevocation/scripts/trevocationocsp_emulator_post.bat /epoc32/winscw/c/tswi/trevocation/scripts/trevocationocsp_emulator_post.bat
 ../test/trevocation/sisInteg/winscw/ocsp_01.sis	/epoc32/winscw/c/tswi/trevocation/data/ocsp_01.sis
 ../test/trevocation/sisInteg/winscw/ocsp_02.sis	/epoc32/winscw/c/tswi/trevocation/data/ocsp_02.sis
 ../test/trevocation/sisInteg/winscw/ocsp_03.sis	/epoc32/winscw/c/tswi/trevocation/data/ocsp_03.sis
 ../test/trevocation/sisInteg/winscw/ocsp_04.sis	/epoc32/winscw/c/tswi/trevocation/data/ocsp_04.sis
 ../test/trevocation/sisInteg/winscw/ocsp_05.sis	/epoc32/winscw/c/tswi/trevocation/data/ocsp_05.sis
+../test/trevocation/sisInteg/winscw/certifiedsignedval.sis /epoc32/winscw/c/tswi/trevocation/data/certifiedsignedval.sis
+../test/trevocation/sisInteg/winscw/certifiedsignedverisignval.sis /epoc32/winscw/c/tswi/trevocation/data/certifiedsignedverisignval.sis
+../test/trevocation/sisInteg/winscw/expresssignedval.sis /epoc32/winscw/c/tswi/trevocation/data/expresssignedval.sis
+../test/trevocation/sisInteg/winscw/allsignedval.sis /epoc32/winscw/c/tswi/trevocation/data/allsignedval.sis
+../test/trevocation/sisInteg/winscw/selfsignedval.sis /epoc32/winscw/c/tswi/trevocation/data/selfsignedval.sis
+../test/trevocation/sisInteg/winscw/certifiedsignedrev.sis /epoc32/winscw/c/tswi/trevocation/data/certifiedsignedrev.sis
+../test/trevocation/sisInteg/winscw/certifiedsignedverisignrev.sis /epoc32/winscw/c/tswi/trevocation/data/certifiedsignedverisignrev.sis
+../test/trevocation/sisInteg/winscw/expresssignedrev.sis /epoc32/winscw/c/tswi/trevocation/data/expresssignedrev.sis
+../test/trevocation/sisInteg/winscw/allsignedrev.sis /epoc32/winscw/c/tswi/trevocation/data/allsignedrev.sis
+../test/trevocation/sisInteg/winscw/selfsignedrev.sis /epoc32/winscw/c/tswi/trevocation/data/selfsignedrev.sis
 ../test/trevocation/sisInteg/winscw/ocsprevocation.sis	/epoc32/winscw/c/tswi/trevocation/data/ocsprevocation.sis
 ../test/trevocation/sisInteg/winscw/ocsprevocation-sub1.sis	/epoc32/winscw/c/tswi/trevocation/data/ocsprevocation-sub1.sis
 ../test/trevocation/sisInteg/armv5/ocsp_01.sis	/epoc32/winscw/c/tswi/trevocation/data/armv5/ocsp_01.sis
 ../test/trevocation/sisInteg/armv5/ocsp_02.sis	/epoc32/winscw/c/tswi/trevocation/data/armv5/ocsp_02.sis
 ../test/trevocation/sisInteg/armv5/ocsp_03.sis	/epoc32/winscw/c/tswi/trevocation/data/armv5/ocsp_03.sis
 ../test/trevocation/sisInteg/armv5/ocsp_04.sis	/epoc32/winscw/c/tswi/trevocation/data/armv5/ocsp_04.sis
+../test/trevocation/sisInteg/armv5/certifiedsignedval.sis /epoc32/winscw/c/tswi/trevocation/data/armv5/certifiedsignedval.sis
+../test/trevocation/sisInteg/armv5/certifiedsignedverisignval.sis /epoc32/winscw/c/tswi/trevocation/data/armv5/certifiedsignedverisignval.sis
+../test/trevocation/sisInteg/armv5/expresssignedval.sis /epoc32/winscw/c/tswi/trevocation/data/armv5/expresssignedval.sis
+../test/trevocation/sisInteg/armv5/allsignedval.sis /epoc32/winscw/c/tswi/trevocation/data/armv5/allsignedval.sis
+../test/trevocation/sisInteg/armv5/selfsignedval.sis /epoc32/winscw/c/tswi/trevocation/data/armv5/selfsignedval.sis
+../test/trevocation/sisInteg/armv5/certifiedsignedrev.sis /epoc32/winscw/c/tswi/trevocation/data/armv5/certifiedsignedrev.sis
+../test/trevocation/sisInteg/armv5/certifiedsignedverisignrev.sis /epoc32/winscw/c/tswi/trevocation/data/armv5/certifiedsignedverisignrev.sis
+../test/trevocation/sisInteg/armv5/expresssignedrev.sis /epoc32/winscw/c/tswi/trevocation/data/armv5/expresssignedrev.sis
+../test/trevocation/sisInteg/armv5/allsignedrev.sis /epoc32/winscw/c/tswi/trevocation/data/armv5/allsignedrev.sis
+../test/trevocation/sisInteg/armv5/selfsignedrev.sis /epoc32/winscw/c/tswi/trevocation/data/armv5/selfsignedrev.sis
+
 ../test/trevocation/sisInteg/armv5/ocsprevocation.sis	/epoc32/winscw/c/tswi/trevocation/data/armv5/ocsprevocation.sis
 ../test/trevocation/sisInteg/armv5/ocsprevocation-sub1.sis	/epoc32/winscw/c/tswi/trevocation/data/armv5/ocsprevocation-sub1.sis
 
@@ -994,6 +1034,11 @@
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 ../test/tsisregistrytest/Scripts/batchfiles/tsisregistrytest_post.bat /epoc32/winscw/c/tswi/tsisregistrytest/scripts/batchfiles/tsisregistrytest_post.bat
 ../test/tsisregistrytest/Scripts/batchfiles/testlogging_pre.bat /epoc32/winscw/c/tswi/tsisregistrytest/scripts/batchfiles/testlogging_pre.bat
+../test/tsisregistrytest/Scripts/batchfiles/tsisregistrytest_tcb_pre.bat /epoc32/winscw/c/tswi/tsisregistrytest/scripts/batchfiles/tsisregistrytest_tcb_pre.bat
+../test/tsisregistrytest/Scripts/batchfiles/tsisregistrytest_tcb_post.bat /epoc32/winscw/c/tswi/tsisregistrytest/scripts/batchfiles/tsisregistrytest_tcb_post.bat
+../test/tsisregistrytest/Scripts/data/addappregdata.sis /epoc32/winscw/c/tswi/tsisregistrytest/scripts/data/addappregdata.sis
+../test/tuiscriptadaptors/scripts/batchfiles/tswiappregintegration_pre.bat /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/batchfiles/tswiappregintegration_pre.bat
+../test/tuiscriptadaptors/scripts/batchfiles/tswiappregintegration_post.bat /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/batchfiles/tswiappregintegration_post.bat
 #else
 ../test/tsisregistrytest_legacy/Scripts/batchfiles/tsisregistrytest_post.bat /epoc32/winscw/c/tswi/tsisregistrytest/scripts/batchfiles/tsisregistrytest_post.bat
 ../test/tsisregistrytest_legacy/Scripts/batchfiles/testlogging_pre.bat /epoc32/winscw/c/tswi/tsisregistrytest/scripts/batchfiles/testlogging_pre.bat
@@ -1037,7 +1082,6 @@
 ../test/tuiscriptadaptors/scripts/testpreinstalled_sucert_edrive.sis /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testpreinstalled_sucert_edrive.sis
 ../test/tuiscriptadaptors/scripts/testpreinstalled_sucert_edrive.pkg /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testpreinstalled_sucert_edrive.pkg
 ../test/tuiscriptadaptors/scripts/testnoaiacert.sis /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testnoaiacert.sis
-../test/writableswicertstore/certs/some_swicertstore.dat /epoc32/winscw/c/tswi/certstore/some_swicertstore.dat
 ../test/tdaemon/scripts/batchfiles/setupforemmcformat_pre.bat /epoc32/winscw/c/tswi/tdaemon/scripts/setupforemmcformat_pre.bat
 ../test/tdaemon/scripts/batchfiles/setupforemmcformat_post.bat /epoc32/winscw/c/tswi/tdaemon/scripts/setupforemmcformat_post.bat
 // End of file
--- a/installationservices/swi/group/daemon.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-MACRO __SECURE_API__
-MACRO __DATA_CAGING__
-CAPABILITY None
-
-TARGET		swidaemon.exe
-TARGETTYPE	exe
-TARGETPATH	sys/bin
-
-UID			0x1000007A 0x10202DCE
-VENDORID	0x70000001
-
-SOURCEPATH ../source/daemon
-USERINCLUDE ../inc
-USERINCLUDE ../inc/swi
-USERINCLUDE ../source/swis/server
-
-SOURCE daemon.cpp
-SOURCE main.cpp
-SOURCE drivewatcher.cpp
-SOURCE daemonbehaviour.cpp
-SOURCE daemoninstaller.cpp
-
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-LIBRARY	euser.lib 
-LIBRARY efsrv.lib
-LIBRARY apgrfx.lib
-LIBRARY apmime.lib
-LIBRARY apparc.lib
-
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-USERINCLUDE ../../swtransactionservices/inc
-LIBRARY stsclient.lib
-LIBRARY swiobserverclient.lib
-#endif
-
-LIBRARY sisregistryclient.lib
-LIBRARY swidataprovider.lib
-LIBRARY sisxfile.lib
-LIBRARY siscontroller.lib
-LIBRARY ecom.lib
-SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/group/export/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Software Install implementation 
+*
+*/
+
+
+/**
+ @file
+*/
+
+PRJ_PLATFORMS
+DEFAULT TOOLS
+TOOLS2
+
+PRJ_EXPORTS
+../../../inc/swidaemonplugin.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swidaemonplugin.h)
+../../../inc/pkgremover.h SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(swi/pkgremover.h)
+../../../inc/pkgremovererrors.h SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(swi/pkgremovererrors.h)
+../../../inc/sisregistrywritableentry.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/sisregistrywritableentry.h)
+../../../inc/swi/msisuihandlers.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/msisuihandlers.h)
+../../../inc/swi/sisdataprovider.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/sisdataprovider.h)
+../../../inc/swi/launcher.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/launcher.h)
+../../../inc/swi/asynclauncher.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/asynclauncher.h)
+../../../inc/swi/sisinstallerrors.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/sisinstallerrors.h)
+../../../inc/swi/hashcontainer.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/hashcontainer.h)
+../../../inc/swi/sisregistryentry.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/sisregistryentry.h)
+../../../inc/swi/sisrevocationentry.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/sisrevocationentry.h)
+../../../inc/swi/sisregistrysession.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/sisregistrysession.h)
+../../../inc/swi/sisregistrypackage.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/sisregistrypackage.h)
+../../../inc/swi/swispubsubdefs.h	SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/swispubsubdefs.h)
+../../../inc/swi/backuprestore.h	SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/backuprestore.h)
+../../../inc/swi/sispackagetrust.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/sispackagetrust.h)
+../../../inc/swi/sistruststatus.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/sistruststatus.h)
+../../../inc/swi/sisregistrylog.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/sisregistrylog.h)
+../../../inc/swi/installtypes.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/installtypes.h)
+../../../source/swiutils/swiutils.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/swiutils.h)
+../../../inc/swi/ipcutil.h 	  SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/ipcutil.h)
+
+// ROMKIT include
+../../../inc/swi.iby /epoc32/rom/include/swi.iby
+../../../inc/swi_ncp.iby /epoc32/rom/include/swi_ncp.iby
+// swi.iby split into two part swi.iby and swiplugin.iby, swiplugin can be used by other team for implementing swi observer plug-in independently
+../../../inc/swiplugin.iby /epoc32/rom/include/swiplugin.iby
+../../../inc/switextshell.iby /epoc32/rom/include/switextshell.iby
+
+// export certstoretobin
+../../../source/certstoretobin/Swicertstoretobin.pl	/epoc32/tools/swicertstoretobin.pl
+../../../source/certstoretobin/swicertstoretobin.bat	/epoc32/tools/swicertstoretobin.bat
+../../../source/certstoretobin/Util.pm	/epoc32/tools/util.pm
+../../../source/certstoretobin/AppGen.pm	/epoc32/tools/appgen.pm
+
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+../../../inc/sisregistry_5.3.txt z:/system/data/sisregistry_5.3.txt
+#endif
--- a/installationservices/swi/group/installserver.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/group/installserver.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -90,6 +90,7 @@
 SOURCEPATH	../source/swis/server
 SOURCE registrywrapper.cpp
 SOURCE installswtypehelper.cpp
+SOURCE appregextractor.cpp
 #endif
 
 // The following is also included in sishelper; to avoid creating a new 
@@ -131,8 +132,10 @@
 LIBRARY sectcbutil.lib
 LIBRARY swiobserverclient.lib
 LIBRARY swiobservedinfo.lib
-
-
+LIBRARY secsettingsclient.lib
+LIBRARY x509.lib
+LIBRARY pkixcertbase.lib
+ 
 #ifdef WINS
 library			emulator.lib
 #endif
@@ -141,3 +144,4 @@
 WIN32_LIBRARY		kernel32.lib
 end
 SMPSAFE
+
--- a/installationservices/swi/group/plan.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/group/plan.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -50,6 +50,12 @@
 SOURCEPATH	../source/swis/server
 SOURCE securityinfo.cpp
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+DEFFILE		plan.DEF
+#else
+DEFFILE		plan_legacy.def
+#endif
+
 LIBRARY euser.lib
 LIBRARY estor.lib
 LIBRARY uissclient.lib // Needed for TAppInfo
--- a/installationservices/swi/group/sislauncherclient.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/group/sislauncherclient.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -54,5 +54,7 @@
 LIBRARY		efsrv.lib
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 LIBRARY		swtypereginfo.lib
+library 	scrclient.lib
+library		ipcstream.lib
 #endif
 SMPSAFE
--- a/installationservices/swi/group/sislauncherserver.mmh	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/group/sislauncherserver.mmh	Tue Aug 31 15:21:33 2010 +0300
@@ -35,6 +35,7 @@
 userinclude		../source/sisregistry/common
 userinclude 	../inc/swi
 userinclude 	../inc
+userinclude 	../source/apprscparser
 
 sourcepath	../source/sislauncher/server
 
@@ -42,10 +43,10 @@
 source		sislaunchersession.cpp
 source		sislauncherstartup.cpp
 source		threadmonitor.cpp
-source      queueprocessor.cpp
+source		queueprocessor.cpp
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-SOURCE swtypereginfoparser.cpp
+SOURCE		swtypereginfoparser.cpp
 #endif
 
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
@@ -55,9 +56,14 @@
 library		estor.lib
 library		ecom.lib
 library		securitymanager.lib
+
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 LIBRARY		xmlframework.lib
 LIBRARY		bafl.lib
 LIBRARY		swtypereginfo.lib
+library		apprscparser.lib
+library		ipcstream.lib
+library		scrclient.lib
+library 	sislauncherclient.lib
 #endif
 
--- a/installationservices/swi/group/sisregistryclient.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/group/sisregistryclient.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -91,6 +91,8 @@
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 LIBRARY		swtypereginfo.lib
+LIBRARY		scrclient.lib
+library		ipcstream.lib
 #else
 LIBRARY         scsclient.lib
 LIBRARY		integrityservices.lib
--- a/installationservices/swi/group/sisregistryserver.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/group/sisregistryserver.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -41,6 +41,7 @@
 USERINCLUDE ../source/plan
 USERINCLUDE ../inc/swi 
 USERINCLUDE ../inc
+USERINCLUDE ../source/swis/server
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 USERINCLUDE ../../swtransactionservices/inc
 USERINCLUDE ../../swcomponentregistry/inc
--- a/installationservices/swi/group/sisregistryserver_legacy.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/group/sisregistryserver_legacy.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -40,7 +40,6 @@
 USERINCLUDE ../source/plan
 USERINCLUDE ../inc/swi 
 USERINCLUDE ../inc
-USERINCLUDE ../source/swis/server		    
 		    
 
 SOURCEPATH	../source/sisregistry
--- a/installationservices/swi/group/swisidchecker.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-TARGET swisidchecker.dll
-CAPABILITY All -Tcb
-TARGETTYPE plugin
-
-UID 0x10009d8d 0x10281FBC
-
-SOURCEPATH ../source/swisidchecker
-SOURCE swisidchecker.cpp swiinstallmonitor.cpp
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-start RESOURCE 10281fbc.rss
-target swisidchecker.rsc
-end
-
-LIBRARY euser.lib aplist.lib ecom.lib sisregistryclient.lib efsrv.lib 
-SMPSAFE
--- a/installationservices/swi/group/swtypereginfo.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/group/swtypereginfo.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -34,8 +34,11 @@
 SOURCE swtypereginfo.cpp
 
 USERINCLUDE ../inc/swi
+USERINCLUDE ../source/sisregistry/common
 
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY euser.lib efsrv.lib estor.lib
+LIBRARY 	scrclient.lib
+LIBRARY 	ipcstream.lib
 SMPSAFE
--- a/installationservices/swi/inc/integrityservices.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/integrityservices.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -275,6 +275,13 @@
 		 */
 		static void NormalizeDirectoryName(TDes& aFileName);
 		
+		/**
+		Creates a backup file by copying the source to a defined backup name. This MUST be used for executables.
+		The source files will then be deleted by invoking RLoader::Delete
+		@param aSource	the file to backup
+		@param aBackup	the name of the backup file
+		*/
+		void CopyToBackupL(const TDesC& aSource, const TDesC& aBackup);
 
 	private:
 	
--- a/installationservices/swi/inc/progressbar.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/progressbar.h	Tue Aug 31 15:21:33 2010 +0300
@@ -30,7 +30,7 @@
 	/// How many increments to update the bar on the uninstall of a file
 	const static TInt KProgressBarUninstallAmount=1;
 	
-	/// How many bytes to copy before updating the progress bar by one increment.
+	/// How many bytes to copy before updating the progress bar by one increment
 	const static TInt KProgressBarInstallChunkSize=1048576;  //1MB
 
 	/// The extra increment we add onto the end to make there always be some progress.
--- a/installationservices/swi/inc/scrhelperutil.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/scrhelperutil.h	Tue Aug 31 15:21:33 2010 +0300
@@ -132,6 +132,9 @@
 	HBufC8* GetLogInfoLC(const Usif::RSoftwareComponentRegistry& aScrSession, TInt aMaxLogEntries);
 	
 	void WriteToScrL(Usif::RSoftwareComponentRegistry& aScrSession, Usif::TComponentId& aCompId, CSisRegistryObject& aObject, Usif::TScrComponentOperationType aOpType);
+	void AddApplicationEntryL(Usif::RSoftwareComponentRegistry& aScrSession, Usif::TComponentId& aCompId, const Usif::CApplicationRegistrationData& aApplicationRegistrationData);
+	void DeleteApplicationEntriesL(Usif::RSoftwareComponentRegistry& aScrSession, Usif::TComponentId& aCompId);
+	void DeleteApplicationEntryL(Usif::RSoftwareComponentRegistry& aScrSession, const TUid& aAppUId);
 	
 	} // End of name space ScrHelperUtil
 	
--- a/installationservices/swi/inc/secutils.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/secutils.h	Tue Aug 31 15:21:33 2010 +0300
@@ -33,6 +33,7 @@
 
 namespace Swi
 {
+
 /**
  * Static class containing Security Manager's utility functions
  * @released
--- a/installationservices/swi/inc/sislauncherclient.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/sislauncherclient.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -29,117 +29,191 @@
 #include <e32base.h>
 #include <f32file.h>
 #include "sislauncherdefs.h"
-
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK  
+#include <usif/scr/appregentries.h>
+#include <usif/scr/screntries_platform.h>
+#endif
 const TInt KDefaultShutdownTimeout = 10000000;
 
 namespace Swi
 {
 class CSisRegistryFileDescription;
 class CSoftwareTypeRegInfo;
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
+class TAppUpdateInfo;
+#endif
 
 class RSisLauncherSession : public RSessionBase
-	{
+    {
 public:
-	/**
-	 * Connects to the SIS launcher server.
-	 */
-	IMPORT_C TInt Connect();
-	
-	/**
-	 * Launches an executable.
-	 *
-	 * @param aFileName The file name of the executable.
-	 * @param aWait     If true, then this call waits for the executable to terminate.
-	 */
-	IMPORT_C void RunExecutableL(const TDesC& aFileName, TBool aWait);
-	
-	/**
-	 * Opens a document.
-	 * @param aFileName The file name of the document to open.
-	 * @param aWait     If true, then this call waits for the document to close.
-	 */
-	IMPORT_C void StartDocumentL(const TDesC& aFileName, TBool aWait);
-	
-	/**
-	 * Opens a document using the mime-type to determine the helper application.
-	 * @param aFileName The file name of the document to open.
-	 * @param aMimeType The mime type of the document.
-	 * @param aWait     If true, then this call waits for the document to close.
-	 */
-	IMPORT_C void StartByMimeL(const TDesC& aFileName, const TDesC8& aMimeType, TBool aWait);
-	
+    /**
+     * Connects to the SIS launcher server.
+     */
+    IMPORT_C TInt Connect();
+    
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+    /**
+     * Closes to the SIS launcher session.
+     */
+    IMPORT_C void Close();
+#endif
+    
+    /**
+     * Launches an executable.
+     *
+     * @param aFileName The file name of the executable.
+     * @param aWait     If true, then this call waits for the executable to terminate.
+     */
+    IMPORT_C void RunExecutableL(const TDesC& aFileName, TBool aWait);
+    
+    /**
+     * Opens a document.
+     * @param aFileName The file name of the document to open.
+     * @param aWait     If true, then this call waits for the document to close.
+     */
+    IMPORT_C void StartDocumentL(const TDesC& aFileName, TBool aWait);
+    
+    /**
+     * Opens a document using the mime-type to determine the helper application.
+     * @param aFileName The file name of the document to open.
+     * @param aMimeType The mime type of the document.
+     * @param aWait     If true, then this call waits for the document to close.
+     */
+    IMPORT_C void StartByMimeL(const TDesC& aFileName, const TDesC8& aMimeType, TBool aWait);
+    
 
-	/**
-	 * Opens a document.
-	 * @param aFile The file handle of the document to open.
-	 * @param aWait     If true, then this call waits for the document to close.
-	 */
-	IMPORT_C void StartDocumentL(RFile& aFile, TBool aWait);
-	
-	/**
-	 * Opens a document using the mime-type to determine the helper application.
-	 * @param aFile The file handle of the document to open.
-	 * @param aMimeType The mime type of the document.
-	 * @param aWait     If true, then this call waits for the document to close.
-	 */
-	IMPORT_C void StartByMimeL(RFile& aFile, const TDesC8& aMimeType, TBool aWait);
-	
-	IMPORT_C void ShutdownAllL();
-	
-	/**
- 	 * Checks if the application is running. This function will leave with error KErrInUse if an 
- 	 * application is busy. Else it will leave with error KErrNone
- 	 *
- 	 * @param aUid The UID of the application to check.
-	 */
-	
-	IMPORT_C void CheckApplicationInUseL(RArray<TAppInUse>& aUidList);
+    /**
+     * Opens a document.
+     * @param aFile The file handle of the document to open.
+     * @param aWait     If true, then this call waits for the document to close.
+     */
+    IMPORT_C void StartDocumentL(RFile& aFile, TBool aWait);
+    
+    /**
+     * Opens a document using the mime-type to determine the helper application.
+     * @param aFile The file handle of the document to open.
+     * @param aMimeType The mime type of the document.
+     * @param aWait     If true, then this call waits for the document to close.
+     */
+    IMPORT_C void StartByMimeL(RFile& aFile, const TDesC8& aMimeType, TBool aWait);
+    
+    IMPORT_C void ShutdownAllL();
+    
+    /**
+     * Checks if the application is running. This function will leave with error KErrInUse if an 
+     * application is busy. Else it will leave with error KErrNone
+     *
+     * @param aUid The UID of the application to check.
+     */
+    
+    IMPORT_C void CheckApplicationInUseL(RArray<TAppInUse>& aUidList);
 
-	/**
- 	 * Shuts down an application. If the aUid parameter is null then all non system/hidden
- 	 * applications are closed. This function will leave with error KErrInUse if an 
- 	 * application is busy.
- 	 *
- 	 * @param aUid The UID of the application to close.
- 	 * @param aTimeout Timeout value in microseconds used when shutting down individual exe.
-	 */
-	IMPORT_C void ShutdownL(const RArray<TUid>& aUidList, TInt aTimeout);
+    /**
+     * Shuts down an application. If the aUid parameter is null then all non system/hidden
+     * applications are closed. This function will leave with error KErrInUse if an 
+     * application is busy.
+     *
+     * @param aUid The UID of the application to close.
+     * @param aTimeout Timeout value in microseconds used when shutting down individual exe.
+     */
+    IMPORT_C void ShutdownL(const RArray<TUid>& aUidList, TInt aTimeout);
 
-	/**
-	 * Notifies APPARC of new registration files. Causes APPARC to rescan its
-	 * import/apps directory, so avoid calling unnecessarily. This call
-	 * supports DEF084847 by telling APPARC which apps to treat as registered
-	 * even though installation is not quite complete.
-	 *
-	 * @param aFiles The array of filenames that have appeared during this installation.
-	 */
-	IMPORT_C void NotifyNewAppsL(const RPointerArray<TDesC>& aFiles);
+    /**
+     * Notifies APPARC of new registration files. Causes APPARC to rescan its
+     * import/apps directory, so avoid calling unnecessarily. This call
+     * supports DEF084847 by telling APPARC which apps to treat as registered
+     * even though installation is not quite complete.
+     *
+     * @param aFiles The array of filenames that have appeared during this installation.
+     */
+    IMPORT_C void NotifyNewAppsL(const RPointerArray<TDesC>& aFiles);
 
-	/**
-	 * Waits for ECOM to notify of changes before attempting to launch the files.
-	 * Files are opened client side before sending them to the server to avoid capability issues. 
-	 *  
-	 * As SWI may shutdown before ECOM will process delivered plug-ins 
-	 * the launcher will not terminate the usual 2secs after the last client. Instead a 
-	 * longer running timeout is used for two reasons.
-	 * a) to allow ECOM a 'reasonable' amount of time to do its work - we don't want to 
-	 *    kill the launcher while ECOM is still busy.
-	 * b) to shutdown correctly where SWI has incorrectly identified a plug-in resource file -
-	 *    we don't want to hang around forever waiting for an event that will never come.  
-	 * */
-	IMPORT_C void RunAfterEcomNotificationL(const RPointerArray<CSisRegistryFileDescription>& aFileList);
+    /**
+     * Waits for ECOM to notify of changes before attempting to launch the files.
+     * Files are opened client side before sending them to the server to avoid capability issues. 
+     *  
+     * As SWI may shutdown before ECOM will process delivered plug-ins 
+     * the launcher will not terminate the usual 2secs after the last client. Instead a 
+     * longer running timeout is used for two reasons.
+     * a) to allow ECOM a 'reasonable' amount of time to do its work - we don't want to 
+     *    kill the launcher while ECOM is still busy.
+     * b) to shutdown correctly where SWI has incorrectly identified a plug-in resource file -
+     *    we don't want to hang around forever waiting for an event that will never come.  
+     * */
+    IMPORT_C void RunAfterEcomNotificationL(const RPointerArray<CSisRegistryFileDescription>& aFileList);
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	IMPORT_C void ParseSwTypeRegFileL(RFile& aFile, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
+    IMPORT_C void ParseSwTypeRegFileL(RFile& aFile, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
 
-	IMPORT_C void RegisterSifLauncherMimeTypesL(const RPointerArray<HBufC8>& aMimeTypes);
+    IMPORT_C void RegisterSifLauncherMimeTypesL(const RPointerArray<HBufC8>& aMimeTypes);
 
-	IMPORT_C void UnregisterSifLauncherMimeTypesL(const RPointerArray<HBufC8>& aMimeTypes);
-
+    IMPORT_C void UnregisterSifLauncherMimeTypesL(const RPointerArray<HBufC8>& aMimeTypes);
+            
+    /**
+    * Populate CApplicationRegistrationData from the specified resource file, for the given languages and pass the data size back to the caller in TRequestStatus
+    *
+    * @param An already opened file handle.
+    * @param aAppLanguages List of the languages
+    * @return Return size of buffer needed in TRequestStatus
+    */
+    IMPORT_C void AsyncParseResourceFileSizeL(const RFile& aRegistrationFile, const RArray<TLanguage>& aAppLanguages, TRequestStatus& aStatus);
+    
+	/**
+    * Return populate CApplicationRegistrationData 
+    *
+    * @param aDataSize Size of buffer needed for CApplicationRegistrationData.
+    * @return Pointer to a CApplicationRegistrationData (caller owns it)
+    */
+    IMPORT_C Usif::CApplicationRegistrationData*  AsyncParseResourceFileDataL(TInt aDataSize);
+    
+	/**
+    * @param aRegistrationFileName registration file name to be parsed
+    * @return Pointer to a CApplicationRegistrationData (caller owns it)
+    */    
+    IMPORT_C Usif::CApplicationRegistrationData* SyncParseResourceFileL(const RFile& aRegistrationFile, const RArray<TLanguage>& aAppLanguages); 
+       
+	/**
+     * Notifies APPARC of new applications. This call  
+     * informs APPARC which apps to treat as registered
+     * even though installation is not quite complete.
+     *
+     * @param aFiles The array of application information to be treated as registered before this current installation completes.
+     */
+    IMPORT_C void NotifyNewAppsL(const RPointerArray<Usif::CApplicationRegistrationData>& aAppRegData);
+    
+    /**
+     * Notifies APPARC of applications which are removed/upgraded during installation       
+     * @param aAppUpdateInfo , array of app uids along with the action(remove/upgrade)
+     */
+    IMPORT_C void NotifyNewAppsL(const RArray<TAppUpdateInfo>& aAppUpdateInfo);
+    
 private:
-	void RegisterSifLauncherMimeTypesImplL(const RPointerArray<HBufC8>& aMimeTypes, TBool aRegister);
+    void RegisterSifLauncherMimeTypesImplL(const RPointerArray<HBufC8>& aMimeTypes, TBool aRegister);
+    HBufC8* iBuffForLanguages;        
 #endif
     };
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 	
+enum InstallActions
+       {
+       EAppInstalled = 0,
+       EAppUninstalled
+       };
+
+class TAppUpdateInfo
+    {
+public:    
+    IMPORT_C void InternalizeL(RReadStream& aReadStream);
+    IMPORT_C void ExternalizeL(RWriteStream& aWriteStream) const; 
+    IMPORT_C TAppUpdateInfo(TUid aAppUid, InstallActions aAction);
+    IMPORT_C TAppUpdateInfo();    
+public:
+    TUid iAppUid;
+    InstallActions iAction;
+    };
+#endif
+
 } //namespace
 
 #endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/inc/sisregistry_5.3.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+// Just need some text here to get rid of an unnecessary warning during rombuild
--- a/installationservices/swi/inc/sisregistry_5.4.txt	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-// Just need some text here to get rid of an unnecessary warning during rombuild
--- a/installationservices/swi/inc/sisregistrywritablesession.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/sisregistrywritablesession.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -30,9 +30,12 @@
 #include "sisregistrysession.h"
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include <usif/usifcommon.h>
+#include <usif/scr/appregentries.h>
+#include <usif/scr/screntries_platform.h>
 #endif
 namespace Swi
 {
+
 class CApplication;
 class CSisRegistryPackage;
 
@@ -177,6 +180,18 @@
 	*
 	*/
 	IMPORT_C void DeactivateComponentL(TComponentId aComponentId);
+	
+	/**
+    * Sets the component presence property for a given component id (If a package contains files 
+    * installed to a removable media, the package is considered as not fully present if the same
+    * media is not present. This property will be used to filter out applications, that are not
+    * fully present, from being diaplayed in the AppLib Menu.).
+    *
+    * @param aComponentId       Identifies a installed component
+    * @param aState             True, if the component is fully present, else False.
+    *
+    */
+	IMPORT_C void SetComponentPresenceL(TComponentId aComponentId, TBool aState);
 
 	/**
 	 * Adds a registry entry representing a package containing a Layered Execution Environment
@@ -187,7 +202,7 @@
 	 * @param aTransactionID The TransactionID for IntegrityServices provided by Swis of TInt64 type
 	 *
 	 */
-	IMPORT_C void AddEntryL(const CApplication& aApplication, const TDesC8& aController, const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, TInt64 aTransactionID);
+	IMPORT_C void AddEntryL(const CApplication& aApplication, const TDesC8& aController, const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, TInt64 aTransactionID);
 
 	/**
 	 * Updates the registry entry representing a package containing a Layered Execution Environment.
@@ -201,10 +216,13 @@
 	 * @param aTransactionID The TransactionID for IntegrityServices provided by Swis of TInt64 type
 	 *
 	 */
-	IMPORT_C void UpdateEntryL(const CApplication& aApplication, const TDesC8& aController, const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, TInt64 aTransactionID);
+	IMPORT_C void UpdateEntryL(const CApplication& aApplication, const TDesC8& aController, const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, TInt64 aTransactionID);
 
+	IMPORT_C void AddEntryL(const Usif::CApplicationRegistrationData& aApparcRegFileData, const CSisRegistryPackage& aSisRegistryPackage);
+	IMPORT_C void UpdateEntryL(const CApplication& aApplication, const Usif::CApplicationRegistrationData& aApparcRegFileData, const CSisRegistryPackage& aSisRegistryPackage);
 private:
 	void SetComponentStateL(TComponentId aComponentId, TScomoState aState);
+	TInt UserSelectedLanguageIndexL(const CApplication& aApplication) const;
 #endif
 	void AddEntryImplL(TInt aMessage, const CApplication& aApplication, const TDesC8& aController, TInt64 aTransactionID, TIpcArgs& aIpcArgs);
 	void UpdateEntryImplL(TInt aMessage, const CApplication& aApplication, const TDesC8& aController, TInt64 aTransactionID, TIpcArgs& aIpcArgs);
--- a/installationservices/swi/inc/swi.iby	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/swi.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -18,56 +18,8 @@
 #ifndef __SWI_IBY__
 #define __SWI_IBY__
 
-REM Secure Software Install
-
-file=ABI_DIR\BUILD_DIR\installserver.exe		sys\bin\installserver.exe
-file=ABI_DIR\BUILD_DIR\plan.dll				sys\bin\plan.dll
-file=ABI_DIR\BUILD_DIR\sishelper.dll			sys\bin\sishelper.dll
-file=ABI_DIR\BUILD_DIR\swidataprovider.dll	sys\bin\swidataprovider.dll
-file=ABI_DIR\BUILD_DIR\sisxfile.dll			sys\bin\sisxfile.dll
-file=ABI_DIR\BUILD_DIR\siscontroller.dll		sys\bin\siscontroller.dll
-file=ABI_DIR\BUILD_DIR\sisresult.dll			sys\bin\sisresult.dll
-file=ABI_DIR\BUILD_DIR\uiss.dll				sys\bin\uiss.dll
-file=ABI_DIR\BUILD_DIR\uissclient.dll		sys\bin\uissclient.dll
-file=ABI_DIR\BUILD_DIR\swidaemon.exe			sys\bin\swidaemon.exe
-file=ABI_DIR\BUILD_DIR\sisregistryclient.dll		sys\bin\sisregistryclient.dll
-file=ABI_DIR\BUILD_DIR\sisregistryserver.exe		sys\bin\sisregistryserver.exe
-file=ABI_DIR\BUILD_DIR\sislauncherclient.dll		sys\bin\sislauncherclient.dll
-file=ABI_DIR\BUILD_DIR\sislauncherserver.exe		sys\bin\sislauncherserver.exe
-
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-file=ABI_DIR\BUILD_DIR\swtypereginfo.dll		sys\bin\swtypereginfo.dll
-#endif
-
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-file=ABI_DIR\BUILD_DIR\integrityservices.dll		sys\bin\integrityservices.dll
-file=ABI_DIR\BUILD_DIR\sisregistryhelperserver.exe		sys\bin\sisregistryhelperserver.exe
-#endif
-
-file=ABI_DIR\BUILD_DIR\ocspsupport.exe			sys\bin\ocspsupport.exe
-file=ABI_DIR\BUILD_DIR\ocspsupportclient.dll		sys\bin\ocspsupportclient.dll
-file=ABI_DIR\BUILD_DIR\devinfosupportcommon.dll		sys\bin\devinfosupportcommon.dll
-file=ABI_DIR\BUILD_DIR\devinfosupport.exe			sys\bin\devinfosupport.exe
-file=ABI_DIR\BUILD_DIR\devinfosupportclient.dll		sys\bin\devinfosupportclient.dll
-file=ABI_DIR\BUILD_DIR\securitymanager.dll		sys\bin\securitymanager.dll
-file=ABI_DIR\BUILD_DIR\backuprestore.dll		sys\bin\backuprestore.dll
-file=ABI_DIR\BUILD_DIR\cafdataprovider.dll		sys\bin\cafdataprovider.dll
-file=ABI_DIR\BUILD_DIR\pkgremover.dll			sys\bin\pkgremover.dll
-file=ABI_DIR\BUILD_DIR\swiobserver.exe			sys\bin\swiobserver.exe
-file=ABI_DIR\BUILD_DIR\swiutils.dll			sys\bin\swiutils.dll
-
-#include "swiplugin.iby"
-
-file=ABI_DIR\BUILD_DIR\swiobserverclient.dll		sys\bin\swiobserverclient.dll
-
-#ifndef __TEXTSHELL_OBY__
-ECOM_PLUGIN(upsobserver.dll, upsobserver.rsc)
-#endif
-
-ECOM_PLUGIN(recsisx.dll, 0x10202DD0.rsc)
-
-ECOM_PLUGIN(swisidchecker.dll, 10281FBC.rsc)
-
 #include "swiconfig.iby"
+#include "swidaemon.iby"
+#include "swi_ncp.iby"
 
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/inc/swi/ipcutil.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Library to add s32strm support for IPC (ie. stream via multiple IPC read/writes instead of
+* copying to a buffer and streaming to/from there.
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology
+ @released
+*/
+
+#ifndef _IPCUTIL_H_
+#define _IPCUTIL_H_
+
+#include <scs/ipcstream.h>
+#include <scs/streamingarray.h>
+
+
+template <class T>
+TInt GetObjectSizeL(const T* aObject)
+    {
+    TInt size(0);
+   	if(aObject)
+        {
+        RNullWriteStream nullstream;
+        CleanupClosePushL(nullstream);
+        nullstream << *aObject;
+        nullstream.CommitL();
+        size = nullstream.BytesWritten();
+        CleanupStack::PopAndDestroy(&nullstream);
+        return size;
+        }
+   	return -1;
+    }
+
+template <class T>
+void WriteObjectDataL(const RMessage2& aMessage, TInt aParam, const T* aObject)
+    {
+    if(!aObject)
+        {
+        User::Leave(KErrAbort);
+        }
+    RIpcWriteStream ipcstream;
+    ipcstream.Open(aMessage, aParam);
+    CleanupClosePushL(ipcstream);
+    ipcstream << *aObject;
+    CleanupStack::PopAndDestroy(&ipcstream); // Data is committed in Close method
+    }
+
+#endif /* _IPCUTIL_H_ */
--- a/installationservices/swi/inc/swi/nativecomponentinfo.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/swi/nativecomponentinfo.h	Tue Aug 31 15:21:33 2010 +0300
@@ -38,6 +38,28 @@
 	class CNativeComponentInfo : public CBase
 		{
 	public:
+	    
+	    class CNativeApplicationInfo : public CBase
+	         {
+	     public:
+	         IMPORT_C static CNativeApplicationInfo* NewLC(const TUid& aAppUid, const TDesC& aName, const TDesC& aGroupName, const TDesC& aIconFileName);
+	         static CNativeApplicationInfo* NewL(RReadStream& aStream);
+	         void ExternalizeL(RWriteStream& aStream) const;
+	                             
+	         IMPORT_C const TUid& AppUid() const;
+	         IMPORT_C const TDesC& Name() const;
+	         IMPORT_C const TDesC& GroupName() const;
+	         IMPORT_C const TDesC& IconFileName() const;            	         
+	         IMPORT_C virtual ~CNativeApplicationInfo();	            
+	     private:                  
+	         CNativeApplicationInfo();
+	                 
+	         TUid iAppUid; // Application UID
+	         HBufC* iName; // Name of the application
+	         HBufC* iGroupName; // Group folder name where the application will be present
+	         HBufC* iIconFileName; // Full path of the icon file
+	         };
+	    
 		/**
 			Creates a new instance of the CNativeComponentInfo class.
 			@leave System wide error code
@@ -80,9 +102,17 @@
 		Usif::TAuthenticity iAuthenticity;				///< The authenticity of the component
 		TCapabilitySet iUserGrantableCaps;				///< User grantable capabilities required be the component
 		TInt iMaxInstalledSize;							///< The maximum size of the component after installation
-		TBool iHasExe;									///<Indicates Whether the component has an exe or not						
+		TBool iHasExe;									///<Indicates Whether the component has an exe or not
+		TBool iIsDriveSelectionRequired;                ///< Indicates Whether drive selection is required or not.
+		RCPointerArray<CNativeApplicationInfo> iApplications; ///< The array of application info of the component being queried
 		RCPointerArray<CNativeComponentInfo> iChildren;	///< The children component info, incase of embedded packages.	
 	
+		enum
+		    {
+		    // An arbitrary limit for the length of a single descriptor, for example aComponentName, aVersion or aVendor.
+		    KMaxDescriptorLength = 256,
+		    };
+		
 		};	
 	} // nameSpace Swi
 #endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
--- a/installationservices/swi/inc/swi/siscontroller.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/swi/siscontroller.h	Tue Aug 31 15:21:33 2010 +0300
@@ -33,6 +33,7 @@
 #include "sissignaturecertificatechain.h"
 #include "sispackagetrust.h"
 #include <hash.h>
+#include "nativecomponentinfo.h"
 
 namespace Swi
 {
@@ -41,7 +42,7 @@
 class CCertChainConstraints;
 
 namespace Sis
- {
+{
 
 class CInfo;
 class CPrerequisites;
@@ -320,7 +321,27 @@
     */
 	inline void SetHasExecutable(TBool aHasExe);
 	
-	#endif
+	/** Returns a flag 
+	@return iIsDriveSelectionRequired TBool flag
+	*/
+	inline TBool CController::DriveSelectionRequired() const;
+	
+	/** Sets the status of flag 
+	@param aIsDriveSelectionRequired TBool
+    */
+    inline void CController::SetDriveSelectionRequired(TBool aIsDriveSelectionRequired);
+	
+	/** Returns a pointer array of CNativeApplicationInfo 
+	@return RPointerArray iApplicationInfo
+	*/
+    inline RCPointerArray<CNativeComponentInfo::CNativeApplicationInfo>& CController::GetApplicationInfo();
+	
+    /** Adds the application Info to the array of CNativeApplicationInfo 
+	@param aApplicationInfo The info for a native application
+	*/
+    inline void CController::AddApplicationInfoL(const CNativeComponentInfo::CNativeApplicationInfo* aApplicationInfo);
+    
+    #endif
 	
 private:
 
@@ -372,6 +393,8 @@
 	
 	TBool iHasExe;						   ///< Indicates Whether the component has an exe or not
 	
+	TBool iIsDriveSelectionRequired;       ///< Indicates Whether drive selection is required or not.
+		
 	mutable TSisTrustStatus* iTrustStatus; ///< The install trust status
 
     mutable RArray<TInt> iCertChainIndices; ///< Contains the indexes of the chains
@@ -379,6 +402,7 @@
 	mutable TInt iRemoveWithLastDependent;  ///< Whether uninstall with last dependent
 	
 	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	RCPointerArray<CNativeComponentInfo::CNativeApplicationInfo> iApplicationInfo;  ///< Pointer Array of application info objects CNativeApplicationInfo.
 	TCapabilitySet iUserGrantableCapabilities;
 	#endif
 	
@@ -481,9 +505,30 @@
 	{
 	iHasExe = aHasExe;
 	}
+
+inline TBool CController::DriveSelectionRequired() const
+    {
+    return iIsDriveSelectionRequired;
+    }
+
+inline void CController::SetDriveSelectionRequired(TBool aIsDriveSelectionRequired)
+    {
+    iIsDriveSelectionRequired = aIsDriveSelectionRequired;
+    }
+
+inline RCPointerArray<CNativeComponentInfo::CNativeApplicationInfo>& CController::GetApplicationInfo()
+    {
+    return iApplicationInfo;
+    }
+
+inline void CController::AddApplicationInfoL(const CNativeComponentInfo::CNativeApplicationInfo* aApplicationInfo)
+    {
+    iApplicationInfo.AppendL(aApplicationInfo);
+    }
+
 #endif
 
- } // namespace Sis
+} // namespace Sis
 
 } // namespace Swi
 
--- a/installationservices/swi/inc/swi/sisregistrysession.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/swi/sisregistrysession.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -193,6 +193,47 @@
 	 * Returns the SCR component id for the base component (i.e. not an SP package/augmentation) with the given UID. 
 	 */
 	IMPORT_C Usif::TComponentId GetComponentIdForUidL(const TUid& aUid);	
+	
+	/**
+     * Returns the SCR component id for the component with the given packagename and vendor name
+     * @param aPackageName package name of the existing component 
+     * @param aVendorName vendor name of the existing component 
+     */
+	IMPORT_C Usif::TComponentId GetComponentIdForPackageL(const TDesC& aPackageName, const TDesC& aVendorName) const;
+	
+	 /**
+     * Gets the array of application uids associated with a given component Id
+     * @param aCompId component Id of the component whose associated applications need to be fetched
+     * @param aAppUids array of application uids associated with the component
+     */
+	IMPORT_C void GetAppUidsForComponentL(Usif::TComponentId& aCompId, RArray<TUid>& aAppUids);
+	
+	/**
+     * Gets the array of Component Ids associated with a given package.
+     * @param aPackageUid package uid of the component
+     * @param aComponentIds array of component id's associated with the package uid
+     */
+	IMPORT_C void GetComponentIdsForUidL(TUid& aPackageUid, RArray<Usif::TComponentId>& aComponentIds);
+	
+	/**
+    * Adds application registration information to the Software Component Registry
+    * Note that if the SCR already contains registration information for the given app this will be replaced
+    *
+    * @param aAppRegFile application's registration resource file name(with full path)
+    * @capability Tcb
+    */
+    IMPORT_C void AddAppRegInfoL(const TDesC& aAppRegFile);
+	    
+    /**
+     *  Removes application registration information from the Software Component Registry.
+     *  Note that this API should be called before the file is actually deleted
+    
+     *  @param aAppRegFile application's registration resource file name(with full path)
+     *  @capability Tcb
+     */
+    IMPORT_C void RemoveAppRegInfoL(const TDesC& aAppRegFile);
+
+		
 #endif
 
 protected:
--- a/installationservices/swi/inc/swi/sisuihandler.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/swi/sisuihandler.h	Tue Aug 31 15:21:33 2010 +0300
@@ -38,7 +38,6 @@
 class CWriteStream;
 class CProgressBarValuePublisher;
 
-
 /**
  * RClass which is used to make calls to the UI Support server using
  * the client-server framework. The ExecuteL() method is passed a
@@ -64,10 +63,12 @@
 	 */
 	IMPORT_C void UpdateProgressBarL(const TAppInfo& aAppInfo, TInt aAmount);
 	
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	/** Sets a reference to the progress bar value publisher object. The ownership is NOT transferred. */
 	IMPORT_C void SetProgressBarValuePublisher(CProgressBarValuePublisher* aPublisher);
 private:
 	CProgressBarValuePublisher* iPublisher; // Owned by the state machine
+#endif
 	};
 
 /**
@@ -819,6 +820,7 @@
 	return iAppVersion;
 	}
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	NONSHARABLE_CLASS(CProgressBarValuePublisher) : public CBase
 	/**
 	 * This class is used to publish the percentage value of the installation progress bar.
@@ -833,7 +835,7 @@
 		IMPORT_C void SetFinalProgressBarValue(TInt aValue);
 		
 		/** Updates the value of the progress bar value property by adding the given value to the current value. */
-		IMPORT_C TInt CalculateProgressBarValue(TInt aValue);
+		IMPORT_C TInt UpdateProgressBarValueL(TInt aValue);
 	
 	private:
 		CProgressBarValuePublisher();
@@ -845,6 +847,7 @@
 		TInt iLastPercentCompletion;
 		TInt iLastProgressValue;
 		};
+#endif
 
 } // namespace Swi
 
--- a/installationservices/swi/inc/swi/swispubsubdefs.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/swi/swispubsubdefs.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
--- a/installationservices/swi/inc/swi/swtypereginfo.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/swi/swtypereginfo.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -29,152 +29,23 @@
 #include <e32base.h>
 #include <s32mem.h>
 #include <ct/rcpointerarray.h>
+#include <usif/scr/screntries_platform.h>
 
 namespace Swi
 	{
 	_LIT(KTxtSoftwareTypeComponentProperty, "softwareTypes");
 
-	class CLocalizedSoftwareTypeName : public CBase
-		{
-	public:
-		IMPORT_C static CLocalizedSoftwareTypeName* NewL(const TDesC& aName, TLanguage aLocale);
-		IMPORT_C static CLocalizedSoftwareTypeName* NewLC(const TDesC& aName, TLanguage aLocale);
-		IMPORT_C static CLocalizedSoftwareTypeName* NewL(RReadStream& aStream);
-		
-		IMPORT_C virtual ~CLocalizedSoftwareTypeName();
-		
-		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-		
-		inline const TDesC& Name() const;
-		inline TLanguage Locale() const;
-		
-	private:
-		CLocalizedSoftwareTypeName();
-		CLocalizedSoftwareTypeName(TLanguage aLocale);
-
-		void InternalizeL(RReadStream& aStream);
-		
-	private:
-		HBufC* iName;
-		TLanguage iLocale;
-		};
-
-// ##########################################################################################
-
-	class CSoftwareTypeRegInfo : public CBase
-		{
-	public:
-		IMPORT_C static CSoftwareTypeRegInfo* NewL(const TDesC& aUniqueSoftwareTypeName);
-		IMPORT_C static CSoftwareTypeRegInfo* NewL(RReadStream& aStream);
-
-		IMPORT_C virtual ~CSoftwareTypeRegInfo();
-		
-		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-		IMPORT_C TInt ExternalizedSize() const;
-
-		inline void SetSifPluginUid(TUid aUid);
-		inline void SetInstallerSecureId(TSecureId aSecureId);
-		inline void SetExecutionLayerSecureId(TSecureId aSecureId);
-		IMPORT_C void SetMimeTypeL(const TDesC& aMimeType);
-		IMPORT_C void SetLocalizedSoftwareTypeNameL(TLanguage aLanguage, const TDesC& aName);
-
-		inline const TDesC& UniqueSoftwareTypeName() const;
-		inline TUid SifPluginUid() const;
-		inline TSecureId InstallerSecureId() const;
-		inline TSecureId ExecutionLayerSecureId() const;
-		inline const RPointerArray<HBufC>& MimeTypes() const;
-		inline const RPointerArray<CLocalizedSoftwareTypeName>& LocalizedSoftwareTypeNames() const;
-
-	private:
-		CSoftwareTypeRegInfo();
-		void InternalizeL(RReadStream& aStream);
-
-		enum { EUniqueSwTypeNameMaxLength = 32 }; 
-
-		HBufC* iUniqueSoftwareTypeName;
-		TUid iSifPluginUid;
-		TSecureId iInstallerSecureId;
-		TSecureId iExecutionLayerSecureId;
-		RCPointerArray<HBufC> iMimeTypes;
-		RCPointerArray<CLocalizedSoftwareTypeName> iLocalizedSoftwareTypeNames;
-		};
-
-// ##########################################################################################
-
 	class SoftwareTypeRegInfoUtils
 		{
 	public:
-		IMPORT_C static void SerializeArrayL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf8& aSerializedArray);
-		IMPORT_C static void UnserializeArrayL(RReadStream& aStream, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
-		IMPORT_C static void SerializeUniqueSwTypeNamesL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf& aSerializedNames);
+		IMPORT_C static void SerializeArrayL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf8& aSerializedArray);
+		IMPORT_C static void UnserializeArrayL(RReadStream& aStream, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
+		IMPORT_C static void SerializeUniqueSwTypeNamesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf& aSerializedNames);
 		IMPORT_C static void UnserializeUniqueSwTypeNamesL(const TDesC& aSerializedNames, RArray<TPtrC>& aUniqueSwTypeNames);
-		IMPORT_C static void ExtractMimeTypesL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RPointerArray<HBufC8>& aMimeTypes);
+		IMPORT_C static void ExtractMimeTypesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RPointerArray<HBufC8>& aMimeTypes);
 	public:
 		enum { KUniqueNameSeparator = 0x1E };  // 'record separator'
 		};
-
-// ##########################################################################################
-
-	inline const TDesC& CLocalizedSoftwareTypeName::Name() const
-		{
-		return *iName;
-		}
-
-	inline TLanguage CLocalizedSoftwareTypeName::Locale() const
-		{
-		return iLocale;
-		}
-
-// ##########################################################################################
-
-	inline void CSoftwareTypeRegInfo::SetSifPluginUid(TUid aUid)
-		{
-		iSifPluginUid = aUid;
-		}
-
-	inline void CSoftwareTypeRegInfo::SetInstallerSecureId(TSecureId aSecureId)
-		{
-		iInstallerSecureId = aSecureId;
-		}
-
-	inline void CSoftwareTypeRegInfo::SetExecutionLayerSecureId(TSecureId aSecureId)
-		{
-		iExecutionLayerSecureId = aSecureId;
-		}
-
-	inline const TDesC& CSoftwareTypeRegInfo::UniqueSoftwareTypeName() const
-		{
-		if (iUniqueSoftwareTypeName == NULL)
-			{
-			return KNullDesC;
-			}
-		return *iUniqueSoftwareTypeName;
-		}
-
-	inline TUid CSoftwareTypeRegInfo::SifPluginUid() const
-		{
-		return iSifPluginUid;
-		}
-
-	TSecureId CSoftwareTypeRegInfo::InstallerSecureId() const
-		{
-		return iInstallerSecureId;
-		}
-
-	TSecureId CSoftwareTypeRegInfo::ExecutionLayerSecureId() const
-		{
-		return iInstallerSecureId;
-		}
-
-	const RPointerArray<HBufC>& CSoftwareTypeRegInfo::MimeTypes() const
-		{
-		return iMimeTypes;
-		}
-
-	const RPointerArray<CLocalizedSoftwareTypeName>& CSoftwareTypeRegInfo::LocalizedSoftwareTypeNames() const
-		{
-		return iLocalizedSoftwareTypeNames;
-		}
 	}
 
 #endif // SWTYPEREGINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/inc/swi_ncp.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __SWI_NCP_IBY__
+#define __SWI_NCP_IBY__
+
+REM Secure Software Install
+
+file=ABI_DIR\BUILD_DIR\installserver.exe		sys\bin\installserver.exe
+file=ABI_DIR\BUILD_DIR\plan.dll				sys\bin\plan.dll
+file=ABI_DIR\BUILD_DIR\sishelper.dll			sys\bin\sishelper.dll
+file=ABI_DIR\BUILD_DIR\swidataprovider.dll	sys\bin\swidataprovider.dll
+file=ABI_DIR\BUILD_DIR\sisxfile.dll			sys\bin\sisxfile.dll
+file=ABI_DIR\BUILD_DIR\siscontroller.dll		sys\bin\siscontroller.dll
+file=ABI_DIR\BUILD_DIR\sisresult.dll			sys\bin\sisresult.dll
+file=ABI_DIR\BUILD_DIR\uiss.dll				sys\bin\uiss.dll
+file=ABI_DIR\BUILD_DIR\uissclient.dll		sys\bin\uissclient.dll
+file=ABI_DIR\BUILD_DIR\sisregistryclient.dll		sys\bin\sisregistryclient.dll
+file=ABI_DIR\BUILD_DIR\sisregistryserver.exe		sys\bin\sisregistryserver.exe
+file=ABI_DIR\BUILD_DIR\sislauncherclient.dll		sys\bin\sislauncherclient.dll
+file=ABI_DIR\BUILD_DIR\sislauncherserver.exe		sys\bin\sislauncherserver.exe
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+file=ABI_DIR\BUILD_DIR\apprscparser.dll			sys\bin\apprscparser.dll
+file=ABI_DIR\BUILD_DIR\swtypereginfo.dll		sys\bin\swtypereginfo.dll
+#endif
+
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+file=ABI_DIR\BUILD_DIR\integrityservices.dll		sys\bin\integrityservices.dll
+file=ABI_DIR\BUILD_DIR\sisregistryhelperserver.exe		sys\bin\sisregistryhelperserver.exe
+#endif
+
+file=ABI_DIR\BUILD_DIR\ocspsupport.exe			sys\bin\ocspsupport.exe
+file=ABI_DIR\BUILD_DIR\ocspsupportclient.dll		sys\bin\ocspsupportclient.dll
+file=ABI_DIR\BUILD_DIR\devinfosupportcommon.dll		sys\bin\devinfosupportcommon.dll
+file=ABI_DIR\BUILD_DIR\devinfosupport.exe			sys\bin\devinfosupport.exe
+file=ABI_DIR\BUILD_DIR\devinfosupportclient.dll		sys\bin\devinfosupportclient.dll
+file=ABI_DIR\BUILD_DIR\securitymanager.dll		sys\bin\securitymanager.dll
+file=ABI_DIR\BUILD_DIR\backuprestore.dll		sys\bin\backuprestore.dll
+file=ABI_DIR\BUILD_DIR\cafdataprovider.dll		sys\bin\cafdataprovider.dll
+file=ABI_DIR\BUILD_DIR\pkgremover.dll			sys\bin\pkgremover.dll
+file=ABI_DIR\BUILD_DIR\swiobserver.exe			sys\bin\swiobserver.exe
+file=ABI_DIR\BUILD_DIR\swiutils.dll			sys\bin\swiutils.dll
+
+#include "swiplugin.iby"
+
+file=ABI_DIR\BUILD_DIR\swiobserverclient.dll		sys\bin\swiobserverclient.dll
+
+#ifndef __TEXTSHELL_OBY__
+ECOM_PLUGIN(upsobserver.dll, upsobserver.rsc)
+#endif
+
+ECOM_PLUGIN(recsisx.dll, 0x10202DD0.rsc)
+
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+ECOM_PLUGIN(swisidchecker.dll, 10281FBC.rsc)
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/inc/swicenrep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines Install Central Repository Constants
+*
+*/
+
+
+/**
+ @file
+ @released
+ @internalTechnology
+*/
+
+namespace Swi
+{
+
+
+static const TUid KUidInstallationRepository  = {0x2002CFF6}; //Install Central Repository UID
+
+//This key indicates whether OCSP checks to be enabled for Express Signed certificates.
+static const TUint32 KCheckOCSPForExpressedSignedPkgKey = 0x00000001;
+
+//This key indicates whether OCSP checks to be enabled for Self Signed certificates.
+static const TUint32 KCheckOCSPForSelfSignedPkgKey = 0x00000002;
+
+//This key indicates whether OCSP checks to be enabled for Certified Signed certificates.
+static const TUint32 KCheckOCSPForCertifiedSignedPkgKey = 0x00000003;
+
+//This key indicates whether OCSP checks to be enabled for  CertifiedWithVeriSign Signed certificates.
+static const TUint32 KCheckOCSPForCertifiedWithVeriSignPkgKey = 0x00000004;
+
+//Install Central Repository Key to allow installation of Self Signed SIS files.
+static const TUint32 KAllowSelfSignedInstallKey  = 0x00000005; 
+} // namespace Swi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/inc/swidaemon.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* SWIDAEMON.IBY	
+*/
+
+#ifndef __SWIDAEMON_IBY__
+#define __SWIDAEMON_IBY__
+
+REM SWIDAEMON.IBY
+
+file=ABI_DIR\BUILD_DIR\swidaemon.exe			sys\bin\swidaemon.exe
+
+#endif
+
--- a/installationservices/swi/inc/switextshell.iby	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/switextshell.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -30,7 +30,9 @@
 #include <ocsp.iby>
 
 // This iby file also includes the http libraries needed for ocsp testing
+#ifndef __APPARC_IBY__
 #include <http.iby>
+#endif
 #include "hash.iby"
 
 #include "ups.iby" // Security utilities 9.5
@@ -61,49 +63,60 @@
 data=ROMDRIVE\resource\swicertstore.dat		\resource\swicertstore.dat  attrib=r
 #endif
 
+#ifndef __SWI_IBY__  
 // Core SWI code
 file=ABI_DIR\BUILD_DIR\installserver.exe			sys\bin\installserver.exe
-file=ABI_DIR\BUILD_DIR\plan.dll 				sys\bin\plan.dll
 file=ABI_DIR\BUILD_DIR\sishelper_tshell.dll			sys\bin\sishelper.dll
-file=ABI_DIR\BUILD_DIR\swidataprovider.dll 			sys\bin\swidataprovider.dll 
 file=ABI_DIR\BUILD_DIR\sisxfile.dll 				sys\bin\sisxfile.dll 
-file=ABI_DIR\BUILD_DIR\siscontroller.dll 			sys\bin\siscontroller.dll 
 file=ABI_DIR\BUILD_DIR\sisresult.dll				sys\bin\sisresult.dll
 file=ABI_DIR\BUILD_DIR\uiss.dll					sys\bin\uiss.dll
+
+#ifndef __APPARC_IBY__
+file=ABI_DIR\BUILD_DIR\plan.dll 				sys\bin\plan.dll
+file=ABI_DIR\BUILD_DIR\swidataprovider.dll 			sys\bin\swidataprovider.dll 
+file=ABI_DIR\BUILD_DIR\siscontroller.dll 			sys\bin\siscontroller.dll 
 file=ABI_DIR\BUILD_DIR\uissclient.dll 				sys\bin\uissclient.dll 
 
 file=ABI_DIR\BUILD_DIR\sisregistryclient.dll			sys\bin\sisregistryclient.dll
 file=ABI_DIR\BUILD_DIR\sisregistryserver.exe			sys\bin\sisregistryserver.exe
 file=ABI_DIR\BUILD_DIR\sislauncherclient.dll			sys\bin\sislauncherclient.dll
 file=ABI_DIR\BUILD_DIR\sislauncherserver_tshell.exe		sys\bin\sislauncherserver.exe
+#endif
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+#ifndef __APPARC_IBY__
+file=ABI_DIR\BUILD_DIR\apprscparser.dll			sys\bin\apprscparser.dll
 file=ABI_DIR\BUILD_DIR\swtypereginfo.dll		sys\bin\swtypereginfo.dll
 #endif
+#endif
 
 #ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 file=ABI_DIR\BUILD_DIR\integrityservices.dll			sys\bin\integrityservices.dll
 #endif
 
+#ifndef __APPARC_IBY__
 file=ABI_DIR\BUILD_DIR\ocspsupport.exe				sys\bin\ocspsupport.exe
 file=ABI_DIR\BUILD_DIR\ocspsupportclient.dll 			sys\bin\ocspsupportclient.dll 
 file=ABI_DIR\BUILD_DIR\devinfosupportcommon.dll			sys\bin\devinfosupportcommon.dll
 file=ABI_DIR\BUILD_DIR\devinfosupport.exe			sys\bin\devinfosupport.exe
 file=ABI_DIR\BUILD_DIR\devinfosupportclient.dll 		sys\bin\devinfosupportclient.dll 
 file=ABI_DIR\BUILD_DIR\securitymanager.dll			sys\bin\securitymanager.dll
+#endif
+
 file=ABI_DIR\BUILD_DIR\backuprestore.dll			sys\bin\backuprestore.dll
 file=ABI_DIR\BUILD_DIR\cafdataprovider.dll			sys\bin\cafdataprovider.dll
 file=ABI_DIR\BUILD_DIR\pkgremover.dll				sys\bin\pkgremover.dll
-file=ABI_DIR\BUILD_DIR\swiutils.dll			sys\bin\swiutils.dll
+file=ABI_DIR\BUILD_DIR\swiutils.dll				sys\bin\swiutils.dll
 
 // Core SWI - 9.5
 REM Including swiplugin.iby instead explicitly mentioning the files to avoid duplicate includes 
 #include "swiplugin.iby"
+#ifndef __APPARC_IBY__
 file=ABI_DIR\BUILD_DIR\swiobserverclient.dll 			sys\bin\swiobserverclient.dll
 file=ABI_DIR\BUILD_DIR\swiobserver.exe 				sys\bin\swiobserver.exe
-
+#endif
 
-
+#endif //__SWI_IBY__
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	//Universal Software Install Framework production
 	#include "scr.iby" // Software Component Registry
--- a/installationservices/swi/inc/tswi.iby	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/tswi.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -211,6 +211,10 @@
 data = \epoc32\winscw\c\tswi\tsisregistrytest\scripts\integritychecktest.ini \tswi\tsisregistrytest\scripts\integritychecktest.ini
 data = \epoc32\winscw\c\tswi\tsisregistrytest\scripts\integritychecktest.script \tswi\tsisregistrytest\scripts\integritychecktest.script
 
+//SWI AppReg integration test script
+data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tswiappregintegration.script \tswi\tuiscriptadaptors\scripts\tswiappregintegration.script
+data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini \tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini
+
 file=ABI_DIR\BUILD_DIR\sisregistryaccessserver.exe 		sys\bin\sisregistryaccessserver.exe
 #else
 //tsisregistrytest
@@ -313,8 +317,12 @@
 #endif //SECURITY_NORMAL_SWICERTSTORE__
 
 // tuiscriptadaptors (unit test for SWIS)
+
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini \tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.script \tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.script
+data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini \tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini
+data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.script \tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.script
+data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\nonusiftuiscriptadaptors.script \tswi\tuiscriptadaptors\scripts\nonusiftuiscriptadaptors.script
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuileavedialog.script \tswi\tuiscriptadaptors\scripts\tuileavedialog.script
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuileavedialogasync.script \tswi\tuiscriptadaptors\scripts\tuileavedialogasync.script
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\leavedialog_armv5.ini \tswi\tuiscriptadaptors\scripts\leavedialog.ini
@@ -343,6 +351,7 @@
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini \tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\testdevicelanguages.script \tswi\tuiscriptadaptors\scripts\testdevicelanguages.script
 #ifdef __SECURITY_NORMAL_SWICERTSTORE__
+
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\testpreinstalled_h2.script \tswi\tuiscriptadaptors\scripts\testpreinstalled.script
 #else
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\testpreinstalled_delete.script \tswi\tuiscriptadaptors\scripts\testpreinstalled_delete.script
@@ -676,6 +685,16 @@
 data = \epoc32\winscw\c\tswi\trevocation\data\armv5\ocsp_02.sis \tswi\trevocation\data\ocsp_02.sis 
 data = \epoc32\winscw\c\tswi\trevocation\data\armv5\ocsp_03.sis \tswi\trevocation\data\ocsp_03.sis
 data = \epoc32\winscw\c\tswi\trevocation\data\armv5\ocsp_04.sis \tswi\trevocation\data\ocsp_04.sis
+data = \epoc32\winscw\c\tswi\trevocation\data\armv5\certifiedsignedval.sis \tswi\trevocation\data\certifiedsignedval.sis
+data = \epoc32\winscw\c\tswi\trevocation\data\armv5\certifiedsignedVeriSignval.sis \tswi\trevocation\data\certifiedsignedVeriSignval.sis
+data = \epoc32\winscw\c\tswi\trevocation\data\armv5\expresssignedval.sis \tswi\trevocation\data\expresssignedval.sis
+data = \epoc32\winscw\c\tswi\trevocation\data\armv5\allsignedval.sis \tswi\trevocation\data\allsignedval.sis
+data = \epoc32\winscw\c\tswi\trevocation\data\armv5\selfsignedval.sis \tswi\trevocation\data\selfsignedval.sis
+data = \epoc32\winscw\c\tswi\trevocation\data\armv5\certifiedsignedrev.sis \tswi\trevocation\data\certifiedsignedrev.sis
+data = \epoc32\winscw\c\tswi\trevocation\data\armv5\certifiedsignedVeriSignrev.sis \tswi\trevocation\data\certifiedsignedVeriSignrev.sis
+data = \epoc32\winscw\c\tswi\trevocation\data\armv5\expresssignedrev.sis \tswi\trevocation\data\expresssignedrev.sis
+data = \epoc32\winscw\c\tswi\trevocation\data\armv5\allsignedrev.sis \tswi\trevocation\data\allsignedrev.sis
+data = \epoc32\winscw\c\tswi\trevocation\data\armv5\selfsignedrev.sis \tswi\trevocation\data\selfsignedrev.sis
 data = \epoc32\winscw\c\tswi\trevocation\data\armv5\ocsprevocation.sis \tswi\trevocation\data\ocsprevocation.sis
 data = \epoc32\winscw\c\tswi\trevocation\data\armv5\ocsprevocation-sub1.sis \tswi\trevocation\data\ocsprevocation-sub1.sis
 #endif
--- a/installationservices/swi/inc/tswitextshell.iby	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/inc/tswitextshell.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -250,6 +250,10 @@
 data = ZDRIVE\tswi\tsis\data\armv5\eclipsingromexepu.sis 			tswi\tsis\data\eclipsingromexepu.sis
 data = ZDRIVE\tswi\tsis\data\armv5\eclipsingromexepu_root5.sis 			tswi\tsis\data\eclipsingromexepu_root5.sis
 
+//temporary fix to include cenrep file for timezone server
+data = \epoc32\data\z\private\10202be9\1020383e.txt					private\10202be9\1020383e.txt
+
+
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 // Used for registry management
 file=ABI_DIR\BUILD_DIR\sisregistryaccessserver.exe 		sys\bin\sisregistryaccessserver.exe
@@ -284,8 +288,8 @@
 data = \epoc32\winscw\c\tswi\tsis\data\certstore\cacerts.dat \tswi\tsis\data\certstore\cacerts.dat
 data = \epoc32\winscw\c\tswi\tsis\data\certstore\certclients.dat \tswi\tsis\data\certstore\certclients.dat
 
-#include "thindump.iby"
-#include "sntpclient.iby"
+//#include "thindump.iby"
+//#include "sntpclient.iby"
 #include <insock.iby>
 #include <centralrepository.iby>
 
@@ -305,24 +309,33 @@
 #include "sqlite3.iby"
 
 file=ABI_DIR\BUILD_DIR\SDPCodec.dll SHARED_LIB_DIR\SDPCodec.dll
-
+#ifndef __TLS_IBY__
 file=ABI_DIR\DEBUG_DIR\securesocket.DLL	System\Libs\securesocket.DLL
+#endif //__TLS_IBY__
 
+#ifndef __IPSEC_IBY__
 file=ABI_DIR\DEBUG_DIR\ipsecpolapi.dll		System\Libs\ipsecpolapi.dll
 file=ABI_DIR\DEBUG_DIR\lib_pfkey.dll		System\Libs\lib_pfkey.dll
+#endif  // __IPSEC_IBY__
 #include "etext.iby"
 
-file=ABI_DIR\DEBUG_DIR\eikcore.dll		System\Libs\EikCore.dll
+//file=ABI_DIR\DEBUG_DIR\eikcore.dll		System\Libs\EikCore.dll
 
-file=ABI_DIR\BUILD_DIR\clock.dll 		System\Libs\Clock.dll
-file=ABI_DIR\BUILD_DIR\EIKSRVC.DLL				System\Libs\EIKSRVC.DLL
-file=ABI_DIR\BUILD_DIR\UIKLAF.DLL				System\Libs\UIKLAF.DLL
-file=ABI_DIR\BUILD_DIR\eikcoctl.dll 			System\Libs\EikCoctl.dll
-file=ABI_DIR\BUILD_DIR\exparser.dll		        System\Libs\exparser.dll
-file=ABI_DIR\BUILD_DIR\form.dll 		System\Libs\Form.dll
+//file=ABI_DIR\BUILD_DIR\clock.dll 		System\Libs\Clock.dll
+//file=ABI_DIR\BUILD_DIR\EIKSRVC.DLL				System\Libs\EIKSRVC.DLL
+//file=ABI_DIR\BUILD_DIR\UIKLAF.DLL				System\Libs\UIKLAF.DLL
+//file=ABI_DIR\BUILD_DIR\eikcoctl.dll 			System\Libs\EikCoctl.dll
+//file=ABI_DIR\BUILD_DIR\exparser.dll		        System\Libs\exparser.dll   temp comment as not found in DFS build 
+//file=ABI_DIR\BUILD_DIR\form.dll 		System\Libs\Form.dll
 #include "fepbase.iby"
-file=ABI_DIR\BUILD_DIR\tagma.dll 		System\Libs\Tagma.dll
+//file=ABI_DIR\BUILD_DIR\tagma.dll 		System\Libs\Tagma.dll
 //file=ABI_DIR\BUILD_DIR\tzclient.dll		System\Libs\tzclient.dll
 
+// to avoide dependency error in DFS build 
+#ifndef __HBLIB_IBY__ 
+file=ABI_DIR\BUILD_DIR\HbCore.dll SHARED_LIB_DIR\HbCore.dll
+#endif  // __HBLIB_IBY__ 
+
+
 
 #endif //TSWITEXTSHELL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/source/apprscparser/apprscparser.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,901 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* apprscreader.cpp 
+*
+*/
+
+#include "apprscparser.h"
+#include "log.h"
+#include <bautils.h>
+#include <barsc2.h>
+#include <barsread2.h>
+#include <e32uid.h>
+#include "cleanuputils.h"
+
+const TUint KResourceOffsetMask = 0xFFFFF000;
+const TUid KOpenServiceUid = { 0x10208DCA };
+//const TInt KMaxOpaqueDataLength = 0x1000; TODO: Need to enforce this
+
+_LIT(KAppBinaryPathAndExtension, "\\sys\\bin\\.exe");
+_LIT(KAppResourceFileExtension,".rsc");
+_LIT(KThreeDigitSuffix,"%03d");
+_LIT(KTwoDigitSuffix,"%02d");
+_LIT(KApparcFilePath, "*10003a3f*");
+
+const TInt KAppRegistrationInfoResourceId = 1;
+// The 2nd UID that defines a resource file as being an application registration resource file.
+const TUid KUidAppRegistrationFile = {0x101F8021};
+const TInt EPanicNullPointer = 1;
+const TInt KAppUidValue16 = 0x100039CE;
+const TUid KUidApp={KAppUidValue16};
+
+CLocalizableRsc::~CLocalizableRsc()
+    {
+    delete iRscFile;
+    }
+
+CLocalizableRsc* CLocalizableRsc::NewL()
+    {
+    CLocalizableRsc *self = CLocalizableRsc::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CLocalizableRsc* CLocalizableRsc::NewLC()
+    {
+    CLocalizableRsc *self = new(ELeave) CLocalizableRsc();
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+//
+// CAppRegInfoReader
+//
+
+EXPORT_C CAppRegInfoReader* CAppRegInfoReader::NewL(RFs& aFs, const TDesC& aRegistrationFileName)
+	{
+	CAppRegInfoReader* self = new(ELeave) CAppRegInfoReader(aFs, aRegistrationFileName);
+	return self;
+	}
+
+EXPORT_C CAppRegInfoReader* CAppRegInfoReader::NewL(RFs& aFs, const RFile& aRegistrationFile)
+    {
+    CAppRegInfoReader* self = new(ELeave) CAppRegInfoReader(aFs, aRegistrationFile);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+    return self;
+    }
+
+CAppRegInfoReader::CAppRegInfoReader(RFs& aFs, const TDesC& aRegistrationFileName) :
+	iFs(aFs),
+	iAppUid(TUid::Null()),	
+	iRegistrationFileName(&aRegistrationFileName)
+	{	
+	}
+
+CAppRegInfoReader::CAppRegInfoReader(RFs& aFs, const RFile& aRegistrationFile) :
+    iFs(aFs),
+    iAppUid(TUid::Null()),
+    iRegFileHandle(&aRegistrationFile)
+    {
+    iUseRegFileHandle = ETrue;	
+	}
+
+void CAppRegInfoReader::ConstructL()
+	{
+	TFileName fileName;
+	User::LeaveIfError(iRegFileHandle->FullName(fileName));	
+	iRegistrationFileName = fileName.AllocL();	
+	}
+
+EXPORT_C CAppRegInfoReader::~CAppRegInfoReader()
+	{
+	delete iAppBinaryFullName;		
+	iLocalizableRscArray.ResetAndDestroy();
+	iDeviceSupportedLanguages.Close();
+	
+	if (iUseRegFileHandle)
+	    delete iRegistrationFileName; // We had created the filename from the handle
+	}
+
+EXPORT_C Usif::CApplicationRegistrationData* CAppRegInfoReader::ReadL(const RArray<TLanguage>& aAppLanguages)
+    {
+	DEBUG_PRINTF(_L("Reading the application rsc file"));
+	TEntry entry;
+	if (!iUseRegFileHandle)
+	    {
+        User::LeaveIfError(iFs.Entry(*iRegistrationFileName, entry));        
+	    }
+	else
+	    {
+	    // Reading the TUidType information fron the reg rsc file header
+	    TBuf8<sizeof(TCheckedUid)> uidBuf;
+	    TInt err = iRegFileHandle->Read(0, uidBuf, sizeof(TCheckedUid));
+	    if (err != KErrNone || uidBuf.Size() != sizeof(TCheckedUid))
+	        {
+	        DEBUG_PRINTF(_L("The file is not a valid registration resource file"));
+	        User::Leave(KErrCorrupt);
+	        }
+	    TCheckedUid uid(uidBuf);
+	    entry.iType=uid.UidType();
+	    }
+	
+	if (!TypeUidIsForRegistrationFile(entry.iType))
+        {
+        DEBUG_PRINTF(_L("The resource file doesn't have any application registration information"));
+        User::Leave(KErrCorrupt); // We are only interested in application reg resource files
+        }
+	
+	TUint fileOffset = 0;
+	TInt fileLength = 0;
+	TUid firstUid(KExecutableImageUid);
+	TUid middleUid(KUidApp);
+	
+	// Read the AppUid from the rsc file
+	iAppUid = entry.iType[2];
+	if (iAppUid == TUid::Null())
+	    {
+	    DEBUG_PRINTF2(_L("Application UID in the registration resource file %S is NULL"), iRegistrationFileName);
+	    User::Leave(KErrCorrupt); // Mandatory information missing
+	    }
+	
+	// Set the TUidType for the app binary
+	iAppBinaryUidType = TUidType(firstUid, middleUid, iAppUid);
+	// Check to see if we are only interested in any localized info
+	iReadOnlyOneLocalizedRscInfo = aAppLanguages.Count()?EFalse:ETrue;
+	
+	// We need to parse for all device supported languages. Populate iDeviceSupportedLanguages.
+	if (aAppLanguages.Count()>0)
+	    {             
+        GetInstalledLanguagesL();
+	    }
+
+	DEBUG_PRINTF2(_L("Opening rsc file %S"), iRegistrationFileName); //TODO
+	CResourceFile* registrationFile = NULL;
+	if (iUseRegFileHandle)
+	    {
+	    fileLength = 0;        
+        User::LeaveIfError(iRegFileHandle->Size(fileLength));
+
+        if (fileLength > 0)
+            {
+            // Read the reg rsc file to a buffer
+            HBufC8* fileBuffer = HBufC8::NewLC(fileLength);
+            TPtr8 fileBufferPtr(fileBuffer->Des());
+            iRegFileHandle->Read(0, fileBufferPtr);
+            registrationFile = CResourceFile::NewL(*fileBuffer);
+            CleanupStack::PopAndDestroy(fileBuffer);
+            }
+	    }
+	else
+	    {
+	    registrationFile = CResourceFile::NewL(iFs, *iRegistrationFileName, fileOffset, fileLength);
+	    }
+	CleanupStack::PushL(registrationFile);
+	
+	RResourceReader	resourceReader;
+	resourceReader.OpenLC(registrationFile, KAppRegistrationInfoResourceId);	
+	DEBUG_PRINTF(_L("rsc file opened")); //TODO
+	
+	TRAPD(err, ReadMandatoryInfoL(resourceReader));
+	if (err)
+		{
+		DEBUG_PRINTF(_L("Error in ReadMandatoryInfoL"));
+		CleanupStack::PopAndDestroy(2, registrationFile); // resourceReader
+		User::Leave(err); // Might have read something, but failed to setup enough info to make it worthwhile trying to read any more
+		}
+	
+	TUint localizableResourceId = 1; // Only initialising this here to keep the compiler happy
+	TRAP(err, ReadNonLocalizableInfoL(resourceReader, localizableResourceId, iDeviceSupportedLanguages));
+
+	if (!err)
+	    {
+        // Open the localizable resource file for identified languages
+        for (TInt i=0; i < iLocalizableRscArray.Count(); ++i)
+            {
+            iLocalizableRscArray[i]->iRscFile = CResourceFile::NewL(iFs, iLocalizableRscArray[i]->iFileName, 0, 0);
+            CResourceFile* currLocalizableFile = iLocalizableRscArray[i]->iRscFile;
+	        if (currLocalizableFile && (localizableResourceId & KResourceOffsetMask))
+	            currLocalizableFile->ConfirmSignatureL();	        
+	        }	    
+		TRAP(err, ReadNonLocalizableOptionalInfoL(resourceReader, registrationFile));
+		}
+		
+	if (!err)
+	    {
+	    // Read the localized resource information the identified languages
+	    for (TInt i=0; i < iLocalizableRscArray.Count(); ++i)
+	        {
+	        CResourceFile* currLocalizableFile = iLocalizableRscArray[i]->iRscFile;
+	        TFileName fileName = iLocalizableRscArray[i]->iFileName;
+	        DEBUG_PRINTF2(_L("Reading Localizable Info from : %S"), &fileName);
+	        // The following call can leave if the localized resource file is ill formed.
+	        // We'll try to parse other loclized files (if possible) in such a case.
+	        TRAPD(errLocalized, ReadLocalizableInfoL(*currLocalizableFile, localizableResourceId, iLocalizableRscArray[i]->iLanguage));
+	        if (errLocalized)
+                DEBUG_PRINTF3(_L("Error while reading file (%S) : %d"), &fileName, errLocalized);
+	        }
+	    }
+	
+	const TBool readSuccessful = (err == KErrNone);
+	DEBUG_PRINTF2(_L("Application rsc file parsed. Status : %d"), readSuccessful);
+	CleanupStack::PopAndDestroy(2, registrationFile); // resourceReader	
+	
+	Usif::CApplicationRegistrationData* appRegInfo = NULL;
+	if (readSuccessful)
+	    {	    
+	    RPointerArray<Usif::CPropertyEntry> appPropertiesArray;	    	    
+		appRegInfo = Usif::CApplicationRegistrationData::NewL(iOwnedFileArray, iServiceArray, iLocalizableAppInfoArray, 
+                                        appPropertiesArray, iOpaqueDataArray, iAppUid, *iAppBinaryFullName, iAppCharacteristics, iDefaultScreenNumber);
+		
+		DEBUG_PRINTF2(_L("Count Languages (from client) : %d"), aAppLanguages.Count());
+		DEBUG_PRINTF2(_L("Count Languages (after reset) : %d"), iDeviceSupportedLanguages.Count());
+		DEBUG_PRINTF2(_L("Count of Loc files parsed : %d"), iLocalizableRscArray.Count());
+		DEBUG_PRINTF2(_L("Count of Loc data passed to SWI : %d"), iLocalizableAppInfoArray.Count());				
+	   }
+	else
+	    {
+        // Cleanup the member arrays
+        iOwnedFileArray.ResetAndDestroy(); 
+        iServiceArray.ResetAndDestroy();
+        iLocalizableAppInfoArray.ResetAndDestroy();
+        iOpaqueDataArray.ResetAndDestroy();
+	    }
+	
+	return appRegInfo;
+	}
+
+// This method reads the minimum information required to register an app.
+// If this fails, we say the read has been unsuccessful.
+void CAppRegInfoReader::ReadMandatoryInfoL(RResourceReader& aResourceReader)
+	{
+	DEBUG_PRINTF(_L("Reading the mandatory application info"));
+	aResourceReader.ReadUint32L(); // skip over LONG reserved_long
+	aResourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+
+	// Read LTEXT app_file
+	const TPtrC appFile(aResourceReader.ReadTPtrCL());
+	// This object gets used for 2 purposes: first to check that a TParsePtrC can be created 
+	// over "appFile" without it panicking, and second to construct iAppBinaryFullName
+	TParse parse;
+	// Do this before creating a TParsePtrC, since TParsePtrC's constructor panics if it fails 
+	// (which would provide an easy way for malware to kill the Apparc server)
+	User::LeaveIfError(parse.SetNoWild(appFile, NULL, NULL)); 
+	const TParsePtrC appFileParser(appFile);
+
+	// Read LONG attributes
+	iAppCharacteristics.iAttributes = aResourceReader.ReadUint32L();
+
+	if (!appFileParser.NamePresent())
+	    {
+	    DEBUG_PRINTF2(_L("Application Name in the registration resource file %S is not present"),iRegistrationFileName);
+		User::Leave(KErrCorrupt);
+	    }
+
+	const TPtrC appNameWithoutExtension(appFileParser.Name());
+	const TPtrC registrationFileDrive(TParsePtrC(*iRegistrationFileName).Drive());
+	
+	if (iAppCharacteristics.iAttributes & ENonNative)
+		{
+        User::Leave(KErrNotSupported); // Non native apps need not have an applicaiton reg rsc file
+		}
+	else if (iAppCharacteristics.iAttributes & EBuiltAsDll)
+		{
+		User::Leave(KErrNotSupported); // Legacy dll-style app
+		}
+	else
+		{
+		// Exe-style app
+		User::LeaveIfError(parse.SetNoWild(registrationFileDrive, &KAppBinaryPathAndExtension, &appNameWithoutExtension));
+		}
+
+	iAppBinaryFullName = parse.FullName().AllocL();
+	DEBUG_PRINTF2(_L("App Binary FullName : %S"),iAppBinaryFullName); //TODO
+	DEBUG_PRINTF2(_L("AppUid : 0x%X"), iAppUid.iUid); //TODO
+	DEBUG_PRINTF2(_L("Attributes : %d"), iAppCharacteristics.iAttributes); //TODO
+	}
+
+HBufC* CAppRegInfoReader::CreateFullIconFileNameL(const TDesC& aIconFileName) const
+	{
+	HBufC* filename = NULL;
+	if (aIconFileName.Length() == 0)
+		return NULL;
+	
+	//aIconFileName may contain a valid string in some format (for eg. URI format) other than path to a regular file on disk
+	//and that can be a mbm or non-mbm file. Such a filename will be reported as invalid filename by iFs.IsValidName() method. 
+	//aIconFileName will be returned since it is a valid string. 	
+	if(!iFs.IsValidName(aIconFileName))
+		{
+		filename = aIconFileName.AllocL();
+		return filename;
+		}
+	
+	TParsePtrC parsePtr(aIconFileName);
+	if (parsePtr.IsWild() || !parsePtr.PathPresent() || !parsePtr.NamePresent())
+		return NULL;
+
+	// Check for fully qualified icon filename
+	if (parsePtr.DrivePresent() && BaflUtils::FileExists(iFs, aIconFileName))
+		filename = aIconFileName.AllocL();
+	else
+		{
+		// Check for icon file on same drive as localizable resource file
+		TParse parse;
+		TPtrC localizableResourceFileDrive = TParsePtrC(iTempLocalizableRscFileName).Drive();
+		TInt ret = parse.SetNoWild(localizableResourceFileDrive, &aIconFileName, NULL);
+		if (ret == KErrNone && BaflUtils::FileExists(iFs, parse.FullName()))
+			filename = parse.FullName().AllocL();
+		else
+			{
+			TPtrC registrationFileDrive = TParsePtrC(*iRegistrationFileName).Drive();
+			if (TInt(TDriveUnit(registrationFileDrive)) != TInt(TDriveUnit(localizableResourceFileDrive)))
+				{
+				// Check for icon file on same drive as registration file
+				ret = parse.SetNoWild(registrationFileDrive, &aIconFileName, NULL);
+				if (ret == KErrNone && BaflUtils::FileExists(iFs, parse.FullName()))
+					filename = parse.FullName().AllocL();
+				}
+			}
+		}
+	
+	return filename;
+	}
+
+void CAppRegInfoReader::ReadLocalizableInfoL(const CResourceFile& aResourceFile, TUint aResourceId, TLanguage aLanguage)
+	{
+	HBufC* caption = NULL;
+    HBufC* shortCaption = NULL;   
+    TInt numOfAppIcons = 0;
+    HBufC* iconFileName = NULL;
+	    
+	RResourceReader resourceReader;
+	resourceReader.OpenLC(&aResourceFile, aResourceId);
+
+	resourceReader.ReadUint32L(); // skip over LONG reserved_long
+	resourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+		
+	// Read LTEXT short_caption
+	shortCaption = resourceReader.ReadHBufCL();
+	
+	if (shortCaption)
+        {
+        DEBUG_PRINTF2(_L("ShortCaption : %S"), shortCaption); //TODO
+        CleanupStack::PushL(shortCaption);
+        }
+    else
+        {
+        DEBUG_PRINTF(_L("ShortCaption is NULL")); //TODO
+        }
+	
+	resourceReader.ReadUint32L(); // skip over LONG reserved_long
+	resourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+
+	// Read LTEXT caption	
+	caption = resourceReader.ReadHBufCL();
+	
+	if (caption)
+            {
+            DEBUG_PRINTF2(_L("Caption : %S"), caption); //TODO
+            CleanupStack::PushL(caption);
+            }
+        else
+            {
+            DEBUG_PRINTF(_L("Caption is NULL")); //TODO
+            }
+
+	// Read WORD number_of_icons
+	numOfAppIcons = resourceReader.ReadInt16L();
+	DEBUG_PRINTF2(_L("NumOfIcons : %d"), numOfAppIcons); //TODO
+	
+	// Read LTEXT icon_file
+	HBufC* iconFile = resourceReader.ReadHBufCL();
+	if (iconFile)
+	    {
+        if (iReadOnlyOneLocalizedRscInfo)
+            iconFileName = iconFile; // We do not need to check if the icon file is present
+        else
+            {
+            CleanupStack::PushL(iconFile);
+            iconFileName = CreateFullIconFileNameL(*iconFile);
+            CleanupStack::PopAndDestroy(iconFile);
+            }
+	    }
+
+	if (iconFileName)
+	    {
+	    DEBUG_PRINTF2(_L("IconFileName : %S"), iconFileName); //TODO
+	    CleanupStack::PushL(iconFileName);
+	    }
+	else
+	    {
+	    DEBUG_PRINTF(_L("IconFileName is NULL")); //TODO
+	    }
+
+	// Create CCaptionAndIconInfo for the locale
+	Usif::CCaptionAndIconInfo* captionAndIconInfo = Usif::CCaptionAndIconInfo::NewLC(caption?*caption:_L(""), iconFileName?*iconFileName:_L(""), numOfAppIcons);			
+	
+	// Read LEN WORD STRUCT view_list[]
+	const TInt numOfViews = resourceReader.ReadInt16L();
+	
+	RPointerArray<Usif::CAppViewData> viewDataList;
+	CleanupResetAndDestroyPushL(viewDataList);
+	for(TInt view = 0; view < numOfViews; ++view)
+		{
+		DEBUG_PRINTF2(_L(" *** View Details for index %d ***"), view); //TODO
+		resourceReader.ReadUint32L(); // skip over LONG reserved_long
+		resourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+
+		// Read LONG uid
+		const TUid viewUid = {resourceReader.ReadInt32L()};
+		DEBUG_PRINTF2(_L("ViewUid : 0x%X"), viewUid); //TODO
+		// Read LONG screen_mode
+		const TInt screenMode = {resourceReader.ReadInt32L()};
+		DEBUG_PRINTF2(_L("ScreenMode : %d"), screenMode); //TODO
+		
+		resourceReader.ReadUint32L(); // skip over LONG reserved_long
+		resourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+
+		// Read LTEXT caption
+		HBufC* viewCaption = resourceReader.ReadHBufCL();
+		if (viewCaption)
+            {
+            DEBUG_PRINTF2(_L("ViewCaption : %S"), viewCaption); //TODO
+            CleanupStack::PushL(viewCaption);
+            }
+        else
+            {
+            DEBUG_PRINTF(_L("ViewCaption is NULL")); //TODO
+            }
+		
+		// Read WORD number_of_icons
+		const TInt numOfViewIcons = resourceReader.ReadInt16L();
+		DEBUG_PRINTF2(_L("NumOfViewIcons : %d"), numOfViewIcons); //TODO
+		
+		HBufC* fullViewIconFileName = NULL;
+		// Read LTEXT icon_file
+		HBufC* viewIconFile = resourceReader.ReadHBufCL();  
+		
+        if (viewIconFile)
+		    {
+		    CleanupStack::PushL(viewIconFile);
+            fullViewIconFileName = CreateFullIconFileNameL(*viewIconFile); 
+            CleanupStack::PopAndDestroy(viewIconFile);
+            if (fullViewIconFileName)
+                {               
+                CleanupStack::PushL(fullViewIconFileName);
+                DEBUG_PRINTF2(_L("ViewIconFileName : %S"), fullViewIconFileName); //TODO
+                }
+            else
+                {
+                DEBUG_PRINTF(_L("ViewIconFileName is NULL")); //TODO
+                }            
+		    }
+				
+		// Create CCaptionAndIconInfo for the view
+		Usif::CCaptionAndIconInfo* viewCaptionAndIcon = Usif::CCaptionAndIconInfo::NewLC(viewCaption?*viewCaption:_L(""), fullViewIconFileName?*fullViewIconFileName:_L(""), numOfViewIcons);
+		// Create the view
+		Usif::CAppViewData* viewData = Usif::CAppViewData::NewLC(viewUid, screenMode, viewCaptionAndIcon);
+		
+		viewDataList.AppendL(viewData);
+		
+		CleanupStack::Pop(2, viewCaptionAndIcon); // viewData
+		if (fullViewIconFileName)
+		    CleanupStack::PopAndDestroy(fullViewIconFileName);
+		if (viewCaption)
+		    CleanupStack::PopAndDestroy(viewCaption);
+		}
+
+	// Read LTEXT group_name
+	TAppGroupName groupName;
+	TRAPD(ret, (groupName = resourceReader.ReadTPtrCL()));
+	if (ret != KErrNone)
+		{
+		 if (ret != KErrEof)
+	         User::Leave(ret);
+		}
+	
+	DEBUG_PRINTF2(_L("GroupName : %S"), &groupName); //TODO	
+	Usif::CLocalizableAppInfo* localizableAppInfo = Usif::CLocalizableAppInfo::NewLC(shortCaption?*shortCaption:_L(""), aLanguage, groupName, captionAndIconInfo, viewDataList);
+	iLocalizableAppInfoArray.AppendL(localizableAppInfo);
+	
+	CleanupStack::Pop(3, captionAndIconInfo); // localizableAppInfo, viewDataList
+	if (iconFileName)
+	    CleanupStack::PopAndDestroy(iconFileName);
+	if (caption)
+	    CleanupStack::PopAndDestroy(caption);
+	if (shortCaption)
+	    CleanupStack::PopAndDestroy(shortCaption);
+	CleanupStack::PopAndDestroy(&resourceReader);
+	}
+
+void CAppRegInfoReader::ReadOpaqueDataL(TUint aResourceId, const CResourceFile* aRegistrationFile, RPointerArray<Usif::COpaqueData>& aOpaqueDataArray)
+    {
+    if (aResourceId == 0)
+        return;
+    else
+        {
+        if (aResourceId & KResourceOffsetMask)
+            {
+            for (TInt i=0; i < iLocalizableRscArray.Count(); ++i)
+                {
+                CResourceFile* currLocalizableFile = iLocalizableRscArray[i]->iRscFile;                
+                currLocalizableFile->ConfirmSignatureL();
+                HBufC8* data = NULL;
+                TRAPD(err, data = currLocalizableFile->AllocReadL(aResourceId));                  
+                if(err == KErrNone)
+                    {
+                    DEBUG_PRINTF3(_L8("Opaque Data read (length %d) from the localizable resouce file : %S"), data->Length(), data);
+                    CleanupStack::PushL(data);
+                    Usif::COpaqueData* opaqueData = Usif::COpaqueData::NewL(*data, iLocalizableRscArray[i]->iLanguage);
+                    aOpaqueDataArray.AppendL(opaqueData);
+                    CleanupStack::PopAndDestroy(data);
+                    }
+                }            
+            }
+        else
+            {
+            // Expecting opaque data to be in the registration file
+            __ASSERT_ALWAYS(aRegistrationFile, Panic(EPanicNullPointer));
+            HBufC8* data = aRegistrationFile->AllocReadLC(aResourceId);
+            DEBUG_PRINTF3(_L8("Opaque Data read (length %d) from the registration resouce file : %S"), data->Length(), data);
+            Usif::COpaqueData* opaqueData = Usif::COpaqueData::NewL(*data, TLanguage(0));
+            aOpaqueDataArray.AppendL(opaqueData);
+            CleanupStack::PopAndDestroy(data);
+            }
+        }
+    }
+
+void CAppRegInfoReader::ReadNonLocalizableOptionalInfoL(RResourceReader& aResourceReader, const CResourceFile* aRegistrationFile)
+	{
+	DEBUG_PRINTF(_L("Reading the application non localized optional info"));
+	// Read LEN WORD STRUCT service_list[]
+	TInt serviceCount = 0;
+	// Service information was not present in the first release of the registration file
+	// APP_REGISTRATION_INFO resource struct.
+	// This method must not leave if the registration file doesn't contain service information, so the
+	// following call to ReadInt16L is trapped to ensure this method doesn't leave just because
+	// there is no more information in the resource to read (KErrEof)
+	TRAPD(err, serviceCount = aResourceReader.ReadInt16L());
+	if (err)
+		{
+		if (err == KErrEof)
+			return; // End of resource reached
+		
+		User::Leave(err);
+		}
+	DEBUG_PRINTF2(_L("Service count is : %d"), serviceCount); //TODO
+	
+	while (serviceCount--)
+		{
+		const TUid serviceUid = {aResourceReader.ReadUint32L()};
+		
+		if ((serviceUid == KOpenServiceUid) && (iLegacyDataTypesPresent))
+			{
+            __ASSERT_DEBUG( iServiceArray.Count(), Panic(EPanicNullPointer) );
+			// Deleting the legacy datatypes
+            Usif::CServiceInfo* firstElement = iServiceArray[0];
+            iServiceArray.Remove(0);
+            delete firstElement;
+            iLegacyDataTypesPresent = EFalse;
+			}
+		
+		RPointerArray<Usif::CDataType> serviceDataTypes;
+		CleanupResetAndDestroyPushL(serviceDataTypes);
+		ReadMimeTypesSupportedL(aResourceReader, serviceDataTypes);
+		
+		const TUint resourceId = aResourceReader.ReadUint32L();
+		RPointerArray<Usif::COpaqueData> serviceOpaqueDataArray;
+		CleanupResetAndDestroyPushL(serviceOpaqueDataArray);
+		ReadOpaqueDataL(resourceId, aRegistrationFile, serviceOpaqueDataArray);
+						
+		Usif::CServiceInfo* serviceInfo = Usif::CServiceInfo::NewLC(serviceUid, serviceOpaqueDataArray, serviceDataTypes);
+		iServiceArray.AppendL(serviceInfo);
+		DEBUG_PRINTF3(_L("ServiceUid (index %d) is : 0x%X "), iServiceArray.Count()-1, serviceUid.iUid); //TODO
+		
+		CleanupStack::Pop(3, &serviceDataTypes); // serviceInfo, serviceOpaqueDataArray
+		}
+	
+	// Read LLINK opaque_data
+	const TUint resourceId = aResourceReader.ReadUint32L();
+	ReadOpaqueDataL(resourceId, aRegistrationFile, iOpaqueDataArray);
+	}
+
+void CAppRegInfoReader::ReadNonLocalizableInfoL(RResourceReader& aResourceReader, TUint& aLocalizableResourceId, const RArray<TLanguage>& aAppLanguages)
+	{
+	DEBUG_PRINTF(_L("Reading the application non localized info"));
+	
+	// Read LTEXT localizable_resource_file
+	TPtrC localizableResourceFileName(aResourceReader.ReadTPtrCL());
+	if (localizableResourceFileName.Length() > 0 && iFs.IsValidName(localizableResourceFileName))
+		{
+		// Determine the language specific name of the localizable resource file
+		TParse parse;
+		TParsePtrC parsePtr(*iRegistrationFileName);
+		User::LeaveIfError(parse.SetNoWild(parsePtr.Drive(), &KAppResourceFileExtension, &localizableResourceFileName));
+		TFileName localizableRscFileName(parse.FullName());
+		DEBUG_PRINTF2(_L("Localizable filename from rsc is : %S"), &localizableRscFileName); 
+		iTempLocalizableRscFileName = localizableRscFileName; // Store the rsc filename as read (before bafl makes any changes)
+		
+		// Check if we need to read more than one localized resource file
+		if (!aAppLanguages.Count())
+		    {
+            TLanguage applicationLanguage;		    
+            BaflUtils::NearestLanguageFileV2(iFs, localizableRscFileName, applicationLanguage);
+		
+            // We are able to find a match
+            if (BaflUtils::FileExists(iFs, iTempLocalizableRscFileName))
+                {
+                // We read here only for one locale, similar to AppArc's behaviour when parsing the resource file
+                CLocalizableRsc* localizedRsc = CLocalizableRsc::NewL();
+                localizedRsc->iFileName = localizableRscFileName;
+                if (ELangNone == applicationLanguage)
+                    localizedRsc->iLanguage = TLanguage(0);
+                else
+                    localizedRsc->iLanguage = applicationLanguage;
+                iLocalizableRscArray.Append(localizedRsc);
+                }
+            else 
+                {
+                // The resource files are located in non-standard location (like in the case of GetComponentInfo).
+                // We need to find the temporary paths for localized resource files in this case.
+                // The reg file will be in some location like <path>\regfilename_reg.rsc and localized rsc file name
+                // would point to \resource\apps\localregfilename.rsc or \resource\apps\localregfilename.r01 etc.
+                // Changing the localized rsc file name to <path>\localregfilename.rsc
+                TFileName nonStdLocalizedRscFileName = parsePtr.DriveAndPath(); // Drive and path from Registration FileName
+                nonStdLocalizedRscFileName.Append(TParsePtrC(localizableRscFileName).NameAndExt()); // Name and extension of localized rsc file
+                iTempLocalizableRscFileName = nonStdLocalizedRscFileName; // For FindLocalizableResourceFilesL
+                
+                if (KErrNotFound == iTempLocalizableRscFileName.Match(KApparcFilePath))
+                    {
+                    applicationLanguage = User::Language();                
+                    FindLocalizableResourceFilesL(applicationLanguage); 
+                
+                    // If there is no match, check for default localizable rsc file
+                    if (!iLocalizableRscArray.Count())
+                        CheckForDefaultResourceFileL();
+                    }
+                }            
+		    }
+		else
+		    {
+            for (TInt i=0; i < aAppLanguages.Count(); ++i)
+                FindLocalizableResourceFilesL(aAppLanguages[i]);
+            
+            CheckForDefaultResourceFileL();
+		    }
+		}
+        
+	// Read LONG localizable_resource_id
+	aLocalizableResourceId = aResourceReader.ReadUint32L();
+	DEBUG_PRINTF3(_L("LocalizableResourceId : %d : 0x%X "), aLocalizableResourceId, aLocalizableResourceId); //TODO
+	
+	DEBUG_PRINTF(_L("Reading app characteristics")); //TODO
+	iAppCharacteristics.iAppIsHidden = aResourceReader.ReadInt8L();
+	iAppCharacteristics.iEmbeddability = (Usif::TApplicationCharacteristics::TAppEmbeddability)aResourceReader.ReadInt8L();
+	iAppCharacteristics.iSupportsNewFile = aResourceReader.ReadInt8L();
+	iAppCharacteristics.iLaunchInBackground = aResourceReader.ReadInt8L();
+	iAppCharacteristics.iGroupName = aResourceReader.ReadTPtrCL();
+	iDefaultScreenNumber = aResourceReader.ReadUint8L();
+ 	
+	DEBUG_PRINTF2(_L("iAppIsHidden : %d"), iAppCharacteristics.iAppIsHidden); //TODO
+	DEBUG_PRINTF2(_L("iEmbeddability : %d"), iAppCharacteristics.iEmbeddability); //TODO
+	DEBUG_PRINTF2(_L("iSupportsNewFile : %d"), iAppCharacteristics.iSupportsNewFile); //TODO
+	DEBUG_PRINTF2(_L("iLaunchInBackground : %d"), iAppCharacteristics.iLaunchInBackground); //TODO
+	DEBUG_PRINTF2(_L("iGroupName : %S"), &(iAppCharacteristics.iGroupName)); //TODO
+	DEBUG_PRINTF2(_L("iDefaultScreenNumber : %d"), iDefaultScreenNumber); //TODO
+	
+	// Read the datatypes
+	RPointerArray<Usif::CDataType> dataTypes;
+	CleanupResetAndDestroyPushL(dataTypes);
+	RPointerArray<Usif::COpaqueData> opaqueDataArray;
+	CleanupResetAndDestroyPushL(opaqueDataArray);
+	ReadMimeTypesSupportedL(aResourceReader, dataTypes);
+	
+	// DataTypes are deleted if 
+	//  A. There are no legacy datatypes
+	//  B. Control panel plugin apps are not allowed to register MIME types.If they happen to have any, 
+	//     these datatypes should be ignored.
+	if ((iAppCharacteristics.iAttributes & EControlPanelItem) || (dataTypes.Count() == 0))
+	    {
+	    CleanupStack::Pop(2, &dataTypes); // opaqueDataArray
+	    dataTypes.ResetAndDestroy();
+	    opaqueDataArray.ResetAndDestroy();	    
+	    }
+	else
+		{
+		DEBUG_PRINTF(_L("Reading Open Service Datatypes")); //TODO
+		
+		Usif::CServiceInfo* serviceInfo = Usif::CServiceInfo::NewLC(KOpenServiceUid, opaqueDataArray, dataTypes);
+		iServiceArray.AppendL(serviceInfo);
+		DEBUG_PRINTF2(_L("ServiceUid (index %d) is : OpenServiceUid "), iServiceArray.Count()-1); //TODO
+		
+		CleanupStack::Pop(3, &dataTypes); // serviceInfo, opaqueDataArray
+		iLegacyDataTypesPresent = ETrue;
+		}
+
+	// Read LEN WORD STRUCT file_ownership_list[]
+	const TInt fileOwnershipArraySize = aResourceReader.ReadInt16L();
+	DEBUG_PRINTF2(_L("Owned File Array Size is : %d"), fileOwnershipArraySize); //TODO
+
+	DEBUG_PRINTF(_L("Reading Owned File Array")); //TODO
+	for (TInt i=0; i < fileOwnershipArraySize; i++)
+		{
+		TPtrC fileNamePtr = aResourceReader.ReadTPtrCL();
+		iOwnedFileArray.AppendL(fileNamePtr.AllocL());
+		DEBUG_PRINTF3(_L("File (index %d) is : %S "), i, &fileNamePtr); //TODO
+		}
+	}
+	
+void CAppRegInfoReader::ReadMimeTypesSupportedL(RResourceReader& aResourceReader, RPointerArray<Usif::CDataType>& aDataTypes)
+    {
+    DEBUG_PRINTF(_L("Reading MimeTypes supported")); //TODO
+    // Read LEN WORD STRUCT datatype_list[]
+    const TInt dataTypeArraySize = aResourceReader.ReadInt16L();
+    DEBUG_PRINTF2(_L("DataType Array Size is : %d"), dataTypeArraySize); //TODO
+    if (dataTypeArraySize <= 0)
+        return;
+    
+    for (TInt i=0; i < dataTypeArraySize; i++)
+        {
+        TInt32 priority = aResourceReader.ReadInt32L();
+                   
+        TPtrC8 typePtr = aResourceReader.ReadTPtrC8L();
+        TBuf16<KMaximumDataTypeLength> buf;
+        buf.Copy(typePtr); 
+        DEBUG_PRINTF3(_L("Service Info Priority (index %d) is : %d "), i, priority); //TODO
+        DEBUG_PRINTF3(_L("Service Info Type (index %d) is : %S "), i, &buf); //TODO
+        
+        Usif::CDataType* dataType = Usif::CDataType::NewLC(priority, buf);        
+        aDataTypes.AppendL(dataType);
+        CleanupStack::Pop(dataType);
+        }
+    }
+
+void CAppRegInfoReader::CheckForDefaultResourceFileL()
+    {
+    if (BaflUtils::FileExists(iFs, iTempLocalizableRscFileName))   
+        {      
+        DEBUG_PRINTF2(_L("Default localized resource file is present : %S"), &iTempLocalizableRscFileName);
+        CLocalizableRsc* localizedRsc = CLocalizableRsc::NewL();
+        localizedRsc->iFileName = iTempLocalizableRscFileName;
+        localizedRsc->iLanguage = TLanguage(0); //Non-localized details
+        iLocalizableRscArray.Append(localizedRsc);
+        }
+    }
+
+// Find the correct localized resource file based on the given language
+void CAppRegInfoReader::FindLocalizableResourceFilesL(const TLanguage& aApplicationLanguage)
+    {
+    DEBUG_PRINTF2(_L("Finding localizable resource files for language : %d"), aApplicationLanguage);
+        
+    TLanguagePath langEquivalents;
+    RArray<TLanguage> appLanguages;
+    BaflUtils::GetEquivalentLanguageList(aApplicationLanguage, langEquivalents);
+    TInt i = 0;
+    while (langEquivalents[i] != ELangNone)
+        {
+        appLanguages.Append(langEquivalents[i]);
+        ++i;
+        }
+    
+    TInt newLength = iTempLocalizableRscFileName.Length() - 2;
+    TFileName localizedRscFileNamePrefix(iTempLocalizableRscFileName.Left(newLength));
+    DEBUG_PRINTF2(_L("FileName after trimming last digits : %S"), &localizedRscFileNamePrefix); //TODO
+            
+    for (TInt i=0; i < appLanguages.Count(); ++i)
+        {                
+        TFileName localizedRscFileName(localizedRscFileNamePrefix);
+        if (appLanguages[i] > 99)
+            localizedRscFileName.AppendFormat(KThreeDigitSuffix, appLanguages[i]);
+        else
+            localizedRscFileName.AppendFormat(KTwoDigitSuffix, appLanguages[i]);
+        
+        // Check if the file exist
+        if (BaflUtils::FileExists(iFs, localizedRscFileName))
+            {
+            // Check if language already exists
+            TInt rscCount = iLocalizableRscArray.Count();
+            TBool isExists = EFalse;
+            for(TInt j = 0; j < rscCount; j++)
+                {
+                if(appLanguages[i] == iLocalizableRscArray[j]->iLanguage)
+                    {
+                    isExists = ETrue;
+                    break;
+                    }
+                }
+            
+            if(!isExists)
+                {
+                CLocalizableRsc* localizedRsc = CLocalizableRsc::NewL();
+                localizedRsc->iFileName = localizedRscFileName;
+                localizedRsc->iLanguage = appLanguages[i];
+                iLocalizableRscArray.Append(localizedRsc);
+                DEBUG_PRINTF2(_L("Localized rsc file is : %S"), &localizedRscFileName);
+                }            
+            break;
+            }
+        } 
+    
+    appLanguages.Close();
+    }
+
+TBool CAppRegInfoReader::TypeUidIsForRegistrationFile(const TUidType& aUidType)
+    {
+    return (aUidType[1].iUid==KUidAppRegistrationFile.iUid);
+    }
+
+void CAppRegInfoReader::Panic(TInt aPanic)
+    {
+    _LIT(KSWIAppRegInfoReaderPanic,"SWIAppRegInfoReaderPanic");
+    User::Panic(KSWIAppRegInfoReaderPanic, aPanic);
+    }
+
+void CAppRegInfoReader::GetInstalledLanguagesL()
+    {
+    _LIT(KLanguagesIni, "z:\\resource\\bootdata\\languages.txt");
+    const TInt KReadBufSize = 10;
+    
+    iDeviceSupportedLanguages.Reset();
+    
+    RFile file;
+    TInt err = file.Open(iFs, KLanguagesIni, EFileRead|EFileShareReadersOnly);
+    if (KErrNone == err)
+        {
+        CleanupClosePushL(file);
+        
+        TFileText reader;
+        reader.Set(file);
+        err = reader.Seek(ESeekStart);
+        if (KErrNone == err)
+            {
+            TBuf<KReadBufSize> readBuf;
+            while(KErrNone == reader.Read(readBuf))
+                {
+                if (readBuf.Length() > 0)
+                    {
+                    TLex lex(readBuf);
+                    lex.SkipSpace();
+                    TInt language;
+                    err = lex.Val(language);
+                    if (KErrNone != err)
+                        {
+                        readBuf.Zero();
+                        continue; // Read the next line
+                        }
+                    iDeviceSupportedLanguages.AppendL((TLanguage)language);
+                    }
+                readBuf.Zero();
+                }
+            }
+        else
+            {
+            DEBUG_PRINTF3(_L("Reading %S failed with %d"), &KLanguagesIni, err);
+            }
+        
+        CleanupStack::PopAndDestroy(&file);
+        }
+    else
+        {
+        DEBUG_PRINTF3(_L("Opening %S failed with %d"), &KLanguagesIni, err);
+        }
+    
+    // If we are not able fetch the device languages, just parse for the current device language
+    if (0 == iDeviceSupportedLanguages.Count())
+        {
+        iDeviceSupportedLanguages.AppendL(User::Language());
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/source/apprscparser/apprscparser.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* apprscreader.h 
+*
+*/
+
+#ifndef __APPRSCPARSER_H__
+#define __APPRSCPARSER_H__
+
+#include <usif/scr/appregentries.h>
+
+class RFs;
+class CResourceFile;
+class RResourceReader;
+
+/**
+ * @file
+ * Application resource file parser for SWI
+ *
+ * @internalTechnology
+ * @prototype
+*/
+
+const TInt KMaxAppGroupName=0x10;
+const TInt KMaximumDataTypeLength=256;
+typedef TBuf<KMaxAppGroupName> TAppGroupName;
+
+/** Defines an application's attributes as a set of bit flags. */
+enum TCapabilityAttribute
+    {    
+    EBuiltAsDll         = 0x00000001,
+    EControlPanelItem   = 0x00000002,
+    ENonNative          = 0x00000004
+    };
+
+class CLocalizableRsc : public CBase
+    {
+public:
+    static CLocalizableRsc* NewL();
+    static CLocalizableRsc* NewLC();
+    ~CLocalizableRsc();
+    
+private:
+    CLocalizableRsc() {}
+    
+public:
+    TFileName iFileName;
+    CResourceFile* iRscFile;
+    TLanguage iLanguage;
+    };
+
+/**
+ This class reads application information from a combination of registration file,
+ optional localizable resource file and optional icon file.
+*/
+class CAppRegInfoReader : public CBase
+	{
+public:
+    IMPORT_C static CAppRegInfoReader* NewL(RFs& aFs, const TDesC& aRegistrationFileName);
+    IMPORT_C static CAppRegInfoReader* NewL(RFs& aFs, const RFile& aRegistrationFile);
+    IMPORT_C Usif::CApplicationRegistrationData* ReadL(const RArray<TLanguage>& aAppLanguages);    
+    IMPORT_C ~CAppRegInfoReader();
+
+private:
+    CAppRegInfoReader(RFs& aFs, const TDesC& aRegistrationFileName);
+    CAppRegInfoReader(RFs& aFs, const RFile& aRegistrationFile);
+	void ConstructL();
+	void ReadMandatoryInfoL(RResourceReader& aResourceReader);
+	void ReadNonLocalizableInfoL(RResourceReader& aResourceReader, TUint& aLocalizableResourceId, const RArray<TLanguage>& aAppLanguages);
+	void ReadNonLocalizableOptionalInfoL(RResourceReader& aResourceReader, const CResourceFile* aRegistrationFile);
+	void ReadMimeTypesSupportedL(RResourceReader& aResourceReader, RPointerArray<Usif::CDataType>& aDataTypes);
+	void ReadLocalizableInfoL(const CResourceFile& aResourceFile, TUint aResourceId, TLanguage aLanguage);
+	void ReadOpaqueDataL(TUint aResourceId, const CResourceFile* aRegistrationFile, RPointerArray<Usif::COpaqueData>& aOpaqueDataArray);
+	HBufC* CreateFullIconFileNameL(const TDesC& aIconFileName) const;
+	void FindLocalizableResourceFilesL(const TLanguage& aApplicationLanguage);
+	void CheckForDefaultResourceFileL();
+	TBool TypeUidIsForRegistrationFile(const TUidType& aUidType);   
+	void GetInstalledLanguagesL();
+     
+    static void Panic(TInt aPanic);
+	
+public:
+	//From ReadMandatoryInfoL
+	HBufC* iAppBinaryFullName;
+	//From ReadNonLocalizableInfoL
+	Usif::TApplicationCharacteristics iAppCharacteristics;
+    TUint iDefaultScreenNumber;
+    RPointerArray<HBufC> iOwnedFileArray;
+    //From ReadNonLocalizableOptionalInfoL
+    RPointerArray<Usif::CServiceInfo> iServiceArray; 
+    RPointerArray<Usif::COpaqueData> iOpaqueDataArray;
+    //From ReadLocalizableInfoL
+    RPointerArray<Usif::CLocalizableAppInfo> iLocalizableAppInfoArray;    
+            	
+private:
+    RFs& iFs;
+    TUid iAppUid;   
+    TUidType iAppBinaryUidType;
+    TFileName iTempLocalizableRscFileName; // Localizsed resource file name from rsc
+    TBool iLegacyDataTypesPresent;
+    RPointerArray<CLocalizableRsc> iLocalizableRscArray;    
+            
+	const TDesC* iRegistrationFileName;
+	const RFile* iRegFileHandle;
+	TBool iReadOnlyOneLocalizedRscInfo;
+    TBool iUseRegFileHandle;
+    RArray<TLanguage> iDeviceSupportedLanguages;
+	};
+
+#endif	// __APPRSCPARSER_H__
--- a/installationservices/swi/source/backuprestore/backupsession.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/backuprestore/backupsession.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -184,7 +184,7 @@
 		
 		for (TInt i = 0; i < augmentationCount; ++i)
 			{			
-			RSisRegistryEntry augmentation;
+			RSisRegistryWritableEntry augmentation;
 			augmentation.OpenL(iSession, *packages[i]);
 			CleanupClosePushL(augmentation);
 			
@@ -212,7 +212,7 @@
 			// were backed up.
 			augmentationDrives.AppendL(augmentation.SelectedDriveL());
 			// Get the matching supported languages
-			entry.GetMatchingSupportedLanguagesL(matchingSupportedLanguagesArray);
+			augmentation.GetMatchingSupportedLanguagesL(matchingSupportedLanguagesArray);
 
 			// Appending ELangNone at the end as marker for the end of the language IDs
 			// as we also append the language ID's from other Augmentations
--- a/installationservices/swi/source/certstoretobin/AppGen.pm	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/certstoretobin/AppGen.pm	Tue Aug 31 15:21:33 2010 +0300
@@ -281,17 +281,27 @@
     
     chdir "$output_dir" or$util->error("chdir $output_dir failed");
     
- 	if ($BuildSystemVersion == "2") 
- 	{
- 		my $platformConfig = "$platform"."_"."$variant";
- 		$util->invoke("sbs -c $platformConfig");
- 	}
- 	else
- 	{
- 		$util->invoke("bldmake bldfiles");
- 		$util->invoke("abld build $platform $variant");
- 		$util->invoke("abld -check build $platform $variant");
- 	}
+    my $RVCTVersion = $ENV{'ARMV5VER'};
+    if((index($RVCTVersion, "RVCT4.0") != -1) && ($platform eq "armv5"))
+    {
+        my $platformConfig = "arm."."v5."."$variant".".rvct4_0";
+        $util->info($platformConfig);
+        $util->invoke("sbs -b bld.inf -c $platformConfig");
+    }
+    else
+    {	
+        if ($BuildSystemVersion == "2") 
+        {
+            my $platformConfig = "$platform"."_"."$variant";
+            $util->invoke("sbs -c $platformConfig");
+        }
+        else
+        {
+            $util->invoke("bldmake bldfiles");
+            $util->invoke("abld build $platform $variant");
+            $util->invoke("abld -check build $platform $variant");
+        }
+    }
  	
    
     chdir "$whence" or $util->error("chdir $whence failed");
--- a/installationservices/swi/source/certstoretobin/Util.pm	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/certstoretobin/Util.pm	Tue Aug 31 15:21:33 2010 +0300
@@ -251,6 +251,8 @@
     my $self = shift;
     die "self not defined\n" if (not defined($self));
 
+	my $sbsflag = index("@_", "sbs");
+	
     $self->info("Invoking: @_\n");
 
     # Redirect stderr into stdout.
@@ -266,9 +268,7 @@
 
     my @warnstrings = ();
 
-    my $BuildSystemVersion = $ENV{'SBS_VERSION'};
- 
- 	if ($BuildSystemVersion == 2) 
+  	if($sbsflag != -1)
  	{
  		foreach (@out)
  		{
--- a/installationservices/swi/source/daemon/daemon.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-/*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "daemon.h"
-#include "drivewatcher.h"
-#include "log.h"
-#include "securitypolicy.h"
-
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-#include <e32property.h>
-#include <connect/sbdefs.h>
-#include <usif/sts/sts.h>
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include "stsrecovery.h"
-#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
-#include "swiobserverclient.h"
-#else
-#include "sisregistrysession.h"
-#endif
-
-
-namespace Swi
-{
-// CDaemon
-
-/*static*/ CDaemon* CDaemon::NewL(MDaemonBehaviour& aBehaviour)
-	{
-	CDaemon* self=NewLC(aBehaviour);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-/*static*/ CDaemon* CDaemon::NewLC(MDaemonBehaviour& aBehaviour)
-	{
-	CDaemon* self=new(ELeave) CDaemon(aBehaviour);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	return self;
-	}
-	
-CDaemon::~CDaemon()
-	{
-	iPolicyLockFile.Close();
-	iWatchers.ResetAndDestroy();
-	iFs.Close();
-	}
-
-CDaemon::CDaemon(MDaemonBehaviour& aBehaviour)
-	: iBehaviour(aBehaviour)
-	{
-	}
-
-void CDaemon::ConstructL()
-	{
-	User::LeaveIfError(iFs.Connect());
-	LockSensitiveFiles();
-	StartRecoveryL();
-	iBehaviour.StartupL();
-	StartWatchersL();
-	}
-
-void CDaemon::StartWatchersL()
-	{
-	RFs fs;
-	User::LeaveIfError(fs.Connect());
-	CleanupClosePushL(fs);
-	
-	User::LeaveIfError(fs.ShareProtected());
-	
-	TDriveList driveList;
-	
-	User::LeaveIfError(fs.DriveList(driveList));
-
-	for (TInt drive=0; drive < KMaxDrives; ++drive)
-		{
-		if (driveList[drive] == 0)
-			{
-			continue;
-			}
-		TDriveInfo info;
-		
-		// Ignore errors since the next drive might work
-		if (KErrNone != fs.Drive(info, drive))
-			{
-			DEBUG_PRINTF2(_L8("SWI Daemon - Not watching drive '%d', could not retrieve drive info."),
-				drive); 
-			continue;
-			}
-
-		if (info.iDriveAtt & KDriveAttRemovable)
-			{
-			DEBUG_PRINTF2(_L8("SWI Daemon - Watching removable drive '%d'"), drive);
-			CDriveWatcher* driveWatcher=CDriveWatcher::NewLC(iFs, drive, iBehaviour);
-			User::LeaveIfError(iWatchers.Append(driveWatcher));
-			CleanupStack::Pop(driveWatcher);
-			}
-		}
-	CleanupStack::PopAndDestroy(&fs);
-	} // StartWatchersL()
-
-void CDaemon::LockSensitiveFiles()
-	{
-	TInt error = iPolicyLockFile.Open(iFs, KSwisPolicyFile, EFileShareReadersOnly | EFileRead);
-	if (error != KErrNone)
-		{
-		DEBUG_PRINTF2(_L8("SWI Daemon - Could not open SWI policy file with error %d!"), error);
-		}	
-	}
-
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-void CDaemon::StartRecoveryL()
-	{
-	DEBUG_PRINTF(_L("CDaemon::StartRecoveryL()"));
-
-	// Check to see if a backup is in progress...
-	TInt backup = 0;
-	User::LeaveIfError(RProperty::Get(KUidSystemCategory,conn::KUidBackupRestoreKey,backup));
-	
-	if(backup == conn::EBURUnset || (backup == (conn::EBURNormal | conn::ENoBackup))) //no backup or restore is in progress
-		{
-		//no recovery attempt is made during backup/restore as recovery may seriously affect the file system, which might impact backup/restore
-		//recovery will be made at next bootup
-		Usif::RStsRecoverySession stsRecoverySession;
-		// A recovery failure should not affect Daemon start up.
-		TRAPD(err, stsRecoverySession.RollbackAllPendingL());
-		if(err != KErrNone)
-			{
-			DEBUG_PRINTF2(_L("CDaemon::StartRecoveryL() - STS server failed to recover transactions. Error code: %d"), err);
-			}
-		//Start SWI Observer so that it can process the log files left from the previous session.
-		RSwiObserverSession swiObserver;
-		swiObserver.ProcessLogsL(iFs); 
-		swiObserver.Close();
-		}
-	}
-#else
-void CDaemon::StartRecoveryL()
-	{
-	DEBUG_PRINTF(_L8("SWI Daemon - Check to see if a recovery is needed"));
-	RSisRegistrySession registrySession;
-	User::LeaveIfError(registrySession.Connect());
-	CleanupClosePushL(registrySession);
-	
-	// A recovery failure should not affect SWI Daemon start up.
-	TRAP_IGNORE(registrySession.RecoverL());
-	
-	CleanupStack::PopAndDestroy(&registrySession);
-	DEBUG_PRINTF(_L8("SWI Daemon - Recovery check finished"));
-	}
-#endif
-
-} // namespace Swi
--- a/installationservices/swi/source/daemon/daemon.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
- @file 
- @internalComponent
- @released
-*/
-
-#ifndef __DAEMON_H__
-#define __DAEMON_H__
-
-#include "drivewatcher.h"
-
-namespace Swi
-{
-class CDriveWatcher;
-
-class MDaemonBehaviour : public MDriveObserver
-	{
-public:
-	/**
-	 * Called by the daemon when it is first started
-	 *
-	 * @return ETrue to continue, or EFalse to stop the daemon
-	 */
-	virtual TBool StartupL()=0;
-	};
-
-/**
- * The main daemon class which sets up the watchers.
- */
-class CDaemon : public CBase
-	{
-public:
-	static CDaemon* NewL(MDaemonBehaviour& aBehaviour);
-	static CDaemon* NewLC(MDaemonBehaviour& aBehaviour);
-	
-	~CDaemon();
-	
-	const RPointerArray<CDriveWatcher>& Watchers() const; 
-private:
-	CDaemon(MDaemonBehaviour& aBehaviour);
-	void ConstructL();
-	
-	void StartWatchersL();
-	
-	// This function should not leave, it is not an inherent functionality of the daemon
-	void LockSensitiveFiles(); 
-	
-	void StartRecoveryL();
-
-private:
-	/// an M-Class specifying the behaviour of the daemon
-	MDaemonBehaviour& iBehaviour;
-	
-	/// An array of watchers, which watch removable drives
-	RPointerArray<CDriveWatcher> iWatchers;	
-	
-	RFs iFs;
-	
-	// Used for preventing exclusing locks on the SWI policy file	
-	RFile iPolicyLockFile; 
-	};
-
-
-// inline functions from CDaemon
-
-inline const RPointerArray<CDriveWatcher>& CDaemon::Watchers() const
-	{
-	return iWatchers;
-	}
-
-} // namespace Swi
-
-#endif // #ifndef __DAEMON_H__
--- a/installationservices/swi/source/daemon/daemonbehaviour.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,435 +0,0 @@
-/*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "daemonbehaviour.h"
-#include "swispubsubdefs.h"
-#include "recsisx.h"
-#include "sisregistrywritablesession.h"
-#include "sisregistryentry.h"
-#include "filesisdataprovider.h"
-#include "swi/sisparser.h"
-#include "swi/siscontents.h"
-#include "swi/siscontroller.h"
-#include "sisinfo.h"
-#include "cleanuputils.h"
-#include "sisregistrypackage.h"
-#include "log.h"
-
-void ScanDirectoryL(TInt aDrive);
-
-using namespace Swi;
-
-CDaemonBehaviour* CDaemonBehaviour::NewL()
-	{
-	CDaemonBehaviour* self = NewLC();
-	CleanupStack::Pop(self);
-	return self;
-	}
-	
-CDaemonBehaviour* CDaemonBehaviour::NewLC()
-	{
-	CDaemonBehaviour* self = new (ELeave) CDaemonBehaviour;
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	return self;	
-	}
-		
-void CDaemonBehaviour::ConstructL()
-	{
-	User::LeaveIfError(iFs.Connect());
-	User::LeaveIfError(iFs.ShareProtected());
-	User::LeaveIfError(iApaSession.Connect());
-	iSisInstaller = CSisInstaller::NewL(this);
-	TRAP_IGNORE(iSwiDaemonPlugin = CSwiDaemonPlugin::NewL());
-	}
-	
-CDaemonBehaviour::~CDaemonBehaviour()
-	{
-	if(iSwiDaemonPlugin)
-		{
-		delete iSwiDaemonPlugin;
-		REComSession::FinalClose();
-		}
-	delete iSisInstaller;
-	iFs.Close();	
-	iApaSession.Close();
-	}
-		
-	// from MDaemonBehaviour
-TBool CDaemonBehaviour::StartupL()
-	{
-	// Return state of Startup
-	return ETrue;
-	}
-
-void CDaemonBehaviour::MediaChangeL(TInt aDrive, TChangeType aChangeType)
-	{
-	DEBUG_PRINTF3(_L8("SWI Daemon - Media change detected. Drive: %d, Change Type: %d."),
-		aDrive, aChangeType);
-	
-	RSisRegistryWritableSession registrySession;
-	
-	User::LeaveIfError(registrySession.Connect());
-	CleanupClosePushL(registrySession);
-		
-	if (aChangeType==EMediaInserted)
-		{
-		// notify IAR
-		registrySession.AddDriveL(aDrive);
-
-		// Scan directory on the card and run pre-installed through SWIS
-		// nb. will leave if no SIS files to install.
-		ProcessPreinstalledFilesL(aDrive);
-		}
-	else if (aChangeType==EMediaRemoved)
-		{
-		// Cancel all requests for install
-		iSisInstaller->Reset();
-
-		// Notify plugin
-		if(iSwiDaemonPlugin)
-			{
-			iSwiDaemonPlugin->MediaRemoved(aDrive);
-			}
-
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-		// notify IAR
-		registrySession.RemoveDriveL(aDrive);
-#endif
-		}
-	CleanupStack::PopAndDestroy(&registrySession);
-	}
-	
-void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive)
-	{
-	_LIT(KDaemonPrivatePath,":\\private\\10202dce\\");
-		
-	iSisInstaller->Reset();
-	ProcessPreinstalledFilesL(aDrive, KDaemonPrivatePath);
-	iStartNotified = EFalse;
-	iDrive = aDrive;
-	iSisInstaller->StartInstallingL();
-	}
-		
-void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive, const TDesC& aDirectory)
-	{
-	TPath preInstalledPath;
-	TChar drive;
-	RFs::DriveToChar(aDrive, drive);
-	preInstalledPath.Append(drive);
-	preInstalledPath.Append(aDirectory);
-
-	CDir* dir = NULL;
-	TInt err = iFs.GetDir(preInstalledPath, KEntryAttNormal, ESortByName, dir);	
-	if (err != KErrNone && err != KErrPathNotFound)
-			{
-			User::Leave(err);
-			}
-	if(dir)
-		{
-		// dir will only exist if GetDir succeeded
-		CleanupStack::PushL(dir);
-		for(TInt i = 0; i < dir->Count(); i++)
-			{
-			const TEntry &entry = (*dir)[i];
-			if(!entry.IsDir())
-				{
-				TFileName fileName(preInstalledPath);
-				fileName.Append(entry.iName);
-				iSisInstaller->AddFileToInstallL(fileName);
-				}
-			}
-		CleanupStack::PopAndDestroy(dir);
-		}
-	}
-
-
-// From MDaemonInstallBehaviour
-
-MDaemonInstallBehaviour::TSisInstallState CDaemonBehaviour::VerifyAppCacheListL()
-	{
-	MDaemonInstallBehaviour::TSisInstallState returnState = MDaemonInstallBehaviour::EStateVerifyAppCacheList;
-		
-	// What is really desired is notification that the Application Architecture cached List
-	// is valid, but as this cannot be done simply.
-	// Is is simulated by a call to two member functions.
-				
-	TApaAppInfo appInfo;
-	User::LeaveIfError(iApaSession.GetAllApps());
-	TInt err(iApaSession.GetNextApp(appInfo)); // Call member function that can report an EAppListInvalid
-		
-	if (err == RApaLsSession::EAppListInvalid)
-		{
-		returnState = MDaemonInstallBehaviour::EStateVerifyAppCacheList;
-		}
-	else if (err == KErrNone) // cached list of apps is ready
-		{
-		returnState = MDaemonInstallBehaviour::EStateVerifySwisProperty;
-		}	
-	else
-		{
-		User::Leave(err);
-		}
-	return returnState;
-	}
-
-MDaemonInstallBehaviour::TSisInstallState CDaemonBehaviour::VerifySwisPropertyL()
-	{
-	MDaemonInstallBehaviour::TSisInstallState returnState = MDaemonInstallBehaviour::EStateVerifySwisProperty;
-	TInt swisState;
-	TInt err(RProperty::Get(KUidSystemCategory,KUidSoftwareInstallKey,swisState));
-		
-	if (err == KErrNotFound)
-		{
-		returnState = (MDaemonInstallBehaviour::EStateInstall);
-		}
-	else if (err == KErrNone)
-		{
-		if (swisState == ESwisNone)
-			{
-			// SWIS is idle
-			returnState = (MDaemonInstallBehaviour::EStateInstall);
-			}
-		else
-			{
-			// SWIS is performing an operation
-			returnState = (MDaemonInstallBehaviour::EStateVerifySwisIdle);
-			}
-		}
-	else
-		{
-		User::Leave(err);
-		}
-	return returnState;
-	}
-
-MDaemonInstallBehaviour::TSisInstallState CDaemonBehaviour::VerifySwisIdleL()
-	{
-	MDaemonInstallBehaviour::TSisInstallState returnState = MDaemonInstallBehaviour::EStateVerifySwisIdle;
-	TInt swisState;
-			
-	// Obtain the state of the software installer
-	User::LeaveIfError(RProperty::Get(KUidSystemCategory,KUidSoftwareInstallKey,swisState));
-
-	if (swisState == ESwisNone) // Swis is idle
-		{
-		returnState = (MDaemonInstallBehaviour::EStateInstall);
-		}
-	else // Software installer is currently installing/uinstalling
-		{
-		returnState = (MDaemonInstallBehaviour::EStateVerifySwisIdle);
-		}
-	return returnState;
-	}
-	
-void CDaemonBehaviour::ReadSymbianHeaderL(RFile& aFile, TUid& aUid1, TUid& aUid2, TUid& aUid3)
-	{
-	
-	TInt uidLen =  sizeof(TInt32);
-		
-	TPckg<TInt32> uid1(aUid1.iUid);
-	User::LeaveIfError(aFile.Read(uid1, uidLen));
-	if (uid1.Length() != uidLen)
-		{
-		User::Leave(KErrUnderflow);
-		}
-			
-	TPckg<TInt32> uid2(aUid2.iUid);
-	User::LeaveIfError(aFile.Read(uid2, uidLen));
-	if (uid1.Length() != uidLen)
-		{
-		User::Leave(KErrUnderflow);
-		}
-			
-	TPckg<TInt32> uid3(aUid3.iUid);
-	User::LeaveIfError(aFile.Read(uid3, uidLen));
-	if (uid1.Length() != uidLen)
-		{
-		User::Leave(KErrUnderflow);
-		}
-	
-	}
-
-void CDaemonBehaviour::DoInstallRequestL(const TDesC& aFileName)
-	{
-	DEBUG_PRINTF2(_L("SWI Daemon - Processing presinstalled SIS file '%S'"),
-		&aFileName);
-		
-	TUid appUid;
-	TDataType dataType;
-		
-	User::LeaveIfError(iFs.ShareProtected());
-		
-	// have to pass the file using the file handle
-	// otherwise SisHelper won't be able to read the 
-	// daemon private directory
-	RFile file;
-	User::LeaveIfError(file.Open(iFs, aFileName, EFileRead | EFileStream | EFileShareReadersOnly));
-	CleanupClosePushL(file);
-	User::LeaveIfError(iApaSession.AppForDocument(file,appUid,dataType));
-	
-	// Start installing the file only if it is a sisx file
-	if (dataType.Des8() == KDataTypeSisx)
-		{
-
-		// Check if this is already installed, by extracting the package UID and
-		// asking the registry.
-			
-		TUid uid1, uid2, uid3;
-		ReadSymbianHeaderL(file, uid1, uid2, uid3);
-			
-			
-		// UID 3 will be the package UID, query the registry about it.
-		RSisRegistrySession session;
-		User::LeaveIfError(session.Connect());
-		CleanupClosePushL(session);
-			
-		// temporary work around while we decide what IsInstalled should be policed by.
-			
-		RSisRegistryEntry entry;
-		TInt entryOpenResult = entry.Open(session, uid3);
-		CleanupClosePushL(entry);
-
-		// Get the types and other details from the stub
-		CFileSisDataProvider* fileProvider = CFileSisDataProvider::NewLC(iFs, aFileName, EFileRead | EFileShareReadersOnly); 
-		TInt64 pos( 0 );                            
-   		fileProvider->Seek( ESeekStart, pos ); 
-		Swi::Sis::CContents* content = Swi::Sis::Parser::ContentsL(*fileProvider);
-		CleanupStack::PushL( content );
-		HBufC8* controllerdata = content->ReadControllerL(); 
-		CleanupStack::PushL( controllerdata ); 
-		TPtrProvider provider(controllerdata->Des());
-		Sis::CController *siscontroller = Swi::Sis::CController::NewLC(provider);
-		
-		switch(siscontroller->Info().InstallType())
-			{
-				/* For SA/PA, If UID is found in registry, Don't install otherwise Install */
-				case EInstInstallation:
-				case EInstPreInstalledApp:
-					{
-					if(entryOpenResult != KErrNone)
-						{
-						DoInstallL(file,appUid);
-						}
-					
-					break;
-					}
-				/*
-				 For PP/SP, If patch name is found already in registry, Don't install 
-		 		 otherwise Install 
-		 		 */
-				case EInstPreInstalledPatch:
-				case EInstAugmentation:
-					{
-					TBool shouldInstall = ETrue;
-					const RPointerArray<CString>& names = siscontroller->Info().Names();
-					RPointerArray<CSisRegistryPackage> augmentations;
-					
-					// If Base package is not available then don't do anything and break the case.
-					if (entryOpenResult != KErrNone)
-						{
-						break;
-						}
-
-					//Get the Augmentation and Install if augmentation doesn't match 
-					CleanupResetAndDestroy<RPointerArray<CSisRegistryPackage> >::PushL(augmentations);
-					entry.AugmentationsL(augmentations);	
-					for (TInt i = 0; i < augmentations.Count(); ++i)
-						{
-						for (TInt j =0; j < names.Count(); ++j)
-							{
-							if ((uid3  == augmentations[i]->Uid()) &&
-								(augmentations[i]->Name() == names[j]->Data()))
-								{
-								shouldInstall=EFalse;
-								break;
-								}
-							}
-						}
-
-					if(shouldInstall)	
-						{
-						DoInstallL(file,appUid);
-						}
-					
-					CleanupStack::PopAndDestroy(&augmentations);
-					break;
-					}
-			
-				default: 
-					/* 
-					If SA/PA/SP/PP is not the case we can't handle because
-					PU has never been supported for SwiDaemon according to FS.
-					*/
-					ASSERT(EFalse);
-				
-			}
-
-		CleanupStack::PopAndDestroy(6, &session);
-		
-		} // End of SISX file condition
-		
-	CleanupStack::PopAndDestroy(&file); // close
-	}
-
-void CDaemonBehaviour::DoNotifyMediaProcessingComplete()
-	{
-	if(iSwiDaemonPlugin && iStartNotified)
-		{
-		iSwiDaemonPlugin->MediaProcessingComplete();
-		}
-	}
-
-void CDaemonBehaviour::DoInstallL(RFile &file, const TUid &appUid)
-	{
-					
-	// Rewind file
-	TInt pos = 0;
-	file.Seek(ESeekStart, pos);
-				
-	if(iSwiDaemonPlugin)
-		{
-		DEBUG_PRINTF(_L8("SWI Daemon - Using external plugin to process install"));
-					
-		if(!iStartNotified)
-			{
-			iSwiDaemonPlugin->MediaProcessingStart(iDrive);
-			iStartNotified = ETrue;
-			}
-		iSwiDaemonPlugin->RequestInstall(file);
-		}
-		
-	else
-		{
-		DEBUG_PRINTF(_L8("SWI Daemon - Using internal logic to process install"));
-			
-		TThreadId threadId;
-		User::LeaveIfError(iApaSession.StartDocument(file,appUid,threadId));
-					
-		RThread thread;
-		User::LeaveIfError(thread.Open(threadId));
-		CleanupClosePushL(thread);
-						
-		// Wait for the installer to terminate before launching another install.
-						
-		TRequestStatus status;
-		thread.Logon(status);
-		User::WaitForRequest(status);
-		CleanupStack::PopAndDestroy(&thread);
-		}
-	}	
--- a/installationservices/swi/source/daemon/daemonbehaviour.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
- @file 
- @internalComponent
- @released
-*/
-
-#ifndef __DAEMONBEHAVIOUR_H__
-#define __DAEMONBEHAVIOUR_H__
-
-#include <e32base.h>
-#include <f32file.h>
-#include <apgcli.h>
-
-#include "daemon.h"
-#include "daemoninstaller.h"
-#include <swidaemonplugin.h>
-
-namespace Swi
-{
-/**
- * This class implements the specific behaviour when a media insertion
- * or removal is detected, or the daemon is started.
- */
-class CDaemonBehaviour : public CBase, public MDaemonBehaviour, public MDaemonInstallBehaviour
-	{
-public:
-	static CDaemonBehaviour* NewL();
-	static CDaemonBehaviour* NewLC();
-	~CDaemonBehaviour();
-
-	// from MDaemonBahviour
-public:	
-	/**
-	 * Function called on startup of the daemon.
-	 * This currently performs no opeartions.
-	 */
-	TBool StartupL();
-
-	/**
-	 * Function called on a media change.
-	 * If media is inserted, then this processes pre-installed files on
-	 * the card, and notifies IAR. On removal IAR is notified only.
-	 */
-	void MediaChangeL(TInt aDrive, TChangeType aChangeType);
-
-// Accessor functions
-	RApaLsSession& ApaSession();
-
-	// from MDaemonInstallBehaviour
-public:	
-	/**
-	 * Verifies that the application architecture server has a cached list of applications
-	 * and return next state of install
-	 */
-	MDaemonInstallBehaviour::TSisInstallState VerifyAppCacheListL();
-	
-	/**
-	 * Verifies that the Software Installer property has been defined
-	 * and return next state of install
-	 */
-	MDaemonInstallBehaviour::TSisInstallState VerifySwisPropertyL();
-	
-	/**
-	 * Checks the software installer property, to see if busy
-	 * and return next state of install
-	 */
-	MDaemonInstallBehaviour::TSisInstallState VerifySwisIdleL();
-	
-	/// See MDaemonInstallBehaviour::DoInstallRequestL
-	void DoInstallRequestL(const TDesC& aFileName);
-	
-	/// See MDaemonInstallBehaviour::DoNotifyMediaProcessingComplete
-	void DoNotifyMediaProcessingComplete();
-	
-private:
-	void ConstructL();
-	
-	/**
-	 * Processes any pre-installed files present on the drive.
-	 *
-	 * @param aDrive The drive to check for pre-installed SISX files.
-	 */
-	void ProcessPreinstalledFilesL(TInt aDrive);
-	
-	/**
-	 * Processes any pre-installed files in the given directory on the drive.
-	 @param aDrive The drive to check for pre-installed SISX files.
-	 @param aDirectory The directory to search for PreInstalled Files
-	 
-	 */
-	void ProcessPreinstalledFilesL(TInt aDrive, const TDesC& aDirectory);
-
-	void ReadSymbianHeaderL(RFile& aFile, TUid& aUid1, TUid& aUid2, TUid& aUid3);
-
-	/// Invoke Installation
-	void DoInstallL(RFile &aFile,const TUid &appUid);
-
-private:
-	RFs iFs;
-		
-	// The RApaLsSession instance
-	RApaLsSession iApaSession;
-	
-	// The sisx file processor
-	CSisInstaller* iSisInstaller;
-
-	CSwiDaemonPlugin* iSwiDaemonPlugin;
-
-	// Drive currently being processed
-	TInt iDrive;
-	
-	// Has MediaProcessingStart already been called?
-	TBool iStartNotified;
-	};
-
-// inline functions
-inline RApaLsSession& CDaemonBehaviour::ApaSession()
-	{
-	return iApaSession;
-	}
-
-	
-} // namespace Swi
-
-#endif // #ifndef __DAEMONBEHAVIOUR_H__
-
--- a/installationservices/swi/source/daemon/daemoninstaller.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-/*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include <apgcli.h>
-#include "daemoninstaller.h"
-#include "swispubsubdefs.h"
-#include "log.h"
-
-const static TInt KAppListRetryWaitTime = 5000000; // 5 secs
-_LIT(KMCSisInstaller,"Daemon-Installer"); // Minor-Component name
-
-namespace Swi
-	{
-	// Two phased construction
-
-	CSisInstaller* CSisInstaller::NewL(MDaemonInstallBehaviour* aDaemonBehaviour)
-		{
-		CSisInstaller* self = new (ELeave) CSisInstaller(aDaemonBehaviour);
-		CleanupStack::PushL(self);
-		self->ConstructL();
-		CleanupStack::Pop(self);
-		return self;
-		}
-	
-	// Install Request constructor
-	
-	CSisInstaller::CSisInstaller(MDaemonInstallBehaviour* aDaemonBehaviour) : CActive(CActive::EPriorityStandard),
-		  iDaemonBehaviour(aDaemonBehaviour),
-		  iState(MDaemonInstallBehaviour::EStateVerifyAppCacheList),
-		  iFileIndex(0),
-		  iTimeStep(KAppListRetryWaitTime)		  
-		{
-		CActiveScheduler::Add(this);
-		}
-	
-	// Install Request destructor
-
-	CSisInstaller::~CSisInstaller()
-		{
-		Cancel();
-		iTimer.Close();
-		iProperty.Close();
-		iFilesToInstall.ResetAndDestroy();
-		iFilesToInstall.Close();
-		}
-	
-	// 2nd phase construction
-
-	void CSisInstaller::ConstructL()
-		{
-		User::LeaveIfError(iTimer.CreateLocal());
-		User::LeaveIfError(iProperty.Attach(KUidSystemCategory,KUidSoftwareInstallKey));
-		}
-		
-	// Set the location of all sis files and the list of them
-	// also take ownership of the pointers to memory
-		
-	void CSisInstaller::AddFileToInstallL(const TDesC& aFileName)
-		{
-		DEBUG_PRINTF2(_L("SWI Daemon - Queueing presintalled SIS file '%S' for processing"),
-			&aFileName);
-		
-		HBufC* fileName = aFileName.AllocLC();
-		iFilesToInstall.AppendL(fileName);
-		CleanupStack::Pop(fileName);
-		}
-	
-	// Start the request to process the Sisx file
-
-	void CSisInstaller::StartInstallingL()
-		{
-		if(iFilesToInstall.Count() > 0)
-			{
-			iState = MDaemonInstallBehaviour::EStateVerifyAppCacheList;
-			ReRequestL();
-			}
-		}
-		
-	// Requesting an asyncronous timer/subscrive event
-
-	void CSisInstaller::ReRequestL()
-		{
-		switch (iState)
-			{
-		// Verify the app cache list at time intervals
-		case MDaemonInstallBehaviour::EStateVerifyAppCacheList:
-			iTimer.Cancel();
-			iTimer.After(iStatus,iTimeStep);
-			SetActive();
-			break;
-		
-		// Verify software installer property 
-		case MDaemonInstallBehaviour::EStateVerifySwisProperty:
-			CompleteSelf();
-			break;
-		
-		case MDaemonInstallBehaviour::EStateVerifySwisIdle:
-			iProperty.Subscribe(iStatus);
-			SetActive();
-			break;
-
-		case MDaemonInstallBehaviour::EStateInstall:
-			CompleteSelf();
-			break;
-
-		default:
-			// SisInstaller in an incorrect state
-			User::Panic(KMCSisInstaller,KErrNotSupported);
-			break;			
-			}
-		}
-		
-	// Complete the request manually
-		
-	void CSisInstaller::CompleteSelf()
-		{
-		TRequestStatus* status = &iStatus;
-		User::RequestComplete(status,KErrNone);
-		SetActive();
-		}
-
-	// Cancel the active request
-
-	void CSisInstaller::DoCancel()
-		{
-		iProperty.Cancel();
-		iTimer.Cancel();
-		}
-
-	void CSisInstaller::Reset()
-		{
-		Cancel();
-		iFileIndex = 0;
-		iFilesToInstall.ResetAndDestroy();
-		}
-	
-	// When the software installer has changed state
-	// attemp to install a sisx file
-
-	void CSisInstaller::RunL()
-		{
-		if (iStatus.Int() != KErrNone)
-			{
-			User::Leave(iStatus.Int()); // Invoke RunError
-			}
-					
-		switch (iState)
-			{
-		// Check the cached list of applications
-		case MDaemonInstallBehaviour::EStateVerifyAppCacheList:
-			iState = iDaemonBehaviour->VerifyAppCacheListL();
-			ReRequestL();
-			break;
-			
-		case MDaemonInstallBehaviour::EStateVerifySwisProperty:
-			iState = iDaemonBehaviour->VerifySwisPropertyL();
-			ReRequestL();
-			break;
-		
-		// Check the software installer is not busy
-		case MDaemonInstallBehaviour::EStateVerifySwisIdle:
-			iState = iDaemonBehaviour->VerifySwisIdleL();
-			ReRequestL();
-			break;
-			
-		// Install a file
-		case MDaemonInstallBehaviour::EStateInstall:
-			{
-			iSisFile.Copy(*iFilesToInstall[iFileIndex]);
-			iDaemonBehaviour->DoInstallRequestL(iSisFile);
-			if (++iFileIndex < iFilesToInstall.Count())
-				{
-				iState = MDaemonInstallBehaviour::EStateVerifySwisProperty;
-				CompleteSelf();
-				}
-			else
-				{
-				// All done
-				iDaemonBehaviour->DoNotifyMediaProcessingComplete();
-				}
-			
-			break;
-			}
-		
-		// Active object in unknown state
-		default:
-			User::Panic(KMCSisInstaller,KErrNotSupported);
-			break;
-			}
-		}
-	
-	// If RunL leaves then ignore errors
-
-	TInt CSisInstaller::RunError(TInt aError)
-		{
-		DEBUG_PRINTF3(_L8("SWI Daemon - Daemon failed in state %d with code %d"),
-			iState, aError);
-		
-		Reset();
-		TInt err(KErrNone);
-		if (aError == KErrCancel)
-			{
-			iState = MDaemonInstallBehaviour::EStateVerifyAppCacheList;
-			}
-		return err;
-		}		
-	}
--- a/installationservices/swi/source/daemon/daemoninstaller.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,187 +0,0 @@
-/*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
- @file 
- @internalComponent
-*/
- 
-#include <e32property.h>
-#include <e32base.h>
-
-// Forward declarations
-	
-class RApaLsSession;
-	
-namespace Swi
-	{	
-	/**
-	 * Describes the installation behaviour of any sis files found by the Daemon
-	 */
-	class MDaemonInstallBehaviour
-		{
-	public:
-		/**
-		 * The behavioural states 
-		 */
-		enum TSisInstallState 
-			{
-			EStateVerifyAppCacheList,
-			EStateVerifySwisProperty,
-			EStateVerifySwisIdle,
-			EStateInstall
-			};
-
-	public:
-		/**
-		 * Application architecture server has a cached list of applications
-		 * and this is required to be ready to use
-		 */
-		virtual TSisInstallState VerifyAppCacheListL() = 0;
-		
-		/**
-		 * The software installer uses a property to indicate what operation it is in,
-		 * this should be defined
-		 */
-		virtual TSisInstallState VerifySwisPropertyL() = 0;
-		
-		/**
-		 * Before any installation of sisx files can take place, the software installer
-		 * must not be busy
-		 */
-		virtual TSisInstallState VerifySwisIdleL() = 0;
-
-		/**
-		 * Request Installation
-		 *
-		 * If not using the swidaemonplugin, then use apparch to
-		 * launch the handler for the SIS file and block until the
-		 * handler is done (ie. exits).
-		 *
-		 * If using the swidaemonplugin, then ask the plugin to do the
-		 * install, but do NOT wait for it to complete (and the plugin
-		 * RequestInstallL function must not block either).
-		 *
-		 * @param aFileName The name of the sis filename
-		 */
-		virtual void DoInstallRequestL(const TDesC& aFileName) = 0;
-
-		/**
-		 * Tell daemon we have called DoInstallRequestL for all SIS
-		 * files on this removable media.
-		 */
-		virtual void DoNotifyMediaProcessingComplete() = 0;
-		};
-
-	/**
-	 * The Daemon SIS installer
-	 */
-	class CSisInstaller : public CActive
-		{
-	public:
-		/**
-		 * Symbian construction (for member variables)
-		 */
-		static CSisInstaller* NewL(MDaemonInstallBehaviour* aDaemonBehaviour);
-		
-		/**
-		 * C++ destructor
-		 */
-		~CSisInstaller();
-		
-		/**
-		 Adds a file to the list of files to be installed
-		 @param aFileName The full name and path of the file to be installed
-		 */
-		void AddFileToInstallL(const TDesC& aFileName);
-		
-		/**
-		 * Install the specified sis file
-		 */
-		void StartInstallingL();
-				
-	private: // From CActive
-	
- 		/**
-		 * Called by Cancel when a request from this class is outstanding
-		 * nb. You should probably call Reset instead of Cancel.
-		 */
-		void DoCancel();
-	
-	public:
-		/**
-		 * Cancel outstanding requests and reset statemachine.
-		 * Also calls Cancel.
-		 * Called by DoCancel, StartInstallingL and RunError
-		 */
-		void Reset();
-
-	private:
-		/**
-		 * Asynchronous completion request processing
-		 */
-		void RunL();
-		
-		/**
-		 * Handles any Leaves from the RunL
-		 */
-		TInt RunError(TInt aError);
-
-	private:
-		/**
-		 * C++ constructor
-		 */
-		CSisInstaller(MDaemonInstallBehaviour* aDaemonBehaviour);
-		
-		/**
-		 * 2nd phase constructor
-		 */
-		void ConstructL();
-		
-		/**
-		 * Asynchronous request activate
-		 */
-		void ReRequestL();
-		
-		/**
-		 * Self request completion
-		 */
-		void CompleteSelf();
-								
-	private:
-		// The behaviour of the daemon with respect to installing
-		MDaemonInstallBehaviour* iDaemonBehaviour;
-	
-		// The state
-		MDaemonInstallBehaviour::TSisInstallState iState;
-		
-		RPointerArray <HBufC> iFilesToInstall;
-		
-		// Sis files and location
-		TBuf<KMaxFileName> iSisFile;
-		TInt iFileIndex;
-		
-		// Timer and time step
-		RTimer iTimer;
-		TTimeIntervalMicroSeconds32 iTimeStep;
-		
-		// Software installer property
-		RProperty iProperty;
-		};		
-	}
-
--- a/installationservices/swi/source/daemon/drivewatcher.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "drivewatcher.h"
-#include "log.h"
-
-namespace Swi
-{
-// CDriveWatcher
-_LIT(KNotificationDirectory,"mediachange\\");
-
-/*static*/ CDriveWatcher* CDriveWatcher::NewL(RFs& aFs, TInt aDrive, 
-												MDriveObserver& aObserver,
-							 					TInt aPriority)
-	{
-	CDriveWatcher* self=NewLC(aFs, aDrive, aObserver, aPriority);
-	CleanupStack::Pop(self);
-	return self;
-	}
-	
-/*static*/ CDriveWatcher* CDriveWatcher::NewLC(RFs& aFs, TInt aDrive, 
-												MDriveObserver& aObserver,
-							 					TInt aPriority)
-	{
-	CDriveWatcher* self=new(ELeave) CDriveWatcher(aFs, aDrive, aObserver, aPriority);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	return self;	
-	}
-	
-CDriveWatcher::~CDriveWatcher()
-	{
-	Cancel();
-	}
-
-CDriveWatcher::CDriveWatcher(RFs& aFs, TInt aDrive, MDriveObserver& aObserver,
-							 TInt aPriority)
-	: CActive(aPriority), iFs(aFs), iDrive(aDrive), iObserver(aObserver)
-	{
-	CActiveScheduler::Add(this);
-	}
-
-void CDriveWatcher::ConstructL()
-	{
-	// Notify observer of media change since we're beginning from an unknown state
-	NotifyMediaChange();
-	
-	// Start watching for changes
-	WaitForChangeL();
-	}
-
-void CDriveWatcher::DoCancel()
-	{
-	iFs.NotifyChangeCancel(iStatus);
-	}
-
-TBool CDriveWatcher::IsMediaPresentL()
-	{
-	TVolumeInfo volumeInfo;
-	TInt err=iFs.Volume(volumeInfo, iDrive);
-	
-	switch (err)
-		{
-		case KErrNotReady: // No Media present
-			{
-			return EFalse;	
-			}
-			
-		case KErrNone: // Media Present
-			{
-			return ETrue;
-			}
-		}
-
-	User::Leave(err);	
-	return ETrue;	// Will never get here.
-	}
-
-void CDriveWatcher::NotifyMediaChange()
-	{
-	// Unsuccessful media change is not fatal, so handle here
-	TRAPD(err,iObserver.MediaChangeL(iDrive, IsMediaPresentL() ? MDriveObserver::EMediaInserted : MDriveObserver::EMediaRemoved));
-
-	if (err != KErrNone)
-		{
-	    DEBUG_PRINTF2(_L8("SWI Daemon - Media change notification failed with code %d"), err);
-		}
-	}
-	
-void CDriveWatcher::RunL()
-	{
-	NotifyMediaChange();
-			
-	WaitForChangeL();
-	}
-
-void CDriveWatcher::WaitForChangeL()
-	{
-	TChar drive;
-	User::LeaveIfError(iFs.DriveToChar(iDrive, drive));
-	TUint driveChar(drive); // Can't pass TChar to Format().
-	
-	TPath notificationPath;
-	TPath privatePath;
-	_LIT(KNotificationPathFormat,"%c:%S%S");
-	User::LeaveIfError(iFs.PrivatePath(privatePath));
-
-	notificationPath.Format(KNotificationPathFormat, driveChar, &privatePath, &KNotificationDirectory);	
-	
-	iFs.NotifyChange(ENotifyEntry, iStatus, notificationPath);
-
-	SetActive();
-	}
-	
-}
--- a/installationservices/swi/source/daemon/drivewatcher.h	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
- @file 
- @internalComponent
- @released
-*/
-
-#ifndef __DRIVEWATCHER_H__
-#define __DRIVEWATCHER_H__
-
-#include <e32base.h>
-#include <f32file.h>
-
-namespace Swi
-{
-
-/**
- * Observer interface called whenever a media change is detected.
- */
-class MDriveObserver
-	{
-public:
-	/// Enumeration indicating whether a card was inserted or removed
-	enum TChangeType { EMediaInserted, EMediaRemoved };
-	
-	/**
-	 * This function is called to indicate a media change has occurred.
-	 *
-	 * @param aChangeType	EInserted to indicate media has been inserted,
-	 *						or ERemoved to indicate media has been removed.
-	 */
-	virtual void MediaChangeL(TInt aDrive, TChangeType aChangeType)=0;
-	};
-
-/**
- * This active object waits for an indication that the media has changed,
- * and then notifies its observer.
- */
-class CDriveWatcher : public CActive
-	{
-public:
-	static CDriveWatcher* NewL(RFs& aFs, TInt aDrive, MDriveObserver& aObserver,TInt aPriority = EPriorityStandard);
-	static CDriveWatcher* NewLC(RFs& aFs, TInt aDrive, MDriveObserver& aObserver,TInt aPriority = EPriorityStandard);
-	
-	~CDriveWatcher();
-
-	TInt Drive() const;
-private:
-	CDriveWatcher(RFs& aFs, TInt aDrive, MDriveObserver& aObserver, TInt aPriority);
-
-	void ConstructL();
-
-// from CActive
-	void DoCancel();
-	void RunL();
-
-	/// Set up change notification.
-	void WaitForChangeL();
-
-	/**
-	 * Notifies the observer of the appropriate media change depending on whether
-	 * media is now present on the drive we're currently watching.
-	 */
-	void NotifyMediaChange();
-	
-	/** 
-	 * Determines if the media is present in the drive we are currently watching.
-	 *
-	 * @return ETrue if the media is present, EFalse otherwise.
-	 */
-	TBool IsMediaPresentL();
-
-private:
-	/// Not owned by this class
-	RFs& iFs;
-	
-	/// Drive number we are watching
-	TInt iDrive;
-
-	/// Observer to notify of changes
-	MDriveObserver& iObserver;
-	};
-
-// inline functions from CDriveWatcher
-
-inline TInt CDriveWatcher::Drive() const
-	{
-	return iDrive;
-	}
-	
-} //namespace Swi
-
-#endif // #ifndef __DRIVEWATCHER_H__
-
--- a/installationservices/swi/source/daemon/main.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
- @file
- @internalComponent
-*/
-#include <e32base.h>
-#include <f32file.h>
-
-#include "daemon.h"
-#include "daemonbehaviour.h"
-#include "log.h"
-
-namespace Swi
-{
-
-/**
- * Daemon main function
- */
-void MainL()
-	{
-	CDaemonBehaviour* daemonBehaviour=CDaemonBehaviour::NewLC();
-	CDaemon::NewLC(*daemonBehaviour);
-	
-	RProcess::Rendezvous(KErrNone);
-	CActiveScheduler::Start();
-
-	CleanupStack::PopAndDestroy(2, daemonBehaviour);	
-	}
-
-} // namespace Swi
-
-/**
- * Entry Point, sets up the cleanup stack and calls the main function.
- * @return Always returns KErrNone even if SwiDemon has failed to start.
- * Note: The break request to fix this problem (BR 1846) was rejected by 
- * the SCB 17/5/2006 so this cannot be fixed.
- * see http://smglinx.intra/twiki/bin/view/BR/1846 for more details.
- */
-GLDEF_C TInt E32Main()
-	{
-	DEBUG_PRINTF(_L8("SWI Daemon - Starting Daemon"));
-	
-	CTrapCleanup* cleanup = CTrapCleanup::New();
-	CActiveScheduler* scheduler=new CActiveScheduler();
-
-	if(cleanup == NULL || scheduler==NULL)
-		{
-		delete scheduler;
-		delete cleanup;
-		return KErrNoMemory;
-		}
-	CActiveScheduler::Install(scheduler);
-
-
-	// workaround for DEF056843 to ignore return code when this leaves 
-	// unable to remove this (supposed to be temporary workaround)
-	// due to BR 1846 (see above)
-	TRAP_IGNORE(Swi::MainL());
-
-	delete scheduler;
-	delete cleanup;
-	
-	DEBUG_PRINTF(_L8("SWI Daemon - Daemon Exiting"));
-	return KErrNone;
-	}
-
--- a/installationservices/swi/source/integrityservices/integrityservices.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/integrityservices/integrityservices.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -138,6 +138,41 @@
 	CleanupStack::PopAndDestroy(localFilenameHeap);
 	}
 
+void CIntegrityServices::CopyToBackupL(const TDesC& aSource, const TDesC& aBackup)
+	{
+	// Copying a file isn't atomic so we create a temporary backup file first
+	RBuf backupTmpName;
+	backupTmpName.Create(aBackup.Length() + 4);
+	CleanupClosePushL(backupTmpName);
+	backupTmpName.Copy(aBackup);
+	_LIT(KTmpExt, ".tmp");
+	backupTmpName.Append(KTmpExt);
+	
+	// Copying a file is not an atomic operation so add the temporary
+	// file to the journal to enable cleanup if a power failure occurs before
+	// the rename
+	SimulatePowerFailureL(EFailAddingTempFile, EBeforeJournal, backupTmpName);
+	iJournal->TemporaryL(backupTmpName);
+	SimulatePowerFailureL(EFailAddingTempFile, EAfterJournal, backupTmpName);	
+		
+	CFileMan* fileMan = CFileMan::NewL(iFs);
+	CleanupStack::PushL(fileMan);
+		
+	TInt err = fileMan->Copy(aSource, backupTmpName);
+	DEBUG_PRINTF4(_L("CopyToBackupL: Copying %S to %S, err %d"), &aSource, &backupTmpName, err);
+	User::LeaveIfError(err);
+	
+	// Backup is complete, use RFs::Rename as atomic 'commit' of backup
+	err = iFs.Rename(backupTmpName, aBackup);			
+	DEBUG_PRINTF2(_L("CopyToBackupL: Commit backup returned error %d"), err);	
+	User::LeaveIfError(err);	
+	CleanupStack::PopAndDestroy(2, &backupTmpName); // backupTmpName, fileMan 
+	
+	//  Now the backup is safe the original can be deleted
+	err = iLoader.Delete(aSource);
+	DEBUG_PRINTF3(_L("CopyToBackupL: RLoader::Delete %S returned error %d"), &aSource, err);
+	User::LeaveIfError(err);
+	}
 	
 EXPORT_C void CIntegrityServices::RemoveL(const TDesC& aFileName)
 	{
@@ -178,11 +213,20 @@
 			}
 
 		SimulatePowerFailureL(EFailRemovingFile, EBeforeAction, aFileName);
-
-		err = iFs.Rename(localFilename, backupFileName);
-		DEBUG_PRINTF4(_L("Renamed %S as %S error %d"), &localFilename, &backupFileName, err);
-		User::LeaveIfError(err);				
-
+		
+		_LIT(KSysBinMatch, "?:\\sys\\bin\\*");
+		if (localFilename.MatchF(KSysBinMatch) == 0)
+			{
+			// A copy is slower than a rename to only use the 
+			// demand paging safe API for files in sys\bin
+			CopyToBackupL(localFilename, backupFileName);			
+			}
+		else
+			{
+			err = iFs.Rename(localFilename, backupFileName);
+			DEBUG_PRINTF4(_L("Renamed %S as %S error %d"), &localFilename, &backupFileName, err);
+			User::LeaveIfError(err);
+			}				
 		SimulatePowerFailureL(EFailRemovingFile, EAfterAction, aFileName);
 		}
 	else
--- a/installationservices/swi/source/integrityservices/operationfunctions.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/integrityservices/operationfunctions.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -29,15 +29,9 @@
 
 using namespace Swi;
 
-TBool IsBinary(const TEntry& aEntry)
-    {
-    return (aEntry[0].iUid == KExecutableImageUidValue || aEntry[0].iUid == KDynamicLibraryUidValue) ? ETrue : EFalse;
-    }
-
 void Swi::IntegrityDeleteFileL(const TDesC& aPath, CIntegrityTreeLeaf* aLeaf, RFs& aFs, 
 							   RLoader& aLoader, CFileMan& aFileMan)
 	{
-    _LIT(KSysBin, "\\sys\\bin");
 	RBuf name;
 	name.CreateL(aPath, KMaxFileName);
 	CleanupClosePushL(name);
@@ -62,42 +56,9 @@
 			}
 		else
 			{			
-            if ( aLeaf->Type() == EBackupFile ) // Implies a commit operation is in progress
-                {
-                
-                 if ( IsBinary(entry) )
-                     {
-                     // Forming the file name so the renamed file can be under sys/bin
-					 // for special delete mechanism using RLoader::Delete
-                     RBuf tmpName;
-                     TParsePtrC fileName(name);
-                     tmpName.CreateL(name.Length() + KSysBin.iTypeLength);
-                     CleanupClosePushL(tmpName);
-
-                     tmpName.Append(fileName.Drive());
-                     tmpName.Append(KSysBin);
-                     tmpName.Append(fileName.Path());
-                     tmpName.Append(fileName.NameAndExt());
-
-					 DEBUG_PRINTF3(_L("Integrity Services - Renaming %S to %S"), &name, &tmpName);
-                     aFileMan.Rename(name,tmpName,CFileMan::EOverWrite);
-                     User::LeaveIfError(aLoader.Delete(tmpName)); // Using RLoader delete for paged binaries
-					 DEBUG_PRINTF2(_L("Integrity Services - Deleted renamed file %S"), &tmpName);
-
-					 // prune the directory tree if possible
-                     RemoveDirectoryTreeL(aFs, tmpName);
-                     CleanupStack::PopAndDestroy(&tmpName);
-                     }
-                 else
-                     {
-                     User::LeaveIfError(aFileMan.Delete(name));
-                     }
-                }
-            else
-                {
-				// Need to use RLoader Delete which can be used during deletion of Added files during Rollback
-                User::LeaveIfError(aLoader.Delete(name));
-                }
+			TInt err = aLoader.Delete(name);
+			DEBUG_PRINTF3(_L("Integrity Services - Delete File %S err = %d"), &name, err);
+			User::LeaveIfError(err);
 			}
 			
 		// prune the directory tree if possible
@@ -108,29 +69,6 @@
 		DEBUG_PRINTF3(_L("Integrity Services - error %d removing %S"), err, &name);
 		User::Leave(err);
 		}
-	else
-	    {
-
-		DEBUG_PRINTF3(_L("Integrity Services - error %d removing %S"), err, &name);
-
-	    // Check for any renamed files to move it to sys/bin for special delete mechanism
-	    RBuf tmpName;
-	    TParsePtrC fileName(name);
-	    tmpName.CreateL(name.Length() + KSysBin.iTypeLength);
-	    CleanupClosePushL(tmpName);
-
-	    tmpName.Append(fileName.Drive());
-	    tmpName.Append(KSysBin);
-	    tmpName.Append(fileName.Path());
-	    tmpName.Append(fileName.NameAndExt());
-		DEBUG_PRINTF2(_L("Integrity Services - Removing  %S renamed binary files if any"), &tmpName);
-
-	    aLoader.Delete(tmpName);
-		// prune the directory tree if possible
-	    RemoveDirectoryTreeL(aFs, tmpName);
-	    CleanupStack::PopAndDestroy(&tmpName);
-	    }
-
 	CleanupStack::PopAndDestroy(&name);
 	}
 
--- a/installationservices/swi/source/integrityservices/operationfunctions.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/integrityservices/operationfunctions.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -28,7 +28,6 @@
 #include <e32base.h>
 #include <f32file.h>
 #include <e32ldr_private.h>
-#include <e32uid.h>
 
 namespace Swi
 {
--- a/installationservices/swi/source/plan/plan.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/plan/plan.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -38,6 +38,9 @@
 	iFilesToRunBeforeShutdown.ResetAndDestroy();
 	iFilesToRunAfterInstall.ResetAndDestroy();
 	iAppArcRegFiles.ResetAndDestroy();
+#ifdef  SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+	iAffectedApps.Close();
+#endif
 	}
 
 EXPORT_C CPlan* CPlan::NewL()
@@ -152,5 +155,28 @@
 	{
 	iAppArcRegFiles.ResetAndDestroy();
 	}
-	
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
+EXPORT_C void CPlan::SetAffectedApps(RArray<TAppUpdateInfo>& aAppInfo)
+    {
+    TInt count = aAppInfo.Count();
+    for(TInt i = 0 ; i< count ; i++)
+        {
+        iAffectedApps.Append(aAppInfo[i]);
+        }
+    }
+    
+EXPORT_C void CPlan::GetAffectedApps(RArray<TAppUpdateInfo>& aAppInfo) const
+    {
+    TInt count = iAffectedApps.Count();
+    for(TInt i = 0 ; i< count ; i++)
+        {
+        aAppInfo.Append(iAffectedApps[i]);
+        }
+    }
+
+EXPORT_C void CPlan::ResetAffectedApps()
+    {
+    iAffectedApps.Reset();    
+    }
+#endif
--- a/installationservices/swi/source/plan/plan.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/plan/plan.h	Tue Aug 31 15:21:33 2010 +0300
@@ -26,6 +26,7 @@
 #define __PLAN_H__
 
 #include <e32base.h>
+#include "sislauncherclient.h"
 
 namespace Swi
 {
@@ -146,7 +147,12 @@
 	 * Resets the list of app arc registration files that have yet to be processed
 	 * */
 	IMPORT_C void ResetAppArcRegFiles();
-		
+	
+    #ifdef  SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
+	IMPORT_C void  SetAffectedApps(RArray<TAppUpdateInfo>& aAppInfo);	
+	IMPORT_C void  GetAffectedApps(RArray<TAppUpdateInfo>& aAppInfo) const;
+	IMPORT_C void  ResetAffectedApps();
+    #endif	
 private:
 	CPlan();
 	/// Information about the application being installed or uninstalled, used by the UI
@@ -169,7 +175,11 @@
 	/// is true if the plan contains ECOM plug-ins
 	TBool iContainsPlugins;
 	/// the list of AppArc registration files that haven't been processed
-	RPointerArray<TDesC> iAppArcRegFiles;
+	RPointerArray<TDesC> iAppArcRegFiles;	
+    #ifdef  SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
+	/// the list of apps affected by insatllation/upgrade, used to notify apparc
+	RArray<TAppUpdateInfo> iAffectedApps;
+    #endif
 	};
 
 // inline functions
--- a/installationservices/swi/source/securitymanager/securitymanager.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/securitymanager/securitymanager.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -41,7 +41,7 @@
 #include "hashcontainer.h"
 #include "certchainconstraints.h"
 #include "devinfosupportclient.h"
-#include "cleanuputils.h"
+
 #include "log.h"
 
 // PKIX dependencies
@@ -711,7 +711,6 @@
 											 RPointerArray<CX509Certificate>& aCertOut,
 											 TRequestStatus& aStatus)
 	{	
-	CleanupResetAndDestroyPushL(aCertOut);
 	Cancel();
 	
 	DEBUG_PRINTF2(_L8("Security Manager - Performing OCSP with revocation server at %S."),
@@ -728,7 +727,7 @@
  		aCertOut.AppendL(certOut);
  		CleanupStack::Pop(certOut);
  		}
- 	
+ 		
  	DEBUG_PRINTF2(_L8("Security Manager - Validating %d certificate chains for this controller."), numChains);
 
 	iClientStatus = &aStatus;
@@ -749,7 +748,6 @@
 	
 	iRevocationHandler->SendRequestL(iValidPkixChains, aIap, iStatus);
 	
-	CleanupStack::Pop(&aCertOut);
 	SetActive();
 	}
 
@@ -1146,7 +1144,6 @@
 	const Sis::CController& aController,
 	RPointerArray<CX509Certificate>& aCerts)
 	{
-	CleanupResetAndDestroyPushL(aCerts);
 	// Go through all SIS chains and extract end certificates from them.
 	const RPointerArray<Sis::CSignatureCertificateChain>& chains=
 		aController.SignatureCertificateChains();
@@ -1168,7 +1165,6 @@
 		// Cleanup.
 		CleanupStack::PopAndDestroy(pkixChain);
 		}
-	CleanupStack::Pop(&aCerts);
 	}
 
 EXPORT_C void CSecurityManager::FillCertInfoArrayL(
--- a/installationservices/swi/source/sisfile/siscontroller.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisfile/siscontroller.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -115,10 +115,12 @@
 	delete iPrerequisites;
 	delete iDataIndex;
 	delete iTrustStatus;
-	delete iCertChainConstraints;
-    
-    iCertChainIndices.Close();
-    iSignatureCertificateChains.ResetAndDestroy(); 
+	delete iCertChainConstraints;	
+	iCertChainIndices.Close();
+    iSignatureCertificateChains.ResetAndDestroy();
+	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	iApplicationInfo.ResetAndDestroy();
+	#endif
 	}
 
 void CController::ConstructL(MSisDataProvider& aDataProvider, TInt64& aBytesRead, TReadTypeBehaviour aTypeReadBehaviour)
--- a/installationservices/swi/source/sisfile/swtypereginfo.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisfile/swtypereginfo.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -17,239 +17,49 @@
 
 
 #include "swtypereginfo.h"
-
+#include "arrayutils.h"
+#include "ipcutil.h"
 using namespace Swi;
 
-CLocalizedSoftwareTypeName::CLocalizedSoftwareTypeName()
-	{
-	}
-
-CLocalizedSoftwareTypeName::CLocalizedSoftwareTypeName(TLanguage aLocale)
-	:	iLocale(aLocale)
-	{
-	}
-
-EXPORT_C CLocalizedSoftwareTypeName::~CLocalizedSoftwareTypeName()
-	{
-	delete iName;
-	}
-
-EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewL(const TDesC& aName, TLanguage aLocale)
-	{
-	CLocalizedSoftwareTypeName *self = CLocalizedSoftwareTypeName::NewLC(aName, aLocale);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewLC(const TDesC& aName, TLanguage aLocale)
-	{
-	CLocalizedSoftwareTypeName *self = new(ELeave) CLocalizedSoftwareTypeName(aLocale);
-	CleanupStack::PushL(self);
-	self->iName = aName.AllocL();
-	return self;
-	}
-
-EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewL(RReadStream& aStream)
-	{
-	CLocalizedSoftwareTypeName* self = new(ELeave) CLocalizedSoftwareTypeName();
-	CleanupStack::PushL(self);
-	self->InternalizeL(aStream);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-EXPORT_C void CLocalizedSoftwareTypeName::ExternalizeL(RWriteStream& aStream) const
-	{
-	aStream.WriteInt32L(iLocale);
-	aStream << *iName;
-	}
-
-void CLocalizedSoftwareTypeName::InternalizeL(RReadStream& aStream)
-	{
-	TLanguage locale = static_cast<TLanguage>(aStream.ReadInt32L());
-	iLocale = locale;
-
-	delete iName;
-	iName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
-	}
-
-// ##########################################################################################
-
-EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(const TDesC& aUniqueSoftwareTypeName)
-	{
-	CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo();
-	CleanupStack::PushL(self);
-	self->iUniqueSoftwareTypeName = HBufC::NewL(aUniqueSoftwareTypeName.Length());
-	self->iUniqueSoftwareTypeName->Des().Copy(aUniqueSoftwareTypeName);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(RReadStream& aStream)
-	{
-	CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo();
-	CleanupStack::PushL(self);
-	self->InternalizeL(aStream);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-CSoftwareTypeRegInfo::CSoftwareTypeRegInfo()
-	{
-	}
-
-EXPORT_C CSoftwareTypeRegInfo::~CSoftwareTypeRegInfo()
-	{
-	delete iUniqueSoftwareTypeName;
-	iMimeTypes.Close();
-	iLocalizedSoftwareTypeNames.Close();
-	}
-
-EXPORT_C void CSoftwareTypeRegInfo::ExternalizeL(RWriteStream& aStream) const
-	{
-	aStream << *iUniqueSoftwareTypeName;
-	aStream << iSifPluginUid.iUid;
-	
-	TUid installerUid = iInstallerSecureId;
-	aStream << installerUid.iUid;
-	
-	TUid executionLayerUid = iExecutionLayerSecureId;
-	aStream << executionLayerUid.iUid;
-	
-	// MIME types
-	const TInt numMimeTypes = iMimeTypes.Count();
-	aStream.WriteInt32L(numMimeTypes);
-	for (TInt i=0; i<numMimeTypes; ++i)
-		{
-		aStream << *iMimeTypes[i];
-		}
-	 
-	// Localized names
-	const TInt numLocalizedNames = iLocalizedSoftwareTypeNames.Count();
-	aStream.WriteInt32L(numLocalizedNames);
-	for (TInt i=0; i<numLocalizedNames; ++i)
-		{
-		aStream << *iLocalizedSoftwareTypeNames[i];
-		}
-	}
-
-EXPORT_C TInt CSoftwareTypeRegInfo::ExternalizedSize() const
-	{
-	TInt size = sizeof(TUid) + sizeof(TSecureId) + sizeof(TSecureId);
-	size += sizeof(TInt) + iUniqueSoftwareTypeName->Size();
-	
-	// MIME types
-	const TInt numMimeTypes = iMimeTypes.Count();
-	size += sizeof(TInt);
-	for (TInt i=0; i<numMimeTypes; ++i)
-		{
-		size += sizeof(TInt) + iMimeTypes[i]->Size();
-		}
-	 
-	// Localized names
-	const TInt numLocalizedNames = iLocalizedSoftwareTypeNames.Count();
-	size += sizeof(TInt);
-	for (TInt i=0; i<numLocalizedNames; ++i)
-		{
-		size += sizeof(TInt) + sizeof(TInt) + iLocalizedSoftwareTypeNames[i]->Name().Size();
-		}
-
-	return size;
-	}
-
-void CSoftwareTypeRegInfo::InternalizeL(RReadStream& aStream)
-	{
-	ASSERT(iUniqueSoftwareTypeName == NULL);
-	
-	iUniqueSoftwareTypeName = HBufC::NewL(aStream, EUniqueSwTypeNameMaxLength);
-	
-	iSifPluginUid = TUid::Uid(aStream.ReadInt32L());
-	iInstallerSecureId = TUid::Uid(aStream.ReadInt32L());
-	iExecutionLayerSecureId = TUid::Uid(aStream.ReadInt32L());
-	
-	// MIME types
-	const TInt numMimeTypes = aStream.ReadInt32L();
-	for (TInt i=0; i<numMimeTypes; ++i)
-		{
-		HBufC* mimeType = HBufC::NewLC(aStream, EUniqueSwTypeNameMaxLength);
-		iMimeTypes.AppendL(mimeType);
-		CleanupStack::Pop(mimeType);
-		}
-	
-	// Localized names
-	const TInt numLocalizedNames = aStream.ReadInt32L();
-	for (TInt i=0; i<numLocalizedNames; ++i)
-		{
-		CLocalizedSoftwareTypeName* name = CLocalizedSoftwareTypeName::NewL(aStream);
-		CleanupStack::PushL(name);
-		iLocalizedSoftwareTypeNames.AppendL(name);
-		CleanupStack::Pop(name);
-		}
-	}
-
-EXPORT_C void CSoftwareTypeRegInfo::SetMimeTypeL(const TDesC& aMimeType)
-	{
-	HBufC* mimeType = HBufC::NewLC(aMimeType.Length());
-	mimeType->Des().Copy(aMimeType);
-	iMimeTypes.AppendL(mimeType);
-	CleanupStack::Pop(mimeType);
-	}
-
-EXPORT_C void CSoftwareTypeRegInfo::SetLocalizedSoftwareTypeNameL(TLanguage aLanguage, const TDesC& aName)
-	{
-	CLocalizedSoftwareTypeName* name = CLocalizedSoftwareTypeName::NewLC(aName, aLanguage);
-	iLocalizedSoftwareTypeNames.AppendL(name);
-	CleanupStack::Pop(name);
-	}
-
-// ##########################################################################################
-
-EXPORT_C void SoftwareTypeRegInfoUtils::SerializeArrayL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf8& aSerializedArray)
+EXPORT_C void SoftwareTypeRegInfoUtils::SerializeArrayL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf8& aSerializedArray)
 	{
 	TInt bufLen = sizeof(TInt);
 	const TInt count = aSwTypeRegInfoArray.Count();
 	for (TInt i=0; i<count; ++i)
-		{
-		bufLen += aSwTypeRegInfoArray[i]->ExternalizedSize();
-		}
+	    {
+	    bufLen += GetObjectSizeL(aSwTypeRegInfoArray[i]);
+	    }
 
 	aSerializedArray.ReAllocL(aSerializedArray.Length()+bufLen);
 	RDesWriteStream ws(aSerializedArray);
 	CleanupClosePushL(ws);
 
-	ws.WriteInt32L(count);
-	for (TInt i=0; i<count; ++i)
-		{
-		const CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
-		ws << info;
-		}
+	ExternalizePointerArrayL(aSwTypeRegInfoArray, ws);
 
 	ws.CommitL();
 	CleanupStack::PopAndDestroy(&ws);
 	}
 
-EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeArrayL(RReadStream& aStream, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
+EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeArrayL(RReadStream& aStream, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
 	{
-	CleanupResetAndDestroyPushL(aSwTypeRegInfoArray);
 	const TInt numElems = aStream.ReadInt32L();
 	for (TInt i=0; i<numElems; ++i)
 		{
-		CSoftwareTypeRegInfo* info = CSoftwareTypeRegInfo::NewL(aStream);
+		Usif::CSoftwareTypeRegInfo* info = Usif::CSoftwareTypeRegInfo::NewL(aStream);
 		CleanupStack::PushL(info);
 		aSwTypeRegInfoArray.AppendL(info);
 		CleanupStack::Pop(info);
 		}
-	CleanupStack::Pop(&aSwTypeRegInfoArray);
 	}
 
-EXPORT_C void SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf& aSerializedNames)
+EXPORT_C void SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf& aSerializedNames)
 	{
 	const TInt numNames = aSwTypeRegInfoArray.Count();
 	
 	TInt bufLen = 0;
 	for (TInt i=0; i<numNames; ++i)
 		{
-		const CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
+		const Usif::CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
 		bufLen += info.UniqueSoftwareTypeName().Length() + sizeof(TChar);
 		}
 	
@@ -257,7 +67,7 @@
 	
 	for (TInt i=0; i<numNames; ++i)
 		{
-		const CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
+		const Usif::CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
 		aSerializedNames.Append(info.UniqueSoftwareTypeName());
 		aSerializedNames.Append(static_cast<TChar>(KUniqueNameSeparator));
 		}
@@ -265,7 +75,6 @@
 
 EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeUniqueSwTypeNamesL(const TDesC& aSerializedNames, RArray<TPtrC>& aUniqueSwTypeNames)
 	{
-	CleanupClosePushL(aUniqueSwTypeNames);
 	TPtrC buf(aSerializedNames);
 	for (;;)
 		{
@@ -284,10 +93,9 @@
 			break;
 			}
 		}
-	CleanupStack::Pop(&aUniqueSwTypeNames);
 	}
 
-EXPORT_C void SoftwareTypeRegInfoUtils::ExtractMimeTypesL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RPointerArray<HBufC8>& aMimeTypes)
+EXPORT_C void SoftwareTypeRegInfoUtils::ExtractMimeTypesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RPointerArray<HBufC8>& aMimeTypes)
 	{
 	for (TInt i=0; i<aSwTypeRegInfoArray.Count(); ++i)
 		{
--- a/installationservices/swi/source/sishelper/sishelper.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sishelper/sishelper.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -511,8 +511,6 @@
 void CSisHelperSession::FillDrivesAndSpacesL(RArray<TChar>& aDriveLetters, 
 					                        RArray<TInt64>& aDriveSpaces)
 	{
-	CleanupClosePushL(aDriveLetters);
-	CleanupClosePushL(aDriveSpaces);
 	// This is the LFSS free space threshold
 	TInt freeSpaceAdjustment = 1024 * 128;    // Bytes	
 
@@ -568,7 +566,6 @@
         User::LeaveIfError(aDriveSpaces.Append(volSpace));
         }
     CleanupStack::PopAndDestroy(&fs);
-    CleanupStack::Pop(2, &aDriveLetters);
 	}
 
 
--- a/installationservices/swi/source/sishelper/sishelperclient.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sishelper/sishelperclient.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -104,9 +104,6 @@
 EXPORT_C void RSisHelper::FillDrivesAndSpacesL(RArray<TChar>& aDriveLetters, 
 	RArray<TInt64>& aDriveSpaces)
 	{
-	CleanupClosePushL(aDriveLetters);
-	CleanupClosePushL(aDriveSpaces);
-	
 	// calculate the likely size of the data transfer buffer
 	const TInt KMaxBufSize=
 		sizeof(TInt)+                 // number of entries
@@ -146,7 +143,6 @@
 	
 	// cleanup
 	CleanupStack::PopAndDestroy(2, buf); // ins, buf
-	CleanupStack::Pop(2, &aDriveLetters);
 	}
 
 EXPORT_C void RSisHelper::OpenDrmContentL(ContentAccess::TIntent aIntent)
@@ -268,7 +264,6 @@
 #endif
 void RSisHelper::GetEquivalentLanguageListL(TLanguage aLangId,RArray<TLanguage>& aEquivLangs)
 	{
-	CleanupClosePushL(aEquivLangs);
 	// calculate the likely size of the data transfer buffer
 	const TInt KMaxBufSize=
 		sizeof(TInt)+                 // number of entries
@@ -296,5 +291,4 @@
 		}
 	// cleanup
 	CleanupStack::PopAndDestroy(2, buf); // buf
-	CleanupStack::Pop(&aEquivLangs);
 	}
--- a/installationservices/swi/source/sishelper/uissclienthandler.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sishelper/uissclienthandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -51,140 +51,130 @@
 #include "commands/textdialog.h"
 #include "log.h"
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include "cleanuputils.h"
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include <usif/sif/sifcommon.h>
 const TInt KCompInfoBufferSize=4*1024;
 #endif
 
-
-
 namespace Swi
 {
-
-//Temporary error logging solution.
-void LogSwiErrorsToFileL(TInt aErrorCode, const TDesC& aAppName);
-
 //
 // A cancel handler
 //
 class InternalCancelHandler : public MCancelHandler
-    {
+	{
 public:
-    InternalCancelHandler(CUissClientHandler& aUissClientHandler);
-    void HandleCancel();
+	InternalCancelHandler(CUissClientHandler& aUissClientHandler);
+	void HandleCancel();
 private:
-    CUissClientHandler& iUissClientHandler;
-    };
+	CUissClientHandler& iUissClientHandler;
+	};
 
 InternalCancelHandler::InternalCancelHandler(
-    CUissClientHandler& aUissClientHandler)
-:   iUissClientHandler(aUissClientHandler)
-    {
-    }
+	CUissClientHandler& aUissClientHandler)
+:	iUissClientHandler(aUissClientHandler)
+	{
+	}
 
 void InternalCancelHandler::HandleCancel()
-    {
-    iUissClientHandler.CancelOperation();
-    }
+	{
+	iUissClientHandler.CancelOperation();
+	}
 
 CUissClientHandler* CUissClientHandler::NewLC(MUiHandler& aUiHandler, TBool aActiveObjectMode)
-    {
-    CUissClientHandler* self=new(ELeave) CUissClientHandler(aUiHandler, aActiveObjectMode);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    return self;
-    }
+	{
+	CUissClientHandler* self=new(ELeave) CUissClientHandler(aUiHandler, aActiveObjectMode);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
 
 CUissClientHandler* CUissClientHandler::NewL(MUiHandler& aUiHandler, TBool aActiveObjectMode)
-    {
-    CUissClientHandler* self=NewLC(aUiHandler, aActiveObjectMode);
-    CleanupStack::Pop(self);
-    return self;
-    }
+	{
+	CUissClientHandler* self=NewLC(aUiHandler, aActiveObjectMode);
+	CleanupStack::Pop(self);
+	return self;
+	}
 
 CUissClientHandler::CUissClientHandler(MUiHandler& aUiHandler, TBool aActiveObjectMode)
         : CActive(EPriorityStandard),
           iUiHandler(aUiHandler),
-          iPtrIntoBuf(0,0),
+		  iPtrIntoBuf(0,0),
           iActiveObjectMode(aActiveObjectMode),
-          iPtrIntoArgsStream(0,0)
-          #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-          ,iCompInfoBufPtr(0,0)
-          #endif
-    {
+		  iPtrIntoArgsStream(0,0)
+		  #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+		  ,iCompInfoBufPtr(0,0)
+		  #endif
+	{
     if (iActiveObjectMode)
-        {
-        CActiveScheduler::Add(this);
-        }
-    }
+		{
+		CActiveScheduler::Add(this);
+		}
+	}
 
 void CUissClientHandler::WaitForSisHelperShutdown()
-    {   
-    if(iSisHelper.Handle() > 0)
-        {
-        TRequestStatus reqStatus;
-        iSisHelper.Logon(reqStatus);
-        User::WaitForRequest(reqStatus);
-        iSisHelper.Close();
-        }       
-    }
-    
+	{	
+	if(iSisHelper.Handle() > 0)
+		{
+		TRequestStatus reqStatus;
+		iSisHelper.Logon(reqStatus);
+		User::WaitForRequest(reqStatus);
+		iSisHelper.Close();
+		}		
+	}
+	
 CUissClientHandler::~CUissClientHandler()
-    {
-    //Cancel any outstanding request
-    CancelOperation();
+	{
+	//Cancel any outstanding request
+	CancelOperation();
 
-    WaitForSisHelperShutdown();
+	WaitForSisHelperShutdown();
     if (iActiveObjectMode)
-        {
-        CActive::Cancel(); // Make sure we are cancelled before deletion
-        }
+		{
+		CActive::Cancel(); // Make sure we are cancelled before deletion
+		}
 
-    delete iCancelHandler;
+	delete iCancelHandler;
     delete iArgsStream;
-    iUissSession.Close();
-    delete iBuf;
-    delete iBufLogger;
-    #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	iUissSession.Close();
+	delete iBuf;
+	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
     delete iCompInfoBuffer;
-    #endif
-    }
+	#endif
+	}
 
 /**
  * Allocates a buffer for reverse-completion commands. The buffer is going to 
  * be resized in case it is not sufficient for a dialog command.
  */
 void CUissClientHandler::ConstructL()
-    {
-    iCancelHandler=new(ELeave) InternalCancelHandler(*this);
-    AllocBufL(KBufSize);// Allocate the initial r/c buffer
-
-	//Logger buffer.
-	iBufLogger = KNullDesC8().AllocL();
-    User::LeaveIfError(StartUiss()); // Start UISS
-    User::LeaveIfError(iUissSession.Connect()); // Connect to UISS
-    }
+	{
+	iCancelHandler=new(ELeave) InternalCancelHandler(*this);
+	AllocBufL(KBufSize);// Allocate the initial r/c buffer
+	User::LeaveIfError(StartUiss()); // Start UISS
+	User::LeaveIfError(iUissSession.Connect()); // Connect to UISS
+	}
 
 void CUissClientHandler::AllocBufL(TInt aSize)
-    {
+	{
     HBufC8* buf=HBufC8::NewL(aSize);
     delete iBuf;
     iBuf=buf;
     }
 
 void CUissClientHandler::HandleOverflowL()
-    {
-    // Reallocate the buffer to the size received in parameter 1
-    TInt size=0;
-    TPckg<TInt> theSize(size);
-    theSize.Copy(iBuf->Left(sizeof(TInt)));
-    AllocBufL(size);
-    }
-    
+	{
+	// Reallocate the buffer to the size received in parameter 1
+	TInt size=0;
+	TPckg<TInt> theSize(size);
+	theSize.Copy(iBuf->Left(sizeof(TInt)));
+	AllocBufL(size);
+	}
+	
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 void CUissClientHandler::AllocCompInfoBufL(TInt aSize)
-    {
+	{
     HBufC8* buf = HBufC8::NewL(aSize);
     delete iCompInfoBuffer;
     iCompInfoBuffer = buf;
@@ -193,132 +183,132 @@
 
 ///\short Creates a command handler object for the specified dialog request
 CUissCmdHandler* CUissClientHandler::UissCmdHandlerFactoryL(TInt aCommand) const
-    {
-    switch (aCommand)
-        {
-        case CUissSession::KMessageApplicationsInUseDialog:
-            return new(ELeave) CApplicationsInUseDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageCannotOverwriteFileDialog:
-            return new(ELeave) CCannotOverwriteFileDialogCmdHandler(iUiHandler);
-        
-        case CUissSession::KMessageDependencyBreakDialog:
-            return new(ELeave) CDependencyBreakDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageDeviceIncompatibility:
-            return new(ELeave) CDeviceIncompatibilityDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageMissingDependency:
-            return new(ELeave) CMissingDependencyDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageDriveDialog:
-            return new(ELeave) CDriveDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageErrorDialog:
-            return new(ELeave) CErrorDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageGrantCapabilitiesDialog:
-            return new(ELeave) CGrantCapabilitiesDialogCmdHandler(iUiHandler);  
-        case CUissSession::KMessageHandleCancellableInstallEvent:
-            return new(ELeave) CHandleCancellableInstallEventCmdHandler(iUiHandler, 
-                *iCancelHandler);
-        case CUissSession::KMessageHandleInstallEvent:
-            return new(ELeave) CHandleInstallEventCmdHandler(iUiHandler);
-        case CUissSession::KMessageInstallDialog:
-            return new(ELeave) CInstallDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageLanguageDialog:
-            return new(ELeave) CLanguageDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageOcspResultDialog:
-            return new(ELeave) COcspResultDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageOptionsDialog:
-            return new(ELeave) COptionsDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageQuestionDialog:
-            return new(ELeave) CQuestionDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageSecurityWarningDialog:
-            return new(ELeave) CSecurityWarningDialogCmdHandler(iUiHandler);
-        case CUissSession::KMessageUninstallDialog:
-            return new(ELeave) CUninstallDialogCmdHandler(iUiHandler);
-        
-        case CUissSession::KMessageUpgradeDialog:
-            return new(ELeave) CUpgradeDialogCmdHandler(iUiHandler);
-        
-        case CUissSession::KMessageTextDialog:
-            return new(ELeave) CTextDialogCmdHandler(iUiHandler);
-                    
-        default:
-            return NULL;
-        }
-    }
+	{
+	switch (aCommand)
+		{
+		case CUissSession::KMessageApplicationsInUseDialog:
+			return new(ELeave) CApplicationsInUseDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageCannotOverwriteFileDialog:
+			return new(ELeave) CCannotOverwriteFileDialogCmdHandler(iUiHandler);
+		
+		case CUissSession::KMessageDependencyBreakDialog:
+			return new(ELeave) CDependencyBreakDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageDeviceIncompatibility:
+			return new(ELeave) CDeviceIncompatibilityDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageMissingDependency:
+			return new(ELeave) CMissingDependencyDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageDriveDialog:
+			return new(ELeave) CDriveDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageErrorDialog:
+			return new(ELeave) CErrorDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageGrantCapabilitiesDialog:
+			return new(ELeave) CGrantCapabilitiesDialogCmdHandler(iUiHandler);	
+		case CUissSession::KMessageHandleCancellableInstallEvent:
+			return new(ELeave) CHandleCancellableInstallEventCmdHandler(iUiHandler, 
+				*iCancelHandler);
+		case CUissSession::KMessageHandleInstallEvent:
+			return new(ELeave) CHandleInstallEventCmdHandler(iUiHandler);
+		case CUissSession::KMessageInstallDialog:
+			return new(ELeave) CInstallDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageLanguageDialog:
+			return new(ELeave) CLanguageDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageOcspResultDialog:
+			return new(ELeave) COcspResultDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageOptionsDialog:
+			return new(ELeave) COptionsDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageQuestionDialog:
+			return new(ELeave) CQuestionDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageSecurityWarningDialog:
+			return new(ELeave) CSecurityWarningDialogCmdHandler(iUiHandler);
+		case CUissSession::KMessageUninstallDialog:
+			return new(ELeave) CUninstallDialogCmdHandler(iUiHandler);
+		
+		case CUissSession::KMessageUpgradeDialog:
+			return new(ELeave) CUpgradeDialogCmdHandler(iUiHandler);
+		
+		case CUissSession::KMessageTextDialog:
+			return new(ELeave) CTextDialogCmdHandler(iUiHandler);
+					
+		default:
+			return NULL;
+		}
+	}
 
 void CUissClientHandler::InitializeArgStreamL(const CInstallPrefs& aInstallPrefs)
-    {
-    // Stream out install parameters. Cannot do this in UISSCLIENT because 
-    // the code is in LAUNCHER which depends on UISSCLIENT.
+	{
+	// Stream out install parameters. Cannot do this in UISSCLIENT because 
+	// the code is in LAUNCHER which depends on UISSCLIENT.
     delete iArgsStream;
     iArgsStream = 0;
-    iArgsStream = CWriteStream::NewL();
-    *iArgsStream << aInstallPrefs;
+	iArgsStream = CWriteStream::NewL();
+	*iArgsStream << aInstallPrefs;
     // Save ptr for args (must persist whilst server is processing)
-    iPtrIntoArgsStream.Set(iArgsStream->Ptr()); 
-    }
-    
+	iPtrIntoArgsStream.Set(iArgsStream->Ptr());	
+	}
+	
 void CUissClientHandler::InstallL(const CInstallPrefs& aInstallPrefs, const RArray<TInt>& aDeviceSupportedLanguages, TRequestStatus& aRequestStatus, RThread& aServer)
-    {
+	{
     iState = KUissClientInstalling;
     iClientStatus = &aRequestStatus;
     
     // Save ptr for data returned by request (must persist whilst server is processing)
-    iPtrIntoBuf.Set(iBuf->Des());
+	iPtrIntoBuf.Set(iBuf->Des());
 
-    InitializeArgStreamL(aInstallPrefs);
-    iArgsStream->Stream().WriteInt32L(aDeviceSupportedLanguages.Count());
-    //Streaming set of languages that device supports
-    TInt noOfDeviceSupportedLanguages = aDeviceSupportedLanguages.Count();
-    for(TInt i=0;i<noOfDeviceSupportedLanguages;i++)
-        {
-        iArgsStream->Stream().WriteInt32L(aDeviceSupportedLanguages[i]);
-        }
-    // Save ptr for args (must persist whilst server is processing)
-    iPtrIntoArgsStream.Set(iArgsStream->Ptr()); 
-        
+	InitializeArgStreamL(aInstallPrefs);
+	iArgsStream->Stream().WriteInt32L(aDeviceSupportedLanguages.Count());
+	//Streaming set of languages that device supports
+	TInt noOfDeviceSupportedLanguages = aDeviceSupportedLanguages.Count();
+	for(TInt i=0;i<noOfDeviceSupportedLanguages;i++)
+		{
+		iArgsStream->Stream().WriteInt32L(aDeviceSupportedLanguages[i]);
+		}
+	// Save ptr for args (must persist whilst server is processing)
+	iPtrIntoArgsStream.Set(iArgsStream->Ptr());	
+		
     // Issue initial request
     iUissSession.Install(iPtrIntoArgsStream, iPtrIntoBuf, iStatus);
     if (iActiveObjectMode)
-        {
-        SetActive();
-        }
+		{
+		SetActive();
+		}
 
     // Update client's TRequestStatus object
     *iClientStatus = KRequestPending;
     iSisHelper = aServer;
-    }
+	}
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 void CUissClientHandler::GetComponentInfoL(const CInstallPrefs& aInstallPrefs, Usif::CComponentInfo& aComponentInfo, TRequestStatus& aRequestStatus, RThread& aServer)
-    {    
+	{	
     iState = KUissClientGettingCompInfo;
     iClientStatus = &aRequestStatus;
-        
+    	
     // Store the component info reference to the class reference. So that, the same will be 
     // populated after getting the asynchronous method completed.
     iComponentInfo = &aComponentInfo;
     
-    InitializeArgStreamL(aInstallPrefs);
-    
-    AllocCompInfoBufL(KCompInfoBufferSize); 
-    
-    // Save the pointer for component info collection buffer
-    iCompInfoBufPtr.Set(iCompInfoBuffer->Des());
+	InitializeArgStreamL(aInstallPrefs);
+	
+	AllocCompInfoBufL(KCompInfoBufferSize);	
+	
+	// Save the pointer for component info collection buffer
+	iCompInfoBufPtr.Set(iCompInfoBuffer->Des());
 
     // Issue get component info request
     iUissSession.GetComponentInfo(iPtrIntoArgsStream, iCompInfoBufPtr, iStatus);
 
-    // There is no synchronous API for GetComponentInfo
-    __ASSERT_ALWAYS(iActiveObjectMode, User::Invariant());
-    SetActive();
+	// There is no synchronous API for GetComponentInfo
+	__ASSERT_ALWAYS(iActiveObjectMode, User::Invariant());
+	SetActive();
 
     // Update client's TRequestStatus object
     *iClientStatus = KRequestPending;
-    iSisHelper = aServer;   
-    }
+    iSisHelper = aServer;	
+	}
 #endif
 
 void CUissClientHandler::UninstallL(const CSisRegistryPackage& aPackage, TRequestStatus& aRequestStatus)
-    {
+	{
     iState = KUissClientUninstalling;
     iClientStatus = &aRequestStatus;
 
@@ -327,264 +317,241 @@
 
     delete iArgsStream;
     iArgsStream = 0;
-    iArgsStream = CWriteStream::NewL();
+	iArgsStream = CWriteStream::NewL();
     *iArgsStream << aPackage;
     // Save ptr for args (must persist whilst server is processing)
-    iPtrIntoArgsStream.Set(iArgsStream->Ptr());
+	iPtrIntoArgsStream.Set(iArgsStream->Ptr());
 
-    // Issue initial request
+	// Issue initial request
     iUissSession.Uninstall(iPtrIntoArgsStream, iPtrIntoBuf, iStatus);
     if (iActiveObjectMode)
-        {
-        SetActive();
-        }
+		{
+		SetActive();
+		}
 
     // Update client's TRequestStatus object
     *iClientStatus = KRequestPending;
-    }
+	}
 
 void CUissClientHandler::CancelOperation()
-    {
-    if (iState == KUissClientIdle)
-        {
-        return;
-        }
-    
-    // User called this so must have an outstanding request with us.
+	{
+	if (iState == KUissClientIdle)
+		{
+		return;
+		}
+	
+	// User called this so must have an outstanding request with us.
 
-    // First tell the Uiss that we want to cancel the current
-    // operation.
-    //
-    // If we have an outstanding Uiss request, this will complete (with
-    // KErrCancel) when the operation has terminated.
-    //
-    // If we are called inside a dialog callback, then there is no
-    // outstanding Uiss request at the moment. When the dialog
-    // returns, we will issue a request, which will complete (with
-    // KErrCancel) when the operation has terminated.
-    (void)iUissSession.Cancel();
-    }
+	// First tell the Uiss that we want to cancel the current
+	// operation.
+	//
+	// If we have an outstanding Uiss request, this will complete (with
+	// KErrCancel) when the operation has terminated.
+	//
+	// If we are called inside a dialog callback, then there is no
+	// outstanding Uiss request at the moment. When the dialog
+	// returns, we will issue a request, which will complete (with
+	// KErrCancel) when the operation has terminated.
+	(void)iUissSession.Cancel();
+	}
 
 void CUissClientHandler::WorkUntilCompleteL()
-    {
-    // Keep processing UISS responses and issuing new requests
-    // until we update the client status to non-pending.
-    while(iClientStatus && *iClientStatus == KRequestPending) 
-        {
-        User::WaitForRequest(iStatus);
-        TRAPD(err,RunL());
-        if(err != KErrNone)
-            {   
-            RunError(err);
-            }
-        }
-    }
+	{
+	// Keep processing UISS responses and issuing new requests
+	// until we update the client status to non-pending.
+	while(iClientStatus && *iClientStatus == KRequestPending) 
+		{
+		User::WaitForRequest(iStatus);
+		TRAPD(err,RunL());
+		if(err != KErrNone)
+			{	
+			RunError(err);
+			}
+		}
+	}
 
 TBool CUissClientHandler::IsBusy()
-    {
-    return iState != KUissClientIdle;
-    }
+	{
+	return iState != KUissClientIdle;
+	}
 
 
 //
 // Code necessary to run UISS in the same process but in a different thread
 //
 TInt CUissClientHandler::StartUiss()
-    {
-    const TInt KUissServerStackSize=0x2000;
-    const TInt KUissServerInitHeapSize=0x1000;
-    const TInt KUissServerMaxHeapSize=0x1000000;
-    
-    
-    TThreadFunction entryPoint=UissThreadFunction;
-    //TUiSupportStartParams uiSupportParams(aUiHandler);
-    // The owner of the new thread will be the process, otherwise if the 
-    // current thread dies, the server thread will die, too.
-    RThread server;
-    TInt err = KErrNone;
-        
-    for (TInt retry=0; retry < 2; ++retry)
-        {
-        err = server.Create(KUissServerName, entryPoint, 
-        KUissServerStackSize, KUissServerInitHeapSize, KUissServerMaxHeapSize,
-        NULL, EOwnerThread);
-        
-        if (err == KErrAlreadyExists)
-            {
-            User::After(30000); 
-            }
-        else
-            {
-            break;
-            }
-        }
-        
-    if (err==KErrAlreadyExists)
-        {
-        return KErrServerBusy;
-        }
-    if (err != KErrNone)
-        {
-        return err;
-        }
-    
-    // Synchronise with the process to make sure it hasn't died straight away
-    TRequestStatus stat;
-    server.Rendezvous(stat);
-    if (stat != KRequestPending)
-        {
-        // logon failed - server is not yet running, so cannot have terminated
-        server.Kill(0); // Abort startup
-        }
-    else
-        {
-        // logon OK - start the server
-        server.Resume();
-        }
-    // Wait to synchronise with server - if it dies in the meantime, it
-    // also gets completed
-    User::WaitForRequest(stat); 
-    // We can't use the 'exit reason' if the server panicked as this
-    // is the panic 'reason' and may be '0' which cannot be distinguished
-    // from KErrNone
-    TInt r=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int();
-    server.Close();
-    return r;
-    }
+	{
+	const TInt KUissServerStackSize=0x2000;
+	const TInt KUissServerInitHeapSize=0x1000;
+	const TInt KUissServerMaxHeapSize=0x1000000;
+	
+	
+	TThreadFunction entryPoint=UissThreadFunction;
+	//TUiSupportStartParams uiSupportParams(aUiHandler);
+	// The owner of the new thread will be the process, otherwise if the 
+	// current thread dies, the server thread will die, too.
+	RThread server;
+	TInt err = KErrNone;
+		
+	for (TInt retry=0; retry < 2; ++retry)
+		{
+		err = server.Create(KUissServerName, entryPoint, 
+		KUissServerStackSize, KUissServerInitHeapSize, KUissServerMaxHeapSize,
+		NULL, EOwnerThread);
+		
+		if (err == KErrAlreadyExists)
+			{
+			User::After(30000);	
+			}
+		else
+			{
+			break;
+			}
+		}
+		
+	if (err==KErrAlreadyExists)
+		{
+		return KErrServerBusy;
+		}
+	if (err != KErrNone)
+		{
+		return err;
+		}
+	
+	// Synchronise with the process to make sure it hasn't died straight away
+	TRequestStatus stat;
+	server.Rendezvous(stat);
+	if (stat != KRequestPending)
+		{
+		// logon failed - server is not yet running, so cannot have terminated
+		server.Kill(0); // Abort startup
+		}
+	else
+		{
+		// logon OK - start the server
+		server.Resume();
+		}
+	// Wait to synchronise with server - if it dies in the meantime, it
+	// also gets completed
+	User::WaitForRequest(stat);	
+	// We can't use the 'exit reason' if the server panicked as this
+	// is the panic 'reason' and may be '0' which cannot be distinguished
+	// from KErrNone
+	TInt r=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int();
+	server.Close();
+	return r;
+	}
 
 // Entry point for the thread the UISS runs in
 TInt CUissClientHandler::UissThreadFunction(TAny *)
-    {
-    __UHEAP_MARK;
-    CTrapCleanup* cleanup = CTrapCleanup::New(); // get clean-up stack
-    
-    CActiveScheduler* scheduler=new(ELeave) CActiveScheduler;
-    CActiveScheduler::Install(scheduler);
-    CUissServer* server=NULL;
-    
-    TRAPD(err, server=CUissServer::NewL());
-    if (err==KErrNone)
-        {
-        RThread::Rendezvous(KErrNone);
-        scheduler->Start();
-        }
-    
-    delete server;
-    
-    CActiveScheduler::Install(NULL);
-    delete scheduler;
-    delete cleanup; // destroy clean-up stack
-    __UHEAP_MARKEND;
-    return KErrNone;
-    }
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New(); // get clean-up stack
+	
+	CActiveScheduler* scheduler=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(scheduler);
+	CUissServer* server=NULL;
+	
+	TRAPD(err, server=CUissServer::NewL());
+	if (err==KErrNone)
+		{
+		RThread::Rendezvous(KErrNone);
+		scheduler->Start();
+		}
+	
+	delete server;
+	
+	CActiveScheduler::Install(NULL);
+	delete scheduler;
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return KErrNone;
+	}
 
 void CUissClientHandler::RunL()
     {
     TInt err = iStatus.Int();
-    iPtrIntoBuf.Set(iBuf->Des()); // Get ptr to our return buffer
-    
+	iPtrIntoBuf.Set(iBuf->Des()); // Get ptr to our return buffer
+
 	DEBUG_PRINTF2(_L8("Sis Helper - UISS Client Handler, RunL(). Status: %d."), err);
-    if(err > 0)
-        {
-		// For Logging purpose, store the buffer to retrieve 
-		// application info later.
-        delete iBufLogger;
-        iBufLogger = 0;
-        iBufLogger = iBuf->AllocL();
-        }
-    
+
+	
     if (err==KErrOverflow 
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK  
-        && iState != KUissClientGettingCompInfo // We don't support overflow management for component info
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+		&& iState != KUissClientGettingCompInfo // We don't support overflow management for component info
 #endif
-        )
+		)
         {
         // Grow the respective buffer buffer and re-issue "request".
         // There should now be space for the UISS server to copy in its dialogue message.
         HandleOverflowL();
         iPtrIntoBuf.Set(iBuf->Des());
-        iUissSession.BufferReallocated(iPtrIntoBuf, iStatus);
+		iUissSession.BufferReallocated(iPtrIntoBuf, iStatus);
 
-        if (iActiveObjectMode)
-            {
-            SetActive();
-            }
-        return;
-        }
-    else
-        {
-        if (err>CUissSession::KMsgSeparatorMinimumSwisMessage && 
-            err<CUissSession::KMsgSeparatorMaximumSwisMessage)
-            {
-            // this is a dialog request, unmarshal parameters and display 
-            // the dialog
-            CUissCmdHandler* cmdHandler=UissCmdHandlerFactoryL(err);
-            if (!cmdHandler)
-                {               
-                User::Leave(KErrNotSupported);
-                }
-            
-            CleanupStack::PushL(cmdHandler);
-            // Note that the callback might call CancelOperation which
-            // would update iState...
-            cmdHandler->HandleMessageL(iPtrIntoBuf, iPtrIntoBuf);
-            CleanupStack::PopAndDestroy(cmdHandler);
-            }
-        else
-            {
-            #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-            // Request has been completed successfully. So, now construct the 
-            // component info from the buffer which is populated from the SWI server.
-            if (err == KErrNone  && iState == KUissClientGettingCompInfo)
-                {
-                ConstructCompInfoFromBufferL();
-                }           
-            #endif
-            // Either KErrNone or some sort of error status - in any case the processing has finished
-            iState = KUissClientIdle;           
-            }
-        }
-    
-    // Re-issue request, if we are still installing/uninstalling
-    switch(iState)
-        {
-    case KUissClientInstalling:
-    case KUissClientUninstalling:
-        iUissSession.CompleteDialog(KErrNone, iPtrIntoBuf, iStatus);
-        if (iActiveObjectMode)
-            {
-            SetActive();
-            }
-        return;
-            
-    case KUissClientIdle:
-        // All done, or failed...
-        delete iArgsStream;
-        iArgsStream = 0;
-        //Wait for the death of SisHelper
-        WaitForSisHelperShutdown(); 
-        // Complete user request (also sets iClientStatus to 0)
-        ASSERT(iClientStatus);
-        User::RequestComplete(iClientStatus, err);
-        
-        // Logging the error to a file 
-        // Temporary solution, should be removed once instrumentation is fully operational.
-        if(err != KErrNone)
-            {
-			TRAP_IGNORE(
-            RDesReadStream readStream(iBufLogger->Des());
-            CleanupClosePushL(readStream);
+		if (iActiveObjectMode)
+			{
+			SetActive();
+			}
+		return;
+		}
+	else
+		{
+		if (err>CUissSession::KMsgSeparatorMinimumSwisMessage && 
+			err<CUissSession::KMsgSeparatorMaximumSwisMessage)
+			{
+			// this is a dialog request, unmarshal parameters and display 
+			// the dialog
+			CUissCmdHandler* cmdHandler=UissCmdHandlerFactoryL(err);
+			if (!cmdHandler)
+				{
+				User::Leave(KErrNotSupported);
+				}
 			
-			//Retrieve package name.
-            CAppInfo* appInfo=CAppInfo::NewLC(readStream);
-            LogSwiErrorsToFileL(err, appInfo->AppName());
-            
-            CleanupStack::PopAndDestroy(2, &readStream);
-			);
-            }
-        return;
-        }
-    ASSERT(false);
+			CleanupStack::PushL(cmdHandler);
+			// Note that the callback might call CancelOperation which
+			// would update iState...
+			cmdHandler->HandleMessageL(iPtrIntoBuf, iPtrIntoBuf);
+			CleanupStack::PopAndDestroy(cmdHandler);
+			}
+		else
+			{
+			#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+			// Request has been completed successfully. So, now construct the 
+			// component info from the buffer which is populated from the SWI server.
+			if (err == KErrNone  && iState == KUissClientGettingCompInfo)
+				{
+				ConstructCompInfoFromBufferL();
+				}			
+			#endif
+			// Either KErrNone or some sort of error status - in any case the processing has finished
+			iState = KUissClientIdle;			
+			}
+		}
+	
+	// Re-issue request, if we are still installing/uninstalling
+	switch(iState)
+		{
+	case KUissClientInstalling:
+	case KUissClientUninstalling:
+		iUissSession.CompleteDialog(KErrNone, iPtrIntoBuf, iStatus);
+		if (iActiveObjectMode)
+			{
+			SetActive();
+			}
+		return;
+			
+	case KUissClientIdle:
+		// All done, or failed...
+		delete iArgsStream;
+		iArgsStream = 0;
+		//Wait for the death of SisHelper
+		WaitForSisHelperShutdown();	
+		// Complete user request (also sets iClientStatus to 0)
+		ASSERT(iClientStatus);
+		User::RequestComplete(iClientStatus, err);
+		return;
+		}
+	ASSERT(false);
     }
 
 
@@ -595,11 +562,11 @@
 	iPtrIntoBuf.Zero();
 	iUissSession.CompleteDialog(aError, iPtrIntoBuf, iStatus);
     if (iActiveObjectMode)
-        {
-        SetActive();
-        }
-    return KErrNone; // Do not crash the CActiveScheduler.
-    }
+		{
+		SetActive();
+		}
+	return KErrNone; // Do not crash the CActiveScheduler.
+	}
 
 void CUissClientHandler::DoCancel()
     {
@@ -613,164 +580,114 @@
 	// iStatus, which would stop the active scheduler and hence stop
 	// the CancelOperation from being actioned.
 
-    // Do an emergency abort.....
+	// Do an emergency abort.....
 
-    // First kill our helper threads
-    
-    // SIS helper thread/server
-    CSisHelperServer::Abort();
-    
-    // UI helper thread/server
-    TFullName fullName = RProcess().FullName();
-    fullName.Append(':');
-    fullName.Append(':');
-    fullName.Append(KUissServerName);
+	// First kill our helper threads
+	
+	// SIS helper thread/server
+	CSisHelperServer::Abort();
+	
+	// UI helper thread/server
+	TFullName fullName = RProcess().FullName();
+	fullName.Append(':');
+	fullName.Append(':');
+	fullName.Append(KUissServerName);
 
-    RThread server;
-    TInt err = server.Open(fullName);
-    if (err == KErrNone)
-        {
-        server.Terminate(KErrAbort);
-        server.Close();
-        }
-    
-    // Now complete any client request
-    if (iClientStatus)
-        {
-        User::RequestComplete(iClientStatus, err);
-        }
+	RThread server;
+	TInt err = server.Open(fullName);
+	if (err == KErrNone)
+		{
+		server.Terminate(KErrAbort);
+		server.Close();
+		}
+	
+	// Now complete any client request
+	if (iClientStatus)
+		{
+		User::RequestComplete(iClientStatus, err);
+		}
     }
     
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 void CUissClientHandler::ConstructCompInfoFromBufferL()
     {    
     // create a stream based on the buffer
-    RDesReadStream stream(*iCompInfoBuffer);
-    CleanupClosePushL(stream);
-    
-    CNativeComponentInfo* nativeCompInfo = CNativeComponentInfo::NewLC();
-    nativeCompInfo->InternalizeL(stream);
-        
-    // UISS and SWI cannot use Usif::CComponentInfo directly, as it is implemented in a non-TCB DLL. For this reason, a private structure maintained (CNativeComponentInfo),
-    // which is returned by SWI and is converted here to the CComponentInfo according to the USIF interface
-    Usif::CComponentInfo::CNode* rootNode = MapToComponentInfoL(*nativeCompInfo);
-    iComponentInfo->SetRootNodeL(rootNode);
+	RDesReadStream stream(*iCompInfoBuffer);
+	CleanupClosePushL(stream);
+	
+	CNativeComponentInfo* nativeCompInfo = CNativeComponentInfo::NewLC();
+	nativeCompInfo->InternalizeL(stream);
+		
+	// UISS and SWI cannot use Usif::CComponentInfo directly, as it is implemented in a non-TCB DLL. For this reason, a private structure maintained (CNativeComponentInfo),
+	// which is returned by SWI and is converted here to the CComponentInfo according to the USIF interface
+	Usif::CComponentInfo::CNode* rootNode = MapToComponentInfoL(*nativeCompInfo);
+	iComponentInfo->SetRootNodeL(rootNode);
+
+	CleanupStack::PopAndDestroy(nativeCompInfo);
+	CleanupStack::PopAndDestroy(&stream);
+    }
 
-    CleanupStack::PopAndDestroy(nativeCompInfo);
-    CleanupStack::PopAndDestroy(&stream);
+ void CUissClientHandler::MapToApplicationInfoL(RCPointerArray<Swi::CNativeComponentInfo::CNativeApplicationInfo>& aNativeApplicationsInfo, RPointerArray<Usif::CComponentInfo::CApplicationInfo>& aApplicationsInfo)
+    {        
+        TInt count = aNativeApplicationsInfo.Count();
+        for (TInt i = 0; i < count; ++i)
+            {
+            Usif::CComponentInfo::CApplicationInfo* app ;
+            app =  Usif::CComponentInfo::CApplicationInfo::NewLC(aNativeApplicationsInfo[i]->AppUid(), aNativeApplicationsInfo[i]->Name(), aNativeApplicationsInfo[i]->GroupName(), aNativeApplicationsInfo[i]->IconFileName());                       
+            DEBUG_PRINTF2(_L("App Uid 0x%08x"),app->AppUid());
+            DEBUG_PRINTF2(_L("File Name %S"),&app->Name());
+            DEBUG_PRINTF2(_L("Group Name %S"),&app->GroupName());
+            DEBUG_PRINTF2(_L("Icon File Name %S"),&app->IconFileName());            
+            aApplicationsInfo.AppendL(app);
+            CleanupStack::Pop(app);
+            }        
     }
 
 Usif::CComponentInfo::CNode* CUissClientHandler::MapToComponentInfoL(CNativeComponentInfo& aNativeComponentInfo)
-    {
-    // Create the array to store the children nodes.
-    RPointerArray<Usif::CComponentInfo::CNode> children;
-    CleanupResetAndDestroyPushL(children);
-    
-    // If there is any child for the current node, call this method with that child object.
-    // Continue this (recursively) until we get the leaf node in the embedded tree (with no children)
-    // and add the resultant node as one of the children and pass it to create the parent node further.
-    TInt count = aNativeComponentInfo.iChildren.Count();
-    for (TInt i = 0; i < count; ++i)
-        {
-        Usif::CComponentInfo::CNode* node = MapToComponentInfoL(*aNativeComponentInfo.iChildren[i]);
-        CleanupStack::PushL(node);
-        children.AppendL(node);
-        CleanupStack::Pop(node);
-        }
-        
-    // Create the CNode object using the appropriate parameters.
-    // children for leaf nodes (bottom most nodes in the embedded tree) will be null.
-    Usif::CComponentInfo::CNode* node = Usif::CComponentInfo::CNode::NewLC(
-                                        Usif::KSoftwareTypeNative(),
-                                        *(aNativeComponentInfo.iComponentName), 
-                                        *(aNativeComponentInfo.iVersion),
-                                        *(aNativeComponentInfo.iVendor),
-                                        static_cast<Usif::TScomoState>(aNativeComponentInfo.iScomoState),
-                                        static_cast<Usif::TInstallStatus>(aNativeComponentInfo.iInstallStatus),
-                                        aNativeComponentInfo.iComponentId,
-                                        *(aNativeComponentInfo.iGlobalComponentId),
-                                        static_cast<Usif::TAuthenticity>(aNativeComponentInfo.iAuthenticity),
-                                        aNativeComponentInfo.iUserGrantableCaps,
-                                        aNativeComponentInfo.iMaxInstalledSize,
-                                        aNativeComponentInfo.iHasExe,
-                                        &children);
-    CleanupStack::Pop(node);
-    CleanupStack::Pop(&children);
-    children.Close();
-    return (node);
-    }
+	{
+	// Create the array to store the children nodes.
+	RPointerArray<Usif::CComponentInfo::CNode> children;
+	CleanupResetAndDestroyPushL(children);
+	
+	// If there is any child for the current node, call this method with that child object.
+	// Continue this (recursively) until we get the leaf node in the embedded tree (with no children)
+	// and add the resultant node as one of the children and pass it to create the parent node further.
+	TInt count = aNativeComponentInfo.iChildren.Count();
+	for (TInt i = 0; i < count; ++i)
+		{
+		Usif::CComponentInfo::CNode* node = MapToComponentInfoL(*aNativeComponentInfo.iChildren[i]);
+		CleanupStack::PushL(node);
+		children.AppendL(node);
+		CleanupStack::Pop(node);
+		}		
+	
+	RPointerArray<Usif::CComponentInfo::CApplicationInfo> applicationInfo;	
+	CleanupResetAndDestroyPushL(applicationInfo);
+	MapToApplicationInfoL(aNativeComponentInfo.iApplications, applicationInfo);	
+	// Create the CNode object using the appropriate parameters.
+	// children for leaf nodes (bottom most nodes in the embedded tree) will be null.
+	Usif::CComponentInfo::CNode* node = Usif::CComponentInfo::CNode::NewLC(
+										Usif::KSoftwareTypeNative(),
+										*(aNativeComponentInfo.iComponentName), 
+										*(aNativeComponentInfo.iVersion),
+										*(aNativeComponentInfo.iVendor),
+										static_cast<Usif::TScomoState>(aNativeComponentInfo.iScomoState),
+										static_cast<Usif::TInstallStatus>(aNativeComponentInfo.iInstallStatus),
+										aNativeComponentInfo.iComponentId,
+										*(aNativeComponentInfo.iGlobalComponentId),
+										static_cast<Usif::TAuthenticity>(aNativeComponentInfo.iAuthenticity),
+										aNativeComponentInfo.iUserGrantableCaps,
+										aNativeComponentInfo.iMaxInstalledSize,
+										aNativeComponentInfo.iHasExe,
+										aNativeComponentInfo.iIsDriveSelectionRequired,
+										&applicationInfo,
+										&children);
+	CleanupStack::Pop(node);	
+	CleanupStack::Pop(&applicationInfo);
+	applicationInfo.Close();
+	CleanupStack::Pop(&children);
+	children.Close();
+	return (node);
+	}
 #endif
-
-
-void LogSwiErrorsToFileL(TInt aErrorCode, const TDesC& aAppName)
-    {
-    _LIT(KErrorString, "%S : Failed with %d");
-    _LIT(KLogFile, "c:\\data\\swilog.log");
-    
-    //Format Output string
-    HBufC* outputString = HBufC::NewLC(aAppName.Length()+ 30);
-    outputString->Des().Format(KErrorString, &aAppName, aErrorCode);
-    
-	//Maximum number of log file entries.
-    const TUint KLogFileSize = 10;
-    
-    RFs fs;
-    User::LeaveIfError(fs.Connect());
-    CleanupClosePushL(fs);
-    
-    RFile logFile;
-    TInt err = logFile.Open(fs, KLogFile, EFileWrite);
-    if(err != KErrNone)
-        {
-		//Attempt to create the file.
-        err = logFile.Create(fs, KLogFile, EFileWrite);
-        User::LeaveIfError(err);
-        }
-    CleanupClosePushL(logFile);   
-    
-
-	//Read the entire log file.
-    RPointerArray<HBufC> linesArray;
-    CleanupResetAndDestroyPushL(linesArray);
-    
-    TFileText logFileManipulator;
-    logFileManipulator.Set(logFile);
-
-    TBuf<200>buffer;
-    err = logFileManipulator.Read(buffer);
-    TInt count(0);
-    while(err == KErrNone && ++count <= KLogFileSize)
-        {
-		HBufC* line = buffer.AllocLC();
-        linesArray.AppendL(line);
-		CleanupStack::Pop(line);
-        err = logFileManipulator.Read(buffer);   
-        }
-    
-	// If the log file contains less than KLogFileSize entries,
-	// write the new log entry.
-    if(count < KLogFileSize)
-        {
-        logFileManipulator.Seek(ESeekEnd);
-        logFileManipulator.Write(*outputString);
-        }
-    else
-        {
-		// Contains KLogFileSize entries. 
-		// Replicate the last KLogFileSize - 1 entries and add the
-		// new log at the end.
-        logFile.Close();
-        logFile.Replace(fs, KLogFile, EFileWrite);
-        logFileManipulator.Set(logFile);
-        for(TInt i = linesArray.Count()- KLogFileSize +1; i<linesArray.Count(); ++i )
-            {
-            logFileManipulator.Write(*linesArray[i]);
-            }
-
-		// New Entry.
-        logFileManipulator.Write(*outputString);   
-        }
-    logFile.Close();
-    CleanupStack::PopAndDestroy(4, outputString);    
-    }
 } // namespace Swi
--- a/installationservices/swi/source/sishelper/uissclienthandler.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sishelper/uissclienthandler.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -28,10 +28,7 @@
 #include "swi/msisuihandlers.h"
 #include "swi/launcher.h"
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-namespace Usif
-	{
-	class CComponentInfo;
-	}
+#include <usif/sif/sifcommon.h>
 #include "swi/nativecomponentinfo.h"
 #endif
 
@@ -166,7 +163,6 @@
 	MUiHandler& iUiHandler;        ///< UI implementation
 	MCancelHandler* iCancelHandler;///< Internal cancel handler
 	HBufC8* iBuf;                  ///< Command buffer
-	HBufC8* iBufLogger;            ///< Command buffer
 	TPtr8 iPtrIntoBuf;
 	RUissSession iUissSession;     ///< UISS session
 
@@ -187,7 +183,7 @@
 	void AllocCompInfoBufL(TInt aBufSize);
 	void ConstructCompInfoFromBufferL();
 	Usif::CComponentInfo::CNode* MapToComponentInfoL(CNativeComponentInfo& aNativeComponentInfo);
-	
+	void MapToApplicationInfoL(RCPointerArray<Swi::CNativeComponentInfo::CNativeApplicationInfo>& aNativeApplicationsInfo, RPointerArray<Usif::CComponentInfo::CApplicationInfo>& aApplicationsInfo);
 	HBufC8* iCompInfoBuffer;		//< Component Information storage buffer
 	TPtr8   iCompInfoBufPtr;
 	
--- a/installationservices/swi/source/sislauncher/client/sislauncherclient.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sislauncher/client/sislauncherclient.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -29,326 +29,501 @@
 #include "sislauncherclientserver.h"
 #include "sisregistryfiledescription.h"
 #include "secutils.h"
-
 #include "arrayutils.h"  // from source/sisregistry/common/ 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include "swtypereginfo.h"
+#include "ipcutil.h"
 #endif
 
 using namespace Swi;
 
 static TInt StartSisLauncherServer()
-	{
-	const TUidType serverUid(KNullUid, KNullUid, KServerUid3);
-	RProcess server;
-	TInt err = server.Create(KSisLauncherServerImg, KNullDesC, serverUid);
-	if (err != KErrNone)
-		{
-		return err;
-		}
-	TRequestStatus stat;
-	server.Rendezvous(stat);
-	if (stat != KRequestPending)
-		{
-		server.Kill(0);		// abort startup
-		}
-	else
-		{
-		server.Resume();	// logon OK - start the server
-		}
-	User::WaitForRequest(stat);		// wait for start or death
-	// we can't use the 'exit reason' if the server panicked as this
-	// is the panic 'reason' and may be '0' which cannot be distinguished
-	// from KErrNone
-	err = (server.ExitType() == EExitPanic) ? KErrGeneral : stat.Int();
-	server.Close();
-	return err;
-	}
+    {
+    const TUidType serverUid(KNullUid, KNullUid, KServerUid3);
+    RProcess server;
+    TInt err = server.Create(KSisLauncherServerImg, KNullDesC, serverUid);
+    if (err != KErrNone)
+        {
+        return err;
+        }
+    TRequestStatus stat;
+    server.Rendezvous(stat);
+    if (stat != KRequestPending)
+        {
+        server.Kill(0);     // abort startup
+        }
+    else
+        {
+        server.Resume();    // logon OK - start the server
+        }
+    User::WaitForRequest(stat);     // wait for start or death
+    // we can't use the 'exit reason' if the server panicked as this
+    // is the panic 'reason' and may be '0' which cannot be distinguished
+    // from KErrNone
+    err = (server.ExitType() == EExitPanic) ? KErrGeneral : stat.Int();
+    server.Close();
+    return err;
+    }
 
 EXPORT_C TInt RSisLauncherSession::Connect()
 //
 // Connect to the server, attempting to start it if necessary
 //
-	{
-	TInt retry=2;
-	for (;;)
-		{
-		TInt err = CreateSession(KSisLauncherServerName, TVersion(0, 0, 0), 1);
-		if (err != KErrNotFound && err != KErrServerTerminated)
-			{
-			return err;
-			}
-		if (--retry==0)
-			{
-			return err;
-			}
-		err = StartSisLauncherServer();
-		if (err != KErrNone && err != KErrAlreadyExists)
-			{
-			return err;
-			}
-		}
-	}
-
+    {
+	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+    iBuffForLanguages = NULL;
+	#endif
+    
+    TInt retry=2;
+    for (;;)
+        {
+        TInt err = CreateSession(KSisLauncherServerName, TVersion(0, 0, 0), 1);
+        if (err != KErrNotFound && err != KErrServerTerminated)
+            {
+            return err;
+            }
+        if (--retry==0)
+            {
+            return err;
+            }
+        err = StartSisLauncherServer();
+        if (err != KErrNone && err != KErrAlreadyExists)
+            {
+            return err;
+            }
+        }    
+    }
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+EXPORT_C void RSisLauncherSession::Close()
+    {	
+    if (iBuffForLanguages)
+        {
+        delete iBuffForLanguages;
+        iBuffForLanguages = NULL;
+        }
+	    
+    RSessionBase::Close();
+    }
+#endif
 EXPORT_C void RSisLauncherSession::RunExecutableL(const TDesC& aFileName, TBool aWait)
-	{
-	TPckgC<TBool> wait(aWait);
-	User::LeaveIfError(SendReceive(ERunExecutable, TIpcArgs(&aFileName, &wait)));
-	}
+    {
+    TPckgC<TBool> wait(aWait);
+    User::LeaveIfError(SendReceive(ERunExecutable, TIpcArgs(&aFileName, &wait)));
+    }
 
 EXPORT_C void RSisLauncherSession::StartDocumentL(RFile& aFile, TBool aWait)
-	{
-	TPckgC<TBool> wait(aWait);
-	TIpcArgs ipcArgs;
-	aFile.TransferToServer(ipcArgs, 0, 1);
-	ipcArgs.Set(2, &wait);
-	User::LeaveIfError(SendReceive(EStartDocumentByHandle, ipcArgs));
-	}
+    {
+    TPckgC<TBool> wait(aWait);
+    TIpcArgs ipcArgs;
+    aFile.TransferToServer(ipcArgs, 0, 1);
+    ipcArgs.Set(2, &wait);
+    User::LeaveIfError(SendReceive(EStartDocumentByHandle, ipcArgs));
+    }
 
 EXPORT_C void RSisLauncherSession::StartByMimeL(RFile& aFile, const TDesC8& aMimeType, TBool aWait)
-	{
-	TPckgC<TBool> wait(aWait);
-	TIpcArgs ipcArgs;
-	aFile.TransferToServer(ipcArgs, 0, 1);
-	ipcArgs.Set(2, &aMimeType);
-	ipcArgs.Set(3, &wait);
-	
-	User::LeaveIfError(SendReceive(EStartByMimeByHandle, ipcArgs));
-	}
+    {
+    TPckgC<TBool> wait(aWait);
+    TIpcArgs ipcArgs;
+    aFile.TransferToServer(ipcArgs, 0, 1);
+    ipcArgs.Set(2, &aMimeType);
+    ipcArgs.Set(3, &wait);
+    
+    User::LeaveIfError(SendReceive(EStartByMimeByHandle, ipcArgs));
+    }
 
 EXPORT_C void RSisLauncherSession::StartDocumentL(const TDesC& aFileName, TBool aWait)
-	{
-	TPckgC<TBool> wait(aWait);
-	User::LeaveIfError(SendReceive(EStartDocument, TIpcArgs(&aFileName, &wait)));
-	}
+    {
+    TPckgC<TBool> wait(aWait);
+    User::LeaveIfError(SendReceive(EStartDocument, TIpcArgs(&aFileName, &wait)));
+    }
 
 EXPORT_C void RSisLauncherSession::StartByMimeL(const TDesC& aFileName, const TDesC8& aMimeType, TBool aWait)
-	{
-	TPckgC<TBool> wait(aWait);
-	User::LeaveIfError(SendReceive(EStartByMime, TIpcArgs(&aFileName, &aMimeType, &wait)));
-	}
+    {
+    TPckgC<TBool> wait(aWait);
+    User::LeaveIfError(SendReceive(EStartByMime, TIpcArgs(&aFileName, &aMimeType, &wait)));
+    }
 
 EXPORT_C void RSisLauncherSession::ShutdownAllL()
-	{
-	User::LeaveIfError(SendReceive(EShutdownAll));
-	}
+    {
+    User::LeaveIfError(SendReceive(EShutdownAll));
+    }
 
 EXPORT_C void RSisLauncherSession::CheckApplicationInUseL(RArray<TAppInUse>& aUidList)
-	{
-	TInt uidCount=aUidList.Count();
-	if (uidCount)
-		{
-		HBufC8* appInUseBuf=HBufC8::NewLC(uidCount * sizeof(TAppInUse));
-		TPtr8 appInUsePtr=appInUseBuf->Des();
-		TUint8* dataPtr(NULL);
-		TInt i;
-		for (i = 0 ; i < uidCount ; ++i)
-			{
-			dataPtr=reinterpret_cast<TUint8*>(&aUidList[i]);
-			appInUsePtr.Append(dataPtr, sizeof(TAppInUse));			
-			}	
-		User::LeaveIfError((SendReceive(ECheckApplicationInUse, TIpcArgs(&appInUsePtr))));
+    {
+    TInt uidCount=aUidList.Count();
+    if (uidCount)
+        {
+        HBufC8* appInUseBuf=HBufC8::NewLC(uidCount * sizeof(TAppInUse));
+        TPtr8 appInUsePtr=appInUseBuf->Des();
+        TUint8* dataPtr(NULL);
+        TInt i;
+        for (i = 0 ; i < uidCount ; ++i)
+            {
+            dataPtr=reinterpret_cast<TUint8*>(&aUidList[i]);
+            appInUsePtr.Append(dataPtr, sizeof(TAppInUse));         
+            }   
+        User::LeaveIfError((SendReceive(ECheckApplicationInUse, TIpcArgs(&appInUsePtr))));
 
-		//Copy the result back to the RArray
-		dataPtr=const_cast<TUint8*>(appInUsePtr.Ptr());
-		TAppInUse* appInUseDataPtr=reinterpret_cast<TAppInUse*>(dataPtr);
-		for (i = 0; i < uidCount; ++i)
-			{
-			aUidList[i]=appInUseDataPtr[i];	
-			}				
-			
-		CleanupStack::PopAndDestroy(appInUseBuf);				
-		}
-	}
-	
+        //Copy the result back to the RArray
+        dataPtr=const_cast<TUint8*>(appInUsePtr.Ptr());
+        TAppInUse* appInUseDataPtr=reinterpret_cast<TAppInUse*>(dataPtr);
+        for (i = 0; i < uidCount; ++i)
+            {
+            aUidList[i]=appInUseDataPtr[i]; 
+            }               
+            
+        CleanupStack::PopAndDestroy(appInUseBuf);               
+        }
+    }
+    
 EXPORT_C void RSisLauncherSession::ShutdownL(const RArray<TUid>& aUidList, TInt aTimeout)
-	{
-	TInt uidCount=aUidList.Count();
-	if (uidCount)	
-		{
-		HBufC8* tUidBuf=HBufC8::NewLC(uidCount * sizeof(TUid));
-		TPtr8 tUidBufPtr=tUidBuf->Des();
-		const TUint8* dataPtr(NULL);
-		
-		for (TInt i=0;i<uidCount;i++)
-			{
-			dataPtr=reinterpret_cast<const TUint8*>(&aUidList[i]);
-			tUidBufPtr.Append(dataPtr, sizeof(TUid));
-			}	
-		User::LeaveIfError((SendReceive(EShutdown, TIpcArgs(&tUidBufPtr, aTimeout))));		
-		CleanupStack::PopAndDestroy(tUidBuf);							
-		}
-	}
+    {
+    TInt uidCount=aUidList.Count();
+    if (uidCount)   
+        {
+        HBufC8* tUidBuf=HBufC8::NewLC(uidCount * sizeof(TUid));
+        TPtr8 tUidBufPtr=tUidBuf->Des();
+        const TUint8* dataPtr(NULL);
+        
+        for (TInt i=0;i<uidCount;i++)
+            {
+            dataPtr=reinterpret_cast<const TUint8*>(&aUidList[i]);
+            tUidBufPtr.Append(dataPtr, sizeof(TUid));
+            }   
+        User::LeaveIfError((SendReceive(EShutdown, TIpcArgs(&tUidBufPtr, aTimeout))));      
+        CleanupStack::PopAndDestroy(tUidBuf);                           
+        }
+    }
 
 EXPORT_C void RSisLauncherSession::NotifyNewAppsL(const RPointerArray<TDesC>& aFiles)
-	{
-	if (aFiles.Count() > 0)
-		{
-		CBufFlat* tmpBuf = CBufFlat::NewL(255);
-		CleanupStack::PushL(tmpBuf);
-			
-		RBufWriteStream stream(*tmpBuf);
-		CleanupClosePushL(stream);
+    {
+    if (aFiles.Count() > 0)
+        {
+        CBufFlat* tmpBuf = CBufFlat::NewL(255);
+        CleanupStack::PushL(tmpBuf);
+            
+        RBufWriteStream stream(*tmpBuf);
+        CleanupClosePushL(stream);
 
-		ExternalizePointerArrayL(aFiles, stream);
+        ExternalizePointerArrayL(aFiles, stream);
 
-		// Create an HBufC8 from the stream buf's length, and copy 
-		// the stream buffer into this descriptor
-		HBufC8* buffer = HBufC8::NewLC(tmpBuf->Size());
-		TPtr8 ptr(buffer->Des());
-		tmpBuf->Read(0, ptr, tmpBuf->Size());
-	
-		User::LeaveIfError(SendReceive(ENotifyNewApps, TIpcArgs(&ptr)));
-		CleanupStack::PopAndDestroy(3, tmpBuf);
-		}
-	}
+        // Create an HBufC8 from the stream buf's length, and copy 
+        // the stream buffer into this descriptor
+        HBufC8* buffer = HBufC8::NewLC(tmpBuf->Size());
+        TPtr8 ptr(buffer->Des());
+        tmpBuf->Read(0, ptr, tmpBuf->Size());
+    
+        User::LeaveIfError(SendReceive(ENotifyNewApps, TIpcArgs(&ptr)));
+        CleanupStack::PopAndDestroy(3, tmpBuf);
+        }
+    }
 
 EXPORT_C void RSisLauncherSession::RunAfterEcomNotificationL(const RPointerArray<CSisRegistryFileDescription>& aFileList)
-	{
-	TInt count = aFileList.Count();
-	if (count <= 0)
-		{
-		return; 
-		}
+    {
+    TInt count = aFileList.Count();
+    if (count <= 0)
+        {
+        return; 
+        }
 
-	RFs fs;
-	User::LeaveIfError(fs.Connect());
-	CleanupClosePushL(fs);
-	User::LeaveIfError(fs.ShareProtected());
+    RFs fs;
+    User::LeaveIfError(fs.Connect());
+    CleanupClosePushL(fs);
+    User::LeaveIfError(fs.ShareProtected());
 
-	for (TInt i = 0; i < count; ++i)
-		{
-		CSisRegistryFileDescription* fileDes = aFileList[i];
+    for (TInt i = 0; i < count; ++i)
+        {
+        CSisRegistryFileDescription* fileDes = aFileList[i];
 
-		// open the file entry
-		TEntry entry;
-		if (fs.Entry(fileDes->Target(), entry) != KErrNone)
-			{
-			// just ignore, there's nothing we can do and we should try to process the
-			// remaining files.
-			continue;
-			}
-		
-		TIpcArgs ipcArgs;
-		TBool waitEnd = 0 != (fileDes->OperationOptions() & Sis::EInstFileRunOptionWaitEnd);
-		TPckgC<TBool> wait(waitEnd);
-		ipcArgs.Set(2, &wait);
+        // open the file entry
+        TEntry entry;
+        if (fs.Entry(fileDes->Target(), entry) != KErrNone)
+            {
+            // just ignore, there's nothing we can do and we should try to process the
+            // remaining files.
+            continue;
+            }
+        
+        TIpcArgs ipcArgs;
+        TBool waitEnd = 0 != (fileDes->OperationOptions() & Sis::EInstFileRunOptionWaitEnd);
+        TPckgC<TBool> wait(waitEnd);
+        ipcArgs.Set(2, &wait);
 
-		TInt err = KErrNone;
+        TInt err = KErrNone;
 
-		if (entry.IsTypeValid() && SecUtils::IsExe(entry))
-			{
-			ipcArgs.Set(0,&fileDes->Target());
-			err = SendReceive(EQueueRunExecutable, ipcArgs);
-			}
-		else 
-			{
-			RFile file;
-			CleanupClosePushL(file);
-			err = file.Open(fs, fileDes->Target(), EFileShareExclusive|EFileWrite);
+        if (entry.IsTypeValid() && SecUtils::IsExe(entry))
+            {
+            ipcArgs.Set(0,&fileDes->Target());
+            err = SendReceive(EQueueRunExecutable, ipcArgs);
+            }
+        else 
+            {
+            RFile file;
+            CleanupClosePushL(file);
+            err = file.Open(fs, fileDes->Target(), EFileShareExclusive|EFileWrite);
 
-			HBufC8* mimeType = 0;
+            HBufC8* mimeType = 0;
 
-			if (err == KErrNone)
-				{
-				if (fileDes->OperationOptions() & Sis::EInstFileRunOptionByMimeType)
-					{
-					mimeType = HBufC8::NewLC(fileDes->MimeType().Length());
-					TPtr8 ptr = mimeType->Des();
-					ptr.Copy(fileDes->MimeType());
-					}
+            if (err == KErrNone)
+                {
+                if (fileDes->OperationOptions() & Sis::EInstFileRunOptionByMimeType)
+                    {
+                    mimeType = HBufC8::NewLC(fileDes->MimeType().Length());
+                    TPtr8 ptr = mimeType->Des();
+                    ptr.Copy(fileDes->MimeType());
+                    }
 
-				if (file.TransferToServer(ipcArgs, 0, 1) != KErrNone)
-					{
-					// best effort is to continue with remaining exes
-					}	
-				else if (mimeType != 0)
-					{
-					TPtrC8 x = mimeType->Des();
-					ipcArgs.Set(3, &x);
-					err = SendReceive(EQueueStartByMimeByHandle, ipcArgs);
-					}
-				else
-					{
-					err = SendReceive(EQueueStartDocumentByHandle, ipcArgs);
-					}
-				if (mimeType != 0)
-					{
-					CleanupStack::PopAndDestroy(mimeType);
-					}
-				}
-			CleanupStack::PopAndDestroy(&file); 
-			}
-		// best effort is to continue with other exes in the event of an error
-		// so do nothing here.
-		}
-	CleanupStack::PopAndDestroy(&fs);
-	User::LeaveIfError(SendReceive(EExecuteQueue));
-	
-	}
+                if (file.TransferToServer(ipcArgs, 0, 1) != KErrNone)
+                    {
+                    // best effort is to continue with remaining exes
+                    }   
+                else if (mimeType != 0)
+                    {
+                    TPtrC8 x = mimeType->Des();
+                    ipcArgs.Set(3, &x);
+                    err = SendReceive(EQueueStartByMimeByHandle, ipcArgs);
+                    }
+                else
+                    {
+                    err = SendReceive(EQueueStartDocumentByHandle, ipcArgs);
+                    }
+                if (mimeType != 0)
+                    {
+                    CleanupStack::PopAndDestroy(mimeType);
+                    }
+                }
+            CleanupStack::PopAndDestroy(&file); 
+            }
+        // best effort is to continue with other exes in the event of an error
+        // so do nothing here.
+        }
+    CleanupStack::PopAndDestroy(&fs);
+    User::LeaveIfError(SendReceive(EExecuteQueue));
+    
+    }
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-EXPORT_C void RSisLauncherSession::ParseSwTypeRegFileL(RFile& aFile, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
-	{
-	// Pack the file handle
-	TIpcArgs ipcArgs;
-	aFile.TransferToServer(ipcArgs, 0, 1);
+EXPORT_C void RSisLauncherSession::ParseSwTypeRegFileL(RFile& aFile, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
+    {
+    // Pack the file handle
+    TIpcArgs ipcArgs;
+    aFile.TransferToServer(ipcArgs, 0, 1);
 
-	// Allocate a buffer for the parsed registration info
-	TInt bufLen = 0;
-	User::LeaveIfError(aFile.Size(bufLen));
-	HBufC8* buf = HBufC8::NewLC(bufLen); // using the size of the file here is overhead but provides very simple code
-	
-	// Packe the buffer
-	TPtr8 bufPtr(buf->Des());
-	ipcArgs.Set(2, &bufPtr);
-	
-	// Send request to the server
-	User::LeaveIfError(SendReceive(EParseSwTypeRegFile, ipcArgs));
+    // Allocate a buffer for the parsed registration info
+    TInt bufLen = 0;
+    User::LeaveIfError(aFile.Size(bufLen));
+    HBufC8* buf = HBufC8::NewLC(bufLen); // using the size of the file here is overhead but provides very simple code
+    
+    // Packe the buffer
+    TPtr8 bufPtr(buf->Des());
+    ipcArgs.Set(2, &bufPtr);
+    
+    // Send request to the server
+    User::LeaveIfError(SendReceive(EParseSwTypeRegFile, ipcArgs));
 
-	// Unpack the parsed registration info
-	RDesReadStream rs(*buf);
-	CleanupClosePushL(rs);
-	SoftwareTypeRegInfoUtils::UnserializeArrayL(rs, aSwTypeRegInfoArray);
+    // Unpack the parsed registration info
+    RDesReadStream rs(*buf);
+    CleanupClosePushL(rs);
+    SoftwareTypeRegInfoUtils::UnserializeArrayL(rs, aSwTypeRegInfoArray);
 
-	CleanupStack::PopAndDestroy(2, buf); // rs
-	}
+    CleanupStack::PopAndDestroy(2, buf); // rs
+    }
 
 EXPORT_C void RSisLauncherSession::RegisterSifLauncherMimeTypesL(const RPointerArray<HBufC8>& aMimeTypes)
-	{
-	RegisterSifLauncherMimeTypesImplL(aMimeTypes, ETrue);
-	}
+    {
+    RegisterSifLauncherMimeTypesImplL(aMimeTypes, ETrue);
+    }
 
 EXPORT_C void RSisLauncherSession::UnregisterSifLauncherMimeTypesL(const RPointerArray<HBufC8>& aMimeTypes)
-	{
-	RegisterSifLauncherMimeTypesImplL(aMimeTypes, EFalse);
-	}
+    {
+    RegisterSifLauncherMimeTypesImplL(aMimeTypes, EFalse);
+    }
 
 void RSisLauncherSession::RegisterSifLauncherMimeTypesImplL(const RPointerArray<HBufC8>& aMimeTypes, TBool aRegister)
-	{
-	// Calculate the size of aMimeTypes in a buffer
-	TInt bufLen = sizeof(TInt);
-	for (TInt i=0; i<aMimeTypes.Count(); ++i)
+    {
+    // Calculate the size of aMimeTypes in a buffer
+    TInt bufLen = sizeof(TInt);
+    for (TInt i=0; i<aMimeTypes.Count(); ++i)
+        {
+        bufLen += sizeof(TInt) + aMimeTypes[i]->Size();
+        }
+    
+    // Externalize MIME types
+    HBufC8* buf = HBufC8::NewLC(bufLen);
+    TPtr8 bufPtr(buf->Des());
+
+    RDesWriteStream ws(bufPtr);
+    CleanupClosePushL(ws);
+    
+    ExternalizePointerArrayL(aMimeTypes, ws);
+
+    ws.CommitL();
+    CleanupStack::PopAndDestroy(&ws);
+
+    // Send MIME types to the server
+    TIpcArgs ipcArgs(&bufPtr);
+    User::LeaveIfError(SendReceive(aRegister?ERegisterSifLauncherMimeTypes:EUnregisterSifLauncherMimeTypes, ipcArgs));
+
+    CleanupStack::PopAndDestroy(buf);
+    }
+    
+EXPORT_C void  RSisLauncherSession::AsyncParseResourceFileSizeL(const RFile& aRegistrationFile, const RArray<TLanguage>& aAppLanguages, TRequestStatus& aStatus)
+    {
+    TInt langCount = aAppLanguages.Count();
+    const TInt maxBufSize= sizeof(TInt) + langCount*sizeof(TLanguage);   // Size(Number of entries) + (Number of entries)*(Size of Language Id)
+   
+    // Allocate buffer for the array
+    if (iBuffForLanguages)
+        {
+        delete iBuffForLanguages;
+        iBuffForLanguages = NULL;
+        }
+    iBuffForLanguages = HBufC8::NewMaxL(maxBufSize);
+    TPtr8 ptrBufForLanguages = iBuffForLanguages->Des();
+
+    RDesWriteStream ins(ptrBufForLanguages);
+    CleanupClosePushL(ins);
+    ins.WriteInt32L(langCount);
+    for (TInt i = 0; i < langCount; ++i)
+        {
+        ins.WriteInt32L((TInt)(aAppLanguages[i]));
+        }
+       
+    ins.CommitL();
+    CleanupStack::PopAndDestroy(&ins);
+    
+    TIpcArgs args;
+    aRegistrationFile.TransferToServer(args, 0, 1);
+    args.Set(2,&ptrBufForLanguages);
+    SendReceive(EAsyncParseResourceFileSize, args, aStatus);    
+    }
+    
+EXPORT_C Usif::CApplicationRegistrationData*  RSisLauncherSession::AsyncParseResourceFileDataL(TInt aDataSize)
+    {
+    HBufC8* appRegData=HBufC8::NewMaxLC(aDataSize);
+    TPtr8 appRegDataDes = appRegData->Des();
+    TInt err=SendReceive(EAsyncParseResourceFileData, TIpcArgs(&appRegDataDes ));        
+    User::LeaveIfError(err);
+    
+    Usif::CApplicationRegistrationData* applicationData= Usif::CApplicationRegistrationData::NewLC();
+    // Got the buffer, internalise the arrays
+    RDesReadStream readStream(*appRegData);
+    CleanupClosePushL(readStream);    
+    applicationData->InternalizeL(readStream);
+    CleanupStack::PopAndDestroy(&readStream); 
+    CleanupStack::Pop(applicationData);
+    CleanupStack::PopAndDestroy(appRegData);
+	if (iBuffForLanguages)
 		{
-		bufLen += sizeof(TInt) + aMimeTypes[i]->Size();
+		delete iBuffForLanguages;
+		iBuffForLanguages = NULL;
 		}
-	
-	// Externalize MIME types
-	HBufC8* buf = HBufC8::NewLC(bufLen);
-	TPtr8 bufPtr(buf->Des());
+	return applicationData;
+    }
+
+EXPORT_C Usif::CApplicationRegistrationData* RSisLauncherSession::SyncParseResourceFileL(const RFile& aRegistrationFile, const RArray<TLanguage>& aAppLanguages)
+    {
+	// Get the size of data
+    TRequestStatus status;
+    AsyncParseResourceFileSizeL (aRegistrationFile , aAppLanguages , status );
+    User::WaitForRequest(status);
+    TInt size = status.Int(); 
+    if (size < KErrNone)
+        {
+        User::LeaveIfError(status.Int());
+        return NULL;
+        }
 
-	RDesWriteStream ws(bufPtr);
-	CleanupClosePushL(ws);
-	
-	ExternalizePointerArrayL(aMimeTypes, ws);
+	// Return the app reg data
+    Usif::CApplicationRegistrationData* appRegData = AsyncParseResourceFileDataL(size);
+    return appRegData;
+    }
+
+
+EXPORT_C void RSisLauncherSession::NotifyNewAppsL(const RPointerArray<Usif::CApplicationRegistrationData>& aAppRegData)
+    {
+    if (aAppRegData.Count() > 0)
+        {
+        TInt bufLen = sizeof(TInt);
+        const TInt appCount = aAppRegData.Count();
+        for (TInt i=0; i<appCount; ++i)
+            {
+			bufLen += GetObjectSizeL(aAppRegData[i]);
+            }
+
+        HBufC8* buffer = HBufC8::NewLC(bufLen);
+        TPtr8 bufPtr(buffer->Des());
 
-	ws.CommitL();
-	CleanupStack::PopAndDestroy(&ws);
+        RDesWriteStream ws(bufPtr);
+        CleanupClosePushL(ws);
+
+        ws.WriteInt32L(appCount);
+        for (TInt i=0; i<appCount; ++i)
+            {
+            const Usif::CApplicationRegistrationData& info = *aAppRegData[i];
+            ws << info;
+            }
+        ws.CommitL();
+        CleanupStack::PopAndDestroy(&ws);
+        
+        TIpcArgs ipcArgs(&bufPtr);
+        User::LeaveIfError(SendReceive(ENotifyNewAppsData, ipcArgs));
+
+        CleanupStack::PopAndDestroy(buffer);
+        }
+    }
+
 
-	// Send MIME types to the server
-	TIpcArgs ipcArgs(&bufPtr);
-	User::LeaveIfError(SendReceive(aRegister?ERegisterSifLauncherMimeTypes:EUnregisterSifLauncherMimeTypes, ipcArgs));
+EXPORT_C void RSisLauncherSession::NotifyNewAppsL(const RArray<TAppUpdateInfo>& aAppUpdateInfo)
+    {
+    TInt bufLen = sizeof(TInt);
+    const TInt appCount = aAppUpdateInfo.Count();
+    for (TInt i=0; i<appCount; ++i)
+        {
+        bufLen += GetObjectSizeL(&aAppUpdateInfo[i]);
+        }
+
+    HBufC8* buffer = HBufC8::NewLC(bufLen);
+    TPtr8 bufPtr(buffer->Des());
+
+    RDesWriteStream ws(bufPtr);
+    CleanupClosePushL(ws);
+
+    ws.WriteInt32L(appCount);
+    for (TInt i=0; i<appCount; ++i)
+        {
+        const TAppUpdateInfo& info = aAppUpdateInfo[i];
+        ws << info;
+        }
+    ws.CommitL();
+    CleanupStack::PopAndDestroy(&ws);
+    
+    TIpcArgs ipcArgs(&bufPtr);
+    User::LeaveIfError(SendReceive(ENotifyApparcForApps, ipcArgs));
 
-	CleanupStack::PopAndDestroy(buf);
-	}
+    CleanupStack::PopAndDestroy(buffer);
+    }
+
+EXPORT_C TAppUpdateInfo::TAppUpdateInfo()
+    {    
+    }
+
+EXPORT_C TAppUpdateInfo::TAppUpdateInfo(TUid aAppUid, InstallActions aAction)
+    {
+    iAppUid = aAppUid;
+    iAction = aAction;
+    }
+
+EXPORT_C void TAppUpdateInfo::InternalizeL(RReadStream& aReadStream)
+    {
+    iAppUid = TUid::Uid(aReadStream.ReadUint32L());
+    iAction = (Swi::InstallActions)aReadStream.ReadUint32L();
+    }
+
+EXPORT_C void TAppUpdateInfo::ExternalizeL(RWriteStream& aWriteStream) const
+    {
+    aWriteStream.WriteUint32L(iAppUid.iUid);
+    aWriteStream.WriteInt32L(iAction);
+    }
+
 #endif
--- a/installationservices/swi/source/sislauncher/common/sislauncherclientserver.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sislauncher/common/sislauncherclientserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -47,8 +47,19 @@
 	EQueueStartByMimeByHandle,
 	EExecuteQueue,
 	EKillQueue,
-	EParseSwTypeRegFile,
+	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	//Function Id's to be accessed by Installserver
+	EParseSwTypeRegFile = 30,
 	ERegisterSifLauncherMimeTypes,
-	EUnregisterSifLauncherMimeTypes,
+	ENotifyNewAppsData,                                                     //Notify Apparc about application data
+	//Function Id's to be accessed by SisRegistryServer
+	EUnregisterSifLauncherMimeTypes = 60,
+	//Function Id's to be accessed by Installserver and SisRegistryServer
+	ENotifyApparcForApps = 90,                                              //Notify Apparc about updated applications
+	//Function Id's to be accessed by all clients
+    EAsyncParseResourceFileSize = 120,                                      //Parse registration resource file, Async Function
+    EAsyncParseResourceFileData,                                            //Return parsed resource data
+    #endif
 	ESeparatorEndAll	
+   
 	};
--- a/installationservices/swi/source/sislauncher/server/sislauncherserver.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sislauncher/server/sislauncherserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -34,10 +34,10 @@
 #include "queueprocessor.h"
 
 #ifndef SWI_TEXTSHELL_ROM
-	#include <apmstd.h>
-	#include <apgcli.h>
-	#include <apgwgnam.h>
-	#include <apgtask.h>
+    #include <apmstd.h>
+    #include <apgcli.h>
+    #include <apgwgnam.h>
+    #include <apgtask.h>
 #endif
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
@@ -48,75 +48,75 @@
 using namespace Swi;
 
 CServer2* CSisLauncherServer::NewLC()
-	{
-	CSisLauncherServer* self=new(ELeave) CSisLauncherServer;
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	return self;
-	}
+    {
+    CSisLauncherServer* self=new(ELeave) CSisLauncherServer;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
 
 CSisLauncherServer::~CSisLauncherServer()
-	{
+    {
 #ifndef SWI_TEXTSHELL_ROM
-	if (iBootMode != KTextShell)
-		{
-		iWsSession.Close();	
-		}
+    if (iBootMode != KTextShell)
+        {
+        iWsSession.Close(); 
+        }
 #endif
-	delete iShutdown;
-	delete iQueueProcessor;
-	CSecurityPolicy::ReleaseResource();
-	}
+    delete iShutdown;
+    delete iQueueProcessor;
+    CSecurityPolicy::ReleaseResource();
+    }
 
 void CSisLauncherServer::ConstructL()
-	{
-	StartL(KSisLauncherServerName);
-	iShutdown = new (ELeave) CSisLauncherServerShutdown;
-	iShutdown->ConstructL();
-	TInt connectErr = KErrNotFound;
+    {
+    StartL(KSisLauncherServerName);
+    iShutdown = new (ELeave) CSisLauncherServerShutdown;
+    iShutdown->ConstructL();
+    TInt connectErr = KErrNotFound;
 #ifndef SWI_TEXTSHELL_ROM
-	// Connect to Window Session
-	connectErr = iWsSession.Connect();
-	if (connectErr != KErrNotFound)
-		{
-		User::LeaveIfError(connectErr);
-		}
+    // Connect to Window Session
+    connectErr = iWsSession.Connect();
+    if (connectErr != KErrNotFound)
+        {
+        User::LeaveIfError(connectErr);
+        }
 #endif
-	if (connectErr == KErrNotFound)
-		{
-		// emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
-		iBootMode = KTextShell;
-		}
-	iQueueProcessor = CQueueProcessor::NewL(*this);
-	}
+    if (connectErr == KErrNotFound)
+        {
+        // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
+        iBootMode = KTextShell;
+        }
+    iQueueProcessor = CQueueProcessor::NewL(*this);
+    }
 
 CSession2* CSisLauncherServer::NewSessionL(const TVersion&,const RMessage2&) const
-	{
-	return new(ELeave) CSisLauncherSession();
-	}
+    {
+    return new(ELeave) CSisLauncherSession();
+    }
 
 void CSisLauncherServer::AddSession()
-	{
-	++iSessionCount;
-	
-	DEBUG_PRINTF2(_L8("Sis Launcher Server - Adding Session (%d sessions total.)"), iSessionCount);
-	
-	CancelShutdown();	
-	}
+    {
+    ++iSessionCount;
+    
+    DEBUG_PRINTF2(_L8("Sis Launcher Server - Adding Session (%d sessions total.)"), iSessionCount);
+    
+    CancelShutdown();   
+    }
 
 void CSisLauncherServer::DropSession()
-	{
-	--iSessionCount;
-	
-	DEBUG_PRINTF2(_L8("Sis Launcher Server - Dropping Session (%d sessions total.)"), iSessionCount);
-	
-	if (0==iSessionCount && iShutdown)
-		{
-		DEBUG_PRINTF(_L8("Sis Launcher Server - Starting shutdown timer."));
-		// ignored if a long timer is active
-		iShutdown->StartShort(EFalse);
-		} 
-	}
+    {
+    --iSessionCount;
+    
+    DEBUG_PRINTF2(_L8("Sis Launcher Server - Dropping Session (%d sessions total.)"), iSessionCount);
+    
+    if (0==iSessionCount && iShutdown)
+        {
+        DEBUG_PRINTF(_L8("Sis Launcher Server - Starting shutdown timer."));
+        // ignored if a long timer is active
+        iShutdown->StartShort(EFalse);
+        } 
+    }
 /**
  * Cancels an existing shutdown timer before renabling with the long timeout. This is used to catch
  * the case where we need to allow ECOM to work before killing the server. ECOM should finish scanning 
@@ -125,434 +125,465 @@
  * resource file, we don't want to hang around forever waiting for an event that never comes.
  * */
 void CSisLauncherServer::LongServerShutdown()
-	{
-	DEBUG_PRINTF(_L8("Sis Launcher Server - Switching to long shutdown timer"));
-	if (iShutdown)
-		{
-		iShutdown->StartLong();
-		}
-	}
+    {
+    DEBUG_PRINTF(_L8("Sis Launcher Server - Switching to long shutdown timer"));
+    if (iShutdown)
+        {
+        iShutdown->StartLong();
+        }
+    }
 
 void CSisLauncherServer::CancelShutdown()
-	{
-	DEBUG_PRINTF(_L8("Sis Launcher Server - Cancelling shutdown timer"));
-		
-	if (iShutdown)
-		{
-		iShutdown->Cancel();
-		}	
-	}
+    {
+    DEBUG_PRINTF(_L8("Sis Launcher Server - Cancelling shutdown timer"));
+        
+    if (iShutdown)
+        {
+        iShutdown->Cancel();
+        }   
+    }
 
 void CSisLauncherServer::ShortServerShutdown()
-	{
-	DEBUG_PRINTF(_L8("Sis Launcher Server - Re-enabling short shutdown timer"));
-	if (0==iSessionCount && iShutdown)
-		{
-		DEBUG_PRINTF(_L8("Sis Launcher Server - Starting shutdown timer"));
-		iShutdown->StartShort(ETrue);
-		} 
-	}
+    {
+    DEBUG_PRINTF(_L8("Sis Launcher Server - Re-enabling short shutdown timer"));
+    if (0==iSessionCount && iShutdown)
+        {
+        DEBUG_PRINTF(_L8("Sis Launcher Server - Starting shutdown timer"));
+        iShutdown->StartShort(ETrue);
+        } 
+    }
 
-	// All functions require TCB capability
 const TInt CSisLauncherServer::iRanges[iRangeCount] = 
-	{
-	0, // All connect attempts
+    {
+    0, // All connect attempts
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	// Range of utility services for Post manufacture management of Layered Execution Environemnts
-	EParseSwTypeRegFile,
-	EUnregisterSifLauncherMimeTypes,
+    EParseSwTypeRegFile,                                // accessible by Installserver 
+    EUnregisterSifLauncherMimeTypes,                    // accessible by SisRegistryServer
+    ENotifyApparcForApps,                               // accessible by Installserver and SisRegistry
+    EAsyncParseResourceFileSize,                        // accessible by all clients
 #endif
-	ESeparatorEndAll,
-	};
+    ESeparatorEndAll,
+    };
 
 const TUint8 CSisLauncherServer::iElementsIndex[iRangeCount] = 
-	{
-	0, // Used by Client which is only swis and TCB is needed.
+    {
+    0, // Used by Client which is only swis and TCB is needed.
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	1, // Utility services used by InstallServer
-	2, // Utility services used by SisRegistryServer
-#endif
-	CPolicyServer::ENotSupported,
-	};
+    1, // Utility services used by InstallServer
+    2, // Utility services used by SisRegistryServer
+    CPolicyServer::ECustomCheck,
+    CPolicyServer::EAlwaysPass,
+#endif  
+    CPolicyServer::ENotSupported,
+    };
 
 const CPolicyServer::TPolicyElement CSisLauncherServer::iPolicyElements[] = 
-	{
-	{_INIT_SECURITY_POLICY_C1(ECapabilityTCB), CPolicyServer::EFailClient},
+    {
+    {_INIT_SECURITY_POLICY_C1(ECapabilityTCB), CPolicyServer::EFailClient},
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	{_INIT_SECURITY_POLICY_S0(KInstallServerUid), CPolicyServer::EFailClient},
-	{_INIT_SECURITY_POLICY_S0(KSisRegistryServerUid), CPolicyServer::EFailClient},
+    {_INIT_SECURITY_POLICY_S0(KInstallServerUid), CPolicyServer::EFailClient},
+    {_INIT_SECURITY_POLICY_S0(KSisRegistryServerUid), CPolicyServer::EFailClient},  
 #endif
-	};
+    };
 
 const CPolicyServer::TPolicy CSisLauncherServer::iPolicy =
-	{
-	0,					//specifies all connect attempts need TCB
-	iRangeCount,
-	iRanges,
-	iElementsIndex,
-	iPolicyElements,
-	};
-	
-	
+    {
+    0,                  //specifies all connect attempts need TCB
+    iRangeCount,
+    iRanges,
+    iElementsIndex,
+    iPolicyElements,
+    };
+    
+    
 // shutdown timer
 
 CSisLauncherServerShutdown::~CSisLauncherServerShutdown()
-	{
-	Cancel();
-	}
+    {
+    Cancel();
+    }
 
 void CSisLauncherServerShutdown::RunL()
-	{
-	CActiveScheduler::Stop();
-	}
-	
+    {
+    CActiveScheduler::Stop();
+    }
+    
 void CSisLauncherServerShutdown::StartShort(TBool aCancelLongTimer)
-	{
-	if (iLongTimerActive & !aCancelLongTimer)
-		{
-		return;
-		}
-	else
-		{
-		Cancel();
-		iLongTimerActive=EFalse;
-		After(KSisLauncherShutdownDelay);
-		}
-	}
+    {
+    if (iLongTimerActive & !aCancelLongTimer)
+        {
+        return;
+        }
+    else
+        {
+        Cancel();
+        iLongTimerActive=EFalse;
+        After(KSisLauncherShutdownDelay);
+        }
+    }
 
 inline void CSisLauncherServerShutdown::StartLong()
-	{
-	Cancel();
-	iLongTimerActive=ETrue;
-	After(KSisLauncherLongShutdownDelay);
-	}
+    {
+    Cancel();
+    iLongTimerActive=ETrue;
+    After(KSisLauncherLongShutdownDelay);
+    }
 
 
 void CSisLauncherServer::RunExecutableL(const TDesC& aFileName, TBool aWait)
-	{
-	DEBUG_CODE_SECTION(
-		if (aWait)
-			{
-			DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to run executable by filename ('%S'), waiting for termination."),
-				&aFileName);
-			}
-		else
-			{
-			DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to run executable by filename ('%S'), not waiting for termination."),
-				&aFileName);
-			}
-	); // DEBUG_CODE_SECTION
-	
-	RProcess process;
-	_LIT(KNullArgs, "");
-	User::LeaveIfError(process.Create(aFileName, KNullArgs));
-	CleanupClosePushL(process);
-	
-	// Get the thread id of the main thread in the process
-	// From CApaExeRecognizer::RunL	
-	TFullName fullName(process.Name());
-	_LIT(KCCMain,"::Main");
-	fullName.Append(KCCMain);
-	TFindThread fT(fullName);
-	User::LeaveIfError(fT.Next(fullName));
-	RThread thread;
-	User::LeaveIfError(thread.Open(fT));
-	TThreadId threadId = thread.Id();
-	thread.Close();
-	process.Resume();
-	
-	CleanupStack::PopAndDestroy(&process);
-	if (aWait)
-		HandleShutdownL(threadId, ETrue);
-	}
-
-
+    {
+    DEBUG_CODE_SECTION(
+        if (aWait)
+            {
+            DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to run executable by filename ('%S'), waiting for termination."),
+                &aFileName);
+            }
+        else
+            {
+            DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to run executable by filename ('%S'), not waiting for termination."),
+                &aFileName);
+            }
+    ); // DEBUG_CODE_SECTION
+    
+    RProcess process;
+    _LIT(KNullArgs, "");
+    User::LeaveIfError(process.Create(aFileName, KNullArgs));
+    CleanupClosePushL(process);
+    
+    // Get the thread id of the main thread in the process
+    // From CApaExeRecognizer::RunL 
+    TFullName fullName(process.Name());
+    _LIT(KCCMain,"::Main");
+    fullName.Append(KCCMain);
+    TFindThread fT(fullName);
+    User::LeaveIfError(fT.Next(fullName));
+    RThread thread;
+    User::LeaveIfError(thread.Open(fT));
+    TThreadId threadId = thread.Id();
+    thread.Close();
+    process.Resume();
+    
+    CleanupStack::PopAndDestroy(&process);
+    if (aWait)
+        HandleShutdownL(threadId, ETrue);
+    }
 
 void CSisLauncherServer::ForceShutdownL(TUid aUid)
-	{
-	TBool needToScanFullList;
-	TFullName fullName;
-	do
-		{
-		needToScanFullList = EFalse;
-		TFindProcess findProcess;
+    {
+    TBool needToScanFullList;
+    TFullName fullName;
+    do
+        {
+        needToScanFullList = EFalse;
+        TFindProcess findProcess;
 
-		while(findProcess.Next(fullName) == KErrNone)
-			{
-			RProcess process;
-			User::LeaveIfError(process.Open(findProcess));
-			TUid sid(process.SecureId());
-			if (sid == aUid && process.ExitType() == EExitPending)
-				{
-				process.Kill(KErrNone);
-				needToScanFullList = ETrue;
-				}
-			process.Close();
-			}
-		} while (needToScanFullList);
-	}
+        while(findProcess.Next(fullName) == KErrNone)
+            {
+            RProcess process;
+            User::LeaveIfError(process.Open(findProcess));
+            TUid sid(process.SecureId());
+            if (sid == aUid && process.ExitType() == EExitPending)
+                {
+                process.Kill(KErrNone);
+                needToScanFullList = ETrue;
+                }
+            process.Close();
+            }
+        } while (needToScanFullList);
+    }
 
 
 void CSisLauncherServer::HandleShutdownL(TThreadId aThread, TBool aKillOnTimeout)
-	{
-	RWsSession* wsSession = NULL;
-	if (iBootMode == KTextShell) 
-		{
-		// emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
-		DEBUG_PRINTF(_L8("Sis Launcher Server - textshell - skipping shutdown of user applications"));	
-		}
-	else
-		{
-		#ifndef SWI_TEXTSHELL_ROM
-			DEBUG_CODE_SECTION(
-				if (aKillOnTimeout)
-					{
-					DEBUG_PRINTF(_L8("Sis Launcher Server - Awaiting thread shutdown, will forcibly kill process on timeout."));
-					}
-				else
-					{
-					DEBUG_PRINTF(_L8("Sis Launcher Server - Awaiting thread shutdown, will not forcibly kill process on timeout."));
-					}
-				);
-			wsSession = &iWsSession;	
-		#endif
-		}
-	// Read timeout value from software install security
-	// policy.
-	CSecurityPolicy* secPolicy = CSecurityPolicy::GetSecurityPolicyL();
-	TInt runWaitTimeout = secPolicy->RunWaitTimeout();
-	TInt shutdownTimeout = secPolicy->ApplicationShutdownTimeout();
-	// Wait until the thread finishes or a timeout occurs
-	CThreadMonitor* threadMonitor = CThreadMonitor::NewLC(aThread, wsSession);
-	threadMonitor->SyncShutdownL(runWaitTimeout, aKillOnTimeout, shutdownTimeout);
-	CleanupStack::PopAndDestroy(threadMonitor);
-	}
+    {
+    RWsSession* wsSession = NULL;
+    if (iBootMode == KTextShell) 
+        {
+        // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
+        DEBUG_PRINTF(_L8("Sis Launcher Server - textshell - skipping shutdown of user applications"));  
+        }
+    else
+        {
+        #ifndef SWI_TEXTSHELL_ROM
+            DEBUG_CODE_SECTION(
+                if (aKillOnTimeout)
+                    {
+                    DEBUG_PRINTF(_L8("Sis Launcher Server - Awaiting thread shutdown, will forcibly kill process on timeout."));
+                    }
+                else
+                    {
+                    DEBUG_PRINTF(_L8("Sis Launcher Server - Awaiting thread shutdown, will not forcibly kill process on timeout."));
+                    }
+                );
+            wsSession = &iWsSession;    
+        #endif
+        }
+    // Read timeout value from software install security
+    // policy.
+    CSecurityPolicy* secPolicy = CSecurityPolicy::GetSecurityPolicyL();
+    TInt runWaitTimeout = secPolicy->RunWaitTimeout();
+    TInt shutdownTimeout = secPolicy->ApplicationShutdownTimeout();
+    // Wait until the thread finishes or a timeout occurs
+    CThreadMonitor* threadMonitor = CThreadMonitor::NewLC(aThread, wsSession);
+    threadMonitor->SyncShutdownL(runWaitTimeout, aKillOnTimeout, shutdownTimeout);
+    CleanupStack::PopAndDestroy(threadMonitor);
+    }
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+CPolicyServer::TCustomResult CSisLauncherServer::CustomSecurityCheckL(const RMessage2& aMsg, 
+    TInt& /*aAction*/, TSecurityInfo& /*aMissing*/)
+    {
+    TUint32 secureId = aMsg.SecureId().iId;
+    if (secureId == KInstallServerUid || secureId == KSisRegistryServerUid)
+        {
+        return CPolicyServer::EPass;
+        }
+    else
+        {
+        //client accessing the function is neither Install Server nor Sis Registry
+        return CPolicyServer::EFail;
+        }
+    }
+#endif
 
 #ifndef SWI_TEXTSHELL_ROM
 void CSisLauncherServer::StartDocumentL(RFile& aFile, TBool aWait)
-	{
-	DEBUG_CODE_SECTION(
-	if (aWait)
-		{
-		DEBUG_PRINTF(_L8("Sis Launcher Server - Attempting to start document by filehandle, waiting for termination."));
-		}
-	else
-		{
-		DEBUG_PRINTF(_L8("Sis Launcher Server - Attempting to start document by filehandle, not waiting for termination."));
-		}
-	);
+    {
+    DEBUG_CODE_SECTION(
+    if (aWait)
+        {
+        DEBUG_PRINTF(_L8("Sis Launcher Server - Attempting to start document by filehandle, waiting for termination."));
+        }
+    else
+        {
+        DEBUG_PRINTF(_L8("Sis Launcher Server - Attempting to start document by filehandle, not waiting for termination."));
+        }
+    );
 
-	RApaLsSession apaSession;
-	User::LeaveIfError(apaSession.Connect());
-	CleanupClosePushL(apaSession);
+    RApaLsSession apaSession;
+    User::LeaveIfError(apaSession.Connect());
+    CleanupClosePushL(apaSession);
 
-	TThreadId threadId;	
-	User::LeaveIfError(apaSession.StartDocument(aFile, threadId));
+    TThreadId threadId; 
+    User::LeaveIfError(apaSession.StartDocument(aFile, threadId));
 
-	CleanupStack::PopAndDestroy(&apaSession);
-	if (aWait)
-		HandleShutdownL(threadId);
-	}
+    CleanupStack::PopAndDestroy(&apaSession);
+    if (aWait)
+        HandleShutdownL(threadId);
+    }
 
 void CSisLauncherServer::StartByMimeL(RFile& aFile, TDesC8& aMimeType, TBool aWait)
-	{
-	DEBUG_CODE_SECTION(
-	if (aWait)
-		{
-		DEBUG_PRINTF2(_L8("Sis Launcher Server - Attempting to start document by mimetype '%S' (filehandle supplied), waiting for termination."),
-			&aMimeType);
-		}
-	else
-		{
-		DEBUG_PRINTF2(_L8("Sis Launcher Server - Attempting to start document by mimetype '%S' (filehandle supplied), not waiting for termination."),
-			&aMimeType);
-		}
-	);
+    {
+    DEBUG_CODE_SECTION(
+    if (aWait)
+        {
+        DEBUG_PRINTF2(_L8("Sis Launcher Server - Attempting to start document by mimetype '%S' (filehandle supplied), waiting for termination."),
+            &aMimeType);
+        }
+    else
+        {
+        DEBUG_PRINTF2(_L8("Sis Launcher Server - Attempting to start document by mimetype '%S' (filehandle supplied), not waiting for termination."),
+            &aMimeType);
+        }
+    );
 
-	RApaLsSession apaSession;
-	User::LeaveIfError(apaSession.Connect());
-	CleanupClosePushL(apaSession);
+    RApaLsSession apaSession;
+    User::LeaveIfError(apaSession.Connect());
+    CleanupClosePushL(apaSession);
 
-	TThreadId threadId;
-	TDataType dataType = TDataType(aMimeType);	
-	User::LeaveIfError(apaSession.StartDocument(aFile, dataType, threadId));
+    TThreadId threadId;
+    TDataType dataType = TDataType(aMimeType);  
+    User::LeaveIfError(apaSession.StartDocument(aFile, dataType, threadId));
 
-	CleanupStack::PopAndDestroy(&apaSession);
-	if (aWait)
-		HandleShutdownL(threadId);
-	}
-	
+    CleanupStack::PopAndDestroy(&apaSession);
+    if (aWait)
+        HandleShutdownL(threadId);
+    }
+    
 void CSisLauncherServer::StartDocumentL(const TDesC& aFileName, TBool aWait)
-	{
-	DEBUG_CODE_SECTION(
-	if (aWait)
-		{
-		DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to start document by filename '%S', waiting for termination."),
-			&aFileName);
-		}
-	else
-		{
-		DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to start document by filename '%S', not waiting for termination."),
-			&aFileName);
-		}
-	);
+    {
+    DEBUG_CODE_SECTION(
+    if (aWait)
+        {
+        DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to start document by filename '%S', waiting for termination."),
+            &aFileName);
+        }
+    else
+        {
+        DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to start document by filename '%S', not waiting for termination."),
+            &aFileName);
+        }
+    );
 
-	RApaLsSession apaSession;
-	User::LeaveIfError(apaSession.Connect());
-	CleanupClosePushL(apaSession);
+    RApaLsSession apaSession;
+    User::LeaveIfError(apaSession.Connect());
+    CleanupClosePushL(apaSession);
 
-	TThreadId threadId;
-	User::LeaveIfError(apaSession.StartDocument(aFileName, threadId));
+    TThreadId threadId;
+    User::LeaveIfError(apaSession.StartDocument(aFileName, threadId));
 
-	CleanupStack::PopAndDestroy(&apaSession);
-	if (aWait)
-		HandleShutdownL(threadId);
-	}
+    CleanupStack::PopAndDestroy(&apaSession);
+    if (aWait)
+        HandleShutdownL(threadId);
+    }
 
 void CSisLauncherServer::StartByMimeL(const TDesC& aFileName, TDesC8& aMimeType, TBool aWait)
-	{
-	DEBUG_CODE_SECTION(
-	if (aWait)
-		{
-		DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to start document by filename '%S', waiting for termination."),
-			&aFileName);
-		}
-	else
-		{
-		DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to start document by filename '%S', not waiting for termination."),
-			&aFileName);
-		}
-	);
-	DEBUG_PRINTF2(_L8("Sis Launcher Server - Supplied MIME type is '%S'."), &aMimeType);	
+    {
+    DEBUG_CODE_SECTION(
+    if (aWait)
+        {
+        DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to start document by filename '%S', waiting for termination."),
+            &aFileName);
+        }
+    else
+        {
+        DEBUG_PRINTF2(_L("Sis Launcher Server - Attempting to start document by filename '%S', not waiting for termination."),
+            &aFileName);
+        }
+    );
+    DEBUG_PRINTF2(_L8("Sis Launcher Server - Supplied MIME type is '%S'."), &aMimeType);    
 
-	RApaLsSession apaSession;
-	User::LeaveIfError(apaSession.Connect());
-	CleanupClosePushL(apaSession);
+    RApaLsSession apaSession;
+    User::LeaveIfError(apaSession.Connect());
+    CleanupClosePushL(apaSession);
 
-	TThreadId threadId;
-	TDataType dataType = TDataType(aMimeType);
-	User::LeaveIfError(apaSession.StartDocument(aFileName, dataType, threadId));
+    TThreadId threadId;
+    TDataType dataType = TDataType(aMimeType);
+    User::LeaveIfError(apaSession.StartDocument(aFileName, dataType, threadId));
 
-	CleanupStack::PopAndDestroy(&apaSession);
-	if (aWait)
-		HandleShutdownL(threadId);
-	}
+    CleanupStack::PopAndDestroy(&apaSession);
+    if (aWait)
+        HandleShutdownL(threadId);
+    }
 
 void CSisLauncherServer::ShutdownL(TUid aUid, TInt aTimeout)
-	{
-	// This method shuts down running exes matching the SID provided in aUid.
-	// It first attempts a graceful shutdown, killing processes if a graceful
-	// shutdown is not supported or fails to work within aTimeout microseconds.
+    {
+    // This method shuts down running exes matching the SID provided in aUid.
+    // It first attempts a graceful shutdown, killing processes if a graceful
+    // shutdown is not supported or fails to work within aTimeout microseconds.
 
-	DEBUG_PRINTF2(_L8("Sis Launcher Server - Attempting to kill process with SID: 0x%08x."),
-		aUid.iUid);
+    DEBUG_PRINTF2(_L8("Sis Launcher Server - Attempting to kill process with SID: 0x%08x."),
+        aUid.iUid);
 
-	TInt wgId=0;
+    TInt wgId=0;
 
-	CApaWindowGroupName* wgName = CApaWindowGroupName::NewL(iWsSession);
-	CleanupStack::PushL(wgName);
-	CApaWindowGroupName::FindByAppUid(aUid, iWsSession, wgId);
-	
-	while (wgId != KErrNotFound)
-		{	
-		wgName->ConstructFromWgIdL(wgId);
-		if(wgName->RespondsToShutdownEvent())
-			{
-			TApaTask task(iWsSession);
-			task.SetWgId(wgId);
+    CApaWindowGroupName* wgName = CApaWindowGroupName::NewL(iWsSession);
+    CleanupStack::PushL(wgName);
+    CApaWindowGroupName::FindByAppUid(aUid, iWsSession, wgId);
+    
+    while (wgId != KErrNotFound)
+        {   
+        wgName->ConstructFromWgIdL(wgId);
+        if(wgName->RespondsToShutdownEvent())
+            {
+            TApaTask task(iWsSession);
+            task.SetWgId(wgId);
 
-			RThread thread;
-			User::LeaveIfError(thread.Open(task.ThreadId()));
-			CleanupClosePushL(thread);
-			
-			RProcess process;
-			User::LeaveIfError(thread.Process(process));
-			CleanupClosePushL(process);
+            RThread thread;
+            User::LeaveIfError(thread.Open(task.ThreadId()));
+            CleanupClosePushL(thread);
+            
+            RProcess process;
+            User::LeaveIfError(thread.Process(process));
+            CleanupClosePushL(process);
 
-			TRequestStatus processStatus;
-			process.Logon(processStatus);
-			
-			task.SendSystemEvent(EApaSystemEventShutdown);
+            TRequestStatus processStatus;
+            process.Logon(processStatus);
+            
+            task.SendSystemEvent(EApaSystemEventShutdown);
 
-			RTimer timer;
-			CleanupClosePushL(timer);
-			TRequestStatus timerStatus;
-			timer.CreateLocal();
-			timer.After(timerStatus, aTimeout);
+            RTimer timer;
+            CleanupClosePushL(timer);
+            TRequestStatus timerStatus;
+            timer.CreateLocal();
+            timer.After(timerStatus, aTimeout);
 
-			User::WaitForRequest(processStatus,timerStatus);
+            User::WaitForRequest(processStatus,timerStatus);
 
-			if (processStatus==KRequestPending)
-				{
-				// Failed to terminate gracefully, so kill the task.
-				DEBUG_PRINTF(_L8("Sis Launcher Server - Process did not die before timeout. Forcibly killing it."));
-				process.Kill(KErrNone);
-				}
-			else if (timerStatus==KRequestPending)
-				{
-				// Rendezvous completed so cancel timer
-				timer.Cancel();
-				}
-			// Handle second request
-			User::WaitForRequest(processStatus,timerStatus);
-			CleanupStack::PopAndDestroy(3, &thread);
-			}
+            if (processStatus==KRequestPending)
+                {
+                // Failed to terminate gracefully, so kill the task.
+                DEBUG_PRINTF(_L8("Sis Launcher Server - Process did not die before timeout. Forcibly killing it."));
+                process.Kill(KErrNone);
+                }
+            else if (timerStatus==KRequestPending)
+                {
+                // Rendezvous completed so cancel timer
+                timer.Cancel();
+                }
+            // Handle second request
+            User::WaitForRequest(processStatus,timerStatus);
+            CleanupStack::PopAndDestroy(3, &thread);
+            }
 
-		// See if there's another instance of this App running.
-		CApaWindowGroupName::FindByAppUid(aUid, iWsSession, wgId);
-		}
-	CleanupStack::PopAndDestroy(wgName);
-	}
+        // See if there's another instance of this App running.
+        CApaWindowGroupName::FindByAppUid(aUid, iWsSession, wgId);
+        }
+    CleanupStack::PopAndDestroy(wgName);
+    }
 
 void CSisLauncherServer::ShutdownL()
-	{
-	TInt wgId=0;
+    {
+    TInt wgId=0;
     
-	CApaWindowGroupName* wgName = CApaWindowGroupName::NewL(iWsSession);
-	CleanupStack::PushL(wgName);
-	TBuf<1> matchAny;
-	matchAny.Append(KMatchAny);
-	CApaWindowGroupName::FindByCaption(matchAny, iWsSession, wgId);
-	while (wgId != KErrNotFound)
-		{
-		wgName->ConstructFromWgIdL(wgId);
-		//DEF057706 - shut down hidden apps during uninstallation if
-		// SH flag is specified
-		if (!wgName->IsSystem() /* && !wgName->Hidden() */)
-			{
-			// leave if we cannot shutdown the app because its busy
-			if(!wgName->IsBusy())
-				{
-				TApaTask task(iWsSession);
-				task.SetWgId(wgId);
-				// show shutdown dialog for this app?
-				task.SendSystemEvent(EApaSystemEventShutdown);
-				}
-			else
-				{
-				// could not shutdown an app
-				User::Leave(KErrInUse);
-				}
-			}
-	
-		// get next app to shutdown
-		CApaWindowGroupName::FindByCaption(matchAny, iWsSession, wgId);
-		}
-	CleanupStack::PopAndDestroy(wgName);
-	}
+    CApaWindowGroupName* wgName = CApaWindowGroupName::NewL(iWsSession);
+    CleanupStack::PushL(wgName);
+    TBuf<1> matchAny;
+    matchAny.Append(KMatchAny);
+    CApaWindowGroupName::FindByCaption(matchAny, iWsSession, wgId);
+    while (wgId != KErrNotFound)
+        {
+        wgName->ConstructFromWgIdL(wgId);
+        //DEF057706 - shut down hidden apps during uninstallation if
+        // SH flag is specified
+        if (!wgName->IsSystem() /* && !wgName->Hidden() */)
+            {
+            // leave if we cannot shutdown the app because its busy
+            if(!wgName->IsBusy())
+                {
+                TApaTask task(iWsSession);
+                task.SetWgId(wgId);
+                // show shutdown dialog for this app?
+                task.SendSystemEvent(EApaSystemEventShutdown);
+                }
+            else
+                {
+                // could not shutdown an app
+                User::Leave(KErrInUse);
+                }
+            }
+    
+        // get next app to shutdown
+        CApaWindowGroupName::FindByCaption(matchAny, iWsSession, wgId);
+        }
+    CleanupStack::PopAndDestroy(wgName);
+    }
 
 void CSisLauncherServer::NotifyNewAppsL(const RPointerArray<TDesC>& aFiles)
-	{
-	RApaLsSession apaSession;
-	User::LeaveIfError(apaSession.Connect());
-	CleanupClosePushL(apaSession);
+    {
+    RApaLsSession apaSession;
+    User::LeaveIfError(apaSession.Connect());
+    CleanupClosePushL(apaSession);
+
+    // UI frameworks advise ignoring the return code
+    apaSession.ForceRegistration(aFiles);
+
+    CleanupStack::PopAndDestroy();
+    }
 
-	// UI frameworks advise ignoring the return code
-	apaSession.ForceRegistration(aFiles);
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+void CSisLauncherServer::NotifyNewAppsL(const RPointerArray<Usif::CApplicationRegistrationData>& aApplicationRegistrationData)
+    {
+    RApaLsSession apaSession;
+    User::LeaveIfError(apaSession.Connect());
+    CleanupClosePushL(apaSession);
 
-	CleanupStack::PopAndDestroy();
-	}
+    // UI frameworks advise ignoring the return code
+    // Proceeding even if force registration fails so that installation is not aborted
+    apaSession.ForceRegistration(aApplicationRegistrationData);
+    CleanupStack::PopAndDestroy();
+    }
+
+#endif
 #endif
 
-	
+    
--- a/installationservices/swi/source/sislauncher/server/sislauncherserver.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sislauncher/server/sislauncherserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -27,7 +27,9 @@
 #include <f32file.h>
 #include <e32property.h>
 #include <e32uid.h>
-
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+#include <usif/scr/appregentries.h>
+#endif
 #ifndef _CSISLAUNCHERSERVER_H_
 #define _CSISLAUNCHERSERVER_H_
 
@@ -91,6 +93,9 @@
 	void ShutdownL();
 	void ShutdownL(TUid aUid, TInt aTimeout); 
 	void NotifyNewAppsL(const RPointerArray<TDesC>& aFiles);
+	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	void NotifyNewAppsL(const RPointerArray<Usif::CApplicationRegistrationData>& aApplicationRegistrationData);
+	#endif
 #endif		
 	void HandleShutdownL(TThreadId aThread, TBool aKillOnTimeout = EFalse);
 	void ForceShutdownL(TUid aUid);
@@ -100,15 +105,16 @@
 	CSisLauncherServer();
 	void ConstructL();
 	CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
-	
 	void LongServerShutdown();
 	void ShortServerShutdown();
 	void CancelShutdown();
-		
+    #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	virtual TCustomResult CustomSecurityCheckL(const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing);
+    #endif	
 	// Server Policies
 	// separate the policies into handled and not handled
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	static const TUint iRangeCount=4;
+	static const TUint iRangeCount=6;
 #else
 	static const TUint iRangeCount=2;
 #endif
--- a/installationservices/swi/source/sislauncher/server/sislaunchersession.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sislauncher/server/sislaunchersession.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -43,6 +43,13 @@
 #include "arrayutils.h"  // from source/sisregistry/common/ 
 #include "log.h"
 #include "queueprocessor.h"
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+#include "apprscparser.h"
+#include "ipcutil.h"
+#include <usif/scr/appregentries.h>
+#include <usif/scr/screntries_platform.h>
+#include "sislauncherclient.h" 
+#endif
 
 namespace Swi 
 {
@@ -57,469 +64,652 @@
 
 template <>
 class TTraits<TDesC>
-	{
+    {
 public:
-	static TDesC* CopyLC(const TDesC& aOther) { return aOther.AllocLC(); }
-	static TDesC* ReadFromStreamLC(RReadStream& aStream) { return HBufC::NewLC(aStream, KMaxTInt); }
-	static void WriteToStreamL(const TDesC& aItem, RWriteStream& aStream) { aStream << aItem; }
-	};
+    static TDesC* CopyLC(const TDesC& aOther) { return aOther.AllocLC(); }
+    static TDesC* ReadFromStreamLC(RReadStream& aStream) { return HBufC::NewLC(aStream, KMaxTInt); }
+    static void WriteToStreamL(const TDesC& aItem, RWriteStream& aStream) { aStream << aItem; }
+    };
 
 CSisLauncherSession::CSisLauncherSession()
-	{
-	}
+    {
+    }
 
 void CSisLauncherSession::CreateL()
-	{
-	Server().AddSession();
-	}
+    {
+    Server().AddSession();
+    }
 
 CSisLauncherSession::~CSisLauncherSession()
-	{
-	Server().DropSession();
-	}
+    {
+    #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+    delete iCurrentAppRegData;
+    #endif
+    Server().DropSession();
+    }
 void CSisLauncherSession::DoRunExecutableL(const RMessage2& aMessage) 
-	{
-	TFileName filename;
-	aMessage.ReadL(0, filename);
+    {
+    TFileName filename;
+    aMessage.ReadL(0, filename);
 
-	TBool wait;
-	TPckg <TBool> waitPckg(wait);
+    TBool wait;
+    TPckg <TBool> waitPckg(wait);
 
-	aMessage.ReadL(1, waitPckg);
-	Server().RunExecutableL(filename, wait);
+    aMessage.ReadL(1, waitPckg);
+    Server().RunExecutableL(filename, wait);
 
-	aMessage.Complete(KErrNone);
-	}
+    aMessage.Complete(KErrNone);
+    }
 
 void CSisLauncherSession::DoStartDocumentL(const RMessage2& aMessage)
-	{
-	TFileName filename;
-	aMessage.ReadL(0, filename);
-	
-	TBool wait;
-	TPckg <TBool> waitPckg(wait);
-	
-	aMessage.ReadL(1, waitPckg);
-	if (Server().BootUpMode() == KTextShell) 
-		{
-		// emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
-		DEBUG_PRINTF2(_L8("Sis Launcher Server - textshell - skipping start document by file handle. wait = %d"), wait);	
-		}
-	else
-		{ 
-		// emulatore running with GUI
-		#ifndef SWI_TEXTSHELL_ROM
-			Server().StartDocumentL(filename, wait);
-		#endif
-		}
+    {
+    TFileName filename;
+    aMessage.ReadL(0, filename);
+    
+    TBool wait;
+    TPckg <TBool> waitPckg(wait);
+    
+    aMessage.ReadL(1, waitPckg);
+    if (Server().BootUpMode() == KTextShell) 
+        {
+        // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
+        DEBUG_PRINTF2(_L8("Sis Launcher Server - textshell - skipping start document by file handle. wait = %d"), wait);    
+        }
+    else
+        { 
+        // emulatore running with GUI
+        #ifndef SWI_TEXTSHELL_ROM
+            Server().StartDocumentL(filename, wait);
+        #endif
+        }
 
-	aMessage.Complete(KErrNone);	
-	}
+    aMessage.Complete(KErrNone);    
+    }
 
 
 void CSisLauncherSession::DoStartDocumentByHandleL(const RMessage2& aMessage)
-	{
-	RFile file;
-	file.AdoptFromClient(aMessage, 0, 1);
-	CleanupClosePushL(file);
+    {
+    RFile file;
+    file.AdoptFromClient(aMessage, 0, 1);
+    CleanupClosePushL(file);
 
-	TBool wait;
-	TPckg <TBool> waitPckg(wait);
+    TBool wait;
+    TPckg <TBool> waitPckg(wait);
 
-	aMessage.ReadL(2, waitPckg);
-	if (Server().BootUpMode() == KTextShell)
-		{
-		// emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
-		DEBUG_PRINTF3(_L8("Sis Launcher Server - textshell - skipping start document %S, wait = %d"),
-				&file, wait);
-		}
-	else
-		{
-		// emulatore running with GUI
+    aMessage.ReadL(2, waitPckg);
+    if (Server().BootUpMode() == KTextShell)
+        {
+        // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
+        DEBUG_PRINTF3(_L8("Sis Launcher Server - textshell - skipping start document %S, wait = %d"),
+                &file, wait);
+        }
+    else
+        {
+        // emulatore running with GUI
 #ifndef SWI_TEXTSHELL_ROM
-		Server().StartDocumentL(file, wait);
+        Server().StartDocumentL(file, wait);
 #endif
-		}
-	CleanupStack::PopAndDestroy(&file);
-	aMessage.Complete(KErrNone);
+        }
+    CleanupStack::PopAndDestroy(&file);
+    aMessage.Complete(KErrNone);
 }
 void CSisLauncherSession::DoStartByMimeL(const RMessage2& aMessage)
-	{
-	TFileName filename;
-	aMessage.ReadL(0, filename);
+    {
+    TFileName filename;
+    aMessage.ReadL(0, filename);
 
-	TInt srcLen = aMessage.GetDesLengthL(1);
+    TInt srcLen = aMessage.GetDesLengthL(1);
 
-	HBufC8* mimeType = HBufC8::NewLC(srcLen);
-	TPtr8 ptr(mimeType->Des());
-	aMessage.ReadL(1, ptr);
+    HBufC8* mimeType = HBufC8::NewLC(srcLen);
+    TPtr8 ptr(mimeType->Des());
+    aMessage.ReadL(1, ptr);
 
-	TBool wait;
-	TPckg <TBool> waitPckg(wait);
-	aMessage.ReadL(2, waitPckg);
-	if (Server().BootUpMode() == KTextShell) 
-		{
-		// emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
-		DEBUG_PRINTF3(_L8("Sis Launcher Server - textshell - skipping start document by file handle mimetype %S, wait = %d"),
-				mimeType, wait);	
-		}
-	else
-		{
-		// emulatore running with GUI
+    TBool wait;
+    TPckg <TBool> waitPckg(wait);
+    aMessage.ReadL(2, waitPckg);
+    if (Server().BootUpMode() == KTextShell) 
+        {
+        // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
+        DEBUG_PRINTF3(_L8("Sis Launcher Server - textshell - skipping start document by file handle mimetype %S, wait = %d"),
+                mimeType, wait);    
+        }
+    else
+        {
+        // emulatore running with GUI
 #ifndef SWI_TEXTSHELL_ROM
-		Server().StartByMimeL(filename, *mimeType, wait);
+        Server().StartByMimeL(filename, *mimeType, wait);
 #endif
-		}		
-	CleanupStack::PopAndDestroy(mimeType);
+        }       
+    CleanupStack::PopAndDestroy(mimeType);
 
-	aMessage.Complete(KErrNone);
-	}
+    aMessage.Complete(KErrNone);
+    }
 void CSisLauncherSession::DoStartByMimeByHandleL(const RMessage2& aMessage)
-	{
-	RFile file;
-	file.AdoptFromClient(aMessage, 0, 1);			
-	CleanupClosePushL(file);
+    {
+    RFile file;
+    file.AdoptFromClient(aMessage, 0, 1);           
+    CleanupClosePushL(file);
 
-	TInt srcLen = aMessage.GetDesLengthL(2);
+    TInt srcLen = aMessage.GetDesLengthL(2);
 
-	HBufC8* mimeType = HBufC8::NewLC(srcLen);
-	TPtr8 ptr(mimeType->Des());
-	aMessage.ReadL(2, ptr);
+    HBufC8* mimeType = HBufC8::NewLC(srcLen);
+    TPtr8 ptr(mimeType->Des());
+    aMessage.ReadL(2, ptr);
 
-	TBool wait;
-	TPckg <TBool> waitPckg(wait);
+    TBool wait;
+    TPckg <TBool> waitPckg(wait);
 
-	aMessage.ReadL(3, waitPckg);
-	if (Server().BootUpMode() == KTextShell) 
-		{
-		// emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
-		DEBUG_PRINTF4(_L("Sis Launcher Server - textshell - skipping launch of document %S, mimetype %s, wait %d"),
-				&file, mimeType, wait);
-		}
-	else
-		{
-		// emulatore running with GUI
+    aMessage.ReadL(3, waitPckg);
+    if (Server().BootUpMode() == KTextShell) 
+        {
+        // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
+        DEBUG_PRINTF4(_L("Sis Launcher Server - textshell - skipping launch of document %S, mimetype %s, wait %d"),
+                &file, mimeType, wait);
+        }
+    else
+        {
+        // emulatore running with GUI
 #ifndef SWI_TEXTSHELL_ROM
-		Server().StartByMimeL(file, *mimeType, wait);
+        Server().StartByMimeL(file, *mimeType, wait);
 #endif
-		}		
-	CleanupStack::PopAndDestroy(mimeType);
-	CleanupStack::PopAndDestroy(&file);
+        }       
+    CleanupStack::PopAndDestroy(mimeType);
+    CleanupStack::PopAndDestroy(&file);
 
-	aMessage.Complete(KErrNone);
+    aMessage.Complete(KErrNone);
 
-	}
+    }
 void CSisLauncherSession::ServiceL(const RMessage2& aMessage)
-	{
-	DEBUG_PRINTF2(_L8("Sis Launcher Server - Servicing Message %d"), aMessage.Function());
-	
-	switch (aMessage.Function())
-		{
-		case ERunExecutable:
-			DoRunExecutableL(aMessage);
-			break;
-		case EStartDocument:
-			DoStartDocumentL(aMessage);			
-			break;
-		case EStartDocumentByHandle:
-			DoStartDocumentByHandleL(aMessage);
-			break;	
-		case EStartByMime:
-			DoStartByMimeL(aMessage);
-			break;
-		case EStartByMimeByHandle:
-			DoStartByMimeByHandleL(aMessage);
-			break;
-		case EShutdown:
-			{
-			TInt srcLen=aMessage.GetDesLengthL(0);
-			
-			HBufC8* uidBuffer = HBufC8::NewLC(srcLen);
-			TPtr8 uidPtr = uidBuffer->Des();
-			aMessage.ReadL(0, uidPtr, 0);
-			
-			TUint8* dataPtr=const_cast<TUint8*>(uidPtr.Ptr());
-			TUid* tUidPtr=reinterpret_cast<TUid*>(dataPtr);
-			TInt8 uidCount=srcLen/sizeof(TUid);
-			TInt shutdownTimeout = aMessage.Int1();
-			if (Server().BootUpMode() == KTextShell) 
-				{
-				// emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
-				DEBUG_PRINTF(_L8("Sis Launcher Server - textshell - skipping graceful shutdown of GUI applications"));
-				}
-			else
-				{
-				// emulatore running with GUI
-				#ifndef SWI_TEXTSHELL_ROM
-					for (TInt i = 0; i < uidCount; i++)
-						{
-						// graceful shutdown
-						Server().ShutdownL(tUidPtr[i], shutdownTimeout);	
-						}
-				#endif
-				}
-			// Having tried graceful shutdown, we need to kill any remaining processes
-			// matching the SID.  Note that killing a process may re-order the list of
-			// remaining processes, so the search must start from the top again.
-			for (TInt i = 0; i < uidCount; i++)
-				{
-				Server().ForceShutdownL(tUidPtr[i]);
-				}			
-			CleanupStack::PopAndDestroy(uidBuffer);
-			aMessage.Complete(KErrNone);
-			
-			break;
-			}
-		case EShutdownAll:
-			{
-			if (Server().BootUpMode() == KTextShell) 
-				{
-				// emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
-				DEBUG_PRINTF(_L8("Sis Launcher Server - textshell - skipping shutdown of user applications"));	
-				}
-			else
-				{
-				// emulatore running with GUI
-				#ifndef SWI_TEXTSHELL_ROM
-				Server().ShutdownL();
-				#endif
-				}
-			aMessage.Complete(KErrNone);
-			break;	
-			}
-		case ECheckApplicationInUse:
-			{
-			TInt srcLen=aMessage.GetDesLengthL(0);
-				
-			HBufC8* appInUseBuffer = HBufC8::NewLC(srcLen);
-			TPtr8 appInUseBufferPtr = appInUseBuffer->Des();	
-			aMessage.ReadL(0, appInUseBufferPtr, 0);
-	 
-			TAppInUse* appInUsePtr = (TAppInUse*) User::AllocL(srcLen);
-			CleanupStack::PushL(appInUsePtr);	
-			Mem::Copy(appInUsePtr, appInUseBufferPtr.Ptr(), srcLen);
+    {
+    DEBUG_PRINTF2(_L8("Sis Launcher Server - Servicing Message %d"), aMessage.Function());
+    
+    switch (aMessage.Function())
+        {
+        case ERunExecutable:
+            DoRunExecutableL(aMessage);
+            break;
+        case EStartDocument:
+            DoStartDocumentL(aMessage);         
+            break;
+        case EStartDocumentByHandle:
+            DoStartDocumentByHandleL(aMessage);
+            break;  
+        case EStartByMime:
+            DoStartByMimeL(aMessage);
+            break;
+        case EStartByMimeByHandle:
+            DoStartByMimeByHandleL(aMessage);
+            break;
+        case EShutdown:
+            {
+            TInt srcLen=aMessage.GetDesLengthL(0);
+            
+            HBufC8* uidBuffer = HBufC8::NewLC(srcLen);
+            TPtr8 uidPtr = uidBuffer->Des();
+            aMessage.ReadL(0, uidPtr, 0);
+            
+            TUint8* dataPtr=const_cast<TUint8*>(uidPtr.Ptr());
+            TUid* tUidPtr=reinterpret_cast<TUid*>(dataPtr);
+            TInt8 uidCount=srcLen/sizeof(TUid);
+            TInt shutdownTimeout = aMessage.Int1();
+            if (Server().BootUpMode() == KTextShell) 
+                {
+                // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
+                DEBUG_PRINTF(_L8("Sis Launcher Server - textshell - skipping graceful shutdown of GUI applications"));
+                }
+            else
+                {
+                // emulatore running with GUI
+                #ifndef SWI_TEXTSHELL_ROM
+                    for (TInt i = 0; i < uidCount; i++)
+                        {
+                        // graceful shutdown
+                        Server().ShutdownL(tUidPtr[i], shutdownTimeout);    
+                        }
+                #endif
+                }
+            // Having tried graceful shutdown, we need to kill any remaining processes
+            // matching the SID.  Note that killing a process may re-order the list of
+            // remaining processes, so the search must start from the top again.
+            for (TInt i = 0; i < uidCount; i++)
+                {
+                Server().ForceShutdownL(tUidPtr[i]);
+                }           
+            CleanupStack::PopAndDestroy(uidBuffer);
+            aMessage.Complete(KErrNone);
+            
+            break;
+            }
+        case EShutdownAll:
+            {
+            if (Server().BootUpMode() == KTextShell) 
+                {
+                // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
+                DEBUG_PRINTF(_L8("Sis Launcher Server - textshell - skipping shutdown of user applications"));  
+                }
+            else
+                {
+                // emulatore running with GUI
+                #ifndef SWI_TEXTSHELL_ROM
+                Server().ShutdownL();
+                #endif
+                }
+            aMessage.Complete(KErrNone);
+            break;  
+            }
+        case ECheckApplicationInUse:
+            {
+            TInt srcLen=aMessage.GetDesLengthL(0);
+                
+            HBufC8* appInUseBuffer = HBufC8::NewLC(srcLen);
+            TPtr8 appInUseBufferPtr = appInUseBuffer->Des();    
+            aMessage.ReadL(0, appInUseBufferPtr, 0);
+     
+            TAppInUse* appInUsePtr = (TAppInUse*) User::AllocL(srcLen);
+            CleanupStack::PushL(appInUsePtr);   
+            Mem::Copy(appInUsePtr, appInUseBufferPtr.Ptr(), srcLen);
  
-			TUint appInUseCount=srcLen/sizeof(TAppInUse);
-			for (TInt i=0;i<appInUseCount;i++)
-				{
-				TRAPD(err, CheckApplicationInUseL(appInUsePtr[i].iAppUid));
-				if (err==KErrInUse)  
-					{
- 					appInUsePtr[i].iInUse=ETrue;
-					}			 
-				}	
-	 
-			TUint8* dataPtr=reinterpret_cast<TUint8*>(appInUsePtr);
- 			const TPtrC8 data(dataPtr, srcLen);	
- 		
- 			//Indicate the client apps in use
- 			aMessage.WriteL(0, data);							
-			aMessage.Complete(KErrNone);
-			CleanupStack::PopAndDestroy(appInUsePtr);
-			CleanupStack::PopAndDestroy(appInUseBuffer); 	
-			break;
-			}
-	    case ENotifyNewApps:
-			{
-			TInt size = aMessage.GetDesLengthL(0);
+            TUint appInUseCount=srcLen/sizeof(TAppInUse);
+            for (TInt i=0;i<appInUseCount;i++)
+                {
+                TRAPD(err, CheckApplicationInUseL(appInUsePtr[i].iAppUid));
+                if (err==KErrInUse)  
+                    {
+                    appInUsePtr[i].iInUse=ETrue;
+                    }            
+                }   
+     
+            TUint8* dataPtr=reinterpret_cast<TUint8*>(appInUsePtr);
+            const TPtrC8 data(dataPtr, srcLen); 
+        
+            //Indicate the client apps in use
+            aMessage.WriteL(0, data);                           
+            aMessage.Complete(KErrNone);
+            CleanupStack::PopAndDestroy(appInUsePtr);
+            CleanupStack::PopAndDestroy(appInUseBuffer);    
+            break;
+            }
+        case ENotifyNewApps:
+            {
+            TInt size = aMessage.GetDesLengthL(0);
 
-			HBufC8* buf = HBufC8::NewLC(size);
-			TPtr8 bufPtr = buf->Des();
-			aMessage.ReadL(0, bufPtr);
-
-			RDesReadStream stream(*buf);
-			RPointerArray<TDesC> files;
-			InternalizePointerArrayL(files, stream);
-			if (Server().BootUpMode() == KTextShell) 
-				{
-				// emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
-				DEBUG_PRINTF(_L8("Sis Launcher Server - textshell - skipping notification of new applications."));
-				}
-			else
-				{
-				// emulatore running with GUI
-				#ifndef SWI_TEXTSHELL_ROM
-				Server().NotifyNewAppsL(files);
-				#endif
-				}
-			files.ResetAndDestroy();
-
-			CleanupStack::PopAndDestroy(buf);
+            HBufC8* buf = HBufC8::NewLC(size);
+            TPtr8 bufPtr = buf->Des();
+            aMessage.ReadL(0, bufPtr);
 
-			aMessage.Complete(KErrNone);
-			break;
-			}
-		case EParseSwTypeRegFile:
-			#ifndef SWI_TEXTSHELL_ROM
-			#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-			ParseSwTypeRegFileL(aMessage);
-			#endif
-			#endif
-			aMessage.Complete(KErrNone);
-			break;
-		case ERegisterSifLauncherMimeTypes:
-			#ifndef SWI_TEXTSHELL_ROM
-			#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-			RegisterSifLauncherMimeTypesL(aMessage);
-			#endif
-			#endif
-			aMessage.Complete(KErrNone);
-			break;
-		case EUnregisterSifLauncherMimeTypes:
-			#ifndef SWI_TEXTSHELL_ROM
-			#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-			UnregisterSifLauncherMimeTypesL(aMessage);
-			#endif
-			#endif
-			aMessage.Complete(KErrNone);
-			break;
-	    case EQueueRunExecutable:
-	    	//fall through
-	    case EQueueStartDocumentByHandle:
-	    	//fall through
-	    case EQueueStartByMimeByHandle:
-	    	Server().RunQueue().AddToQueueL(aMessage);
-	    	aMessage.Complete(KErrNone);
-	    	break;
-	    case EExecuteQueue:
-	    	aMessage.Complete(Server().RunQueue().ExecuteQueue());
-	    	break;
-	    case EKillQueue:
-	    	Server().RunQueue().ResetQueue();
-	    	aMessage.Complete(KErrNone);
-	    	break;
-	    default:
-			{
-			PanicClient(aMessage,EPanicIllegalFunction);
-			break;
-			}
-		}
-	}
+            RDesReadStream stream(*buf);
+            RPointerArray<TDesC> files;
+            InternalizePointerArrayL(files, stream);
+            
+            if (Server().BootUpMode() == KTextShell) 
+                {
+                // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
+                DEBUG_PRINTF(_L8("Sis Launcher Server - TextShell - skipping notification of new applications (ENotifyNewApps)."));
+                }
+            else
+                {
+                // emulatore running with GUI
+                #ifndef SWI_TEXTSHELL_ROM
+                Server().NotifyNewAppsL(files);
+                #endif // SWI_TEXTSHELL_ROM
+                }
+            
+            files.ResetAndDestroy();
+            CleanupStack::PopAndDestroy(buf);
+            
+            aMessage.Complete(KErrNone);
+            break;
+            }
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+        case EParseSwTypeRegFile:
+            #ifndef SWI_TEXTSHELL_ROM
+            ParseSwTypeRegFileL(aMessage);
+            #endif
+            aMessage.Complete(KErrNone);
+            break;
+        case ERegisterSifLauncherMimeTypes:
+            #ifndef SWI_TEXTSHELL_ROM
+            RegisterSifLauncherMimeTypesL(aMessage);
+            #endif
+            aMessage.Complete(KErrNone);
+            break;
+        case EUnregisterSifLauncherMimeTypes:
+            #ifndef SWI_TEXTSHELL_ROM            
+            UnregisterSifLauncherMimeTypesL(aMessage);
+            #endif
+            aMessage.Complete(KErrNone);
+            break;
+        case EAsyncParseResourceFileSize:
+            {
+            TRAPD(err,err = AsyncParseResourceFileSizeL(aMessage));            
+            aMessage.Complete(err);            
+            break;
+            }
+        case EAsyncParseResourceFileData:
+            {
+            TRAPD(err,AsyncParseResourceFileDataL(aMessage));
+            aMessage.Complete(err);
+            break;
+            }
+        case ENotifyNewAppsData:
+            {
+            RIpcReadStream readStream;
+            readStream.Open(aMessage, 0);
+            CleanupClosePushL(readStream);
+
+            RPointerArray<Usif::CApplicationRegistrationData> appRegInfo;
+            CleanupClosePushL(appRegInfo);
+
+            const TInt numElems = readStream.ReadInt32L();
+            for (TInt i=0; i<numElems; ++i)
+                {
+                Usif::CApplicationRegistrationData* info = Usif::CApplicationRegistrationData::NewL(readStream);
+                CleanupStack::PushL(info);
+                appRegInfo.AppendL(info);
+                CleanupStack::Pop(info);
+                }
+
+            if (Server().BootUpMode() == KTextShell) 
+                {
+                // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
+                DEBUG_PRINTF(_L8("Sis Launcher Server - TextShell - Skipping notification of force registered applications."));
+                }
+            else
+                {
+                // emulatore running with GUI
+                #ifndef SWI_TEXTSHELL_ROM
+                Server().NotifyNewAppsL(appRegInfo);
+                #endif // SWI_TEXTSHELL_ROM
+                }
+            appRegInfo.ResetAndDestroy();
+            CleanupStack::PopAndDestroy(2);
+            aMessage.Complete(KErrNone);
+            break;
+            }
+        case ENotifyApparcForApps:
+            {
+            if (Server().BootUpMode() == KTextShell) 
+                {
+                DEBUG_PRINTF(_L8("Sis Launcher Server - TextShell - Skipping notification of applications (ENotifyApparcForApps)."));
+                }
+            else
+                {
+                #ifndef SWI_TEXTSHELL_ROM
+                NotifyApparcForAppsL(aMessage);  
+                #endif
+                }
+            aMessage.Complete(KErrNone);
+            break;
+            }
+#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+        case EQueueRunExecutable:
+            //fall through
+        case EQueueStartDocumentByHandle:
+            //fall through
+        case EQueueStartByMimeByHandle:
+            Server().RunQueue().AddToQueueL(aMessage);
+            aMessage.Complete(KErrNone);
+            break;
+        case EExecuteQueue:
+            aMessage.Complete(Server().RunQueue().ExecuteQueue());
+            break;
+        case EKillQueue:
+            Server().RunQueue().ResetQueue();
+            aMessage.Complete(KErrNone);
+            break;
+        default:
+            {
+            PanicClient(aMessage,EPanicIllegalFunction);
+            break;
+            }
+        }
+    }
 
 
 void CSisLauncherSession::ServiceError(const RMessage2& aMessage,TInt aError)
-	{
-	DEBUG_PRINTF2(_L8("Sis Launcher Server - ServiceL failed with error code %d."), aError);
-	
-	if (aError==KErrBadDescriptor)
-		{
-		PanicClient(aMessage,EPanicBadDescriptor);
-		}
-	CSession2::ServiceError(aMessage,aError);
-	}
+    {
+    DEBUG_PRINTF2(_L8("Sis Launcher Server - ServiceL failed with error code %d."), aError);
+    
+    if (aError==KErrBadDescriptor)
+        {
+        PanicClient(aMessage,EPanicBadDescriptor);
+        }
+    CSession2::ServiceError(aMessage,aError);
+    }
 
 
 void CSisLauncherSession::CheckApplicationInUseL(TUid aUid)
-	{
-	
-	TFindProcess findProcess;
-	TFullName fullName;
+    {
+    
+    TFindProcess findProcess;
+    TFullName fullName;
  
-	while(findProcess.Next(fullName) == KErrNone)
-		{
-		RProcess process;
-		User::LeaveIfError(process.Open(findProcess));
-		TUid sid(process.SecureId());
-		TExitType exitType = process.ExitType();
-		process.Close();
-		if (sid == aUid && exitType == EExitPending)
-					User::Leave(KErrInUse);
-		}
-	}
-
-
+    while(findProcess.Next(fullName) == KErrNone)
+        {
+        RProcess process;
+        User::LeaveIfError(process.Open(findProcess));
+        TUid sid(process.SecureId());
+        TExitType exitType = process.ExitType();
+        process.Close();
+        if (sid == aUid && exitType == EExitPending)
+                    User::Leave(KErrInUse);
+        }
+    }
 
 
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-void CSisLauncherSession::ParseSwTypeRegFileL(const RMessage2& aMessage)
-	{
-	// Unpack the file handle
-	RFile file;
-	User::LeaveIfError(file.AdoptFromClient(aMessage, 0, 1));
-	CleanupClosePushL(file);
-	
-	// Read the registration file
-	TInt fileSize = 0;
-	User::LeaveIfError(file.Size(fileSize));
-	HBufC8* buf = HBufC8::NewLC(fileSize);
-	TPtr8 bufPtr = buf->Des();
-	User::LeaveIfError(file.Read(bufPtr));
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK   
+TInt CSisLauncherSession::AsyncParseResourceFileSizeL(const RMessage2& aMessage)
+    {
+    // We only support one call at once currently
+    if (iInAsyncParseResourceFile)
+        {
+        return KErrInUse;
+        }
+    else
+        {
+        iInAsyncParseResourceFile=ETrue;
+        delete iCurrentAppRegData;
+        iCurrentAppRegData=NULL;
+
+        RFs fs;
+        RFile file;
+        User::LeaveIfError(fs.Connect());
+        CleanupClosePushL(fs);
+        file.AdoptFromClient(aMessage, 0, 1);   
+        CleanupClosePushL(file);
+        //Read languages need to pass
+        TInt bufSize=0;
+        bufSize = aMessage.GetDesMaxLength(2);
+        HBufC8* bufToHoldLanguages = HBufC8::NewLC(bufSize);
+        TPtr8 bufPtrDscToHoldLanguages = bufToHoldLanguages->Des();
+        aMessage.ReadL(2, bufPtrDscToHoldLanguages, 0);
+      
+        RDesReadStream inStream(bufPtrDscToHoldLanguages);
+        CleanupClosePushL(inStream);
+        TInt32 languageCount = inStream.ReadInt32L();
+
+        RArray<TLanguage> appLanguages;
+        CleanupClosePushL(appLanguages);
 
-	// Parse the registration file
-	RCPointerArray<CSoftwareTypeRegInfo> regInfoArray;
-	CleanupClosePushL(regInfoArray);
-	
-	CSoftwareTypeRegInfoParser* parser = CSoftwareTypeRegInfoParser::NewL();
-	CleanupStack::PushL(parser);
-	parser->ParseL(*buf, regInfoArray);
+        for (TInt i=0; i<languageCount; i++)
+           appLanguages.AppendL((TLanguage)inStream.ReadInt32L());
+                           
+        CAppRegInfoReader *appRegInfoReader = CAppRegInfoReader::NewL(fs,file);
+        CleanupStack::PushL(appRegInfoReader);
+        
+        TRAPD(err,iCurrentAppRegData = appRegInfoReader->ReadL(appLanguages));
+        if (KErrNone != err)
+            {
+            iInAsyncParseResourceFile=EFalse;
+            User::Leave(err);
+            }
+        
+        iInAsyncParseResourceFile=EFalse;   
+        TInt objectSize=0;
+        objectSize= GetObjectSizeL(iCurrentAppRegData);
+        if (objectSize > 0)
+            {
+            //Everything went fine so return the buffer size.            
+            CleanupStack::PopAndDestroy(6,&fs);  
+            return objectSize;          
+            }
+        else
+            User::Leave(KErrUnknown);
+        }
+    return KErrNone;
+    }
+   
+void CSisLauncherSession::AsyncParseResourceFileDataL(const RMessage2& aMessage)
+    {
+    if (iCurrentAppRegData)
+        {
+        WriteObjectDataL(aMessage, 0, iCurrentAppRegData); 
+        delete iCurrentAppRegData;
+        iCurrentAppRegData=NULL;
+        }
+    else
+        User::Leave(KErrArgument);
+    }
 
-	// Pack the registration data
-	RBuf8 serializedRegInfo;
-	serializedRegInfo.CleanupClosePushL();
-	SoftwareTypeRegInfoUtils::SerializeArrayL(regInfoArray, serializedRegInfo);
-	aMessage.Write(2, serializedRegInfo);
+void CSisLauncherSession::ParseSwTypeRegFileL(const RMessage2& aMessage)
+    {
+    // Unpack the file handle
+    RFile file;
+    User::LeaveIfError(file.AdoptFromClient(aMessage, 0, 1));
+    CleanupClosePushL(file);
+    
+    // Read the registration file
+    TInt fileSize = 0;
+    User::LeaveIfError(file.Size(fileSize));
+    HBufC8* buf = HBufC8::NewLC(fileSize);
+    TPtr8 bufPtr = buf->Des();
+    User::LeaveIfError(file.Read(bufPtr));
 
-	CleanupStack::PopAndDestroy(5, &file); // buf, regInfoArray, parser, serializedRegInfo
-	}
+    // Parse the registration file
+	RCPointerArray<Usif::CSoftwareTypeRegInfo> regInfoArray;
+    CleanupClosePushL(regInfoArray);
+    
+    CSoftwareTypeRegInfoParser* parser = CSoftwareTypeRegInfoParser::NewL();
+    CleanupStack::PushL(parser);
+    parser->ParseL(*buf, regInfoArray);
+
+    // Pack the registration data
+    RBuf8 serializedRegInfo;
+    serializedRegInfo.CleanupClosePushL();
+    SoftwareTypeRegInfoUtils::SerializeArrayL(regInfoArray, serializedRegInfo);
+    aMessage.Write(2, serializedRegInfo);
+
+    CleanupStack::PopAndDestroy(5, &file); // buf, regInfoArray, parser, serializedRegInfo
+    }
 
 #ifndef SWI_TEXTSHELL_ROM
+void CSisLauncherSession::NotifyApparcForAppsL(const RMessage2& aMessage)
+    {
+    DEBUG_PRINTF(_L8("Sending the notification to AppArc."));
+    RIpcReadStream readStream;
+    readStream.Open(aMessage, 0);
+    CleanupClosePushL(readStream);    
+    RArray<TApaAppUpdateInfo> apparcAppInfoArray;
+    CleanupClosePushL(apparcAppInfoArray);
+    
+    RApaLsSession apaSession;
+    TInt err = apaSession.Connect();
+    if(KErrNone != err)
+        {
+        DEBUG_PRINTF2(_L8("RApaLsSession::Connect failed with %d. Notification to AppArc failed."), err);
+        User::LeaveIfError(err);
+        }
+    CleanupClosePushL(apaSession);
+    TApaAppUpdateInfo::TApaAppAction appaction = TApaAppUpdateInfo::EAppNotPresent;
+    const TInt numElems = readStream.ReadInt32L();
+    DEBUG_PRINTF2(_L8("Number of applications to be notified is %d."), numElems);
+    //Convert the local structure into the structure required by apparc
+    for (TInt i=0; i<numElems; ++i)
+        {
+        TAppUpdateInfo appInfo;
+        appInfo.InternalizeL(readStream);   
+        if(appInfo.iAction == EAppInstalled)
+            {
+            appaction = TApaAppUpdateInfo::EAppPresent;
+            }
+        else if(appInfo.iAction == EAppUninstalled)
+            {
+            appaction = TApaAppUpdateInfo::EAppNotPresent;
+            }
+        TApaAppUpdateInfo apparcAppUpdateInfo(appInfo.iAppUid, appaction);
+        apparcAppInfoArray.AppendL(apparcAppUpdateInfo);                    
+        DEBUG_PRINTF2(_L("AppUid is 0x%x"), appInfo.iAppUid);
+        DEBUG_PRINTF2(_L("Action is %d"), appInfo.iAction);         
+        }    
+    
+    err = 0;
+    TRAP(err, err = apaSession.UpdateAppListL(apparcAppInfoArray));
+    if(KErrNone != err)
+        {
+        DEBUG_PRINTF2(_L8("RApaLsSession::UpdateAppListL failed with %d. Notification to AppArc failed."), err);
+        User::LeaveIfError(err);
+        }
+
+    CleanupStack::PopAndDestroy(3, &readStream);       
+    }
+
 void CSisLauncherSession::RegisterSifLauncherMimeTypesL(const RMessage2& aMessage)
-	{
-	RegisterSifLauncherMimeTypesImplL(aMessage, ETrue);
-	}
+    {
+    RegisterSifLauncherMimeTypesImplL(aMessage, ETrue);
+    }
 
 void CSisLauncherSession::UnregisterSifLauncherMimeTypesL(const RMessage2& aMessage)
-	{
-	RegisterSifLauncherMimeTypesImplL(aMessage, EFalse);
-	}
+    {
+    RegisterSifLauncherMimeTypesImplL(aMessage, EFalse);
+    }
 
 void CSisLauncherSession::RegisterSifLauncherMimeTypesImplL(const RMessage2& aMessage, TBool aRegister)
-	{
-	// Read serialized MIME types from aMessage
-	HBufC8* buf = HBufC8::NewLC(aMessage.GetDesLengthL(0));
-	TPtr8 bufPtr(buf->Des());
-	aMessage.ReadL(0, bufPtr);
-	
-	// Unserialize MIME types
-	RDesReadStream rs(*buf);
-	CleanupClosePushL(rs);
-	
-	RCPointerArray<HBufC8> mimeTypes;
-	CleanupClosePushL(mimeTypes);
-	
-	InternalizePointerArrayL(mimeTypes, rs);
-	
-	// Connect to AppArc
-	RApaLsSession apa;
-	TInt err = apa.Connect();
-	if (err != KErrNone)
-		{
-		DEBUG_PRINTF2(_L8("Failed to connect to the AppArc server, err = %d\n"),err);
-		User::Leave(err);
-		}
-	CleanupClosePushL(apa);
+    {
+    // Read serialized MIME types from aMessage
+    HBufC8* buf = HBufC8::NewLC(aMessage.GetDesLengthL(0));
+    TPtr8 bufPtr(buf->Des());
+    aMessage.ReadL(0, bufPtr);
+    
+    // Unserialize MIME types
+    RDesReadStream rs(*buf);
+    CleanupClosePushL(rs);
+    
+    RCPointerArray<HBufC8> mimeTypes;
+    CleanupClosePushL(mimeTypes);
+    
+    InternalizePointerArrayL(mimeTypes, rs);
+    
+    // Connect to AppArc
+    RApaLsSession apa;
+    TInt err = apa.Connect();
+    if (err != KErrNone)
+        {
+        DEBUG_PRINTF2(_L8("Failed to connect to the AppArc server, err = %d\n"),err);
+        User::Leave(err);
+        }
+    CleanupClosePushL(apa);
 
-	// Iterate over the MIME types and (un)register them
-	for (TInt i=0; i<mimeTypes.Count(); ++i)
-		{
-		TDataType dataType(*mimeTypes[i]);
-		if (aRegister)
-			{
-			const TUid KSifLauncherUid = {0x10285BD0};
-			err = apa.InsertDataMapping(dataType, KDataTypePriorityTrustedHigh, KSifLauncherUid);
-			}
-		else
-			{
-			err = apa.DeleteDataMapping(dataType);
-			}
-		if (err != KErrNone)
-			{
-			DEBUG_PRINTF2(_L8("Failed to (un)register MIME types to AppArc, err = %d\n"),err);
-			}
-		}
-	
-	CleanupStack::PopAndDestroy(4, buf); //rs, mimeTypes, apa
-	}
+    // Iterate over the MIME types and (un)register them
+    for (TInt i=0; i<mimeTypes.Count(); ++i)
+        {
+        TDataType dataType(*mimeTypes[i]);
+        if (aRegister)
+            {
+            const TUid KSifLauncherUid = {0x10285BD0};
+            err = apa.InsertDataMapping(dataType, KDataTypePriorityTrustedHigh, KSifLauncherUid);
+            }
+        else
+            {
+            err = apa.DeleteDataMapping(dataType);
+            }
+        if (err != KErrNone)
+            {
+            DEBUG_PRINTF2(_L8("Failed to (un)register MIME types to AppArc, err = %d\n"),err);
+            }
+        }
+    
+    CleanupStack::PopAndDestroy(4, buf); //rs, mimeTypes, apa
+    }
 
 #endif // SWI_TEXTSHELL_ROM
 #endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
--- a/installationservices/swi/source/sislauncher/server/sislaunchersession.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sislauncher/server/sislaunchersession.h	Tue Aug 31 15:21:33 2010 +0300
@@ -25,7 +25,10 @@
 
 #include <e32base.h>
 #include "sislauncherserver.h"
-
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK  
+#include <usif/scr/appregentries.h>
+#include "nativecomponentinfo.h"
+#endif
 namespace Swi
 {
 class CSisRegistryFileDescription;
@@ -50,6 +53,8 @@
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	void ParseSwTypeRegFileL(const RMessage2& aMessage);
+    TInt AsyncParseResourceFileSizeL(const RMessage2& aMessage);
+    void AsyncParseResourceFileDataL(const RMessage2& aMessage);    
 #endif
 
 #ifndef SWI_TEXTSHELL_ROM
@@ -57,6 +62,7 @@
 	void RegisterSifLauncherMimeTypesL(const RMessage2& aMessage);
 	void UnregisterSifLauncherMimeTypesL(const RMessage2& aMessage);
 	void RegisterSifLauncherMimeTypesImplL(const RMessage2& aMessage, TBool aRegister);
+	void NotifyApparcForAppsL(const RMessage2& aMessage);
 #endif
 #endif
 	void DoRunExecutableL(const RMessage2& aMessage);
@@ -69,6 +75,10 @@
 private:
 	RMessagePtr2 iReceiveMsg;
 	TInt iReceiveLen;
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
+    Usif::CApplicationRegistrationData* iCurrentAppRegData;
+    TBool iInAsyncParseResourceFile;
+#endif
 
 	};
 
--- a/installationservices/swi/source/sislauncher/server/swtypereginfoparser.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sislauncher/server/swtypereginfoparser.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -33,9 +33,11 @@
 	_LIT8(KNodeLocalizedName, "localizedName");
 	_LIT8(KNodeMimeType, "mimeType");
 	_LIT8(KNodeSifPluginUid, "sifPluginUid");
-	_LIT8(KNodeInstallerSecureId, "installerSecureId");
-	_LIT8(KNodeExecutionLayerSecureId, "executionLayerSecureId");
-	
+    _LIT8(KNodeCustomAcess, "CustomAcess");
+    _LIT8(KNodeSecureId, "SecureId");
+    _LIT8(KNodeAccessMode, "AccessMode");
+    _LIT8(KNodeLauncherExecutable, "launcherExecutable");
+    
 	_LIT8(KAttrSoftwareTypeName, "name");
 	_LIT8(KAttrLanguage, "language");
 
@@ -118,7 +120,7 @@
 	iNodes.Close();
 	}
 
-void CSoftwareTypeRegInfoParser::ParseL(const TDesC8& aDocument, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
+void CSoftwareTypeRegInfoParser::ParseL(const TDesC8& aDocument, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
 	{
 	iSwTypeRegInfoArray = &aSwTypeRegInfoArray;
 	
@@ -175,7 +177,7 @@
 			{
 			PushNodeL(ENodeSoftwareType, ENodeSoftwareTypeRegistrationData);
 			HBufC* softwareTypeName = AttributeLC(aAttributes, KAttrSoftwareTypeName);
-			CSoftwareTypeRegInfo* regInfo = CSoftwareTypeRegInfo::NewL(*softwareTypeName);
+			Usif::CSoftwareTypeRegInfo* regInfo = Usif::CSoftwareTypeRegInfo::NewL(*softwareTypeName);
 			CleanupStack::PushL(regInfo);
 			iSwTypeRegInfoArray->AppendL(regInfo);
 			CleanupStack::Pop();
@@ -202,16 +204,28 @@
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
 			PushNodeL(ENodeSifPluginUid, ENodeSoftwareType);
 			break;
-		
-		case ENodeInstallerSecureId:
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			PushNodeL(ENodeInstallerSecureId, ENodeSoftwareType);
-			break;
-		
-		case ENodeExecutionLayerSecureId:
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			PushNodeL(ENodeExecutionLayerSecureId, ENodeSoftwareType);
-			break;
+			
+		case ENodeCustomAccess:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    PushNodeL(ENodeCustomAccess, ENodeSoftwareType);
+		    HBufC* secureId = AttributeLC(aAttributes, KNodeSecureId);
+		    secureId->Des().TrimAll();
+		    iSecureId = TUid::Uid(Str2IntL(*secureId, EHex));
+		    CleanupStack::PopAndDestroy(secureId);
+		    
+		    HBufC* accessMode = AttributeLC(aAttributes, KNodeAccessMode);
+		    iAccessMode = static_cast<TInt>(Str2IntL(*accessMode));
+		    CleanupStack::PopAndDestroy(accessMode);
+		    }
+		    break;
+		   
+		case ENodeLauncherExecutable:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    PushNodeL(ENodeLauncherExecutable, ENodeSoftwareType);
+		    }
+		    break;
 
 		default:
 			User::Leave(KErrInvalidSoftwareTypeRegistrationFile);
@@ -237,13 +251,13 @@
 		}
 	iNodes.Remove(lastIdx);
 
-	RPointerArray<CSoftwareTypeRegInfo>& infoArray = *iSwTypeRegInfoArray;
+	RPointerArray<Usif::CSoftwareTypeRegInfo>& infoArray = *iSwTypeRegInfoArray;
 	switch (node)
 		{
 		case ENodeLocalizedName:
 			{
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
 			HBufC* name = ConvertBufferTo16bitL(*iContentChunks);
 			CleanupStack::PushL(name);
 			name->Des().TrimAll();
@@ -255,7 +269,7 @@
 		case ENodeMimeType:
 			{
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
 			HBufC* mimeType = ConvertBufferTo16bitL(*iContentChunks);
 			CleanupStack::PushL(mimeType);
 			mimeType->Des().TrimAll();
@@ -268,28 +282,31 @@
 			{
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
 			iContentChunks->Des().TrimAll();
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
 			regInfo.SetSifPluginUid(Str2UidL(*iContentChunks));
 			}
 			break;
-		
-		case ENodeInstallerSecureId:
-			{
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			iContentChunks->Des().TrimAll();
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
-			regInfo.SetInstallerSecureId(Str2UidL(*iContentChunks));
-			}
-			break;
-		
-		case ENodeExecutionLayerSecureId:
-			{
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			iContentChunks->Des().TrimAll();
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
-			regInfo.SetExecutionLayerSecureId(Str2UidL(*iContentChunks));
-			}
-			break;
+
+		case ENodeCustomAccess:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    iContentChunks->Des().TrimAll();
+		    Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+		    regInfo.SetCustomAccessL(iSecureId, static_cast<Usif::TAccessMode>(iAccessMode));
+		    }
+		    break;
+		    
+		case ENodeLauncherExecutable:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+		    HBufC* launcherExecutable = ConvertBufferTo16bitL(*iContentChunks);
+		    CleanupStack::PushL(launcherExecutable);
+		    launcherExecutable->Des().TrimAll();
+		    regInfo.SetLauncherExecutableL(*launcherExecutable);
+		    CleanupStack::PopAndDestroy(launcherExecutable);        
+		    }
+		    break;
 		}
 	
 	if (iContentChunks != NULL)
@@ -312,8 +329,8 @@
 		case ENodeLocalizedName:
 		case ENodeMimeType:
 		case ENodeSifPluginUid:
-		case ENodeInstallerSecureId:
-		case ENodeExecutionLayerSecureId:
+		case ENodeCustomAccess:  
+		case ENodeLauncherExecutable:
 			AddContentChunkL(aBytes);
 			break;
 
@@ -370,14 +387,6 @@
 		{
 		return ENodeSifPluginUid;
 		}
-	else if (aName == KNodeInstallerSecureId)
-		{
-		return ENodeInstallerSecureId;
-		}
-	else if (aName == KNodeExecutionLayerSecureId)
-		{
-		return ENodeExecutionLayerSecureId;
-		}
 	else if (aName == KNodeSoftwareType)
 		{
 		return ENodeSoftwareType;
@@ -386,6 +395,14 @@
 		{
 		return ENodeSoftwareTypeRegistrationData;
 		}
+	else if (aName == KNodeCustomAcess)
+	    {
+	    return ENodeCustomAccess;
+	    }
+	else if (aName == KNodeLauncherExecutable)
+	    {
+	    return ENodeLauncherExecutable;
+	    }
 	else
 		{
 		return ENodeNone;
--- a/installationservices/swi/source/sislauncher/server/swtypereginfoparser.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sislauncher/server/swtypereginfoparser.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -38,7 +38,7 @@
 		static CSoftwareTypeRegInfoParser* NewL();
 		virtual ~CSoftwareTypeRegInfoParser();
 		
-		void ParseL(const TDesC8& aDocument, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
+		void ParseL(const TDesC8& aDocument, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
 
 	private:
 		// From MContentHandler
@@ -58,9 +58,11 @@
 	private:
 		CSoftwareTypeRegInfoParser();
 		
-		RPointerArray<CSoftwareTypeRegInfo>* iSwTypeRegInfoArray;
+		RPointerArray<Usif::CSoftwareTypeRegInfo>* iSwTypeRegInfoArray;
 		HBufC8* iContentChunks;
 		TLanguage iLocalizedNameLanguage;
+		TSecureId iSecureId;
+		TInt iAccessMode;
 		
 		enum TXmlNode
 			{
@@ -70,8 +72,8 @@
 			ENodeLocalizedName,
 			ENodeMimeType,
 			ENodeSifPluginUid,
-			ENodeInstallerSecureId,
-			ENodeExecutionLayerSecureId
+			ENodeCustomAccess,
+			ENodeLauncherExecutable
 			};
 		RArray<TXmlNode> iNodes;
 		
--- a/installationservices/swi/source/sisregistry/client/sisregistryentry.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/client/sisregistryentry.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -317,7 +317,6 @@
 	{
 	CleanupResetAndDestroyPushL(aPackageNames);
     CleanupResetAndDestroyPushL(aVendorNames);
-    
 	HBufC8* buffer = RSisRegistryEntry::SendReceiveBufferLC(EPackageAugmentations);
 	
 	// create a stream based on the buffer
@@ -343,7 +342,6 @@
 		CleanupStack::Pop(2, vendor);	//vendor package, 
 		}
 	CleanupStack::PopAndDestroy(3, buffer);// buffer, stream, packages
-	
 	CleanupStack::Pop(2, &aPackageNames);
 	}
 
--- a/installationservices/swi/source/sisregistry/client/sisregistrysession.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/client/sisregistrysession.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -35,7 +35,7 @@
 #include "hashcontainer.h"
 #include "dessisdataprovider.h"
 #include "siscontroller.h"
-#include "cleanuputils.h"
+
 
 using namespace Swi;
 
@@ -380,7 +380,6 @@
 	
 EXPORT_C void RSisRegistrySession::RetrieveLogFileL(RPointerArray<CLogEntry>& aLogEntry)
  	{
-    CleanupResetAndDestroyPushL(aLogEntry); 	
  	HBufC8* buffer = SendReceiveBufferLC(EloggingFile);
   
  	RDesReadStream stream(*buffer);
@@ -409,7 +408,6 @@
  		}
  	 	
  	CleanupStack::PopAndDestroy(2,buffer);	//buffer,stream
- 	CleanupStack::Pop(&aLogEntry);
  	}
  
 HBufC8* RSisRegistrySession::SendReceiveBufferLC(TInt aMessage, TPtrC8 aInputBuffer, TInt aThirdArgument) 
@@ -451,11 +449,50 @@
 EXPORT_C Usif::TComponentId RSisRegistrySession::GetComponentIdForUidL(const TUid& aUid)
 	{
 	Usif::TComponentId componentId(0);
-	TPckg<Usif::TComponentId> componentIdPckg(componentId);
-	
+	TPckg<Usif::TComponentId> componentIdPckg(componentId);	
 	User::LeaveIfError(SendReceive(EComponentIdForUid, TIpcArgs(aUid.iUid, &componentIdPckg)));
 	return componentId;		
 	}
 
+EXPORT_C Usif::TComponentId RSisRegistrySession::GetComponentIdForPackageL(const TDesC& aPackageName, const TDesC& aVendorName) const
+    {           
+    Usif::TComponentId componentId(0);
+    TPckg<Usif::TComponentId> componentIdPckg(componentId);
+    User::LeaveIfError(SendReceive(EComponentIdForPackage, TIpcArgs(&aPackageName, &aVendorName, &componentIdPckg)));    
+    return componentId;     
+    }
+
+EXPORT_C void RSisRegistrySession::GetAppUidsForComponentL(Usif::TComponentId& aCompId, RArray<TUid>& aAppUids)
+    {
+    TPckgC<Usif::TComponentId> compId(aCompId);    
+    HBufC8* buffer = SendReceiveBufferLC(EAppUidsForComponent, static_cast<TPtrC8>(compId));        
+    RDesReadStream stream(*buffer);
+    CleanupClosePushL(stream);    
+    InternalizeArrayL(aAppUids, stream);
+    CleanupStack::PopAndDestroy(2, buffer);           
+    }
+
+EXPORT_C void RSisRegistrySession::GetComponentIdsForUidL(TUid& aPackageUid, RArray<Usif::TComponentId>& aComponentIds)
+    {
+    TPckgC<TUid> pkgUid(aPackageUid);    
+    HBufC8* buffer = SendReceiveBufferLC(EComponentIdsForPackageUid, static_cast<TPtrC8>(pkgUid));        
+    RDesReadStream stream(*buffer);
+    CleanupClosePushL(stream);    
+    InternalizeArrayL(aComponentIds, stream);
+    CleanupStack::PopAndDestroy(2, buffer);           
+    }
+
+EXPORT_C void RSisRegistrySession::AddAppRegInfoL(const TDesC& aAppRegFile)
+    {
+    TInt returnCode = SendReceive(EAddAppRegInfo, TIpcArgs(&aAppRegFile));
+    User::LeaveIfError(returnCode);
+    }
+
+EXPORT_C void RSisRegistrySession::RemoveAppRegInfoL(const TDesC& aAppRegFile)
+    {
+    TInt returnCode = SendReceive(ERemoveAppRegInfo, TIpcArgs(&aAppRegFile));
+    User::LeaveIfError(returnCode);
+    }
+
 #endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
--- a/installationservices/swi/source/sisregistry/client/sisregistrywritablesession.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/client/sisregistrywritablesession.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -33,8 +33,11 @@
 #include "sisuid.h"
 #include "cleanuputils.h"
 #include "arrayutils.h"
+#include "installtypes.h"
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include "swtypereginfo.h"
+#include "ipcutil.h"
+#include "sisregistrypackage.h"
 #endif
 
 using namespace Swi;
@@ -103,7 +106,7 @@
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 EXPORT_C void RSisRegistryWritableSession::AddEntryL(const CApplication& aApplication,
 													 const TDesC8& aController,
-													 const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray,
+													 const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray,
 													 TInt64 aTransactionID)
 	{
 	RBuf8 serializedArray;
@@ -116,6 +119,31 @@
 
 	CleanupStack::PopAndDestroy(&serializedArray);
 	}
+
+EXPORT_C void RSisRegistryWritableSession::AddEntryL(const Usif::CApplicationRegistrationData& aApparcRegFileData,
+                                                     const CSisRegistryPackage& aSisRegistryPackage)
+    {
+    TIpcArgs ipcArgs;
+    
+    Usif::TComponentId componentUid = GetComponentIdForPackageL(aSisRegistryPackage.Name(),aSisRegistryPackage.Vendor()); 
+    ipcArgs.Set(0, componentUid);
+
+    TInt objectSize = 0;
+    objectSize = GetObjectSizeL(&aApparcRegFileData);
+    
+    HBufC8* appRegData = HBufC8::NewMaxLC(objectSize);
+    TPtr8 appRegDataDes = appRegData->Des();
+
+    RDesWriteStream ipcstream(appRegDataDes);
+    CleanupClosePushL(ipcstream);
+    
+    ipcstream << aApparcRegFileData;
+    ipcstream.CommitL();
+    ipcArgs.Set(1, &appRegDataDes);
+    
+    User::LeaveIfError(SendReceive(EAddAppRegEntry, ipcArgs));
+    CleanupStack::PopAndDestroy(2, appRegData);
+    }
 #endif
 
 void RSisRegistryWritableSession::UpdateEntryImplL(TInt aMessage,
@@ -195,7 +223,7 @@
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 EXPORT_C void RSisRegistryWritableSession::UpdateEntryL(const CApplication& aApplication, 
 														const TDesC8& aController,
-														const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray,
+														const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray,
 														TInt64 aTransactionID)
 	{
 	RBuf8 serializedArray;
@@ -208,6 +236,41 @@
 	
 	CleanupStack::PopAndDestroy(&serializedArray);
 	}
+
+EXPORT_C void RSisRegistryWritableSession::UpdateEntryL(const CApplication& aApplication, 
+                                                        const Usif::CApplicationRegistrationData& aApparcRegFileData,
+                                                        const CSisRegistryPackage& aSisRegistryPackage) 
+    {
+    TIpcArgs ipcArgs;
+    Usif::TComponentId componentUid = 0;  
+
+    TRAPD(err,componentUid = GetComponentIdForPackageL(aSisRegistryPackage.Name(),aSisRegistryPackage.Vendor());)
+
+	if (err != KErrNone && err != KErrNotFound)
+        {
+        User::Leave(err);
+        }
+    else if (err == KErrNotFound) // Possible only in PU and SA.
+        {
+        componentUid = GetComponentIdForUidL(aApplication.ControllerL().Info().Uid().Uid());
+        }
+
+    ipcArgs.Set(0, componentUid);
+    
+    TInt objectSize = 0;
+    objectSize = GetObjectSizeL(&aApparcRegFileData);
+    HBufC8* appRegData=HBufC8::NewMaxLC(objectSize);
+    TPtr8 appRegDataDes = appRegData->Des();
+
+    RDesWriteStream ipcstream(appRegDataDes);
+    CleanupClosePushL(ipcstream);
+    
+    ipcstream << aApparcRegFileData;
+    ipcstream.CommitL();
+    ipcArgs.Set(1, &appRegDataDes);
+    User::LeaveIfError(SendReceive(EUpdateAppRegEntry, ipcArgs));
+    CleanupStack::PopAndDestroy(2, appRegData);
+    }
 #endif
 
 EXPORT_C void RSisRegistryWritableSession::DeleteEntryL(const CSisRegistryPackage& aPackage, TInt64 aTransactionID)
@@ -332,4 +395,11 @@
 	TInt returnCode = SendReceive(ESetComponentState, TIpcArgs(&packageComponentId, &packageState));
 	User::LeaveIfError(returnCode);
 	}
+
+EXPORT_C void RSisRegistryWritableSession::SetComponentPresenceL(TComponentId aComponentId, TBool aState)
+    {
+    TPckgC<TComponentId> componentId(aComponentId);
+    TPckgC<TBool> componentPresence(aState);   
+    User::LeaveIfError(SendReceive(ESetComponentPresence, TIpcArgs(&componentId, &componentPresence)));
+    }
 #endif
--- a/installationservices/swi/source/sisregistry/common/sisregistryclientserver.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/common/sisregistryclientserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -69,11 +69,13 @@
 	EInstalledDrives,			 
 	ERemoveWithLastDependent,
 	ESetRemoveWithLastDependent,
-	EGetMatchingSupportedLanguages,					
+	EGetMatchingSupportedLanguages,		
 	// daemon interface
 	EAddDrive,
 #ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	ERemoveDrive,
+#else
+	ESetComponentPresence,
 #endif
 
 	// all clients
@@ -121,7 +123,7 @@
 	EloggingFile,	
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
 	EIsFileRegistered, 
-	EComponentIdForUid,
+	EComponentIdForUid,	
 #endif
 	// NOTE : The security policy range ESeparatorMinimumWriteUserData-
 	// ESeparatorMinimumTCB also requires NetworkServices as well as
@@ -144,6 +146,8 @@
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	EAddSoftwareTypeEntry,
 	EUpdateSoftwareTypeEntry,
+    EAddAppRegEntry,
+    EUpdateAppRegEntry,
 #endif
 
 	// Additional RegistryWritableSession clients 
@@ -153,6 +157,7 @@
 #endif
 	// All clients 
 	ERegistryFiles = 128,
+	
 	// Additional ReadUserData calls
 	ESeparatorMinimumReadUserData2 = 256,
 	ERemovablePackages,	
@@ -165,7 +170,12 @@
 	ESignedBySuCert,
 	
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	ESetComponentState, //SIF only
+	EComponentIdForPackage,
+	EAppUidsForComponent,  
+	EComponentIdsForPackageUid,
+	ESetComponentState = 300, //SIF only
+	EAddAppRegInfo = 320,    //requires TCB
+	ERemoveAppRegInfo,       //requires TCB 
 #endif
 	ESeparatorEndAll
 	
--- a/installationservices/swi/source/sisregistry/server/scrhelperutil.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server/scrhelperutil.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -42,11 +42,9 @@
 #include <usif/usifcommon.h>
 #include <swi/sisregistrylog.h>
 #include <scs/streamingarray.h>
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
 #include "screntries_internal.h"
 #endif //SYMBIAN_ENABLE_SPLIT_HEADERS
-#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 using namespace Swi;
 
@@ -119,6 +117,21 @@
 	ExternalizeChainIndexArrayL(aScrSession, aCompId, aObject.InstallChainIndicies());
 	}
 
+void ScrHelperUtil::AddApplicationEntryL(Usif::RSoftwareComponentRegistry& aScrSession, Usif::TComponentId& aCompId, const Usif::CApplicationRegistrationData& aApplicationRegistrationData)
+    {
+    aScrSession.AddApplicationEntryL(aCompId, aApplicationRegistrationData);
+    }
+
+void ScrHelperUtil::DeleteApplicationEntriesL(Usif::RSoftwareComponentRegistry& aScrSession, Usif::TComponentId& aCompId)
+    {
+    aScrSession.DeleteApplicationEntriesL(aCompId);
+    }
+
+void ScrHelperUtil::DeleteApplicationEntryL(Usif::RSoftwareComponentRegistry& aScrSession, const TUid& aAppUId)
+    {
+    aScrSession.DeleteApplicationEntryL(aAppUId);
+    }
+
 void ScrHelperUtil::WriteToScrL(Usif::RSoftwareComponentRegistry& aScrSession, Usif::TComponentId& aCompId, CSisRegistryObject& aObject, Usif::TScrComponentOperationType aOpType)
 	{
 	
@@ -410,7 +423,7 @@
 		TPtrC fileTargetPtr(fileTarget);
 		if (filenamesArray.SpecificFindInOrder(fileTargetPtr, descriptorsComparator, EArrayFindMode_First) != KErrNotFound)
 			continue; // Skip duplicates
-		filenamesArray.InsertInOrder(fileTargetPtr, descriptorsComparator);
+		filenamesArray.InsertInOrderL(fileTargetPtr, descriptorsComparator);
 		
 		if (IsWildcardFile(fileTarget))
 			{
--- a/installationservices/swi/source/sisregistry/server/siscontrollerverifier.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server/siscontrollerverifier.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -96,9 +96,11 @@
 void CSisControllerVerifier::CompleteRequestL()
 	{
 	TPckg<TBool> packageResult(isVerified);
-
-	iMessage.WriteL(EIpcArgument0, packageResult);
-	iMessage.Complete(KErrNone);
+	if ( !iMessage.IsNull() )
+		{
+		iMessage.WriteL(EIpcArgument0, packageResult);
+		iMessage.Complete(KErrNone);
+		}
 	}
 	
 TInt CSisControllerVerifier::RunError(TInt)
--- a/installationservices/swi/source/sisregistry/server/sisregistryserver.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server/sisregistryserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -48,6 +48,7 @@
 	ESeparatorMinimumTCB, 			// accessible by TCB clients only
 	ESeparatorMinimumReadUserData2, 	// accessible by ReadUserData clients only
 	ESetComponentState,             // requests coming from SIF
+	EAddAppRegInfo,                 // TCB only
 	ESeparatorEndAll,     			// not supported from there on
 	};
 
@@ -64,6 +65,7 @@
 	2,	// Used by SWIS only, so TCB is needed - check on cap and SID.
 	1,  // ReadUserData clients only
 	5,   // requests coming from SIF
+	6,  // all clients having TCB
 	CPolicyServer::ENotSupported,  
 	};
 
@@ -75,6 +77,7 @@
 	{_INIT_SECURITY_POLICY_S0(KDaemonSecureId), CPolicyServer::EFailClient}, 
 	{_INIT_SECURITY_POLICY_C2(ECapabilityWriteUserData, ECapabilityNetworkServices), CPolicyServer::EFailClient},
 	{_INIT_SECURITY_POLICY_S0(KSifServerSecureId), CPolicyServer::EFailClient},
+	{_INIT_SECURITY_POLICY_C1(ECapabilityTCB), CPolicyServer::EFailClient},
 	};
 
 const CPolicyServer::TPolicy CSisRegistryServer::iPolicy =
@@ -121,14 +124,14 @@
 	iShutdown = NULL; //required in case the server dies before the session
 	}
 
-CSession2* CSisRegistryServer::NewSessionL(const TVersion& aClientVersion, const RMessage2&) const
+CSession2* CSisRegistryServer::NewSessionL(const TVersion& aClientVersion, const RMessage2& aMessage) const
 //
 // Create a new client session. This should really check the version number.
 //
 	{
 	if (aClientVersion == TVersion(1,0,0))
 		{
-		return new(ELeave) CSisRegistrySession();	
+		return new(ELeave) CSisRegistrySession(aMessage.SecureId());
 		}
 	else
 		{
--- a/installationservices/swi/source/sisregistry/server/sisregistryserver.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server/sisregistryserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -36,8 +36,8 @@
 _LIT_SECURE_ID(KSwisSecureId, 0x101F7295);	
 _LIT_SECURE_ID(KSifServerSecureId, 0x10285BCB);	
 
-const TInt KPolicyRanges= 12;
-const TInt KPolicyElements = 6;
+const TInt KPolicyRanges= 13;
+const TInt KPolicyElements = 7;
 
 class CSisRegistrySession;
 
--- a/installationservices/swi/source/sisregistry/server/sisregistryserverconst.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server/sisregistryserverconst.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -48,6 +48,14 @@
 
 _LIT(KLogDir, "\\sys\\install\\log.txt");
 
+//Location of application registration resource files
+_LIT(KApparcRegFilePath, "\\private\\10003a3f\\apps\\*.rsc");
+_LIT(KApparcRegFileImportPath, "\\private\\10003a3f\\import\\apps\\*.rsc");
+
+//Registration resource file uid 
+const TUid KUidAppRegistrationFile = {0x101F8021};
+_LIT(KApparcRegImportDir, "\\private\\10003a3f\\import\\apps\\");
+_LIT(KApparcRegDir, "\\private\\10003a3f\\apps\\");
 }
 
 #endif // __SISREGISTRYSERVERCONST_H__
--- a/installationservices/swi/source/sisregistry/server/sisregistryserversession.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server/sisregistryserversession.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -31,12 +31,11 @@
 #include <swi/sistruststatus.h>
 #include <swi/sisregistrylog.h>
 #include <scs/ipcstream.h>
+#include <startupdomainpskeys.h>
+#include <e32const.h>
 
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include "sislauncherclient.h"
 #include "swtypereginfo.h"
-#endif
-
 #include "scrhelperutil.h"
 #include "scrdbconstants.h"
 #include "log.h"
@@ -66,12 +65,14 @@
 #include "sisinstallblock.h"
 #include "sisregistryfiledescription.h"
 #include "sisregistrywritablesession.h"  
+#include "securitycheckutil.h"
 
 using namespace Swi;
 using namespace Usif;
 
 const TInt KUidHexLength = 8;
 _LIT(KSWIRegFirstInitFile, "\\sys\\install\\sisregistry\\swiregfirstinit.log");
+_LIT(KApparcRegFileNameFormat, "*10003a3f*");
 
 // Function to panic an offending client
 void CSisRegistrySession::PanicClient(const RMessagePtr2& aMessage, Swi::TSisRegistryPanic aPanic)
@@ -92,21 +93,45 @@
 	// Create a session with the Software Component Registry
 	User::LeaveIfError(iScrSession.Connect());
 
+	iIsFirstInit = IsFirstInvocationL();
+	
+#ifdef __WINSCW__
+	_LIT_SECURE_ID(KAppArcSID, 0x10003A3F);
+	if (KAppArcSID.iId == iClientSid.iId)
+	    {
+        DEBUG_PRINTF(_L8("SIS Registry Server: Init for a connection from AppArc"));
+        ProcessApplicationsL();
+	    }
+	else
+	    {
+        if (iIsFirstInit)
+            {
+            DEBUG_PRINTF2(_L8("SIS Registry Server: Init for a connection from SID 0x%X"), iClientSid.iId);
+            ProcessRomStubsL();
+            }
+	    }
+#else
 	TInt res = KErrNone;
 	TRAP(res , res = IsFirmwareUpdatedL());
-	
-	if (IsFirstInvocationL() || res )
+		
+	if (iIsFirstInit || res)
 		{
-		isFwUpdated = ETrue;
+		if (res)
+		    {
+		    iIsFwUpdated = ETrue;
+		    }
+
 		FirstInvocationInitL();
+		if (iIsFwUpdated)
+		    {
+			TRAP(res, UpdateRecentFWVersionL());
+			if (res != KErrNone)
+                {
+                DEBUG_PRINTF2(_L8("Updating recent Firmware Version failed with error code = %d."), res);
+                }
+		    }		
 		}
-		
-    TRAP(res, UpdateRecentFWVersionL(););
-    if (res != KErrNone)
-        {
-        // log that
-        DEBUG_PRINTF2(_L8("Updating recent Firmware Version failed with error code = %d."), res);
-        }
+#endif
 	}
 
 CSisRegistrySession::~CSisRegistrySession()
@@ -138,29 +163,118 @@
 	return firstInvocation;
 	}
 
+void CSisRegistrySession::ProcessRomStubsL()
+    {
+    DEBUG_PRINTF(_L8("SIS Registry Server - Starting processing of ROM Stub sis files"));
+    iScrSession.CreateTransactionL();
+    ProcessRomDriveL();
+    iScrSession.CommitTransactionL();       
+        
+    // Create a file in <systemdrive>:\sys to mark a successful initialization
+    // so that we don't come here again (unless firmware is upgraded in which case <systemdrive>:\sys 
+    // should be cleaned
+    RBuf fileName;
+    CleanupClosePushL(fileName);
+    fileName.CreateL(KMaxPath);
+    TDriveUnit drive(iSystemDrive);
+    fileName = drive.Name();
+    fileName.Append(KSWIRegFirstInitFile);
+    RFile file;
+    CleanupClosePushL(file);
+    file.Replace(iFs, fileName, EFileWrite | EFileShareAny);
+    CleanupStack::PopAndDestroy(2, &fileName);  // file
+    
+    DEBUG_PRINTF(_L8("SIS Registry Server - Completed processing of ROM Stub sis files"));
+    }
+
+void CSisRegistrySession::ProcessApplicationsL()
+    {
+    TComponentId compId = 0;
+    DEBUG_PRINTF(_L8("SIS Registry Server - Deleteing all existing ROM applications."));
+    ScrHelperUtil::DeleteApplicationEntriesL(iScrSession, compId);
+    
+    //Register all apps found in \private\10003a3f\apps
+    TDriveUnit romDrive(SisRegistryUtil::SystemRomDrive());
+    RBuf apparcRegFilePath;
+    apparcRegFilePath.CreateL(romDrive.Name(), KMaxPath);
+    CleanupClosePushL(apparcRegFilePath);
+    apparcRegFilePath.Append(KApparcRegFilePath);
+    
+	//Create a single transaction to register all in rom apps
+	iScrSession.CreateTransactionL();
+	RegisterAllAppL(apparcRegFilePath);
+
+    //Register all apps found in \private\10003a3f\import\apps
+    apparcRegFilePath = romDrive.Name();
+    apparcRegFilePath.Append(KApparcRegFileImportPath);
+    RegisterAllAppL(apparcRegFilePath);
+    
+	//Register all apps found in UDA
+	TDriveUnit systemDrive(iSystemDrive);
+
+	//Register all apps found in <systemdrive>\private\10003a3f\apps
+	apparcRegFilePath = systemDrive.Name();	
+	apparcRegFilePath.Append(KApparcRegFilePath);
+	RegisterAllAppL(apparcRegFilePath);
+
+	//Register all apps found in <systemdrive>\private\10003a3f\import\apps
+    apparcRegFilePath = systemDrive.Name();
+    apparcRegFilePath.Append(KApparcRegFileImportPath);
+    RegisterAllAppL(apparcRegFilePath);
+	
+	iScrSession.CommitTransactionL();    
+	
+	CleanupStack::PopAndDestroy(&apparcRegFilePath);
+    
+    DEBUG_PRINTF(_L8("SIS Registry Server - Completed processing of all existing ROM applications."));
+    }
+
 // Does initialization required when run after very first boot of phone (or after firmware upgrade)
-// Method is only invoked when such a state is detected
+// Method is only invoked when such a state is detected (only in device, NOT in emulator)
 // Leaves behind a file in <systemdrive>:\sys to mark a successful initialization 
 void CSisRegistrySession::FirstInvocationInitL()
 	{
 	// Add the ROM installed stub details to SCR
 	// Create an SCR transaction, so that entries won't be added to the SCR if the function leaves
-	iScrSession.CreateTransactionL();
-	ProcessRomDriveL();
-	iScrSession.CommitTransactionL();
-	// Create a file in <systemdrive>:\sys to mark a successful initialization
-	// so that we don't come here again (unless firmware is upgraded in which case <systemdrive>:\sys 
-	// should be cleaned
-	RBuf fileName;
-	CleanupClosePushL(fileName);
-	fileName.CreateL(KMaxPath);
-	TDriveUnit drive(iSystemDrive);
-	fileName = drive.Name();
-	fileName.Append(KSWIRegFirstInitFile);
-	RFile file;
-	CleanupClosePushL(file);
-	file.Replace(iFs, fileName, EFileWrite | EFileShareAny);
-	CleanupStack::PopAndDestroy(2, &fileName);	// file
+    TInt value(EIdlePhase1NOK);
+    TInt ret = RProperty::Get(KPSUidStartup, KPSIdlePhase1Ok, value);
+	
+    TBool isFromSWIDaemon = EFalse;
+    _LIT_SECURE_ID(KSWIDaemonSID, 0x10202DCE);
+    if (KSWIDaemonSID.iId == iClientSid.iId)
+        { 
+        isFromSWIDaemon = ETrue;
+        }
+	
+	//If the image is NCP 'KPSUidStartup' property is not set, hence settig it explicitly for processing stubs
+	if(ret == KErrNotFound)
+		{
+		DEBUG_PRINTF(_L8("SIS Registry Server - 'KPSUidStartup' property is not set"));
+		value = EIdlePhase1Ok;
+		}
+	else
+		{
+		DEBUG_PRINTF(_L8("SIS Registry Server - 'KPSUidStartup' property is set"));
+		}
+	if ((value == EIdlePhase1Ok || isFromSWIDaemon) && iIsFirstInit)
+	    {
+        ProcessRomStubsL();
+	    }
+
+	if (iIsFwUpdated)
+	    {
+		// Delete the SisRegistry marker file
+        RBuf fileName;
+        CleanupClosePushL(fileName);
+        fileName.CreateL(KMaxPath);
+        TDriveUnit drive(iSystemDrive);
+        fileName = drive.Name();
+        fileName.Append(KSWIRegFirstInitFile);
+        iFs.Delete(fileName);
+        CleanupStack::PopAndDestroy(&fileName);
+
+        ProcessApplicationsL();
+	    }
 	}
 
 //
@@ -332,6 +446,12 @@
 	case EAddSoftwareTypeEntry:
 		RegisterEntryL(aMessage, ETrue, ETrue);
 		break;
+    case EAddAppRegEntry:
+        AppRegInfoEntryL(aMessage);
+        break;
+    case EUpdateAppRegEntry:
+        AppRegInfoEntryL(aMessage);
+        break;
 	case EUpdateEntry:
 		RegisterEntryL(aMessage, EFalse, EFalse);
 		break;
@@ -394,13 +514,31 @@
  		break;	
 	case ESetComponentState:
  		SetComponentStateL(aMessage);
- 		break;	
+ 		break;
+	case ESetComponentPresence:
+	    SetComponentPresenceL(aMessage);
+	    break;
 	case EIsFileRegistered:
  		IsFileRegisteredL(aMessage);
  		break;			
 	case EComponentIdForUid:
 		GetComponentIdForUidL(aMessage);
 		break;
+	case EComponentIdForPackage:
+        GetComponentIdForPackageL(aMessage);
+        break;
+	case EAppUidsForComponent:
+	    GetAppUidsForComponentL(aMessage);
+        break;
+	case EComponentIdsForPackageUid:	    
+        GetComponentIdsForUidL(aMessage);        
+        break;
+	case EAddAppRegInfo:
+	    AddAppRegInfoL(aMessage);
+	    break;
+	case ERemoveAppRegInfo:
+	    RemoveAppRegInfoL(aMessage);
+	    break;
 	default:
 		PanicClient(aMessage,EPanicIllegalFunction);
 		break;
@@ -553,31 +691,13 @@
 	readStream.Open(aMessage, 3);
 	CleanupClosePushL(readStream);
 	
-	RCPointerArray<CSoftwareTypeRegInfo> swTypeRegInfoArray;
+	RCPointerArray<Usif::CSoftwareTypeRegInfo> swTypeRegInfoArray;
 	CleanupClosePushL(swTypeRegInfoArray);
 	SoftwareTypeRegInfoUtils::UnserializeArrayL(readStream, swTypeRegInfoArray);
 	
 	for (TInt i=0; i<swTypeRegInfoArray.Count(); ++i)
 		{
-		const CSoftwareTypeRegInfo& info = *swTypeRegInfoArray[i];
-		const RPointerArray<CLocalizedSoftwareTypeName>& locSwTypeNames = info.LocalizedSoftwareTypeNames();
-		RCPointerArray<Usif::CLocalizedSoftwareTypeName> scrSwTypeNames;
-		CleanupClosePushL(scrSwTypeNames);
-		for (TInt i=0; i<locSwTypeNames.Count(); ++i)
-			{
-			scrSwTypeNames.AppendL(Usif::CLocalizedSoftwareTypeName::NewLC(locSwTypeNames[i]->Name(), locSwTypeNames[i]->Locale()));
-			CleanupStack::Pop();
-			}
-
-		DEBUG_PRINTF2(_L("Sis Registry Server - Adding software type: %S"), &info.UniqueSoftwareTypeName());
-
-		iScrSession.AddSoftwareTypeL(info.UniqueSoftwareTypeName(),
-									 info.SifPluginUid(),
-									 info.InstallerSecureId(),
-									 info.ExecutionLayerSecureId(),
-									 info.MimeTypes(),
-									 &scrSwTypeNames);
-		CleanupStack::PopAndDestroy(&scrSwTypeNames);
+		iScrSession.AddSoftwareTypeL(*swTypeRegInfoArray[i]);
 		}
 	
 	RBuf uniqueNames;
@@ -667,13 +787,13 @@
 			// DEF085506 fix. remove control files (Previous SA and any of PUs) also while SA upgrading.
 			if (object->InstallType() == Sis::EInstInstallation)
 				{
-				RemoveEntryL(*existingObject);
+				RemoveEntryL(compId);
 				RemoveCleanupInfrastructureL(*existingObject, stsSession);	
 				}
 			else // PartialUpgarde case remove only registry file.
 				{
 				// Essentially, this is an uninstall except we leave the controller file intact.
-				RemoveEntryL(*existingObject);
+				RemoveEntryL(compId);
 				}
 			CleanupStack::PopAndDestroy(existingObject);
 			}
@@ -796,32 +916,40 @@
 	TInt64 transactionID;
 	TPckg<TInt64> pkgTransactionID(transactionID);
 	aMessage.ReadL(EIpcArgument2, pkgTransactionID);
-	
-	// create a integrity service object
-	Usif::RStsSession stssession;
-	stssession.OpenTransactionL(transactionID);
-	CleanupClosePushL(stssession);
+		
+	DeleteEntryL(*object, transactionID, ETrue);
 	
-	RemoveEntryL(*object);
-	RemoveCleanupInfrastructureL(*object, stssession);
-
-	// If removal is for ROM upgrade type, after removing the existing registry entry set,
-	// regenerate the Registry Entry Cache. 
-	// If any of the ROM based stub doesn't have its registry set 
-	// in appropriate path, it will create them (SCR entry & . ctl) 
-	// from the ROM based stub sis file.	
-	if ((object->InstallType() == Sis::EInstInstallation || 
-		 object->InstallType() == Sis::EInstPartialUpgrade) &&	
-		SisRegistryUtil::RomBasedPackageL(object->Uid()))
-		{	
-		// Re-add the ROM installed stub details to SCR (only those missing will be added)
-		ProcessRomDriveL();
-		}
- 	CleanupStack::PopAndDestroy(2, object);// STS 
+ 	CleanupStack::PopAndDestroy(object);
 	
 	aMessage.Complete(KErrNone);
 	}
 
+void CSisRegistrySession::DeleteEntryL(const CSisRegistryObject& aObject, TInt64 aTransactionId, TBool aCleanupRequired/*=ETrue*/)
+    {
+    // create a integrity service object
+    Usif::RStsSession stssession;
+    stssession.OpenTransactionL(aTransactionId);
+    CleanupClosePushL(stssession);
+        
+    RemoveEntryL(aObject);
+    RemoveCleanupInfrastructureL(aObject, stssession);
+    
+    // If removal is for ROM upgrade type, after removing the existing registry entry set,
+    // regenerate the Registry Entry Cache. 
+    // If any of the ROM based stub doesn't have its registry set 
+    // in appropriate path, it will create them (SCR entry & . ctl) 
+    // from the ROM based stub sis file.    
+    if ((aObject.InstallType() == Sis::EInstInstallation || 
+            aObject.InstallType() == Sis::EInstPartialUpgrade) &&  
+                SisRegistryUtil::RomBasedPackageL(aObject.Uid()) && 
+                    aCleanupRequired)
+        {   
+        // Re-add the ROM installed stub details to SCR (only those missing will be added)
+        ProcessRomDriveL();
+        }    
+    CleanupStack::PopAndDestroy(&stssession);
+    }
+
 void CSisRegistrySession::OpenRegistryUidEntryL(const RMessage2& aMessage)
 	{
 	// expects a UID as an arg 0
@@ -932,8 +1060,6 @@
 // The output will be based on the request parameters (operational mode) sent as input.
 void CSisRegistrySession::RequestStubFileEntriesL(const RMessage2& aMessage)
 	{
-	TBool stubNotFound(ETrue);
-	
 	TUid tUid;	
 	TPckg<TUid> packageUid(tUid);
 	aMessage.ReadL(EIpcArgument0, packageUid, 0);
@@ -942,117 +1068,188 @@
 	TPckg<TStubExtractionMode> packageMode(tMode);
 	aMessage.ReadL(EIpcArgument1, packageMode, 0);
 	
-	// Prepare the stub file path.
-	TDriveUnit romDrive(EDriveZ);
-	RBuf romRegistryPath;
-	romRegistryPath.CreateL(romDrive.Name(), KMaxPath);
-	CleanupClosePushL(romRegistryPath);
-	romRegistryPath.Append(KPreInstalledPath);	
-
-	RFs tFs;
-	CDir* dir;
+	TInt startingFileNo = 0;
+	if (tMode == EGetFiles)
+	    {
+        TPckg<TInt> start(startingFileNo);
+        aMessage.ReadL(EIpcArgument2, start, 0);
+	    }
 	
-	// Get stub files under the ROM stub directory (Z:\system\install\).
-	User::LeaveIfError(tFs.Connect());
-	CleanupClosePushL(tFs);
-		
-	TInt err = tFs.GetDir(romRegistryPath, KEntryAttMatchExclude | KEntryAttDir, ESortNone, dir);
+	TInt fileCount = 0;
+	RPointerArray<HBufC> fileNames;
+	CleanupResetAndDestroy<RPointerArray<HBufC> >::PushL(fileNames);
+	                    
+	TRAPD(errCode, GetStubFileInfoL(tUid, tMode, startingFileNo, fileCount, fileNames));
+	if (KErrNone == errCode)
+	    {
+	    if (tMode == EGetFiles)
+	        {
+	        // Stream via multiple IPC writes instead of
+	        // copying to a buffer and streaming from there.
+	        RIpcWriteStream ipcstream;
+	        ipcstream.Open(aMessage, EIpcArgument3);
+	        CleanupClosePushL(ipcstream);
+	        ExternalizePointerArrayL(fileNames,ipcstream);
+	        ipcstream.CommitL();
+	        aMessage.Complete(KErrNone);
+	        CleanupStack::PopAndDestroy(&ipcstream);
+	        }
+	    else if (tMode == EGetCount)
+	        {
+	        TPckgBuf<TInt> fileCnt(fileCount);
+	        aMessage.WriteL(EIpcArgument2, fileCnt);
+            aMessage.Complete(KErrNone);      
+	        }
+	    }
+	else
+	    {
+	    aMessage.Complete(errCode);
+	    }
+	CleanupStack::PopAndDestroy();
+	}
 
-	if (err == KErrNone)
-		{
-		CleanupStack::PushL(dir);	
-		TInt count(dir->Count());
-		RBuf controllerFileName;
-		controllerFileName.CreateL(KMaxFileName);
-		CleanupClosePushL(controllerFileName);
-		for (TInt index = 0; index < count; ++index)
-			{
-			controllerFileName = romRegistryPath;
-			controllerFileName.Append((*dir)[index].iName);
+void CSisRegistrySession::GetStubFilesL(const TDesC& aFileName, RPointerArray<HBufC>& aFileNames)
+    {
+    // Read the ROM stub controller
+    CFileSisDataProvider* fileProvider = CFileSisDataProvider::NewLC(iFs, aFileName);
+    Swi::Sis::CController* stubController = NULL;
+    TRAPD(errCode, stubController = Swi::Sis::CController::NewL(*fileProvider));
+    if (errCode != KErrNone)
+        {
+        // Ignore the broken stub file under the ROM stub directory.
+        DEBUG_PRINTF2(_L8("Sis Registry Server - Failed to read the stub controller. Error code %d."), errCode);
+        CleanupStack::PopAndDestroy(fileProvider);
+        User::Leave(errCode);
+        }
+    CleanupStack::PushL(stubController);
+    const RPointerArray<Sis::CFileDescription>& filesArray = stubController->InstallBlock().FileDescriptions();
+    TInt totalFileCount = filesArray.Count();
+    // Populate the files in to a temporary array.
+    for(TInt fileCount = 0; fileCount < totalFileCount; ++fileCount )
+        {
+        HBufC* fileName = filesArray[fileCount]->Target().Data().AllocLC();
+        // Adding drive letter of rom if not mentioned in stub sis file
+        TPtr a=fileName->Des();
+        if (a[0] == '!')
+            {
+            TChar driveChar;
+            User::LeaveIfError(iFs.DriveToChar(EDriveZ, driveChar));
+            a[0] = driveChar;
+            }
+
+		aFileNames.AppendL(fileName);
+		CleanupStack::Pop(fileName);
+		}
+    CleanupStack::PopAndDestroy(2, fileProvider);
+    }
+
+void CSisRegistrySession::GetStubFileInfoL(TUid aUid, TStubExtractionMode aMode, TInt aStartingFileNo, TInt& aFileCount, RPointerArray<HBufC>& aFileNames)
+    {
+    TBool stubNotFound(ETrue);
+    
+    // Prepare the stub file path.
+    TDriveUnit romDrive(EDriveZ);
+    RBuf romRegistryPath;
+    romRegistryPath.CreateL(romDrive.Name(), KMaxPath);
+    CleanupClosePushL(romRegistryPath);
+    romRegistryPath.Append(KPreInstalledPath);  
 
-			// Read the ROM stub controller
-  			CFileSisDataProvider* fileProvider = CFileSisDataProvider::NewLC(tFs, controllerFileName);
-  			Swi::Sis::CController* stubController = NULL;
-  			TRAPD(errCode, stubController = Swi::Sis::CController::NewL(*fileProvider));
-  			if (errCode != KErrNone)
-	  			{
-	  			// Ignore the broken stub file under the ROM stub directory.
-	  			DEBUG_PRINTF2(_L8("Sis Registry Server - Failed to read the stub controller. Error code %d."), errCode);
-	  			CleanupStack::PopAndDestroy(fileProvider);
-	  			continue;
-	  			}
-  			CleanupStack::PushL(stubController);
-  			
-  			// If the UID in a stub file matches the current package's UID,
-  			// populate the list of eclipsable files from the same stub file.
-  			if ( stubController->Info().Uid().Uid() == tUid )
-  				{
-  				stubNotFound = EFalse;
-  				const RPointerArray<Sis::CFileDescription>& depArray = stubController->InstallBlock().FileDescriptions();
-  				// Get as many number of files as possible that can be accomodate in client allocated buffer.
-  				if (tMode == EGetFiles)
-  					{
-  					TInt sizeRed = 0;
-  					TInt startingFileNo;	
-					TPckg<TInt> start(startingFileNo);
-					aMessage.ReadL(EIpcArgument2, start, 0);
-  						
-  					RPointerArray<TPtrC> fileNames;
-  					CleanupResetAndDestroy<RPointerArray<TPtrC> >::PushL(fileNames);
+    RFs tFs;
+    CDir* dir;
+        
+    // Get stub files under the ROM stub directory (Z:\system\install\).
+    User::LeaveIfError(tFs.Connect());
+    CleanupClosePushL(tFs);
+    
+    TInt err = tFs.GetDir(romRegistryPath, KEntryAttMatchExclude | KEntryAttDir, ESortNone, dir);
+
+    if (err == KErrNone)
+        {
+        CleanupStack::PushL(dir);   
+        TInt count(dir->Count());
+        RBuf controllerFileName;
+        controllerFileName.CreateL(KMaxFileName);
+        CleanupClosePushL(controllerFileName);
+        for (TInt index = 0; index < count; ++index)
+            {
+            controllerFileName = romRegistryPath;
+            controllerFileName.Append((*dir)[index].iName);
 
-  					TInt totalDepArrayCount = depArray.Count();
-  					// Populate the files in to a temporary array.
-  					for(TInt fileCount = startingFileNo; fileCount < totalDepArrayCount; ++fileCount )
-  						{
-  						sizeRed += depArray[fileCount]->Target().Data().Size();
-  						// If amount of data red exceeds the client buffer size, break reading.
-  						if (sizeRed > KDefaultBufferSize)
-  							{
-  							break;
-  							}
-  							
-  						// Only create a TPtrC when we know we have space available
-  						TPtrC* fileName = new(ELeave) TPtrC(depArray[fileCount]->Target().Data());
-  						CleanupStack::PushL(fileName);
-  						fileNames.AppendL(fileName);
-  						CleanupStack::Pop(fileName);   						
-	  					}	  	
-  					// Stream via multiple IPC writes instead of
-  					// copying to a buffer and streaming from there.
-  					RIpcWriteStream ipcstream;
-  					ipcstream.Open(aMessage, EIpcArgument3);
-  					CleanupClosePushL(ipcstream);
-  					ExternalizePointerArrayL(fileNames,ipcstream);
-  					ipcstream.CommitL();
-  					aMessage.Complete(KErrNone);
-  					CleanupStack::PopAndDestroy(&ipcstream);
-  					CleanupStack::PopAndDestroy(&fileNames);					
-  					}
-  				// If only the count needed, send the stub file's total entrie's count.
-  				else if (tMode == EGetCount)
-  					{
-  					TPckgBuf<TInt> fileCount(depArray.Count());
-					aMessage.WriteL(EIpcArgument2, fileCount);
-					aMessage.Complete(KErrNone);					
-  					}  				
-	  			CleanupStack::PopAndDestroy(2, fileProvider);
-	  			break;	
-  				}
-  			CleanupStack::PopAndDestroy(2, fileProvider);  		
-			}
-		CleanupStack::PopAndDestroy(2, dir); // controllerFileName
-		// If the stub file itself not found, leave with the same error info'
-		if (stubNotFound)
-  			{
-  			aMessage.Complete(KErrNotFound);
-  			}		
-		}
-	else if(err != KErrPathNotFound)
-		{
-		aMessage.Complete(err);		
-		}
-	CleanupStack::PopAndDestroy(2, &romRegistryPath); // tFs
-	}
+            // Read the ROM stub controller
+            CFileSisDataProvider* fileProvider = CFileSisDataProvider::NewLC(tFs, controllerFileName);
+            Swi::Sis::CController* stubController = NULL;
+            TRAPD(errCode, stubController = Swi::Sis::CController::NewL(*fileProvider));
+            if (errCode != KErrNone)
+                {
+                // Ignore the broken stub file under the ROM stub directory.
+                DEBUG_PRINTF2(_L8("Sis Registry Server - Failed to read the stub controller. Error code %d."), errCode);
+                CleanupStack::PopAndDestroy(fileProvider);
+                continue;
+                }
+            CleanupStack::PushL(stubController);
+                
+            // If the UID in a stub file matches the current package's UID,
+            // populate the list of eclipsable files from the same stub file.
+            if ( stubController->Info().Uid().Uid() == aUid )
+                {
+                stubNotFound = EFalse;
+                const RPointerArray<Sis::CFileDescription>& filesArray = stubController->InstallBlock().FileDescriptions();
+                // Get as many number of files as possible that can be accomodate in client allocated buffer.
+                if (aMode == EGetFiles)
+                    {
+                    TInt sizeRed = 0;
+                    TInt totalFileCount = filesArray.Count();
+                    // Populate the files in to a temporary array.
+                    for(TInt fileCount = aStartingFileNo; fileCount < totalFileCount; ++fileCount )
+                        {
+                        sizeRed += filesArray[fileCount]->Target().Data().Size();
+                        // If amount of data red exceeds the client buffer size, break reading.
+                        if (sizeRed > KDefaultBufferSize)
+                            {
+                            break;
+                            }
+                                
+                        // Only create a TPtrC when we know we have space available
+                        HBufC* fileName = filesArray[fileCount]->Target().Data().AllocLC();
+						// Adding drive letter of rom if not mentioned in stub sis file
+                        TPtr a=fileName->Des();
+                        if (a[0] == '!')
+                            {
+                            TChar driveChar;
+                            User::LeaveIfError(iFs.DriveToChar(EDriveZ, driveChar));
+                            a[0] = driveChar;
+                            }                        
+                       
+                        aFileNames.AppendL(fileName);
+                        CleanupStack::Pop(fileName);                        
+                        } 
+                    }
+                // If only the count needed, send the stub file's total entrie's count.
+                else if (aMode == EGetCount)
+                    {
+                    aFileCount = filesArray.Count();
+                    }               
+                CleanupStack::PopAndDestroy(2, fileProvider);
+                break;  
+                }
+            CleanupStack::PopAndDestroy(2, fileProvider);       
+            }
+        CleanupStack::PopAndDestroy(2, dir); // controllerFileName
+        // If the stub file itself not found, leave with the same error info'
+        
+        if (stubNotFound)
+            {  
+			CleanupStack::PopAndDestroy(2, &romRegistryPath); // tFs          
+            User::Leave(KErrNotFound);
+            }       
+        }
+    else if(err != KErrPathNotFound)
+        {     
+		CleanupStack::PopAndDestroy(2, &romRegistryPath); // tFs   
+		User::Leave(err);
+        }
+	CleanupStack::PopAndDestroy(2, &romRegistryPath); // tFs	
+    }
 
 void CSisRegistrySession::RequestRegistryEntryL(const RMessage2& aMessage)
 	{
@@ -1074,15 +1271,86 @@
 
 void CSisRegistrySession::AddDriveL(const RMessage2& aMessage)
 	{
-	TInt drive;
-	TPckg<TInt> pkgDrive(drive);
+	TInt addedDrive;
+	TPckg<TInt> pkgDrive(addedDrive);
 	aMessage.ReadL(EIpcArgument0, pkgDrive);
 
-	DEBUG_PRINTF2(_L8("Sis Registry Server - Removable drive %d added."), drive);
+	DEBUG_PRINTF2(_L8("Sis Registry Server - Removable drive %d added."), addedDrive);
+	    
+	// Get the drive character.
+	TChar drive;
+	User::LeaveIfError(iFs.DriveToChar(addedDrive, drive));
+	TUint driveChar(drive);
+	    
+	// Retrieve drive info.
+	TDriveInfo driveInfo;
+	User::LeaveIfError(iFs.Drive(driveInfo, addedDrive));
+#ifndef __WINSCW__	   
+	if(driveInfo.iDriveAtt & KDriveAttLogicallyRemovable)
+#endif	    
+	    {
+	    /*
+	    In case a logically removable drive is added,
+	    Look for the presence of the first boot marker file corresponding to it in the sisregistry private
+	    folder in C drive. If absent, assume first boot and create the marker file. 
+	    Also added a marker file in the <drive>\sys\install directory which would be used to detect a format. 
+	         
+	    Subsequent boots would look for the drive format marker to check if a format has occured and delete
+	    the registry entries.
+	    */
+	    
+	    // Create first boot marker path.
+	    _LIT(KFirstBootMarkerFilePath, "%c:%SfirstBootMarkerFileFor%c");
+	    RBuf privatePath;
+		privatePath.CreateL(KMaxPath);
+	    CleanupClosePushL(privatePath);
+	    User::LeaveIfError(iFs.PrivatePath(privatePath));
+
+	    RBuf firstBootMarkerFilePath;
+		firstBootMarkerFilePath.CreateL(KMaxPath);
+	    CleanupClosePushL(firstBootMarkerFilePath);
 
+	    TChar systemDrive = RFs::GetSystemDriveChar();
+	    firstBootMarkerFilePath.Format(KFirstBootMarkerFilePath, static_cast<TUint>(systemDrive), &privatePath, driveChar); 
+	        
+	    // Create drive format marker path.
+	    _LIT(KFormatMarkerPath, "%c:\\sys\\install\\formatMarkerFile");
+	    
+		RBuf formatMarkerPath;
+		formatMarkerPath.CreateL(KMaxPath);
+	    CleanupClosePushL(formatMarkerPath);
+		formatMarkerPath.Format(KFormatMarkerPath, driveChar); 
+	       
+		// The drive marker files are marked hidden and read-only.
+        TUint fileAttributes = KEntryAttReadOnly | KEntryAttHidden;
+
+	    if(!SisRegistryUtil::FileExistsL(iFs, firstBootMarkerFilePath))
+	        {
+	        // First boot detected. Add the first boot marker file as well as the format marker on the drive.
+	        SisRegistryUtil::CreateFileWithAttributesL(iFs, firstBootMarkerFilePath);
+	        TRAPD(err,SisRegistryUtil::CreateFileWithAttributesL(iFs, formatMarkerPath, fileAttributes);)
+			if (err != KErrNone && err != KErrAlreadyExists)
+				{
+				User::Leave(err);
+				}   
+	        }
+	    else
+	        {
+	        // Subsequent boot. Check for the presence of a marker file <drive>\sys\install directory.
+	        // If absent, assume format.
+	        if(!SisRegistryUtil::FileExistsL(iFs, formatMarkerPath))
+	            {
+	            DriveFormatDetectedL(TDriveUnit(addedDrive));
+	            //Add missing format marker file
+	            SisRegistryUtil::CreateFileWithAttributesL(iFs, formatMarkerPath, fileAttributes);
+	            }           
+	        }
+		CleanupStack::PopAndDestroy(3, &privatePath);
+	    }
+	    
 	// Find flagging controllers for non-preinstalled packages on
 	// this drive and do cleanup if necessary
-	ProcessRemovableDriveL(drive);
+	ProcessRemovableDriveL(addedDrive);
 
 	aMessage.Complete(KErrNone);
 	}
@@ -1094,33 +1362,32 @@
 	
 	aMessage.ReadL(EIpcArgument0, executableSid);
 
-	// componentId and index of the first matching Sid in CompSID<index> array gets populated 
-	// by call to GetCompIdAndCompSidIndexL().The value of index is redundant here.
-	TComponentId componentId = 0;
-	TInt index = 0;
-	GetCompIdAndCompSidIndexL(sid, componentId, index);
+	// Retrieve the component Id's list for the Sid.
+	RArray<TComponentId> componentIdList;
+	CleanupClosePushL(componentIdList);
 	
-	if(componentId == KErrNotFound)
+	GetComponentIdsForSidL(sid, componentIdList);
+	
+	if(componentIdList.Count() == 0)
 		{
 		User::Leave(KErrNotFound);
 		}
 		
 	CSisRegistryPackage *package = NULL;
-	ScrHelperUtil::ReadFromScrL(iScrSession, componentId, package);
+	ScrHelperUtil::ReadFromScrL(iScrSession, componentIdList[0], package);
 	CleanupStack::PushL(package);
 	
 	DEBUG_PRINTF5(_L("Sis Registry Server - SID 0x%08x is owned by package UID: 0x%08x, Name: %S, Vendor: %S."),
 		sid.iUid, package->Uid().iUid, &(package->Name()), &(package->Vendor()));
 	
 	SisRegistryUtil::SendDataL(aMessage, *package, EIpcArgument1);
-	CleanupStack::PopAndDestroy(package);
+	CleanupStack::PopAndDestroy(2, &componentIdList);
 	
 	}
 
 void CSisRegistrySession::RequestSidToFileNameL(const RMessage2& aMessage)
 	{
 	TInt thirdParameter; 
-	TDriveUnit expectedDrive;
 	TUid sid;
 	TPckg<TUid> fileSid(sid);
 
@@ -1133,19 +1400,13 @@
 
 	// Obtain the componentId and array index of CompSID<index> custom property matching a given aSid.
 	TComponentId componentId = 0;
-	TInt index = 0;
-	GetCompIdAndCompSidIndexL(sid, componentId, index, thirdParameter);
+	HBufC* fileName = SidToFileNameL(sid, componentId, thirdParameter);
 	
 	if(componentId == KErrNotFound)
 		{
 		User::Leave(KErrNotFound);
 		}
-
-  	// retrieve the CompSidFileName property value , based on the index obtained.
-  	TBuf<KSmlBufferSize> compSidFileName(KEmptyString);
-  	compSidFileName.Format(KCompSidFileNameFormat, index);
-		
-	HBufC* fileName = GetStrPropertyValueL(iScrSession, componentId, compSidFileName);
+	
 	CleanupStack::PushL(fileName);
 	DEBUG_PRINTF3(_L("Sis Registry Server - SID 0x%08x maps to file '%S'."),
 		sid.iUid, fileName);
@@ -1222,8 +1483,8 @@
 	TPckgC<Usif::TComponentId> componentIdPckg(componentId);
 	aMessage.WriteL(EIpcArgument1, componentIdPckg);
 	aMessage.Complete(KErrNone);
-	}
-	
+	}	
+
 void CSisRegistrySession::RequestHashL(const RMessage2& aMessage)
 	{
 	// get file name
@@ -1280,17 +1541,18 @@
 	aMessage.ReadL(EIpcArgument0, uid);
 	
 	TBool isPresent = EFalse;
-	TComponentId componentId = 0;
-	TInt index = 0;
+	RArray<TComponentId> componentIdList;
+	CleanupClosePushL(componentIdList);
 	
-	// If the supplied SID is present in SCR, then a call to GetCompIdAndCompSidIndexL succeeds.
-	// Else the componenetId will result in KErrNotFound.	
-	GetCompIdAndCompSidIndexL(uid(), componentId, index);
-	if(componentId != KErrNotFound)
+	// If the supplied SID is present in SCR, then a call to GetComponentIdsForSidL succeeds.
+	// Else componentIdList would be empty.	
+	GetComponentIdsForSidL(uid(), componentIdList);
+	
+	if(componentIdList.Count() != 0)
 		{
 		isPresent = ETrue;
 		}
-
+	CleanupStack::PopAndDestroy(&componentIdList);
 	DEBUG_CODE_SECTION(
 		if (isPresent)
 			{
@@ -1381,6 +1643,16 @@
 	aMessage.Complete(KErrNone);
 	}
 
+void CSisRegistrySession::SetComponentPresenceL(const RMessage2& aMessage)
+    {
+    TPckgBuf<Usif::TComponentId> componentId;
+    TPckgBuf<TBool> componentPresence;
+    aMessage.ReadL(EIpcArgument0, componentId, 0);
+    aMessage.ReadL(EIpcArgument1, componentPresence, 0);
+    iScrSession.SetIsComponentPresentL(componentId(), componentPresence());
+    aMessage.Complete(KErrNone);
+    }
+
 // Helper methods
 
 TBool CSisRegistrySession::IsRegisteredL(const TUid& aUid)
@@ -1440,6 +1712,13 @@
 	return ScrHelperUtil::IsUidAndNamePresentL(iScrSession, aUid, aPackageName);
 	}
 
+
+void CSisRegistrySession::RemoveEntryL(const TComponentId aCompId)
+    {
+    iScrSession.DeleteApplicationEntriesL(aCompId);
+    iScrSession.DeleteComponentL(aCompId);
+    }
+
 void CSisRegistrySession::RemoveEntryL(const CSisRegistryPackage& aPackage)
 	{
 	DEBUG_PRINTF4(_L("Sis Registry Server - Removing the entry from Software Component Registry of package : UID: 0x%08x, Name: %S, Vendor: %S ."),
@@ -1454,8 +1733,8 @@
 			aPackage.Uid().iUid, &aPackage.Name(), &aPackage.Vendor());
 		User::Leave(KErrNotFound);
 		}
-
-	iScrSession.DeleteComponentL(compId);
+	
+	RemoveEntryL(compId);
 	}
 
 void CSisRegistrySession::RemoveCleanupInfrastructureL(const CSisRegistryObject& aObject, RStsSession& aStsSession)
@@ -1628,12 +1907,79 @@
 	// Store the SIS Registry Object in to the Software Component Registry.
 	TComponentId compId = 0;
 	ScrHelperUtil::AddComponentL(iScrSession, compId, aObject, aOpType);
+	
+	
+	
 	// Set SCOMO state to activated - when SWI Registry supports de-activation, should be changed accordingly
 	iScrSession.SetScomoStateL(compId, EActivated);
 	
 	return compId;
 	}
 	
+void CSisRegistrySession::AddAppsFromStubL(TComponentId aCompId, const TDesC& aFileName)
+    {
+    RPointerArray<HBufC> romFiles;
+    CleanupResetAndDestroy<RPointerArray<HBufC> >::PushL(romFiles);
+    GetStubFilesL(aFileName, romFiles);
+    RPointerArray<HBufC> apparcRegFiles;
+    CleanupResetAndDestroy<RPointerArray<HBufC> >::PushL(apparcRegFiles);
+       
+    for(TInt i=0; i< romFiles.Count(); i++)
+        {
+        TInt ret = romFiles[i]->Match(KApparcRegFileNameFormat);
+        
+        TBuf<100> fileName(*romFiles[i]);
+        if (KErrNotFound != ret)
+            {
+            HBufC* file = romFiles[i]->AllocL();
+            apparcRegFiles.Append(file);
+            }
+        }
+             
+	const TInt appCount = apparcRegFiles.Count();
+	if (appCount)
+		{
+		RSisLauncherSession launcher;
+		CleanupClosePushL(launcher);
+		User::LeaveIfError(launcher.Connect());
+		RFs fs;
+		CleanupClosePushL(fs);
+		User::LeaveIfError(fs.Connect());
+		User::LeaveIfError(fs.ShareProtected());
+		RArray<TLanguage> appLanguages;
+		CleanupClosePushL(appLanguages);
+		appLanguages.AppendL(User::Language());
+    
+		for (TInt i=0; i<appCount; ++i)
+			{
+			TInt bufLen = apparcRegFiles[i]->Size();
+			HBufC* buf = HBufC::NewLC(bufLen);
+			TPtr appFile = buf->Des();
+			appFile.Format(_L("%S"), apparcRegFiles[i]);
+			appFile.Replace(0, 1, _L("z"));
+			
+			RFile file;
+			CleanupClosePushL(file);
+			User::LeaveIfError(file.Open(fs, appFile, EFileRead));
+			Usif::CApplicationRegistrationData* appRegData  = launcher.SyncParseResourceFileL(file, appLanguages);
+			CleanupStack::PushL(appRegData);
+			
+			TRAPD(err, ScrHelperUtil::AddApplicationEntryL(iScrSession, aCompId, *appRegData));
+			if (err == KErrAlreadyExists)
+                {
+                // Delete the existing application entry, which is not associated with any package 
+                ScrHelperUtil::DeleteApplicationEntryL(iScrSession, appRegData->AppUid());
+                ScrHelperUtil::AddApplicationEntryL(iScrSession, aCompId, *appRegData);
+                }
+			
+			CleanupStack::PopAndDestroy(appRegData);
+			CleanupStack::PopAndDestroy(2, buf);
+			}
+		CleanupStack::PopAndDestroy(3, &launcher); 
+		}
+	CleanupStack::PopAndDestroy(2, &romFiles);        
+    }
+
 void CSisRegistrySession::AddControllerL(const CSisRegistryObject& aObject, 
 							RStsSession& aStsSession, const TDesC8& aBuffer, const TInt aDrive)		
 	{
@@ -2097,66 +2443,91 @@
 	CleanupStack::PopAndDestroy(&entryList);
 	}
 
-void CSisRegistrySession::GetCompIdAndCompSidIndexL(const TUid& aSid, TComponentId& aComponentId, TInt& aIndex, TInt aExpectedDrive)
-	{
+void CSisRegistrySession::GetComponentIdsForSidL(TUid aSid, RArray<TComponentId>& aComponentIds)
+	{   
+    _LIT(KComponentSidPropertyRegex, "CompSid%");
 	CComponentFilter* componentFilter = CComponentFilter::NewLC();
 	componentFilter->SetSoftwareTypeL(KSoftwareTypeNative);	
-	componentFilter->AddPropertyL(KCompSidsPresent, 1);
-		
-	// Retrieve the componentId of all the components with SIDs from the SCR.
-	RArray<TComponentId> componentIdList;
-	CleanupClosePushL(componentIdList);
-	iScrSession.GetComponentIdsL(componentIdList, componentFilter);
-		
-	TInt componentCount = componentIdList.Count();
-	RArray<TUid> sidArray;
-	CleanupClosePushL(sidArray);
-	TBool sidMatchFound = EFalse;
-
-	for(TInt i = 0; i < componentCount && !sidMatchFound; ++i)
-		{
-		TComponentId componentId = componentIdList[i];
-		sidArray.Reset();
-		ScrHelperUtil::InternalizeSidArrayL(iScrSession, componentId, sidArray);
-		
-		// index of the first matching SID in the array.
-		aIndex = sidArray.Find(aSid);	
-		if(aIndex == KErrNotFound)
-			continue;
+	componentFilter->AddPropertyL(KComponentSidPropertyRegex, static_cast<TUint>(aSid.iUid), CComponentFilter::ELike, CComponentFilter::EEqual);		
+	
+	// Retrieve all component Id's 
+	iScrSession.GetComponentIdsL(aComponentIds, componentFilter);
+	
+	CleanupStack::PopAndDestroy(componentFilter);
+	}
+	
 
-		// If the search is narrowed to a particular drive, get the file name and check whether it matches the drive
-		if (aExpectedDrive != -1)
-			{
-			TBuf<KSmlBufferSize> compSidFileName(KEmptyString);
-			compSidFileName.Format(KCompSidFileNameFormat, aIndex);
+HBufC* CSisRegistrySession::SidToFileNameL(TUid aSid, TComponentId& aComponentId, TInt aExpectedDrive)
+    {    
+    aComponentId = KErrNotFound;
+    RArray<TComponentId> componentIdList;
+    CleanupClosePushL(componentIdList);
+    
+    // Retrieve the component Id's.
+    GetComponentIdsForSidL(aSid, componentIdList);
+    
+    if(componentIdList.Count() == 0)
+        {
+        CleanupStack::PopAndDestroy(&componentIdList);
+        return NULL;
+        }
+    
+    RArray<TUid> sidArray;
+    CleanupClosePushL(sidArray);
+    TInt index(0);
+    TBuf<KSmlBufferSize> compSidFileName(KEmptyString);
+    HBufC* fileName = NULL;
+    
+    
+    if(aExpectedDrive == -1)
+        {
+        // No drive specified, just return the first component Id and the corresponding Sid index.  
+        aComponentId = componentIdList[0];
+        sidArray.Reset();
+        ScrHelperUtil::InternalizeSidArrayL(iScrSession, aComponentId, sidArray);
+        index = sidArray.Find(aSid);   
+        compSidFileName.Format(KCompSidFileNameFormat, index);   
+        fileName = GetStrPropertyValueL(iScrSession, aComponentId, compSidFileName); 
+        }
+    else
+        {
+        // If the search is narrowed to a particular drive, get the file name and check whether it matches the drive
+    
+        for(TInt i=0; i<componentIdList.Count(); ++i)
+            {
+            sidArray.Reset();
+            ScrHelperUtil::InternalizeSidArrayL(iScrSession, componentIdList[i], sidArray);
+            index = sidArray.Find(aSid);
+            
+            compSidFileName.Format(KCompSidFileNameFormat, index); 
+            fileName = GetStrPropertyValueL(iScrSession, componentIdList[i], compSidFileName);   
+			CleanupStack::PushL(fileName);
+          
+            if (fileName->Length() == 0)
+                {
+				 CleanupStack::PopAndDestroy(fileName);
+                 fileName = NULL;
+                 continue;
+                }
+            
+            TInt drive; 
+            User::LeaveIfError(RFs::CharToDrive((*fileName)[0], drive));
+            if(drive != aExpectedDrive)
+                {
+                CleanupStack::PopAndDestroy(fileName);
+                fileName = NULL;
+                continue;
+                }        
+            
+            //Expected drive found !
+            aComponentId = componentIdList[i];
+			CleanupStack::Pop(fileName);
+            break;
+            }     
+        } 	
+	CleanupStack::PopAndDestroy(2, &componentIdList);	
+	return fileName; // Ownership with caller.
 			
-			HBufC* fileName = GetStrPropertyValueL(iScrSession, componentId, compSidFileName);
-			CleanupStack::PushL(fileName);			
-			if (fileName->Length() == 0)
-				{
-				CleanupStack::PopAndDestroy(fileName);
-				continue;
-				}
-			TInt drive; 
- 			User::LeaveIfError(RFs::CharToDrive((*fileName)[0], drive));
- 			if(drive != aExpectedDrive)
- 				{
-				CleanupStack::PopAndDestroy(fileName);
- 				continue;
- 				}			
-			CleanupStack::PopAndDestroy(fileName);
-			}
-			
-		aComponentId = componentId;
-		sidMatchFound = ETrue;
-		}
-	
-	CleanupStack::PopAndDestroy(3, componentFilter); // componentIdList and sidArray.
-	if(!sidMatchFound)
-		{
-		// No component contains aSid.
-		aComponentId = KErrNotFound;
-		}
 	}
 
 TBool CSisRegistrySession::ModifiableL(const TDesC& aFileName)
@@ -2337,12 +2708,11 @@
 	TBool overwriteRegEntry = EFalse;
 	
     TBool isStubRegistered = IsRegisteredL(object->Uid(), object->Name());
-    if ( isFwUpdated && isStubRegistered )
+    if ( iIsFirstInit && isStubRegistered )
 	    {
 		TComponentId compId = ScrHelperUtil::GetComponentIdL(iScrSession, object->Uid(), object->Index());
 		TSisPackageTrust trustStatus;
 		trustStatus = static_cast<TSisPackageTrust>(GetIntPropertyValueL(iScrSession, compId, KCompTrust,  EFalse, KDefaultTrustValue));
-		//ScrHelperUtil::ReadFromScrL(iSession.ScrSession(), iComponentId, trustStatus);
 	    if ( ESisPackageBuiltIntoRom == trustStatus )
 	        {
             DEBUG_PRINTF2(_L8("Sis Registry Server - Attempting to delete registry entry 0x%08x as a firmware update detected"), object->Uid().iUid);
@@ -2350,16 +2720,9 @@
             // If the component being removed has registered software types, unregister them now.
             // This operation deletes MIME types mapping from AppArc and therefore is not transactional.
             UnregisterSoftwareTypesL(compId);
-
-            CSisRegistryObject* object = CSisRegistryObject::NewLC();
-            ScrHelperUtil::GetComponentL(iScrSession, compId, *object);
+                
+            RemoveEntryL(compId);           
 
-            DEBUG_PRINTF4(_L("Sis Registry Server - Removing package registry entry for UID: %08x, Name: %S, Vendor %S."),
-                object->Uid().iUid, &(object->Name()), &(object->Vendor()));
-                
-            RemoveEntryL(*object);           
-
-            CleanupStack::PopAndDestroy();
             overwriteRegEntry = ETrue;
 	        }
 	    }
@@ -2368,7 +2731,8 @@
 	if ( !isStubRegistered || overwriteRegEntry )
 		{
 		// update cache or just call refresh
-		AddEntryL(*object, Usif::EScrCompHidden); // EScrCompHidden is supplied not to create any log for the ROM controller on the SCR side.
+		TComponentId compId = AddEntryL(*object, Usif::EScrCompHidden); // EScrCompHidden is supplied not to create any log for the ROM controller on the SCR side.
+		AddAppsFromStubL(compId, aFileName);
 		
 		// store a copy of the controller
 		HBufC* name = SisRegistryUtil::BuildControllerFileNameLC(object->Uid(), object->Index(),
@@ -2634,27 +2998,562 @@
 
 void CSisRegistrySession::UpdateRecentFWVersionL()
     {
-        //Write a cache of the ROM version to a separate stream
-        //Build the filename for the cache file
-        TChar sysDrive = RFs::GetSystemDriveChar();
-        TInt maxSizeofFileName = KROMVersionStringCacheDir().Length() + KROMVersionStringCacheFileName().Length() + 1;
-        RBuf romVersionCacheFileName;
-        romVersionCacheFileName.CreateL(maxSizeofFileName);
-        romVersionCacheFileName.CleanupClosePushL();
-        romVersionCacheFileName.Append(sysDrive);
-        romVersionCacheFileName.Append(KROMVersionStringCacheDir());
-        romVersionCacheFileName.Append(KROMVersionStringCacheFileName());
+    //Write a cache of the ROM version to a separate stream
+    //Build the filename for the cache file
+    TChar sysDrive = RFs::GetSystemDriveChar();
+    TInt maxSizeofFileName = KROMVersionStringCacheDir().Length() + KROMVersionStringCacheFileName().Length() + 1;
+    RBuf romVersionCacheFileName;
+    romVersionCacheFileName.CreateL(maxSizeofFileName);
+    romVersionCacheFileName.CleanupClosePushL();
+    romVersionCacheFileName.Append(sysDrive);
+    romVersionCacheFileName.Append(KROMVersionStringCacheDir());
+    romVersionCacheFileName.Append(KROMVersionStringCacheFileName());
+    
+    iFs.MkDirAll(romVersionCacheFileName);
+    //Read the length & value from it, if any.
+    RFileWriteStream romVerStream;
+    User::LeaveIfError(romVerStream.Replace(iFs,romVersionCacheFileName,EFileWrite));
+    CleanupClosePushL(romVerStream);
+    TBuf<KInfoBufLength> version;
+    GetSWVersion(version);
+
+    // Write even if SysUtil returns err since all conditions are taken care during restore.
+    romVerStream.WriteUint32L(version.Length());
+    romVerStream.WriteL(version);
+    CleanupStack::PopAndDestroy(2); //romVerStream, romVersionCacheFileName
+    }
+
+void CSisRegistrySession::AppRegInfoEntryL(const RMessage2& aMessage)
+    {
+    Usif::TComponentId componentId = aMessage.Int0();
+
+	RIpcReadStream stream;
+	CleanupClosePushL(stream);
+	stream.Open(aMessage, 1);
+	CApplicationRegistrationData *applicationData = CApplicationRegistrationData::NewL(stream);
+	CleanupStack::PopAndDestroy(&stream);
+	CleanupStack::PushL(applicationData);
+
+    TRAPD(err, ScrHelperUtil::AddApplicationEntryL(iScrSession, componentId, *applicationData));
+    if (err == KErrAlreadyExists)
+        {
+        //Delete the existing application
+        ScrHelperUtil::DeleteApplicationEntryL(iScrSession, applicationData->AppUid());
+        err = KErrNone;
+        TRAP(err, ScrHelperUtil::AddApplicationEntryL(iScrSession, componentId, *applicationData));
+        }
+    aMessage.Complete(err);
+    CleanupStack::PopAndDestroy(applicationData);
+    }
+
+void CSisRegistrySession::GetComponentIdForPackageL(const RMessage2& aMessage)
+    {
+    Usif::TComponentId componentId(0);
+    TInt strLen = aMessage.GetDesLengthL(EIpcArgument0);
+    HBufC* packageName = HBufC::NewLC(strLen);
+    TPtr pkgname = packageName->Des();
+    aMessage.ReadL(EIpcArgument0, pkgname, 0);
+    
+    strLen = aMessage.GetDesLengthL(EIpcArgument1);
+    HBufC* vendorName = HBufC::NewLC(strLen);
+    TPtr vndrname = vendorName->Des();
+    aMessage.ReadL(EIpcArgument1, vndrname, 0);
+    componentId = ScrHelperUtil::GetComponentIdL(iScrSession, *packageName, *vendorName);
+    if (!componentId)
+        {
+        DEBUG_PRINTF2(_L8("Sis Registry Server - Component id for package Name %S was not found."), packageName);
+        User::Leave(KErrNotFound);
+        } 
+    CleanupStack::PopAndDestroy(2, packageName); //vendorName
+    TPckgC<Usif::TComponentId> componentIdPckg(componentId);
+    aMessage.WriteL(EIpcArgument2, componentIdPckg);
+    aMessage.Complete(KErrNone);
+    }
+
+void CSisRegistrySession::GetAppUidsForComponentL(const RMessage2& aMessage)
+    {
+    Usif::TComponentId compId;
+    TPckg<Usif::TComponentId> componentId(compId);
+    RArray<TUid> appUids;
+    CleanupClosePushL(appUids);
+    aMessage.ReadL(EIpcArgument0, componentId);
+    iScrSession.GetAppUidsForComponentL(compId, appUids);        
+    SisRegistryUtil::SendDataArrayL(aMessage, appUids, EIpcArgument1);        
+    CleanupStack::PopAndDestroy(&appUids);
+    }
+
+void CSisRegistrySession::GetComponentIdsForUidL(const RMessage2& aMessage)
+    {
+    TUid Uid;
+    TPckg<TUid> pkgUid(Uid);
+    aMessage.ReadL(EIpcArgument0, pkgUid);
+    
+    // Setup a filter based on the input parameters
+    Usif::CComponentFilter* compFilter = Usif::CComponentFilter::NewLC();
+    compFilter->AddPropertyL(KCompUid, Uid.iUid);   
+    compFilter->SetSoftwareTypeL(Usif::KSoftwareTypeNative);    
+    RArray<Usif::TComponentId> componentIdList;
+    CleanupClosePushL(componentIdList);
+    iScrSession.GetComponentIdsL(componentIdList, compFilter);    
+    if(componentIdList.Count() == 0)
+        {
+        // No components are found in the SCR. So, return false
+        CleanupStack::PopAndDestroy(2, compFilter); // componentIdList
+        DEBUG_PRINTF2(_L8("Sis Registry Server - Unable to find component for UID: %x"), Uid.iUid);  
+        SisRegistryUtil::SendDataArrayL(aMessage, componentIdList, EIpcArgument1);
+        return;
+        }
+    SisRegistryUtil::SendDataArrayL(aMessage, componentIdList, EIpcArgument1);        
+    CleanupStack::PopAndDestroy(2, compFilter);    
+    }
+
+void CSisRegistrySession::RegisterAllAppL(RBuf& aApparcRegFilePath)
+    {
+	CDir* dir;
+	TInt err = iFs.GetDir(aApparcRegFilePath, KEntryAttMatchExclude | KEntryAttDir, ESortNone, dir);	
+	DEBUG_PRINTF3(_L("Sis Registry Server - Reading apparc registration file directory(%S) returned %d."), &aApparcRegFilePath, err);
+	
+	if (err == KErrNone)
+		{
+		CleanupStack::PushL(dir);
+
+		TInt count(dir->Count());
+		RBuf appRegFileName;
+		appRegFileName.CreateL(KMaxFileName);
+		CleanupClosePushL(appRegFileName);
+		RSisLauncherSession launcher;
+		CleanupClosePushL(launcher);
+		User::LeaveIfError(launcher.Connect());
+		RFs fs;
+		CleanupClosePushL(fs);
+		User::LeaveIfError(fs.Connect());
+		User::LeaveIfError(fs.ShareProtected());
+		RArray<TLanguage> appLanguages;
+		CleanupClosePushL(appLanguages);
+		appLanguages.AppendL(User::Language());
+		for (TInt index = 0; index < count; ++index)
+			{
+			appRegFileName = TParsePtrC(aApparcRegFilePath).DriveAndPath();
+			appRegFileName.Append((*dir)[index].iName);
+			RFile file;
+			CleanupClosePushL(file);
+			User::LeaveIfError(file.Open(fs, appRegFileName, EFileRead));
+			
+			Usif::CApplicationRegistrationData* appRegData = NULL;			
+			TRAPD(result, appRegData = launcher.SyncParseResourceFileL(file, appLanguages));
+			if (result == KErrNone)
+			    {
+                CleanupStack::PushL(appRegData);
+                TComponentId compId = 0; // ROM application
+                TRAPD(res, ScrHelperUtil::AddApplicationEntryL(iScrSession, compId, *appRegData););
+                if (res != KErrNone)
+                    {
+                    // log it only, we cannot stop as the next might be ok
+                    DEBUG_PRINTF3(_L("Sis Registry Server - Failed to register in ROM application %S. Error code %d."), &appRegFileName, res);
+                    }
+                CleanupStack::PopAndDestroy(appRegData);
+			    }
+			else
+			    DEBUG_PRINTF2(_L8("Sis Registry Server - Parsing in ROM application . Error code %d."), result);
+			                
+			CleanupStack::PopAndDestroy(&file);
+			}
+
+		CleanupStack::PopAndDestroy(5, dir); // appRegFileName, launcher, fs, appLanguages
+		}
+	else if(err != KErrPathNotFound)
+		{
+		User::Leave(err);
+		}
+    }
+
+void CSisRegistrySession::DriveFormatDetectedL(TDriveUnit aDrive)
+    {
+    DEBUG_PRINTF2(_L("Sis Registry Server - Drive format detected for drive %d"), static_cast<TInt>(aDrive));
+    
+    Usif::RStsSession stsSession;
+    TInt64 transactionId = stsSession.CreateTransactionL();
+    CleanupClosePushL(stsSession);
+    
+	//Create SCR Transaction
+    iScrSession.CreateTransactionL();
+    
+    RArray<TComponentId> foundComponentIds;
+    CleanupClosePushL(foundComponentIds);
         
-        //Read the length & value from it, if any.
-        RFileWriteStream romVerStream;
-        User::LeaveIfError(romVerStream.Replace(iFs,romVersionCacheFileName,EFileWrite));
-        CleanupClosePushL(romVerStream);
-        TBuf<KInfoBufLength> version;
-        GetSWVersion(version);
+    TDriveList filterFormatDrive;
+    filterFormatDrive.FillZ(KMaxDrives);
+    filterFormatDrive[static_cast<TInt>(aDrive)] = 1;
+    
+    CComponentFilter* componentFilter = CComponentFilter::NewLC();
+    componentFilter->SetInstalledDrivesL(filterFormatDrive);
+        
+    iScrSession.GetComponentIdsL(foundComponentIds, componentFilter);
+    
+    TBool processRomDrive = EFalse;
+    for(TInt i=0; i < foundComponentIds.Count(); ++i)
+        {
+        CSisRegistryObject* object = CSisRegistryObject::NewLC();
+        ScrHelperUtil::GetComponentL(iScrSession, foundComponentIds[i], *object);
+        TUint installedDrives = object->Drives();
+            
+        if(installedDrives & (1 << aDrive))
+            {
+            if (!processRomDrive && 
+                    (object->InstallType() == Sis::EInstInstallation || object->InstallType() == Sis::EInstPartialUpgrade) &&
+                        SisRegistryUtil::RomBasedPackageL(object->Uid()))
+                {   
+                processRomDrive = ETrue;                   
+                }  
+                    
+            // Retrieve all the associated files.
+            RPointerArray<CSisRegistryFileDescription>& fileDescriptions = object->FileDescriptions();
+            _LIT(KHashPathFormat, "%c:\\sys\\hash\\%S");
+            for(TInt j=0; j<fileDescriptions.Count(); ++j)
+                {
+                const TDesC& targetPath = fileDescriptions[j]->Target();
+                        
+                // Get the drive on which the file is present.
+                TInt drive; 
+                User::LeaveIfError(RFs::CharToDrive(targetPath[0], drive));
+                        
+                // If the file is a binary ( present in \sys\bin), delete the corresponding hash present in 
+                // C:\sys\hash
+                        
+                if(KErrNotFound != targetPath.FindF(KBinPath))
+                    {
+                    // Retrieve the filename from the target path.
+                    TParsePtrC parser(targetPath);
+					HBufC* fileName = parser.NameAndExt().AllocLC();
+                    
+                    TChar systemDrive = RFs::GetSystemDriveChar();
+                    
+					// Create the hash file path.
+                    RBuf hashFilePath;
+                    hashFilePath.CreateL(KMaxPath);
+                    CleanupClosePushL(hashFilePath);
+                    hashFilePath.Format(KHashPathFormat, static_cast<TUint>(systemDrive), fileName);
+                            
+                    // Delete hash file.
+                    SisRegistryUtil::DeleteFile(iFs, hashFilePath); //Ignore return code.
+                    
+					CleanupStack::PopAndDestroy(2, fileName);
+					}
+                        
+                if(aDrive == TDriveUnit(drive))
+                    {
+                    // File does not exist on disk as the drive is assumed to have been formatted.
+                    continue;
+                    }
+                SisRegistryUtil::DeleteFile(iFs, targetPath); //Ignore return code.           
+                }
+                    
+            DeleteEntryL(*object, transactionId, EFalse);
+            CleanupStack::PopAndDestroy(object);
+            }
+        }
 
-        // Write even if SysUtil returns err since all conditions are taken care during restore.
-        romVerStream.WriteUint32L(version.Length());
-        romVerStream.WriteL(version);
-        CleanupStack::PopAndDestroy(2); //romVerStream, romVersionCacheFileName
+    if(processRomDrive)
+        {
+        // Re-add the ROM installed stub details to SCR (only those missing will be added)
+        ProcessRomDriveL();
+        }
+    
+    //Commit the changes.
+    stsSession.CommitL();
+    iScrSession.CommitTransactionL();
+
+    CleanupStack::PopAndDestroy(3, &stsSession);
     }
 
+void CSisRegistrySession::AddAppRegInfoL(const RMessage2& aMessage)
+    {   
+    //This API is for use during development/debug use only; not used in production software
+    
+    TUint regFileNameLen = aMessage.GetDesLengthL(EIpcArgument0);
+    HBufC* regFileName = HBufC::NewLC(regFileNameLen);
+    TPtr namePtr = regFileName->Des();
+    aMessage.ReadL(EIpcArgument0, namePtr);
+    
+    Usif::CApplicationRegistrationData* appRegData = NULL;
+    //Check if the file name passed is valid reg file or not , if valid then parse
+    TRAPD(result, ValidateAndParseAppRegFileL(*regFileName, appRegData, EFalse));
+    
+    if (result == KErrNone)
+        {
+        CleanupStack::PushL(appRegData);
+        TComponentId compId = 0; 
+        TUid appUid = appRegData->AppUid();
+        //Check if component exists for the appUid, if then append the app reg info to the same compId(base)        
+        TRAP_IGNORE(compId = iScrSession.GetComponentIdForAppL(appUid));
+        TRAPD(res, ScrHelperUtil::AddApplicationEntryL(iScrSession, compId, *appRegData));
+        if (res != KErrNone && res != KErrAlreadyExists )
+            {
+            DEBUG_PRINTF2(_L("Sis Registry Server - Failed to add app registration data of in the SCR . Error code %d."), res);
+            CleanupStack::PopAndDestroy(2, regFileName); //appRegData
+            aMessage.Complete(res);
+            return;
+            }        
+        else if (res == KErrAlreadyExists)
+            {   
+            // Delete the existing application entry, which is not associated with any package 
+            ScrHelperUtil::DeleteApplicationEntryL(iScrSession, appUid);            
+            ScrHelperUtil::AddApplicationEntryL(iScrSession, compId, *appRegData);
+            }
+        
+        //Notify Apparc of the new app
+        RSisLauncherSession launcher;
+        CleanupClosePushL(launcher);
+        User::LeaveIfError(launcher.Connect());
+        TAppUpdateInfo newAppInfo;
+        RArray<TAppUpdateInfo> affectedApps;    
+        CleanupClosePushL(affectedApps);
+        newAppInfo = TAppUpdateInfo(appUid, EAppInstalled);
+        affectedApps.AppendL(newAppInfo);
+        launcher.NotifyNewAppsL(affectedApps);
+        CleanupStack::PopAndDestroy(3, appRegData); // affectedApps, launcher
+        }
+    else
+        {
+        DEBUG_PRINTF2(_L8("Sis Registry Server - Parsing application registration info. Error code %d."), result);
+        }
+    
+    CleanupStack::PopAndDestroy(regFileName);
+    aMessage.Complete(result);
+    }
+
+void CSisRegistrySession::RemoveAppRegInfoL(const RMessage2& aMessage)
+    {
+    //This API is for use during development/debug use only; not used in production software
+    
+    TUint regFileNameLen = aMessage.GetDesLengthL(EIpcArgument0);
+    HBufC* regFileName = HBufC::NewLC(regFileNameLen);
+    TPtr namePtr = regFileName->Des();
+    aMessage.ReadL(EIpcArgument0, namePtr);
+    
+    Usif::CApplicationRegistrationData* appRegData = NULL;
+    // Check if the file name passed is valid reg file or not , if valid then parse it
+    TRAPD(result, ValidateAndParseAppRegFileL(*regFileName, appRegData, EFalse));
+    
+    if(result == KErrNone)
+        {
+        TUid appUid = appRegData->AppUid();
+        delete appRegData;
+        appRegData = NULL;
+    
+        // Check if component exists for the appUid
+        TComponentId compId(0);
+        TRAPD(err,compId = iScrSession.GetComponentIdForAppL(appUid));
+        
+        // Check if appUid(reg file data to be removed) is registered with scr 
+        if(err != KErrNone)
+            {
+            DEBUG_PRINTF2(_L8("Sis Registry Server -Reg file (%S) not registered with scr"), &regFileName);
+            User::Leave(KErrNotFound);
+            }
+        
+        TBool isAppReRegistered(ETrue);
+        if(compId == 0)                                   // If component Id is 0 i.e. for in-rom *_reg.rsc files(without stub association) or inserted using AddAppRegInfoL().
+            {                        
+            TDriveUnit romDrive(SisRegistryUtil::SystemRomDrive());
+            RBuf romRegFilesPath;
+            CleanupClosePushL(romRegFilesPath);
+            romRegFilesPath.CreateL(romDrive.Name(), KMaxPath);            
+            romRegFilesPath.Append(KApparcRegFilePath);
+           
+            /* Scan the reg files in apparc's pvt folder's in rom, and compare their app uid with the uid of the reg file to be removed, 
+             * if found register the reg file present in rom replacing the existing app
+             */
+            TRAPD(err, ReRegisterAppRegFileL(romRegFilesPath, appUid));
+            CleanupStack::PopAndDestroy(&romRegFilesPath);
+                        
+            if(err == KErrNotFound)                       //If reg file is not found, search it in under "\\private\\10003a3f\\import\\apps\\*.rsc" path
+                {
+                RBuf romRegImportFilesPath;
+                CleanupClosePushL(romRegImportFilesPath);
+                romRegImportFilesPath.CreateL(romDrive.Name(), KMaxPath);                
+                romRegImportFilesPath.Append(KApparcRegFileImportPath);
+                err = 0; 
+                TRAP(err, ReRegisterAppRegFileL(romRegImportFilesPath,appUid));
+                CleanupStack::PopAndDestroy(&romRegImportFilesPath);
+                }
+            
+            if(err == KErrNotFound)                       // Since _reg.rsc file doesn't exists in rom and it is registered in scr, remove it                        
+                {
+                // Delete the existing application entry, which is not associated with any package 
+                ScrHelperUtil::DeleteApplicationEntryL(iScrSession, appUid); 
+                isAppReRegistered = EFalse;
+                }   
+            
+            else if(err != KErrNone && err != KErrNotFound)     
+                {
+                DEBUG_PRINTF2(_L8("Sis Registry Server - Error in removing reg file (%S)"), &regFileName);
+                User::Leave(err);
+                }                                            
+            }
+        else           // else if compId is not 0 i.e. either appUid is associated with stub in rom or any other package in other drive
+            {            
+            CSisRegistryObject* object = CSisRegistryObject::NewLC();
+            ScrHelperUtil::GetComponentL(iScrSession, compId, *object);            
+            if (object->InRom())            // If its a rom based pkg which has not been eclipsed then we can go back to the stubs
+                {   
+                RemoveEntryL(compId);
+                // Re-add the ROM installed stub details to SCR (only those missing will be added)
+                ProcessRomDriveL();
+                }    
+            else
+                {
+                // Delete the existing application entry, which is not associated with any package 
+                ScrHelperUtil::DeleteApplicationEntryL(iScrSession, appUid);
+                // Register the reg files of the applications, only the unregistered reg file data will be added(the association of reg file with stub will be lost) 
+                ProcessApplicationsL();
+                }
+            CleanupStack::PopAndDestroy(object);
+            }
+        
+        //Notify Apparc of the app being removed      
+        RSisLauncherSession launcher;
+        CleanupClosePushL(launcher);
+        User::LeaveIfError(launcher.Connect());
+        RArray<TAppUpdateInfo> affectedApps; 
+        CleanupClosePushL(affectedApps);
+        TAppUpdateInfo newAppInfo;
+        if(isAppReRegistered)       // If App reg data in rom is registerted again(i.e overwrites the existing one) we notify apparc of Installed app else Uninstalled app
+            {
+            newAppInfo = TAppUpdateInfo(appUid, EAppInstalled);
+            }
+        else
+            {
+            newAppInfo = TAppUpdateInfo(appUid, EAppUninstalled);
+            }
+        affectedApps.AppendL(newAppInfo);        
+        launcher.NotifyNewAppsL(affectedApps);
+        CleanupStack::PopAndDestroy(2, &launcher); // affectedApps        
+        }
+    else
+        {
+        DEBUG_PRINTF2(_L8("Sis Registry Server - Parsing application registration info. Error code %d."), result);
+        }
+    CleanupStack::PopAndDestroy(regFileName);
+    aMessage.Complete(result);
+    }
+
+void CSisRegistrySession::ValidateAndParseAppRegFileL(const TDesC& aRegFileName, Usif::CApplicationRegistrationData*& aAppRegData,TBool aInternal)
+    {
+    
+    TParsePtrC filename(aRegFileName);
+    if(!aInternal)                               //check if called for API and regFile path is "\\private\\10003a3f\\import\\apps\\"
+        {
+        if (filename.Path().Left(KApparcRegImportDir().Length()).CompareF(KApparcRegImportDir) != 0)
+            {
+            User::Leave(KErrNotSupported);
+            }
+        }
+    
+    RFs fs;
+    CleanupClosePushL(fs);
+    User::LeaveIfError(fs.Connect());
+    User::LeaveIfError(fs.ShareProtected());
+    RFile file;
+    CleanupClosePushL(file);
+    User::LeaveIfError(file.Open(fs, aRegFileName, EFileRead));
+    
+    // Reading the TUidType information fron the reg rsc file header
+    TBuf8<sizeof(TCheckedUid)> uidBuf;
+    TInt err = file.Read(0, uidBuf, sizeof(TCheckedUid));
+    if (err != KErrNone)
+        {
+        CleanupStack::PopAndDestroy(2, &fs);  //file
+        User::Leave(KErrNotSupported);
+        }
+    
+    if(uidBuf.Size() != sizeof(TCheckedUid))
+        {
+        DEBUG_PRINTF(_L("The file is not a valid registration resource file"));
+        CleanupStack::PopAndDestroy(2, &fs);  // file
+        User::Leave(KErrNotSupported);
+        }
+    TCheckedUid uid(uidBuf);
+    
+    //check the uid of the reg file to be parsed 
+    if(!(uid.UidType()[1] == KUidAppRegistrationFile))
+        {
+        CleanupStack::PopAndDestroy(2, &fs);  //file
+        User::Leave(KErrNotSupported);
+        }
+    
+    RSisLauncherSession launcher;
+    CleanupClosePushL(launcher);
+    User::LeaveIfError(launcher.Connect());
+    RArray<TLanguage> appLanguages;
+    CleanupClosePushL(appLanguages);
+    appLanguages.AppendL(User::Language());         
+    aAppRegData = launcher.SyncParseResourceFileL(file, appLanguages);
+    CleanupStack::PopAndDestroy(4, &fs);  //appLanguages, launcher, file
+    }
+
+void CSisRegistrySession::ReRegisterAppRegFileL(const TDesC& aRegFileDrivePath, const TUid& aAppUid)
+    {
+    /* 
+     * Reads and parses the *_reg.rsc files in the aRegFileDrivePath path and compare uid of each with the aAppUid, if matched remove the existing i.e. aAppUid
+     * and register the one found in the path.
+     */
+    
+    // open the directory
+    CDir* dir;
+    TInt err = iFs.GetDir(aRegFileDrivePath, KEntryAttMatchExclude | KEntryAttDir, ESortNone, dir);
+    
+    if (err == KErrNone)
+        {
+        CleanupStack::PushL(dir);
+        TInt count(dir->Count());
+        TBool foundAndReplaced(EFalse);
+        // scan through all the *_reg.rsc files
+        for (TInt index = 0; index < count; ++index)
+            {
+            RBuf regResourceFileName;
+            CleanupClosePushL(regResourceFileName);
+            regResourceFileName.CreateL(KMaxFileName);            
+            //construct the app reg file present in rom
+            regResourceFileName = TParsePtrC(aRegFileDrivePath).DriveAndPath();
+            regResourceFileName.Append((*dir)[index].iName);
+           //validate and parse the app reg file
+            Usif::CApplicationRegistrationData* appRegData = NULL;
+            TRAPD(res,ValidateAndParseAppRegFileL(regResourceFileName, appRegData, ETrue));
+            CleanupStack::PopAndDestroy(&regResourceFileName); 
+            CleanupStack::PushL(appRegData);
+            
+            if(res != KErrNone)
+                {
+                // log it only, we cannot stop as the next might be ok
+                DEBUG_PRINTF2(_L8("Sis Registry Server - Failed to register in ROM controller. Error code %d."), res); 
+                CleanupStack::Pop(appRegData);
+                continue;
+                }
+            
+            /* If appuid of the current processing reg file is same as of the reg file to be removed, delete existing app reg data and 
+             * add the reg entry of _reg.rsc file currently processed.
+             */
+            if(aAppUid == appRegData->AppUid())
+                {                        
+                TComponentId compId(0);
+                // Delete the existing application entry, which is not associated with any package 
+                ScrHelperUtil::DeleteApplicationEntryL(iScrSession, aAppUid); 
+                ScrHelperUtil::AddApplicationEntryL(iScrSession, compId, *appRegData);    
+                CleanupStack::PopAndDestroy(appRegData);
+                foundAndReplaced = ETrue;
+                break;
+                }    
+            CleanupStack::PopAndDestroy(appRegData); 
+            }
+        if(!foundAndReplaced)
+            {
+            User::Leave(KErrNotFound);
+            }
+        CleanupStack::PopAndDestroy(dir); 
+        }
+    else
+    	{
+    	User::Leave(KErrNotFound);
+    	}
+    }
--- a/installationservices/swi/source/sisregistry/server/sisregistryserversession.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server/sisregistryserversession.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -31,12 +31,10 @@
 #include <usif/scr/scr.h>
 #include <usif/scr/screntries.h>
 #include <usif/sts/sts.h>
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
 #include "stsrecovery.h"
 #include "screntries_internal.h"
 #endif //SYMBIAN_ENABLE_SPLIT_HEADERS
-#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include <swi/swiobserverclient.h>
 #include "sisregistryclientserver.h"
 #include "sisregistryserver.h"
@@ -88,6 +86,8 @@
 	TInt GetAugmentationCountL(const TUid& aUid);
 	TBool IdentifyControllerL(Usif::TComponentId aComponentId, const TDesC& aFileName); // Used by CSisRegistrySubSession
 
+	CSisRegistrySession(TSecureId aClientSid);
+	
 private:
 	~CSisRegistrySession();
 	
@@ -118,7 +118,11 @@
 	void RequestRegistryEntryL(const RMessage2& aMessage);
 	void IsFileRegisteredL(const RMessage2& aMessage);
 	void GetComponentIdForUidL(const RMessage2& aMessage);
-
+	void AddAppRegInfoL(const RMessage2& aMessage);
+    void RemoveAppRegInfoL(const RMessage2& aMessage);
+    void ValidateAndParseAppRegFileL(const TDesC& aRegFileName, Usif::CApplicationRegistrationData*& aAppRegData, TBool aInternal);
+    void ReRegisterAppRegFileL(const TDesC& aRegFileDrivePath, const TUid& aAppUid);
+	
 	// Subsession handling
 	void OpenRegistryUidEntryL(const RMessage2& aMessage);
 	void OpenRegistryPackageEntryL(const RMessage2& aMessage);
@@ -136,7 +140,17 @@
 	void RollbackTransactionL(const RMessage2& aMessage);
 
 	void RegisterEntryL(const RMessage2& aMessage, TBool aNewEntry, TBool aRegisterSoftwareTypes);
+	void AppRegInfoEntryL(const RMessage2& aMessage);
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	void RegisterAllAppL(RBuf& aApparcRegFolder);
+    void GetComponentIdForPackageL(const RMessage2& aMessage);
+    void GetAppUidsForComponentL(const RMessage2& aMessage);
+    void GetComponentIdsForUidL(const RMessage2& aMessage);
+#endif
+
 	void DeleteEntryL(const RMessage2& aMessage);
+	void DeleteEntryL(const CSisRegistryObject& aObject, TInt64 aTransactionId, TBool aCleanupRequired = ETrue);
 	void AddSoftwareTypeL(const RMessage2& aMessage);
 	void AddDriveL(const RMessage2& aMessage);
 
@@ -152,12 +166,14 @@
 
 	//sets a particular component's state to the requested value
 	void SetComponentStateL(const RMessage2& aMessage);
+	void SetComponentPresenceL(const RMessage2& aMessage);
 
 	// Helper methods
 	TBool IsRegisteredL(const TUid& aUid);
 	TBool IsRegisteredL(const CHashContainer& aHashContainer);
 	TBool IsRegisteredL(const TUid& aUid, const TDesC& aPackageName);
 
+	void RemoveEntryL(const Usif::TComponentId aCompId);
 	void RemoveEntryL(const CSisRegistryPackage& aPackage);
 	void RemoveCleanupInfrastructureL(const CSisRegistryObject& aObject, Usif::RStsSession& aStsSession);
 	TBool RemoveControllerL(const CSisRegistryObject& aObject, Usif::RStsSession& aStsSession, TInt aDrive);
@@ -165,6 +181,7 @@
 	TUint FixedDrivesL() const;
 	Usif::TComponentId AddRegistryEntryL(CSisRegistryObject& aObject, Usif::RStsSession& aStsSession, const TDesC8& aController, Usif::TScrComponentOperationType aOpType);
 	Usif::TComponentId AddEntryL(CSisRegistryObject& aObject, Usif::TScrComponentOperationType aOpType);
+	void AddAppsFromStubL(Usif::TComponentId aCompId, const TDesC& aFileName);
 	void AddControllerL(const CSisRegistryObject& aObject, Usif::RStsSession& aStsSession, const TDesC8& aBuffer, const TInt aDrive);
 	void AddCleanupInfrastructureL(CSisRegistryObject& aObject, Usif::RStsSession& aStsSession, const TDesC8& aControllerBuffer);
 	TUint CreateSubsessionHandleL(const TUid& aPackageUid);
@@ -177,7 +194,8 @@
 	void ProcessRemovableDriveL(TInt aDrive);
 	void DiscoverControllersL(const TDesC& aRegistryPath, const TDesC& aDirectoryName);
 	void ExecuteUninstallLogL(const TDesC& aUninstallLogFile, const TDesC& aControllerFile);
-	void GetCompIdAndCompSidIndexL(const TUid& aSid, Usif::TComponentId& aComponentId, TInt& aIndex, TInt aExpectedDrive = -1);
+	void GetComponentIdsForSidL(TUid aSid, RArray<Usif::TComponentId>& aComponentIds);
+	HBufC* SidToFileNameL(TUid aSid, Usif::TComponentId& aComponentId, TInt aExpectedDrive);
 	TBool ModifiableL(const TDesC& aFileName);
 	CHashContainer* HashL(const TDesC& aFileName);
 	void RemovablePackageListL(RPointerArray<CSisRegistryPackage>& aPackages);
@@ -185,12 +203,15 @@
 	void RegisterInRomControllerL(const TDesC& aFileName);
 	void RegisterSoftwareTypesL(Usif::TComponentId aComponentId, const RMessage2& aMessage);
 	void UnregisterSoftwareTypesL(Usif::TComponentId aComponentId);
-
 	
-	TBool IsFirmwareUpdatedL();
-	 
+	void ProcessRomStubsL();
+	void ProcessApplicationsL();
+	TBool IsFirmwareUpdatedL();	 
 	void  UpdateRecentFWVersionL(); 
-
+	void GetStubFileInfoL(TUid aUid, TStubExtractionMode aMode, TInt aStartingFileNo, TInt& aFileCount, RPointerArray<HBufC>& aFileNames);
+	void GetStubFilesL(const TDesC& aFileName, RPointerArray<HBufC>& aFileNames);
+	void DriveFormatDetectedL(TDriveUnit aDrive);
+	
 private:
     friend class CSisRevocationManager;
 
@@ -207,7 +228,9 @@
 	// Session handle to Software Component Registry
 	Usif::RSoftwareComponentRegistry iScrSession;
 
-	TBool isFwUpdated;
+	TSecureId iClientSid;
+	TBool iIsFwUpdated;
+	TBool iIsFirstInit;
 	};
 
 inline RFs& CSisRegistrySession::Fs()
@@ -226,6 +249,12 @@
 	return iScrSession;
 	}
 
+inline CSisRegistrySession::CSisRegistrySession(TSecureId aClientSid)
+    :CSession2()
+    {
+    iClientSid = aClientSid;
+    }
+
 } //namespace
 
 #endif // __SISREGISTRYSERVERSESSION_H__
--- a/installationservices/swi/source/sisregistry/server/sisregistryutil.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server/sisregistryutil.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -101,6 +101,38 @@
 		}
 	}
 
+void SisRegistryUtil::CreateFileWithAttributesL(RFs& aFs, const TDesC& aPath, const TUint aAttributesMask/*= 0*/)
+    {
+    // Creates the folder structure by ignoring the filename at the end.
+    EnsureDirExistsL(aFs, aPath);
+
+    RFile file;
+    CleanupClosePushL(file);
+    User::LeaveIfError(file.Create(aFs, aPath, EFileWrite));
+   
+    if(aAttributesMask != 0)
+        {
+        file.SetAtt(aAttributesMask, 0); // Ignoring return value.
+        }
+    CleanupStack::PopAndDestroy(&file);
+    }
+
+TInt SisRegistryUtil::DeleteFile(RFs& aFs, const TDesC& aPath)
+    {
+    TInt err = aFs.Delete(aPath);
+    
+    if(KErrNone != err)
+        {
+        DEBUG_PRINTF2(_L("Failed to delete file %S."), &aPath);
+        }
+    else
+        {
+        DEBUG_PRINTF2(_L("Deleted file %S successfully."), &aPath);
+        }
+    
+    return err;
+    }
+
 // Processes the ROM stub files. Retuns ETrue if the aUid or aName
 // is found in any of the ROM stub files, else returns EFalse.
 TBool SisRegistryUtil::RomBasedPackageL(const TUid& aUid)
--- a/installationservices/swi/source/sisregistry/server/sisregistryutil.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server/sisregistryutil.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -46,6 +46,8 @@
  	static HBufC* BuildControllerFileNameLC(TUid aUid, TInt aIndex, TInt aController, TInt aDrive);
 	static HBufC* BuildStubFilesPathLC(TInt aDrive);
 	static void EnsureDirExistsL(RFs& aFs, const TDesC& aPath);
+	static void CreateFileWithAttributesL(RFs& aFs, const TDesC& aPath, const TUint aAttributesMask = 0);
+	static TInt DeleteFile(RFs& aFs, const TDesC& aPath);
 	static TBool RomBasedPackageL(const TUid& aUid);
 	static HBufC* BuildLogFileNameLC();
 	static TUid IdentifyUidFromSisFileL(RFs& aFs, TDesC& aFilename);
--- a/installationservices/swi/source/sisregistry/server/sisrevocationmanager.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server/sisrevocationmanager.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -61,7 +61,7 @@
 	CActiveScheduler::Add(this);	
 	}
 
-CSisRevocationManager::~CSisRevocationManager()
+EXPORT_C CSisRevocationManager::~CSisRevocationManager()
 	{
 	// Remove active object from active scheduler
 	Deque(); 
--- a/installationservices/swi/source/sisregistry/server_legacy/siscontrollerverifier.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server_legacy/siscontrollerverifier.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -96,11 +96,9 @@
 void CSisControllerVerifier::CompleteRequestL()
 	{
 	TPckg<TBool> packageResult(isVerified);
-	if ( !iMessage.IsNull() )
-		{
-		iMessage.WriteL(EIpcArgument0, packageResult);
-		iMessage.Complete(KErrNone);
-		}
+
+	iMessage.WriteL(EIpcArgument0, packageResult);
+	iMessage.Complete(KErrNone);
 	}
 	
 TInt CSisControllerVerifier::RunError(TInt)
--- a/installationservices/swi/source/sisregistry/server_legacy/sisregistrycache.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server_legacy/sisregistrycache.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -82,23 +82,20 @@
 	// General note: trap the error because this is not a leaving function
 	// and generating an error will not help 
 
-	if (iIntegrityService)
-	    {
-	    // store the backup file out 
-	    TRAP(res, StoreBackupL());
-	    if (res != KErrNone)
-	        {
-	        DEBUG_PRINTF2(_L8("Sis Registry Server - Failed to store backup (failure code: %d.)"), res);
-	        }
+	// store the backup file out 
+ 	TRAP(res, StoreBackupL());
+ 	if (res != KErrNone)
+ 		{
+ 	DEBUG_PRINTF2(_L8("Sis Registry Server - Failed to store backup (failure code: %d.)"), res);
+ 		}
 
-	    // integrity service operation committing point 
-	    TRAP(res, iIntegrityService->CommitL());
-	    if (res != KErrNone)
-	        {
-	        DEBUG_PRINTF2(_L8("Sis Registry Server - Failed to commit integrity services changes (failure code %d.)"), res);
-	        }
-	    }
-	
+	// integrity service operation committing point 
+	TRAP(res, iIntegrityService->CommitL());
+	if (res != KErrNone)
+ 		{
+	DEBUG_PRINTF2(_L8("Sis Registry Server - Failed to commit integrity services changes (failure code %d.)"), res);
+ 		}
+
 	delete iBackupFile;
 	
 	delete iIntegrityService;
@@ -186,22 +183,14 @@
 
 void CSisRegistryCache::PackageListL(RPointerArray<CSisRegistryPackage>& aPackages) const
 	{
-	CleanupResetAndDestroyPushL(aPackages);
 	aPackages.ResetAndDestroy();
-	
 	for (TInt i = 0; i < iTokens.Count(); i++)
 		{
 		CSisRegistryPackage *package = CSisRegistryPackage::NewLC(*iTokens[i]);
 		aPackages.AppendL(package);
 		CleanupStack::Pop(package);
 		}
-	CleanupStack::Pop(&aPackages);
 	}
-
-const RPointerArray<CSisRegistryToken>& CSisRegistryCache::TokenList() const
-    {
-    return iTokens;
-    }
 	
 RFs& CSisRegistryCache::RFsHandle()
 	{ 
@@ -449,7 +438,7 @@
 			User::Leave(KErrCorrupt);	
 			}
 			
-		iTokens.AppendL(token);
+		iTokens.Append(token);
 		CleanupStack::Pop(token);
 		CleanupStack::PopAndDestroy(&fileStream);
 				
@@ -525,13 +514,6 @@
 	
 void CSisRegistryCache::InitStartUpL()
 	{
-    TRAPD(res, UpdateRecentFWVersionL(););
-    if (res != KErrNone)
-        {
-        // log that
-        DEBUG_PRINTF2(_L8("Updating recent Firmware Version failed with error code = %d."), res);
-        }
-	
 	// else reinit lists- initial settings, esp at the first reboot
 	BuildUidListL();
 	iUseIntegServices = EFalse; // temporarily "turn off" integrity services. It is not needed to process ROM stubs
@@ -543,6 +525,13 @@
 			
 	// only when all is processed one can check the package state		
 	UpdatePackagePresentStateL();
+	
+    TRAPD(res, UpdateRecentFWVersionL(););
+    if (res != KErrNone)
+        {
+        // log that
+        DEBUG_PRINTF2(_L8("Updating recent Firmware Version failed with error code = %d."), res);
+        }
 	}
 
 void CSisRegistryCache::StoreBackupL()
@@ -726,22 +715,19 @@
 
 void CSisRegistryCache::SidToPackageL(const TUid aSid, RArray<CSisRegistryPackage>& aListMatchingPackages) const
 	{
-	CleanupClosePushL(aListMatchingPackages);
-	for (TInt i = 0; i < iTokens.Count(); i++)
-	{
-	if (iTokens[i]->SidPresent(aSid))
+		for (TInt i = 0; i < iTokens.Count(); i++)
 		{
-		aListMatchingPackages.AppendL(*iTokens[i]); 
+		if (iTokens[i]->SidPresent(aSid))
+			{
+			aListMatchingPackages.AppendL(*iTokens[i]); 
+			}
 		}
-	}
 	
 	DEBUG_PRINTF2(_L("SidToPackageL ListMatchingPackages->Count = %d"), aListMatchingPackages.Count());
 	if(aListMatchingPackages.Count() == 0  )
 		{
 		User::Leave(KErrNotFound);
 		}
-	
-	CleanupStack::Pop(&aListMatchingPackages);
 	}
 	
 TBool CSisRegistryCache::ModifiableL(const TDesC& aFileName)
@@ -849,7 +835,6 @@
 
 void CSisRegistryCache::PackageAugmentationsL(const TUid aUid, RPointerArray<CSisRegistryPackage>& aPackages) const
 	{
-	CleanupResetAndDestroyPushL(aPackages);
 	for (TInt i = 0; i < iTokens.Count(); i++)
 		{
 		if ((iTokens[i]->Uid() == aUid) && (iTokens[i]->Index() != CSisRegistryPackage::PrimaryIndex))
@@ -859,7 +844,6 @@
 			CleanupStack::Pop(tmp);
 			}
 		}
-	CleanupStack::Pop(&aPackages);
 	}
 	
 TInt CSisRegistryCache::PackageAugmentationsNumber(const TUid aUid) const
@@ -1022,13 +1006,11 @@
 							   RPointerArray<CSisRegistryPackage>& aDependents
 							   )
 	{
-	CleanupResetAndDestroyPushL(aDependents);
 	aDependents.ResetAndDestroy();
 	// if it is an augmentation - nothing depends on it
 	if (aObject.InstallType() == Sis::EInstAugmentation || 
 		aObject.InstallType() == Sis::EInstPreInstalledPatch)
 		{
-		CleanupStack::Pop(&aDependents);
 		return;
 		}	
 		
@@ -1080,13 +1062,11 @@
 			CleanupStack::PopAndDestroy(2, &stream);// &stream, tmpObject
 			}
 		}
-	CleanupStack::Pop(&aDependents);
 	}
 
 void CSisRegistryCache::EmbeddingPackagesL(const CSisRegistryObject& aObject,
 									   RPointerArray<CSisRegistryPackage>& aEmbeddingPackages)
 	{
-	CleanupResetAndDestroyPushL(aEmbeddingPackages);
 	aEmbeddingPackages.ResetAndDestroy();
 	
 	TUid matchingUid = aObject.Uid();
@@ -1111,14 +1091,12 @@
 			}
 		// delete entry & stream 
 		CleanupStack::PopAndDestroy(2, &stream);// &stream, tmpObject
-		}
-	CleanupStack::Pop(&aEmbeddingPackages);
+		}	
 	}
 	
 void CSisRegistryCache::GenerateChainListL(const CSisRegistryObject& aObject, 
 											 RPointerArray<HBufC8>& aChainList)	
 	{
-	CleanupResetAndDestroyPushL(aChainList);
 	aChainList.ResetAndDestroy();
 	// read the controller for every member of the list	
 	for (TInt i = 0; i < aObject.ControllerInfo().Count(); i++)
@@ -1140,7 +1118,6 @@
 		// release the data	
 		CleanupStack::PopAndDestroy(3, name); // fileProvider, controller
 		}	
-	CleanupStack::Pop(&aChainList);
 	}
 
 HBufC8* CSisRegistryCache::LoadControllerLC(const CSisRegistryObject& aObject, TUint aIndex)
@@ -1417,10 +1394,9 @@
 void CSisRegistryCache::ControllerDriveListL(const CSisRegistryObject& aObject,
 										 RArray<TInt>& aDriveList)
 	{
-	CleanupClosePushL(aDriveList);
 	aDriveList.Reset();
 	// a copy of the controller is always kept on drive C
-	aDriveList.AppendL(iSystemDrive);
+	aDriveList.Append(iSystemDrive);
 	
 	// only controllers will be written to removable media and 
 	// we have now to check for those 
@@ -1428,22 +1404,21 @@
 	TUint fixedDrives = FixedDrives();
 	TUint remainingDrives = installationDrives & ~fixedDrives;
 
-	if (remainingDrives)
-		{
-		TInt index = 0;
-		// reuse the path but change drive letter
-		while (remainingDrives)
+		if (remainingDrives)
 			{
-			// compare a single drive digit
-			if (remainingDrives & 0x00000001)
+			TInt index = 0;
+			// reuse the path but change drive letter
+			while (remainingDrives)
 				{
-				User::LeaveIfError(aDriveList.Append(index)); 
+				// compare a single drive digit
+				if (remainingDrives & 0x00000001)
+					{
+					User::LeaveIfError(aDriveList.Append(index)); 
+					}
+				remainingDrives>>=1;
+				index++;
 				}
-			remainingDrives>>=1;
-			index++;
 			}
-		}
-	CleanupStack::Pop(&aDriveList);	
 	}
 
 	
@@ -2073,8 +2048,6 @@
 	CSisRegistryObject* obj = 0;
 	TUint id = 0;
 	
-	CleanupResetAndDestroyPushL(aPackages);
-
 	aPackages.ResetAndDestroy();
 	for (TInt i = 0; i < iTokens.Count(); i++)
 		{
@@ -2091,7 +2064,6 @@
 
 		CloseReadHandleL(id);
 		}	
-	CleanupStack::Pop(&aPackages);
 	}
 	
 void CSisRegistryCache::RecoverL()
--- a/installationservices/swi/source/sisregistry/server_legacy/sisregistrycache.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server_legacy/sisregistrycache.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -72,11 +72,6 @@
 	 */
 	void PackageListL(RPointerArray<CSisRegistryPackage>& aPackages) const;
 	
-    /**
-     * Returns the current list of tokens.
-     */	
-	const RPointerArray<CSisRegistryToken>& TokenList() const;
-	
 	/**
 	 * Returns the current list of registered packages, even those on removable media
 	 */
--- a/installationservices/swi/source/sisregistry/server_legacy/sisregistryserver.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server_legacy/sisregistryserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -25,8 +25,6 @@
 #include <s32mem.h>
 #include <f32file.h>
 #include <s32file.h>
-#include <startupdomainpskeys.h>
-#include <e32const.h>
 
 #include "sisregistryserver.h"
 #include "sisregistrycache.h"
@@ -106,16 +104,6 @@
 //
 	{
 	DEBUG_PRINTF(_L8("SIS Registry Server - Starting Server"));
-    TInt value( EIdlePhase1Ok );
-    RProperty::Get( KPSUidStartup, KPSIdlePhase1Ok, value );
-    if ( value == EIdlePhase1NOK )
-        {
-        DEBUG_PRINTF(_L8("SIS Registry Server - Setting process priority to Low"));
-		// Using 150 instead of EPriorityLow as there is conflict between TPriority
-		// and TProcessPriority enum constants.
-		RProcess().SetPriority(TProcessPriority(150));
-        DEBUG_PRINTF(_L8("SIS Registry Server - Set process priority to Low"));
-        }	
 	StartL(KSisRegistryName);
 	// create the cache
 	iCache = CSisRegistryCache::NewL();
--- a/installationservices/swi/source/sisregistry/server_legacy/sisregistryserverconst.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server_legacy/sisregistryserverconst.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
--- a/installationservices/swi/source/sisregistry/server_legacy/sisregistryserversession.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server_legacy/sisregistryserversession.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -50,6 +50,7 @@
 #include "sisrevocationmanager.h"
 #include "siscontroller.h"
 #include "siscertificatechain.h"
+
 #include "cleanuputils.h"
 #include "sisregistryutil.h"
 #include "sisinfo.h"
@@ -63,7 +64,7 @@
 #include "sisinstallblock.h"
 #include "sisregistryfiledescription.h"
 #include "sisregistrywritablesession.h"
-#include "securitycheckutil.h" 
+  
 
 using namespace Swi;
 
@@ -626,60 +627,54 @@
 	TPckg<TInt64> pkgTransactionID(transactionID);
 	aMessage.ReadL(EIpcArgument3, pkgTransactionID);
 	
-	DeleteEntryL(*object, transactionID);	
+	// create a integrity service object
+    CIntegrityServices* integrityService = CIntegrityServices::NewLC(transactionID, KIntegrityServicesPath);
+	Server().Cache().RemoveRegistryEntryL(*object, *integrityService);
+
+	//If removal is for ROM upgrade type, 
+	//After removing the existing registry entry set,
+	//re generate the Registry Entry Cache. 
+	//If any of the ROM based stub doesn't have it's registry set 
+	//in appropriate path, it will create them (.reg & . ctl) 
+	//from the ROM based stub sis file.	
+	if ((object->InstallType() == Sis::EInstInstallation || 
+		 object->InstallType() == Sis::EInstPartialUpgrade) &&	
+		SisRegistryUtil::RomBasedPackageL(object->Uid()))
+		{	
+		Server().Cache().RegenerateCacheL();					
+		}		
+		
+	HBufC* logName = SisRegistryUtil::BuildLogFileNameLC();
+	
+	TDriveUnit sysDrive(RFs::GetSystemDrive());
+	TBuf<128> logDir = sysDrive.Name();
+	logDir.Append(KLogDir);
 	
-	CleanupStack::PopAndDestroy(object);
+ 	if( SisRegistryUtil::FileExistsL(iFs,*logName))
+			{
+ 			TInt sizeOfFile = 0;
+ 			RFile file;
+ 			User::LeaveIfError(file.Open(iFs,logDir,EFileRead));
+ 			CleanupClosePushL(file);
+ 			User::LeaveIfError(file.Size(sizeOfFile));
+ 			RBuf8 text;
+ 			text.CreateL(sizeOfFile);
+ 			text.CleanupClosePushL();
+ 			file.Read(text,sizeOfFile);
+ 			file.Close();
+ 			integrityService->RemoveL(*logName);
+ 			User::LeaveIfError(file.Create(iFs,logDir,EFileWrite| EFileShareExclusive |EFileStream));
+ 			User::LeaveIfError(file.Write(text,sizeOfFile));
+ 			CleanupStack::PopAndDestroy(2,&file);
+ 			}			
+ 	integrityService->AddL(*logName);
+ 	Server().Cache().AddLogEntryL(*object,ESwiLogUnInstall);	
+ 	
+ 	CleanupStack::PopAndDestroy(3, object);// object, integrityService , logName
+	
 	aMessage.Complete(KErrNone);
 	}
 
-void CSisRegistrySession::DeleteEntryL(const CSisRegistryObject& aObject, TInt64 aTransactionId, TBool aRegenerateCache/*=ETrue*/)
-    {
-    // Create a integrity service object
-    CIntegrityServices* integrityService = CIntegrityServices::NewLC(aTransactionId, KIntegrityServicesPath);
-    Server().Cache().RemoveRegistryEntryL(aObject, *integrityService);
-
-    //If removal is for ROM upgrade type, 
-    //After removing the existing registry entry set,
-    //re generate the Registry Entry Cache. 
-    //If any of the ROM based stub doesn't have it's registry set 
-    //in appropriate path, it will create them (.reg & . ctl) 
-    //from the ROM based stub sis file. 
-    if ((aObject.InstallType() == Sis::EInstInstallation || 
-            aObject.InstallType() == Sis::EInstPartialUpgrade) &&  
-                SisRegistryUtil::RomBasedPackageL(aObject.Uid()) &&
-                    aRegenerateCache)
-        {   
-        Server().Cache().RegenerateCacheL();                    
-        }       
-            
-    HBufC* logName = SisRegistryUtil::BuildLogFileNameLC();
-    
-    TDriveUnit sysDrive(RFs::GetSystemDrive());
-    TBuf<128> logDir = sysDrive.Name();
-    logDir.Append(KLogDir);
-    
-    if( SisRegistryUtil::FileExistsL(iFs,*logName))
-        {
-        TInt sizeOfFile = 0;
-        RFile file;
-        User::LeaveIfError(file.Open(iFs,logDir,EFileRead));
-        CleanupClosePushL(file);
-        User::LeaveIfError(file.Size(sizeOfFile));
-        RBuf8 text;
-        text.CreateL(sizeOfFile);
-        text.CleanupClosePushL();
-        file.Read(text,sizeOfFile);
-        file.Close();
-        integrityService->RemoveL(*logName);
-        User::LeaveIfError(file.Create(iFs,logDir,EFileWrite| EFileShareExclusive |EFileStream));
-        User::LeaveIfError(file.Write(text,sizeOfFile));
-        CleanupStack::PopAndDestroy(2,&file);
-        }           
-    integrityService->AddL(*logName);
-    Server().Cache().AddLogEntryL(aObject,ESwiLogUnInstall);    
-        
-    CleanupStack::PopAndDestroy(2, integrityService);// logName,integrityService    
-    }
 void CSisRegistrySession::OpenRegistryUidEntryL(const RMessage2& aMessage)
 	{
 	// expects a UID as an arg 0
@@ -1698,87 +1693,14 @@
 
 void CSisRegistrySession::AddDriveL(const RMessage2& aMessage)
 	{
-	TInt addedDrive;
-	TPckg<TInt> pkgDrive(addedDrive);
+	TInt drive;
+	TPckg<TInt> pkgDrive(drive);
 	aMessage.ReadL(EIpcArgument0, pkgDrive);
 
-	DEBUG_PRINTF2(_L8("Sis Registry Server - Removable drive %d added."), addedDrive);
-	
-	// Get the drive character.
-	TChar drive;
-    User::LeaveIfError(iFs.DriveToChar(addedDrive, drive));
-    TUint driveChar(drive);
-    
-    // Retrieve drive info.
-    TDriveInfo driveInfo;
-    User::LeaveIfError(iFs.Drive(driveInfo, addedDrive));
- 
-#ifndef __WINSCW__
-	if(driveInfo.iDriveAtt & KDriveAttLogicallyRemovable)
-	    {
-#endif	
-        /*
-	     In case a logically removable drive is added,
-	     Look for the presence of the first boot marker file corresponding to it in the sisregistry private
-	     folder in C drive. If absent, assume first boot and create the marker file. 
-	     Also added a marker file in the <drive>\sys\install directory which would be used to detect a format. 
-	     
-	     Subsequent boots would look for the drive format marker to check if a format has occured and delete
-	     the registry entries.
-        */
-	
-        // Create first boot marker path.
-	    _LIT(KFirstBootMarkerFilePath, "%c:%SfirstBootMarkerFileFor%c");
-	   
-	    RBuf privatePath;
-	    privatePath.CreateL(KMaxPath);
-	    CleanupClosePushL(privatePath);
-	    
-	    User::LeaveIfError(iFs.PrivatePath(privatePath));
-	   
-	    RBuf firstBootMarkerFilePath;
-	    firstBootMarkerFilePath.CreateL(KMaxPath);
-	    CleanupClosePushL(firstBootMarkerFilePath);
-	    
-	    TChar systemDrive = RFs::GetSystemDriveChar();
-	    firstBootMarkerFilePath.Format(KFirstBootMarkerFilePath, static_cast<TUint>(systemDrive), &privatePath, driveChar); 
-	    
-	    // Create drive format marker path.
-        _LIT(KFormatMarkerPath, "%c:\\sys\\install\\formatMarkerFile");
-	    
-        RBuf formatMarkerPath;
-        formatMarkerPath.CreateL(KMaxPath);
-	    CleanupClosePushL(formatMarkerPath);
-        formatMarkerPath.Format(KFormatMarkerPath, driveChar); 
-        
-        // The drive marker files are marked hidden and read-only.
-        TUint fileAttributes = KEntryAttReadOnly | KEntryAttHidden;
-        
-	    if(!SisRegistryUtil::FileExistsL(iFs, firstBootMarkerFilePath))
-	        {
-	        // First boot detected. Add the first boot marker file as well as the format marker on the drive.
-            SisRegistryUtil::CreateFileWithAttributesL(iFs, firstBootMarkerFilePath);
-            SisRegistryUtil::CreateFileWithAttributesL(iFs, formatMarkerPath, fileAttributes);
-	        }
-	    else
-	        {
-            // Subsequent boot. Check for the presence of a marker file <drive>\sys\install directory.
-            // If absent, assume format.
-            if(!SisRegistryUtil::FileExistsL(iFs, formatMarkerPath))
-                {
-                DriveFormatDetectedL(TDriveUnit(addedDrive));
-                //Add missing format marker file
-                SisRegistryUtil::CreateFileWithAttributesL(iFs, formatMarkerPath, fileAttributes);
-                }	        
-	        }
-	    
-	    CleanupStack::PopAndDestroy(3, &privatePath);
-#ifndef __WINSCW__	    
-	    }
-#endif	
-	
+	DEBUG_PRINTF2(_L8("Sis Registry Server - Removable drive %d added."), drive);
+
 	// update the drives state
-	Server().Cache().AddDriveAndRefreshL(addedDrive);
+	Server().Cache().AddDriveAndRefreshL(drive);
 	aMessage.Complete(KErrNone);
 	}
 
@@ -1856,7 +1778,6 @@
 				{
 				// Destroys object so we continue to next iteration.
 				CleanupStack::PopAndDestroy(sidObject);
-				sidObject = NULL;
 				}
 			}  // End for loop.
 
@@ -2334,103 +2255,3 @@
    
     CleanupStack::PopAndDestroy(&files);
     }
-
-void CSisRegistrySession::DriveFormatDetectedL(TDriveUnit aDrive)
-    {   
-    DEBUG_PRINTF2(_L("Sis Registry Server - Drive format detected for drive %d"), static_cast<TInt>(aDrive));
-    
-    //Get the list of tokens.    
-    const RPointerArray <CSisRegistryToken>& tokensArray = Server().Cache().TokenList();
-
-    TTime currentTime;
-    currentTime.UniversalTime();
-    TInt64 transactionId = currentTime.Int64();
-    
-    TBool regenerateCache = EFalse;
-    
-    TInt i(0);
-    
-    while(i < tokensArray.Count())
-        {
-        TUint installedDrives = tokensArray[i]->Drives();
-        
-        // Look for the formatted drive in the list of installed drives.
-        if(installedDrives & (1 << aDrive))
-            {
-            CSisRegistryObject* object = Server().Cache().ObjectL(*tokensArray[i]);
-			CleanupStack::PushL(object);
-            
-            if (!regenerateCache && 
-                    (object->InstallType() == Sis::EInstInstallation || object->InstallType() == Sis::EInstPartialUpgrade) &&
-                         SisRegistryUtil::RomBasedPackageL(object->Uid()))
-                {   
-                regenerateCache = ETrue;                   
-                }  
-            
-            // Retrieve all the associated files.
-            const RPointerArray<CSisRegistryFileDescription>& fileDescriptions = object->FileDescriptions();
-           
-            _LIT(KHashPathFormat, "%c:\\sys\\hash\\%S");
-            
-            for(TInt j=0; j<fileDescriptions.Count(); ++j)
-                {
-                const TDesC& targetPath = fileDescriptions[j]->Target();
-                DEBUG_PRINTF2(_L("File - %S "), &targetPath);
-                
-                // Get the drive on which the file is present.
-                TInt drive; 
-                User::LeaveIfError(RFs::CharToDrive(targetPath[0], drive));
-                
-                // If the file is a binary ( present in \sys\bin), delete the corresponding hash present in 
-                // C:\sys\hash               
-                
-                if(KErrNotFound != targetPath.FindF(KBinPath))
-                    {
-                    // Retrieve the filename from the target path.
-					TParsePtrC parser(targetPath); 
-                    HBufC* fileName = parser.NameAndExt().AllocLC();
-                                       
-                    TChar systemDrive = RFs::GetSystemDriveChar();
-                    
-                    // Create the hash file path.
-                    RBuf hashFilePath;
-                    hashFilePath.CreateL(KMaxPath);
-                    CleanupClosePushL(hashFilePath);
-                    hashFilePath.Format(KHashPathFormat, static_cast<TUint>(systemDrive), fileName);
-                    
-                    // Delete hash file.
-                    SisRegistryUtil::DeleteFile(iFs, hashFilePath); //Ignore return code. 
-                    
-                    CleanupStack::PopAndDestroy(2, fileName);
-                    
-                    }
-                
-                if(aDrive == TDriveUnit(drive))
-                    {
-                    // File should not exist on disk as the drive is assumed to have been formatted.
-                    continue;
-                    }
-                SisRegistryUtil::DeleteFile(iFs, targetPath); //Ignore return code.          
-                }
-            
-            // Delete registry entry.
-            DeleteEntryL(*object, transactionId, EFalse);
-            CleanupStack::PopAndDestroy(object);
-            }
-        else
-            {
-            // Increment only in case an entry is not found.
-            i++;
-            }
-        }
-    
-    if(regenerateCache)
-        {
-        Server().Cache().RegenerateCacheL();
-        }
-    
-    // Commit the changes.
-    CIntegrityServices* intServ = CIntegrityServices::NewLC(transactionId, KIntegrityServicesPath);
-    intServ->CommitL();
-    CleanupStack::PopAndDestroy(intServ);
-    }
--- a/installationservices/swi/source/sisregistry/server_legacy/sisregistryserversession.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server_legacy/sisregistryserversession.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -140,7 +140,6 @@
 	// support for the writeable interface
 	void RegisterEntryL(const RMessage2& aMessage, TBool aNewEntry);	
 	void DeleteEntryL(const RMessage2& aMessage);
-	void DeleteEntryL(const CSisRegistryObject& aObject, TInt64 aTransactionId, TBool aRegenerateCache = ETrue);
 	void RequestDependenciesRegistryEntryL(const RMessage2& aMessage);
 	void RequestDependentPackagesRegistryEntryL(const RMessage2& aMessage);
 	void AddDriveL(const RMessage2& aMessage);
@@ -171,7 +170,6 @@
 	void LoggingFileInfoL(const RMessage2& aMessage);
 	void RequestMatchingSupportedLanguagesL(const RMessage2& aMessage);
 	void RequestInternalRegistryFilesL(const RMessage2& aMessage);
-	void DriveFormatDetectedL(TDriveUnit aDrive);
 private:
     friend class CSisRevocationManager;
 	RFs iFs;
--- a/installationservices/swi/source/sisregistry/server_legacy/sisregistryutil.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server_legacy/sisregistryutil.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -124,38 +124,6 @@
 		}
 	}
 
-void SisRegistryUtil::CreateFileWithAttributesL(RFs& aFs, const TDesC& aPath, const TUint aAttributesMask)
-    {
-    // Creates the folder structure by ignoring the filename at the end.
-    EnsureDirExistsL(aFs, aPath);
-
-    RFile file;
-    CleanupClosePushL(file);
-    User::LeaveIfError(file.Create(aFs, aPath, EFileWrite));
-   
-    if(aAttributesMask != 0)
-        {
-        file.SetAtt(aAttributesMask, 0); // Ignoring return value.
-        }
-    CleanupStack::PopAndDestroy(&file);
-    }
-
-TInt SisRegistryUtil::DeleteFile(RFs& aFs, const TDesC& aPath)
-    {
-    TInt err = aFs.Delete(aPath);
-    
-    if(KErrNone != err)
-        {
-        DEBUG_PRINTF2(_L("Failed to delete file %S."), &aPath);
-        }
-    else
-        {
-        DEBUG_PRINTF2(_L("Deleted file %S successfully."), &aPath);
-        }
-    
-    return err;
-    }
-
 // Processes the ROM stub files. Retuns ETrue if the aUid or aName
 // is found in any of the ROM stub files, else returns EFalse.
 TBool SisRegistryUtil::RomBasedPackageL(const TUid& aUid)
--- a/installationservices/swi/source/sisregistry/server_legacy/sisregistryutil.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sisregistry/server_legacy/sisregistryutil.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -44,8 +44,6 @@
  	static HBufC* BuildControllerFileNameLC(TUid aUid, TInt aIndex, TInt aController);
  	static HBufC* BuildControllerFileNameLC(TUid aUid, TInt aIndex, TInt aController, TInt aDrive);
 	static void EnsureDirExistsL(RFs& aFs, const TDesC& aPath);
-	static void CreateFileWithAttributesL(RFs& aFs, const TDesC& aPath, const TUint aAttributesMask = 0);
-	static TInt DeleteFile(RFs& aFs, const TDesC& aPath);
 	static TBool RomBasedPackageL(const TUid& aUid);
 	static HBufC* BuildLogFileNameLC();
 	
--- a/installationservices/swi/source/swis/server/adornedutilities.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/adornedutilities.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -23,7 +23,6 @@
 
 #include "adornedutilities.h"
 #include "log.h"
-#include "cleanuputils.h"
 
 _LIT(KAdornedWildCharString, "{????????}");
 const TInt Swi::FileNameUnadornedPartLength = 10;
@@ -76,7 +75,6 @@
 
 void Swi::FindAllAdornedVariantsL(RFs& aFs, const TDesC& aSearchNameWild, const TDesC& aSearchPath, RPointerArray<HBufC>& aAdornedFileNamesFound)
 	{
-	CleanupResetAndDestroyPushL(aAdornedFileNamesFound);
 	TFindFile finder(aFs);
 	CDir* dirList=0;
 	TBool matchFound = (finder.FindWildByDir( aSearchNameWild, aSearchPath, *&dirList) == KErrNone);
@@ -106,7 +104,6 @@
 		CleanupStack::PushL(dirList);
 		}
 	CleanupStack::PopAndDestroy(dirList);
-	CleanupStack::Pop(&aAdornedFileNamesFound);
 	}
 
 void Swi::GenerateSearchNameWildL(const TDesC& aFileName, TDes& aSearchNameWild)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/source/swis/server/appregextractor.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implementation of the adorned filename handling utility functions
+*
+*/
+
+#include "appregextractor.h"
+#include "sishelper.h"
+
+namespace Swi
+{
+
+/*static*/ CAppRegExtractor* CAppRegExtractor::NewLC(RFs& aFs, RArray<TLanguage> deviceSupportedLanguages, RPointerArray<Usif::CApplicationRegistrationData>& aApparcRegFileData )
+    {
+    CAppRegExtractor* self=new(ELeave) CAppRegExtractor(aFs, deviceSupportedLanguages, aApparcRegFileData);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+    
+/*static*/ CAppRegExtractor* CAppRegExtractor::NewL(RFs& aFs, RArray<TLanguage> deviceSupportedLanguages, RPointerArray<Usif::CApplicationRegistrationData>& aApparcRegFileData )
+    {
+    CAppRegExtractor* self=NewLC(aFs, deviceSupportedLanguages, aApparcRegFileData);
+    CleanupStack::Pop(self);
+    return self;
+    }
+    
+CAppRegExtractor::~CAppRegExtractor()
+    {
+    Deque();
+    
+    if (iManagedFileHandle)
+        {
+        iCurrentFile->Close();
+        delete iCurrentFile;
+        }
+    
+    iLauncher.Close();
+    
+    if (iDeviceSupportedLanguages.Count())
+        iDeviceSupportedLanguages.Close();
+    }
+
+CAppRegExtractor::CAppRegExtractor(RFs& aFs, RArray<TLanguage> deviceSupportedLanguages, RPointerArray<Usif::CApplicationRegistrationData>& aApparcRegFileData)
+    : CActive(EPriorityStandard), iFs(aFs), iDeviceSupportedLanguages(deviceSupportedLanguages), iApparcRegFileData(aApparcRegFileData)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+void CAppRegExtractor::ConstructL()
+    {
+    User::LeaveIfError(iFs.ShareProtected());
+    User::LeaveIfError(iLauncher.Connect());
+    }
+
+// public methods
+
+void CAppRegExtractor::ExtractAppRegInfoSizeL(const TDesC& aFileName, TRequestStatus& aStatus)
+    {
+    DEBUG_PRINTF2(_L("CAppRegExtractor - ExtractAppRegInfoSizeL - extracting size of resource file '%S'"),&aFileName);
+    iErrCode = KErrNone; 
+    iManagedFileHandle=ETrue;
+    iCancelled=EFalse;
+    iClientStatus=&aStatus;
+    if(iCurrentFile != NULL)
+        delete iCurrentFile;
+    iCurrentFile=new(ELeave) RFile;    
+    User::LeaveIfError(iCurrentFile->Open(iFs, aFileName, EFileRead));
+    *iClientStatus = KRequestPending;
+    
+    iLauncher.AsyncParseResourceFileSizeL(*iCurrentFile, iDeviceSupportedLanguages, iStatus);
+    SetActive();
+    }
+
+
+// CActive methods
+
+void CAppRegExtractor::RunL()
+    {
+    //iStatus shall have the lenght of parsed object if it is greater than 0
+    if (iStatus.Int() < KErrNone )
+        {
+        DEBUG_PRINTF2(_L("CAppRegExtractor - RunL - parsing failed with %d error"),iStatus.Int());
+        User::LeaveIfError(FinishAppRegExtraction(iStatus.Int()));
+        return;
+        }
+    
+    if (iCancelled)
+        {
+        DEBUG_PRINTF(_L("CAppRegExtractor - RunL - User cancelled"));
+        User::LeaveIfError(FinishAppRegExtraction(KErrCancel));
+        return;
+        }
+    
+    TInt size = iStatus.Int(); 
+    Usif::CApplicationRegistrationData* applicationRegistrationData = 0;
+    DEBUG_PRINTF2(_L("CAppRegExtractor - ParseResourceFileDataL - Invoking with size = %d"),size);
+    applicationRegistrationData = iLauncher.AsyncParseResourceFileDataL(size);
+    CleanupStack::PushL(applicationRegistrationData);
+    iApparcRegFileData.AppendL(applicationRegistrationData);
+    CleanupStack::Pop();
+    FinishAppRegExtraction(KErrNone);
+    // Extract the next chunk
+    }
+
+void CAppRegExtractor::DoCancel()
+    {
+    DEBUG_PRINTF(_L("CAppRegExtractor - DoCancel - User cancelled"));
+    iCancelled=ETrue;
+    if (iClientStatus)
+        {      
+        TInt err = FinishAppRegExtraction(KErrCancel);
+        if (err != KErrNone)
+            {
+            User::RequestComplete(iClientStatus, KErrCancel);
+            iClientStatus=NULL;
+            }           
+        }
+    }
+    
+TInt CAppRegExtractor::RunError(TInt aError)
+    {
+    DEBUG_PRINTF(_L("CAppRegExtractor - DoError"));
+    iCancelled = ETrue;
+    if (iClientStatus)
+        {     
+        TInt err = FinishAppRegExtraction(aError);
+        if (err != KErrNone)
+            {
+            User::RequestComplete(iClientStatus, aError);
+            iClientStatus = NULL;
+            }          
+        }
+    return KErrNone;
+    }
+
+TInt CAppRegExtractor::FinishAppRegExtraction(TInt aResult)
+    {
+    DEBUG_PRINTF2(_L("CAppRegExtractor - FinishAppRegExtraction - received result = %d"),aResult);
+    if (iManagedFileHandle)
+        {
+        iCurrentFile->Close();
+        delete iCurrentFile;
+        iCurrentFile=0;
+        iManagedFileHandle = EFalse;
+        }
+    iErrCode = aResult;
+
+    // notify the user
+    if (aResult == KErrCorrupt)
+        {
+        User::RequestComplete(iClientStatus, KErrNone);
+        }
+    else
+        {
+        User::RequestComplete(iClientStatus, aResult);
+        }
+    iClientStatus = NULL;
+    return KErrNone;
+    }
+    
+TInt CAppRegExtractor::GetErrorCode() const
+    {
+    return iErrCode;
+    }
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/source/swis/server/appregextractor.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component which handles reg file parsing asynchronously
+*
+*/
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef __APPREGEXTRACTOR_H__
+#define __APPREGEXTRACTOR_H__
+ 
+#include <e32base.h>
+#include <f32file.h> 
+#include "log.h"
+#include <usif/scr/appregentries.h>
+#include "sislauncherclient.h"
+namespace Swi
+{
+class RSisHelper;
+
+/**
+ * This class is an active object, which manages file extraction in chunks, using SISHelper
+ */
+class CAppRegExtractor : public CActive
+    {
+public:
+    static CAppRegExtractor* NewLC(RFs& aFs, RArray<TLanguage> deviceSupportedLanguages, RPointerArray<Usif::CApplicationRegistrationData>& aApparcRegFileData );
+    
+    static CAppRegExtractor* NewL(RFs& aFs, RArray<TLanguage> deviceSupportedLanguages, RPointerArray<Usif::CApplicationRegistrationData>& aApparcRegFileData );
+    
+    /**
+     * Extract the file, using provided file handle which must be set up correctly.
+     */ 
+    void ExtractAppRegInfoSizeL(const TDesC& aFileName, TRequestStatus& aStatus);
+    
+    /// Get the error code for the latest async parsing operation.
+    TInt GetErrorCode() const; 
+ 
+    ~CAppRegExtractor();
+    
+private:
+    CAppRegExtractor(RFs& aFs, RArray<TLanguage> deviceSupportedLanguages, RPointerArray<Usif::CApplicationRegistrationData>& aApparcRegFileData ); 
+    void ConstructL();
+    
+// from CActive
+    void RunL();
+    void DoCancel();
+    TInt RunError(TInt aError);
+    
+
+    /// Sets up the file handle, owned by the file extractor for the duration of the extraction
+    void SetupFileHandleL(const TDesC& aFileName);
+
+    /// finishes the extraction and notifies the client of the result
+    TInt FinishAppRegExtraction(TInt aResult);    
+
+private:    
+    RFs&    iFs;   
+    TBool iCancelled;      
+    TRequestStatus* iClientStatus;
+    RSisLauncherSession iLauncher;
+    RFile* iCurrentFile;
+    TBool iManagedFileHandle; // whether we manage the file handle used for file extraction.
+    RArray<TLanguage> iDeviceSupportedLanguages; 
+    RPointerArray<Usif::CApplicationRegistrationData>& iApparcRegFileData;
+    TInt iErrCode;
+    };
+    
+}
+
+#endif // #ifndef __FILEEXTRACTOR_H__
--- a/installationservices/swi/source/swis/server/installationplanner.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/installationplanner.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -67,6 +67,7 @@
 #include "sisregistryserverconst.h"
 #include "dessisdataprovider.h"
 #include "adornedutilities.h"
+#include "sislauncherclient.h"
 
 using namespace Swi;
 using namespace Swi::Sis;
@@ -982,16 +983,6 @@
 	// Size of this controller only!!
 	TInt64 size = iContentProvider.TotalSizeL(aController.InstallBlock(), iExpressionEvaluator, EFalse);
 
-	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	// Invoke the drive selection part when the planner is not in info collection mode. Otherwise do not.
-	if (IsInInfoCollectionMode())
-		{
-		// for GetInfo purposes we select an existing system drive. We need to make sure that a valid drive is selected for installation planning,  and in any case no files will get copied there, 
-		application->UserSelections().SetDrive(iSystemDriveChar);
-		}
-	else
-		{
-	#endif
 		// If the package is partial upgrade, extract drive from the registry, and dont
 		// display the drive selection option except where we are upgrading a ROM stub
 		if(error == KErrNone && aController.Info().InstallType() == EInstPartialUpgrade && !registryEntry.IsInRomL())
@@ -1003,20 +994,32 @@
 				// any assumptions about where to install the upgrade
 				// we need to ask the user where they would like to install 
 				// this upgrade
-				ChooseDriveDialogL(*content, *application, size);	
+			    #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+			        if(IsInInfoCollectionMode())
+			            {
+			            application->UserSelections().SetDrive(iSystemDriveChar);
+			            const_cast <Sis::CController&>(aController).SetDriveSelectionRequired(ETrue);
+			            }
+			        else
+			            {
+			    #endif			            
+				ChooseDriveDialogL(*content, *application, size);				
+                #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK                    
+                        }
+                #endif								
 				}
 			else
 				{
 				// install partial upgrade on the same drive as base package
 				application->UserSelections().SetDrive(drive);
 				}
-			}
+			}		       		
 		else if(error == KErrNotFound && aController.Info().InstallType() == EInstPartialUpgrade &&
-				iFilesFromPlannedControllers[baseControllerIndex]->Drive() != TChar(KNoDriveSelected))
+		        iCurrentController > 0 && iFilesFromPlannedControllers[baseControllerIndex]->Drive() != TChar(KNoDriveSelected) )
 				{
 				//Use the base package's drive
 				application->UserSelections().SetDrive(iFilesFromPlannedControllers[baseControllerIndex]->Drive());			
-				}
+				}		
 		else if((aController.Info().InstallType() == EInstInstallation
 				|| aController.Info().InstallType() == EInstAugmentation)
 				&& iIsPropagated)
@@ -1038,11 +1041,21 @@
 		else if (IsUserDriveSelectionRequiredL(aController.InstallBlock()))
 			{
 			// User needs to choose which drive will be used for the installation
-	 		ChooseDriveDialogL(*content, *application, size);	
+            #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+                if(IsInInfoCollectionMode())
+                   {
+                   application->UserSelections().SetDrive(iSystemDriveChar);
+                   const_cast <Sis::CController&>(aController).SetDriveSelectionRequired(ETrue);
+                   }
+                else
+                   {
+            #endif                  
+            ChooseDriveDialogL(*content, *application, size);                  
+            #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK                   
+                   }
+            #endif
 			}
-	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-		}
-	#endif
+		
 	CleanupStack::PopAndDestroy(content);
 
 	// To accurately display the space avaialble for next controller 
@@ -1068,7 +1081,7 @@
 			
 	// Process the actual controller, then return the application
 	ProcessInstallBlockL(aController.InstallBlock(), *application, aFilesToCapabilityCheck, *filesList);
-	
+
 	//Publishing the UID of the associated package.
 	TUid publishUid = aController.Info().Uid().Uid();
 	if(!(Swi::SecUtils::IsPackageUidPresent(publishUid, iUidList)))
@@ -1092,7 +1105,322 @@
             User::Leave(err);
 	        }
 	    }
+		
+	// Filtering of rsc files from the set of files to be copied and using parser to 
+	// extract app uid,foldername,filename and iconfilename 
+    #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+    if(IsInInfoCollectionMode())
+       {        
+        _LIT(KApparcRegDir, "\\private\\10003a3f\\import\\apps\\");	
+        _LIT(KApparcRegistrationFileExtn,".rsc");
+        
+        //Getting the list of files to be added from CApplication Object
+        RPointerArray<CSisRegistryFileDescription> listOfFilesToBeAdded = application->FilesToAdd();
+        //Stores the registration resource files which are passed to the apparc parser
+        RPointerArray<TDesC> regFilesArray;	  
+        CleanupResetAndDestroyPushL(regFilesArray);
+        RPointerArray<CSisRegistryFileDescription> listOfFilesToBeExtracted;  
+        CleanupClosePushL(listOfFilesToBeExtracted);
+        RFs fs;	
+        RArray<TChar> drives;                               // Array of system drives    
+        RArray<TInt64> driveSpaces;                         // Space available on each drive
+        CleanupClosePushL(drives);
+        CleanupClosePushL(driveSpaces);
+        TInt64 currentAvailableDriveSpace = 0 ;         
+        TInt64 totalApplicationDataSize = 0;
+        CSisRegistryFileDescription* currentFileDescription = NULL;
+     
+        //Obtain the disk space available on the drives
+        iSisHelper.FillDrivesAndSpacesL(drives, driveSpaces);
+        TChar systemDrive = RFs::GetSystemDriveChar();
+        TInt driveIndex = drives.Find(systemDrive);
+        currentAvailableDriveSpace = driveSpaces[driveIndex];            //first drive is 'C' drive only
+    
+        //Opening a file server session
+        User::LeaveIfError(fs.Connect());
+        CleanupClosePushL(fs);
+        User::LeaveIfError(fs.ShareProtected());
+    
+        TInt noOfFilesToBeAdded = listOfFilesToBeAdded.Count();
+        // Processing each file and checking if a file is an resource file(*_reg.rsc or *.rsc or *.r%d)
+        for(TInt i=0 ; i < noOfFilesToBeAdded ; i++)
+            {
+            HBufC* targetFileName;	    	   	
+            targetFileName = listOfFilesToBeAdded[i]->Target().Alloc();	   
+            CleanupStack::PushL(targetFileName);
+            TParsePtrC filename(*targetFileName);	    	   
+            TBool isApparcFile = EFalse;
+            HBufC* extension = TParsePtrC(*targetFileName).Ext().AllocLC();
+            
+            if(!extension->Compare(KApparcRegistrationFileExtn)) // for resource files *_reg.rsc or *.rsc
+                {
+                isApparcFile = ETrue;
+                }
+            else
+                {
+                TInt extnLength = extension->Length();
+                HBufC* extn;
+                if(extnLength == 4)                            //for localizable resource files with extn like .r01
+                    {
+                    extn = extension->Right(2).AllocLC();
+                    }
+                else if(extnLength == 5)
+                    {
+                    extn = extension->Right(3).AllocLC();       //for localizable resource files with extn like .r101	            
+                    }
+                else
+                    {   
+                    CleanupStack::PopAndDestroy(2, targetFileName);  //extension
+                    continue;
+                    }
+    
+                //Check to find if the extension is of valid localizable resource files 
+                TInt value = 0;
+                // Declare the variable
+                TLex lex(*extn);
+                // Convert the descriptor into the integer number
+                TInt err = lex.Val(value);
+                if(err == KErrNone)
+                  {
+                  isApparcFile = ETrue;    
+                  }	        
+                CleanupStack::PopAndDestroy(extn);	        
+                }
+            
+            //If its an apparc file(rsc) file then add its size to the total application size
+            if(isApparcFile)
+                {	        
+                listOfFilesToBeExtracted.AppendL(listOfFilesToBeAdded[i]);
+                totalApplicationDataSize += listOfFilesToBeAdded[i]->UncompressedLength();
+                }	    
+            CleanupStack::PopAndDestroy(2, targetFileName);  //extension	    
+            }                   
+            
+        //Here we do extraction of rsc files ,before extracting files we check if there is an enough space on the disk(C drive)
+        //to extract the files then extract the file to a temporary location and
+        //check if it is a registration resource file(using target path) then store it into an array.     
+        TInt noOfFilesToBeExtracted = listOfFilesToBeExtracted.Count();            
+        DEBUG_PRINTF2(_L("Total number resource files (registration/localizable)to be extracted is %d"), noOfFilesToBeExtracted);            
+        if(0 != noOfFilesToBeExtracted)
+            {	
+            
+            //Check if there is enough space to extract the resource (registration or localizable) files    
+            if(totalApplicationDataSize > currentAvailableDriveSpace)
+                {
+                //No memory to extract the file
+                User::LeaveIfError(KErrDiskFull);
+                }
+            
+            //Extraction of rsc file to a temporary location and if it is a reg resource filr append t to an array for parsing
+            for (TInt i = 0 ; i < noOfFilesToBeExtracted ; i++)
+                {
+                TFileName resourceFileName;    
+                _LIT(KResourceFileNameFmt, "%c:\\resource\\install\\temp\\0x%08x\\%S"); // Pakage Uid  
+                TFileName finalToBeExtracted = TParsePtrC(listOfFilesToBeExtracted[i]->Target()).NameAndExt();              	             	                 
+                resourceFileName.Format(KResourceFileNameFmt, TUint(systemDrive), aController.Info().Uid().Uid().iUid,
+                        &finalToBeExtracted);
+                
+                 TInt err = fs.MkDirAll(resourceFileName);
+                 if (err!= KErrNone && err != KErrAlreadyExists)
+                     User::LeaveIfError(err);                                           
+                              
+                 RFile resourceFile;    
+                 User::LeaveIfError(resourceFile.Replace(fs, resourceFileName, 
+                     EFileStream|EFileWrite|EFileRead|EFileShareExclusive));
+                 CleanupClosePushL(resourceFile);	         	         
+                 
+                 // Extract resource file to a temporary file.
+                 DEBUG_PRINTF2(_L("Current resource file (registration/localizable) to be extraced is %S"), &resourceFileName);
+                 User::LeaveIfError(iSisHelper.ExtractFileL(fs, resourceFile,
+                         listOfFilesToBeExtracted[i]->Index(), application->AbsoluteDataIndex(), UiHandler()));	 
+                 
+                 CleanupStack::PopAndDestroy(&resourceFile);
+                                  
+                 // If target of the file is apparc's private folder then it is registration resource file for an app
+                 TParsePtrC filename(listOfFilesToBeExtracted[i]->Target());
+                 if (filename.Path().Left(KApparcRegDir().Length()).CompareF(KApparcRegDir) == 0)
+                     {
+                     HBufC* regResourceFileName = resourceFileName.AllocL();
+                     
+                     regFilesArray.AppendL(regResourceFileName);   	             
+                     }   
+                 }
+            //Since the files have been extracted the available disk space is reduced
+            currentAvailableDriveSpace -= totalApplicationDataSize;                
+            }            
+    
+        DEBUG_PRINTF(_L8("Finished extracting all resource files (registration/localizable) successfuly"));
+        //Pass each registration resource file to the parser to fetch the app info  and then if icon file is present fetch the icon file
+        //to a temporary location.
+            
+        TInt noOfRegFilesToBeParsed = regFilesArray.Count();        
+        DEBUG_PRINTF2(_L("Total number Registration Resource files to be parsed is %d"), noOfRegFilesToBeParsed);        
+        for(TInt i = 0 ; i < noOfRegFilesToBeParsed ; i++)
+            {	   	    
+            Usif::CApplicationRegistrationData *appData = NULL;	    	    
+            CNativeComponentInfo::CNativeApplicationInfo* applicationInfo = NULL;
+            RArray<TLanguage> languages;	 
+            TFileName iconFile;	    
+            // Calling the apparc parser to fetch the app info from the resouce files	
+            
+            DEBUG_PRINTF2(_L("Current Registration Resource file to be parsed is %S"), regFilesArray[i]);
+            
+            // Ask the launcher to parse the registration resource file 
+            RSisLauncherSession launcher;
+            CleanupClosePushL(launcher);
+            User::LeaveIfError(launcher.Connect());
+            RFile file;
+            User::LeaveIfError(file.Open(fs, *regFilesArray[i], EFileRead));
+            RArray<TLanguage> appLanguages;
+            CleanupClosePushL(appLanguages);
+            TRAPD(err,appData=launcher.SyncParseResourceFileL(file, appLanguages));
+            CleanupStack::PopAndDestroy(&appLanguages);
+            file.Close();
+            CleanupStack::PopAndDestroy(&launcher);            // popping and destroying as it is not reqd further.
+            
+            DEBUG_PRINTF2(_L("Finished Parsing Registration Resource file %S successfuly"), regFilesArray[i]);
+            if(KErrCorrupt == err)	        
+                {	                                       
+                continue;
+                }
+            else if(KErrNone != err)
+                {	                                             
+                User::Leave(err);
+                }
+            
+            CleanupStack::PushL(appData);
+            TUid appuid = appData->AppUid();            
+            HBufC* finalAppName = TParsePtrC(appData->AppFile()).NameAndExt().AllocLC();
+            const RPointerArray<Usif::CLocalizableAppInfo> aLocalizableAppInfoList = appData->LocalizableAppInfoList();
+            HBufC* groupName = NULL;
+            HBufC* iconFileName = NULL;
+            TInt fileSize = 0 ;
+            
+            //If localizable info for an app is present get the localized group name, else get it from app registration data 
+            if(0 == aLocalizableAppInfoList.Count())
+                {
+                if(appData->GroupName().Length())
+                    {
+                    groupName = appData->GroupName().AllocLC();
+                    DEBUG_PRINTF2(_L("Application Group Name %S"), groupName);
+                    }
+                //Since locale does not exists no need to extract, create CNativeApplicationInfo without iconFileName
+                applicationInfo = Swi::CNativeComponentInfo::CNativeApplicationInfo::NewLC(appuid, *finalAppName, groupName?*groupName:_L(""), _L(""));  
+                }
+            else
+                {
+                Usif::CLocalizableAppInfo* localizedInfo = NULL;
+                const Usif::CCaptionAndIconInfo* captionAndIconInfo = NULL;
+                localizedInfo = aLocalizableAppInfoList[0];
+                if(localizedInfo->GroupName().Length())
+                    {
+                    groupName = localizedInfo->GroupName().AllocLC();
+                    }
+                captionAndIconInfo = localizedInfo->CaptionAndIconInfo();
+                //Check if caption and icon info for an app is present or not, if present extract the icon file.
+                if(captionAndIconInfo)
+                    {
+                    if(captionAndIconInfo->IconFileName().Length())
+                        iconFileName = captionAndIconInfo->IconFileName().AllocLC();
+                    
+                    if(iconFileName != NULL)
+                        {                        
+                        HBufC* finalIconFileName = TParsePtrC(*iconFileName).NameAndExt().AllocLC();
+                        
+                        _LIT(KIconFileNameFmt, "%c:\\resource\\install\\icon\\0x%08x\\%S");     // Applicaiton Uid
+                        iconFile.Format(KIconFileNameFmt, TUint(systemDrive), appuid.iUid,
+                        finalIconFileName);
+                        
+                        TInt err = fs.MkDirAll(iconFile);
+                        if (err!= KErrNone && err != KErrAlreadyExists)
+                        User::LeaveIfError(err);
+                        
+                        //Find from the list of files to be copied , the file description of the icon file returned by the parser
+                        for(TInt k = 0; k < listOfFilesToBeAdded.Count() ; k++)
+                            {                      
+                            currentFileDescription = listOfFilesToBeAdded[k];
+                            if(TParsePtrC(currentFileDescription->Target()).NameAndExt().Compare(*finalIconFileName))
+                                {
+                                break;
+                                }
+                            }	              
+                        //Check if there is enough space to extract the icon file           
+                        fileSize = currentFileDescription->UncompressedLength();
+                        if(currentAvailableDriveSpace <  fileSize)
+                            {
+                            //No memory to extract the file
+                            User::LeaveIfError(KErrDiskFull);
+                            }
+                        
+                        //Extracting the icon file to a temp location
+                        RFile tempIconFile;
+                        TInt index = 1;
+                        TBuf<10>  integerAppendStr;
+                        // Check if file already exists, if yes then create file with another name (e.g. *_1 or *_2)
+                        while(1)
+                            {	                  
+                            err = tempIconFile.Create(fs, iconFile, EFileStream|EFileWrite|EFileRead|EFileShareExclusive);
+                            if(err == KErrAlreadyExists)
+                                {	                     
+                                integerAppendStr.TrimAll();
+                                integerAppendStr.Format(_L("%d"), index++);
+                                TInt pos = iconFile.Length()-TParsePtrC(iconFile).Ext().Length();
+                                iconFile.Insert(pos,integerAppendStr);	                      
+                                }
+                            else if(err == KErrNone)
+                                {
+                                //Everthing is fine, proceed	                      
+                                break;               
+                                }
+                            else
+                                {
+                                tempIconFile.Close();
+                                User::Leave(err);
+                                }
+                            }
+                        CleanupClosePushL(tempIconFile);  
+                        
+                        DEBUG_PRINTF2(_L("Icon file to be extraced is %S"), &iconFile);
+                        User::LeaveIfError(iSisHelper.ExtractFileL(fs, tempIconFile, listOfFilesToBeAdded[i]->Index(), application->AbsoluteDataIndex(), UiHandler())); 	              
+                        DEBUG_PRINTF(_L8("Finished extracting Icon file successfuly"));
+                        //After copy the available disk space is reduced
+                        currentAvailableDriveSpace -= fileSize;                        
+                        CleanupStack::PopAndDestroy(3,iconFileName);  //file,finalIconFileName,iconFileSize
+                        
+                        //Create CNativeApplicationInfo with iconFileName
+                        applicationInfo = Swi::CNativeComponentInfo::CNativeApplicationInfo::NewLC(appuid, *finalAppName, groupName?*groupName:_L(""), iconFile);                                          
+                        }
+                    else
+                        {
+                        //Since iconFileName does not exists no need to extract, create CNativeApplicationInfo without iconName
+                        applicationInfo = Swi::CNativeComponentInfo::CNativeApplicationInfo::NewLC(appuid, *finalAppName, groupName?*groupName:_L(""), _L(""));  
+                        }
+                    }
+                }	    
 
+            DEBUG_PRINTF2(_L("Application Uid 0x%08x"), appuid);
+            DEBUG_PRINTF2(_L("Application Name %S"), finalAppName);
+            if(groupName)
+                DEBUG_PRINTF2(_L("Application Group Name %S"), groupName);
+            if(iconFile.Length())
+                DEBUG_PRINTF2(_L("Application Icon File Name %S"), &iconFile);
+                             
+            const_cast <Sis::CController&>(aController).AddApplicationInfoL(applicationInfo);
+            CleanupStack::Pop(applicationInfo);
+            if(groupName)
+                CleanupStack::PopAndDestroy(3, appData);	//groupName,finalAppName,appData
+            else
+                CleanupStack::PopAndDestroy(2, appData);    //finalAppName,appData
+            languages.Close();	    
+            }
+              
+        CleanupStack::PopAndDestroy(3,&drives);  //fs,driveSpaces,drives
+        CleanupStack::Pop(&listOfFilesToBeExtracted);
+        listOfFilesToBeExtracted.Close(); 
+        CleanupStack::PopAndDestroy(&regFilesArray);  
+      }       
+    #endif    
+    
 	//Append planned controllers list
 	iFilesFromPlannedControllers.AppendL(filesList);
 	CleanupStack::Pop(filesList);
@@ -1101,7 +1429,7 @@
 	// Some files may need to be questioned of overwrite only when the planner is not in info collection mode.
 	if (!IsInInfoCollectionMode())	
 	#endif
-	 //Some files may need to be questioned of overwrite
+	//Some files may need to be questioned of overwrite
 		WarnEclipseOverWriteL(*application);
  	
  	// Reset the file list array for next controller use
@@ -1114,8 +1442,7 @@
   	CleanupStack::Pop(application); 
 	return application;
 	}
-
-
+	
 // Prepare the eclipsable files list from the right source according to the upgrade.	
 void CInstallationPlanner::PrepareEclipsableFilesListL(const Sis::CController& aController)
 	{
--- a/installationservices/swi/source/swis/server/installationplanner.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/installationplanner.h	Tue Aug 31 15:21:33 2010 +0300
@@ -585,7 +585,6 @@
 	// Is the planning hapens just for component information collection?
 	TBool iIsInInfoCollectionMode;
 	#endif
-
 	};
 } // namespace Swi 
 
--- a/installationservices/swi/source/swis/server/installationprocessor.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/installationprocessor.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -30,6 +30,9 @@
 #include <usif/sts/sts.h>
 #include "swtypereginfo.h"
 #include "installswtypehelper.h"
+#include "cleanuputils.h"
+#include "userselections.h"
+#include "sissupportedlanguages.h"
 #else
 #include "integrityservices.h"
 #endif
@@ -60,7 +63,7 @@
 #include "progressbar.h"
 #include "fileextractor.h"
 #include "securitycheckutil.h"
-
+#include <s32strm.h>
 using namespace Swi;
 
 
@@ -170,7 +173,11 @@
 		
 	iFilesToCopy.ResetAndDestroy();
 	iApparcRegFiles.ResetAndDestroy();
-	
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+	iApparcRegFilesForParsing.ResetAndDestroy();
+	iApparcRegFileData.ResetAndDestroy();
+	delete iAppRegExtractor;	
+#endif	
 	iLoader.Close();
 	iSkipFile.Close();
 	
@@ -200,6 +207,16 @@
 		{
 		iFileExtractor->Cancel();
 		}
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK  	
+	if (iAppRegExtractor != NULL)
+        {
+		if (iAppRegExtractor->IsActive())
+			{
+			iAppRegExtractor->Cancel();
+			}
+		}
+#endif
 	}
 
 void CInstallationProcessor::DisplayFileL(const CSisRegistryFileDescription& aFileDescription, Sis::TSISFileOperationOptions aFileOperationOption)
@@ -565,6 +582,10 @@
 	iFilesToCopyCurrent = 0;
 	iFilesToCopy.ResetAndDestroy();
 	iApparcRegFiles.ResetAndDestroy();
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	iApparcRegFilesForParsing.ResetAndDestroy();
+	iApparcRegFileData.ResetAndDestroy();
+#endif
 	return ETrue;
 	}
 	
@@ -752,15 +773,78 @@
 			CleanupStack::PopAndDestroy(2, &entry); // presintalledSids
 #else
 			CleanupStack::PopAndDestroy(3, &session); // entry, presintalledSids
-#endif
-			
+#endif			
 			}
 		
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK		
+		
+		// Find out all the regisration resource files associated with this package UID and add to the list of 
+		// files to be processed later for parsing		
+		TRAPD(err, AddAppArcRegResourceFilesL());
+		if ( err != KErrNotFound && err != KErrNone)
+		    User::Leave(err);
+#endif
 		iCurrent = 0;
 		return ETrue;
 		}
 	}
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+void CInstallationProcessor::AddAppArcRegResourceFilesL()
+    {
+    RSisRegistryEntry entry;
+    TInt err = KErrNone;
+    if ( !ApplicationL().IsUninstall() )
+        err = entry.Open(iRegistryWrapper.RegistrySession(), ApplicationL().ControllerL().Info().Uid().Uid());
+    else
+        return;
+    
+    User::LeaveIfError(err);
+    CleanupClosePushL(entry);
+    AddAppArcRegResourceFilesForRegEntryL(entry);
+    
+    RPointerArray<CSisRegistryPackage> augmentationArray;
+    CleanupResetAndDestroyPushL(augmentationArray);
+    entry.AugmentationsL(augmentationArray);
+    CleanupStack::Pop(&augmentationArray);
+    CleanupStack::PopAndDestroy(&entry);    
+        
+    CleanupResetAndDestroyPushL(augmentationArray);
+    TInt count = augmentationArray.Count();
+    for ( TInt i=0; i < count; ++i)
+        {
+        TInt err = entry.OpenL(iRegistryWrapper.RegistrySession(),*augmentationArray[i]);
+        User::LeaveIfError(err);
+        CleanupClosePushL(entry);
+        AddAppArcRegResourceFilesForRegEntryL(entry);
+        CleanupStack::PopAndDestroy(&entry);
+        }
+    
+    CleanupStack::PopAndDestroy(&augmentationArray);
+    }
+
+void CInstallationProcessor::AddAppArcRegResourceFilesForRegEntryL(RSisRegistryEntry& aEntry)
+    {
+    RPointerArray<HBufC> filesArray;
+    CleanupResetAndDestroyPushL(filesArray);
+    aEntry.FilesL(filesArray);    
+    TInt count = filesArray.Count();
+    CSisRegistryPackage *regPkg = aEntry.PackageL();
+    CleanupStack::PushL(regPkg);
+    
+    for (TInt i=0; i<count; ++i)
+        {
+        if (FileIsApparcReg(*filesArray[i]))
+            {
+            CAppRegFileData *tmpAppRegFileData = CAppRegFileData::NewLC(*filesArray[i],*regPkg);
+            iApparcRegFilesForParsing.AppendL(tmpAppRegFileData);
+            CleanupStack::Pop(tmpAppRegFileData);
+            }
+        }
+    CleanupStack::PopAndDestroy(2,&filesArray);
+    }
+#endif
+
 TBool CInstallationProcessor::DoStateVerifyPathsL()
 	{
 	if (iCurrent < ApplicationL().FilesToAdd().Count())
@@ -818,8 +902,76 @@
 	iCurrent = 0;
 	return ETrue;
 	}
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+TBool CInstallationProcessor::DoParseApplicationRegistrationFilesL()
+    {
+    if (iCurrent == 0)
+        DEBUG_PRINTF2(_L("Install Server - DoParseApplicationRegistrationFilesL - Number of Application registration resource files to be parsed %d"), iApparcRegFilesForParsing.Count());
+    
+	if (iAppRegExtractor != NULL)
+        {
+        if (iAppRegExtractor->GetErrorCode() == KErrCorrupt)
+            {
+            delete iApparcRegFilesForParsing[--iCurrent];
+            iApparcRegFilesForParsing.Remove(iCurrent);
+            }
+        }
+    
+    if (iCurrent < iApparcRegFilesForParsing.Count())
+        { 
+        TDesC& fileDescription = (iApparcRegFilesForParsing[iCurrent++]->GetAppRegFile());   
+        // Continue processing the next file if a registration resource file is not found(in case of SA over SA)
+        TRAPD(err,ParseRegistrationResourceFileL(fileDescription));        
+        if(KErrNotFound == err || KErrPathNotFound == err)
+            {               
+            delete iApparcRegFilesForParsing[--iCurrent];
+            iApparcRegFilesForParsing.Remove(iCurrent); 
+            TRequestStatus* status = &iStatus;
+            User::RequestComplete(status, KErrNone);     
+            WaitState(ECurrentState);
+            }
+        else if(KErrNone != err )
+            {
+            User::Leave(err);
+            }
+        else
+            {
+            WaitState(ECurrentState);
+            }
+        return EFalse;
+        }
+    else
+        {
+        iCurrent = 0;
+        return ETrue;
+        }
+    }
 
-
+TBool CInstallationProcessor::ParseRegistrationResourceFileL(const TDesC& aTargetFileName)
+    {
+    DEBUG_PRINTF2(_L("Install Server - ParseRegistrationResourceFileL - Parsing '%S' registration resource file"), &aTargetFileName);
+    if ( NULL == iAppRegExtractor )
+        {
+        DEBUG_PRINTF(_L("Install Server - ParseRegistrationResourceFileL - Creating CAppRegExtractor for async parsing of registration resource file"));
+        CApplication& app = const_cast<CApplication&>(ApplicationL());
+        RArray<TInt> matchingLanguages = app.GetDeviceSupportedLanguages();
+        RArray<TLanguage> devLanguages;
+        CleanupClosePushL(devLanguages);
+        TInt count = matchingLanguages.Count();
+        
+        DEBUG_PRINTF2(_L("Install Server - ParseRegistrationResourceFileL - %d matching languages found"),count);
+        for ( TInt i=0; i<count; i++)
+            {
+            devLanguages.Append((TLanguage)matchingLanguages[i]);            
+            }
+        iAppRegExtractor = CAppRegExtractor::NewL(Fs(),devLanguages,iApparcRegFileData);
+        CleanupStack::Pop(&devLanguages);       
+        }
+        
+    iAppRegExtractor->ExtractAppRegInfoSizeL(aTargetFileName, iStatus);
+    return EFalse;
+    }
+#endif
 
 TBool CInstallationProcessor::DoStateDisplayFilesL()
 	{
@@ -846,6 +998,100 @@
 	// destroy the memory heavy file copy descriptions
 	iFilesToCopy.ResetAndDestroy();
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+	RArray<TAppUpdateInfo> affectedApps;    
+	CleanupClosePushL(affectedApps);
+	const CApplication& application = ApplicationL();
+	//if there are reg files in the package or if its an upgrade (in case of SA (with app) over SA(with no app))
+	if(iApparcRegFilesForParsing.Count() != 0 || application.IsUpgrade())
+	    {
+	    //Create the list of Application Uids which are affected by the Installation    	    	    
+	    Usif::TComponentId componentId = 0;
+	    RArray<Usif::TComponentId> componentIds;
+	    CleanupClosePushL(componentIds);
+	    RArray<TUid> existingAppUids;
+	    CleanupClosePushL(existingAppUids);
+	    TAppUpdateInfo existingAppInfo;     
+	    TUid packageUid = application.ControllerL().Info().Uid().Uid();
+	    
+        if(application.IsUpgrade()) 
+            {	 	    
+            //Get all componentIds
+            iRegistryWrapper.RegistrySession().GetComponentIdsForUidL(packageUid, componentIds);            
+            TInt count = componentIds.Count();
+            if(0 == count)
+                {
+                DEBUG_PRINTF(_L("ComponentIDs not found for the base package"));
+                User::Leave(KErrNotFound);
+                }
+                                
+            //SA over SA
+            if(application.ControllerL().Info().InstallType() == Sis::EInstInstallation )
+                {        
+                //Get the compid for base package
+                componentId = iRegistryWrapper.RegistrySession().GetComponentIdForUidL(packageUid);               
+                      
+                TInt index = componentIds.Find(componentId);
+
+                //Exclude the Base SA compId from the list 
+                componentIds.Remove(index);
+                //Get the apps for Base SA compId and mark them as to be deleted
+                existingAppUids.Reset();
+                TRAPD(err,iRegistryWrapper.RegistrySession().GetAppUidsForComponentL(componentId, existingAppUids);)  
+                //If Base Package does not contain any app then GetAppUidsForComponentL will return KErrNotFound, ignore the error else leave
+                if (KErrNone != err && KErrNotFound != err)
+                    {
+                    User::Leave(err);
+                    }
+                
+                for(TInt i = 0 ; i < existingAppUids.Count(); ++i)
+                    {
+                    existingAppInfo = TAppUpdateInfo(existingAppUids[i], EAppUninstalled);    
+                    affectedApps.AppendL(existingAppInfo);
+                    }                
+                //Get the apps for Remaining CompIds and mark them as to be upgraded               
+                for(TInt i = 0 ; i < componentIds.Count(); ++i)
+                    {
+                    existingAppUids.Reset();                    
+                    //If there are no apps within the existing components (SP's) then it will return KErrNotFound
+                    TRAPD(err, iRegistryWrapper.RegistrySession().GetAppUidsForComponentL(componentIds[i], existingAppUids);) 
+                    if (KErrNone != err && KErrNotFound != err)
+                        {
+                        User::Leave(err);
+                        }
+                    
+                    for(TInt k = 0 ; k < existingAppUids.Count(); ++k)
+                        {
+                        existingAppInfo = TAppUpdateInfo(existingAppUids[k], EAppInstalled);    
+                        affectedApps.AppendL(existingAppInfo);
+                        }
+                    }                                
+                }
+                
+            //SP over SP
+            if(application.ControllerL().Info().InstallType() == Sis::EInstAugmentation)
+                {
+                componentId = iRegistryWrapper.RegistrySession().GetComponentIdForPackageL(application.PackageL().Name(), application.PackageL().Vendor());     
+                //Get the apps for Base SP compId and mark them as to be deleted
+                existingAppUids.Reset();
+                //If there are no apps within the existing component (SP) then it will return KErrNotFound
+                TRAPD(err, iRegistryWrapper.RegistrySession().GetAppUidsForComponentL(componentId, existingAppUids);) 
+                if (KErrNone != err && KErrNotFound != err)
+					{
+                    User::Leave(err);
+					}
+                
+                for(TInt i = 0 ; i < existingAppUids.Count(); ++i)
+                   {
+                   existingAppInfo = TAppUpdateInfo(existingAppUids[i], EAppUninstalled);    
+                   affectedApps.Append(existingAppInfo);
+                   }                                  
+                }        
+            }	                   
+        CleanupStack::PopAndDestroy(2, &componentIds);
+	    }		
+#endif
+	
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	// Now that we are ready to make changes to the registry we start a transaction
 	// Note that the commit/rollback action is subsequently taken by the later steps of the state machine
@@ -936,6 +1182,11 @@
 			{
 			iRegistryWrapper.RegistrySession().UpdateEntryL(ApplicationL(), thisController, TransactionSession().TransactionIdL());
 			}
+		TInt count = iApparcRegFileData.Count();
+        for (int i = 0; i < count; i++)
+            {
+		    iRegistryWrapper.RegistrySession().UpdateEntryL(ApplicationL(), *iApparcRegFileData[i], iApparcRegFilesForParsing[i]->GetSisRegistryPackage());
+		    }
 #else
 		session.UpdateEntryL(ApplicationL(), thisController, IntegrityServices().TransactionId());
 #endif
@@ -954,6 +1205,11 @@
 			{
 			iRegistryWrapper.RegistrySession().AddEntryL(ApplicationL(), thisController, TransactionSession().TransactionIdL());
 			}
+		TInt count = iApparcRegFileData.Count();
+		for (int i = 0; i < count; i++)
+		    {
+                iRegistryWrapper.RegistrySession().AddEntryL(*iApparcRegFileData[i], iApparcRegFilesForParsing[i]->GetSisRegistryPackage());
+		    }
 #else
 		session.AddEntryL(ApplicationL(), thisController, IntegrityServices().TransactionId());
 #endif
@@ -976,6 +1232,79 @@
 	// RSisRegistryWritableSession::AddEntryL()
 	// RSisRegistryWritableSession::UpdateEntryL()
 	InstallSoftwareTypeHelper::RegisterMimeTypesL(iSoftwareTypeRegInfoArray);
+	
+	//if there are reg files in the package or if its an upgrade (in case of SA (with app) over SA(with no app))
+	if(iApparcRegFilesForParsing.Count() != 0 || application.IsUpgrade())
+	    {
+	    //Create the list of Application Uids which are affected by the Installation                           
+        RArray<Usif::TComponentId> componentIds;
+        CleanupClosePushL(componentIds);
+        RArray<TUid> newAppUids;    
+        CleanupClosePushL(newAppUids);
+        TAppUpdateInfo existingAppInfo, newAppInfo;     
+        TUid packageUid = application.ControllerL().Info().Uid().Uid();
+        //Get all componentIds for the application
+        componentIds.Reset();
+        iRegistryWrapper.RegistrySession().GetComponentIdsForUidL(packageUid, componentIds);
+        TInt count = componentIds.Count();
+        
+        //Get the apps for All CompIds               
+        for(TInt i = 0 ; i < count; i++)
+            {
+            newAppUids.Reset();                    
+            TRAPD(err,iRegistryWrapper.RegistrySession().GetAppUidsForComponentL(componentIds[i], newAppUids))
+            if (KErrNone != err && KErrNotFound != err)
+                {
+                User::Leave(err);
+                }
+            
+            for(TInt i = 0 ; i < newAppUids.Count(); ++i)
+                {
+                existingAppInfo = TAppUpdateInfo(newAppUids[i], EAppUninstalled);
+                TInt index = 0;
+                index = affectedApps.Find(existingAppInfo);
+                if(KErrNotFound != index)
+                    {
+                    affectedApps.Remove(index);
+                    }
+                existingAppInfo = TAppUpdateInfo(newAppUids[i],EAppInstalled);
+                affectedApps.AppendL(existingAppInfo);            
+                }        
+            }
+        
+        for(TInt i = 0; i < affectedApps.Count(); i++)
+           {
+           DEBUG_PRINTF2(_L("AppUid is 0x%x"), affectedApps[i].iAppUid);
+           DEBUG_PRINTF2(_L("Action is %d"), affectedApps[i].iAction);
+           }
+        
+        //Updating apps to be notified
+        RArray<TAppUpdateInfo> currentNotifiableApps;
+        CleanupClosePushL(currentNotifiableApps);
+        const_cast<CPlan&>(Plan()).GetAffectedApps(currentNotifiableApps);
+        TInt appCount = affectedApps.Count();
+        for(TInt k = 0; k < appCount ; ++k)
+            {
+            TInt count = currentNotifiableApps.Count();
+            TUid appUid = affectedApps[k].iAppUid;
+            //compare the apps present in the package currently being processed with the existing set of affected apps,
+            //if alredy exists then update else add it to the list
+            for(TInt index = 0; index < count ; ++index)
+               {
+               if(appUid == currentNotifiableApps[index].iAppUid)
+                   {           
+                   currentNotifiableApps.Remove(index);                                    
+                   }
+               }
+            currentNotifiableApps.AppendL(affectedApps[k]);
+            }
+        
+        const_cast<CPlan&>(Plan()).ResetAffectedApps();
+        const_cast<CPlan&>(Plan()).SetAffectedApps(currentNotifiableApps);
+        
+        CleanupStack::PopAndDestroy(3, &componentIds);
+	    }
+	CleanupStack::PopAndDestroy(&affectedApps);
 #endif
 	return ETrue;
 	}
@@ -1307,8 +1636,47 @@
 		RSisLauncherSession launcher;
 		CleanupClosePushL(launcher);
 		User::LeaveIfError(launcher.Connect());
-	
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+		RPointerArray<Usif::CApplicationRegistrationData> appRegInfoArray;
+		CleanupClosePushL(appRegInfoArray);
+
+		RFs fs;
+		CleanupClosePushL(fs);
+        User::LeaveIfError(fs.Connect());
+		User::LeaveIfError(fs.ShareProtected());
+		RArray<TLanguage> appLanguages;
+		CleanupClosePushL(appLanguages);
+				        
+		const TInt appCount = iApparcRegFiles.Count();
+		for (TInt i=0; i<appCount; ++i)
+			{
+			TInt bufLen = iApparcRegFiles[i]->Size();
+			HBufC* buf = HBufC::NewLC(bufLen);
+			TPtr appFile = buf->Des();
+			appFile.Format(_L("%S"), iApparcRegFiles[i]);
+
+			RFile file;
+			User::LeaveIfError(file.Open(fs, appFile, EFileRead));
+			CleanupClosePushL(file);
+			Usif::CApplicationRegistrationData* appRegData  = NULL;
+			TRAPD(err, appRegData = launcher.SyncParseResourceFileL(file, appLanguages));
+			if (KErrNone == err)
+			    {
+		         CleanupStack::PushL(appRegData);
+		         appRegInfoArray.AppendL(appRegData);
+		         CleanupStack::Pop(appRegData);
+			    }
+			CleanupStack::PopAndDestroy(2,buf);
+			}
+		
+		launcher.NotifyNewAppsL(appRegInfoArray);
+        fs.Close();
+        appRegInfoArray.ResetAndDestroy();
+		CleanupStack::PopAndDestroy(3, &appRegInfoArray);
+#else
 		launcher.NotifyNewAppsL(iApparcRegFiles);
+#endif
 		// clean up our list so we don't notify of the files twice
 		iApparcRegFiles.ResetAndDestroy();
 		
@@ -1333,7 +1701,7 @@
 		}
 	return EFalse;
 	}
-	
+
 void CInstallationProcessor::AddApparcFilesInListL(const TDesC& aTargetFileName)
 	{
 	if (FileIsApparcReg(aTargetFileName))
@@ -1342,5 +1710,79 @@
 		HBufC* tmp = aTargetFileName.AllocLC();
 		iApparcRegFiles.AppendL(tmp);
 		CleanupStack::Pop(tmp);
+
+#ifdef 	SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+	    // we're installing a reg file so add it to our list for parsing it and 
+		// populating SCR in EParseApplicationRegistrationFiles state of CProcessor	    
+		TInt index = UserSelectedLanguageIndexL(ApplicationL());
+		CSisRegistryPackage *regPkg = CSisRegistryPackage::NewLC(ApplicationL().ControllerL().Info().Uid().Uid(),\
+		        ApplicationL().ControllerL().Info().Names()[index]->Data(),\
+		        ApplicationL().ControllerL().Info().UniqueVendorName().Data());
+		CAppRegFileData *appRegData =CAppRegFileData::NewLC(aTargetFileName,*regPkg);
+	    iApparcRegFilesForParsing.AppendL(appRegData);
+	    CleanupStack::Pop(appRegData);
+	    CleanupStack::PopAndDestroy(regPkg);
+#endif		
 		}		
 	}
+
+#ifdef  SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
+TInt CInstallationProcessor::UserSelectedLanguageIndexL(const CApplication& aApplication) const
+// used to find out which is the index of the selected language, 
+// based on the language selection. This will be used for the relevant package and vendor names
+    {
+    TLanguage language = aApplication.UserSelections().Language();
+    
+    TInt index = KErrNotFound;
+    for (TInt i = 0; i < aApplication.ControllerL().SupportedLanguages().Count(); i++)
+        {
+        if (aApplication.ControllerL().SupportedLanguages()[i] == language)
+            {
+            index = i;
+            break;  
+            }
+        }
+    User::LeaveIfError(index);
+    return index;
+    }   
+
+CAppRegFileData* CAppRegFileData::NewL(const TDesC& aAppRegFile, const CSisRegistryPackage& aSisRegistryPackage)
+    {
+    CAppRegFileData* self = CAppRegFileData::NewLC(aAppRegFile, aSisRegistryPackage);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CAppRegFileData* CAppRegFileData::NewLC(const TDesC& aAppRegFile, const CSisRegistryPackage& aSisRegistryPackage)
+    {
+    CAppRegFileData* self = new(ELeave) CAppRegFileData();
+    CleanupStack::PushL(self);
+    self->ConstructL(aAppRegFile, aSisRegistryPackage);
+    return self;
+    }
+void CAppRegFileData::ConstructL(const TDesC& aAppRegFile, const CSisRegistryPackage& aSisRegistryPackage)
+    {
+    iAppRegFile = aAppRegFile.AllocL();
+    iSisRegistryPackage = CSisRegistryPackage::NewL(aSisRegistryPackage);
+    }
+CAppRegFileData::CAppRegFileData()
+    {
+    }
+
+CAppRegFileData::~CAppRegFileData()
+    {
+    delete iAppRegFile;
+    delete iSisRegistryPackage;
+    }
+
+TDesC& CAppRegFileData::GetAppRegFile()
+    {
+    return *iAppRegFile;
+    }
+
+CSisRegistryPackage& CAppRegFileData::GetSisRegistryPackage()
+    {
+    return *iSisRegistryPackage;
+    }
+#endif
--- a/installationservices/swi/source/swis/server/installationprocessor.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/installationprocessor.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -34,6 +34,9 @@
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include "registrywrapper.h"
+#include "appregextractor.h"
+#include <swi/sisregistrypackage.h>
+#include <swi/sisregistryentry.h>
 #else
 #include "sisregistrywritablesession.h"
 #endif
@@ -53,7 +56,9 @@
 class CFileExtractor;
 class CSidCache;
 class MSisDataProvider;
-
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+class CAppRegFileData;
+#endif
 /**
  * This class processes a CApplication created by the installation planner
  * @released
@@ -271,6 +276,14 @@
 	virtual TBool DoStateVerifyPathsL();
 	virtual TBool DoStateInstallFilesL();
 	virtual TBool DoStateDisplayFilesL();
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+	virtual TBool DoParseApplicationRegistrationFilesL();
+	TBool ParseRegistrationResourceFileL(const TDesC& aTargetFileName);
+	TBool GetComponentIdL(const Usif::RSoftwareComponentRegistry& aScrSession, const TUid& aPackageUid, const TInt aPackageIndex, Usif::TComponentId& aComponentId);	
+	void AddAppArcRegResourceFilesL();
+	void AddAppArcRegResourceFilesForRegEntryL( RSisRegistryEntry& aEntry);
+	TInt UserSelectedLanguageIndexL(const CApplication& aApplication) const;
+#endif	
 	virtual TBool DoStateUpdateRegistryL();
 	virtual TBool DoStateProcessFilesL();
 	virtual TBool DoStateProcessSkipFilesL();
@@ -306,6 +319,7 @@
 
 	/// @return true if aFilename is an Apparc registration file 
 	bool FileIsApparcReg(const TDesC& aFilename) const;
+	
 private:
 	/// Security Manager provided by SWIS
 	CSecurityManager& iSecurityManager;
@@ -334,7 +348,7 @@
 	 * running an exe.
 	 */
 	RPointerArray<TDesC> iApparcRegFiles;
-	
+    
 	RLoader iLoader;
 	
 	/**
@@ -345,10 +359,33 @@
 	
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	/** The list of the software types to be registered read from the XML registration file. */
-	RCPointerArray<CSoftwareTypeRegInfo> iSoftwareTypeRegInfoArray;
+	RCPointerArray<Usif::CSoftwareTypeRegInfo> iSoftwareTypeRegInfoArray;
+	RPointerArray<Usif::CApplicationRegistrationData> iApparcRegFileData;
+   /**
+     * The list of Apparc registration files to parse to populate SCR
+     */ 
+    RPointerArray<CAppRegFileData> iApparcRegFilesForParsing;
+    
+    CAppRegExtractor *iAppRegExtractor;  
+        
 #endif
 	};
-
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+class CAppRegFileData:public CBase
+    {
+public:
+    static CAppRegFileData* NewLC(const TDesC& aAppRegFile, const CSisRegistryPackage& aSisRegistryPackage); 
+    static CAppRegFileData* NewL(const TDesC& aAppRegFile, const CSisRegistryPackage& aSisRegistryPackage);
+    TDesC& GetAppRegFile();
+    CSisRegistryPackage& GetSisRegistryPackage();
+    ~CAppRegFileData();
+private:
+    CAppRegFileData();
+    void ConstructL(const TDesC& aAppRegFile, const CSisRegistryPackage& aSisRegistryPackage);
+    HBufC *iAppRegFile;
+    CSisRegistryPackage *iSisRegistryPackage;
+    };
+#endif
 	
 // inline functions
 
--- a/installationservices/swi/source/swis/server/installmachine.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/installmachine.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,4 +1,4 @@
-/*
+	/*
 * Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
@@ -51,17 +51,42 @@
 #include <ocsp.h>
 #include "secutils.h"
 #include "sislauncherclient.h"
-
+#include "swicenrep.h"
+// Security settings.
+#include <x509certext.h>
+#include <pkixvalidationresult.h>
+#include <secsettings/secsettingsclient.h>
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include "swi/sisversion.h"
 #include "swi/nativecomponentinfo.h"
 #include <usif/usifcommon.h>
+#include <usif/scr/appregentries.h>
 #include "scrdbconstants.h"
 #endif
 
 using namespace Swi;
 using namespace Swi::Sis;
 
+_LIT(KExpressSignedOID, "1.2.826.0.1.1796587.1.1.2.1"); 
+_LIT(KCertifiedSignedOID, "1.2.826.0.1.1796587.1.1.2.2"); 
+_LIT(KCertifiedSignedWithVerisignOID, "1.2.826.0.1.1796587.1.1.2.3"); 
+
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
+void DeRegisterForceRegisteredAppsL()
+	{
+	// Deregister the force registered applications from AppArc
+	DEBUG_PRINTF(_L8("Deregistering the force registered applications with AppArc"));
+	RSisLauncherSession launcher;
+	CleanupClosePushL(launcher);
+	User::LeaveIfError(launcher.Connect());
+	RArray<TAppUpdateInfo> emptyAppRegDataArray;
+	launcher.NotifyNewAppsL(emptyAppRegDataArray);
+	CleanupStack::PopAndDestroy(&launcher);
+	}
+
+#endif
 
 //
 // TInstallState
@@ -362,6 +387,10 @@
 	iInstallMachine.CompleteSelf();
 	iInstallMachine.SetActive();
 	
+	// user hasn't cancelled so mark the installation as confirmed. This
+	// will allow the registry cache to be regenerated further on during the
+	// installation process.
+	iInstallMachine.iOperationConfirmed = ETrue;	
 	}
 
 CInstallMachine::TState* CInstallMachine::TConfirmationState::CompleteL()
@@ -489,6 +518,7 @@
 			}
 		
 		case ESignatureSelfSigned:	
+		    {
 			iInstallMachine.SetTrust(ESisPackageCertificateChainNoTrustAnchor);
 		    iInstallMachine.SetValidationStatus(EValidated);
 		    
@@ -497,11 +527,39 @@
 			if(iInstallMachine.IsInInfoMode())
 				break;
 			#endif
-			if (!SecurityAlertL(ETrue))
-		    	User::Leave(KErrCancel);			
-		    break;
-		    
-		   
+			
+            TBool allowSelfSigned(ETrue);
+	          
+	        // Session to access Install Central Repository Server.
+	        SecuritySettingsServer::RSecSettingsSession secSettingsSession;
+
+	        // Connect to the Central Repository server.
+	        User::LeaveIfError(secSettingsSession.Connect());
+
+            CleanupClosePushL(secSettingsSession);
+	             
+            // Read-in the values of the settings - KAllowSelfSignedInstallKey. 
+            // These will retain the default values if any error occurs.
+	        TRAPD(err, (allowSelfSigned = secSettingsSession.SettingValueL(KUidInstallationRepository , KAllowSelfSignedInstallKey)));
+            if (err == KErrNone || err == KErrSettingNotFound || err == KErrNotFound || err == KErrCorrupt)
+                {
+                if (err == KErrCorrupt)
+                    {
+                    DEBUG_PRINTF(_L8("Install Machine - CenRep file 2002cff6.txt is corrupt. Using Default Value to Install."));
+                    }
+                
+                if (!allowSelfSigned || !SecurityAlertL(ETrue))
+                    {
+                    User::Leave(KErrCancel);
+                    }
+                }
+            else
+                {
+                User::Leave(err);
+                }
+            CleanupStack::PopAndDestroy(&secSettingsSession);    	         			
+			break;
+		    }		   
         case ECertificateValidationError:
 		case ENoCertificate:
 		case ENoCodeSigningExtension:
@@ -572,11 +630,12 @@
 		}		
 		
 	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	// Forcibly skip the OCSP check and directly go to the prerequisites checking state when the 
-	// machine runs in component information collection mode. OCSP would introduce latency which is not expected when retrieving component info
+	// Forcibly skip the OCSP & prerequisites checking and directly go to the plan installation state when the 
+	// machine runs in component information collection mode. OCSP would introduce latency which is not expected 
+	// when retrieving component info.
 	if(iInstallMachine.IsInInfoMode())
 		{	
-		return static_cast<TState*>(&iInstallMachine.iCheckPrerequisitesState);
+		return static_cast<TState*>(&iInstallMachine.iPlanInstallationState);
 		}
 	#endif
 
@@ -632,24 +691,104 @@
 	
 	if ((iInstallMachine.iCertificates.Count()) && iNeedOcsp)
 		{
-		// We haven't done the planning phase so we need to use the default
-		TAppInfo appInfo(iInstallMachine.iCurrentContentProvider->DefaultLanguageAppInfoL());
+		TInt checkOCSPForExpressSignedPkg = 1;
+		TInt checkOCSPForSelfSignedPkg = 1;
+		TInt checkOCSPForCertifiedSignedPkg = 1;
+		TInt checkOCSPForCertifiedWithVeriSignPkg = 1;
+
+		// Session to access Security Central Repository Server.
+		SecuritySettingsServer::RSecSettingsSession secSettingsSession;
 
-		// Signal OCSP check starting
-		CHandleCancellableInstallEvent* cmd = CHandleCancellableInstallEvent::NewLC(appInfo, EEventOcspCheckStart, 0, KNullDesC);
-		iInstallMachine.UiHandler().ExecuteL(*cmd);
-		CleanupStack::PopAndDestroy(cmd);
+		// Connect to the Security Central Repository server.
+		User::LeaveIfError(secSettingsSession.Connect());
+
+		CleanupClosePushL(secSettingsSession);
+    
+		// Read-in the values of the settings from the Install Central Repository. 
+		// These will retain the default values if any error occurs.
+		TRAPD(err, checkOCSPForExpressSignedPkg = secSettingsSession.SettingValueL(KUidInstallationRepository, KCheckOCSPForExpressedSignedPkgKey));
+		TRAP(err, checkOCSPForSelfSignedPkg = secSettingsSession.SettingValueL(KUidInstallationRepository, KCheckOCSPForSelfSignedPkgKey));
+		TRAP(err, checkOCSPForCertifiedSignedPkg = secSettingsSession.SettingValueL(KUidInstallationRepository, KCheckOCSPForCertifiedSignedPkgKey));
+		TRAP(err, checkOCSPForCertifiedWithVeriSignPkg = secSettingsSession.SettingValueL(KUidInstallationRepository, KCheckOCSPForCertifiedWithVeriSignPkgKey));
 		
-		// Start OCSP check.
-		TBuf8<256> ocspUri(iInstallMachine.iInstallPrefs->RevocationServerUri());
-		iInstallMachine.iSecurityManager->PerformOcspL(ocspUri, iInstallMachine.iIap,
-			&iInstallMachine.iOcspMsg,iInstallMachine.iOcspOutcomes,
-			iInstallMachine.iCertificates,iInstallMachine.iStatus);
+		CleanupStack::PopAndDestroy(&secSettingsSession);
 
-        TTime time;
-        time.UniversalTime();
-        TSisTrustStatus& trustStatus =  iInstallMachine.iController->TrustStatus();
-        trustStatus.SetLastCheckDate(time);
+		TBool makeOcspCheck = (checkOCSPForExpressSignedPkg == 1) && (checkOCSPForSelfSignedPkg == 1) && (checkOCSPForCertifiedSignedPkg == 1) && (checkOCSPForCertifiedWithVeriSignPkg == 1);
+	
+		//Find the OID of the certificate and make ocsp check based on settings retreived from cenrep
+		for (TInt i=0; i<iInstallMachine.iCertificates.Count(); ++i)
+		    {
+		    if(makeOcspCheck)//Could be true if set in the previous iCertificates.
+		        {
+		        break;
+		        }
+		    CX509Certificate* cert = iInstallMachine.iCertificates[i];
+		    const CX509CertExtension* certExt =  cert->Extension(KCertPolicies);
+			if (certExt == NULL)
+				{
+				makeOcspCheck = ETrue;
+				continue;
+				}
+		    CX509CertPoliciesExt* policyExt = CX509CertPoliciesExt::NewLC(certExt->Data());
+		    const CArrayPtrFlat<CX509CertPolicyInfo>& policies = policyExt->Policies();
+		    if(policies.Count() == 0)
+				{
+		        makeOcspCheck = ETrue;
+				}
+			for(TInt j=0; j<policies.Count(); ++j)
+				{
+				HBufC* oid = (policies[j])->Id().AllocLC();
+				if (oid->Compare(KExpressSignedOID) == 0)
+					{
+					makeOcspCheck = (checkOCSPForExpressSignedPkg==1);   
+					}
+				else if(oid->Compare(KCertifiedSignedOID) == 0)
+					{
+					makeOcspCheck = (checkOCSPForCertifiedSignedPkg==1); 
+					}
+				else if(oid->Compare(KCertifiedSignedWithVerisignOID) == 0)
+					{
+					makeOcspCheck = (checkOCSPForCertifiedWithVeriSignPkg==1);   
+					}
+				else if(iInstallMachine.iSigValidationResult == ESignatureSelfSigned)
+					{
+					makeOcspCheck = (checkOCSPForSelfSignedPkg==1);
+					}
+				CleanupStack::PopAndDestroy(oid);
+				if(makeOcspCheck)
+					{
+					break;
+					}                
+				}
+		    CleanupStack::PopAndDestroy(policyExt);       
+			}
+		
+		if (makeOcspCheck)
+		    {
+            // We haven't done the planning phase so we need to use the default
+            TAppInfo appInfo(iInstallMachine.iCurrentContentProvider->DefaultLanguageAppInfoL());
+    
+            // Signal OCSP check starting
+            CHandleCancellableInstallEvent* cmd = CHandleCancellableInstallEvent::NewLC(appInfo, EEventOcspCheckStart, 0, KNullDesC);
+            iInstallMachine.UiHandler().ExecuteL(*cmd);
+            CleanupStack::PopAndDestroy(cmd);
+            
+            // Start OCSP check.
+            TBuf8<256> ocspUri(iInstallMachine.iInstallPrefs->RevocationServerUri());
+            iInstallMachine.iSecurityManager->PerformOcspL(ocspUri, iInstallMachine.iIap,
+                &iInstallMachine.iOcspMsg,iInstallMachine.iOcspOutcomes,
+                iInstallMachine.iCertificates,iInstallMachine.iStatus);
+    
+            TTime time;
+            time.UniversalTime();
+            TSisTrustStatus& trustStatus =  iInstallMachine.iController->TrustStatus();
+            trustStatus.SetLastCheckDate(time);
+		    }
+        else
+            {
+            iNeedOcsp = EFalse;
+            iInstallMachine.CompleteSelf();
+            }
 		}
 	else
 		{
@@ -901,11 +1040,6 @@
 	//contains any executable(.exe or .dll).
 	if (iInstallMachine.IsInInfoMode())
 		{
-		TCapabilitySet userGrantableCaps;
-		userGrantableCaps.SetEmpty();
-		iInstallMachine.GetRequestedCapabilities(userGrantableCaps, filesToCapabilityCheck);
-		iInstallMachine.SetUserGrantableCapabilities(userGrantableCaps);
-		
 		Sis::CController& controller = const_cast <Sis::CController&>(iInstallMachine.iPlanner->CurrentController());
 		controller.SetHasExecutable(EFalse);
 		TInt noOfFiles = filesToCapabilityCheck.Count();		
@@ -1034,10 +1168,6 @@
 	DEBUG_PRINTF(_L8("Install Machine - Completed Postrequisites Check State"));
 	// Inform UI of final progress bar value.
 	iInstallMachine.SetProgressBarFinalValueL();
-	// user hasn't cancelled so mark the installation as confirmed. This
-	// will allow the registry cache to be regenerated further on during the
-	// installation process.
-	iInstallMachine.iOperationConfirmed = ETrue;	
 	return static_cast<TState*>(&iInstallMachine.iIntegritySupportState);
 	}
 	
@@ -1105,6 +1235,11 @@
 void CInstallMachine::TIntegritySupportState::Cancel()
 	{
 	DEBUG_PRINTF(_L8("Install Machine - Cancelling Integrity Support State"));
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	DeRegisterForceRegisteredAppsL();
+#endif
+
 	if (iInstallMachine.iProcessor)
 		{
 		iInstallMachine.iProcessor->Cancel();
@@ -1187,24 +1322,43 @@
 void CInstallMachine::PostJournalFinalizationL(TInt aError)
 	{
 	DEBUG_PRINTF(_L8("Install Machine - PostJournalFinalization"));
-
+   
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	// Do nothing in info mode
 	if(IsInInfoMode())
 		{
 		return;
-		}
+		}	    
 #endif
+	
 	if (!iPlan)
 		{
 		return;
 		}
 	const RPointerArray<CSisRegistryFileDescription>& filesToRun = iPlan->FilesToRunAfterInstall();
-
-	TInt numFiles = filesToRun.Count();
-	
+    RSisLauncherSession launcher;	        
+    if (launcher.Connect() != KErrNone)
+        {
+        DEBUG_PRINTF(_L8("Install Machine - Failed to connect to SisLauncher"));
+        return;
+        }
+    CleanupClosePushL(launcher);
+	 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+	//Notify apparc for the the change in the Applications
+    RArray<TAppUpdateInfo> affectedApps;
+    iPlan->GetAffectedApps(affectedApps);
+    if (affectedApps.Count() > 0)
+        {
+        launcher.NotifyNewAppsL(affectedApps);
+        }
+    affectedApps.Close();
+#endif
+	    
+	TInt numFiles = filesToRun.Count();	
 	if (aError != KErrNone || numFiles <= 0)
 		{
+		CleanupStack::PopAndDestroy(&launcher);
 		return;
 		}
 	
@@ -1218,17 +1372,12 @@
 		return;
 		}
 	
-	DEBUG_PRINTF(_L8("Install Machine - Processing files to run after install"));
-	RSisLauncherSession launcher;
+	DEBUG_PRINTF(_L8("Install Machine - Processing files to run after install"));	
+
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK		
 	
-	if (launcher.Connect() != KErrNone)
-		{
-		DEBUG_PRINTF(_L8("Install Machine - Failed to connect to SisLauncher, continuing..."));
-		return;
-		}
-	CleanupClosePushL(launcher);
 	launcher.NotifyNewAppsL(iPlan->AppArcRegFiles());
-
+#endif
 	if (iPlan->ContainsPlugins())
 
 		{
@@ -1278,7 +1427,7 @@
 			}
 		}
 	
-	iInstallMachine.CompleteSelf();
+    iInstallMachine.CompleteSelf();
 	iInstallMachine.SetActive();
 	}
     
@@ -1298,6 +1447,9 @@
 
 void CInstallMachine::TFinalState::Cancel()
 	{
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	DeRegisterForceRegisteredAppsL();
+#endif
 	}
 
 //
@@ -1561,17 +1713,19 @@
 	// Check if any of them are system capabilities. If so, bail out.
   	TCapabilitySet requiredExtraSysCaps(requestedCaps);
   	SecurityCheckUtil::RemoveUserCaps(requiredExtraSysCaps, *iSecurityManager);
-	TAppInfo appInfo(iCurrentContentProvider->DefaultLanguageAppInfoL()); 
-	
+		
 	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	// Report the error to the user only when machine not runs in info collection mode
 	if(IsInInfoMode())
 		{
-		SetUserGrantableCapabilities(requestedCaps);
+		TCapabilitySet requiredUserCaps(requestedCaps);
+		requiredUserCaps.Remove(requiredExtraSysCaps);
+		SetUserGrantableCapabilities(requiredUserCaps);
 		return;
 		}
 	#endif
 
+	TAppInfo appInfo(iCurrentContentProvider->DefaultLanguageAppInfoL());
 	if (SecurityCheckUtil::NotEmpty(requiredExtraSysCaps)||(SecurityCheckUtil::NotEmpty(requestedCaps) && EFalse==iSecurityManager->SecurityPolicy().AllowGrantUserCaps()))
 		{
 		// Report error to the user. Include the list of capabilities that are left in requestedCaps.
@@ -1720,7 +1874,9 @@
 void CInstallMachine::SetProgressBarFinalValueL()
 	{
 	HandleInstallationEventL(iPlan, EEventSetProgressBarFinalValue, iPlan->FinalProgressBarValue());
+	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
 	SetFinalProgressBarValue(iPlan->FinalProgressBarValue());
+	#endif
 	}
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
@@ -1809,6 +1965,20 @@
 	//Setting the HasExecutable flag
 	aNativeComponentInfo->iHasExe = controller.HasExecutable();
 	
+	//Setting the drive selection requird flag
+	aNativeComponentInfo->iIsDriveSelectionRequired = controller.DriveSelectionRequired();
+	
+	//Populate ApplicationInfo, copy the app info from controller's iApplicationInfo  to install machines's iApplicationInfo 
+	RCPointerArray<CNativeComponentInfo::CNativeApplicationInfo> applications;
+	applications = const_cast<CController&>(aController).GetApplicationInfo();
+	for(TInt i = 0 ; i < applications.Count() ; i++)
+	    {
+	    CNativeComponentInfo::CNativeApplicationInfo*  appInfo = NULL;
+	    appInfo = CNativeComponentInfo::CNativeApplicationInfo::NewLC(applications[i]->AppUid(), applications[i]->Name(), applications[i]->GroupName(), applications[i]->IconFileName());
+	    aNativeComponentInfo->iApplications.AppendL(appInfo);
+	    CleanupStack::Pop(appInfo);
+	    }	
+	
 	const RPointerArray<CController>& embeddedControllers = aController.InstallBlock().EmbeddedControllers();
 	TInt totalEmbeddedControllers = embeddedControllers.Count();
 	for (TInt controller = 0; controller < totalEmbeddedControllers; controller++)
--- a/installationservices/swi/source/swis/server/installserver.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/installserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -336,9 +336,41 @@
 // Initiate server exit when the timer expires
 void CInstallServerShutdown::RunL()
 	{
+    DeleteTempRscFilesL();
 	CActiveScheduler::Stop();
 	}
 
+void CInstallServerShutdown::DeleteTempRscFilesL()
+    {
+    DEBUG_PRINTF(_L8("Deleting temporary application registration rsource files"));
+    TChar systemDrive = RFs::GetSystemDriveChar();
+    TFileName tempResourceFileLocation; 
+    _LIT(KTempRscFileLocation, "%c:\\resource\\install\\temp\\");
+    tempResourceFileLocation.Format(KTempRscFileLocation, TUint(systemDrive));
+    RFs fileSession;    
+    User::LeaveIfError(fileSession.Connect());
+    CleanupClosePushL(fileSession);   
+    CFileMan* fileManager = NULL;
+    TRAPD(err, fileManager = CFileMan::NewL(fileSession))
+    if (KErrNone != err)
+        {
+        DEBUG_PRINTF2(_L8("Can not delete temp app rsc files %d"), err);
+        if(NULL != fileManager)
+            delete fileManager;
+        CleanupStack::Pop(&fileSession);
+        fileSession.Close();  
+        return;
+        }        
+    
+    err = fileManager->RmDir(tempResourceFileLocation);
+    if (KErrNone != err)
+        DEBUG_PRINTF2(_L8("Deleting temp app rsc file resulted in an error %d"), err);
+    
+    delete fileManager;
+    CleanupStack::Pop(&fileSession);
+    fileSession.Close();    
+    }
+
 //
 // CInstallServer
 //
--- a/installationservices/swi/source/swis/server/installserver.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/installserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -50,6 +50,7 @@
 	inline void Start();
 private:
 	void RunL();
+	void DeleteTempRscFilesL();
 	};
 
 /**
--- a/installationservices/swi/source/swis/server/installswtypehelper.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/installswtypehelper.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -61,7 +61,7 @@
 			return ETrue;
 			}
 
-		void ParseRegFileL(RFs& aFs, const TDesC& aFileName, RPointerArray<CSoftwareTypeRegInfo>& aInfoArray)
+		void ParseRegFileL(RFs& aFs, const TDesC& aFileName, RPointerArray<Usif::CSoftwareTypeRegInfo>& aInfoArray)
 			{
 			// Open the file for reading
 			RFile file;
@@ -112,7 +112,7 @@
 			CleanupStack::PopAndDestroy(2, &file); // launcher
 			}
 
-		void RegisterMimeTypesL(const RPointerArray<CSoftwareTypeRegInfo>& aInfoArray)
+		void RegisterMimeTypesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aInfoArray)
 			{
 			const TInt numElems = aInfoArray.Count();
 			if (numElems == 0)
--- a/installationservices/swi/source/swis/server/installswtypehelper.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/installswtypehelper.h	Tue Aug 31 15:21:33 2010 +0300
@@ -28,6 +28,7 @@
 #define INSTALLSWTYPEHELPER_H
 
 #include <e32std.h>
+#include <usif/scr/screntries_platform.h>
 
 namespace Swi 
 	{
@@ -49,14 +50,14 @@
 		@param aFileName The file name of an XML file to be parsed.
 		@param aInfoArray The output array of registration info objects read from the aFileName.
 		*/
-		void ParseRegFileL(RFs& aFs, const TDesC& aFileName, RPointerArray<CSoftwareTypeRegInfo>& aInfoArray);
+		void ParseRegFileL(RFs& aFs, const TDesC& aFileName, RPointerArray<Usif::CSoftwareTypeRegInfo>& aInfoArray);
 
 		/**
 		Registers software type MIME types to the AppArc. Each Layered Execution Environment must register its
 		MIME types so the SifLauncher may handle installation requests.
 		@param aInfoArray The array of registration info objects describing new software types to be registered.
 		*/
-		void RegisterMimeTypesL(const RPointerArray<CSoftwareTypeRegInfo>& aInfoArray);
+		void RegisterMimeTypesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aInfoArray);
 		}
 	}
 
--- a/installationservices/swi/source/swis/server/planner.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/planner.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -355,7 +355,6 @@
 	{
 	// We are removing items from array (aProcessPackages)and thus require index 
 	// adjustment. But if loop run in reverse order there is no need to adjust the index
-	CleanupResetAndDestroyPushL(aPlannedPackages);
 	for (TInt i = aProcessPackages.Count() - 1; i >= 0; --i)
 		{
 		// Ignore already added package
@@ -398,7 +397,6 @@
 		aProcessPackages.Remove(i);
 		CleanupStack::PopAndDestroy(&registryEntry);
 		}
-	CleanupStack::Pop(&aPlannedPackages);
 	}
 
 /**
@@ -521,7 +519,6 @@
             User::Leave(err);
 		    }
 		}
-
 	CleanupStack::Pop(rootApplication);
 	
 	return rootApplication;
@@ -536,14 +533,13 @@
  */
 void CPlanner::ConfirmForUninstallL(CUninstallationNode& aNode, RPointerArray<CSisRegistryPackage>& aPlannedPackages)
 	{
-	CleanupResetAndDestroyPushL(aPlannedPackages);
 	aNode.SetIsPlanned(ETrue);
 
 	// aNode owns package therefore to transfer the ownership
 	// a copy of CSisRegistryPackage is made.
 	CSisRegistryPackage* package = CSisRegistryPackage::NewLC(aNode.PackageL());
 	aPlannedPackages.AppendL(package);
-	CleanupStack::Pop(2, &aPlannedPackages);
+	CleanupStack::Pop(package);
 	}
 
 /**
--- a/installationservices/swi/source/swis/server/planner.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/planner.h	Tue Aug 31 15:21:33 2010 +0300
@@ -124,7 +124,6 @@
 
 	// Registry Session
 	RSisRegistryWritableSession iRegistrySession;
-	
 	};
 
 // inline functions from CPlanner
--- a/installationservices/swi/source/swis/server/processor.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/processor.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -259,10 +259,22 @@
 	case EInstallFiles:
 		if (DoStateInstallFilesL())
 			{
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK			
+			SwitchState(EParseApplicationRegistrationFiles);
+#else
 			SwitchState(EUpdateRegistry);
+#endif			
 			}
 		break;
-
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	case EParseApplicationRegistrationFiles:
+	    if (DoParseApplicationRegistrationFilesL())
+	        {
+	        SwitchState(EUpdateRegistry);
+	        }
+	    break;
+#endif		
+	    
 	case EUpdateRegistry:
 		if (DoStateUpdateRegistryL())
 			{
@@ -777,30 +789,11 @@
 		// for transaction service RemoveL().
 		if (fileToRemove.Length() > 3)
 			{
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-			TRAP(err, TransactionSession().RemoveL(fileToRemove));
-#else
-			TRAP(err, IntegrityServices().RemoveL(fileToRemove));
-#endif
-			// Display error dialog and leave if the file cannot be removed,
-			// ignoring missing files, media cards not present or corrupt media
-
-			TInt noOfDetletionAttempts=1;
-			while ((err == KErrInUse ||err==KErrAccessDenied )&& noOfDetletionAttempts <= KMaxNoOfDeletionAttempts )
-			    {
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-			    TRAP(err, TransactionSession().RemoveL(fileToRemove));
-#else
-			    TRAP(err, IntegrityServices().RemoveL(fileToRemove));
-#endif
-                DEBUG_PRINTF2(_L8("Deletion attempt %d"), noOfDetletionAttempts);
-                noOfDetletionAttempts++;
-                User::After(KRetryInterval);
-			    }
+			err = RemoveWithRetryAttemptL(fileToRemove);
 
 			if(err !=KErrNone && err != KErrNotFound && err != KErrPathNotFound	&& err != KErrNotReady && err != KErrCorrupt)
 				{
-        		CDisplayError* displayCannotDelete=CDisplayError::NewLC(iPlan.AppInfoL(), EUiCannotDelete, fileToRemove);
+				CDisplayError* displayCannotDelete=CDisplayError::NewLC(iPlan.AppInfoL(), EUiCannotDelete, fileToRemove);
 				iUiHandler.ExecuteL(*displayCannotDelete);
 				CleanupStack::PopAndDestroy(displayCannotDelete);
 				User::Leave(err);
@@ -842,25 +835,8 @@
 					TChar driveLetter;
 					User::LeaveIfError(iFs.DriveToChar(drive, driveLetter));
 					privatePath[0] =  static_cast<TText> (driveLetter);
-					// try to remove the private directory, ignore if it can't be found
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-					TRAP(err, TransactionSession().RemoveL(privatePath));
-#else
-					TRAP(err, IntegrityServices().RemoveL(privatePath));
-#endif
 
-		            TInt noOfDetletionAttempts=1;
-		            while ((err == KErrInUse ||err==KErrAccessDenied )&& noOfDetletionAttempts <= KMaxNoOfDeletionAttempts )
-		                {
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-		                TRAP(err, TransactionSession().RemoveL(privatePath));
-#else
-		                TRAP(err, IntegrityServices().RemoveL(privatePath));
-#endif
-		                DEBUG_PRINTF2(_L8("Deletion attempt %d"), noOfDetletionAttempts);
-		                noOfDetletionAttempts++;
-		                User::After(KRetryInterval);
-		                }
+					err = RemoveWithRetryAttemptL(privatePath);
 
 					if (err != KErrNone && err != KErrNotReady &&
 						err != KErrNotFound && err != KErrPathNotFound && err != KErrCorrupt)
@@ -910,3 +886,21 @@
 		}	
 	}
 
+TInt CProcessor::RemoveWithRetryAttemptL(TDesC& aFileToRemove)
+	{
+	TInt err = KErrNone;
+	TInt noOfDetletionAttempts=1;
+			
+	do {
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	    TRAP(err, TransactionSession().RemoveL(aFileToRemove));
+#else
+	    TRAP(err, IntegrityServices().RemoveL(aFileToRemove));
+#endif
+        DEBUG_PRINTF2(_L8("Deletion attempt %d"), noOfDetletionAttempts);
+        noOfDetletionAttempts++;
+        User::After(KRetryInterval);
+		} while ((err == KErrInUse ||err==KErrAccessDenied )&& noOfDetletionAttempts <= KMaxNoOfDeletionAttempts );
+	return err;
+	}
+
--- a/installationservices/swi/source/swis/server/processor.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/processor.h	Tue Aug 31 15:21:33 2010 +0300
@@ -77,6 +77,9 @@
 		EVerifyPaths,
 		ERemovePrivateDirectories,
 		EInstallFiles,
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+		EParseApplicationRegistrationFiles,
+#endif		
 		EDisplayFiles, 
 		ERunFiles,
 		EUpdateRegistry,
@@ -114,6 +117,9 @@
 	virtual TBool DoStateProcessFilesL();
 	virtual TBool DoStateInstallFilesL() = 0;
 	virtual TBool DoStateDisplayFilesL() = 0;
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+	virtual TBool DoParseApplicationRegistrationFilesL() = 0;
+#endif	
 	virtual TBool DoStateUpdateRegistryL() = 0;
 	virtual TBool DoStateRemoveFilesL();
 	virtual TBool DoStateRemovePrivateDirectoriesL();
@@ -200,6 +206,7 @@
 
 private:
 	TBool IsSafeUninstallModeSetL();
+	TInt  RemoveWithRetryAttemptL(TDesC& aFileName);
 private:
 	/// Installation plan
 	const CPlan& iPlan;
--- a/installationservices/swi/source/swis/server/restorecontroller.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/restorecontroller.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -93,13 +93,15 @@
 			application->UserSelections().SetDrive(iInstallDrive);		
 			
 			//if there are macthing languages then populate iMatchingDeviceLanguages array of application object
-			if ( noOfMatchingLanguages )
-				{
+			if (noOfMatchingLanguages)
+				{				
 				while( iMatchingSupportedLanguagesArray[matchingLanguageCount] != ELangNone)
-					{
-					application->PopulateMatchingDeviceLanguagesL(iMatchingSupportedLanguagesArray[matchingLanguageCount++]);
-					}
+					{		
+					DEBUG_PRINTF2(_L8("Device matching language for Restore - %d"),iMatchingSupportedLanguagesArray[matchingLanguageCount]);
+					application->PopulateMatchingDeviceLanguagesL(iMatchingSupportedLanguagesArray[matchingLanguageCount++]);					
+					}				
 				}
+			++matchingLanguageCount;
  			break;
  		
  		case EInstPartialUpgrade:
@@ -128,13 +130,16 @@
 			application->UserSelections().SetDrive(iAugmentationDrives[augmentationIndex++]);
 			
 			//if there are macthing languages then populate iMatchingDeviceLanguages array of application object
-			if ( noOfMatchingLanguages )
-				{
+			if ( noOfMatchingLanguages)
+				{				
 				while( iMatchingSupportedLanguagesArray[matchingLanguageCount] != ELangNone)
 					  {
-					   application->PopulateMatchingDeviceLanguagesL(iMatchingSupportedLanguagesArray[matchingLanguageCount++]);
-					  }
+					  DEBUG_PRINTF2(_L8("Device matching language for Restore - %d"),iMatchingSupportedLanguagesArray[matchingLanguageCount]);
+					  application->PopulateMatchingDeviceLanguagesL(iMatchingSupportedLanguagesArray[matchingLanguageCount++]);
+					   
+					  }				
 				}
+			++matchingLanguageCount;
 			break;
  			
  		default:
--- a/installationservices/swi/source/swis/server/restoremachine.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/restoremachine.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -37,6 +37,7 @@
 #include "log.h"
 #include "swispubsubdefs.h"
 #include "securitycheckutil.h"
+#include "secutils.h"
 #include "cleanuputils.h"
 #include "sisversion.h"
 #include "sisregistrywritablesession.h"
@@ -880,13 +881,33 @@
 		ASSERT(controllerBinaries.Count() == iPlans.Count());
 		DEBUG_PRINTF3(_L8("Restoring plan %d out of %d"), iPlanIndex, iPlans.Count());
 		const TDesC8& controllerBinary = *controllerBinaries[iPlanIndex];
+		
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+		/*During restore the controllers are processed sequentialy one by one, ecah controller has one CPlan object (which internally has
+		CApplication object), we maintain the set of affected apps for each controller within its CPlan object(done while doning processing)
+		and we use the same set of affected apps for the subsequent controllers. For example In case of SP over SA ,while processing the SA controller we will not have
+		any affected apps as it is the first controller but for the second SP controller we will tahke the affected apps from the previously 
+		processed controller ie SA.
+		*/
+		RArray<TAppUpdateInfo> appInfo;
+		CleanupClosePushL(appInfo);		
+		if(iPlanIndex > 0)
+		    {
+		    iPlans[iPlanIndex-1]->GetAffectedApps(appInfo);
+		    }
+#endif
+		
 		iProcessor = CRestoreProcessor::NewL(*(iPlans[iPlanIndex]), controllerBinary, iSecurityManager,
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-			iStsSession, iRegistrySession,
+			iStsSession, iRegistrySession, appInfo,
 #else
 			iIntegrityServices,
 #endif
 			iRestoreController.Verifiers(), baseSids, iMachine.Observer()); 
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK		
+		CleanupStack::Pop(&appInfo);
+#endif
 		iProcessor->ProcessPlanL(iStatus);
 		CleanupStack::PopAndDestroy(&baseSids);
 		
@@ -1077,6 +1098,41 @@
 		// failure - therefore we commit STS first and then the registry 
 		iStsSession.CommitL();
 		iRegistrySession.CommitTransactionL();
+   
+		CPlan* lastPlan = iPlans[iPlans.Count()-1];
+		if (lastPlan)
+            {
+            RSisLauncherSession launcher;  
+            CleanupClosePushL(launcher);
+            if (launcher.Connect() != KErrNone)
+                {
+                iMachine.Observer().CommitL();
+                User::LeaveIfError(RProperty::Set(pubsubCategory, KUidSoftwareInstallKey, ESwisNone));
+                iClientMessage.Complete(iStatus.Int());
+                DEBUG_PRINTF(_L8("Install Machine - Failed to connect to SisLauncher"));
+                CleanupStack::Pop(&launcher);
+                launcher.Close();
+                return;
+                }             
+             //Notify apparc for the the change in the Applications
+             RArray<TAppUpdateInfo> affectedApps;
+             CleanupClosePushL(affectedApps);
+             lastPlan->GetAffectedApps(affectedApps);
+#ifdef _DEBUG             
+             for(TInt i = 0; i < affectedApps.Count(); i++)
+                  {
+                  DEBUG_PRINTF2(_L("Affected AppUid during restore is 0x%x"), affectedApps[i].iAppUid);
+                  DEBUG_PRINTF2(_L("Action to be performed is %d"), affectedApps[i].iAction);
+                  }  
+#endif             
+             if (affectedApps.Count() > 0)
+                  {
+                  launcher.NotifyNewAppsL(affectedApps);
+                  }          
+             CleanupStack::PopAndDestroy(2, &launcher);             
+             }        
+       
+		
 #else
 		iIntegrityServices.CommitL();
 #endif
--- a/installationservices/swi/source/swis/server/restoreprocessor.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/restoreprocessor.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -22,6 +22,7 @@
 #include <usif/sts/sts.h>
 #include "swtypereginfo.h"
 #include "installswtypehelper.h"
+#include "cleanuputils.h"
 #else
 #include "integrityservices.h"
 #endif
@@ -38,6 +39,8 @@
 #include "securitycheckutil.h"
 #include "sidcache.h"
 #include <f32file.h>
+#include "userselections.h"
+#include "sissupportedlanguages.h"
 
 using namespace Swi; 
 
@@ -45,23 +48,28 @@
 //
 // CRestoreProcessor
 //
-	
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+_LIT(KApparcRegDir, "\\private\\10003a3f\\import\\apps\\");
+#endif
+
 CRestoreProcessor::CRestoreProcessor(const CPlan& aPlan, const TDesC8& aControllerBuffer,
 	CSecurityManager& aSecurityManager,	
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession,
+	Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession, RArray<TAppUpdateInfo>& aAppInfo,
 #else
 	CIntegrityServices& aIntegrityServices,
 #endif
-	const RPointerArray<CRestoreController::CSisCertificateVerifier>& aVerifiers,RSwiObserverSession& aObserver)
+	const RPointerArray<CRestoreController::CSisCertificateVerifier>& aVerifiers, RSwiObserverSession& aObserver)
 	: CActive(CActive::EPriorityStandard),
 	  iVerifiers(aVerifiers),
 	  iSecurityManager(aSecurityManager),
 	  iControllerBuffer(aControllerBuffer),	  
-	  iPlan(aPlan),
+	  iPlan(aPlan),	  
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	  iStsSession(aStsSession),
 	  iRegistrySession(aRegistrySession),
+	  iAppInfo(aAppInfo),
 #else
 	  iIntegrityServices(aIntegrityServices),
 #endif
@@ -73,7 +81,7 @@
 		
 CRestoreProcessor* CRestoreProcessor::NewL(const CPlan& aPlan, const TDesC8& aControllerBuffer, CSecurityManager& aSecurityManager,
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession,
+	Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession, RArray<TAppUpdateInfo>& aAppInfo,
 #else
 	CIntegrityServices& aIntegrityServices,
 #endif
@@ -82,7 +90,7 @@
 	{
 	CRestoreProcessor* self = CRestoreProcessor::NewLC(aPlan, aControllerBuffer, aSecurityManager,
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-			aStsSession, aRegistrySession,
+			aStsSession, aRegistrySession,aAppInfo,
 #else
 			aIntegrityServices, 
 #endif
@@ -93,7 +101,7 @@
 		
 CRestoreProcessor* CRestoreProcessor::NewLC(const CPlan& aPlan, const TDesC8& aControllerBuffer, CSecurityManager& aSecurityManager,
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession,
+	Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession, RArray<TAppUpdateInfo>& aAppInfo,
 #else
 	CIntegrityServices& aIntegrityServices,
 #endif
@@ -102,7 +110,7 @@
 	{
 	CRestoreProcessor* self = new (ELeave) CRestoreProcessor(aPlan, aControllerBuffer, aSecurityManager,
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-		aStsSession, aRegistrySession,
+		aStsSession, aRegistrySession,aAppInfo,
 #else
 		aIntegrityServices, 
 #endif
@@ -256,7 +264,13 @@
 			}
 			
 		//Get file description	
-		CSisRegistryFileDescription* regFileDes = iApplication->FilesToAdd()[iCurrent++];											
+		CSisRegistryFileDescription* regFileDes = iApplication->FilesToAdd()[iCurrent++];
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 		
+		// Add apparc registerd files in list.
+		AddApparcFilesInListL(regFileDes->Target(), *iApplication);
+#endif
+		
 		//Complete actual file installation
 		InstallFileL(*regFileDes);
 		TUint8 fileFlag(EFileAdded);
@@ -288,6 +302,110 @@
 	
 TBool CRestoreProcessor::DoStateUpdateRegistryL()
 	{
+	
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
+    // Taking the previous controller's affected apps
+    RArray<TAppUpdateInfo>& affectedApps = iAppInfo;        
+    const CApplication& application = *iApplication;   // current application
+	//if there are reg files in the package or if its an upgrade (in case of SA (with app) over SA(with no app))
+    if(iApparcRegFilesForParsing.Count() != 0 || application.IsUpgrade())
+        {
+        //Create the list of Application Uids which are affected by the Restore                   
+        Usif::TComponentId componentId = 0;
+        RArray<Usif::TComponentId> componentIds;
+        CleanupClosePushL(componentIds);
+        RArray<TUid> existingAppUids;
+        CleanupClosePushL(existingAppUids);
+        TAppUpdateInfo existingAppInfo;     
+        TUid packageUid = application.ControllerL().Info().Uid().Uid();
+        
+        if(application.IsUpgrade())
+            {           
+            //Get all componentIds
+            iRegistrySession.GetComponentIdsForUidL(packageUid, componentIds);            
+            TInt count = componentIds.Count();
+            if(0 == count)
+                {
+                DEBUG_PRINTF(_L("ComponentIDs not found for the base package"));
+                User::Leave(KErrNotFound);
+                }
+                                
+            //SA over SA
+            if(application.ControllerL().Info().InstallType() == Sis::EInstInstallation )
+                {        
+                //Get the compid for base package
+                componentId = iRegistrySession.GetComponentIdForUidL(packageUid);              
+                      
+                TInt index = componentIds.Find(componentId);
+             
+                //Exclude the Base SA compId from the list 
+                componentIds.Remove(index);
+             
+                //Get the apps for Base SA compId and mark them as to be deleted
+                existingAppUids.Reset();
+                TRAPD(err,iRegistrySession.GetAppUidsForComponentL(componentId, existingAppUids);)  
+                //If Base Package does not contain any app then GetAppUidsForComponentL will return KErrNotFound, ignore the error else leave
+                if (KErrNone != err && KErrNotFound != err)
+                    {
+                    User::Leave(err);
+                    }
+                
+                for(TInt i = 0 ; i < existingAppUids.Count(); ++i)
+                    {
+                    existingAppInfo = TAppUpdateInfo(existingAppUids[i], EAppUninstalled);    
+                    affectedApps.AppendL(existingAppInfo);
+                    }                
+                //Get the apps for Remaining CompIds(SP's) and mark them as to be upgraded               
+                for(TInt i = 0 ; i < componentIds.Count(); ++i)
+                    {
+                    existingAppUids.Reset();             
+                    //If there are no apps within the components (SP's) then it will return KErrNotFound
+                    TRAP(err, iRegistrySession.GetAppUidsForComponentL(componentIds[i], existingAppUids);) 
+                    if (KErrNone != err && KErrNotFound != err)
+                        {
+                        User::Leave(err);
+                        }
+                    
+                    for(TInt k = 0 ; k < existingAppUids.Count(); ++k)
+                        {
+                        existingAppInfo = TAppUpdateInfo(existingAppUids[i], EAppInstalled);    
+                        affectedApps.AppendL(existingAppInfo);
+                        }
+                    }                                
+                }
+                
+            //SP over SP
+            if(application.ControllerL().Info().InstallType() == Sis::EInstAugmentation)
+                {
+                componentId = iRegistrySession.GetComponentIdForPackageL(application.PackageL().Name(), application.PackageL().Vendor());                
+                //Get the apps for Base SP compId and mark them as to be deleted
+                existingAppUids.Reset();
+                TRAPD(err, iRegistrySession.GetAppUidsForComponentL(componentId, existingAppUids);) 
+                if (KErrNone != err && KErrNotFound != err)
+                    {
+                    User::Leave(err);
+                    }
+                
+                for(TInt k = 0 ; k < existingAppUids.Count(); ++k)
+                   {
+                   // Search for the app in the existing set of affected apps, if already present mark them as UnInstalled else add a new entry
+                   TInt index = FindAppEntry(affectedApps, existingAppUids[k]);
+                   if (KErrNotFound != index)
+                       {
+                       affectedApps[index].iAction = EAppUninstalled;
+                       }
+                   else
+                       {
+                       existingAppInfo = TAppUpdateInfo(existingAppUids[k], EAppUninstalled);    
+                       affectedApps.AppendL(existingAppInfo);
+                       }                   
+                   }                                  
+                }        
+            }                   
+        CleanupStack::PopAndDestroy(2, &componentIds);   
+        }       
+#endif
+	
 #ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	RSisRegistryWritableSession session;
 	User::LeaveIfError(session.Connect());
@@ -319,6 +437,11 @@
 			{
 			iRegistrySession.UpdateEntryL(*iApplication, iControllerBuffer, iStsSession.TransactionIdL());
 			}
+		TInt count = iApparcRegFileData.Count();
+        for (int i = 0; i < count; i++)
+            {
+            iRegistrySession.UpdateEntryL(*iApplication, *iApparcRegFileData[i], iApparcRegFilesForParsing[i]->GetSisRegistryPackage());
+            }
 #else
  		session.UpdateEntryL(*iApplication, iControllerBuffer, iIntegrityServices.TransactionId());
 #endif
@@ -334,6 +457,11 @@
 			{
 			iRegistrySession.AddEntryL(*iApplication, iControllerBuffer, iStsSession.TransactionIdL());
 			}
+		TInt count = iApparcRegFileData.Count();
+        for (int i = 0; i < count; i++)
+            {
+            iRegistrySession.AddEntryL(*iApparcRegFileData[i], iApparcRegFilesForParsing[i]->GetSisRegistryPackage());
+            }
 #else
  		session.AddEntryL(*iApplication, iControllerBuffer, iIntegrityServices.TransactionId());
 #endif
@@ -342,11 +470,94 @@
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	// Registration of MIME types of the software types being installed to AppArc
 	InstallSoftwareTypeHelper::RegisterMimeTypesL(iSoftwareTypeRegInfoArray);
+	
+	//if there are reg files in the package or if its an upgrade (in case of SA (with app) over SA(with no app))
+	if(iApparcRegFilesForParsing.Count() != 0 || application.IsUpgrade())
+	        {
+	        //Create the list of Application Uids which are affected by the Restore                            
+	        RArray<Usif::TComponentId> componentIds;
+	        CleanupClosePushL(componentIds);
+	        RArray<TUid> newAppUids;    
+	        CleanupClosePushL(newAppUids);
+	        TAppUpdateInfo existingAppInfo, newAppInfo;     
+	        TUid packageUid = application.ControllerL().Info().Uid().Uid();
+	        //Get all componentIds for the application
+	        componentIds.Reset();
+	        iRegistrySession.GetComponentIdsForUidL(packageUid, componentIds);
+	        TInt count = componentIds.Count();
+	        
+	        //Get the apps for All CompIds               
+	        for(TInt i = 0 ; i < count; i++)
+	            {
+	            newAppUids.Reset();                    
+	            TRAPD(err,iRegistrySession.GetAppUidsForComponentL(componentIds[i], newAppUids))
+	            if (KErrNone != err && KErrNotFound != err)
+	                {
+	                User::Leave(err);
+	                }
+	            
+	            for(TInt i = 0 ; i < newAppUids.Count(); ++i)
+	                {	               	                
+	                TInt index = 0;		
+	                // Search for the app in the existing set of affected apps, if already present mark them as UnInstalled else add a new entry
+	                index = FindAppEntry(affectedApps, newAppUids[i]);
+	                if(index != KErrNotFound)
+	                    {
+	                    affectedApps[index].iAction = EAppInstalled;
+	                    }
+	                else
+	                    {
+	                    existingAppInfo = TAppUpdateInfo(newAppUids[i], EAppInstalled);
+	                    affectedApps.AppendL(existingAppInfo);
+	                    }
+	                }  		           
+	            }
+	        
+	        //Compare the new affected apps with the existing affected apps and update the existing affected apps if alredy present or 
+            //add to the list if it is a new app.
+            RArray<TAppUpdateInfo> existingAffectedApps;
+            CleanupClosePushL(existingAffectedApps);
+            const_cast<CPlan&>(iPlan).GetAffectedApps(existingAffectedApps);
+            TInt appCount = affectedApps.Count();
+            for(TInt k = 0; k < appCount ; ++k)
+                {
+                TInt count = existingAffectedApps.Count();
+                TUid appUid = affectedApps[k].iAppUid;
+                for(TInt index = 0; index < count ; ++index)
+                   {
+                   if(appUid == existingAffectedApps[index].iAppUid)
+                       {           
+                       existingAffectedApps.Remove(index);                                    
+                       }
+                   }
+                existingAffectedApps.AppendL(affectedApps[k]);
+                }
+	        const_cast<CPlan&>(iPlan).ResetAffectedApps();
+	        const_cast<CPlan&>(iPlan).SetAffectedApps(affectedApps);
+	        
+	        CleanupStack::PopAndDestroy(3, &componentIds);
+	        }
+	
 #else
 	CleanupStack::PopAndDestroy(&session);
 #endif
 	return ETrue;
 	}
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+TInt CRestoreProcessor::FindAppEntry(RArray<TAppUpdateInfo>& aAffectedApps, TUid& aNewAppUid)
+    {
+    TInt count = aAffectedApps.Count();
+    for(TInt index = 0; index < count ; index++)
+        {
+        if(aAffectedApps[index].iAppUid == aNewAppUid)
+            {           
+            return index;
+            }
+        }
+    return KErrNotFound;
+    }
+#endif
+
 
 TBool CRestoreProcessor::DoStateProcessFilesL()
 	{
@@ -405,12 +616,78 @@
 		return EFalse;		
 		}
 	else 
-		{			
+		{
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK                
+        // Find out all the regisration resource files associated with this package UID and add to the list of 
+        // files to be processed later for parsing      
+        TRAPD(err, AddAppArcRegResourceFilesL());
+        if ( err != KErrNotFound && err != KErrNone)
+            {
+            User::Leave(err);
+            }
+#endif
 		iCurrent = 0;
 		return ETrue;		
 		}		
 	}
 	
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+void CRestoreProcessor::AddAppArcRegResourceFilesL()
+    {
+    RSisRegistryEntry entry;
+    TInt err = KErrNone;
+    if (!iApplication->IsUninstall())
+        err = entry.Open(iRegistrySession, iApplication->ControllerL().Info().Uid().Uid());
+    else
+        return;
+    
+    User::LeaveIfError(err);
+    CleanupClosePushL(entry);
+    AddAppArcRegResourceFilesForRegEntryL(entry);
+    
+    RPointerArray<CSisRegistryPackage> augmentationArray;
+    CleanupResetAndDestroyPushL(augmentationArray);
+    entry.AugmentationsL(augmentationArray);
+    CleanupStack::Pop(&augmentationArray);
+    CleanupStack::PopAndDestroy(&entry);    
+        
+    CleanupResetAndDestroyPushL(augmentationArray);
+    TInt count = augmentationArray.Count();
+    for ( TInt i=0; i < count; ++i)
+        {
+        TInt err = entry.OpenL(iRegistrySession,*augmentationArray[i]);
+        User::LeaveIfError(err);
+        CleanupClosePushL(entry);
+        AddAppArcRegResourceFilesForRegEntryL(entry);
+        CleanupStack::PopAndDestroy(&entry);
+        }
+    
+    CleanupStack::PopAndDestroy(&augmentationArray);
+    }
+
+void CRestoreProcessor::AddAppArcRegResourceFilesForRegEntryL(RSisRegistryEntry& aEntry)
+    {
+    RPointerArray<HBufC> filesArray;
+    CleanupResetAndDestroyPushL(filesArray);
+    aEntry.FilesL(filesArray);    
+    TInt count = filesArray.Count();
+    CSisRegistryPackage *regPkg = aEntry.PackageL();
+    CleanupStack::PushL(regPkg);
+    
+    for (TInt i=0; i<count; ++i)
+        {
+        if (FileIsApparcReg(*filesArray[i]))
+            {
+            CAppRegFileData *tmpAppRegFileData = CAppRegFileData::NewLC(*filesArray[i],*regPkg);
+            iApparcRegFilesForParsing.AppendL(tmpAppRegFileData);
+            CleanupStack::Pop(tmpAppRegFileData);
+            }
+        }
+    CleanupStack::PopAndDestroy(2,&filesArray);
+    }
+#endif
+
+
 TBool CRestoreProcessor::DoStateVerifyPathsL() 
 	{
 	if (iCurrent < iApplication->FilesToAdd().Count())
@@ -475,10 +752,21 @@
 	case EInstallFiles:
 		if (DoStateInstallFilesL())
 			{
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK           
+            SwitchState(EParseApplicationRegistrationFiles);
+#else
+            SwitchState(EUpdateRegistry);
+#endif          
+            }
+        break;
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+    case EParseApplicationRegistrationFiles:
+        if (DoParseApplicationRegistrationFilesL())
+            {
 			SwitchState(EUpdateRegistry);
 			}
 		break;
-
+#endif
 	case EUpdateRegistry:
 		if (DoStateUpdateRegistryL())
 			{
@@ -548,8 +836,134 @@
 	delete iFileMan;
 	iFs.Close();
 	iSids.Close();
-	
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	iSoftwareTypeRegInfoArray.Close();
+    iSoftwareTypeRegInfoArray.Close();  
+    iApparcRegFilesForParsing.ResetAndDestroy();
+    iApparcRegFileData.ResetAndDestroy();
+    delete iAppRegExtractor;   
+    iAppInfo.Close();
 #endif
 	}
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
+TBool CRestoreProcessor::ParseRegistrationResourceFileL(const TDesC& aTargetFileName)
+    {
+    DEBUG_PRINTF2(_L("Restore Processor - ParseRegistrationResourceFileL - Parsing '%S' registration resource file"), &aTargetFileName);
+ 
+    if ( NULL == iAppRegExtractor )
+        {
+        DEBUG_PRINTF(_L("Restore Processor - ParseRegistrationResourceFileL - Creating CAppRegExtractor for async parsing of registration resource file"));
+        CApplication& app = const_cast<CApplication&>(*iApplication);
+        const RArray<TInt>& matchingLanguages = app.GetMatchingDeviceLanguages();        
+        TInt userSelectedLanguage = (TInt)iApplication->UserSelections().Language();
+        TInt res = matchingLanguages.Find(userSelectedLanguage);
+        if(res == KErrNotFound)
+            {
+            app.PopulateMatchingDeviceLanguagesL(userSelectedLanguage);
+            }            
+        const RArray<TInt>& matchingLanguages1 = app.GetMatchingDeviceLanguages();        
+        RArray<TLanguage> devLanguages;
+        CleanupClosePushL(devLanguages);       
+        TInt count = matchingLanguages1.Count();
+        DEBUG_PRINTF2(_L("Restore Processor - ParseRegistrationResourceFileL - %d matching languages found"),count);
+        for ( TInt i=0; i<count; i++)
+            {
+            devLanguages.Append((TLanguage)matchingLanguages1[i]);            
+            }
+        
+        iAppRegExtractor = CAppRegExtractor::NewL(iFs,devLanguages,iApparcRegFileData);
+        CleanupStack::Pop(&devLanguages);            
+        }
+        
+    iAppRegExtractor->ExtractAppRegInfoSizeL(aTargetFileName, iStatus);
+    return EFalse;
+    }
+
+TBool CRestoreProcessor::DoParseApplicationRegistrationFilesL()
+    {
+    if (iCurrent == 0)
+        DEBUG_PRINTF2(_L("Restore Processor - DoParseApplicationRegistrationFilesL - Number of Application registration resource files to be parsed %d"), iApparcRegFilesForParsing.Count());
+    
+    if (iAppRegExtractor != NULL)
+        {
+        if (iAppRegExtractor->GetErrorCode() == KErrCorrupt)
+            {
+            delete iApparcRegFilesForParsing[--iCurrent];
+            iApparcRegFilesForParsing.Remove(iCurrent);
+            }
+        }
+    
+    if (iCurrent < iApparcRegFilesForParsing.Count())
+        { 
+        TDesC& fileDescription = (iApparcRegFilesForParsing[iCurrent++]->GetAppRegFile());   
+        // Continue processing the next file if a registration resource file is not found(in case of SA over SA)
+        TRAPD(err,ParseRegistrationResourceFileL(fileDescription));        
+        if(KErrNotFound == err || KErrPathNotFound == err)
+            {               
+            delete iApparcRegFilesForParsing[--iCurrent];
+            iApparcRegFilesForParsing.Remove(iCurrent); 
+            TRequestStatus* status = &iStatus;
+            User::RequestComplete(status, KErrNone);     
+            SetActive();
+            }
+        else if(KErrNone != err )
+            {
+            User::Leave(err);
+            }
+        else
+            {
+            SetActive();
+            }
+        return EFalse;
+        }
+    else
+        {
+        iCurrent = 0;
+        return ETrue;
+        }
+    }
+
+TBool CRestoreProcessor::FileIsApparcReg(const TDesC& aFilename) const
+    {
+    TParsePtrC filename(aFilename);
+    return filename.Path().CompareF(KApparcRegDir) == 0;
+    }
+	
+void CRestoreProcessor::AddApparcFilesInListL(const TDesC& aTargetFileName, const CApplication& aApplication)
+    {    
+    if (FileIsApparcReg(aTargetFileName))
+        {
+        // we're installing a reg file so add it to our list for parsing it and 
+        // populating SCR in EParseApplicationRegistrationFiles state of CProcessor     
+        TInt index = UserSelectedLanguageIndexL(aApplication);
+        CSisRegistryPackage *regPkg = CSisRegistryPackage::NewLC(aApplication.ControllerL().Info().Uid().Uid(),\
+                aApplication.ControllerL().Info().Names()[index]->Data(),\
+                aApplication.ControllerL().Info().UniqueVendorName().Data());
+        CAppRegFileData *appRegData =CAppRegFileData::NewLC(aTargetFileName,*regPkg);
+        iApparcRegFilesForParsing.AppendL(appRegData);
+        CleanupStack::Pop(appRegData);  
+        CleanupStack::PopAndDestroy(regPkg);
+        }
+    }
+
+TInt CRestoreProcessor::UserSelectedLanguageIndexL(const CApplication& aApplication) const
+// used to find out which is the index of the selected language, 
+// based on the language selection. This will be used for the relevant package and vendor names
+    {
+    TLanguage language = aApplication.UserSelections().Language();
+    
+    TInt index = KErrNotFound;
+    for (TInt i = 0; i < aApplication.ControllerL().SupportedLanguages().Count(); i++)
+        {
+        if (aApplication.ControllerL().SupportedLanguages()[i] == language)
+            {
+            index = i;
+            break;  
+            }
+        }
+    User::LeaveIfError(index);
+    return index;
+    }   
+#endif
+
--- a/installationservices/swi/source/swis/server/restoreprocessor.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/restoreprocessor.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -39,6 +39,7 @@
 namespace Swi 
 	{
 	class CPlan;
+
 	
 	/**
 	 * State machine to handle securely restoring files the user
@@ -58,6 +59,9 @@
 			EProcessFiles,
 			EVerifyPaths,
 			EInstallFiles,
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+			EParseApplicationRegistrationFiles,
+#endif
 			EUpdateRegistry,
 			EFinished,
 			ECurrentState=128, // Used to change to the current state
@@ -68,7 +72,7 @@
 		static CRestoreProcessor* NewL(const CPlan& aPlan, const TDesC8& aControllerBuffer, 
 			CSecurityManager& aSecurityManager,	
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-			Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession,
+			Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession, RArray<TAppUpdateInfo>& aAppInfo,
 #else
 			CIntegrityServices& aIntegrityServices,
 #endif
@@ -78,7 +82,7 @@
 		static CRestoreProcessor* NewLC(const CPlan& aPlan, const TDesC8& aControllerBuffer,
 			CSecurityManager& aSecurityManager, 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-			Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession,
+			Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession, RArray<TAppUpdateInfo>& aAppInfo,
 #else
 			CIntegrityServices& aIntegrityServices,
 #endif
@@ -100,7 +104,7 @@
 		CRestoreProcessor(const CPlan& aPlan, const TDesC8& aControllerBuffer,
 			CSecurityManager& aSecurityManager,	
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-			Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession,
+			Usif::RStsSession& aStsSession, RSisRegistryWritableSession& aRegistrySession, RArray<TAppUpdateInfo>& aAppInfo,
 #else
 			CIntegrityServices& aIntegrityServices,
 #endif
@@ -108,7 +112,18 @@
 			RSwiObserverSession& aObserver);
 		
 		void ConstructL(RArray<TUid>& aSids);
-		void ProcessApplicationL(const CApplication& aApplication, TRequestStatus& aClientStatus);		
+		void ProcessApplicationL(const CApplication& aApplication, TRequestStatus& aClientStatus);	
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK		
+		TBool FileIsApparcReg(const TDesC& aFilename) const;
+		void AddApparcFilesInListL(const TDesC& aTargetFileName, const CApplication& aApplication);
+		TInt UserSelectedLanguageIndexL(const CApplication& aApplication) const;
+		TBool DoParseApplicationRegistrationFilesL();
+		TBool ParseRegistrationResourceFileL(const TDesC& aTargetFileName);
+		void AddAppArcRegResourceFilesL();
+		void AddAppArcRegResourceFilesForRegEntryL( RSisRegistryEntry& aEntry);
+		TInt FindAppEntry(RArray<TAppUpdateInfo>& aAffectedApps, TUid& aNewAppUid);
+#endif
 	private:
 	
 		// Processor states, called by the state machine
@@ -139,7 +154,14 @@
 		Usif::RStsSession& iStsSession;
 		RSisRegistryWritableSession& iRegistrySession;
 		/** The list of software types to be registered found in the XML registration file. */
-		RCPointerArray<CSoftwareTypeRegInfo> iSoftwareTypeRegInfoArray;
+		RCPointerArray<Usif::CSoftwareTypeRegInfo> iSoftwareTypeRegInfoArray;
+		/**
+        * The list of Apparc registration files to parse to populate SCR
+        */ 
+        RPointerArray<CAppRegFileData> iApparcRegFilesForParsing;
+        CAppRegExtractor *iAppRegExtractor;  
+        RPointerArray<Usif::CApplicationRegistrationData> iApparcRegFileData;   
+        RArray<TAppUpdateInfo> iAppInfo;
 #else
 		CIntegrityServices& iIntegrityServices;
 #endif
@@ -148,8 +170,8 @@
 		
 		/// The drive on which to store device integrity data (hashes, registry etc) 
 		TChar iSystemDriveChar;
-		RSwiObserverSession& iObserver; ///< SWI Observer session handle provided by SWIS.
-		};
+		RSwiObserverSession& iObserver; ///< SWI Observer session handle provided by SWIS.				
+		};	
 	}
 
 #endif //__RESTOREPROCESSOR_H__
--- a/installationservices/swi/source/swis/server/sidcache.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/sidcache.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -22,6 +22,7 @@
 #include <s32file.h>
 #include <e32uid.h>
 #include <f32file.h>
+#include <e32ldr_private.h>
 #include "securityinfo.h"
 
 namespace Swi 
@@ -170,7 +171,7 @@
 		{								
 		// Count() will increase if a subdirectory is encountered so don't 'optimise'
 		// the loop invariant !				
-		CleanupResetAndDestroyPushL(aSearchDirs);
+
 		for (TInt i = 0; i < aSearchDirs.Count(); ++i) 
 			{
 			CDir* entries(0);
@@ -197,7 +198,6 @@
 				}
 			CleanupStack::PopAndDestroy(subDirs);
 			}
-		CleanupStack::Pop(&aSearchDirs);
 		}
 		
 	void CSidCache::ScanFileSystemL(RFs& aFs)
--- a/installationservices/swi/source/swis/server/siscontentprovider.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/siscontentprovider.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010	 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
--- a/installationservices/swi/source/swis/server/statemachine.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/statemachine.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -20,6 +20,9 @@
 #include "log.h"
 #include "plan.h"
 #include "swispubsubdefs.h"
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK  
+#include <usif/scr/appregentries.h>
+#endif
 
 namespace Swi
 {
@@ -52,11 +55,11 @@
 	Cancel();
 	// close UISS session
 	iUiHandler.Close();
-	delete iProgressPublisher;
 	
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	iStsSession.Close();
 	delete iRegistryWrapper;
+	delete iProgressPublisher;
 #else
 	delete iIntegrityServices;
 #endif
@@ -69,12 +72,12 @@
 	{
 	// mark the installation/un-installation operation as unconfirmed to start with
 	iOperationConfirmed = EFalse;
-	iProgressPublisher = Swi::CProgressBarValuePublisher::NewL();
-	iUiHandler.SetProgressBarValuePublisher(iProgressPublisher);
-	
+
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	iStsSession.CreateTransactionL();	
 	iRegistryWrapper = CRegistryWrapper::NewL();
+	iProgressPublisher = CProgressBarValuePublisher::NewL();
+	iUiHandler.SetProgressBarValuePublisher(iProgressPublisher);
 #else
 	// Create integrity services, use the current time as transaction ID
 	TTime currentTime;
@@ -347,6 +350,15 @@
 		// re-generate the sisregistry cache .. very time consuming!
 		ResetRegistryCache();
 		}
+#else
+	// Deregister the force registered applications from AppArc
+	DEBUG_PRINTF(_L8("Deregistering the force registered applications with AppArc"));
+	RSisLauncherSession launcher;
+	CleanupClosePushL(launcher);
+	User::LeaveIfError(launcher.Connect());
+	RArray<TAppUpdateInfo> emptyAppRegDataArray;
+	launcher.NotifyNewAppsL(emptyAppRegDataArray);
+	CleanupStack::PopAndDestroy(&launcher);
 #endif
 
 	iMessage.Complete(aError);
@@ -423,10 +435,10 @@
 	{
 	iIsInInfoMode = aOperationalMode;
 	}
-#endif
 
 void CSwisStateMachine::SetFinalProgressBarValue(TInt aValue)
 	{
 	iProgressPublisher->SetFinalProgressBarValue(aValue);
 	}
+#endif
 } // namespace Swi
--- a/installationservices/swi/source/swis/server/statemachine.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/statemachine.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -44,7 +44,7 @@
 namespace Swi
 {
 class CPlan;
-class CProgressBarValuePublisher;
+
 /** Panic ID for panics raised in state machine */
 enum StateMachinePanic
 	{
@@ -108,10 +108,10 @@
 	void FinalizeJournalsL(TInt aError);
 	void CompleteClientL(TInt aError);
 	RUiHandler& UiHandler();
-	void SetFinalProgressBarValue(TInt aValue);
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	Usif::RStsSession& TransactionSession();
 	CRegistryWrapper& RegistryWrapper();
+	void SetFinalProgressBarValue(TInt aValue);
 	// Is the state machine runs in information extraction mode or normal installation/uninstallation mode?
 	TBool iIsInInfoMode;
 #else
@@ -151,11 +151,11 @@
 	TState*             iState;             ///< Curent state
 	const RMessage2     iMessage;           ///< Message to complete when done
 	RUiHandler          iUiHandler;         ///< UI handler server session
-	CProgressBarValuePublisher* iProgressPublisher; ///< Pointer to the progress bar value publisher object..
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	Usif::RStsSession	iStsSession;		///< Transaction service session handle
 	CRegistryWrapper* 	iRegistryWrapper;	///< Registry wrapper to access the registry
+	CProgressBarValuePublisher* iProgressPublisher;	///< Pointer to the progress bar value publisher object..
 #else
 	CIntegrityServices* iIntegrityServices; ///< Shared integrity services.
 #endif
--- a/installationservices/swi/source/swis/server/uninstallationplanner.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/uninstallationplanner.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -83,7 +83,9 @@
 	// coverity[memory_leak]
 	}
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 TInt32 CUninstallationPlanner::FinalProgressBarValue() const
 	{
 	return Plan().FinalProgressBarValue();
 	}
+#endif
--- a/installationservices/swi/source/swis/server/uninstallationplanner.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/uninstallationplanner.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -78,10 +78,12 @@
 	 */
 	void PlanUninstallationL(CSisRegistryPackage& aPackage);
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	/**
 	 * @return The final progress bar value from the plan.
 	 */
 	TInt32 FinalProgressBarValue() const;
+#endif
 	
 	/**
 	 * Produces an uninstallation plan
--- a/installationservices/swi/source/swis/server/uninstallationprocessor.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/uninstallationprocessor.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -44,7 +44,8 @@
 #include "sislauncherclient.h"
 #include "sisinfo.h"
 #include "sisuid.h"
-
+#include "plan.h"
+#include "sisregistrypackage.h"
 
 using namespace Swi;
 
@@ -193,13 +194,126 @@
 	return ETrue;	// Nothing to do
 	}
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+TBool CUninstallationProcessor::DoParseApplicationRegistrationFilesL()
+    {
+    return ETrue;   // Nothing to do
+    }
+#endif
+
 TBool CUninstallationProcessor::DoStateUpdateRegistryL()
 	{
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	 
+    const CApplication& application = ApplicationL();
+    RArray<TAppUpdateInfo> affectedApps;    
+    CleanupClosePushL(affectedApps);	    
+    RArray<Usif::TComponentId> componentIds;
+    CleanupClosePushL(componentIds);
+    RArray<TUid> existingAppUids;
+    CleanupClosePushL(existingAppUids);
+    RArray<TUid> newAppUids;    
+    CleanupClosePushL(newAppUids);
+    
+    TAppUpdateInfo existingAppInfo, newAppInfo;     
+    TUid packageUid = application.PackageL().Uid();
+    
+    // Get all existing componentsIds for the package to to be uninstalled
+    TRAPD(err,iRegistryWrapper.RegistrySession().GetComponentIdsForUidL(packageUid, componentIds));            
+    TInt count = componentIds.Count();
+    if(0 == count)
+        {
+        DEBUG_PRINTF(_L("ComponentIDs not found for the base package"));
+        User::Leave(KErrNotFound);
+        }
+    
+    //Get the apps for CompIds and mark them as to be uninstalled     
+    for(TInt i = 0 ; i < count; i++)
+        {
+        existingAppUids.Reset();                    
+        TRAP(err,iRegistryWrapper.RegistrySession().GetAppUidsForComponentL(componentIds[i], existingAppUids)); 
+      
+        for(TInt i = 0 ; i < existingAppUids.Count(); i++)
+            {
+            existingAppInfo = TAppUpdateInfo(existingAppUids[i], EAppUninstalled);
+            affectedApps.Append(existingAppInfo);                   
+            }
+        }        
+    
 	// Now that we are ready to make changes to the registry so we start a transaction
-	// Note that the commit/rollback action is subsequently taken by the later steps of the state machine
+	// Note that the commit/rollback action is subsequently taken by the later steps of the state machine	
 	iRegistryWrapper.StartMutableOperationsL();
-	iRegistryWrapper.RegistrySession().DeleteEntryL(ApplicationL().PackageL(), TransactionSession().TransactionIdL());
+	iRegistryWrapper.RegistrySession().DeleteEntryL(ApplicationL().PackageL(), TransactionSession().TransactionIdL()); 
+    
+    componentIds.Reset();
+    TRAP(err,iRegistryWrapper.RegistrySession().GetComponentIdsForUidL(packageUid, componentIds));            
+    TInt currentComponentCount = componentIds.Count();        
+    
+    //If there is no component assosiated with this app in the scr and there are affected apps then mark all of them as deleted. 
+    RArray<TAppUpdateInfo> apps;  
+    CleanupClosePushL(apps);
+    Plan().GetAffectedApps(apps);
+    TInt appCount = apps.Count();    
+    
+    //If the there is no component assosiated with the package uid(ie it has been completely deleted) and we have affected apps 
+    //then compare the apps of the package currently being processed with the existing affected apps if alredy exists then
+    //update else add it to the list.
+    if(currentComponentCount == 0 && appCount)
+        {            
+        TInt count = affectedApps.Count();        
+        for(TInt i = 0 ; i < appCount; ++i)
+           {    
+           TUid appUid = apps[i].iAppUid;
+           TBool found = EFalse;
+           for(TInt index = 0; index < count ; ++index)
+             {
+             if(appUid == affectedApps[index].iAppUid)
+                 {                       
+                 existingAppInfo = TAppUpdateInfo(appUid, EAppUninstalled);
+                 affectedApps.Remove(index);
+                 affectedApps.Append(existingAppInfo); 
+                 found = ETrue;     
+                 break;
+                 }               
+             }
+          if(!found)
+             {
+             existingAppInfo = TAppUpdateInfo(appUid,EAppUninstalled);
+             affectedApps.Append(existingAppInfo);
+             }   
+           } 
+        }
+    else
+        {
+        // mark the apps in the affected list as upgraded if they are still in scr
+        for(TInt i = 0 ; i < currentComponentCount; i++)
+           {
+           newAppUids.Reset();                    
+           TRAP(err,iRegistryWrapper.RegistrySession().GetAppUidsForComponentL(componentIds[i], newAppUids));          
+           for(TInt i = 0 ; i < newAppUids.Count(); i++)
+               {
+               existingAppInfo = TAppUpdateInfo(newAppUids[i], EAppUninstalled);
+               TInt index = 0;
+               index = affectedApps.Find(existingAppInfo);
+               if(KErrNotFound != index)
+                   {
+                   affectedApps.Remove(index);
+                   existingAppInfo = TAppUpdateInfo(newAppUids[i],EAppInstalled);
+                   affectedApps.Append(existingAppInfo);    
+                   }                           
+               }        
+           } 
+        }
+    CleanupStack::PopAndDestroy(&apps);
+    for(TInt i = 0; i < affectedApps.Count(); i++)
+        {
+        DEBUG_PRINTF2(_L("AppUid is 0x%x"), affectedApps[i].iAppUid);
+        DEBUG_PRINTF2(_L("Action is %d"), affectedApps[i].iAction);
+        }   
+            
+    const_cast<CPlan&>(Plan()).ResetAffectedApps();
+    const_cast<CPlan&>(Plan()).SetAffectedApps(affectedApps);
+    
+    CleanupStack::PopAndDestroy(4, &affectedApps);    
 #else
 	RSisRegistryWritableSession session;
 	User::LeaveIfError(session.Connect());
@@ -220,3 +334,5 @@
 	return *iEmbeddedProcessor;
 	}
 
+
+
--- a/installationservices/swi/source/swis/server/uninstallationprocessor.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/uninstallationprocessor.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -140,6 +140,9 @@
 	virtual TBool DoStateVerifyPathsL();
 	virtual TBool DoStateInstallFilesL();
 	virtual TBool DoStateDisplayFilesL();
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+	virtual TBool DoParseApplicationRegistrationFilesL();	
+#endif	
 	virtual TBool DoStateUpdateRegistryL();
 	virtual TBool DoStateProcessSkipFilesL();
 
--- a/installationservices/swi/source/swis/server/uninstallmachine.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/uninstallmachine.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -172,6 +172,10 @@
 	iUninstallMachine.CompleteSelf();
 	iUninstallMachine.SetActive();
 	
+	// The user hasn't cancelled so mark the un-installation as confirmed. This
+	// will allow the registry cache to be regenerated further on during the
+	// un-installation process.
+	iUninstallMachine.iOperationConfirmed = ETrue;
 	}
 
 // The next state will be planning uninstallation.
@@ -218,8 +222,9 @@
 	// the UI sothat we don't need to display anything (cancellation is not an
 	// error). See RunError() for more details.
 	iUninstallMachine.iPlanner->PlanUninstallationL(*iUninstallMachine.iPackage);
-	TInt finalProgressBarValue = iUninstallMachine.iPlanner->FinalProgressBarValue();
-	iUninstallMachine.SetFinalProgressBarValue(finalProgressBarValue);
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+	iUninstallMachine.SetFinalProgressBarValue(iUninstallMachine.iPlanner->FinalProgressBarValue());
+#endif	
 	iUninstallMachine.iPlan=iUninstallMachine.iPlanner->TransferPlanOwnership();
 	iUninstallMachine.CompleteSelf();
 	iUninstallMachine.SetActive();
@@ -229,10 +234,6 @@
 CUninstallMachine::TState* CUninstallMachine::TPlanUninstallationState::CompleteL()
 	{
 	DEBUG_PRINTF(_L8("Uninstall Machine - Completed Uninstallation Planning State"));
-	// The user hasn't cancelled so mark the un-installation as confirmed. This
-    // will allow the registry cache to be regenerated further on during the
-    // un-installation process.
-    iUninstallMachine.iOperationConfirmed = ETrue;
 	return static_cast<TState*>(&iUninstallMachine.iIntegritySupportState);
 	}
 
@@ -417,3 +418,34 @@
 	HandleInstallationEventL(iPlan, EEventCompletedUnInstall);
 	}
 	
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+void CUninstallMachine::PostJournalFinalizationL(TInt)
+    {    
+    if (!iPlan)
+        {
+        return;
+        }
+    
+    DEBUG_PRINTF(_L8("Uninstall Machine - PostJournalFinalization"));
+    RSisLauncherSession launcher;
+        
+    if (launcher.Connect() != KErrNone)
+        {
+        DEBUG_PRINTF(_L8("Uninstall Machine - Failed to connect to SisLauncher"));
+        return;
+        }
+    CleanupClosePushL(launcher);
+        
+    //Notify apparc for the the change in the Applications
+    RArray<TAppUpdateInfo> affectedApps;
+    CleanupClosePushL(affectedApps);
+    iPlan->GetAffectedApps(affectedApps);
+    if (affectedApps.Count() > 0)
+        {
+        launcher.NotifyNewAppsL(affectedApps);
+        }
+    affectedApps.Close();
+    CleanupStack::PopAndDestroy(2, &launcher);  //affectedApps
+    }
+#endif
+
--- a/installationservices/swi/source/swis/server/uninstallmachine.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/swis/server/uninstallmachine.h	Tue Aug 31 15:21:33 2010 +0300
@@ -154,6 +154,9 @@
 	virtual TState* ErrorOnStateEntryL(TInt aError);
 
 	virtual void SignalCompletedL();
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	virtual void PostJournalFinalizationL(TInt aError);
+#endif
 
 private:
 	// States
--- a/installationservices/swi/source/uiss/client/nativecomponentinfo.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/uiss/client/nativecomponentinfo.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -56,6 +56,105 @@
 
 namespace Swi
 {
+
+CNativeComponentInfo::CNativeApplicationInfo::CNativeApplicationInfo()
+    {
+    }
+
+EXPORT_C CNativeComponentInfo::CNativeApplicationInfo::~CNativeApplicationInfo()
+    {
+    delete iName;
+    delete iGroupName;
+    delete iIconFileName;
+    }
+
+EXPORT_C CNativeComponentInfo::CNativeApplicationInfo* CNativeComponentInfo::CNativeApplicationInfo::NewLC(const TUid& aAppUid, const TDesC& aName, const TDesC& aGroupName, const TDesC& aIconFileName)
+    {
+        _LIT(emptyString,"");
+        // Leave if aName, aGroupName or aIconFileName exceeds KMaxDescriptorLength
+       if ((&aName != NULL && aName.Length() > KMaxDescriptorLength) || 
+               (&aGroupName != NULL && aGroupName.Length() > KMaxDescriptorLength) ||
+               (&aIconFileName != NULL && aIconFileName.Length() > KMaxDescriptorLength))
+            {
+            User::Leave(KErrOverflow);
+            }
+        
+    CNativeComponentInfo::CNativeApplicationInfo* self = new (ELeave) CNativeComponentInfo::CNativeApplicationInfo();
+        CleanupStack::PushL(self);
+
+        self->iAppUid = aAppUid;  
+        if(&aName == NULL)
+            {
+            self->iName = emptyString().AllocL();
+            }
+        else
+            {
+            self->iName = aName.AllocL();
+            }
+   
+        if(&aGroupName == NULL)
+            {
+            self->iGroupName = emptyString().AllocL();
+            }
+        else
+            {
+            self->iGroupName = aGroupName.AllocL();
+            }
+        
+        if(&aIconFileName == NULL)
+            {
+            self->iIconFileName = emptyString().AllocL();
+            }
+        else
+            {
+            self->iIconFileName = aIconFileName.AllocL();
+            }
+        
+        return self;
+    }
+
+EXPORT_C const TUid& CNativeComponentInfo::CNativeApplicationInfo::AppUid() const
+    {
+    return iAppUid;
+    }
+
+EXPORT_C const TDesC& CNativeComponentInfo::CNativeApplicationInfo::Name() const
+    {
+    return *iName;
+    }
+
+EXPORT_C const TDesC& CNativeComponentInfo::CNativeApplicationInfo::GroupName() const
+    {
+    return *iGroupName;
+    }
+
+EXPORT_C const TDesC& CNativeComponentInfo::CNativeApplicationInfo::IconFileName() const            
+    {
+    return *iIconFileName;
+    }
+
+CNativeComponentInfo::CNativeApplicationInfo* CNativeComponentInfo::CNativeApplicationInfo::NewL(RReadStream& aStream)
+    {    
+    CNativeComponentInfo::CNativeApplicationInfo* self = new (ELeave) CNativeComponentInfo::CNativeApplicationInfo();
+    CleanupStack::PushL(self);
+    
+    self->iAppUid = TUid::Uid(aStream.ReadInt32L());
+    self->iName = HBufC::NewL(aStream, KMaxDescriptorLength);
+    self->iGroupName = HBufC::NewL(aStream, KMaxDescriptorLength);
+    self->iIconFileName = HBufC::NewL(aStream, KMaxDescriptorLength);
+    
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CNativeComponentInfo::CNativeApplicationInfo::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L(iAppUid.iUid);    
+    aStream << *iName;
+    aStream << *iGroupName;
+    aStream << *iIconFileName;
+    }
+
 CNativeComponentInfo::CNativeComponentInfo() : iAuthenticity(Usif::ENotAuthenticated)
 	{
 	iUserGrantableCaps.SetEmpty();
@@ -66,8 +165,8 @@
 	delete iComponentName;
 	delete iGlobalComponentId;
 	delete iVersion;
-	delete iVendor;
-	
+	delete iVendor;		
+	iApplications.ResetAndDestroy();
 	iChildren.Close();
 	}
 
@@ -104,6 +203,14 @@
 	aStream.WriteInt32L(PackCapabilitySet(iUserGrantableCaps));
 	aStream.WriteInt32L(iMaxInstalledSize);
 	aStream.WriteInt32L(iHasExe);
+	aStream.WriteInt32L(iIsDriveSelectionRequired);
+	
+	const TInt numApplications = iApplications.Count();
+	aStream.WriteInt32L(numApplications);
+	for (TInt i=0; i<numApplications; ++i)
+	    {
+	    iApplications[i]->ExternalizeL(aStream);
+	    }
 	
 	// Recursively internalize all other childrens as well.
 	const TInt numChildren = iChildren.Count();
@@ -151,6 +258,16 @@
 	UnpackCapabilitySet(capsBitMask, iUserGrantableCaps);	
 	iMaxInstalledSize = aStream.ReadInt32L();
 	iHasExe = aStream.ReadInt32L();
+	iIsDriveSelectionRequired = aStream.ReadInt32L();
+	
+	const TInt numApplications = aStream.ReadInt32L();
+	for (TInt i=0; i<numApplications; ++i)
+	    {
+	    Swi::CNativeComponentInfo::CNativeApplicationInfo* app =  Swi::CNativeComponentInfo::CNativeApplicationInfo::NewL(aStream);
+	    CleanupStack::PushL(app);
+	    iApplications.AppendL(app);
+	    CleanupStack::Pop(app);
+	    }
 	
 	// Recursively internalize all other childrens as well.
 	const TInt numChildren = aStream.ReadInt32L();
--- a/installationservices/swi/source/uiss/client/sisuihandler.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/uiss/client/sisuihandler.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -61,10 +61,13 @@
 		{
 		return;
 		}
-	
+	TInt progressAmount = aAmount;
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	_LIT(KProgressorPanicDescriptor, "UISSCLIENT:The progress bar value publisher has not been set!");
 	__ASSERT_ALWAYS(iPublisher, User::Panic(KProgressorPanicDescriptor,KErrAbort));
-	TInt progressAmount = iPublisher->CalculateProgressBarValue(aAmount);	
+	progressAmount = iPublisher->UpdateProgressBarValueL(aAmount);	
+#endif	
 	
 	if (progressAmount != 0)
 	    {
@@ -78,13 +81,12 @@
 	    CleanupStack::PopAndDestroy(event);
 	    }
 	}
-
-
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 EXPORT_C void RUiHandler::SetProgressBarValuePublisher(CProgressBarValuePublisher* aPublisher)
 	{
 	iPublisher = aPublisher;
 	}
-
+#endif
 
 // CUissCmd
 
@@ -119,6 +121,7 @@
 	// default base class version which does not do any unmarshalling
 	}
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 // CProgressBarValuePublisher
 CProgressBarValuePublisher::CProgressBarValuePublisher()
 	{
@@ -142,8 +145,8 @@
 
 void CProgressBarValuePublisher::ConstructL()
 	{
-	iLastPercentCompletion = 0;
-	iLastProgressValue = 0;
+	// Initialize the value of the install progress bar property
+	User::LeaveIfError(RProperty::Set(KUidInstallServerCategory, KUidSwiProgressBarValueKey, 0));
 	}
 
 EXPORT_C void CProgressBarValuePublisher::SetFinalProgressBarValue(TInt aValue)
@@ -151,7 +154,7 @@
 	iFinalProgressValue = aValue;
 	}
 
-EXPORT_C TInt CProgressBarValuePublisher::CalculateProgressBarValue(TInt aValue)
+EXPORT_C TInt CProgressBarValuePublisher::UpdateProgressBarValueL(TInt aValue)
 	{
 	iCurrentProgressValue += aValue;
 	TUint percentage = (iFinalProgressValue <= 0) ? 100 : (iCurrentProgressValue * 100) / iFinalProgressValue;
@@ -159,8 +162,11 @@
 	    {
 	    TInt amountCompleted = iCurrentProgressValue - iLastProgressValue; 
 	    iLastProgressValue = iCurrentProgressValue;
+		iLastPercentCompletion = percentage;
+		User::LeaveIfError(RProperty::Set(KUidInstallServerCategory, KUidSwiProgressBarValueKey, percentage));
 	    return amountCompleted;
 	    }
 	return 0;
 	}	 
+#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 } // namespace Swi
--- a/installationservices/swi/source/upsswiobsplugin/source/10283725.rss	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/upsswiobsplugin/source/10283725.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -44,4 +44,4 @@
 				};
 			}
 		};
-	}
\ No newline at end of file
+	}
--- a/installationservices/swi/test/eabi/swicaptests_usifU.def	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/eabi/swicaptests_usifU.def	Tue Aug 31 15:21:33 2010 +0300
@@ -50,4 +50,8 @@
 	_ZTI40CSwiLauncherSisRegistryServerUtilCapTest @ 49 NONAME
 	_ZTV36CSwiLauncherInstallServerUtilCapTest @ 50 NONAME
 	_ZTV40CSwiLauncherSisRegistryServerUtilCapTest @ 51 NONAME
+	_ZTI22CSisLauncherSwiSidTest @ 52 NONAME
+	_ZTI22CSisRegistryTCBCapTest @ 53 NONAME
+	_ZTV22CSisLauncherSwiSidTest @ 54 NONAME
+	_ZTV22CSisRegistryTCBCapTest @ 55 NONAME
 
--- a/installationservices/swi/test/swicaptests/registrycaptest.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/swicaptests/registrycaptest.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -53,6 +53,7 @@
 _LIT(KRevocationRegistryCapTestName, "Registry revocation interface capability test");
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 _LIT(KSifServerRegistryCapTestName, "Registry SIF interface security test");
+_LIT(KSisRegistryTCBCapTestName, "Sis Registry interface requiring TCB security test");
 #endif
 
 CPublicRegistryCapTest* CPublicRegistryCapTest::NewL()
@@ -411,7 +412,7 @@
 		CheckFailL(err, _L("UpdateEntryL"));
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-		RCPointerArray<CSoftwareTypeRegInfo> regInfoArray;
+		RCPointerArray<Usif::CSoftwareTypeRegInfo> regInfoArray;
 		CleanupClosePushL(regInfoArray);
 		
 		TRAP(err, session.AddEntryL(*app, *buffer, regInfoArray, id));
@@ -492,6 +493,19 @@
 
 	TRAP(err, session.RecoverL());
 	CheckFailL(err, _L("RecoverL"));
+	
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	TRAP(err, session.SetComponentPresenceL(1, EFalse));
+	CheckFailL(err, _L("SetComponentPresenceL"));
+	
+	// Negative tests
+	//TRAP(err, session.SetComponentPresenceL(1234, EFalse));
+	//CheckFailL(err, _L("SetComponentPresenceL Negative 1"));
+    //TRAP(err, session.SetComponentPresenceL(0, EFalse));
+    //CheckFailL(err, _L("SetComponentPresenceL Negative 2"));    
+    //TRAP(err, session.SetComponentPresenceL(-1, EFalse));
+    //CheckFailL(err, _L("SetComponentPresenceL Negative 3"));
+#endif
 
 	CleanupStack::PopAndDestroy(&session);
 	}
@@ -594,6 +608,47 @@
 
 	CleanupStack::PopAndDestroy(&session);
 	}
+
+CSisRegistryTCBCapTest* CSisRegistryTCBCapTest::NewL()
+    {
+    CSisRegistryTCBCapTest* self=new(ELeave) CSisRegistryTCBCapTest();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CSisRegistryTCBCapTest::CSisRegistryTCBCapTest()
+    {
+    SetCapabilityRequired(ECapabilityTCB); //API requires TCB capability, so giving it
+    }
+    
+void CSisRegistryTCBCapTest::ConstructL()
+    {
+    SetNameL(KSisRegistryTCBCapTestName);
+    }
+
+void CSisRegistryTCBCapTest::RunTestL()
+    {
+    Swi::RSisRegistrySession registrySession;
+    CleanupClosePushL(registrySession);
+    _LIT(regFileName,"c:\\private\\10003a3f\\import\\apps\\dummy_reg.rsc");
+    TInt err = registrySession.Connect();
+    if (KErrNone != err)
+        {
+        SetFail();
+        CleanupStack::PopAndDestroy(&registrySession);
+        return;
+        }
+
+    TRAP(err, registrySession.AddAppRegInfoL(regFileName));
+    CheckFailL(err, _L("AddAppRegInfoL"));
+    
+    TRAP(err, registrySession.RemoveAppRegInfoL(regFileName));
+    CheckFailL(err, _L("RemoveAppRegInfoL"));
+
+    CleanupStack::PopAndDestroy(&registrySession);
+    }
 #endif
 
 
--- a/installationservices/swi/test/swicaptests/registrycaptest.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/swicaptests/registrycaptest.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -109,4 +109,19 @@
 
 	void ConstructL();
 	};
+
+/** Tests registry interfaces to add reg file data to scr with TCB capability*/
+class CSisRegistryTCBCapTest : public CDefaultCapabilityTest
+    {
+public:
+    static CSisRegistryTCBCapTest* NewL();
+    
+private:
+    CSisRegistryTCBCapTest();
+    
+    void RunTestL();
+
+    void ConstructL();
+    };
+
 #endif
--- a/installationservices/swi/test/swicaptests/scripts/swicaptests.ini	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/swicaptests/scripts/swicaptests.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -1,2 +1,14 @@
 [swicaptests]
 DllName=swicaptests.dll
+
+[simple]
+sis=z:\tswi\tsis\data\simple.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+numexist=1
+exist0=C:\Documents\InstTest\file1.txt
+
+[u_simple]
+uid=80000001
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+numnonexist=1
+nonexist0=C:\Documents\InstTest\file1.txt
--- a/installationservices/swi/test/swicaptests/scripts/swicaptests.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/swicaptests/scripts/swicaptests.script	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -18,7 +18,8 @@
 PRINT Run all SWIS capability tests
 
 LOAD_SUITE aprcaptestframework
-
+LOAD_SUITE tuiscriptadaptors
+LOAD_SUITE tscr // To delete the SCR DB
 
 //! @SYMTestCaseID 		API-SEC-SWI-CapTests-I-0001
 //! @SYMTestCaseDesc 		Runs the whole suite of test cases for SWI interfaces. Both negtive and positive tests are included
@@ -28,13 +29,21 @@
 //! @SYMTestExpectedResults 	KErrPermissionDenied received on calls which should fail
 //! @SYMDevelopedForRelease 	Yankee
 
-
 START_TESTCASE API-SEC-SWI-CapTests-I-0001
 
 RUN_UTILS MkDir c:\tswi\
 RUN_UTILS MkDir c:\tswi\swicaptests
 RUN_UTILS MkDir c:\tswi\swicaptests\data
 RUN_UTILS CopyFile z:\tswi\swicaptests\data\testdoc.txt c:\tswi\swicaptests\data\testdoc.txt
+
+// Delete the existing DB and install a test pacakage (so that ComponentId of 1 is valid)
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\swicaptests\scripts\swicaptests.ini simple
+
 RUN_TEST_STEP 100 aprcaptestframework RunThoroughCapabilityChecks z:\tswi\swicaptests\scripts\swicaptests.ini swicaptests
 
+// Uninstall the test pacakage and delete the DB so that it does not interfere with remaining tests
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\swicaptests\scripts\swicaptests.ini u_simple
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+
 END_TESTCASE API-SEC-SWI-CapTests-I-0001
--- a/installationservices/swi/test/swicaptests/swicaptests.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/swicaptests/swicaptests.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -52,6 +52,8 @@
 	factory->AddTestL(CSifServerRegistryCapTest::NewL());
 	factory->AddTestL(CSwiLauncherInstallServerUtilCapTest::NewL());
 	factory->AddTestL(CSwiLauncherSisRegistryServerUtilCapTest::NewL());
+	factory->AddTestL(CSisRegistryTCBCapTest::NewL());
+	factory->AddTestL(CSisLauncherSwiSidTest::NewL());
 #endif
 	return factory;
 	}
--- a/installationservices/swi/test/swicaptests/swicaptests.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/swicaptests/swicaptests.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -88,6 +88,9 @@
 LIBRARY			sisregistryclient.lib
 LIBRARY			plan.lib
 LIBRARY			swidataprovider.lib
-LIBRARY			siscontroller.lib
+LIBRARY			siscontroller.lib 
 LIBRARY			aprcaptestframeworkutil.lib
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+LIBRARY scrclient.lib
+#endif
 SMPSAFE
--- a/installationservices/swi/test/swicaptests/swilaunchercaptest.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/swicaptests/swilaunchercaptest.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -24,6 +24,7 @@
 #include "sislauncherclient.h"
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include "swtypereginfo.h"
+#include "sislauncherclient.h"
 #endif
 #include <e32def.h>
 
@@ -32,7 +33,7 @@
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 _LIT(KSwiLauncherInstallServerUtilCapTestName, "Swi Launcher Utils for InstallServer capability test");
 _LIT(KSwiLauncherSisRegistryServerUtilCapTestName, "Swi Launcher Utils for SisRegistryServer capability test");
-
+_LIT(KSisLauncherSwiSidCapTest, "Sis Launcher API's which require SWI Sid");
 const TUid KInstallServerUid = {0x101F7295};
 const TUid KSisRegistryServerUid = {0x10202DCA};
 #endif
@@ -160,7 +161,7 @@
 	
 	User::LeaveIfError(file.Open(fs, testDocFileOnSysDrive , EFileShareExclusive|EFileRead));
 	
-	RCPointerArray<Swi::CSoftwareTypeRegInfo> regInfoArray;
+	RCPointerArray<Usif::CSoftwareTypeRegInfo> regInfoArray;
 	CleanupClosePushL(regInfoArray);
 	
 	TRAP(err, launcher.ParseSwTypeRegFileL(file, regInfoArray));
@@ -202,6 +203,8 @@
 	Swi::RSisLauncherSession launcher;
 	CleanupClosePushL(launcher);
 	
+	const RArray<Swi::TAppUpdateInfo> appUpdateInfo;
+	
 	if (launcher.Connect() != KErrNone)
 		{
 		CleanupStack::PopAndDestroy(&launcher);
@@ -215,7 +218,50 @@
 	
 	TRAP(err, launcher.UnregisterSifLauncherMimeTypesL(mimeTypes));
 	CheckFailL(err, _L("UnregisterSifLauncherMimeTypesL"));
+    
+    TRAP(err, launcher.NotifyNewAppsL(appUpdateInfo));
+    CheckFailL(err, _L("NotifyNewAppsL - update apparc"));
 	
 	CleanupStack::PopAndDestroy(2, &launcher); // mimeTypes
 	}
+
+//CSisLauncherSwiSidTest----------------------------------------------------------------------------------------------------------------------------------
+
+CSisLauncherSwiSidTest* CSisLauncherSwiSidTest::NewL()
+    {
+    CSisLauncherSwiSidTest* self = new (ELeave) CSisLauncherSwiSidTest();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CSisLauncherSwiSidTest::CSisLauncherSwiSidTest()
+    {
+    SetCapabilityRequired(ECapabilityTCB);
+    SetSidRequired(KInstallServerUid);
+    }
+    
+void CSisLauncherSwiSidTest::ConstructL()
+    {
+    SetNameL(KSisLauncherSwiSidCapTest);
+    }
+
+void CSisLauncherSwiSidTest::RunTestL()
+    {
+    Swi::RSisLauncherSession launcher;
+    CleanupClosePushL(launcher);
+    const RPointerArray<Usif::CApplicationRegistrationData> appRegData;
+    TInt err = launcher.Connect();
+    if (err != KErrNone)
+        {
+        CleanupStack::PopAndDestroy(&launcher);
+        return;
+        }
+    err=KErrNone;
+    TRAP(err, launcher.NotifyNewAppsL(appRegData));
+    CheckFailL(err, _L("NotifyNewAppsL - force registration"));
+    CleanupStack::PopAndDestroy(&launcher);
+    }
+
 #endif
--- a/installationservices/swi/test/swicaptests/swilaunchercaptest.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/swicaptests/swilaunchercaptest.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -51,15 +51,29 @@
 	};
 
 class CSwiLauncherSisRegistryServerUtilCapTest : public CDefaultCapabilityTest
-	{
+    {
 public:
-	static CSwiLauncherSisRegistryServerUtilCapTest* NewL();
-	
+    static CSwiLauncherSisRegistryServerUtilCapTest* NewL();
+    
 private:
-	CSwiLauncherSisRegistryServerUtilCapTest();
-	
-	void RunTestL();
-	
-	void ConstructL();
-	};
+    CSwiLauncherSisRegistryServerUtilCapTest();
+    
+    void RunTestL();
+    
+    void ConstructL();
+    };
+
+class CSisLauncherSwiSidTest : public CDefaultCapabilityTest
+    {
+public:
+    static CSisLauncherSwiSidTest* NewL();
+    
+private:
+    CSisLauncherSwiSidTest();
+    
+    void RunTestL();
+    
+    void ConstructL();
+    };
+
 #endif
--- a/installationservices/swi/test/tautosigning/tautosigning.ini	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tautosigning/tautosigning.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -1,3 +1,13 @@
+[ResetKeyVAlue]
+uid=2002CFF6
+cenrepkey=5
+cenrepvalue=0
+
+[SetKeyVAlue]
+uid=2002CFF6
+cenrepkey=5
+cenrepvalue=1
+
 [1-1unsigneddata]
 sis=z:\tswi\tautosigning\data\1-1unsigneddata.sis
 script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
@@ -34,6 +44,12 @@
 uid=8000A005
 result=Sucess
 
+[embedselfsigneddata]
+sis=z:\tswi\tsis\data\embedselfsign.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+uid=8000AB05
+result=Sucess
+
 [2-3selfsignedexenocap]
 sis=z:\tswi\tautosigning\data\2-3selfsignedexenocap.sis
 script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
--- a/installationservices/swi/test/tautosigning/tautosigning.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tautosigning/tautosigning.script	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -16,6 +16,7 @@
 
 PRINT Run all SWIS tests
 LOAD_SUITE tuiscriptadaptors
+LOAD_SUITE tSisRegistryTest
 
 //! @file
 //! @SYMTestCaseID		API-SEC-TAUTOSIGNING-UNSIGNED-0001
@@ -217,4 +218,50 @@
 
 RUN_TEST_STEP 100 tuiscriptadaptors CheckedInstallStep z:\tswi\tautosigning\scripts\tautosigning.ini 3-6signeduserunauthorised
 
-END_TESTCASE API-SEC-TAUTOSIGNING-SIGNED-0006
\ No newline at end of file
+END_TESTCASE API-SEC-TAUTOSIGNING-SIGNED-0006
+
+//! @file
+//! @SYMTestCaseID		API-SEC-TAUTOSIGNING-SELFSIGNED-0007
+//! @SYMTestCaseDesc		Installs/Uninstalls a Self-Signed SIS file with AllowSelfSigned 
+//! 						Central Reposatory setting as True. Then change the Central Reposatory 
+//! 						setting as False and then Install Again.
+//! @SYMTestPriority		Low
+//! @SYMTestStatus		3. Released
+//! @SYMTestActions		Attempts an install followed by an uninstall. Change the Central Reposatory 
+//! 					setting. Attempts an install.
+//! @SYMTestExpectedResults	Sucessful Install, Sucessful Uninstall. Sucessful Change Setting. Unsucessful Install.
+//! @SYMPREQ			PREQ7308
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-TAUTOSIGNING-SELFSIGNED-0007
+
+RUN_TEST_STEP 100 tuiscriptadaptors CheckedInstallStep z:\tswi\tautosigning\scripts\tautosigning.ini 2-2selfsigneddata
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tautosigning\scripts\tautosigning.ini 2-2selfsigneddata
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\tautosigning\scripts\tautosigning.ini ResetKeyVAlue
+RUN_TEST_STEP_RESULT 106 100 tuiscriptadaptors CheckedInstallStep z:\tswi\tautosigning\scripts\tautosigning.ini 2-2selfsigneddata
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\tautosigning\scripts\tautosigning.ini SetKeyVAlue
+
+END_TESTCASE API-SEC-TAUTOSIGNING-SELFSIGNED-0007
+
+//! @file
+//! @SYMTestCaseID		API-SEC-TAUTOSIGNING-SELFSIGNED-0008
+//! @SYMTestCaseDesc		Installs/Uninstalls a Embedded Self-Signed SIS file with AllowSelfSigned 
+//! 						Central Reposatory setting as True. Then change the Central Reposatory 
+//! 						setting as False and then Install Again.
+//! @SYMTestPriority		Low
+//! @SYMTestStatus		3. Released
+//! @SYMTestActions		Attempts an install followed by an uninstall. Change the Central Reposatory 
+//! 					setting. Attempts an install.
+//! @SYMTestExpectedResults	Sucessful Install, Sucessful Uninstall. Sucessful Change Setting. Unsucessful Install.
+//! @SYMPREQ			PREQ7308
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-TAUTOSIGNING-SELFSIGNED-0008
+
+RUN_TEST_STEP 100 tuiscriptadaptors CheckedInstallStep z:\tswi\tautosigning\scripts\tautosigning.ini embedselfsigneddata
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tautosigning\scripts\tautosigning.ini embedselfsigneddata
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\tautosigning\scripts\tautosigning.ini ResetKeyVAlue
+RUN_TEST_STEP_RESULT 106 100 tuiscriptadaptors CheckedInstallStep z:\tswi\tautosigning\scripts\tautosigning.ini embedselfsigneddata
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\tautosigning\scripts\tautosigning.ini SetKeyVAlue
+
+END_TESTCASE API-SEC-TAUTOSIGNING-SELFSIGNED-0008
\ No newline at end of file
--- a/installationservices/swi/test/tbackuprestore/scripts/batchfiles/tbackuprestore_post.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tbackuprestore/scripts/batchfiles/tbackuprestore_post.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -22,11 +22,16 @@
 del /s /f /q \epoc32\winscw\c\tswi\tbackuprestore\backup*.*
 del /s /f /q \epoc32\winscw\c\tswi\tbackuprestore\metadata*
 
+copy /y \epoc32\release\winscw\udeb\z\resource\temp\swicertstore.dat \epoc32\release\winscw\udeb\z\resource\swicertstore.dat
+copy /y \epoc32\release\winscw\urel\z\resource\temp\swicertstore.dat \epoc32\release\winscw\urel\z\resource\swicertstore.dat
+
+
 rem cleanup anything from previous tests.
+RMDIR /s /q \epoc32\release\winscw\udeb\z\resource\temp
 del /f /q \epoc32\winscw\c\sys\install\scr\scr.*
 del /s /f /q \epoc32\winscw\c\sys\install\sisregistry\802730A0
 del /s /f /q \epoc32\winscw\c\sys\install\sisregistry\80000077
 del /s /f /q \epoc32\winscw\c\sys\install\sisregistry\80000076
 del /s /f /q \epoc32\winscw\c\sys\install\sisregistry\
 del /s /f /q \epoc32\winscw\c\sys\bin\
-del /s /f /q \epoc32\winscw\c\sys\hash\
\ No newline at end of file
+del /s /f /q \epoc32\winscw\c\sys\hash\
--- a/installationservices/swi/test/tbackuprestore/scripts/batchfiles/tbackuprestore_pre.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tbackuprestore/scripts/batchfiles/tbackuprestore_pre.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -19,6 +19,15 @@
 
 copy \epoc32\release\winscw\urel\tswisidupgradeexe.exe \epoc32\release\winscw\urel\z\sys\bin\tswisidupgradeexe.exe
 
+mkdir \epoc32\release\winscw\udeb\z\resource\temp
+mkdir \epoc32\release\winscw\urel\z\resource\temp
+
+copy \epoc32\release\winscw\udeb\z\resource\swicertstore.dat \epoc32\release\winscw\urel\z\resource\temp\swicertstore.dat
+copy \epoc32\release\winscw\urel\z\resource\swicertstore.dat \epoc32\release\winscw\urel\z\resource\temp\swicertstore.dat
+
+copy /y \epoc32\winscw\c\tswi\certstore\swicertstore_sucert.dat \epoc32\release\winscw\udeb\z\resource\swicertstore.dat
+copy /y \epoc32\winscw\c\tswi\certstore\swicertstore_sucert.dat \epoc32\release\winscw\urel\z\resource\swicertstore.dat
+
 rem cleanup anything from previous tests.
 del /f /q \epoc32\winscw\c\sys\install\scr\scr.db
 del /s /f /q \epoc32\winscw\c\sys\install\sisregistry\
\ No newline at end of file
--- a/installationservices/swi/test/tbackuprestore/scripts/ini	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tbackuprestore/scripts/ini	Tue Aug 31 15:21:33 2010 +0300
@@ -1333,4 +1333,163 @@
 
 [API-INST-PAS-SWI-0001-A]
 PublishedUidCount=1
-PublishedUidValue0=88000106
\ No newline at end of file
+PublishedUidValue0=88000106
+
+[AppRegData_Install]
+sis=z:\tswi\tsis\data\swiappregintegration01.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=03
+devicelanguage2=24
+
+[AppRegData]
+SIS1 = z:\tswi\tsis\swiappregintegration01.sis
+UID1 = 80010002
+FILE1.1 = C:\sys\bin\swiappregintegration.exe
+FILE1.2 = C:\private\10003a3f\import\apps\swiappregintegration01_reg.rsc
+FILE1.3 = C:\resource\apps\swiappregintegration01_loc.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration01_rsc.mbm
+FILE1.5 = C:\resource\apps\swiappregintegration01_loc.r01
+FILE1.6 = C:\resource\apps\swiappregintegration01_01.mbm
+FILE1.7 = C:\resource\apps\swiappregintegration01_loc.r03
+FILE1.8 = C:\resource\apps\swiappregintegration01_03.mbm
+FILE1.9 = C:\resource\apps\swiappregintegration01_loc.r24
+FILE1.10 = C:\resource\apps\swiappregintegration01_24.mbm
+INSTALLDRIVE1 = C
+
+[AppRegData_Base]
+SIS1 = z:\tswi\tsis\swiappregintegration_base01.sis
+UID1 = 80010003
+FILE1.1 = C:\sys\bin\swiappregintegration_base01.exe
+FILE1.2 = C:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+FILE1.3 = C:\resource\apps\swiappregintegration_base01_loc.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration_base01_rsc.mbm
+FILE1.5 = C:\resource\apps\swiappregintegration_base01_loc.r01
+FILE1.6 = C:\resource\apps\swiappregintegration_base01_01.mbm
+FILE1.7 = C:\resource\apps\swiappregintegration_base01_loc.r02
+FILE1.8 = C:\resource\apps\swiappregintegration_base01_02.mbm
+INSTALLDRIVE1 = C
+
+[AppRegData_WithUpgrade]
+SIS1 = z:\tswi\tsis\swiappregintegration_base02.sis
+UID1 = 80010003
+FILE1.1 = C:\sys\bin\swiappregintegration_base01.exe
+FILE1.2 = C:\sys\bin\swiappregintegration02.exe
+FILE1.3 = C:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration_base01_loc.rsc
+FILE1.5 = C:\resource\apps\swiappregintegration_base01_rsc.mbm
+FILE1.6 = C:\resource\apps\swiappregintegration_base01_loc.r01
+FILE1.7 = C:\resource\apps\swiappregintegration_base01_01.mbm
+FILE1.8 = C:\resource\apps\swiappregintegration_base01_loc.r02
+FILE1.9 = C:\resource\apps\swiappregintegration_base01_02.mbm
+FILE1.10 = C:\resource\apps\swiappregintegration_base01_loc.r03
+FILE1.11 = C:\resource\apps\swiappregintegration_base01_03.mbm
+FILE1.12 = C:\resource\apps\swiappregintegration02_loc.rsc
+FILE1.13 = C:\resource\apps\swiappregintegration02_rsc.mbm
+FILE1.14 = C:\resource\apps\swiappregintegration02_loc.r01
+FILE1.15 = C:\resource\apps\swiappregintegration02_01.mbm
+FILE1.16 = C:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+INSTALLDRIVE1 = C
+
+[swiappregintegration_sa_app]
+SIS1 = z:\tswi\tsis\swiappregintegration_case08_1_sa2.sis
+UID1 = 80010099
+FILE1.1 = C:\private\10003a3f\import\apps\swiappregintegration_case05_reg.rsc
+FILE1.2 = C:\resource\apps\swiappregintegration_case05_loc.r01
+FILE1.3 = C:\resource\apps\swiappregintegration.mbm
+INSTALLDRIVE1 = C
+
+[swiappregintegration_no_app]
+SIS1 = z:\tswi\tsis\swiappregintegration_case08_1_sa2.sis
+UID1 = 80010099
+
+[Install_NonRemovableBase]
+sis=z:\tswi\tsis\data\nonremovablebase_sucert.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[Upgrade_SP_Over_SA-NR]
+sis=z:\tswi\tsis\data\nonremovableupgrade.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+
+[SP_Over_SA-NR]
+SIS1 = z:\tswi\tsis\nonremovableupgrade.sis
+UID1 = 0x80000002
+FILE1.1 = C:\sys\bin\swiappregintegration02.exe
+FILE1.2 = C:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+FILE1.3 = C:\resource\apps\swiappregintegration02_loc.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration02_rsc.mbm
+FILE1.5 = C:\resource\apps\swiappregintegration02_loc.r01
+FILE1.6 = C:\resource\apps\swiappregintegration02_01.mbm
+
+[uninstall_SP_Over_SA-NR]
+uid=80000002
+vendorName=Vendor
+packageName=swiappregintegration_base01_sp_EN
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[Restore_SP_Upgrade]
+SIS1 = z:\tswi\tsis\data\swiappregintegration_base01.SIS
+UID1 = 80010003
+FILE1.1 = C:\sys\bin\swiappregintegration_base01.exe
+FILE1.2 = C:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+FILE1.3 = C:\resource\apps\swiappregintegration_base01_loc.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration_base01_rsc.mbm
+FILE1.5 = C:\resource\apps\swiappregintegration_base01_loc.r01
+FILE1.6 = C:\resource\apps\swiappregintegration_base01_01.mbm
+FILE1.7 = C:\resource\apps\swiappregintegration_base01_loc.r02
+FILE1.8 = C:\resource\apps\swiappregintegration_base01_02.mbm
+FILE1.9 = C:\sys\bin\swiappregintegration02.exe
+FILE1.10 = C:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+FILE1.11 = C:\resource\apps\swiappregintegration02_loc.rsc
+FILE1.12 = C:\resource\apps\swiappregintegration02_rsc.mbm
+FILE1.13 = C:\resource\apps\swiappregintegration02_loc.r01
+FILE1.14 = C:\resource\apps\swiappregintegration02_01.mbm
+FILE1.15 = C:\resource\apps\swiappregintegration_base01_loc.r03
+FILE1.16 = C:\resource\apps\swiappregintegration_base01_03.mbm
+INSTALLDRIVE1 = C
+
+[Restore_PU_Upgrade]
+SIS1 = z:\tswi\tsis\data\swiappregintegration_base01.SIS
+UID1 = 80010003
+FILE1.1 = C:\sys\bin\swiappregintegration_base01.exe
+FILE1.2 = C:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+FILE1.3 = C:\resource\apps\swiappregintegration_base01_loc.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration_base01_rsc.mbm
+FILE1.5 = C:\resource\apps\swiappregintegration_base01_loc.r01
+FILE1.6 = C:\resource\apps\swiappregintegration_base01_01.mbm
+FILE1.7 = C:\resource\apps\swiappregintegration_base01_loc.r02
+FILE1.8 = C:\resource\apps\swiappregintegration_base01_02.mbm
+FILE1.9 = C:\sys\bin\swiappregintegration02.exe
+FILE1.10 = C:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+FILE1.11 = C:\resource\apps\swiappregintegration02_loc.rsc
+FILE1.12 = C:\resource\apps\swiappregintegration02_rsc.mbm
+FILE1.13 = C:\resource\apps\swiappregintegration02_loc.r01
+FILE1.14 = C:\resource\apps\swiappregintegration02_01.mbm
+FILE1.15 = C:\resource\apps\swiappregintegration_base01_loc.r03
+FILE1.16 = C:\resource\apps\swiappregintegration_base01_03.mbm
+INSTALLDRIVE1 = C
+
+[AppRegData_embedded]
+SIS1 = z:\tswi\tsis\data\swiappregintegration_case06_sa.SIS
+UID1 = 80010099
+FILE1.1 = C:\private\10003a3f\import\apps\swiappregintegration_case05_reg.rsc
+FILE1.2 = C:\resource\apps\swiappregintegration_case05_loc.r01
+FILE1.3 = C:\resource\apps\swiappregintegration.mbm
+
+FILE1.4 = C:\sys\bin\swiappregintegration02.exe
+FILE1.5 = C:\resource\apps\swiappregintegration_case05_loc.r02
+FILE1.6 = C:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+FILE1.7 = C:\resource\apps\swiappregintegration02_loc.rsc
+FILE1.8 = C:\resource\apps\swiappregintegration02_rsc.mbm
+
+FILE1.9 = C:\sys\bin\swiappregintegration_case06.exe
+FILE1.10 = C:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc
+FILE1.11 = C:\resource\apps\swiappregintegration_case06_loc.rsc
+
+FILE1.12 = C:\resource\apps\swiappregintegration_case05_loc.r04
+FILE1.13 = C:\sys\bin\swiappregintegration_case07.exe
+FILE1.14 = C:\private\10003a3f\import\apps\swiappregintegration_case07_reg.rsc
+FILE1.15 = C:\resource\apps\swiappregintegration_case07_loc.rsc
+INSTALLDRIVE1 = C
+
--- a/installationservices/swi/test/tbackuprestore/scripts/ini_armv5	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tbackuprestore/scripts/ini_armv5	Tue Aug 31 15:21:33 2010 +0300
@@ -911,4 +911,164 @@
 
 [API-INST-PAS-SWI-0002]
 PublishedUidCount=1
-PublishedUidValue0=81113001
\ No newline at end of file
+PublishedUidValue0=81113001
+
+[AppRegData_Install]
+sis=z:\tswi\tsis\data\swiappregintegration01.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=03
+devicelanguage2=24
+
+[AppRegData]
+SIS1 = z:\tswi\tsis\swiappregintegration01.sis
+UID1 = 80010002
+FILE1.1 = C:\sys\bin\swiappregintegration.exe
+FILE1.2 = C:\private\10003a3f\import\apps\swiappregintegration01_reg.rsc
+FILE1.3 = C:\resource\apps\swiappregintegration01_loc.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration01_rsc.mbm
+FILE1.5 = C:\resource\apps\swiappregintegration01_loc.r01
+FILE1.6 = C:\resource\apps\swiappregintegration01_01.mbm
+FILE1.7 = C:\resource\apps\swiappregintegration01_loc.r03
+FILE1.8 = C:\resource\apps\swiappregintegration01_03.mbm
+FILE1.9 = C:\resource\apps\swiappregintegration01_loc.r24
+FILE1.10 = C:\resource\apps\swiappregintegration01_24.mbm
+INSTALLDRIVE1 = C
+
+[AppRegData_Base]
+SIS1 = z:\tswi\tsis\swiappregintegration_base01.sis
+UID1 = 80010003
+FILE1.1 = C:\sys\bin\swiappregintegration_base01.exe
+FILE1.2 = C:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+FILE1.3 = C:\resource\apps\swiappregintegration_base01_loc.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration_base01_rsc.mbm
+FILE1.5 = C:\resource\apps\swiappregintegration_base01_loc.r01
+FILE1.6 = C:\resource\apps\swiappregintegration_base01_01.mbm
+FILE1.7 = C:\resource\apps\swiappregintegration_base01_loc.r02
+FILE1.8 = C:\resource\apps\swiappregintegration_base01_02.mbm
+INSTALLDRIVE1 = C
+
+[AppRegData_WithUpgrade]
+SIS1 = z:\tswi\tsis\swiappregintegration_base02.sis
+UID1 = 80010003
+FILE1.1 = C:\sys\bin\swiappregintegration_base01.exe
+FILE1.2 = C:\sys\bin\swiappregintegration02.exe
+FILE1.3 = C:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration_base01_loc.rsc
+FILE1.5 = C:\resource\apps\swiappregintegration_base01_rsc.mbm
+FILE1.6 = C:\resource\apps\swiappregintegration_base01_loc.r01
+FILE1.7 = C:\resource\apps\swiappregintegration_base01_01.mbm
+FILE1.8 = C:\resource\apps\swiappregintegration_base01_loc.r02
+FILE1.9 = C:\resource\apps\swiappregintegration_base01_02.mbm
+FILE1.10 = C:\resource\apps\swiappregintegration_base01_loc.r03
+FILE1.11 = C:\resource\apps\swiappregintegration_base01_03.mbm
+FILE1.12 = C:\resource\apps\swiappregintegration02_loc.rsc
+FILE1.13 = C:\resource\apps\swiappregintegration02_rsc.mbm
+FILE1.14 = C:\resource\apps\swiappregintegration02_loc.r01
+FILE1.15 = C:\resource\apps\swiappregintegration02_01.mbm
+FILE1.16 = C:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+INSTALLDRIVE1 = C
+
+[swiappregintegration_sa_app]
+SIS1 = z:\tswi\tsis\swiappregintegration_case08_1_sa2.sis
+UID1 = 80010099
+FILE1.1 = C:\private\10003a3f\import\apps\swiappregintegration_case05_reg.rsc
+FILE1.2 = C:\resource\apps\swiappregintegration_case05_loc.r01
+FILE1.3 = C:\resource\apps\swiappregintegration.mbm
+INSTALLDRIVE1 = C
+
+[swiappregintegration_no_app]
+SIS1 = z:\tswi\tsis\swiappregintegration_case08_1_sa2.sis
+UID1 = 80010099
+
+[Install_NonRemovableBase]
+sis=z:\tswi\tsis\data\nonremovablebase_sucert.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[Upgrade_SP_Over_SA-NR]
+sis=z:\tswi\tsis\data\nonremovableupgrade.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+
+[SP_Over_SA-NR]
+SIS1 = z:\tswi\tsis\nonremovableupgrade.sis
+UID1 = 0x80000002
+FILE1.1 = C:\sys\bin\swiappregintegration02.exe
+FILE1.2 = C:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+FILE1.3 = C:\resource\apps\swiappregintegration02_loc.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration02_rsc.mbm
+FILE1.5 = C:\resource\apps\swiappregintegration02_loc.r01
+FILE1.6 = C:\resource\apps\swiappregintegration02_01.mbm
+
+[uninstall_SP_Over_SA-NR]
+uid=80000002
+vendorName=Vendor
+packageName=swiappregintegration_base01_sp_EN
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+
+[Restore_SP_Upgrade]
+SIS1 = z:\tswi\tsis\data\swiappregintegration_base01.SIS
+UID1 = 80010003
+FILE1.1 = C:\sys\bin\swiappregintegration_base01.exe
+FILE1.2 = C:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+FILE1.3 = C:\resource\apps\swiappregintegration_base01_loc.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration_base01_rsc.mbm
+FILE1.5 = C:\resource\apps\swiappregintegration_base01_loc.r01
+FILE1.6 = C:\resource\apps\swiappregintegration_base01_01.mbm
+FILE1.7 = C:\resource\apps\swiappregintegration_base01_loc.r02
+FILE1.8 = C:\resource\apps\swiappregintegration_base01_02.mbm
+FILE1.9 = C:\sys\bin\swiappregintegration02.exe
+FILE1.10 = C:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+FILE1.11 = C:\resource\apps\swiappregintegration02_loc.rsc
+FILE1.12 = C:\resource\apps\swiappregintegration02_rsc.mbm
+FILE1.13 = C:\resource\apps\swiappregintegration02_loc.r01
+FILE1.14 = C:\resource\apps\swiappregintegration02_01.mbm
+FILE1.15 = C:\resource\apps\swiappregintegration_base01_loc.r03
+FILE1.16 = C:\resource\apps\swiappregintegration_base01_03.mbm
+INSTALLDRIVE1 = C
+
+[Restore_PU_Upgrade]
+SIS1 = z:\tswi\tsis\data\swiappregintegration_base01.SIS
+UID1 = 80010003
+FILE1.1 = C:\sys\bin\swiappregintegration_base01.exe
+FILE1.2 = C:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+FILE1.3 = C:\resource\apps\swiappregintegration_base01_loc.rsc
+FILE1.4 = C:\resource\apps\swiappregintegration_base01_rsc.mbm
+FILE1.5 = C:\resource\apps\swiappregintegration_base01_loc.r01
+FILE1.6 = C:\resource\apps\swiappregintegration_base01_01.mbm
+FILE1.7 = C:\resource\apps\swiappregintegration_base01_loc.r02
+FILE1.8 = C:\resource\apps\swiappregintegration_base01_02.mbm
+FILE1.9 = C:\sys\bin\swiappregintegration02.exe
+FILE1.10 = C:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+FILE1.11 = C:\resource\apps\swiappregintegration02_loc.rsc
+FILE1.12 = C:\resource\apps\swiappregintegration02_rsc.mbm
+FILE1.13 = C:\resource\apps\swiappregintegration02_loc.r01
+FILE1.14 = C:\resource\apps\swiappregintegration02_01.mbm
+FILE1.15 = C:\resource\apps\swiappregintegration_base01_loc.r03
+FILE1.16 = C:\resource\apps\swiappregintegration_base01_03.mbm
+INSTALLDRIVE1 = C
+
+[AppRegData_embedded]
+SIS1 = z:\tswi\tsis\data\swiappregintegration_case06_sa.SIS
+UID1 = 80010099
+FILE1.1 = C:\private\10003a3f\import\apps\swiappregintegration_case05_reg.rsc
+FILE1.2 = C:\resource\apps\swiappregintegration_case05_loc.r01
+FILE1.3 = C:\resource\apps\swiappregintegration.mbm
+
+FILE1.4 = C:\sys\bin\swiappregintegration02.exe
+FILE1.5 = C:\resource\apps\swiappregintegration_case05_loc.r02
+FILE1.6 = C:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+FILE1.7 = C:\resource\apps\swiappregintegration02_loc.rsc
+FILE1.8 = C:\resource\apps\swiappregintegration02_rsc.mbm
+
+FILE1.9 = C:\sys\bin\swiappregintegration_case06.exe
+FILE1.10 = C:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc
+FILE1.11 = C:\resource\apps\swiappregintegration_case06_loc.rsc
+
+FILE1.12 = C:\resource\apps\swiappregintegration_case05_loc.r04
+FILE1.13 = C:\sys\bin\swiappregintegration_case07.exe
+FILE1.14 = C:\private\10003a3f\import\apps\swiappregintegration_case07_reg.rsc
+FILE1.15 = C:\resource\apps\swiappregintegration_case07_loc.rsc
+INSTALLDRIVE1 = C
+
--- a/installationservices/swi/test/tbackuprestore/scripts/tbackuprestore.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tbackuprestore/scripts/tbackuprestore.script	Tue Aug 31 15:21:33 2010 +0300
@@ -20,6 +20,8 @@
 LOAD_SUITE tbackuprestore
 LOAD_SUITE tuiscriptadaptors
 LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+LOAD_SUITE tscr
 
 // Make sure emulated X drive is not corrupt and is empty.
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
@@ -1931,5 +1933,396 @@
 
 RUN_UTILS DeleteFile C:\Documents\abc*.txt
 
+
+// Delete the SCR Database file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr_appreginfo.ini db_file
+
+//! @SYMTestCaseID		API-SEC-BACKUPRESTORE_AppRegData-0001
+//! @SYMTestCaseDesc		Checks restore of a package containg an applicaion
+//! @SYMTestPriority		High
+//! @SYMTestStatus		3. Released
+//! @SYMTestActions		Installs, backs up, uninstalls, restores and uninstalls a single package containg an applicaion
+//! @SYMTestExpectedResults	Success, clean environment.
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0001
+RUN_TEST_STEP	100	tuiscriptadaptors 	InstallStep	z:\tswi\tbackuprestore\scripts\ini		AppRegData_Install
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		AppRegData
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_EN
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_IF
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_spanish
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_RSC
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_case01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0001
+
+
+//! @SYMTestCaseID		API-SEC-BACKUPRESTORE_AppRegData-0002
+//! @SYMTestCaseDesc		Upgrades an existing SA pacakge with an SA having new application and new details for FR and GE through Restore
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data then do backup, uninstall, restore. Now install an upgrade
+//				then do backup, uninstall, restore
+//! @SYMTestExpectedResults	Upgrade through Restore happens successfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0002
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_No_Eclipsing_EN
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_No_Eclipsing_FR
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_No_Eclipsing_RSC
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base02
+
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+
+
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_FR
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0002
+
+//! @SYMTestCaseID		API-SEC-BACKUPRESTORE_AppRegData-0003
+//! @SYMTestCaseDesc		Tests the installation of an SIS file which delivers no files followed by a SA upgrade that delivers an app.
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having no appplication then do backup, uninstall and restore. Now install an upgrade with application
+//				then do backup, uninstall and restore.
+//! @SYMTestExpectedResults	Upgrade through Restore happens successfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0003
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_no_app
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini no_app
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_sa_app
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+
+
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_sa_app
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_no_app
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0003
+
+
+//! @SYMTestCaseID		API-SEC-BACKUPRESTORE_AppRegData-0004
+//! @SYMTestCaseDesc		Tests the installation of an SIS file which delivers some files followed by a SA upgrade that delivers no files.
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having with appplication then do backup, uninstall and restore. Now install an upgrade with no application
+//				then do backup, uninstall and restore.
+//! @SYMTestExpectedResults	Upgrade through Restore happens successfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0004
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_sa_app
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_sa_app
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_no_app
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+
+
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini no_app
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_no_app
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0004
+
+//! @SYMTestCaseID		API-SEC-BACKUPRESTORE_AppRegData-0005
+//! @SYMTestCaseDesc		Checks restore of a package containg an applicaion
+//! @SYMTestPriority		High
+//! @SYMTestStatus		3. Released
+//! @SYMTestActions		Installs a NR SIS file without an appplication then do backup, uninstall and restore. Now install an SP upgrade(Non NR) with application
+//				then do backup, uninstall and restore.
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0005
+RUN_TEST_STEP	100	tuiscriptadaptors 	InstallStep	z:\tswi\tbackuprestore\scripts\ini		Install_NonRemovableBase
+
+RUN_TEST_STEP	100	tuiscriptadaptors 	InstallStep	z:\tswi\tbackuprestore\scripts\ini		Upgrade_SP_Over_SA-NR
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallAugStep z:\tswi\tbackuprestore\scripts\ini uninstall_SP_Over_SA-NR
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0005
+
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-0006
+//! @SYMTestCaseDesc	Upgrades an existing SA pacakge with an SP having new application and new details for GE,backup the  package,
+//			Uninstall the package , restore and verify the data.
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0006
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_sp
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0006
+
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-0007
+//! @SYMTestCaseDesc	Upgrades an existing SA pacakge with an SP having new application and new details for GE,backup the  package,
+//			Uninstall the package , restore and verify the data
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0007
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_sp
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0007
+
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-0008
+//! @SYMTestCaseDesc	Upgrades an existing SA pacakge with an PU having new application and new details for FR and GE, backup the  package,
+//			Uninstall the package , restore and verify the data
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0008
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_pu
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_FR
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0008
+
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-0009
+//! @SYMTestCaseDesc	Upgrades an existing SA pacakge with an PU having new application and new details for FR and GE, backup the  package,
+//			Uninstall the package , restore and verify the data
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE 	API-SEC-BACKUPRESTORE_AppRegData-0009
+RUN_TEST_STEP   100 	tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP 	100 	tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_pu
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_FR
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE 	API-SEC-BACKUPRESTORE_AppRegData-0009
+
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-0010
+//! @SYMTestCaseDesc	Install an  SA pacakge with app, take backup , upgrade it with an SP having new application and new loc(Ge) for SA,
+//!			restore Base SA and verify the data.
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0010
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_sp
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0010
+
+
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-0010
+//! @SYMTestCaseDesc	Tests the installation of an SIS file embeds an SP, which embeds a PU, which in turn embeds another SP, that embeds another SP. (SA->SP->PU->SP->SP)
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Install a SIS file that embeds recursively other SIS files with various upgrade combinations.
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! Test Case commented as it leaves stray files and same test case is in twiappregitegration for install which fails with KErrOverWrite
+
+//START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0010
+//RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case06_base
+//RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_case06_base
+//RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case06_sa
+//RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_case06_sa
+
+//RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+//RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+
+//RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+//RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+
+//RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+//RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+
+//RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_case06
+//END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-0010
+
 // Ensure that SWIS shuts down after the above tests to make sure heap checks run
 RUN_TEST_STEP 5 tuiscriptadaptors SwisNotRunning
--- a/installationservices/swi/test/tbackuprestore/scripts/tbackuprestore_armv5.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tbackuprestore/scripts/tbackuprestore_armv5.script	Tue Aug 31 15:21:33 2010 +0300
@@ -19,6 +19,8 @@
 LOAD_SUITE tbackuprestore
 LOAD_SUITE tuiscriptadaptors
 LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+LOAD_SUITE tscr
 
 
 //! @SYMTestCaseID		API-SEC-BACKUPRESTORE-HW-0001
@@ -1741,6 +1743,393 @@
 
 RUN_UTILS DeleteFile C:\Documents\abc*.txt
 
+// Delete the SCR Database file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr_appreginfo.ini db_file
+
+
+//! @SYMTestCaseID		API-SEC-BACKUPRESTORE_AppRegData-HW-0001
+//! @SYMTestCaseDesc		Checks restore of a package containg an applicaion
+//! @SYMTestPriority		High
+//! @SYMTestStatus		3. Released
+//! @SYMTestActions		Installs, backs up, uninstalls, restores and uninstalls a single package containg an applicaion
+//! @SYMTestExpectedResults	Success, clean environment.
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0001
+RUN_TEST_STEP	100	tuiscriptadaptors 	InstallStep	z:\tswi\tbackuprestore\scripts\ini		AppRegData_Install
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		AppRegData
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData
+
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_EN
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_IF
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_spanish
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_RSC
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_case01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0001
+
+
+//! @SYMTestCaseID		API-SEC-BACKUPRESTORE_AppRegData-HW-0002
+//! @SYMTestCaseDesc		Upgrades an existing SA pacakge with an SA having new application and new details for FR and GE through Restore
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data then do backup, uninstall, restore. Now install an upgrade
+//				then do backup, uninstall, restore
+//! @SYMTestExpectedResults	Upgrade through Restore happens successfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0002
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_No_Eclipsing_EN
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_No_Eclipsing_FR
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_No_Eclipsing_RSC
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base02
+
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_WithUpgrade
+
+
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_FR
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0002
+
+//! @SYMTestCaseID		API-SEC-BACKUPRESTORE_AppRegData-HW-0003
+//! @SYMTestCaseDesc		Tests the installation of an SIS file which delivers no files followed by a SA upgrade that delivers an app.
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having no appplication then do backup, uninstall and restore. Now install an upgrade with application
+//				then do backup, uninstall and restore.
+//! @SYMTestExpectedResults	Upgrade through Restore happens successfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0003
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_no_app
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini no_app
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_sa_app
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_sa_app
+
+
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_sa_app
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_no_app
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0003
+
+
+//! @SYMTestCaseID		API-SEC-BACKUPRESTORE_AppRegData-HW-0004
+//! @SYMTestCaseDesc		Tests the installation of an SIS file which delivers some files followed by a SA upgrade that delivers no files.
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having with appplication then do backup, uninstall and restore. Now install an upgrade with no application
+//				then do backup, uninstall and restore.
+//! @SYMTestExpectedResults	Upgrade through Restore happens successfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0004
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_sa_app
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_sa_app
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_no_app
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		swiappregintegration_no_app
+
+
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini no_app
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_no_app
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0004
+
+//! @SYMTestCaseID		API-SEC-BACKUPRESTORE_AppRegData-HW-0005
+//! @SYMTestCaseDesc		Checks restore of a package containg an applicaion
+//! @SYMTestPriority		High
+//! @SYMTestStatus		3. Released
+//! @SYMTestActions		Installs a NR SIS file without an appplication then do backup, uninstall and restore. Now install an SP upgrade(Non NR) with application
+//				then do backup, uninstall and restore.
+//! @SYMTestExpectedResults	Success, clean environment.
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0005
+RUN_TEST_STEP	100	tuiscriptadaptors 	InstallStep	z:\tswi\tbackuprestore\scripts\ini		Install_NonRemovableBase
+
+RUN_TEST_STEP	100	tuiscriptadaptors 	InstallStep	z:\tswi\tbackuprestore\scripts\ini		Upgrade_SP_Over_SA-NR
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		SP_Over_SA-NR
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallAugStep z:\tswi\tbackuprestore\scripts\ini uninstall_SP_Over_SA-NR
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0005
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-HW-0006
+//! @SYMTestCaseDesc	Upgrades an existing SA pacakge with an SP having new application and new details for GE,backup the  package,
+//			Uninstall the package , restore and verify the data.
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0006
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_sp
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0006
+
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-HW-0007
+//! @SYMTestCaseDesc	Upgrades an existing SA pacakge with an SP having new application and new details for GE,backup the  package,
+//			Uninstall the package , restore and verify the data
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0007
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_sp
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_SP_Upgrade
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0007
+
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-HW-0008
+//! @SYMTestCaseDesc	Upgrades an existing SA pacakge with an PU having new application and new details for FR and GE, backup the  package,
+//			Uninstall the package , restore and verify the data
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0008
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_pu
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_FR
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0008
+
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-HW-0009
+//! @SYMTestCaseDesc	Upgrades an existing SA pacakge with an PU having new application and new details for FR and GE, backup the  package,
+//			Uninstall the package , restore and verify the data
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE 	API-SEC-BACKUPRESTORE_AppRegData-HW-0009
+RUN_TEST_STEP   100 	tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP 	100 	tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_pu
+
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		Restore_PU_Upgrade
+
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_FR
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE 	API-SEC-BACKUPRESTORE_AppRegData-HW-0009
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-HW-0010
+//! @SYMTestCaseDesc	Install an  SA pacakge with app, take backup , upgrade it with an SP having new application and new loc(Ge) for SA,
+//!			restore Base SA and verify the data.
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	Restore done  sucessfully
+//! @SYMREQ			PREQ 1835 Phase II
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0010
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_sp
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_Base
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0010
+
+
+//! @SYMTestCaseID	API-SEC-BACKUPRESTORE_AppRegData-HW-0010
+//! @SYMTestCaseDesc	Tests the installation of an SIS file embeds an SP, which embeds a PU, which in turn embeds another SP, that embeds another SP. (SA->SP->PU->SP->SP)
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Install a SIS file that embeds recursively other SIS files with various upgrade combinations.
+//! @SYMTestExpectedResults	File installs sucessfully
+
+//START_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0010
+//RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case06_base
+//RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_case06_base
+//RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case06_sa
+//RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_case06_sa
+
+//RUN_TEST_STEP	100	tbackuprestore		BACKUP		z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+//RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+
+//RUN_TEST_STEP	100	tbackuprestore		UNINSTALL	z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+//RUN_TEST_STEP	100	tbackuprestore		ABSENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+
+//RUN_TEST_STEP	100	tbackuprestore		RESTORE		z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+//RUN_TEST_STEP	100	tbackuprestore		PRESENT		z:\tswi\tbackuprestore\scripts\ini		AppRegData_embedded
+
+//RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_case06
+//END_TESTCASE API-SEC-BACKUPRESTORE_AppRegData-HW-0010
+
 // Ensure that SWIS shuts down after the above tests to make sure heap checks run
 RUN_TEST_STEP 5 tuiscriptadaptors SwisNotRunning
 
Binary file installationservices/swi/test/tdaemon/dummyswidaemon_armv5.exe has changed
Binary file installationservices/swi/test/tdaemon/dummyswidaemon_winscw.exe has changed
--- a/installationservices/swi/test/tdaemon/scripts/tdaemon.ini	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tdaemon/scripts/tdaemon.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -2,6 +2,12 @@
 
 [Daemon]
 
+[AddDriveX]
+drive=X
+
+[AddDriveT]
+drive=T
+
 [InstallSA_on_emmc]
 sis=z:\tswi\tsis\data\emmc_format_base_on_emmc.sis
 script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
@@ -59,80 +65,133 @@
 uid =8000887D
 script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
 
+[CheckX]
+NoOfComponents=0
+FormatDrive=X
+
+[CheckT]
+NoOfComponents=0
+FormatDrive=T
+
+[Check_component_exists_for_SA_after_emmc_format_case1]
+ComponentName=emmc_format_base_on_emmc
+VendorName=Vendor
+NoOfComponents=0
+
 [Check_files_exists_for_SA_after_emmc_format]
-numnonexist = 7
+numnonexist = 6
 nonexist0 = c:\sys\bin\runtestexe_app.exe
 nonexist1 = c:\sys\bin\console_app.exe
 nonexist2 = x:\dummy.txt
-nonexist3 = C:\sys\install\sisregistry\8000887d\00000000.reg
-nonexist4 = C:\sys\install\sisregistry\8000887d\00000000_0000.ctl
-nonexist5 = C:\sys\hash\runtestexe_app.exe
-nonexist6 = C:\sys\hash\console_app.exe
+nonexist3 = C:\sys\install\sisregistry\8000887d\00000000_0000.ctl
+nonexist4 = C:\sys\hash\runtestexe_app.exe
+nonexist5 = C:\sys\hash\console_app.exe
 
 [Check_files_exists_for_SA_after_T_dive_format]
-numexist = 7
+numexist = 6
 exist0 = c:\sys\bin\runtestexe_app.exe
 exist1 = c:\sys\bin\console_app.exe
 exist2 = x:\dummy.txt
-exist3 = C:\sys\install\sisregistry\8000887d\00000000.reg
-exist4 = C:\sys\install\sisregistry\8000887d\00000000_0000.ctl
-exist5 = C:\sys\hash\runtestexe_app.exe
-exist6 = C:\sys\hash\console_app.exe
+exist3 = C:\sys\install\sisregistry\8000887d\00000000_0000.ctl
+exist4 = C:\sys\hash\runtestexe_app.exe
+exist5 = C:\sys\hash\console_app.exe
+
+[Check_component_exists_for_SP_after_emmc_format_case2]
+ComponentName=emmc_format_base_on_c_drive
+VendorName=Vendor
+NoOfComponents=1
 
+[Check_component_exists_for_SP_after_emmc_format_case3]
+ComponentName=emmc_format_base_on_c_drive
+VendorName=Vendor
+NoOfComponents=0
+
+[Check_component_exists_for_SA_after_emmc_format_3]
+ComponentName=emmc_format_base_on_emmc
+VendorName=Vendor
+NoOfComponents=1
 
 [Check_files_exists_for_SP_after_emmc_format]
-numnonexist=5
+numnonexist=4
 nonexist0 = c:\sys\bin\console_app2.exe
 nonexist1 = x:\dummy.txt
-nonexist2 = C:\sys\install\sisregistry\8000887d\00000001.reg
-nonexist3 = C:\sys\install\sisregistry\8000887d\00000001_0000.ctl
-nonexist4 = C:\sys\hash\console_app2.exe
+nonexist2 = C:\sys\install\sisregistry\8000887d\00000001_0000.ctl
+nonexist3 = C:\sys\hash\console_app2.exe
 
 [Check_files_exists_for_Two_SP_after_emmc_format]
-numnonexist = 6
+numnonexist = 5
 nonexist0 = c:\sys\bin\console_app2.exe
 nonexist1 = x:\dummy.txt
 nonexist2 = x:\dummy1.txt
-nonexist3 = C:\sys\install\sisregistry\8000887d\00000001.reg
-nonexist4 = C:\sys\install\sisregistry\8000887d\00000001_0000.ctl
-nonexist5 = C:\sys\hash\console_app2.exe
+nonexist3 = C:\sys\install\sisregistry\8000887d\00000001_0000.ctl
+nonexist4 = C:\sys\hash\console_app2.exe
 
 [Check_marker_files]
 numnonexist = 2
 nonexist0 = c:\private\102020DCE\firstbootmarkernonexistforx
 nonexist1 = x:\sys\install\formatmarker
 
+
+[Check_component_exists_for_SASP_after_emmc_format]
+ComponentName=emmc_format_sp_on_c
+VendorName=Vendor
+NoOfComponents=1
+
 [Check_files_exists_for_SASP_after_emmc_format]
-numnonexist = 11
+numnonexist = 9
 nonexist0 = c:\sys\bin\runtestexe_app.exe
 nonexist1 = c:\sys\bin\console_app.exe
 nonexist2 = x:\dummy.txt
-nonexist3 = C:\sys\install\sisregistry\8000887d\00000000.reg
-nonexist4 = C:\sys\install\sisregistry\8000887d\00000000_0000.ctl
-nonexist5 = C:\sys\hash\runtestexe_app.exe
-nonexist6 = C:\sys\hash\console_app.exe
-nonexist7 = c:\sys\bin\console_app2.exe
-nonexist8 = C:\sys\install\sisregistry\8000887d\00000001.reg
-nonexist9 = C:\sys\install\sisregistry\8000887d\00000001_0000.ctl
-nonexist10 = C:\sys\hash\console_app2.exe
+nonexist3 = C:\sys\install\sisregistry\8000887d\00000000_0000.ctl
+nonexist4 = C:\sys\hash\runtestexe_app.exe
+nonexist5 = C:\sys\hash\console_app.exe
+nonexist6 = c:\sys\bin\console_app2.exe
+nonexist7 = C:\sys\install\sisregistry\8000887d\00000001_0000.ctl
+nonexist8 = C:\sys\hash\console_app2.exe
+
+//case7
+[Check_component_exists_for_SA_on_C_and_T_after_emmc_format]
+ComponentName=emmc_format_base_on_c_and_t
+VendorName=Vendor
+NoOfComponents=1
+
+//case8
+[Check_component_exists_for_SA_on_C_E_and_T_after_emmc_format]
+ComponentName=emmc_format_base_distributed
+VendorName=Vendor
+NoOfComponents=0
+
+//case9
+[Check_component_exists_for_SA_on_C_E_and_T_after_emmc_format_case9]
+ComponentName=emmc_format_base_distributed
+VendorName=Vendor
+NoOfComponents=0
+
+[Check_component_exists_for_SA_on_C_E_and_T_after_emmc_format]
+ComponentName=emmc_format_base_distributed
+VendorName=Vendor
+NoOfComponents=0
+
+[Check_component_exists_for_SA_on_C_and_T_after_emmc_format??]
+ComponentName=emmc_format_base_on_c_and_t_NR
+VendorName=Vendor
+NoOfComponents=1
 
 [Check_files_exists_for_SA_on_C_and_T_after_emmc_format]
-numexist = 7
+numexist = 6
 exist0 = c:\sys\bin\runtestexe_app.exe
 exist1 = c:\sys\bin\console_app.exe
 exist2 = T:\dummy1.txt
-exist3 = C:\sys\install\sisregistry\8000887d\00000000.reg
-exist4 = C:\sys\install\sisregistry\8000887d\00000000_0000.ctl
-exist5 = C:\sys\hash\runtestexe_app.exe
-exist6 = C:\sys\hash\console_app.exe
+exist3 = C:\sys\install\sisregistry\8000887d\00000000_0000.ctl
+exist4 = C:\sys\hash\runtestexe_app.exe
+exist5 = C:\sys\hash\console_app.exe
 
 [Check_files_exists_for_SA_on_C_E_and_T_after_emmc_format]
-numnonexist = 8
+numnonexist = 7
 nonexist0 = c:\sys\bin\runtestexe_app.exe
 nonexist1 = c:\sys\bin\console_app.exe
 nonexist2 = x:\dummy.txt
-nonexist3 = C:\sys\install\sisregistry\8000887d\00000000.reg
-nonexist4 = C:\sys\install\sisregistry\8000887d\00000000_0000.ctl
-nonexist5 = C:\sys\hash\runtestexe_app.exe
-nonexist6 = C:\sys\hash\console_app.exe
-nonexist7 = T:\dummy1.txt
+nonexist3 = C:\sys\install\sisregistry\8000887d\00000000_0000.ctl
+nonexist4 = C:\sys\hash\runtestexe_app.exe
+nonexist5 = C:\sys\hash\console_app.exe
+nonexist6 = T:\dummy1.txt
--- a/installationservices/swi/test/tdaemon/scripts/tdaemon.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tdaemon/scripts/tdaemon.script	Tue Aug 31 15:21:33 2010 +0300
@@ -15,7 +15,6 @@
 //
 
 LOAD_SUITE tdaemon
-LOAD_SUITE tuiscriptadaptors
 //! @file
 //! @SYMTestCaseID 		API-SEC-TDAEMON-0001
 //! @SYMTestStatus 		3. Released
@@ -26,5 +25,3 @@
 RUN_TEST_STEP 100 tdaemon DaemonStep z:\tswi\tdaemon\scripts\tdaemon.ini Daemon
 
 END_TESTCASE API-SEC-TDAEMON-0001
-
-
--- a/installationservices/swi/test/tdaemon/scripts/tdaemon_winscw.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tdaemon/scripts/tdaemon_winscw.script	Tue Aug 31 15:21:33 2010 +0300
@@ -16,17 +16,7 @@
 
 LOAD_SUITE tdaemon
 LOAD_SUITE tuiscriptadaptors
-//! @file
-//! @SYMTestCaseID 		API-SEC-TDAEMON-0001
-//! @SYMTestStatus 		3. Released
-
-START_TESTCASE API-SEC-TDAEMON-0001
-
-RUN_TEST_STEP 100 tdaemon DriveWatcherStep z:\tswi\tdaemon\scripts\tdaemon.ini DriveWatcher
-RUN_TEST_STEP 100 tdaemon DaemonStep z:\tswi\tdaemon\scripts\tdaemon.ini Daemon
-
-END_TESTCASE API-SEC-TDAEMON-0001
-
+LOAD_SUITE tscr -SharedData
 
 //! @SYMTestCaseID 		API-SEC-CR_405-5166-0001
 //! @SYMTestCaseDesc		CR_405-5166: SIS Registry: Cleans the registry entries for the packages installed on emmc i.e 'X' Drive
@@ -37,7 +27,10 @@
 START_TESTCASE API-SEC-CR_405-5166-0001
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSA_on_emmc
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckX
+RUN_TEST_STEP 100 tscr ScrComponentPresentForNameVendor z:\tswi\tdaemon\scripts\tdaemon.ini Check_component_exists_for_SA_after_emmc_format_case1
 RUN_TEST_STEP 100 tuiscriptadaptors MmcCheckFilesStep z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SA_after_emmc_format
 END_TESTCASE API-SEC-CR_405-5166-0001
 
@@ -52,7 +45,10 @@
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSA_on_c
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSP_on_c_and_emmc
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckX
+RUN_TEST_STEP 100 tscr ScrComponentPresentForNameVendor z:\tswi\tdaemon\scripts\tdaemon.ini Check_component_exists_for_SP_after_emmc_format_case2
 RUN_TEST_STEP 100 tuiscriptadaptors MmcCheckFilesStep z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SP_after_emmc_format
 RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Install
 END_TESTCASE API-SEC-CR_405-5166-0002
@@ -68,7 +64,10 @@
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSA_on_c
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallPU_on_emmc
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckX
+RUN_TEST_STEP 100 tscr ScrComponentPresentForNameVendor z:\tswi\tdaemon\scripts\tdaemon.ini Check_component_exists_for_SP_after_emmc_format_case3
 RUN_TEST_STEP 100 tuiscriptadaptors MmcCheckFilesStep z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SA_after_emmc_format
 RUN_TEST_STEP_RESULT -1 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Install
 END_TESTCASE API-SEC-CR_405-5166-0003
@@ -84,7 +83,10 @@
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSP_on_emmc
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSP_on_c_and_emmc
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckX
+RUN_TEST_STEP 100 tscr ScrComponentPresentForNameVendor z:\tswi\tdaemon\scripts\tdaemon.ini Check_component_exists_for_SP_after_emmc_format
 RUN_TEST_STEP 100 tuiscriptadaptors MmcCheckFilesStep z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_Two_SP_after_emmc_format
 RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Install
 END_TESTCASE API-SEC-CR_405-5166-0004
@@ -126,7 +128,10 @@
 START_TESTCASE API-SEC-CR_405-5166-0007
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSA_on_c_and_T
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckX
+RUN_TEST_STEP 100 tscr ScrComponentPresentForNameVendor z:\tswi\tdaemon\scripts\tdaemon.ini Check_component_exists_for_SA_on_C_and_T_after_emmc_format
 RUN_TEST_STEP 100 tuiscriptadaptors MmcCheckFilesStep z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SA_on_C_and_T_after_emmc_format
 RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Install
 END_TESTCASE API-SEC-CR_405-5166-0007
@@ -141,8 +146,14 @@
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSA_on_distributed_drives
 RUN_TEST_STEP 100 tuiscriptadaptors MmcUnMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini T
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 2000
 RUN_TEST_STEP 100 tuiscriptadaptors MmcMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini T
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveT
+DELAY 2000
+DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckX
+RUN_TEST_STEP 100 tscr ScrComponentPresentForNameVendor z:\tswi\tdaemon\scripts\tdaemon.ini Check_component_exists_for_SA_on_C_E_and_T_after_emmc_format
 RUN_TEST_STEP 100 tuiscriptadaptors MmcCheckFilesStep z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SA_on_C_E_and_T_after_emmc_format
 RUN_TEST_STEP_RESULT -1 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Install
 END_TESTCASE API-SEC-CR_405-5166-0008
@@ -156,7 +167,10 @@
 START_TESTCASE API-SEC-CR_405-5166-0009
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSA_on_distributed_drives
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckX
+RUN_TEST_STEP 100 tscr ScrComponentPresentForNameVendor z:\tswi\tdaemon\scripts\tdaemon.ini Check_component_exists_for_SA_on_C_E_and_T_after_emmc_format_case9
 RUN_TEST_STEP 100 tuiscriptadaptors MmcCheckFilesStep z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SA_on_C_E_and_T_after_emmc_format
 RUN_TEST_STEP_RESULT -1 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Install
 END_TESTCASE API-SEC-CR_405-5166-0009
@@ -170,7 +184,10 @@
 START_TESTCASE API-SEC-CR_405-5166-0010
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSA_on_emmc
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini T
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveT
 DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckT
+RUN_TEST_STEP 100 tscr ScrComponentPresentForNameVendor z:\tswi\tdaemon\scripts\tdaemon.ini Check_component_exists_for_SA_after_emmc_format_3
 RUN_TEST_STEP 100 tuiscriptadaptors MmcCheckFilesStep z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SA_after_T_dive_format
 RUN_TEST_STEP tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Install
 END_TESTCASE API-SEC-CR_405-5166-0010
@@ -184,7 +201,10 @@
 START_TESTCASE API-SEC-CR_405-5166-0011
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSANR_on_distributed_drives
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckX
+RUN_TEST_STEP 100 tscr ScrComponentPresentForNameVendor z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SA_on_C_E_and_T_after_emmc_format
 RUN_TEST_STEP 100 tuiscriptadaptors MmcCheckFilesStep z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SA_on_C_E_and_T_after_emmc_format
 RUN_TEST_STEP_RESULT -1 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Install
 END_TESTCASE API-SEC-CR_405-5166-0011
@@ -198,10 +218,15 @@
 START_TESTCASE API-SEC-CR_405-5166-0012
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSANR_on_c_and_T
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckX
+RUN_TEST_STEP 100 tscr ScrComponentPresentForNameVendor z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SA_on_C_and_T_after_emmc_format
 RUN_TEST_STEP 100 tuiscriptadaptors MmcCheckFilesStep z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SA_on_C_and_T_after_emmc_format
 RUN_TEST_STEP_RESULT -5 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Install
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini T
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveT
+DELAY 2000
 RUN_TEST_STEP_RESULT -1 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Install
 END_TESTCASE API-SEC-CR_405-5166-0012
 
@@ -214,7 +239,9 @@
 START_TESTCASE API-SEC-CR_405-5166-0013
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallEclipsingSA_on_c_and_emmc
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckX
 RUN_TEST_STEP_RESULT -5 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Eclipsing
 END_TESTCASE API-SEC-CR_405-5166-0013
 
@@ -227,21 +254,9 @@
 START_TESTCASE API-SEC-CR_405-5166-0014
 RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallEclipsingPU_on_c_and_emmc
 RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 2000
+RUN_TEST_STEP 100 tscr ScrComponentOnEMMC z:\tswi\tdaemon\scripts\tdaemon.ini CheckX
 RUN_TEST_STEP_RESULT -5 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Eclipsing
 END_TESTCASE API-SEC-CR_405-5166-0014
 
-//! @SYMTestCaseID 		API-SEC-CR_405-5166-0008
-//! @SYMTestCaseDesc		CR_405-5166: SIS Registry: Cleans the registry entries for the packages installed on emmc i.e 'X' Drive
-//! @SYMDEF			CR_405-5166
-//! @SYMTestActions		Install sis file SA on emmc drive and then upgrade it with SP both on c drive and format emmc.
-//! @SYMTestExpectedResults	Registry entries for the complete package gets cleaned
-
-//START_TESTCASE API-SEC-CR_405-5166-0008
-//RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSA_on_emmc
-//RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tdaemon\scripts\tdaemon.ini InstallSP_on_c
-//RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
-//RUN_TEST_STEP 100 tuiscriptadaptors MmcCheckFilesStep z:\tswi\tdaemon\scripts\tdaemon.ini Check_files_exists_for_SASP_after_emmc_format
-//RUN_TEST_STEP_RESULT -1 100 tuiscriptadaptors UninstallStep  z:\tswi\tdaemon\scripts\tdaemon.ini u_Install
-//END_TESTCASE API-SEC-CR_405-5166-0008
-
--- a/installationservices/swi/test/tdaemon/steps/daemonstep.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tdaemon/steps/daemonstep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -21,6 +21,7 @@
 */
 
 #include "daemonstep.h"
+#include "sisregistrywritablesession.h"
 
 namespace Swi
 {
@@ -115,6 +116,43 @@
 	return EPass;
 	}
 
+//CAddDriveStep
+CAddDriveStep::CAddDriveStep()
+    {
+    }
+
+CAddDriveStep::~CAddDriveStep()
+    {
+    }
+
+TVerdict CAddDriveStep::runTestStepL(TBool /*aOomTest*/)
+    {
+    TPtrC str;
+    TInt drive(0);
+    if (!GetStringFromConfig(ConfigSection(), _L("drive"), str))
+        {
+        ERR_PRINTF1(_L("Missing drive setting"));
+        SetTestStepResult(EFail);
+        }
+    else
+        {
+        RFs fs;
+        fs.Connect();
+        
+        User::LeaveIfError(fs.CharToDrive(str[0], drive));
+        //iDriveChar = str[0];
+        fs.Close();
+        }
+    RSisRegistryWritableSession registrySession;
+            
+    User::LeaveIfError(registrySession.Connect());
+    CleanupClosePushL(registrySession);
+    registrySession.AddDriveL(drive);
+
+    CleanupStack::PopAndDestroy(&registrySession);    
+
+    return EPass;
+    }
 } // namespace Swi::Test
 
 } //namespace Swi
--- a/installationservices/swi/test/tdaemon/steps/daemonstep.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tdaemon/steps/daemonstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -37,6 +37,7 @@
 namespace Test
 {
 _LIT(KDaemonStep,"DaemonStep");
+_LIT(KAddDriveStep,"AddDriveStep");
 
 class CDaemonStep : public CDaemonTestStep, public MDaemonBehaviour
 	{
@@ -55,6 +56,16 @@
 	CDaemon* iDaemon;
 	};
 
+class CAddDriveStep : public CDaemonTestStep
+    {
+public:
+    CAddDriveStep();
+    ~CAddDriveStep();
+
+    virtual TVerdict runTestStepL(TBool aOomTest);
+    
+    };
+
 } // namespace Swi::Test
 
 } //namespace Swi
--- a/installationservices/swi/test/tdaemon/tdaemon.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tdaemon/tdaemon.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -62,7 +62,8 @@
 		return new CWatcherStep();
 	else if (aStepName == KDaemonStep)
 		return new CDaemonStep();
-	
+	else if (aStepName == KAddDriveStep)
+	    return new CAddDriveStep();
 	
 	return NULL;
 	}
--- a/installationservices/swi/test/testexes/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -22,6 +22,7 @@
 */
 
 #include "tpropagation/bld.inf"
+#include "tswiappregintegration/bld.inf"
 
 PRJ_TESTMMPFILES
 createprivatefile.mmp
@@ -142,6 +143,15 @@
 adornedfilenametestingdll_v10_1.mmp
 adornedfilenametestingdll_v10_2.mmp
 safemodetest.mmp
-
 non_stubbed_exe.mmp
 
+interpretsis_testcase/interpretsis_testcase_01.mmp
+interpretsis_testcase/interpretsis_testcase_02.mmp
+interpretsis_testcase/interpretsis_testcase_03.mmp
+interpretsis_testcase/interpretsis_testcase_04.mmp
+interpretsis_testcase_05/interpretsis_testcase_05.mmp
+interpretsis_testcase_06/interpretsis_testcase_06.mmp
+interpretsis_testcase_07/interpretsis_testcase_07.mmp
+interpretsis_testcase_08/interpretsis_testcase_08.mmp
+interpretsis_testcase_09/interpretsis_testcase_09.mmp
+interpretsis_testcase_10/interpretsis_testcase_10.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/01/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for UK
+//
+
+rls_string STRING_r_example_short_caption "HW"
+rls_string STRING_r_example_caption "helloworld"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase01.mbm"
+rls_string STRING_r_example_iconfile1 "z:\\resource\\apps\\interpretsis_testcase01.mbm"
+rls_string STRING_r_example_iconfile2 "z:\\resource\\apps\\interpretsis_testcase01.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123121_caption_eng"
+rls_string STRING_r_view_268123124_caption "view_268123122_caption_eng"
+rls_long Long_NumberOfIcon1 2
+rls_long Long_NumberOfIcon2 1
+rls_long Long_NumberOfIcon3 2
+rls_long Long_uid1 268123121
+rls_long Long_uid2 268123122
+rls_long Long_screenmode1 0x00
+rls_long Long_screenmode2 0x01
\ No newline at end of file
Binary file installationservices/swi/test/testexes/interpretsis_testcase/01/icon24.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/03/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise03strings
+// Strings localised for German
+//
+
+rls_string STRING_r_example_short_caption "Hallo"
+//rls_string STRING_r_example_caption "Hallo_Welt"
+//rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase03.mbm"
+rls_string STRING_r_example_caption ""
+rls_string STRING_r_example_iconfile ""
+rls_string STRING_r_example_iconfile1 "z:\\resource\\apps\\interpretsis_testcase03.mbm"
+rls_string STRING_r_example_iconfile2 "z:\\resource\\apps\\interpretsis_testcase03.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_ger"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_ger"
+rls_long Long_NumberOfIcon1 0
+rls_long Long_NumberOfIcon2 3
+rls_long Long_NumberOfIcon3 4
+rls_long Long_uid1 268123123
+rls_long Long_uid2 268123124
+rls_long Long_screenmode1 0x03
+rls_long Long_screenmode2 0x04
\ No newline at end of file
Binary file installationservices/swi/test/testexes/interpretsis_testcase/03/icon24.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/04/04-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for Spanish
+//
+
+rls_string STRING_r_example_short_caption "HW_Spain"
+//rls_string STRING_r_example_caption "hello_spain"
+//rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase04.mbm"
+rls_string STRING_r_example_caption ""
+rls_string STRING_r_example_iconfile ""
+rls_string STRING_r_example_iconfile1 "z:\\resource\\apps\\interpretsis_testcase04.mbm"
+rls_string STRING_r_example_iconfile2 "z:\\resource\\apps\\interpretsis_testcase04.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123125_caption_spn"
+rls_string STRING_r_view_268123124_caption "view_268123126_caption_spn"
+rls_long Long_NumberOfIcon1 2
+rls_long Long_NumberOfIcon2 5
+rls_long Long_NumberOfIcon3 6
+rls_long Long_uid1 268123125
+rls_long Long_uid2 268123126
+rls_long Long_screenmode1 0x05
+rls_long Long_screenmode2 0x06
Binary file installationservices/swi/test/testexes/interpretsis_testcase/04/icon24.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/24/24-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for French International
+//
+
+rls_string STRING_r_example_short_caption "HW_FR"
+rls_string STRING_r_example_caption "hello_French"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase24.mbm"
+rls_string STRING_r_example_iconfile1 "z:\\resource\\apps\\interpretsis_testcase24.mbm"
+rls_string STRING_r_example_iconfile2 "z:\\resource\\apps\\interpretsis_testcase24.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123127_caption_fr"
+rls_string STRING_r_view_268123124_caption "view_268123128_caption_fr"
+rls_long Long_NumberOfIcon1 2
+rls_long Long_NumberOfIcon2 7
+rls_long Long_NumberOfIcon3 8
+rls_long Long_uid1 268123127
+rls_long Long_uid2 268123128
+rls_long Long_screenmode1 0x07
+rls_long Long_screenmode2 0x08
Binary file installationservices/swi/test/testexes/interpretsis_testcase/24/icon24.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,117 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// HelloWorld 
+// The class definitions for the simple example application
+// containing a single view with the text "Hello World !" drawn
+// on it.
+// The class definitions are:
+// CExampleApplication 
+// CExampleAppUi
+// CExampleAppView
+// CExampleDocument
+//
+
+#ifndef __HELLOWORLD_H
+#define __HELLOWORLD_H
+
+#include <coeccntx.h>
+
+#include <eikenv.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikmenup.h>
+
+#include <techview/eikon.hrh>
+
+#include <interpretsis_testcase_01.rsg>
+#include "interpretsis_testcase.hrh"
+
+
+
+//
+//
+// CExampleApplication
+//
+//
+
+class CExampleApplication : public CEikApplication
+	{
+private: 
+	           // Inherited from class CApaApplication
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+	};
+
+//
+//
+// CExampleAppView
+//
+//
+class CExampleAppView : public CCoeControl
+    {
+public:
+	static CExampleAppView* NewL(const TRect& aRect);
+	CExampleAppView();
+	~CExampleAppView();
+    void ConstructL(const TRect& aRect);
+
+private:
+	           // Inherited from CCoeControl
+	void Draw(const TRect& /*aRect*/) const;
+
+private:
+	HBufC*  iExampleText;
+    };
+
+
+//
+//
+// CExampleAppUi
+//
+//
+class CExampleAppUi : public CEikAppUi
+    {
+public:
+    void ConstructL();
+	~CExampleAppUi();
+
+private:
+              // Inherirted from class CEikAppUi
+	void HandleCommandL(TInt aCommand);
+
+private:
+	CCoeControl* iAppView;
+	};
+
+
+//
+//
+// CExampleDocument
+//
+//
+class CExampleDocument : public CEikDocument
+	{
+public:
+	static CExampleDocument* NewL(CEikApplication& aApp);
+	CExampleDocument(CEikApplication& aApp);
+	void ConstructL();
+private: 
+	           // Inherited from CEikDocument
+	CEikAppUi* CreateAppUiL();
+	};
+
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase.hrh	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+enum TExampleMenuCommands
+	{
+	EExampleItem0 = 200,
+	EExampleItem1,
+	EExampleItem2
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_01.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,78 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// using relative paths for sourcepath and user includes
+//
+
+TARGET        interpretsis_testcase_01.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800005A
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        interpretsis_testcase_Main.cpp
+SOURCE        interpretsis_testcase_Application.cpp
+SOURCE        interpretsis_testcase_Document.cpp
+SOURCE        interpretsis_testcase_AppUi.cpp
+SOURCE        interpretsis_testcase_AppView.cpp
+USERINCLUDE   .
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE /epoc32/include/platform/app/techview
+SYSTEMINCLUDE /epoc32/include/platform/app
+
+START RESOURCE	interpretsis_testcase_01.rss
+HEADER
+TARGETPATH		/resource/apps
+LANG 01 03 04 24	// Build UK and German language versions of resources
+END
+
+START RESOURCE	interpretsis_testcase_01_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+START RESOURCE	interpretsis_testcase_dup_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+// Icons for UK language version
+START BITMAP	interpretsis_testcase01.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		01
+SOURCE			c8,1 icon24.BMP
+END
+
+// Icons for German language version
+START BITMAP	interpretsis_testcase03.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		03
+SOURCE			c8,1 icon24.BMP
+END
+
+// Icons for Spanish language version
+START BITMAP	interpretsis_testcase04.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		04
+SOURCE			c8,1 icon24.BMP
+END
+
+// Icons for French International language version
+START BITMAP	interpretsis_testcase24.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		24
+SOURCE			c8,1 icon24.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_01.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,81 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME HEWO
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+#include "interpretsis_testcase.hrh"
+RESOURCE RSS_SIGNATURE { }
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#elif defined LANGUAGE_04  // if language code is for Spanish
+ #include "04/04-strings.rls"
+#elif defined LANGUAGE_24  // if language code is for French International
+ #include "24/24-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+	    caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+	            number_of_icons = Long_NumberOfIcon1;
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        };                          
+	    //
+	    view_list =
+	        {
+	        VIEW_DATA
+	            {
+				uid = Long_uid1;
+				screen_mode = Long_screenmode1;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123123_caption;
+						number_of_icons = Long_NumberOfIcon2;
+						icon_file = STRING_r_example_iconfile1;
+	                    }
+	                };                          
+	            },
+	        VIEW_DATA
+	            {
+				uid = Long_uid2;
+	            screen_mode = Long_screenmode2;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123124_caption;
+						number_of_icons = Long_NumberOfIcon3;
+	                    icon_file = STRING_r_example_iconfile2;
+	                    }
+	                };
+	            }
+	        };
+	    group_name = "Tapash_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_01_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,95 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+#include <interpretsis_testcase_01.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x00000ABC // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "interpretsis_testcase";
+	localisable_resource_file = "\\resource\\apps\\interpretsis_testcase_01";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_02.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,53 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// using relative paths for sourcepath and user includes
+//
+
+TARGET        interpretsis_testcase_02.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800005B
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        interpretsis_testcase_Main.cpp
+SOURCE        interpretsis_testcase_Application.cpp
+SOURCE        interpretsis_testcase_Document.cpp
+SOURCE        interpretsis_testcase_AppUi.cpp
+SOURCE        interpretsis_testcase_AppView.cpp
+USERINCLUDE   .
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE /epoc32/include/platform/app/techview
+SYSTEMINCLUDE /epoc32/include/platform/app
+
+START RESOURCE	interpretsis_testcase_02.rss
+HEADER
+TARGETPATH		/resource/apps
+LANG 03			// Build German language versions of resources
+END
+
+START RESOURCE	interpretsis_testcase_02_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+// Icons for German language version
+START BITMAP	interpretsis_testcase03_02.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		03
+SOURCE			c8,1 icon24.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_02.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,81 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME HEWO
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+#include "interpretsis_testcase.hrh"
+RESOURCE RSS_SIGNATURE { }
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#elif defined LANGUAGE_04  // if language code is for Spanish
+ #include "04/04-strings.rls"
+#elif defined LANGUAGE_24  // if language code is for French International
+ #include "24/24-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+		caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+				number_of_icons = Long_NumberOfIcon1;
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        }; 
+		//
+	    view_list =
+	        {
+	        VIEW_DATA
+	            {
+				uid = Long_uid1;
+				screen_mode = Long_screenmode1;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123123_caption;
+						number_of_icons = Long_NumberOfIcon2;
+						icon_file = STRING_r_example_iconfile1;
+	                    }
+	                };                          
+	            },
+	        VIEW_DATA
+	            {
+				uid = Long_uid2;
+	            screen_mode = Long_screenmode2;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123124_caption;
+						number_of_icons = Long_NumberOfIcon3;
+	                    icon_file = STRING_r_example_iconfile2;
+	                    }
+	                };
+	            }
+	        };
+	    group_name = "Tapash_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_02_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,95 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+#include <interpretsis_testcase_02.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x00000ABE // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "interpretsis_testcase_02";
+	localisable_resource_file = "\\resource\\apps\\interpretsis_testcase_02";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_03.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,53 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// using relative paths for sourcepath and user includes
+//
+
+TARGET        interpretsis_testcase_03.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800005C
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        interpretsis_testcase_Main.cpp
+SOURCE        interpretsis_testcase_Application.cpp
+SOURCE        interpretsis_testcase_Document.cpp
+SOURCE        interpretsis_testcase_AppUi.cpp
+SOURCE        interpretsis_testcase_AppView.cpp
+USERINCLUDE   .
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE /epoc32/include/platform/app/techview
+SYSTEMINCLUDE /epoc32/include/platform/app
+
+START RESOURCE	interpretsis_testcase_03.rss
+HEADER
+TARGETPATH		/resource/apps
+LANG 04			// Build Spanish language versions of resources
+END
+
+START RESOURCE	interpretsis_testcase_03_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+// Icons for Spanish language version
+START BITMAP	interpretsis_testcase04_03.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		04
+SOURCE			c8,1 icon24.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_03.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,51 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME HEWO
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+#include "interpretsis_testcase.hrh"
+RESOURCE RSS_SIGNATURE { }
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#elif defined LANGUAGE_04  // if language code is for Spanish
+ #include "04/04-strings.rls"
+#elif defined LANGUAGE_24  // if language code is for French International
+ #include "24/24-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+    //
+		caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+				number_of_icons = Long_NumberOfIcon1;
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        }; 
+
+	    group_name = "Tapash_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_03_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,95 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+#include <interpretsis_testcase_03.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x00000ABF // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "interpretsis_testcase_03";
+	localisable_resource_file = "\\resource\\apps\\interpretsis_testcase_03";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_04.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,53 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// using relative paths for sourcepath and user includes
+//
+
+TARGET        interpretsis_testcase_04.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800005D
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        interpretsis_testcase_Main.cpp
+SOURCE        interpretsis_testcase_Application.cpp
+SOURCE        interpretsis_testcase_Document.cpp
+SOURCE        interpretsis_testcase_AppUi.cpp
+SOURCE        interpretsis_testcase_AppView.cpp
+USERINCLUDE   .
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE /epoc32/include/platform/app/techview
+SYSTEMINCLUDE /epoc32/include/platform/app
+
+START RESOURCE	interpretsis_testcase_04.rss
+HEADER
+TARGETPATH		/resource/apps
+LANG 24			// Build International French language versions of resources
+END
+
+START RESOURCE	interpretsis_testcase_04_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+// Icons for French International language version
+START BITMAP	interpretsis_testcase24_04.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		24
+SOURCE			c8,1 icon24.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_04.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME HEWO
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+#include "interpretsis_testcase.hrh"
+RESOURCE RSS_SIGNATURE { }
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#elif defined LANGUAGE_04  // if language code is for Spanish
+ #include "04/04-strings.rls"
+#elif defined LANGUAGE_24  // if language code is for French International
+ #include "24/24-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+	    caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+				number_of_icons = Long_NumberOfIcon1;
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        };                          
+	    //
+	    group_name = "Tapash_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_04_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,95 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+#include <interpretsis_testcase_04.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x00000AC0 // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "interpretsis_testcase_04";
+	localisable_resource_file = "\\resource\\apps\\interpretsis_testcase_04";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_AppUi.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,80 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// HelloWorld_CExampleAppUi.cpp
+// Source file for the implementation of the 
+// application UI class - CExampleAppUi
+//
+
+#include "interpretsis_testcase.h"
+
+//             The second phase constructor of the application UI class.
+//             The application UI creates and owns the one and only view.
+// 
+void CExampleAppUi::ConstructL()
+    {
+	           // BaseConstructL() completes the UI framework's
+	           // construction of the App UI.
+    BaseConstructL();
+	           // Create the single application view in which to
+	           // draw the text "Hello World!", passing into it
+	           // the rectangle available to it.
+	iAppView = CExampleAppView::NewL(ClientRect());
+	}
+
+
+//             The app Ui owns the two views and is. 
+//             therefore, responsible for destroying them
+//
+CExampleAppUi::~CExampleAppUi()
+	{
+	delete iAppView;
+	}
+
+
+//             Called by the UI framework when a command has been issued.
+//             In this example, a command can originate through a 
+//             hot-key press or by selection of a menu item.
+//             The command Ids are defined in the .hrh file
+//             and are 'connected' to the hot-key and menu item in the
+//             resource file.
+//             Note that the EEikCmdExit is defined by the UI
+//             framework and is pulled in by including eikon.hrh
+//
+void CExampleAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		      // Just issue simple info messages to show that
+		      // the menu items have been selected
+	case EExampleItem0:
+		//iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM0);
+		break;
+
+	
+	case EExampleItem1:
+	//	iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM1);
+		break;
+	
+	case EExampleItem2:
+	//	iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM2);
+		break;
+               // Exit the application. The call is
+		       // implemented by the UI framework.
+
+	case EEikCmdExit: 
+		Exit();
+		break;
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_AppView.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,105 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// HelloWorld_CExampleAppView.cpp
+// Source file for the implementation of the 
+// application view class - CExampleAppView
+//
+
+#include "interpretsis_testcase.h"
+
+//
+//             Constructor for the view.
+//
+CExampleAppView::CExampleAppView()
+	{
+	}
+
+
+//             Static NewL() function to start the standard two
+//             phase construction.
+//
+CExampleAppView* CExampleAppView::NewL(const TRect& aRect)
+	{
+	CExampleAppView* self = new(ELeave) CExampleAppView();
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect);
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+//
+//             Destructor for the view.
+//
+CExampleAppView::~CExampleAppView()
+	{
+	delete iExampleText;
+	}
+
+
+//             Second phase construction.
+//
+void CExampleAppView::ConstructL(const TRect& aRect)
+    {
+			   // Fetch the text from the resource file.
+	//iExampleText = iEikonEnv->AllocReadResourceL(R_EXAMPLE_TEXT_HELLO);
+	           // Control is a window owning control
+	CreateWindowL();
+	           // Extent of the control. This is
+	           // the whole rectangle available to application.
+	           // The rectangle is passed to us from the application UI.
+	SetRect(aRect);
+			   // At this stage, the control is ready to draw so
+	           // we tell the UI framework by activating it.
+	ActivateL();
+	}
+
+
+//             Drawing the view - in this example, 
+//             consists of drawing a simple outline rectangle
+//             and then drawing the text in the middle.
+//             We use the Normal font supplied by the UI.
+//
+//             In this example, we don't use the redraw
+//             region because it's easier to redraw to
+//             the whole client area.
+//
+void CExampleAppView::Draw(const TRect& /*aRect*/) const
+	{
+               // Window graphics context
+	CWindowGc& gc = SystemGc();
+	           // Area in which we shall draw
+	TRect      drawRect = Rect();
+			   // Font used for drawing text
+	const CFont*     fontUsed;
+	
+	           // Start with a clear screen
+	gc.Clear();
+			   // Draw an outline rectangle (the default pen
+	           // and brush styles ensure this) slightly
+	           // smaller than the drawing area.
+	drawRect.Shrink(10,10);		   	
+	gc.DrawRect(drawRect);
+               // Use the title font supplied by the UI
+	fontUsed = iEikonEnv->TitleFont();
+	gc.UseFont(fontUsed);
+			   // Draw the text in the middle of the rectangle.
+	TInt   baselineOffset=(drawRect.Height() - fontUsed->HeightInPixels())/2; 
+	gc.DrawText(*iExampleText,drawRect,baselineOffset,CGraphicsContext::ECenter, 0);
+               // Finished using the font
+	gc.DiscardFont();
+	}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_Application.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// HelloWorld_CExampleApplication.cpp
+// Source file for the implementation of the
+// application class - CExampleApplication
+//
+
+#include "interpretsis_testcase.h"
+
+const TUid KUidHelloWorld = { 0xE800005A };
+
+//             The function is called by the UI framework to ask for the
+//             application's UID. The returned value is defined by the
+//             constant KUidHelloWorlde and must match the second value
+//             defined in the project definition file.
+//
+TUid CExampleApplication::AppDllUid() const
+	{
+	return KUidHelloWorld;
+	}
+
+//             This function is called by the UI framework at
+//             application start-up. It creates an instance of the
+//             document class.
+//
+CApaDocument* CExampleApplication::CreateDocumentL()
+	{
+	return new (ELeave) CExampleDocument(*this);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_Document.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,39 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// HelloWorld_CExampleDocument.cpp
+// Source file for the implementation of the 
+// document class - CExampleDocument
+//
+
+#include "interpretsis_testcase.h"
+
+//             The constructor of the document class just passes the
+//             supplied reference to the constructor initialisation list.
+//             The document has no real work to do in this application.
+//
+CExampleDocument::CExampleDocument(CEikApplication& aApp)
+		: CEikDocument(aApp)
+	{
+	}
+
+
+//             This is called by the UI framework as soon as the 
+//             document has been created. It creates an instance
+//             of the ApplicationUI. The Application UI class is
+//             an instance of a CEikAppUi derived class.
+//
+CEikAppUi* CExampleDocument::CreateAppUiL()
+	{
+    return new(ELeave) CExampleAppUi;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_Main.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// HelloWorld 
+// The example is a simple application containing a single view with
+// the text "Hello World !" drawn on it.
+// The example includes code for displaying a very simple menu.
+// This source file contains the single exported function required by 
+// all UI applications.
+//
+
+
+#include "interpretsis_testcase.h"
+
+//             The entry point for the application code. It creates
+//             an instance of the CApaApplication derived
+//             class, CExampleApplication.
+//
+
+
+
+#include <eikstart.h>
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CExampleApplication;
+	}
+	
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+	
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase/interpretsis_testcase_dup_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,96 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+#include <interpretsis_testcase_01.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+//UID3 0xE800005A // application UID
+UID3 0x00000ABD // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "interpretsis_testcase_dup";
+	//localisable_resource_file = "\\resource\\apps\\interpretsis_testcase_01";
+	//localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_05/01/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for UK
+//
+
+rls_string STRING_r_example_short_caption "HW"
+rls_string STRING_r_example_caption "helloworld"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase01.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_eng"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_eng"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_05/03/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise03strings
+// Strings localised for German
+//
+
+rls_string STRING_r_example_short_caption "Hallo"
+rls_string STRING_r_example_caption "Hallo_Welt"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase03.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_ger"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_ger"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_05/interpretsis_testcase_05.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,61 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// using relative paths for sourcepath and user includes
+//
+
+TARGET        interpretsis_testcase_05.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800006C
+VENDORID 	  0x70000002
+SOURCEPATH    ../interpretsis_testcase/
+SOURCE        interpretsis_testcase_Main.cpp
+SOURCE        interpretsis_testcase_Application.cpp
+SOURCE        interpretsis_testcase_Document.cpp
+SOURCE        interpretsis_testcase_AppUi.cpp
+SOURCE        interpretsis_testcase_AppView.cpp
+USERINCLUDE   .
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE /epoc32/include/platform/app/techview
+SYSTEMINCLUDE /epoc32/include/platform/app
+SOURCEPATH    .
+
+START RESOURCE	interpretsis_testcase_05.rss
+HEADER
+TARGETPATH		/resource/apps
+LANG 01 03	// Build UK and German language versions of resources
+END
+
+START RESOURCE	interpretsis_testcase_05_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+// Icons for UK language version
+START BITMAP	interpretsis_testcase01_05.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/01
+SOURCE			c8,1 icon24.BMP
+END
+
+// Icons for German language version
+START BITMAP	interpretsis_testcase03_05.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/03
+SOURCE			c8,1 icon24.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_05/interpretsis_testcase_05.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,77 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME HEWO
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+#include "../interpretsis_testcase/interpretsis_testcase.hrh"
+RESOURCE RSS_SIGNATURE { }
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+	    caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+	            number_of_icons = 2; // each icon must be a bitmap/mask pair
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        };                          
+	    //
+	    view_list =
+	        {
+	        VIEW_DATA
+	            {
+	            uid = 268123123;
+	            screen_mode = 0x00;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123123_caption;
+	                    number_of_icons = 5; // each icon must be a bitmap/mask pair
+	                    icon_file = "z:\\resource\\apps\\interpretsis_testcase01.mbm";
+	                    }
+	                };                          
+	            },
+	        VIEW_DATA
+	            {
+	            uid = 268123124;
+	            screen_mode = 0x01;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123124_caption;
+	                    number_of_icons = 6; // each icon must be a bitmap/mask pair
+	                    icon_file = "\\resource\\apps\\interpretsis_testcase01.mbm";
+	                    }
+	                };
+	            }
+	        };
+	    group_name = "Tapash_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_05/interpretsis_testcase_05_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,95 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+#include <interpretsis_testcase_05.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x00000AC1 // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "interpretsis_testcase";
+	localisable_resource_file = "\\resource\\apps\\interpretsis_testcase_05";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_06/01/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for UK
+//
+
+rls_string STRING_r_example_short_caption "HW"
+rls_string STRING_r_example_caption "helloworld"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase01.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_eng"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_eng"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_06/03/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise03strings
+// Strings localised for German
+//
+
+rls_string STRING_r_example_short_caption "Hallo"
+rls_string STRING_r_example_caption "Hallo_Welt"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase03.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_ger"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_ger"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_06/interpretsis_testcase_06.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// using relative paths for sourcepath and user includes
+//
+
+TARGET        interpretsis_testcase_06.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800006B
+VENDORID 	  0x70000002
+SOURCEPATH    ../interpretsis_testcase/
+SOURCE        interpretsis_testcase_Main.cpp
+SOURCE        interpretsis_testcase_Application.cpp
+SOURCE        interpretsis_testcase_Document.cpp
+SOURCE        interpretsis_testcase_AppUi.cpp
+SOURCE        interpretsis_testcase_AppView.cpp
+USERINCLUDE   .
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE /epoc32/include/platform/app/techview
+SYSTEMINCLUDE /epoc32/include/platform/app
+SOURCEPATH    .
+
+START RESOURCE	interpretsis_testcase_06.rss
+HEADER
+TARGETPATH		/resource/apps
+LANG 01 03	// Build UK and German language versions of resources
+END
+
+START RESOURCE	interpretsis_testcase_06_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+// Icons for UK language version
+START BITMAP	interpretsis_testcase01_06.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/01
+SOURCE			c8,1 icon24.BMP
+END
+
+// Icons for German language version
+START BITMAP	interpretsis_testcase03_06.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/03
+SOURCE			c8,1 icon24.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_06/interpretsis_testcase_06.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,77 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME HEWO
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+#include "../interpretsis_testcase/interpretsis_testcase.hrh"
+RESOURCE RSS_SIGNATURE { }
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+	    caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+	            number_of_icons = 2; // each icon must be a bitmap/mask pair
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        };                          
+	    //
+	    view_list =
+	        {
+	        VIEW_DATA
+	            {
+	            uid = 268123123;
+	            screen_mode = 0x00;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123123_caption;
+	                    number_of_icons = 5; // each icon must be a bitmap/mask pair
+	                    icon_file = "z:\\resource\\apps\\interpretsis_testcase01.mbm";
+	                    }
+	                };                          
+	            },
+	        VIEW_DATA
+	            {
+	            uid = 268123124;
+	            screen_mode = 0x01;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123124_caption;
+	                    number_of_icons = 6; // each icon must be a bitmap/mask pair
+	                    icon_file = "z:\\resource\\apps\\interpretsis_testcase01.mbm";
+	                    }
+	                };
+	            }
+	        };
+	    group_name = "Tapash_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_06/interpretsis_testcase_06_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,96 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+#include <interpretsis_testcase_06.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+//UID3 0xE800005A // application UID
+UID3 0x00000ABC // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "interpretsis_testcase_06";
+	localisable_resource_file = "\\resource\\apps\\interpretsis_testcase_06";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_07/01/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for UK
+//
+
+rls_string STRING_r_example_short_caption "HW"
+rls_string STRING_r_example_caption "helloworld"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase01.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_eng"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_eng"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_07/03/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise03strings
+// Strings localised for German
+//
+
+rls_string STRING_r_example_short_caption "Hallo"
+rls_string STRING_r_example_caption "Hallo_Welt"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase03.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_ger"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_ger"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_07/interpretsis_testcase_07.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// using relative paths for sourcepath and user includes
+//
+
+TARGET        interpretsis_testcase_07.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE8000060
+VENDORID 	  0x70000002
+SOURCEPATH    ../interpretsis_testcase/.
+SOURCE        interpretsis_testcase_Main.cpp
+SOURCE        interpretsis_testcase_Application.cpp
+SOURCE        interpretsis_testcase_Document.cpp
+SOURCE        interpretsis_testcase_AppUi.cpp
+SOURCE        interpretsis_testcase_AppView.cpp
+USERINCLUDE   .
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE /epoc32/include/platform/app/techview
+SYSTEMINCLUDE /epoc32/include/platform/app
+SOURCEPATH    .
+
+START RESOURCE	interpretsis_testcase_07.rss
+HEADER
+TARGETPATH		/resource/apps
+LANG 01 03	// Build UK and German language versions of resources
+END
+
+START RESOURCE	interpretsis_testcase_07_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+// Icons for UK language version
+START BITMAP	interpretsis_testcase01_07.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/01
+SOURCE			c8,1 icon24.BMP
+END
+
+// Icons for German language version
+START BITMAP	interpretsis_testcase03_07.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/03
+SOURCE			c8,1 icon24.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_07/interpretsis_testcase_07.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,77 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME HEWO
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+#include "../interpretsis_testcase/interpretsis_testcase.hrh"
+RESOURCE RSS_SIGNATURE { }
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+	    caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+	            number_of_icons = 2; // each icon must be a bitmap/mask pair
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        };                          
+	    //
+	    view_list =
+	        {
+	        VIEW_DATA
+	            {
+	            uid = 268123123;
+	            screen_mode = 0x00;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123123_caption;
+	                    number_of_icons = 5; // each icon must be a bitmap/mask pair
+	                    icon_file = "z:\\resource\\apps\\interpretsis_testcase01.mbm";
+	                    }
+	                };                          
+	            },
+	        VIEW_DATA
+	            {
+	            uid = 268123124;
+	            screen_mode = 0x01;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123124_caption;
+	                    number_of_icons = 6; // each icon must be a bitmap/mask pair
+	                    icon_file = "z:\\resource\\apps\\interpretsis_testcase01.mbm";
+	                    }
+	                };
+	            }
+	        };
+	    group_name = "Tapash_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_07/interpretsis_testcase_07_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,95 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+#include <interpretsis_testcase_07.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x0000ABCD // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	//app_file = "interpretsis_testcase_07";
+	localisable_resource_file = "\\resource\\apps\\interpretsis_testcase_07";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_08/01/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for UK
+//
+
+
+rls_string STRING_r_example_short_caption "HW"
+rls_string STRING_r_example_caption "helloworld"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase01.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_eng"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_eng"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_08/03/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise03strings
+// Strings localised for German
+//
+
+rls_string STRING_r_example_short_caption "Hallo"
+rls_string STRING_r_example_caption "Hallo_Welt"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase03.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_ger"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_ger"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_08/interpretsis_testcase_08.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// using relative paths for sourcepath and user includes
+//
+
+TARGET        interpretsis_testcase_08.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800007A
+VENDORID 	  0x70000001
+SOURCEPATH    ../interpretsis_testcase/.
+SOURCE        interpretsis_testcase_Main.cpp
+SOURCE        interpretsis_testcase_Application.cpp
+SOURCE        interpretsis_testcase_Document.cpp
+SOURCE        interpretsis_testcase_AppUi.cpp
+SOURCE        interpretsis_testcase_AppView.cpp
+USERINCLUDE   .
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE /epoc32/include/platform/app/techview
+SYSTEMINCLUDE /epoc32/include/platform/app
+SOURCEPATH    .
+
+START RESOURCE	interpretsis_testcase_08.rss
+HEADER
+TARGETPATH		/resource/apps
+LANG 01 03	// Build UK and German language versions of resources
+END
+
+START RESOURCE	interpretsis_testcase_08_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+// Icons for UK language version
+START BITMAP	interpretsis_testcase01_08.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/01
+SOURCE			c8,1 icon24.BMP
+END
+
+// Icons for German language version
+START BITMAP	interpretsis_testcase03_08.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/03
+SOURCE			c8,1 icon24.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_08/interpretsis_testcase_08.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,79 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME HEWO
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+#include "../interpretsis_testcase/interpretsis_testcase.hrh"
+
+RESOURCE RSS_SIGNATURE { }
+
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+	    caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+	            number_of_icons = 2; // each icon must be a bitmap/mask pair
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        };                          
+	    //
+	    view_list =
+	        {
+	        VIEW_DATA
+	            {
+	            uid = 268123123;
+	            screen_mode = 0x00;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123123_caption;
+	                    number_of_icons = 5; // each icon must be a bitmap/mask pair
+	                    icon_file = "z:\\resource\\apps\\interpretsis_testcase01.mbm";
+	                    }
+	                };                          
+	            },
+	        VIEW_DATA
+	            {
+	            uid = 268123124;
+	            screen_mode = 0x01;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123124_caption;
+	                    number_of_icons = 6; // each icon must be a bitmap/mask pair
+	                    icon_file = "z:\\resource\\apps\\interpretsis_testcase01.mbm";
+	                    }
+	                };
+	            }
+	        };
+	    group_name = "Tapash_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_08/interpretsis_testcase_08_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,96 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+#include <interpretsis_testcase_08.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+//UID3 0x00000AB0 // application UID
+UID3 0xE8000AB0
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "interpretsis_testcase_08";
+	localisable_resource_file = "\\resource\\apps\\interpretsis_testcase_08";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_09/01/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for UK
+//
+
+
+rls_string STRING_r_example_short_caption "HW"
+rls_string STRING_r_example_caption "helloworld"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase01_missing.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_eng"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_eng"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_09/03/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise03strings
+// Strings localised for German
+//
+
+rls_string STRING_r_example_short_caption "Hallo"
+rls_string STRING_r_example_caption "Hallo_Welt"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase03.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_ger"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_ger"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_09/interpretsis_testcase_09.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// using relative paths for sourcepath and user includes
+//
+
+TARGET        interpretsis_testcase_09.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE8000077
+VENDORID 	  0x70000001
+SOURCEPATH    ../interpretsis_testcase/.
+SOURCE        interpretsis_testcase_Main.cpp
+SOURCE        interpretsis_testcase_Application.cpp
+SOURCE        interpretsis_testcase_Document.cpp
+SOURCE        interpretsis_testcase_AppUi.cpp
+SOURCE        interpretsis_testcase_AppView.cpp
+USERINCLUDE   .
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE /epoc32/include/platform/app/techview
+SYSTEMINCLUDE /epoc32/include/platform/app
+SOURCEPATH    .
+
+START RESOURCE	interpretsis_testcase_09.rss
+HEADER
+TARGETPATH		/resource/apps
+LANG 01 03	// Build UK and German language versions of resources
+END
+
+START RESOURCE	interpretsis_testcase_09_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+// Icons for UK language version
+START BITMAP	interpretsis_testcase01_09.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/01
+SOURCE			c8,1 icon24.BMP
+END
+
+// Icons for German language version
+START BITMAP	interpretsis_testcase03_09.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/03
+SOURCE			c8,1 icon24.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_09/interpretsis_testcase_09.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,79 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME HEWO
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+#include "../interpretsis_testcase/interpretsis_testcase.hrh"
+
+RESOURCE RSS_SIGNATURE { }
+
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+	    caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+	            number_of_icons = 2; // each icon must be a bitmap/mask pair
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        };                          
+	    //
+	    view_list =
+	        {
+	        VIEW_DATA
+	            {
+	            uid = 268123123;
+	            screen_mode = 0x00;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123123_caption;
+	                    number_of_icons = 5; // each icon must be a bitmap/mask pair
+	                    icon_file = "z:\\resource\\apps\\interpretsis_testcase01_missing.mbm";
+	                    }
+	                };                          
+	            },
+	        VIEW_DATA
+	            {
+	            uid = 268123124;
+	            screen_mode = 0x01;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123124_caption;
+	                    number_of_icons = 6; // each icon must be a bitmap/mask pair
+	                    icon_file = "z:\\resource\\apps\\interpretsis_testcase01.mbm";
+	                    }
+	                };
+	            }
+	        };
+	    group_name = "Tapash_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_09/interpretsis_testcase_09_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,95 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+#include <interpretsis_testcase_09.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0xE8000AB1
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "interpretsis_testcase_09";
+	localisable_resource_file = "\\resource\\apps\\interpretsis_testcase_09";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_10/01/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for UK
+//
+
+rls_string STRING_r_example_short_caption "HW"
+rls_string STRING_r_example_caption "helloworld"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase01.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_eng"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_eng"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_10/03/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise03strings
+// Strings localised for German
+//
+
+rls_string STRING_r_example_short_caption "Hallo_PU"
+rls_string STRING_r_example_caption "Hallo_Welt_PU"
+rls_string STRING_r_example_iconfile "\\resource\\apps\\interpretsis_testcase03.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_ger_PU"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_ger_PU"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_10/interpretsis_testcase_10.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// using relative paths for sourcepath and user includes
+//
+
+TARGET        interpretsis_testcase_08.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800007A
+VENDORID 	  0x70000001
+SOURCEPATH    ../interpretsis_testcase/.
+SOURCE        interpretsis_testcase_Main.cpp
+SOURCE        interpretsis_testcase_Application.cpp
+SOURCE        interpretsis_testcase_Document.cpp
+SOURCE        interpretsis_testcase_AppUi.cpp
+SOURCE        interpretsis_testcase_AppView.cpp
+USERINCLUDE   .
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE /epoc32/include/platform/app/techview
+SYSTEMINCLUDE /epoc32/include/platform/app
+SOURCEPATH    .
+
+START RESOURCE	interpretsis_testcase_10.rss
+HEADER
+TARGETPATH		/resource/apps
+LANG 01 03	// Build UK and German language versions of resources
+END
+
+START RESOURCE	interpretsis_testcase_10_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+// Icons for UK language version
+START BITMAP	interpretsis_testcase01_08.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/01
+SOURCE			c8,1 icon24.BMP
+END
+
+// Icons for German language version
+START BITMAP	interpretsis_testcase03_08.mbm
+TARGETPATH		/resource/apps
+SOURCEPATH		../interpretsis_testcase/03
+SOURCE			c8,1 icon24.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_10/interpretsis_testcase_10.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,77 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME HEWO
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+#include "../interpretsis_testcase/interpretsis_testcase.hrh"
+RESOURCE RSS_SIGNATURE { }
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+	    caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+	            number_of_icons = 2; // each icon must be a bitmap/mask pair
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        };                          
+	    //
+	    view_list =
+	        {
+	        VIEW_DATA
+	            {
+	            uid = 268123123;
+	            screen_mode = 0x00;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123123_caption;
+	                    number_of_icons = 5; // each icon must be a bitmap/mask pair
+	                    icon_file = "z:\\resource\\apps\\interpretsis_testcase01.mbm";
+	                    }
+	                };                          
+	            },
+	        VIEW_DATA
+	            {
+	            uid = 268123124;
+	            screen_mode = 0x01;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123124_caption;
+	                    number_of_icons = 6; // each icon must be a bitmap/mask pair
+	                    icon_file = "z:\\resource\\apps\\interpretsis_testcase01.mbm";
+	                    }
+	                };
+	            }
+	        };
+	    group_name = "Tapash_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/interpretsis_testcase_10/interpretsis_testcase_10_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,96 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+#include <interpretsis_testcase_10.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+//UID3 0x00000AB0 // application UID
+UID3 0xE8000AB0
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "interpretsis_testcase_08";
+	localisable_resource_file = "\\resource\\apps\\interpretsis_testcase_10";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="z:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/int_nr_option_04.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Nokia Software Ltd", "Nokia Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Nokia Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"Interpretsis_NR_option", "Interpretsis_NR_option1"}, (0x80000076), 1,0,0, Type=SA,RU,NR
+
+;Ordinary file to selected drive
+"osver.txt"-"!:\Documents\abc1.txt"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/int_nr_option_05.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Nokia Software Ltd", "Nokia Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Nokia Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"Interpretsis_NR_option", "Interpretsis_NR_option1"}, (0x80000077), 1,0,0, Type=SA,RU,NR
+
+;Ordinary file to selected drive
+"osver.txt"-"!:\Documents\abc4.txt"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/nonremovableupgrade.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; SP package containing complete resource files for English and German 
+;
+
+;Languages
+&EN, GE
+
+#{"swiappregintegration_base01_sp_EN","swiappregintegration_base01_sp_GE"},(0x80000002),1,1,1,TYPE=SP
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_GE"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration02.exe" - "!:\sys\bin\swiappregintegration02.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.rsc" -"!:\resource\apps\swiappregintegration02_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.r01" -"!:\resource\apps\swiappregintegration02_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_01.mbm"
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/sp_int_nr_option_04.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Nokia", "Nokia"}
+
+; Single, non-localised (global) vendor name.
+:"Nokia"
+
+; Installation header.
+; Two component names as we support English and German
+#{"Interpretsis_NR_option_SP", "Interpretsis_NR_option1_SP"}, (0x80000076), 1,0,0, Type=SP
+
+;Ordinary file to selected drive
+"osver.txt"-"!:\Documents\abc3.txt"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/sp_int_nr_option_06.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Nokia", "Nokia"}
+
+; Single, non-localised (global) vendor name.
+:"Nokia"
+
+; Installation header.
+; Two component names as we support English and German
+#{"Interpretsis_NR_option_SP_NR", "Interpretsis_NR_option1_SP_NR"}, (0x80000076), 1,0,0, Type=SP,NR,RU
+
+;Ordinary file to selected drive
+"osver.txt"-"!:\Documents\abc5.txt"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration01.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,48 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; SA package containing complete resource files for English, International French and German
+;
+
+;Languages
+&EN, IF, GE
+
+#{"swiappregintegration_EN","swiappregintegration_IF","swiappregintegration_GE"},(0x80010002),1,0,1,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_IF","Vendor_GE"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration.exe" - "!:\sys\bin\swiappregintegration.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration01_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration01_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration01_loc.rsc" -"!:\resource\apps\swiappregintegration01_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration01_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration01_loc.r01" -"!:\resource\apps\swiappregintegration01_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration01_01.mbm"
+endif
+
+if supported_language=24
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration01_loc.r24" -"!:\resource\apps\swiappregintegration01_loc.r24"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration01_24.mbm"
+endif
+
+if supported_language=03
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration01_loc.r03" -"!:\resource\apps\swiappregintegration01_loc.r03"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration01_03.mbm"
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration03_opaque.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; Application having no AppFile
+;
+
+;Languages
+&EN
+
+#{"swiappregintegration03_EN"},(0x80010006),1,2,4,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration03.exe" - "!:\sys\bin\swiappregintegration03.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration03\swiappregintegration03_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration03_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration03\swiappregintegration03_loc.rsc" -"!:\resource\apps\swiappregintegration03_loc.rsc"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"C:\icon\swiappregintegration03_rsc.mbm"
+
+if supported_language=01  
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration03\swiappregintegration03_loc.r01" -"!:\resource\apps\swiappregintegration03_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\icon\swiappregintegration03_01.mbm"
+endif
+
+if supported_language=24
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration03\swiappregintegration03_loc.r24" -"!:\resource\apps\swiappregintegration03_loc.r24"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\icon\swiappregintegration03_24.mbm"
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration04_noappfile.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; Application having no AppFile
+;
+
+;Languages
+&EN
+
+#{"swiappregintegration_noappfile"},(0x80010010),1,2,4,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration04.exe" - "!:\sys\bin\swiappregintegration04.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration04\swiappregintegration04_noappfile_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration04_noappfile_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration04\swiappregintegration04_loc.rsc" -"!:\resource\apps\swiappregintegration04_loc.rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration04_noappuid.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; Application having no AppUid3
+;
+
+;Languages
+&EN
+
+#{"swiappregintegration_noappuid"},(0x80010011),1,2,5,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration04.exe" - "!:\sys\bin\swiappregintegration04.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration04\swiappregintegration04_noappuid_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration04_noappuid_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration04\swiappregintegration04_loc.rsc" -"!:\resource\apps\swiappregintegration04_loc.rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration04_wronguid2.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; Application having non AppReg Uid2
+;
+
+;Languages
+&EN
+
+#{"swiappregintegration_wronguid2"},(0x80010012),1,2,6,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration04.exe" - "!:\sys\bin\swiappregintegration04.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration04\swiappregintegration04_wronguid2_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration04_wronguid2_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration04\swiappregintegration04_loc.rsc" -"!:\resource\apps\swiappregintegration04_loc.rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration_base01.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; SA package containing complete resource files for English and French
+;
+
+;Languages
+&EN, FR
+
+#{"swiappregintegration_base01_EN","swiappregintegration_base01_FR"},(0x80010003),1,1,1,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_FR"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_base01.exe" - "!:\sys\bin\swiappregintegration_base01.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.rsc" -"!:\resource\apps\swiappregintegration_base01_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r01" -"!:\resource\apps\swiappregintegration_base01_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_01.mbm"
+endif
+
+if supported_language=02
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r02" -"!:\resource\apps\swiappregintegration_base01_loc.r02"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_02.mbm"
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration_base01_pu.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,51 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; PU package containing complete resource files for English , French and German
+;
+
+;Languages
+&EN, FR , GE
+
+#{"swiappregintegration_base01_EN","swiappregintegration_base01_FR","swiappregintegration_base01_GE"},(0x80010003),1,1,1,TYPE=PU
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_FR","Vendor_GE"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration02.exe" - "!:\sys\bin\swiappregintegration02.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.rsc" -"!:\resource\apps\swiappregintegration02_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.r01" -"!:\resource\apps\swiappregintegration02_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_01.mbm"
+endif
+
+if supported_language=02
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r04" -"!:\resource\apps\swiappregintegration_base01_loc.r02"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_02.mbm"
+endif
+
+if supported_language=03
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r03" -"!:\resource\apps\swiappregintegration_base01_loc.r03"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_03.mbm"
+endif
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration_base01_sp.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,47 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; SP package containing complete resource files for English and German 
+;
+
+;Languages
+&EN, GE
+
+#{"swiappregintegration_base01_sp_EN","swiappregintegration_base01_sp_GE"},(0x80010003),1,1,1,TYPE=SP
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_GE"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration02.exe" - "!:\sys\bin\swiappregintegration02.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.rsc" -"!:\resource\apps\swiappregintegration02_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_rsc.mbm"
+
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.r01" -"!:\resource\apps\swiappregintegration02_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_01.mbm"
+endif
+
+if supported_language=03
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r03" -"!:\resource\apps\swiappregintegration_base01_loc.r03"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_03.mbm"
+endif
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration_base02.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; SA package containing complete resource files for English, French and German
+;
+
+;Languages
+&EN, FR , GE
+
+#{"swiappregintegration_base01_EN","swiappregintegration_base01_FR","swiappregintegration_base01_GE"},(0x80010003),1,1,1,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_FR","Vendor_GE"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_base01.exe" - "!:\sys\bin\swiappregintegration_base01.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration02.exe" - "!:\sys\bin\swiappregintegration02.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.rsc" -"!:\resource\apps\swiappregintegration_base01_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_rsc.mbm"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.rsc" -"!:\resource\apps\swiappregintegration02_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_rsc.mbm"
+
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r01" -"!:\resource\apps\swiappregintegration_base01_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_01.mbm"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.r01" -"!:\resource\apps\swiappregintegration02_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_01.mbm"
+endif
+
+if supported_language=02
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r04" -"!:\resource\apps\swiappregintegration_base01_loc.r02"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_02.mbm"
+endif
+
+if supported_language=03
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r03" -"!:\resource\apps\swiappregintegration_base01_loc.r03"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_03.mbm"
+endif
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration_base02_ru.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; SA RU package containing complete resource files for English, French and German
+;
+
+;Languages
+&EN, FR , GE
+
+#{"swiappregintegration_base02_ru_EN","swiappregintegration_base02_ru_FR","swiappregintegration_base02_ru_GE"},(0x80010003),3,2,1,TYPE=SA,RU
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_FR","Vendor_GE"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_base01.exe" - "!:\sys\bin\swiappregintegration_base01.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration02.exe" - "!:\sys\bin\swiappregintegration02.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.rsc" -"!:\resource\apps\swiappregintegration_base01_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_rsc.mbm"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.rsc" -"!:\resource\apps\swiappregintegration02_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_rsc.mbm"
+
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r01" -"!:\resource\apps\swiappregintegration_base01_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_01.mbm"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.r01" -"!:\resource\apps\swiappregintegration02_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_01.mbm"
+endif
+
+if supported_language=02
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r04" -"!:\resource\apps\swiappregintegration_base01_loc.r02"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_02.mbm"
+endif
+
+if supported_language=03
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r03" -"!:\resource\apps\swiappregintegration_base01_loc.r03"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_03.mbm"
+endif
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration_multipleapp_performance.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,70 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; SA package containing complete resource files for English and French
+;
+
+;Languages
+&EN, FR
+
+#{"swiappregintegration_base01_EN","swiappregintegration_base01_FR"},(0x80010003),1,1,1,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_FR"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_base01.exe" - "!:\sys\bin\swiappregintegration_base01.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.rsc" -"!:\resource\apps\swiappregintegration_base01_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r01" -"!:\resource\apps\swiappregintegration_base01_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_01.mbm"
+endif
+
+if supported_language=02
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r02" -"!:\resource\apps\swiappregintegration_base01_loc.r02"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_02.mbm"
+endif
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration02.exe" - "!:\sys\bin\swiappregintegration02.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.rsc" -"!:\resource\apps\swiappregintegration02_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.r01" -"!:\resource\apps\swiappregintegration02_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_01.mbm"
+endif
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_case05.exe" - "!:\sys\bin\swiappregintegration_case05.exe"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case05_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_loc.rsc" - "!:\resource\apps\swiappregintegration_case05_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration.mbm"
+
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_case06.exe" - "!:\sys\bin\swiappregintegration_case06.exe"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case06\swiappregintegration_case06_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case06\swiappregintegration_case06_loc.rsc" - "!:\resource\apps\swiappregintegration_case06_loc.rsc"
+
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_case07.exe" - "!:\sys\bin\swiappregintegration_case07.exe"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case07\swiappregintegration_case07_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case07_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case07\swiappregintegration_case07_loc.rsc" - "!:\resource\apps\swiappregintegration_case07_loc.rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration_twoapps_performance.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; SA package containing complete resource files for English and French
+;
+
+;Languages
+&EN, FR
+
+#{"swiappregintegration_base01_EN","swiappregintegration_base01_FR"},(0x80010003),1,1,1,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_FR"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_base01.exe" - "!:\sys\bin\swiappregintegration_base01.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.rsc" -"!:\resource\apps\swiappregintegration_base01_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r01" -"!:\resource\apps\swiappregintegration_base01_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_01.mbm"
+endif
+
+if supported_language=02
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r02" -"!:\resource\apps\swiappregintegration_base01_loc.r02"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_02.mbm"
+endif
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration02.exe" - "!:\sys\bin\swiappregintegration02.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.rsc" -"!:\resource\apps\swiappregintegration02_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.r01" -"!:\resource\apps\swiappregintegration02_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_01.mbm"
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/test_appreg_entries_armv5.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; 
+;
+
+;Languages
+&EN
+
+#{"test_appreg_entries_EN"},(0x80010009),1,1,1
+
+;Localised Vendor name
+%{"Vendor_EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_case06.exe" - "!:\sys\bin\swiappregintegration_case06.exe"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case06\swiappregintegration_case06_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case06\swiappregintegration_case06_loc.rsc" - "!:\resource\apps\swiappregintegration_case06_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration.mbm"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,61 @@
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Symbian Software Ltd", "Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"interpretsis_eng_testcase", "interpretsis_german_testcase"}, (0xE8000097), 1,0,0
+
+; Language-neutral files to be installed
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\interpretsis_testcase_01.exe"-"!:\sys\bin\interpretsis_testcase_01.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\interpretsis_testcase_02.exe"-"!:\sys\bin\interpretsis_testcase_02.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\interpretsis_testcase_03.exe"-"!:\sys\bin\interpretsis_testcase_03.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\interpretsis_testcase_04.exe"-"!:\sys\bin\interpretsis_testcase_04.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\private\10003a3f\apps\interpretsis_testcase_01_reg.rsc" - "!:\private\10003a3f\import\apps\interpretsis_testcase_01_reg.rsc"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\private\10003a3f\apps\interpretsis_testcase_dup_reg.rsc" - "!:\private\10003a3f\import\apps\interpretsis_testcase_dup_reg.rsc"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\private\10003a3f\apps\interpretsis_testcase_02_reg.rsc" - "!:\private\10003a3f\import\apps\interpretsis_testcase_02_reg.rsc"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\private\10003a3f\apps\interpretsis_testcase_03_reg.rsc" - "!:\private\10003a3f\import\apps\interpretsis_testcase_03_reg.rsc"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\private\10003a3f\apps\interpretsis_testcase_04_reg.rsc" - "!:\private\10003a3f\import\apps\interpretsis_testcase_04_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device. 
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_01.r01"		-"!:\resource\apps\interpretsis_testcase_01.r01"
+endif	
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_01.r03"		-"!:\resource\apps\interpretsis_testcase_01.r03"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_02.r03"		-"!:\resource\apps\interpretsis_testcase_02.r03"
+endif
+if supported_language=04
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_01.r04"		-"!:\resource\apps\interpretsis_testcase_01.r04"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_03.r04"		-"!:\resource\apps\interpretsis_testcase_03.r04"
+endif
+if supported_language=24
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_01.r24"		-"!:\resource\apps\interpretsis_testcase_01.r24"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_04.r24"		-"!:\resource\apps\interpretsis_testcase_04.r24"
+endif
+
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase01.mbm"		-"!:\resource\apps\interpretsis_testcase01.mbm"
+endif
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase03.mbm"		-"!:\resource\apps\interpretsis_testcase03.mbm"
+endif
+if supported_language=04
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase04.mbm"		-"!:\resource\apps\interpretsis_testcase04.mbm"
+endif
+if supported_language=24
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase24.mbm"		-"!:\resource\apps\interpretsis_testcase24.mbm"
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_05.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Symbian Software Ltd", "Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"interpretsis_eng_testcase", "interpretsis_german_testcase"}, (0xE8000095), 1,0,0
+
+; Language-neutral files to be installed
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\interpretsis_testcase_05.exe"-"!:\sys\bin\interpretsis_testcase_05.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\private\10003a3f\apps\interpretsis_testcase_05_reg.rsc" - "!:\private\10003a3f\import\apps\interpretsis_testcase_05_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device. 
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_05.r01"		-"!:\resource\apps\interpretsis_testcase01_05.r01"
+endif	
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_05.r03"		-"!:\resource\apps\interpretsis_testcase03_05.r03"
+endif
+
+
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase01_05.mbm"		-"!:\resource\apps\interpretsis_testcase01_05.mbm"
+endif
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase03_05.mbm"		-"!:\resource\apps\interpretsis_testcase03_05.mbm"
+endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_06.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Symbian Software Ltd", "Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"interpretsis_eng_testcase", "interpretsis_german_testcase"}, (0xE8000096), 1,0,0
+
+; Language-neutral files to be installed
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\interpretsis_testcase_06.exe"-"!:\sys\bin\interpretsis_testcase_06.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\private\10003a3f\apps\interpretsis_testcase_06_reg.rsc" - "!:\private\10003a3f\import\apps\interpretsis_testcase_06_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device. 
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_06.r01"		-"!:\resource\apps\interpretsis_testcase01_06.r01"
+endif	
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_06.r03"		-"!:\resource\apps\interpretsis_testcase03_06.r03"
+endif
+
+
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase01_06.mbm"		-"!:\resource\apps\interpretsis_testcase01_06.mbm"
+endif
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase03_06.mbm"		-"!:\resource\apps\interpretsis_testcase03_06.mbm"
+endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_07.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Symbian Software Ltd", "Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"interpretsis_eng_testcase", "interpretsis_german_testcase"}, (0xE8000098), 1,0,0
+
+; Language-neutral files to be installed
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\interpretsis_testcase_07.exe"-"!:\sys\bin\interpretsis_testcase_07.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\private\10003a3f\apps\interpretsis_testcase_07_reg.rsc" - "!:\private\10003a3f\import\apps\interpretsis_testcase_07_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device. 
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_07.r01"		-"!:\resource\apps\interpretsis_testcase_07.r01"
+endif	
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_07.r03"		-"!:\resource\apps\interpretsis_testcase_07.r03"
+endif
+
+
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase01_07.mbm"		-"!:\resource\apps\interpretsis_testcase01_07.mbm"
+endif
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase03_07.mbm"		-"!:\resource\apps\interpretsis_testcase03_07.mbm"
+endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_08.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Symbian Software Ltd", "Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"interpretsis_eng_testcase", "interpretsis_german_testcase"}, (0xE8000108), 1,0,0,TYPE=SA
+
+; Language-neutral files to be installed
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\interpretsis_testcase_08.exe"-"!:\sys\bin\interpretsis_testcase_08.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\private\10003a3f\apps\interpretsis_testcase_08_reg.rsc" - "!:\private\10003a3f\import\apps\interpretsis_testcase_08_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device. 
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_08.r01"		-"!:\resource\apps\interpretsis_testcase_08.r01"
+endif	
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_08.r03"		-"!:\resource\apps\interpretsis_testcase_08.r03"
+endif
+
+
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase01_08.mbm"		-"!:\resource\apps\interpretsis_testcase01_08.mbm"
+endif
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase03_08.mbm"		-"!:\resource\apps\interpretsis_testcase03_08.mbm"
+endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_09.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Symbian Software Ltd", "Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"interpretsis_eng_testcase_09", "interpretsis_german_testcase_09"}, (0xE8000109), 1,0,0,TYPE=SA
+
+; Language-neutral files to be installed
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\interpretsis_testcase_09.exe"-"!:\sys\bin\interpretsis_testcase_09.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\private\10003a3f\apps\interpretsis_testcase_09_reg.rsc" - "!:\private\10003a3f\import\apps\interpretsis_testcase_09_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device. 
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_09.r01"		-"!:\resource\apps\interpretsis_testcase_09.r01"
+endif	
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_09.r03"		-"!:\resource\apps\interpretsis_testcase_09.r03"
+endif
+
+
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase01_09.mbm"		-"!:\resource\apps\interpretsis_testcase01_09.mbm"
+endif
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase03_09.mbm"		-"!:\resource\apps\interpretsis_testcase03_09.mbm"
+endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_10.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Symbian Software Ltd", "Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"interpretsis_eng_testcase", "interpretsis_german_testcase_PU"}, (0xE8000108), 1,0,0,TYPE=PU
+
+; Language-neutral files to be installed
+;"\epoc32\release\<PLATFORM>\<CONFIGURATION>\interpretsis_testcase_08.exe"-"!:\sys\bin\interpretsis_testcase_08.exe"
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\private\10003a3f\apps\interpretsis_testcase_10_reg.rsc" - "!:\private\10003a3f\import\apps\interpretsis_testcase_10_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device. 
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_10.r01"		-"!:\resource\apps\interpretsis_testcase_10.r01"
+endif	
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase_10.r03"		-"!:\resource\apps\interpretsis_testcase_10.r03"
+endif
+
+
+
+if supported_language=01 
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase01_08.mbm"		-"!:\resource\apps\interpretsis_testcase01_08.mbm"
+endif
+if supported_language=03
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\z\resource\apps\interpretsis_testcase03_08.mbm"		-"!:\resource\apps\interpretsis_testcase03_08.mbm"
+endif
+
--- a/installationservices/swi/test/testexes/prepareexes.pl	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/prepareexes.pl	Tue Aug 31 15:21:33 2010 +0300
@@ -150,7 +150,7 @@
 print "Processing files in directory: $builddir\n\n";
 MakeSISFiles($packagedir,"yes");
 MakeSISFiles($non_iby_packagedir,"no");
-MakeSISFiles($packages_interpretsis_testcase,"yes");
+MakeSISFiles($packages_interpretsis_testcase,"no");
 
 
 # Copy emulator version of preinstalled exes to location script expects.
@@ -881,6 +881,8 @@
 SignFile("tswtype_valid1_upgrade.sis", "tswtype_valid1_upgrade_root5.sis", "root5ca", \*iby);
 SignFile("tswtype_valid1_invalidupgrade.sis", "tswtype_valid1_invalidupgrade_root5.sis", "root5ca", \*iby);
 
+# SWI applicaiton registration integreation
+SignFile("swiappregintegration_base02_ru.sis", "swiappregintegration_base02_ru_root5.sis", "root5ca", \*iby);
 EndNormalFiles(\*iby);
 
 close iby;
--- a/installationservices/swi/test/testexes/swtypereginfo_invalid1.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/swtypereginfo_invalid1.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -6,7 +6,8 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg5</mimeType>
 		<sifPluginUid>F02866EF</sifPluginUid>
-		<installerSecureId>F0285BCB</installerSecureId>
-		<executionLayerSecureId>F0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="F0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="F0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid1</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_invalid2.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/swtypereginfo_invalid2.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -6,7 +6,8 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid2</launcherExecutable>
 	</softwareType1>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_invalid3.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/swtypereginfo_invalid3.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -6,15 +6,17 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid3a</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType">
 		<localizedName language="15">testSwTypeLoc15</localizedName>
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg2</mimeType>
 		<sifPluginUid>C02866EF</sifPluginUid>
-		<installerSecureId>C0285BCB</installerSecureId>
-		<executionLayerSecureId>C0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="C0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="C0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid3b</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_invalid4.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/swtypereginfo_invalid4.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -6,15 +6,17 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid4a</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType2">
 		<localizedName language="15">testSwTypeLoc15</localizedName>
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg2</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>C0285BCB</installerSecureId>
-		<executionLayerSecureId>C0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="C0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="C0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid4b</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_invalid5.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/swtypereginfo_invalid5.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -6,15 +6,17 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid5a</launcherExecutable>
 	</softwareType>
 	<softwareType name="native">
 		<localizedName language="15">testSwTypeLoc15</localizedName>
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg2</mimeType>
 		<sifPluginUid>C02866EF</sifPluginUid>
-		<installerSecureId>C0285BCB</installerSecureId>
-		<executionLayerSecureId>C0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="C0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="C0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid5b</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_native_invalid1.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/swtypereginfo_native_invalid1.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -6,7 +6,8 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>application/vnd.symbian.install</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExenativeinvalid1</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_valid1.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/swtypereginfo_valid1.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -6,7 +6,8 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid1</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_valid1_invalidupgrade.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/swtypereginfo_valid1_invalidupgrade.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -6,7 +6,8 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCC</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCC" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalidupgrade</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_valid2.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/swtypereginfo_valid2.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -6,8 +6,9 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid2</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType2">
 		<localizedName language="1">
@@ -22,11 +23,8 @@
 		<sifPluginUid>
 			122866EF
 		</sifPluginUid>
-		<installerSecureId>
-			12285BCB
-		</installerSecureId>
-		<executionLayerSecureId>
-			82285DE0
-		</executionLayerSecureId>
+		<CustomAcess SecureId="12285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="82285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid2b</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_valid3.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/testexes/swtypereginfo_valid3.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -6,27 +6,31 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg1</mimeType>
 		<sifPluginUid>A02866EF</sifPluginUid>
-		<installerSecureId>A0285BCB</installerSecureId>
-		<executionLayerSecureId>A0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="A0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="A0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid3a</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType2">
 		<mimeType>text/sif-testpkg2</mimeType>
 		<sifPluginUid>B02866EF</sifPluginUid>
-		<installerSecureId>B0285BCB</installerSecureId>
-		<executionLayerSecureId>B0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="B0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="B0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid3b</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType3">
 		<mimeType>text/sif-testpkg3</mimeType>
 		<sifPluginUid>C02866EF</sifPluginUid>
-		<installerSecureId>C0285BCB</installerSecureId>
-		<executionLayerSecureId>C0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="C0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="C0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid3c</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType4">
 		<localizedName language="5">testSwTypeLoc5</localizedName>
 		<localizedName language="3">testSwTypeLoc3</localizedName>
 		<mimeType>text/sif-testpkg4</mimeType>
 		<sifPluginUid>D02866EF</sifPluginUid>
-		<installerSecureId>D0285BCB</installerSecureId>
-		<executionLayerSecureId>D0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="D0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="D0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid3d</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base01/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for UK
+//
+
+rls_string Localized_Short_Caption "HW_Base01_EN"
+rls_string Localized_Caption "HelloWorld_Base01_EN"
+rls_long Localized_NumberOfIcon 123
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration_base01_01.mbm"
+
+rls_string Localized_GroupName "Group_Base01_EN"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base01/02-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for FR
+//
+
+rls_string Localized_Short_Caption "HW_Base01_FR"
+rls_string Localized_Caption "HelloWorld_Base01_FR"
+rls_long Localized_NumberOfIcon 124
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration_base01_02.mbm"
+
+rls_string Localized_GroupName "Group_Base01_FR"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base01/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for GE
+//
+
+rls_string Localized_Short_Caption "HW_Base01_GE"
+rls_string Localized_Caption "HelloWorld_Base01_GE"
+rls_long Localized_NumberOfIcon 125
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration_base01_03.mbm"
+
+rls_string Localized_GroupName "Group_Base01_GE"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base01/04-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for FR 2
+//
+
+rls_string Localized_Short_Caption "HW_Base01_FR_2"
+rls_string Localized_Caption "HelloWorld_Base01_FR_2"
+rls_long Localized_NumberOfIcon 126
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration_base01_02.mbm"
+
+rls_string Localized_GroupName "Group_Base01_FR2"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base01/rsc-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for RSC
+//
+
+rls_string Localized_Short_Caption "HW_Base01_RSC"
+rls_string Localized_Caption "HelloWorld_Base01_RSC"
+rls_long Localized_NumberOfIcon 127
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration_base01_rsc.mbm"
+
+rls_string Localized_GroupName "Group_Base01_RSC"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base01/swiappregintegration_base01_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration01_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+#ifdef LANGUAGE_01
+ #include "01-strings.rls"
+#elif defined LANGUAGE_02
+ #include "02-strings.rls"
+#elif defined LANGUAGE_03
+ #include "03-strings.rls"
+#elif defined LANGUAGE_04
+ #include "04-strings.rls"
+#else
+ #include "rsc-strings.rls"
+#endif      
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = Localized_Short_Caption;
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = Localized_Caption;
+			number_of_icons = Localized_NumberOfIcon;
+			icon_file = Localized_Iconfile;
+			}
+		};
+
+	group_name = Localized_GroupName;		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base01/swiappregintegration_base01_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration01_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration01_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x90000004
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "swiappregintegration_base01";
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration_base01_loc";
+	localisable_resource_id = R_LAI;	
+	
+    	hidden = KAppNotHidden;
+    	embeddability = KAppNotEmbeddable;
+    	newfile = KAppDoesNotSupportNewFile;
+    	launch = KAppLaunchInForeground;
+    	group_name = "Group_Base01";    
+    	default_screen_number = 2;
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base02/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for UK
+//
+
+rls_string Localized_Short_Caption "HW_Base01_EN"
+rls_string Localized_Caption "HelloWorld_Base01_EN"
+rls_long Localized_NumberOfIcon 123
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration_base01_01.mbm"
+
+rls_string Localized_GroupName "Group_Base01_EN"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base02/02-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for FR
+//
+
+rls_string Localized_Short_Caption "HW_Base01_FR"
+rls_string Localized_Caption "HelloWorld_Base01_FR"
+rls_long Localized_NumberOfIcon 124
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration_base01_02.mbm"
+
+rls_string Localized_GroupName "Group_Base01_FR"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base02/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for GE
+//
+
+rls_string Localized_Short_Caption "HW_Base01_GE"
+rls_string Localized_Caption "HelloWorld_Base01_GE"
+rls_long Localized_NumberOfIcon 125
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration_base01_03.mbm"
+
+rls_string Localized_GroupName "Group_Base01_GE"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base02/04-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for FR 2
+//
+
+rls_string Localized_Short_Caption "HW_Base01_FR_2"
+rls_string Localized_Caption "HelloWorld_Base01_FR_2"
+rls_long Localized_NumberOfIcon 126
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration_base01_02.mbm"
+
+rls_string Localized_GroupName "Group_Base01_FR2"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base02/rsc-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for RSC
+//
+
+rls_string Localized_Short_Caption "HW_Base01_RSC"
+rls_string Localized_Caption "HelloWorld_Base01_RSC"
+rls_long Localized_NumberOfIcon 127
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration_base01_rsc.mbm"
+
+rls_string Localized_GroupName "Group_Base01_RSC"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base02/swiappregintegration_base02_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration01_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+#ifdef LANGUAGE_01
+ #include "01-strings.rls"
+#elif defined LANGUAGE_02
+ #include "02-strings.rls"
+#elif defined LANGUAGE_03
+ #include "03-strings.rls"
+#elif defined LANGUAGE_04
+ #include "04-strings.rls"
+#else
+ #include "rsc-strings.rls"
+#endif      
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = Localized_Short_Caption;
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = Localized_Caption;
+			number_of_icons = Localized_NumberOfIcon;
+			icon_file = Localized_Iconfile;
+			}
+		};
+
+	group_name = Localized_GroupName;		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/base02/swiappregintegration_base02_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration01_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration01_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x90000004
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "swiappregintegration_base02";
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration_base02_loc";
+	localisable_resource_id = R_LAI;	
+	
+    	hidden = KAppNotHidden;
+    	embeddability = KAppNotEmbeddable;
+    	newfile = KAppDoesNotSupportNewFile;
+    	launch = KAppLaunchInForeground;
+    	group_name = "Group_Base01";    
+    	default_screen_number = 2;
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+PRJ_TESTMMPFILES
+tswiappregintegration01.mmp
+tswiappregintegration02.mmp
+tswiappregintegration_base01.mmp
+tswiappregintegration_base02.mmp
+tswiappregintegration03.mmp
+tswiappregintegration04.mmp
+tswiappregintegration05.mmp
+tswiappregintegration06.mmp
+tswiappregintegration07.mmp
+tswiappregintegration12.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case01/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for UK
+//
+
+rls_string Localized_Short_Caption "HW_EN"
+rls_string Localized_Caption "HelloWorld_EN"
+rls_long Localized_NumberOfIcon 11
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration01_01.mbm"
+
+rls_long View_Uid1 1234
+rls_long View_Screenmode1 01
+rls_string View_Caption1 "View_01_EN"
+rls_long View_NumberOfIcon1 12
+rls_string View_Iconfile1 "z:\\resource\\apps\\swiappregintegration01_01.mbm"
+
+rls_long View_Uid2 1235
+rls_long View_Screenmode2 02
+rls_string View_Caption2 "View_02_EN"
+rls_long View_NumberOfIcon2 13
+rls_string View_Iconfile2 "z:\\resource\\apps\\swiappregintegration01_01.mbm"
+
+rls_string Localized_GroupName "Group_EN"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case01/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for GE
+//
+
+rls_string Localized_Short_Caption "HW_GE"
+rls_string Localized_Caption "HelloWorld_GE"
+rls_long Localized_NumberOfIcon 14
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration01_03.mbm"
+
+rls_long View_Uid1 1236
+rls_long View_Screenmode1 03
+rls_string View_Caption1 "View_01_GE"
+rls_long View_NumberOfIcon1 15
+rls_string View_Iconfile1 "z:\\resource\\apps\\swiappregintegration01_03.mbm"
+
+rls_long View_Uid2 1237
+rls_long View_Screenmode2 04
+rls_string View_Caption2 "View_02_GE"
+rls_long View_NumberOfIcon2 16
+rls_string View_Iconfile2 "z:\\resource\\apps\\swiappregintegration01_03.mbm"
+
+rls_string Localized_GroupName "Group_GE"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case01/24-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for IF
+//
+
+rls_string Localized_Short_Caption "HW_IF"
+rls_string Localized_Caption "HelloWorld_IF"
+rls_long Localized_NumberOfIcon 17
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration01_24.mbm"
+
+rls_long View_Uid1 1238
+rls_long View_Screenmode1 05
+rls_string View_Caption1 "View_01_IF"
+rls_long View_NumberOfIcon1 18
+rls_string View_Iconfile1 "z:\\resource\\apps\\swiappregintegration01_24.mbm"
+
+rls_long View_Uid2 1239
+rls_long View_Screenmode2 06
+rls_string View_Caption2 "View_02_IF"
+rls_long View_NumberOfIcon2 19
+rls_string View_Iconfile2 "z:\\resource\\apps\\swiappregintegration01_24.mbm"
+
+rls_string Localized_GroupName "Group_IF"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case01/rsc-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,35 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for RSC
+//
+
+rls_string Localized_Short_Caption "HW_RSC"
+rls_string Localized_Caption "HelloWorld_RSC"
+rls_long Localized_NumberOfIcon 20
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration01_rsc.mbm"
+
+rls_long View_Uid1 1240
+rls_long View_Screenmode1 07
+rls_string View_Caption1 "View_01_RSC"
+rls_long View_NumberOfIcon1 21
+rls_string View_Iconfile1 "z:\\resource\\apps\\swiappregintegration01_rsc.mbm"
+
+rls_long View_Uid2 1241
+rls_long View_Screenmode2 08
+rls_string View_Caption2 "View_02_RSC"
+rls_long View_NumberOfIcon2 22
+rls_string View_Iconfile2 "z:\\resource\\apps\\swiappregintegration01_rsc.mbm"
+
+rls_string Localized_GroupName "Group_RSC"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case01/swiappregintegration01_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,84 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration01_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+#ifdef LANGUAGE_01
+ #include "01-strings.rls"
+#elif defined LANGUAGE_03
+ #include "03-strings.rls"
+#elif defined LANGUAGE_24
+ #include "24-strings.rls"
+#else
+ #include "rsc-strings.rls"
+#endif      
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = Localized_Short_Caption;
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = Localized_Caption;
+			number_of_icons = Localized_NumberOfIcon;
+			icon_file = Localized_Iconfile;
+			}
+		};                          
+
+	view_list =
+		{
+		VIEW_DATA
+			{
+			uid = View_Uid1;
+			screen_mode = View_Screenmode1;	
+			caption_and_icon =
+				{
+				CAPTION_AND_ICON_INFO
+					{
+					caption = View_Caption1;
+					number_of_icons = View_NumberOfIcon1;
+					icon_file = View_Iconfile1;
+					}
+				};				
+			},
+		VIEW_DATA
+			{
+			uid = View_Uid2;
+			screen_mode = View_Screenmode2;	
+			caption_and_icon =
+				{
+				CAPTION_AND_ICON_INFO
+					{
+					caption = View_Caption2;
+					number_of_icons = View_NumberOfIcon2;
+					icon_file = View_Iconfile2;
+					}
+				};						
+			}
+		};
+	
+	group_name = Localized_GroupName;		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case01/swiappregintegration01_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,98 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration01_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration01_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x90000003
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "swiappregintegration";
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration01_loc";
+	localisable_resource_id = R_LAI;	
+	
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";    
+    default_screen_number = 2;
+    
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="c:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="c:\\temp\\AppName.txt"; }
+        };
+	   
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 0x01020304;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 0x02030405;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_app_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_app_specific_data
+	{
+	name = "Non-localised_resource";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case02/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,20 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for UK - App2
+//
+
+rls_string Localized_Short_Caption "HW_App2_EN"
+rls_string Localized_Caption "HelloWorld_App2_EN"
+rls_long Localized_NumberOfIcon 19
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration02_01.mbm"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case02/rsc-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,20 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for RSC - App2
+//
+
+rls_string Localized_Short_Caption "HW_App2_RSC"
+rls_string Localized_Caption "HelloWorld_App2_RSC"
+rls_long Localized_NumberOfIcon 29
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration02_rsc.mbm"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case02/swiappregintegration02_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration01_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+#ifdef LANGUAGE_01
+ #include "01-strings.rls"
+#else
+ #include "rsc-strings.rls"
+#endif      
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = Localized_Short_Caption;
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = Localized_Caption;
+			number_of_icons = Localized_NumberOfIcon;
+			icon_file = Localized_Iconfile;
+			}
+		};
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case02/swiappregintegration02_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,47 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration02_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration01_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x90000005
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "swiappregintegration02";
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration02_loc";
+	localisable_resource_id = R_LAI;	
+	
+    	hidden = KAppNotHidden;
+	embeddability = KAppNotEmbeddable;
+	newfile = KAppDoesNotSupportNewFile;
+        launch = KAppLaunchInForeground;
+        group_name = "AppGroup02";    
+        default_screen_number = 2;
+    
+        datatype_list = 
+            {
+            DATATYPE { priority=EDataTypePriorityNormal; type="doc/txt"; },
+            DATATYPE { priority=EDataTypePriorityNormal; type="doc/pdf"; }
+            };
+	
+	}
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case03/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,20 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for UK
+//
+
+rls_string Localized_Short_Caption "C03_EN"
+rls_string Localized_Caption "Case03_EN"
+rls_long Localized_NumberOfIcon 111
+rls_string Localized_Iconfile "C:\\Icon\\swiappregintegration03_01.mbm"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case03/24-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,20 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for IF
+//
+
+rls_string Localized_Short_Caption "C03_IF"
+rls_string Localized_Caption "Case03_IF"
+rls_long Localized_NumberOfIcon 112
+rls_string Localized_Iconfile "C:\\Icon\\swiappregintegration03_24.mbm"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case03/rsc-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for RSC
+//
+
+rls_string Localized_Short_Caption "C03_RSC"
+rls_string Localized_Caption "Case03_RSC"
+rls_long Localized_NumberOfIcon 113
+rls_string Localized_Iconfile "C:\\Icon\\swiappregintegration03_rsc.mbm"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case03/swiappregintegration03_loc.RSS	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,96 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration03_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+NAME SER1
+
+#include <uikon.rh>
+#include <appinfo.rh>
+ 
+#ifdef LANGUAGE_01
+ #include "01-strings.rls"
+#elif defined LANGUAGE_24
+ #include "24-strings.rls"
+#else
+ #include "rsc-strings.rls"
+#endif
+ 
+RESOURCE RSS_SIGNATURE				{ }
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = Localized_Short_Caption;
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = Localized_Caption;
+			number_of_icons = Localized_NumberOfIcon;
+			icon_file = Localized_Iconfile;
+			}
+		}; 
+	}
+
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+#ifdef LANGUAGE_01
+RESOURCE SERVICE_NAME r_service_1_specific_data_loc
+	{
+	name = "EN Localised text for service UID 0x01020305";
+	}
+RESOURCE SERVICE_NAME r_service_2_specific_data_loc
+	{
+	name = "EN Localised text for service UID 0x10208DCA";
+	}
+RESOURCE SERVICE_NAME r_app_data_loc
+	{
+	name = "EN Localised text App";
+	}
+#elif defined LANGUAGE_24
+RESOURCE SERVICE_NAME r_service_1_specific_data_loc
+	{
+	name = "IF Localised text for service UID 0x01020305";
+	}
+RESOURCE SERVICE_NAME r_service_2_specific_data_loc
+	{
+	name = "IF Localised text for service UID 0x10208DCA";
+	}
+RESOURCE SERVICE_NAME r_app_data_loc
+	{
+	name = "IF Localised text App";
+	}
+#else
+RESOURCE SERVICE_NAME r_service_1_specific_data_loc
+	{
+	name = "RSC Localised text for service UID 0x01020305";
+	}
+RESOURCE SERVICE_NAME r_service_2_specific_data_loc
+	{
+	name = "RSC Localised text for service UID 0x10208DCA";
+	}
+RESOURCE SERVICE_NAME r_app_data_loc
+	{
+	name = "RSC Localised text App";
+	}
+#endif 
+	
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case03/swiappregintegration03_reg.RSS	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,65 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration03_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration03_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x90000006
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file="swiappregintegration03";
+	localisable_resource_file="\\resource\\apps\\swiappregintegration03_loc";
+	localisable_resource_id=R_LAI;
+	
+	datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+	
+	service_list = 
+		{
+		SERVICE_INFO
+            {
+            uid = 0x01020305;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = R_SERVICE_1_SPECIFIC_DATA_LOC;
+            },
+		SERVICE_INFO
+            {
+            uid = 0x10208DCA;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="doc/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="doc/gif2"; }
+                };   
+            opaque_data = R_SERVICE_2_SPECIFIC_DATA_LOC;
+            }
+		};
+		
+	opaque_data = R_APP_DATA_LOC;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case04/swiappregintegration04_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration04_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = "Some Caption";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case04/swiappregintegration04_noappfile_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration04_noappfile_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration04_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x90000010
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration04_loc";
+	localisable_resource_id = R_LAI;	    
+	}
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case04/swiappregintegration04_noappuid_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration04_noappfile_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration04_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "swiappregintegration04";
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration04_loc";
+	localisable_resource_id = R_LAI;	    
+	}
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case04/swiappregintegration04_wronguid2_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration04_noappfile_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration04_loc.rsg>
+
+UID2 1 // Some Uid2. Not an application reg file
+UID3 0x90000010
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "swiappregintegration04";
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration04_loc";
+	localisable_resource_id = R_LAI;	    
+	}
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case05/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for UK
+//
+
+rls_string Localized_Short_Caption "HW_EN"
+rls_string Localized_Caption "HelloWorld_EN"
+rls_long Localized_NumberOfIcon 123
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_EN"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case05/02-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for FR
+//
+
+rls_string Localized_Short_Caption "HW_FR"
+rls_string Localized_Caption "HelloWorld_FR"
+rls_long Localized_NumberOfIcon 124
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_FR"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case05/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for GE
+//
+
+rls_string Localized_Short_Caption "HW_GE"
+rls_string Localized_Caption "HelloWorld_GE"
+rls_long Localized_NumberOfIcon 125
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_GE"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case05/04-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for FR 2
+//
+
+rls_string Localized_Short_Caption "HW_FR_2"
+rls_string Localized_Caption "HelloWorld_FR_2"
+rls_long Localized_NumberOfIcon 126
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_FR2"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case05/rsc-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for RSC
+//
+
+rls_string Localized_Short_Caption "HW_RSC"
+rls_string Localized_Caption "HelloWorld_RSC"
+rls_long Localized_NumberOfIcon 127
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_RSC"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case05/swiappregintegration_case05_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration_case05_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+#ifdef LANGUAGE_01
+ #include "01-strings.rls"
+#elif defined LANGUAGE_02
+ #include "02-strings.rls"
+#elif defined LANGUAGE_03
+ #include "03-strings.rls"
+#elif defined LANGUAGE_04
+ #include "04-strings.rls"
+#else
+ #include "rsc-strings.rls"
+#endif      
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = Localized_Short_Caption;
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = Localized_Caption;
+			number_of_icons = Localized_NumberOfIcon;
+			icon_file = Localized_Iconfile;
+			}
+		};
+
+	group_name = Localized_GroupName;		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case05/swiappregintegration_case05_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration05_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration_case05_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x90000009
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "swiappregintegration_case05";
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration_case05_loc";
+	localisable_resource_id = R_LAI;	
+	
+    	hidden = KAppNotHidden;
+    	embeddability = KAppNotEmbeddable;
+    	newfile = KAppDoesNotSupportNewFile;
+    	launch = KAppLaunchInForeground;
+    	group_name = "GroupI";    
+    	default_screen_number = 2;
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case05/swiappregintegration_case05_su_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration05_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration_case05_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x90000009
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "swiappregintegration_case05";
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration_case05_loc";
+	localisable_resource_id = R_LAI;	
+	
+    	hidden = KAppNotHidden;
+    	embeddability = KAppNotEmbeddable;
+    	newfile = KAppDoesNotSupportNewFile;
+    	launch = KAppLaunchInForeground;
+    	group_name = "GroupII";    
+    	default_screen_number = 2;
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case06/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for UK
+//
+
+rls_string Localized_Short_Caption "HW_EN"
+rls_string Localized_Caption "HelloWorld_EN"
+rls_long Localized_NumberOfIcon 123
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_EN"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case06/02-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for FR
+//
+
+rls_string Localized_Short_Caption "HW_FR"
+rls_string Localized_Caption "HelloWorld_FR"
+rls_long Localized_NumberOfIcon 124
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_FR"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case06/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for GE
+//
+
+rls_string Localized_Short_Caption "HW_GE"
+rls_string Localized_Caption "HelloWorld_GE"
+rls_long Localized_NumberOfIcon 125
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_GE"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case06/04-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for FR 2
+//
+
+rls_string Localized_Short_Caption "HW_FR_2"
+rls_string Localized_Caption "HelloWorld_FR_2"
+rls_long Localized_NumberOfIcon 126
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_FR2"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case06/rsc-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for RSC
+//
+
+rls_string Localized_Short_Caption "HW_RSC"
+rls_string Localized_Caption "HelloWorld_RSC"
+rls_long Localized_NumberOfIcon 127
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_RSC"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case06/swiappregintegration_case06_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration_case06_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+#ifdef LANGUAGE_01
+ #include "01-strings.rls"
+#elif defined LANGUAGE_02
+ #include "02-strings.rls"
+#elif defined LANGUAGE_03
+ #include "03-strings.rls"
+#elif defined LANGUAGE_04
+ #include "04-strings.rls"
+#else
+ #include "rsc-strings.rls"
+#endif      
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = Localized_Short_Caption;
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = Localized_Caption;
+			number_of_icons = Localized_NumberOfIcon;
+			icon_file = Localized_Iconfile;
+			}
+		};
+
+	group_name = Localized_GroupName;		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case06/swiappregintegration_case06_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration06_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration_case06_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x90000006
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "swiappregintegration_case06";
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration_case06_loc";
+	localisable_resource_id = R_LAI;	
+	
+    	hidden = KAppNotHidden;
+    	embeddability = KAppNotEmbeddable;
+    	newfile = KAppDoesNotSupportNewFile;
+    	launch = KAppLaunchInForeground;
+    	group_name = "GroupI";    
+    	default_screen_number = 2;
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case07/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for UK
+//
+
+rls_string Localized_Short_Caption "HW_EN"
+rls_string Localized_Caption "HelloWorld_EN"
+rls_long Localized_NumberOfIcon 123
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_EN"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case07/02-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for FR
+//
+
+rls_string Localized_Short_Caption "HW_FR"
+rls_string Localized_Caption "HelloWorld_FR"
+rls_long Localized_NumberOfIcon 124
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_FR"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case07/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for GE
+//
+
+rls_string Localized_Short_Caption "HW_GE"
+rls_string Localized_Caption "HelloWorld_GE"
+rls_long Localized_NumberOfIcon 125
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_GE"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case07/04-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for FR 2
+//
+
+rls_string Localized_Short_Caption "HW_FR_2"
+rls_string Localized_Caption "HelloWorld_FR_2"
+rls_long Localized_NumberOfIcon 126
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_FR2"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case07/rsc-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for RSC
+//
+
+rls_string Localized_Short_Caption "HW_RSC"
+rls_string Localized_Caption "HelloWorld_RSC"
+rls_long Localized_NumberOfIcon 127
+rls_string Localized_Iconfile "C:\\resource\\apps\\swiappregintegration.mbm"
+
+rls_string Localized_GroupName "Group_RSC"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case07/swiappregintegration_case07_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration_case07_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+#ifdef LANGUAGE_01
+ #include "01-strings.rls"
+#elif defined LANGUAGE_02
+ #include "02-strings.rls"
+#elif defined LANGUAGE_03
+ #include "03-strings.rls"
+#elif defined LANGUAGE_04
+ #include "04-strings.rls"
+#else
+ #include "rsc-strings.rls"
+#endif      
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = Localized_Short_Caption;
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = Localized_Caption;
+			number_of_icons = Localized_NumberOfIcon;
+			icon_file = Localized_Iconfile;
+			}
+		};
+
+	group_name = Localized_GroupName;		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case07/swiappregintegration_case07_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration07_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration_case07_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x90000007
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "swiappregintegration_case07";
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration_case07_loc";
+	localisable_resource_id = R_LAI;	
+	
+    	hidden = KAppNotHidden;
+    	embeddability = KAppNotEmbeddable;
+    	newfile = KAppDoesNotSupportNewFile;
+    	launch = KAppLaunchInForeground;
+    	group_name = "GroupI";    
+    	default_screen_number = 2;
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case12/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,20 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for UK - App2
+//
+
+rls_string Localized_Short_Caption "HW_App2_EN"
+rls_string Localized_Caption "HelloWorld_App2_EN"
+rls_long Localized_NumberOfIcon 19
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration02_01.mbm"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case12/rsc-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,20 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Strings localised for RSC - App2
+//
+
+rls_string Localized_Short_Caption "HW_App2_RSC"
+rls_string Localized_Caption "HelloWorld_App2_RSC"
+rls_long Localized_NumberOfIcon 29
+rls_string Localized_Iconfile "z:\\resource\\apps\\swiappregintegration02_rsc.mbm"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case12/swiappregintegration12_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration01_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+#ifdef LANGUAGE_01
+ #include "01-strings.rls"
+#else
+ #include "rsc-strings.rls"
+#endif      
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = Localized_Short_Caption;
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = Localized_Caption;
+			number_of_icons = Localized_NumberOfIcon;
+			icon_file = Localized_Iconfile;
+			}
+		};
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/case12/swiappregintegration12_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,47 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file swiappregintegration12_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <swiappregintegration01_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x90000012
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "swiappregintegration12";
+	localisable_resource_file = "C:\\resource\\apps\\swiappregintegration12_loc";
+	localisable_resource_id = R_LAI;	
+	
+    	hidden = KAppNotHidden;
+	embeddability = KAppNotEmbeddable;
+	newfile = KAppDoesNotSupportNewFile;
+        launch = KAppLaunchInForeground;
+        group_name = "AppGroup02";    
+        default_screen_number = 2;
+    
+        datatype_list = 
+            {
+            DATATYPE { priority=EDataTypePriorityNormal; type="doc/txt"; },
+            DATATYPE { priority=EDataTypePriorityNormal; type="doc/pdf"; }
+            };
+	
+	}
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/fotaupdateUDA1_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file fotaupdateUDA1_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+
+UID3 0xA000F16C	// App UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{	
+	app_file = "UDA1";
+	group_name = "UDA1_Group";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/fotaupdateUDA2_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file fotaupdateUDA2_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+
+UID3 0xA000F26C	// App UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{	
+	app_file = "UDA2";
+	group_name = "UDA2_Group";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/fotaupdateapp1_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file fotaupdtateapp1_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+
+UID3 0xA000F56C	// App UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{	
+	app_file = "fota";
+	group_name = "Games";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/fotaupdateapp2_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file fotaupdateapp2_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+
+UID3 0xA000F56C	// App UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{	
+	app_file = "fota";
+	group_name = "Apps";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/fotaupdatestubapp1_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file T_groupname_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+
+UID3 0x2002E5E7	// App UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{	
+	app_file = "T_groupname";
+	group_name = "Group1";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/fotaupdatestubapp2_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file T_groupname_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+
+UID3 0x2002E5E7	// App UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{	
+	app_file = "T_groupname";
+	group_name = "Group2";
+	}
Binary file installationservices/swi/test/testexes/tswiappregintegration/icon3m.bmp has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/swiappregintegration.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* swiappregintegration.cpp
+*
+*/
+
+
+#include <e32base.h>
+#include "swiappregintegration.h"
+
+GLDEF_C TInt E32Main() // main function called by E32
+	{
+	return 1;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/swiappregintegration.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* swiappregintegration.h
+*
+*/
+
+
+#ifndef SWIAPPREGINTEGRATION_H
+#define SWIAPPREGINTEGRATION_H
+
+
+#endif // SWIAPPREGINTEGRATION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration01.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+* swiappregintegration01.mmp for swi application reg integration testing
+*
+*/
+
+TARGET			swiappregintegration.exe
+TARGETTYPE		exe
+
+UID			0x10000007 0x90000003
+VENDORID		0x0
+
+SOURCEPATH		.
+SOURCE			swiappregintegration.cpp
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+START RESOURCE	case01/swiappregintegration01_loc.rss
+HEADER
+TARGETPATH		tswi/tuiscriptadaptors/data/swiappregintegration01
+LANG  SC 01 03 24	
+END
+
+// Application exe registration resource file
+START RESOURCE 	case01/swiappregintegration01_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration01
+END
+
+
+// Icons for UK language version
+START BITMAP	swiappregintegration.mbm
+TARGETPATH		tswi/tuiscriptadaptors/data/swiappregintegration01
+SOURCEPATH		.
+SOURCE			c8,1 icon3m.bmp
+END
+
+START RESOURCE 	fotaupdateapp1_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data
+END
+
+START RESOURCE 	fotaupdateapp2_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data
+END
+
+START RESOURCE 	fotaupdatestubapp1_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data
+END
+
+START RESOURCE 	fotaupdatestubapp2_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data
+END
+
+START RESOURCE 	fotaupdateUDA1_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data
+END
+
+START RESOURCE 	fotaupdateUDA2_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data
+END
+
+LIBRARY			euser.lib
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration02.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+* swiappregintegration02.mmp for swi application reg integration testing
+*
+*/
+
+TARGET			swiappregintegration02.exe
+TARGETTYPE		exe
+
+UID			0x10000007 0x90000005
+VENDORID		0x0
+
+SOURCEPATH		.
+SOURCE			swiappregintegration.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+START RESOURCE	case02/swiappregintegration02_loc.rss
+HEADER
+TARGETPATH		tswi/tuiscriptadaptors/data/swiappregintegration02
+LANG  SC 01
+END
+
+// Application exe registration resource file
+START RESOURCE 	case02/swiappregintegration02_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration02
+END
+
+LIBRARY			euser.lib
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration03.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+* swiappregintegration03.mmp for swi application reg integration testing
+*
+*/
+
+TARGET			swiappregintegration03.exe
+TARGETTYPE		exe
+
+UID			0x10000007 0x90000006
+VENDORID		0x0
+
+SOURCEPATH		.
+SOURCE			swiappregintegration.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+start resource	case03/swiappregintegration03_loc.RSS
+HEADER
+targetpath	tswi/tuiscriptadaptors/data/swiappregintegration03
+lang		sc 01 24
+end
+
+start resource	case03/swiappregintegration03_reg.RSS
+targetpath	tswi/tuiscriptadaptors/data/swiappregintegration03
+end
+
+LIBRARY		euser.lib
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration04.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+* swiappregintegration04.mmp for swi application reg integration testing
+*
+*/
+
+TARGET			swiappregintegration04.exe
+TARGETTYPE		exe
+
+UID				0x10000007 0x90000010
+VENDORID		0x0
+
+SOURCEPATH		.
+SOURCE			swiappregintegration.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+START RESOURCE	case04/swiappregintegration04_loc.rss
+HEADER
+TARGETPATH		tswi/tuiscriptadaptors/data/swiappregintegration04
+LANG  SC
+END
+
+START RESOURCE 	case04/swiappregintegration04_noappfile_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration04
+END
+
+START RESOURCE 	case04/swiappregintegration04_noappuid_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration04
+END
+
+START RESOURCE 	case04/swiappregintegration04_wronguid2_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration04
+END
+
+LIBRARY			euser.lib
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration05.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+* tswiappregintegration_case05.mmp for swi application reg integration testing
+*
+*/
+
+TARGET			swiappregintegration_case05.exe
+TARGETTYPE		exe
+
+UID			0x10000007 0x90000009
+VENDORID		0x0
+
+SOURCEPATH		.
+SOURCE			swiappregintegration.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+START RESOURCE	case05/swiappregintegration_case05_loc.rss
+HEADER
+TARGETPATH		tswi/tuiscriptadaptors/data/swiappregintegration_case05
+LANG  SC 01 02 03 04	
+END
+
+// Application exe registration resource file
+START RESOURCE 	case05/swiappregintegration_case05_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration_case05
+END
+
+// Application exe registration resource file upgraded
+START RESOURCE 	case05/swiappregintegration_case05_su_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration_case05
+END
+
+LIBRARY			euser.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration06.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+* tswiappregintegration_case06.mmp for swi application reg integration testing
+*
+*/
+
+TARGET			swiappregintegration_case06.exe
+TARGETTYPE		exe
+
+UID			0x10000007 0x90000099
+VENDORID		0x0
+
+SOURCEPATH		.
+SOURCE			swiappregintegration.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+START RESOURCE	case06/swiappregintegration_case06_loc.rss
+HEADER
+TARGETPATH		tswi/tuiscriptadaptors/data/swiappregintegration_case06
+LANG  SC 01 02 03 04	
+END
+
+// Application exe registration resource file
+START RESOURCE 	case06/swiappregintegration_case06_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration_case06
+END
+
+
+LIBRARY			euser.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration07.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+* tswiappregintegration_case07.mmp for swi application reg integration testing
+*
+*/
+
+TARGET			swiappregintegration_case07.exe
+TARGETTYPE		exe
+
+UID			0x10000007 0x90000011
+VENDORID		0x0
+
+SOURCEPATH		.
+SOURCE			swiappregintegration.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+START RESOURCE	case07/swiappregintegration_case07_loc.rss
+HEADER
+TARGETPATH		tswi/tuiscriptadaptors/data/swiappregintegration_case07
+LANG  SC 01 02 03 04	
+END
+
+// Application exe registration resource file
+START RESOURCE 	case07/swiappregintegration_case07_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration_case07
+END
+
+
+LIBRARY			euser.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration12.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+* swiappregintegration02.mmp for swi application reg integration testing
+*
+*/
+
+TARGET			swiappregintegration12.exe
+TARGETTYPE		exe
+
+UID			0x10000007 0x90000012
+VENDORID		0x0
+
+SOURCEPATH		.
+SOURCE			swiappregintegration.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+START RESOURCE	case12/swiappregintegration12_loc.rss
+HEADER
+TARGETPATH		tswi/tuiscriptadaptors/data/swiappregintegration12
+LANG  SC 01
+END
+
+// Application exe registration resource file
+START RESOURCE 	case12/swiappregintegration12_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration12
+END
+
+LIBRARY			euser.lib
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration_base01.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+* tswiappregintegration_base01.mmp for swi application reg integration testing
+*
+*/
+
+TARGET			swiappregintegration_base01.exe
+TARGETTYPE		exe
+
+UID			0x10000007 0x90000004
+VENDORID		0x0
+
+SOURCEPATH		.
+SOURCE			swiappregintegration.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+START RESOURCE	base01/swiappregintegration_base01_loc.rss
+HEADER
+TARGETPATH		tswi/tuiscriptadaptors/data/swiappregintegration_base01
+LANG  SC 01 02 03 04	
+END
+
+// Application exe registration resource file
+START RESOURCE 	base01/swiappregintegration_base01_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration_base01
+END
+
+
+
+LIBRARY			euser.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/tswiappregintegration/tswiappregintegration_base02.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+* tswiappregintegration_base02.mmp for swi application reg integration testing
+*
+*/
+
+TARGET			swiappregintegration_base02.exe
+TARGETTYPE		exe
+
+UID			0x10000007 0x90000004
+VENDORID		0x0
+
+SOURCEPATH		.
+SOURCE			swiappregintegration.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+START RESOURCE	base02/swiappregintegration_base02_loc.rss
+HEADER
+TARGETPATH		tswi/tuiscriptadaptors/data/swiappregintegration_base02
+LANG  SC	
+END
+
+// Application exe registration resource file
+START RESOURCE 	base02/swiappregintegration_base02_reg.rss
+TARGETPATH	tswi/tuiscriptadaptors/data/swiappregintegration_base02
+END
+
+
+
+LIBRARY			euser.lib
+SMPSAFE
--- a/installationservices/swi/test/trevocation/makeAllInteg.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/trevocation/makeAllInteg.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -32,6 +32,17 @@
 makesis ocsp_03.pkg
 makesis ocsp_04.pkg
 makesis ocsp_05.pkg
+makesis signingtest.pkg  certifiedsignedval.sis
+makesis signingtest.pkg  certifiedsignedVeriSignval.sis
+makesis signingtest.pkg  expresssignedval.sis
+makesis signingtest.pkg  allsignedval.sis
+makesis signingtest.pkg  selfsignedval.sis
+makesis signingtest.pkg  certifiedsignedrev.sis
+makesis signingtest.pkg  certifiedsignedVeriSignrev.sis
+makesis signingtest.pkg  expresssignedrev.sis
+makesis signingtest.pkg  allsignedrev.sis
+makesis signingtest.pkg  selfsignedrev.sis
+
 
 REM Embedded Package file
 makesis ocsprevocation-sub1.pkg
@@ -54,6 +65,16 @@
 makesis ocsp_02.pkg
 makesis ocsp_03.pkg
 makesis ocsp_04.pkg
+makesis signingtest.pkg  certifiedsignedval.sis
+makesis signingtest.pkg  certifiedsignedVeriSignval.sis
+makesis signingtest.pkg  expresssignedval.sis
+makesis signingtest.pkg  allsignedval.sis
+makesis signingtest.pkg  selfsignedval.sis
+makesis signingtest.pkg  certifiedsignedrev.sis
+makesis signingtest.pkg  certifiedsignedVeriSignrev.sis
+makesis signingtest.pkg  expresssignedrev.sis
+makesis signingtest.pkg  allsignedrev.sis
+makesis signingtest.pkg  selfsignedrev.sis
 
 REM Embedded Package file
 makesis ocsprevocation-sub1.pkg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/trevocation/pkgInteg/armv5/signingtest.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; A simple package that installs one executable with no other checks
+
+;Languages
+&EN
+
+;Header
+#{"test signing package "}, (0x88001114), 1, 2, 3,TYPE=SA
+
+%{"Signing Package"}
+:"Unique Vendor Name"
+
+"ocsp_03.pkg"-"!:\test765\signedFileInstalled.txt";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/trevocation/pkgInteg/winscw/signingtest.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; A simple package that installs one executable with no other checks
+
+;Languages
+&EN
+
+;Header
+#{"test signing package "}, (0x88001114), 1, 2, 3,TYPE=SA
+
+%{"Signing Package"}
+:"Unique Vendor Name"
+
+"ocsp_03.pkg"-"!:\test765\signedFileInstalled.txt";
--- a/installationservices/swi/test/trevocation/scripts/tRevocation.ini	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/trevocation/scripts/tRevocation.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -569,4 +569,198 @@
 script=z:\tswi\trevocation\scripts\uninstall.xml
 numnonexist=2
 nonexist0=c:\Documents\def092126\backlight.txt
-nonexist1=c:\Documents\def092126\col.txt
\ No newline at end of file
+nonexist1=c:\Documents\def092126\col.txt
+
+[CenRepEnableExpSign]
+uid=2002CFF6
+cenrepkey=1
+cenrepvalue=1
+
+[CenRepDisableExpSign]
+uid=2002CFF6
+cenrepkey=1
+cenrepvalue=0
+
+[CenRepEnableSelfSign]
+uid=2002CFF6
+cenrepkey=2
+cenrepvalue=1
+
+[CenRepDisableSelfSign]
+uid=2002CFF6
+cenrepkey=2
+cenrepvalue=0
+
+[CenRepEnableCertifiedSign]
+uid=2002CFF6
+cenrepkey=3
+cenrepvalue=1
+
+[CenRepDisableCertifiedSign]
+uid=2002CFF6
+cenrepkey=3
+cenrepvalue=0
+
+[CenRepEnableCertifiedVeriExpSign]
+uid=2002CFF6
+cenrepkey=4
+cenrepvalue=1
+
+[CenRepDisableCertifiedVeriSign]
+uid=2002CFF6
+cenrepkey=4
+cenrepvalue=0
+
+[API-SEC-SWI-REVOCATION-I-0047]
+sis=z:\tswi\trevocation\data\certifiedsignedval.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspNotPerformed
+isTrusted = false
+
+[API-SEC-SWI-REVOCATION-I-0048]
+sis=z:\tswi\trevocation\data\certifiedsignedval.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspGood
+isTrusted = true
+
+[API-SEC-SWI-REVOCATION-I-0049]
+sis=z:\tswi\trevocation\data\certifiedsignedVeriSignrev.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspTransient
+isTrusted = true
+
+[API-SEC-SWI-REVOCATION-I-0047-U]
+uid=88001114
+script=z:\tswi\trevocation\scripts\uninstall.xml
+
+[API-SEC-SWI-REVOCATION-I-0050]
+sis=z:\tswi\trevocation\data\expresssignedval.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspNotPerformed
+isTrusted = false
+
+[API-SEC-SWI-REVOCATION-I-0051]
+sis=z:\tswi\trevocation\data\expresssignedval.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspGood
+isTrusted = true
+
+[API-SEC-SWI-REVOCATION-I-0052]
+sis=z:\tswi\trevocation\data\expresssignedrev.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspTransient
+isTrusted = true
+
+[API-SEC-SWI-REVOCATION-I-0053]
+sis=z:\tswi\trevocation\data\selfsignedval.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidated
+revocationStatus = EOcspNotPerformed
+isTrusted = false
+
+[API-SEC-SWI-REVOCATION-I-0054]
+sis=z:\tswi\trevocation\data\selfsignedval.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidated
+revocationStatus = EOcspUnknown
+isTrusted = false
+
+[API-SEC-SWI-REVOCATION-I-0055]
+sis=z:\tswi\trevocation\data\selfsignedrev.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspTransient
+isTrusted = false
+
+[API-SEC-SWI-REVOCATION-I-0056]
+sis=z:\tswi\trevocation\data\certifiedsignedVeriSignval.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspNotPerformed
+isTrusted = false
+
+[API-SEC-SWI-REVOCATION-I-0057]
+sis=z:\tswi\trevocation\data\certifiedsignedVeriSignval.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspGood
+isTrusted = true
+
+[API-SEC-SWI-REVOCATION-I-0058]
+sis=z:\tswi\trevocation\data\certifiedsignedVeriSignrev.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspTransient
+isTrusted = true
+
+[API-SEC-SWI-REVOCATION-I-0059]
+sis=z:\tswi\trevocation\data\allsignedval.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspGood
+isTrusted = true
+
+[API-SEC-SWI-REVOCATION-I-0060]
+sis=z:\tswi\trevocation\data\allsignedval.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspGood
+isTrusted = true
+
+[API-SEC-SWI-REVOCATION-I-0061]
+sis=z:\tswi\trevocation\data\allsignedrev.sis
+script=z:\tswi\trevocation\scripts\simple_ocsp.xml
+ocsp_flag=1
+ocsp_uri=http://cam-ocsptest01.intra:19024/
+UID1 = 88001114
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspTransient
+isTrusted = true
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/trevocation/scripts/trevocationocsp_emulator.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,268 @@
+//
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+PRINT Revocation tests...
+
+LOAD_SUITE tRevocation
+LOAD_SUITE tuiscriptadaptors
+LOAD_SUITE tSisRegistryTest
+
+/! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0047
+//! @SYMTestCaseDesc		Tries to install the sis with Ceritfied Sign check disabled.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with valid certified sign cert. 
+//! @SYMTestExpectedResults	Install should complete without any error/panic and ocsp check should not be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0047
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepDisableCertifiedSign
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047
+RUN_TEST_STEP_RESULT 0 100 	tRevocation SISREGCHECK	z:\tswi\tRevocation\scripts\trevocation.ini  API-SEC-SWI-REVOCATION-I-0047
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0047
+
+
+//! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0048
+//! @SYMTestCaseDesc		Tries to install the sis with Ceritfied Sign check Enabled and with Valid Ceritfied Sign Certificate.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with valid certified sign cert. 
+//! @SYMTestExpectedResults	Install should complete without any error/panic and ocsp check should be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0048
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableCertifiedSign
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0048
+RUN_TEST_STEP_RESULT 0 100 	tRevocation SISREGCHECK	z:\tswi\tRevocation\scripts\trevocation.ini  API-SEC-SWI-REVOCATION-I-0048
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0048
+
+
+//! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0049
+//! @SYMTestCaseDesc		Tries to install the sis with Ceritfied Sign check Enabled and with Revoked Ceritfied Sign Certificate.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with revoked certified sign cert. 
+//! @SYMTestExpectedResults	Install should abort with error and ocsp check should be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0049
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableCertifiedSign
+RUN_TEST_STEP_RESULT -3 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0049
+RUN_TEST_STEP_RESULT -1 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0049
+
+/! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0050
+//! @SYMTestCaseDesc		Tries to install the sis with Expressed Sign check disabled.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with valid Expressed sign cert. 
+//! @SYMTestExpectedResults	Install should complete without any error/panic and ocsp check should not be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0050
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepDisableExpSign
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0050
+RUN_TEST_STEP_RESULT 0 100 	tRevocation SISREGCHECK	z:\tswi\tRevocation\scripts\trevocation.ini  API-SEC-SWI-REVOCATION-I-0050
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0050
+
+
+//! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0051
+//! @SYMTestCaseDesc		Tries to install the sis with Expressed Sign check Enabled and with Valid Expressed Sign Certificate.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with valid Expressed sign cert. 
+//! @SYMTestExpectedResults	Install should complete without any error/panic and ocsp check should be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0051
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableExpSign
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0051
+RUN_TEST_STEP_RESULT 0 100 	tRevocation SISREGCHECK	z:\tswi\tRevocation\scripts\trevocation.ini  API-SEC-SWI-REVOCATION-I-0051
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0051
+
+
+//! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0052
+//! @SYMTestCaseDesc		Tries to install the sis with Expressed Sign check Enabled and with Revoked Expressed Sign Certificate.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with revoked Expressed sign cert. 
+//! @SYMTestExpectedResults	Install should abort with error and ocsp check should be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0052
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableExpSign
+RUN_TEST_STEP_RESULT -3 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0052
+RUN_TEST_STEP_RESULT -1 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0052
+
+/! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0053
+//! @SYMTestCaseDesc		Tries to install the sis with Self Sign check disabled.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with valid Self sign cert. 
+//! @SYMTestExpectedResults	Install should complete without any error/panic and ocsp check should not be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0053
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepDisableSelfSign
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0053
+RUN_TEST_STEP_RESULT 0 100 	tRevocation SISREGCHECK	z:\tswi\tRevocation\scripts\trevocation.ini  API-SEC-SWI-REVOCATION-I-0053
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0053
+
+
+//! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0054
+//! @SYMTestCaseDesc		Tries to install the sis with Self Sign check Enabled and with Valid Self Sign Certificate.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with valid Self sign cert. 
+//! @SYMTestExpectedResults	Install should complete without any error/panic and ocsp check should be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0054
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableSelfSign
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0054
+RUN_TEST_STEP_RESULT 0 100 	tRevocation SISREGCHECK	z:\tswi\tRevocation\scripts\trevocation.ini  API-SEC-SWI-REVOCATION-I-0054
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0054
+
+
+//! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0055
+//! @SYMTestCaseDesc		Tries to install the sis with Self Sign check Enabled and with Revoked Self Sign Certificate.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with revoked Self sign cert. 
+//! @SYMTestExpectedResults	Install should abort with error and ocsp check should be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0055
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableSelfSign
+RUN_TEST_STEP_RESULT -3 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0055
+RUN_TEST_STEP_RESULT -1 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0055
+
+/! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0056
+//! @SYMTestCaseDesc		Tries to install the sis with VeriSign Sign check disabled.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with valid VeriSign sign cert. 
+//! @SYMTestExpectedResults	Install should complete without any error/panic and ocsp check should not be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0056
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepDisableCertifiedVeriSign
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0056
+RUN_TEST_STEP_RESULT 0 100 	tRevocation SISREGCHECK	z:\tswi\tRevocation\scripts\trevocation.ini  API-SEC-SWI-REVOCATION-I-0056
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0056
+
+
+//! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0057
+//! @SYMTestCaseDesc		Tries to install the sis with VeriSign Sign check Enabled and with Valid VeriSign Sign Certificate.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with valid VeriSign sign cert. 
+//! @SYMTestExpectedResults	Install should complete without any error/panic and ocsp check should be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0057
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableCertifiedVeriExpSign
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0057
+RUN_TEST_STEP_RESULT 0 100 	tRevocation SISREGCHECK	z:\tswi\tRevocation\scripts\trevocation.ini  API-SEC-SWI-REVOCATION-I-0057
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0057
+
+
+//! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0058
+//! @SYMTestCaseDesc		Tries to install the sis with VeriSign Sign check Enabled and with Revoked VeriSign Sign Certificate.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with revoked VeriSign sign cert. 
+//! @SYMTestExpectedResults	Install should abort with error and ocsp check should be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0058
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableCertifiedVeriExpSign
+RUN_TEST_STEP_RESULT -3 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0058
+RUN_TEST_STEP_RESULT -1 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0058
+
+/! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0059
+//! @SYMTestCaseDesc		Tries to install the sis with VeriSign Sign check disabled.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with valid VeriSign sign cert. 
+//! @SYMTestExpectedResults	Install should complete without any error and ocsp check should not be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0059
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepDisableExpSign
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepDisableSelfSign
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepDisableCertifiedSign
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepDisableCertifiedVeriSign
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0059
+RUN_TEST_STEP_RESULT 0 100 	tRevocation SISREGCHECK	z:\tswi\tRevocation\scripts\trevocation.ini  API-SEC-SWI-REVOCATION-I-0059
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0059
+
+
+//! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0060
+//! @SYMTestCaseDesc		Tries to install the sis with VeriSign Sign check Enabled and with Valid VeriSign Sign Certificate.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with valid VeriSign sign cert. 
+//! @SYMTestExpectedResults	Install should complete without any error/panic and ocsp check should be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0060
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableExpSign
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableSelfSign
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableCertifiedSign
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableCertifiedVeriExpSign
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0060
+RUN_TEST_STEP_RESULT 0 100 	tRevocation SISREGCHECK	z:\tswi\tRevocation\scripts\trevocation.ini  API-SEC-SWI-REVOCATION-I-0060
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0060
+
+
+//! @SYMTestCaseID		API-SEC-SWI-REVOCATION-I-0061
+//! @SYMTestCaseDesc		Tries to install the sis with VeriSign Sign check Enabled and with Revoked VeriSign Sign Certificate.
+//! @SYMDEF  			None
+//! @SYMTestPriority		High
+//! @SYMTestActions 		Tries to install the sis signed with revoked VeriSign sign cert. 
+//! @SYMTestExpectedResults	Install should abort with error and ocsp check should be performed.
+//! @SYMDevelopedForRelease 	SymTB10.1
+
+START_TESTCASE API-SEC-SWI-REVOCATION-I-0061
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableExpSign
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableSelfSign
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableCertifiedSign
+RUN_TEST_STEP 100 tSisRegistryTest SetCenRepSetting z:\tswi\trevocation\scripts\trevocation.ini CenRepEnableCertifiedVeriExpSign
+RUN_TEST_STEP_RESULT -3 100 tuiscriptadaptors InstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0061
+RUN_TEST_STEP_RESULT -1 100 tuiscriptadaptors UninstallStep z:\tswi\trevocation\scripts\trevocation.ini API-SEC-SWI-REVOCATION-I-0047-U
+END_TESTCASE API-SEC-SWI-REVOCATION-I-0061
+
+// Ensure that SWIS shuts down after the above tests to make sure heap checks run
+RUN_TEST_STEP 5 tuiscriptadaptors SwisNotRunning
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/trevocation/scripts/trevocationocsp_emulator_post.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+@rem
+@rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+REM Copy the files required to run the script
+copy \epoc32\release\winscw\udeb\z\tswi\trevocation\data\swicertstore.dat	\epoc32\release\winscw\udeb\z\resource\swicertstore.dat
+copy \epoc32\release\winscw\udeb\z\tswi\trevocation\data\swicertstore.dat	\epoc32\release\winscw\urel\z\resource\swicertstore.dat
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/trevocation/scripts/trevocationocsp_emulator_pre.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+@rem
+@rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+REM Copy the files required to run the script
+copy \epoc32\release\winscw\udeb\z\resource\swicertstore.dat 		\epoc32\release\winscw\udeb\z\tswi\trevocation\data\swicertstore.dat
+copy \epoc32\winscw\c\tswi\trevocation\swicertstore.dat		\epoc32\release\winscw\udeb\z\resource\swicertstore.dat
+copy \epoc32\winscw\c\tswi\trevocation\swicertstore.dat		\epoc32\release\winscw\urel\z\resource\swicertstore.dat
--- a/installationservices/swi/test/trevocation/signFiles.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/trevocation/signFiles.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -29,6 +29,17 @@
 REM Sign with certificate A 
 signsis sisInteg\%PLATFORM%\ocsprevocation.sis      sisInteg\%PLATFORM%\ocsprevocation.tmp %CERT_PATH%\ocsp\responder1\certTrev2.cert.pem %CERT_PATH%\ocsp\responder1\certTrev2.key.pem
 
+REM Sign with Express / Certified and VeriSign certs  
+signsis sisInteg\%PLATFORM%\certifiedsignedval.sis			sisInteg\%PLATFORM%\certifiedsignedval.tmp %CERT_PATH%\ocsp\expressandcertifiedsignedCert\AppInsCertifiedSignValidCert.pem %CERT_PATH%\ocsp\expressandcertifiedsignedCert\AppInsCertifiedSignValidPvtKey.key
+signsis sisInteg\%PLATFORM%\certifiedsignedVeriSignval.sis 		sisInteg\%PLATFORM%\certifiedsignedVeriSignval.tmp %CERT_PATH%\ocsp\expressandcertifiedsignedCert\AppInsCertifiedVeriSignValidCert.pem %CERT_PATH%\ocsp\expressandcertifiedsignedCert\AppInsCertifiedVeriSignValidPvtKey.key
+signsis sisInteg\%PLATFORM%\expresssignedval.sis			sisInteg\%PLATFORM%\expresssignedval.tmp %CERT_PATH%\ocsp\expressandcertifiedsignedCert\AppInsExpressValidCert.pem %CERT_PATH%\ocsp\expressandcertifiedsignedCert\AppInsExpressValidPvtKey.key
+signsis sisInteg\%PLATFORM%\allsignedval.sis				sisInteg\%PLATFORM%\allsignedval.tmp %CERT_PATH%\ocsp\expressandcertifiedsignedCert\AppInsAllSignValidCert.pem %CERT_PATH%\ocsp\expressandcertifiedsignedCert\AppInsAllSignValidPvtKey.key
+signsis sisInteg\%PLATFORM%\selfsignedval.sis				sisInteg\%PLATFORM%\selfsignedval.tmp %CERT_PATH%\ocsp\expressandcertifiedsignedCert\AppInsSelfSignValidCert.pem %CERT_PATH%\ocsp\expressandcertifiedsignedCert\AppInsSelfSignValidPvtKey.key
+signsis sisInteg\%PLATFORM%\certifiedsignedrev.sis			sisInteg\%PLATFORM%\certifiedsignedrev.tmp %CERT_PATH%\ocsp\expressandcertifiedsignedCert\Revoked\AppInsCertifiedRevokedCert.pem %CERT_PATH%\ocsp\expressandcertifiedsignedCert\Revoked\AppInsCertifiedRevokedPvtKey.key
+signsis sisInteg\%PLATFORM%\certifiedsignedVeriSignrev.sis 		sisInteg\%PLATFORM%\certifiedsignedVeriSignrev.tmp %CERT_PATH%\ocsp\expressandcertifiedsignedCert\Revoked\AppInsCertifiedVeriSignRevokedCert.pem %CERT_PATH%\ocsp\expressandcertifiedsignedCert\Revoked\AppInsCertifiedVeriSignRevokedPvtKey.key
+signsis sisInteg\%PLATFORM%\expresssignedrev.sis			sisInteg\%PLATFORM%\expresssignedrev.tmp %CERT_PATH%\ocsp\expressandcertifiedsignedCert\Revoked\AppInsExpressRevokedCert.pem %CERT_PATH%\ocsp\expressandcertifiedsignedCert\Revoked\AppInsExpressRevokedPvtKey.key
+signsis sisInteg\%PLATFORM%\allsignedrev.sis				sisInteg\%PLATFORM%\allsignedrev.tmp %CERT_PATH%\ocsp\expressandcertifiedsignedCert\Revoked\AppInsAllSignRevokedCert.pem %CERT_PATH%\ocsp\expressandcertifiedsignedCert\Revoked\AppInsAllSignRevokedPvtKey.key
+signsis sisInteg\%PLATFORM%\selfsignedrev.sis				sisInteg\%PLATFORM%\selfsignedrev.tmp %CERT_PATH%\ocsp\expressandcertifiedsignedCert\Revoked\AppInsSelfSignRevokedCert.pem %CERT_PATH%\ocsp\expressandcertifiedsignedCert\Revoked\AppInsSelfSignRevokedPvtKey.key
 
 REM overwrite the original sis files
 cd sisInteg\%PLATFORM%
@@ -37,6 +48,16 @@
 move ocsp_03.tmp ocsp_03.sis
 move ocsp_04.tmp ocsp_04.sis
 move ocsprevocation.tmp		 ocsprevocation.sis
+move certifiedsignedval.tmp	 certifiedsignedval.sis
+move certifiedsignedVeriSignval.tmp certifiedsignedVeriSignval.sis
+move expresssignedval.tmp		 expresssignedval.sis
+move allsignedval.tmp		 allsignedval.sis
+move selfsignedval.tmp		 selfsignedval.sis
+move certifiedsignedrev.tmp	 certifiedsignedrev.sis
+move certifiedsignedVeriSignrev.tmp certifiedsignedVeriSignrev.sis
+move expresssignedrev.tmp		 expresssignedrev.sis
+move allsignedrev.tmp		 allsignedrev.sis
+move selfsignedrev.tmp		 selfsignedrev.sis
 
 REM Return to current directory
 cd ..\..
Binary file installationservices/swi/test/trevocation/sisInteg/armv5/allsignedrev.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/armv5/allsignedval.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/armv5/certifiedsignedrev.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/armv5/certifiedsignedval.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/armv5/certifiedsignedverisignrev.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/armv5/certifiedsignedverisignval.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/armv5/expresssignedrev.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/armv5/expresssignedval.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/armv5/selfsignedrev.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/armv5/selfsignedval.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/winscw/allsignedrev.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/winscw/allsignedval.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/winscw/certifiedsignedrev.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/winscw/certifiedsignedval.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/winscw/certifiedsignedverisignrev.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/winscw/certifiedsignedverisignval.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/winscw/expresssignedrev.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/winscw/expresssignedval.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/winscw/selfsignedrev.sis has changed
Binary file installationservices/swi/test/trevocation/sisInteg/winscw/selfsignedval.sis has changed
Binary file installationservices/swi/test/trevocation/swicertstore.dat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tsisfile/data/embedselfsign.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; A SISX file, with 1 embedded self signed SISX files
+
+;Languages
+&EN
+
+;Header
+#{"embedselfsign"}, (0x8000AB05), 1, 2, 3
+
+%{"Vendor"}
+:"Unique Vendor Name"
+
+;Embedded component
+@"files\2-2selfsigneddata.SIS",(0x8000A005)
+
+;Ordinary file to selected drive
+"text\backlight.txt"-"!:\Documents\def053177\backlight.txt"
--- a/installationservices/swi/test/tsisfile/data/filebapu.pkg	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisfile/data/filebapu.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -20,4 +20,4 @@
 :"Crypto Services"
 %{"Crypto Services"}
 
-; Delivers no files. Just a test base package.
\ No newline at end of file
+; Delivers no files. Just a test base package.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tsisfile/data/files/2-2selfsigneddata.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+
+&EN
+
+#{"2.2 Self Signed, Installing data to public areas of the device"},(0x8000A005),1,2,3
+
+%{"Symbian Software Ltd."}
+
+:"Symbian Software Ltd."
+
+"files\option1.txt"-"c:\tswi\tautomaticsigning\install\2-2data.txt"
+
--- a/installationservices/swi/test/tsisfile/data/makeall.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisfile/data/makeall.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -24,6 +24,8 @@
 if not exist \epoc32\winscw\c\system\install 		 mkdir \epoc32\winscw\c\system\install
 if not exist \epoc32\winscw\c\PlatformTest	 	 mkdir \epoc32\winscw\c\PlatformTest
 
+call /epoc32/tools/createsis create -pass 1234 files\2-2selfsigneddata.pkg
+
 ECHO Running makesis on all package files and copying them to their destination
 perl -S makeandsign.pl
 
--- a/installationservices/swi/test/tsisfile/data/signedsis/Howto generate certificate chains.txt	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-This file replaces the old generate_certs.bat, which provided incorrect information.
-
-To generate certificate chains using the existing roots, you must issue some subset of the following commands:
-
-For DSA Key pairs, first generate a set of DSA key parameters:
-# openssl dsaparam -out dsaparam.pem 512
-
-Next, generate a certificate request: (this assumes you are using one of the existing config files)
-
-For DSA Certificates:
-# openssl req -newkey dsa:dsaparams.pem -nodes -out dsa.req -keyout dsa.key -config dsa.config -days 3650
-
-For RSA Certificates:
-# openssl req -newkey rsa:512 -nodes -out rsa.req -keyout rsa.key -config rsa.config -days 3650
-
-Finally, generate a signed certificate from the request:
-
-# openssl x509 -req -in <request file> -out cert.cer -CA <signing certificate> -CAKey <signing key> -CASerial cert.srl -CAcreateserial -days 3650 -extfile <config file> -extensions v3_ca
-
-For intermediate certificates for use in SWIS, the extensions must be present as defined in this config section:
-
-[v3_ca]
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-basicConstraints=critical,CA:TRUE, pathlen:5
-keyUsage=critical,keyCertSign
-
-If these extensions are not present, and installation signed with the resulting certificate as anything other than the end entity will fail.
\ No newline at end of file
--- a/installationservices/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/How to  create root certficate.txt	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-# To create a RSA root cerificate need to following two steps:
-
-1. Create a private key for the CA:
-
-openssl req -nodes -newkey rsa:1024 -keyout <key file> -out <CA req file> -config <config file>
-The config file is input parameter, and should be present in advance.
-
-Example: openssl req -nodes -newkey rsa:1024 -keyout cakey.pem -out careq.pem -config rsa.config
-
-2. Create the CA certificate:
-
-openssl x509 -req -in <CA req> -extfile <config file> -extensions v3_ca -signkey <key file> -out <CA cert file>  -days 3650
-
-Example: openssl x509 -req -in careq.pem -extfile rsa.config -extensions v3_ca -signkey cakey.pem -out cacert.pem  -days 3650
-
--- a/installationservices/swi/test/tsisfile/data/signedsis/sucert/How to  create root certficate.txt	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-# To create a RSA root cerificate need to following two steps:
-
-1. Create a private key for the CA:
-
-openssl req -nodes -newkey rsa:1024 -keyout <key file> -out <CA req file> -config <config file>
-The config file is input parameter, and should be present in advance.
-
-Example: openssl req -nodes -newkey rsa:1024 -keyout cakey.pem -out careq.pem -config rsa.config
-
-2. Create the CA certificate:
-
-openssl x509 -req -in <CA req> -extfile <config file> -extensions v3_ca -signkey <key file> -out <CA cert file>  -days 3650
-
-Example: openssl x509 -req -in careq.pem -extfile rsa.config -extensions v3_ca -signkey cakey.pem -out cacert.pem  -days 3650
-
-
-1. 
-
-openssl req -nodes -newkey rsa:1024 -keyout cakey.pem -out careq.pem -config rsa.config
-
-
-2.
-
-openssl x509 -req -in careq.pem -extfile rsa.config -extensions v3_ca -signkey cakey.pem -out symbiantestallcapabilitiesca.pem  -days 3650
\ No newline at end of file
--- a/installationservices/swi/test/tsisfile/data/signedsis/symbiantestallcapabilitiesca/How to  create root certficate.txt	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-# To create a RSA root cerificate need to following two steps:
-
-1. Create a private key for the CA:
-
-openssl req -nodes -newkey rsa:1024 -keyout <key file> -out <CA req file> -config <config file>
-The config file is input parameter, and should be present in advance.
-
-Example: openssl req -nodes -newkey rsa:1024 -keyout cakey.pem -out careq.pem -config rsa.config
-
-2. Create the CA certificate:
-
-openssl x509 -req -in <CA req> -extfile <config file> -extensions v3_ca -signkey <key file> -out <CA cert file>  -days 3650
-
-Example: openssl x509 -req -in careq.pem -extfile rsa.config -extensions v3_ca -signkey cakey.pem -out cacert.pem  -days 3650
-
-
-1. 
-
-openssl req -nodes -newkey rsa:1024 -keyout cakey.pem -out careq.pem -config rsa.config
-
-
-2.
-
-openssl x509 -req -in careq.pem -extfile rsa.config -extensions v3_ca -signkey cakey.pem -out symbiantestallcapabilitiesca.pem  -days 3650
\ No newline at end of file
--- a/installationservices/swi/test/tsisfile/steps/basestep.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisfile/steps/basestep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
--- a/installationservices/swi/test/tsishelper/tsishelperserver.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsishelper/tsishelperserver.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -48,5 +48,8 @@
 LIBRARY			testexecutelogclient.lib
 LIBRARY			sishelper.lib
 LIBRARY			flogger.lib
-LIBRARY 			estor.lib
+LIBRARY 		estor.lib
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+LIBRARY scrclient.lib
+#endif
 SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tsisregistrytest/Scripts/batchfiles/tsisregistrytest_tcb_post.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,24 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+
+del /s /f /q  \epoc32\release\winscw\udeb\z\system\install\addappregdata.sis
+del /s /f /q  \epoc32\release\winscw\udeb\z\private\10003a3f\apps\swiappregintegration_base02.rsc
+del /s /f /q  \epoc32\release\winscw\udeb\z\private\10003a3f\apps\swiappregintegration12_reg.rsc
+
+
+del /s /f /q  \epoc32\release\winscw\urel\z\system\install\addappregdata.sis
+del /s /f /q  \epoc32\release\winscw\urel\z\private\10003a3f\apps\swiappregintegration_base02.rsc
+del /s /f /q  \epoc32\release\winscw\urel\z\private\10003a3f\apps\swiappregintegration12_reg.rsc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tsisregistrytest/Scripts/batchfiles/tsisregistrytest_tcb_pre.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,24 @@
+@rem
+@rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+
+copy /y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\swiappregintegration_base02\swiappregintegration_base02_reg.rsc 		\epoc32\release\winscw\udeb\z\private\10003a3f\apps\swiappregintegration_base02.rsc
+copy /y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\swiappregintegration12\swiappregintegration12_reg.rsc 		\epoc32\release\winscw\udeb\z\private\10003a3f\apps\swiappregintegration12_reg.rsc
+copy /y \epoc32\winscw\c\tswi\tsisregistrytest\scripts\data\addappregdata.sis	\epoc32\release\winscw\udeb\z\system\install\addappregdata.sis
+
+
+copy /y \epoc32\release\winscw\urel\z\tswi\tuiscriptadaptors\data\swiappregintegration_base02\swiappregintegration_base02_reg.rsc 		\epoc32\release\winscw\urel\z\private\10003a3f\apps\swiappregintegration_base02.rsc
+copy /y \epoc32\release\winscw\urel\z\tswi\tuiscriptadaptors\data\swiappregintegration12\swiappregintegration12_reg.rsc 		\epoc32\release\winscw\urel\z\private\10003a3f\apps\swiappregintegration12_reg.rsc
+copy /y \epoc32\winscw\c\tswi\tsisregistrytest\scripts\data\addappregdata.sis	\epoc32\release\winscw\urel\z\system\install\addappregdata.sis
Binary file installationservices/swi/test/tsisregistrytest/Scripts/data/addappregdata.sis has changed
--- a/installationservices/swi/test/tsisregistrytest/Scripts/removeregistrytestdata.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest/Scripts/removeregistrytestdata.script	Tue Aug 31 15:21:33 2010 +0300
@@ -193,7 +193,7 @@
 
 START_TESTCASE API-SEC-SISREGISTRYREMOVETESTDATA-0011
 
-RUN_TEST_STEP 2000 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini u_1500files
+RUN_TEST_STEP 4000 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini u_1500files
 
 END_TESTCASE API-SEC-SISREGISTRYREMOVETESTDATA-0011
 
--- a/installationservices/swi/test/tsisregistrytest/Scripts/tsisregistrytest.ini	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest/Scripts/tsisregistrytest.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -291,3 +291,45 @@
 pkgMajor=1
 pkgMinor=5
 pkgBuild=9
+
+[AddAppRegInfo_apparc_folder]
+regFileName = c:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+
+[AddAppRegInfo_apparc_folder_C_Drive]
+appDataExists = ETrue
+appFileName = C:\sys\bin\swiappregintegration02.exe
+appUid = 90000005
+
+[AddAppRegInfo_apparc_folder_No_Data]
+regFileName = c:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+appDataExists = EFalse
+appUid = 90000005
+
+[AddAppRegInfo_apparc_folder_base01]
+regFileName = c:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+
+[AddAppRegInfo_apparc_folder_C_Drive_base01]
+appDataExists = ETrue
+appFileName = C:\sys\bin\swiappregintegration_base01.exe 
+appUid = 90000004
+
+[AddAppRegInfo_apparc_folder_z_Drive]
+appDataExists = ETrue
+appFileName = Z:\sys\bin\swiappregintegration_base02.exe 
+appUid = 90000004
+
+[AddAppRegInfo_apparc_folder_eclipse_stub]
+regFileName = c:\private\10003a3f\import\apps\swiappregintegration12_reg.rsc
+
+[AddAppRegInfo_apparc_folder_eclipse_stub_c]
+appDataExists = ETrue
+appFileName = C:\sys\bin\swiappregintegration12.exe 
+appUid = 90000012
+
+[AddAppRegInfo_apparc_folder_eclipse_stub_z]
+appDataExists = ETrue
+appFileName = Z:\sys\bin\swiappregintegration12.exe 
+appUid = 90000012
+
+[AddAppRegInfo_nonapparc_folder]
+regFileName = c:\private\10003a5f\import\apps\swiappregintegration02_reg.rsc
\ No newline at end of file
--- a/installationservices/swi/test/tsisregistrytest/Scripts/tsisregistrytest.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest/Scripts/tsisregistrytest.script	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tsisregistrytest/Scripts/tsisregistrytest_tcb.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,175 @@
+//
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Run all SisRegistry tests
+//
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tuiscriptadaptors
+//
+
+
+RUN_UTILS MkDir c:\private\10003a3f\import
+RUN_UTILS MkDir c:\private\10003a3f\import\apps
+RUN_UTILS CopyFile  z:\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc c:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+//! @file
+//! @SYMTestCaseID		API-SEC-SISREGISTRY_TCB-0001
+//! @SYMTestCaseDesc		Add the Application Registration info into SCR from _reg.rsc
+//! @SYMTestPriority		
+//! @SYMTestActions		Parse then _reg.rsc file placed in apparc's pvt folder and populate the db and then remove the app data
+//! @SYMTestExpectedResults	The test completes with KErrNone completion code.
+
+
+START_TESTCASE API-SEC-SISREGISTRY_TCB-0001
+RUN_TEST_STEP 100 tSisRegistryTest AddAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder
+RUN_TEST_STEP 100 tSisRegistryTest CheckAppRegData z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_C_Drive
+RUN_TEST_STEP 100 tSisRegistryTest RemoveAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder
+RUN_TEST_STEP 100 tSisRegistryTest CheckAppRegData z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_No_Data
+END_TESTCASE API-SEC-SISREGISTRY_TCB-0001
+RUN_UTILS DeleteFile  c:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+
+//! @file
+//! @SYMTestCaseID		API-SEC-SISREGISTRY_TCB-0002
+//! @SYMTestCaseDesc		Add the Application Registration info into SCR from _reg.rsc
+//! @SYMTestPriority		Low
+//! @SYMTestActions		Parse then _reg.rsc file placed in non apparc's pvt folder and populate the db
+//! @SYMTestExpectedResults	The test completes with KErrArgument completion code.
+
+START_TESTCASE API-SEC-SISREGISTRY_TCB-0002
+RUN_TEST_STEP_RESULT -5 100 tSisRegistryTest AddAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_nonapparc_folder
+END_TESTCASE API-SEC-SISREGISTRY_TCB-0002
+
+RUN_UTILS CopyFile  z:\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc c:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+
+//! @file
+//! @SYMTestCaseID		API-SEC-SISREGISTRY_TCB-0003
+//! @SYMTestCaseDesc		Add the Application Registration info into SCR from _reg.rsc
+//! @SYMTestPriority		
+//! @SYMTestActions		Parse then same _reg.rsc file placed in apparc's pvt folder twice and populate the db and then remove the app data.
+//! @SYMTestExpectedResults	Removes the existing app reg info  and completes with KErrNone completion code
+
+START_TESTCASE API-SEC-SISREGISTRY_TCB-0003
+RUN_TEST_STEP 100 tSisRegistryTest AddAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder
+RUN_TEST_STEP 100 tSisRegistryTest AddAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder
+RUN_TEST_STEP 100 tSisRegistryTest CheckAppRegData z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_C_Drive
+RUN_TEST_STEP 100 tSisRegistryTest RemoveAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder
+RUN_TEST_STEP 100 tSisRegistryTest CheckAppRegData z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_No_Data
+END_TESTCASE API-SEC-SISREGISTRY_TCB-0003
+RUN_UTILS DeleteFile  c:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+
+//! @file
+//! @SYMTestCaseID		API-SEC-SISREGISTRY_TCB-0004
+//! @SYMTestCaseDesc		Overwrite the existing Application Registration info with a new one into SCR.
+//! @SYMTestPriority		
+//! @SYMTestActions		Install the SA package and its SP upgrade(with app),parse then _reg.rsc file(havig same appuid as of SP) placed in apparc's pvt folder 
+//!				populate the db and then remove tha app data, the reg data for the .rsc file associated with the removed app(in rom) should come back.
+//! @SYMTestExpectedResults	Upon removal of reg file data, the reg data for the .rsc file associated with the removed app(in rom) should come back successfully.
+
+START_TESTCASE API-SEC-SISREGISTRY_TCB-0004
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_sp
+RUN_TEST_STEP 100 tSisRegistryTest AddAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_base01
+RUN_TEST_STEP 100 tSisRegistryTest CheckAppRegData z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_C_Drive_base01
+RUN_TEST_STEP 100 tSisRegistryTest RemoveAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_base01
+RUN_TEST_STEP 100 tSisRegistryTest CheckAppRegData z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_z_Drive
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-SISREGISTRY_TCB-0004
+
+//! @file
+//! @SYMTestCaseID		API-SEC-SISREGISTRY_TCB-0005
+//! @SYMTestCaseDesc		Overwrite the existing Application Registration info with a new one into SCR.
+//! @SYMTestPriority		
+//! @SYMTestActions		Install the SA package and its SP upgrade(with app),parse then _reg.rsc file(havig same appuid as of SP) placed in apparc's pvt folder 
+//!				populate the db and then remove tha app data.
+//! @SYMTestExpectedResults	Upon removal of reg file data, the reg data for the .rsc file associated with the removed app(in rom) should come back.
+
+START_TESTCASE API-SEC-SISREGISTRY_TCB-0005
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_sp
+RUN_TEST_STEP 100 tSisRegistryTest RemoveAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_base01
+RUN_TEST_STEP 100 tSisRegistryTest CheckAppRegData z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_z_Drive
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE API-SEC-SISREGISTRY_TCB-0005
+
+//! @file
+//! @SYMTestCaseID		API-SEC-SISREGISTRY_TCB-0006
+//! @SYMTestCaseDesc		Removal the Application Registration info from SCR fails.
+//! @SYMTestPriority		
+//! @SYMTestActions		Process the path of the app reg filer and if its is non apparc return
+//! @SYMTestExpectedResults	Completes with KErrArgument completion code
+
+START_TESTCASE API-SEC-SISREGISTRY_TCB-0006
+RUN_TEST_STEP_RESULT -5 100 tSisRegistryTest RemoveAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_nonapparc_folder
+END_TESTCASE API-SEC-SISREGISTRY_TCB-0006
+
+RUN_UTILS MkDir c:\private\10003a3f\import
+RUN_UTILS MkDir c:\private\10003a3f\import\apps
+RUN_UTILS CopyFile  z:\systemtest\testdata\dummy.txt c:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+//! @file
+//! @SYMTestCaseID		API-SEC-SISREGISTRY_TCB-0007
+//! @SYMTestCaseDesc		Removal the non _reg.rsc file data from SCR.
+//! @SYMTestPriority		
+//! @SYMTestActions		Open the file and check if its a valid _reg.rsc file
+//! @SYMTestExpectedResults	Completes with KErrArgument completion code
+
+START_TESTCASE API-SEC-SISREGISTRY_TCB-0007
+RUN_TEST_STEP_RESULT -5 100 tSisRegistryTest RemoveAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_nonapparc_folder
+END_TESTCASE API-SEC-SISREGISTRY_TCB-0007
+
+//! @file
+//! @SYMTestCaseID		API-SEC-SISREGISTRY_TCB-0008
+//! @SYMTestCaseDesc		Add the non _reg.rsc file data into SCR
+//! @SYMTestPriority		
+//! @SYMTestActions		Open the file and check if its a valid _reg.rsc file
+//! @SYMTestExpectedResults	Completes with KErrArgument completion code
+
+START_TESTCASE API-SEC-SISREGISTRY_TCB-0008
+RUN_TEST_STEP_RESULT -5 100 tSisRegistryTest AddAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder
+END_TESTCASE API-SEC-SISREGISTRY_TCB-0008
+RUN_UTILS DeleteFile  c:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc
+
+RUN_UTILS CopyFile  z:\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_reg.rsc c:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+//! @file
+//! @SYMTestCaseID		API-SEC-SISREGISTRY_TCB-0009
+//! @SYMTestCaseDesc		Overwrite the existing Application Registration info present in z drive with a new one(in c drive) into SCR.
+//! @SYMTestPriority		
+//! @SYMTestActions		Add the app reg info of reg present in c drive , which overwritres the reg data of rom,  then remove the reg data of c drive 
+//!				reg data of file in rom should come back.
+//! @SYMTestExpectedResults     Upon removal of reg file data, reg data of file present in z should comes back
+
+START_TESTCASE API-SEC-SISREGISTRY_TCB-0009
+RUN_TEST_STEP 100 tSisRegistryTest AddAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_base01
+RUN_TEST_STEP 100 tSisRegistryTest CheckAppRegData z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_C_Drive_base01
+RUN_TEST_STEP 100 tSisRegistryTest RemoveAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_base01
+RUN_TEST_STEP 100 tSisRegistryTest CheckAppRegData z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_z_Drive
+END_TESTCASE API-SEC-SISREGISTRY_TCB-0009
+RUN_UTILS DeleteFile  c:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+
+RUN_UTILS CopyFile  z:\tswi\tuiscriptadaptors\data\swiappregintegration12\swiappregintegration12_reg.rsc c:\private\10003a3f\import\apps\swiappregintegration12_reg.rsc
+//! @file
+//! @SYMTestCaseID		API-SEC-SISREGISTRY_TCB-0010
+//! @SYMTestCaseDesc		Overwrite the existing Application Registration info with a new one into SCR.
+//! @SYMTestPriority		
+//! @SYMTestActions		Add the app reg data of rsc file in c drive overwriting the reg data of the stub in rom having an app (with reg file)
+//!				remove the reg data of rsc in c drive, the stub should be reregistered.
+//! @SYMTestExpectedResults	Upon removal of reg file data, the stub with reg data in z should comes back
+
+START_TESTCASE API-SEC-SISREGISTRY_TCB-0010
+RUN_TEST_STEP 100 tSisRegistryTest AddAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_eclipse_stub
+RUN_TEST_STEP 100 tSisRegistryTest CheckAppRegData z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_eclipse_stub_c
+RUN_TEST_STEP 100 tSisRegistryTest RemoveAppRegInfo z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_eclipse_stub
+RUN_TEST_STEP 100 tSisRegistryTest CheckAppRegData z:\tswi\tsisregistrytest\scripts\tsisregistrytest.ini AddAppRegInfo_apparc_folder_eclipse_stub_z
+END_TESTCASE API-SEC-SISREGISTRY_TCB-0010
+RUN_UTILS DeleteFile  c:\private\10003a3f\import\apps\swiappregintegration12_reg.rsc
--- a/installationservices/swi/test/tsisregistrytest/sessionstep.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest/sessionstep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -45,6 +45,8 @@
 #include "hashcontainer.h"
 #include "sisregistryproperty.h"
 
+#include <centralrepository.h>
+#include "sisregistryaccess_client.h"
 const TInt KDefaultBufferSize		= 2048;
 /////////////////////////////////////////////////////////////////////
 // defs, Constants used by test steps
@@ -52,6 +54,8 @@
 
 _LIT(KNoUid, "nouid");
 _LIT(KUid, "uid");
+_LIT(KCenRepKey, "cenrepkey");
+_LIT(KCenRepValue, "cenrepvalue");
 _LIT(KDrivebitmapcount, "drivebitmapcout");
 _LIT(KSid, "sid");
 _LIT(KPackage, "package");
@@ -169,8 +173,8 @@
 	RPointerArray<Swi::CSisRegistryPackage> packages;
 	//StartTimer again to ignore time taken to read from config file
 	StartTimer();
+	CleanupResetAndDestroyPushL(packages);
 	iRegistryEntry.EmbeddingPackagesL(packages);
-	CleanupResetAndDestroyPushL(packages);
 	
 	if(packages.Count() != embeddingPkgCount)
 		{
@@ -239,6 +243,8 @@
 
 TVerdict CModifiableFileStep::doTestStepL()
 	{
+
+    
 	RArray<TPtrC> theFileNames;
 	CleanupClosePushL(theFileNames);
 	GetStringArrayFromConfigL(ConfigSection(), KModFileName, theFileNames);
@@ -678,6 +684,59 @@
 	}
 	
 /////////////////////////////////////////////////////////////////////
+// CSetCenRepSettingStep - Set Central Reposatory Value
+/////////////////////////////////////////////////////////////////////
+CSetCenRepSettingStep::CSetCenRepSettingStep()
+    {
+    SetTestStepName(KSetCenRepSetting);
+    }
+
+TVerdict CSetCenRepSettingStep::doTestStepL()
+    {        
+    SetTestStepResult(EPass);
+    TUid repUid;
+    if(!GetUidFromConfig(ConfigSection(), KUid, repUid))
+        {
+        ERR_PRINTF1(_L("Package UID is missing in the configuration file!"));
+        SetTestStepResult(EFail);
+        return TestStepResult();
+        }
+    
+    TInt cenRepKey;
+    if(!GetIntFromConfig(ConfigSection(), KCenRepKey, cenRepKey))
+        {
+        ERR_PRINTF1(_L("Central Reposatory Key is missing in the configuration file!"));
+        SetTestStepResult(EFail);
+        return TestStepResult();
+        }
+    
+    TInt cenRepValue;
+    if(!GetIntFromConfig(ConfigSection(), KCenRepValue, cenRepValue))
+        {
+        ERR_PRINTF1(_L("Central Reposatory Value is missing in the configuration file!"));
+        SetTestStepResult(EFail);
+        return TestStepResult();
+        }
+    
+    CRepository* rep = CRepository::NewLC(repUid);
+    TInt err = rep->Set(cenRepKey, cenRepValue);
+        
+    if( err == KErrNone )
+    {
+        INFO_PRINTF4(_L("Setting Central Reposatory  0x%08x  , key = %d, value = %d"),repUid,cenRepKey,cenRepValue);
+    }
+    else
+    {
+        SetTestStepResult(EFail);
+        ERR_PRINTF4(_L("Failed Setting Central Reposatory  0x%08x  , key = %d, value = %d"),repUid,cenRepKey,cenRepValue);
+    }
+    
+    CleanupStack::PopAndDestroy(rep); 
+    return TestStepResult();
+    }
+
+
+/////////////////////////////////////////////////////////////////////
 // CIsPackageInstalledStep - checks if packages are registered
 /////////////////////////////////////////////////////////////////////
 
@@ -2719,3 +2778,158 @@
 	SetTestStepResult(EPass);
 	return TestStepResult();	
 	}
+
+////////////////////////////////////////////////////////////////////////////
+// CAddAppRegInfoStep 
+////////////////////////////////////////////////////////////////////////////
+CAddAppRegInfoStep::CAddAppRegInfoStep()
+    {
+    SetTestStepName(KIsFileRegisteredStep);
+    }
+
+TVerdict CAddAppRegInfoStep::doTestStepL()
+    {
+    TPtrC regFileName;
+    if(!GetStringFromConfig(ConfigSection(), _L("regFileName"), regFileName))
+        {
+        ERR_PRINTF1(_L("Reg File Name was not found in ini"));
+        User::Leave(KErrNotFound);
+        }
+    
+    RSisRegistryAccessSession sisRegistryAccessSessionSession;
+    User::LeaveIfError(sisRegistryAccessSessionSession.Connect());
+    CleanupClosePushL(sisRegistryAccessSessionSession);
+    
+    TInt res = sisRegistryAccessSessionSession.AddAppRegInfoL(regFileName, iTimeMeasuredExternally );
+   
+    if(res != KErrNone)
+        {
+        ERR_PRINTF2(_L("Application Registration data not added successfuly , error %d"),res);
+        User::Leave(res);
+        }
+    CleanupStack::Pop(&sisRegistryAccessSessionSession);
+    SetTestStepResult(EPass);
+    return TestStepResult();
+    }
+
+////////////////////////////////////////////////////////////////////////////
+// CRemoveAppRegInfoStep 
+////////////////////////////////////////////////////////////////////////////
+
+CRemoveAppRegInfoStep::CRemoveAppRegInfoStep()
+    {
+    SetTestStepName(KIsFileRegisteredStep);
+    }
+
+TVerdict CRemoveAppRegInfoStep::doTestStepL()
+    {
+    TPtrC regFileName;
+    if(!GetStringFromConfig(ConfigSection(), _L("regFileName"), regFileName))
+        {
+        ERR_PRINTF1(_L("Reg File Name was not found in ini"));
+        User::Leave(KErrNotFound);
+        }
+    
+    RSisRegistryAccessSession sisRegistryAccessSessionSession;
+    User::LeaveIfError(sisRegistryAccessSessionSession.Connect());
+    CleanupClosePushL(sisRegistryAccessSessionSession);
+    
+    TInt res = sisRegistryAccessSessionSession.RemoveAppRegInfoL(regFileName, iTimeMeasuredExternally );
+    
+    if(res != KErrNone)
+        {
+        ERR_PRINTF2(_L("Application Registration data not added successfuly , error %d"),res);
+        User::Leave(res);
+        }
+    CleanupStack::PopAndDestroy(&sisRegistryAccessSessionSession);
+    SetTestStepResult(EPass);
+    return TestStepResult();
+    }
+
+//////////////////////
+//////CheckAppRegData
+/////////////////////
+
+CheckAppRegData::CheckAppRegData()
+    {
+    SetTestStepName(KIsFileRegisteredStep);
+    }
+
+TVerdict CheckAppRegData::doTestStepL()
+    {
+    SetTestStepResult(EPass);
+    // Verify if the reg data is removed properly or not
+    TBool isAppDataExists(EFalse);
+    Usif::RSoftwareComponentRegistry scrSession;            
+    User::LeaveIfError(scrSession.Connect());
+    CleanupClosePushL(scrSession);
+    GetBoolFromConfig(ConfigSection(), _L("appDataExists"), isAppDataExists);
+    if(isAppDataExists)
+        {
+        TPtrC appFileName;
+        if(GetStringFromConfig(ConfigSection(), _L("appFileName"), appFileName))
+            {
+            TUid appUid;
+            TInt intAppUid(0);
+            if(!GetHexFromConfig(ConfigSection(), _L("appUid"), intAppUid))
+                {
+                User::Leave(KErrNotFound);
+                }
+            
+            appUid = TUid::Uid(intAppUid);
+            RArray<TUid> appUidArray;
+            CleanupClosePushL(appUidArray);
+            appUidArray.AppendL(appUid);
+            
+            //check if we have rolled back to the reg in rom after removal            
+            Usif::RApplicationInfoView appRegistryView;
+            CleanupClosePushL(appRegistryView);
+            Usif::CAppInfoFilter* appInfoFilter = Usif::CAppInfoFilter::NewLC();
+            appInfoFilter->SetAllApps();
+            appRegistryView.OpenViewL(scrSession, appInfoFilter);
+            RPointerArray<Usif::TAppRegInfo> appInfo;
+            CleanupClosePushL(appInfo);
+            appRegistryView.GetNextAppInfoL(5, appInfo);
+        
+            for(TInt i = 0; i < 5 ; ++i)
+                {
+                if(appInfo[i]->Uid() == appUid)
+                    {
+                    if(appInfo[i]->FullName().Compare(appFileName) != 0)
+                        {
+                        SetTestStepResult(EFail);
+                        CleanupStack::Pop(&appInfo);
+                        appInfo.ResetAndDestroy();
+                        CleanupStack::PopAndDestroy(4, &scrSession); // appInfoFilter, appRegistryView, appUid, scrSession
+                        return TestStepResult();
+                        }
+                    break;
+                    }
+                }
+            CleanupStack::Pop(&appInfo);
+            appInfo.ResetAndDestroy();
+            CleanupStack::PopAndDestroy(3, &appUidArray); // appInfoFilter, appRegistryView, 
+            }  
+        }
+    else
+        {
+        TUid appUid = TUid::Uid(0);
+        TInt intAppUid(0);
+        if(!GetHexFromConfig(ConfigSection(), _L("appUid"), intAppUid))
+            {
+            User::Leave(KErrNotFound);
+            }
+        appUid = TUid::Uid(intAppUid);
+        
+        TRAPD(err, scrSession.GetComponentIdForAppL(appUid));
+        if(err != KErrNotFound)
+            {
+            SetTestStepResult(EFail);
+            CleanupStack::PopAndDestroy(&scrSession);
+            return TestStepResult();
+            }
+        }
+
+    CleanupStack::PopAndDestroy(&scrSession);
+    return TestStepResult();
+    }
--- a/installationservices/swi/test/tsisregistrytest/sessionstep.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest/sessionstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -67,6 +67,14 @@
 	virtual TVerdict doTestStepL();
 	};
 
+// Set Central Reposatory Value 
+class CSetCenRepSettingStep : public CSisRegistrySessionStep
+    {
+public:
+    CSetCenRepSettingStep();
+    virtual TVerdict doTestStepL();
+    };
+
 // Check filename for sid
 class CSidFileStep : public CSisRegistrySessionStep
 	{
@@ -433,6 +441,26 @@
 	CChangeLocaleStep();
 	virtual TVerdict doTestStepL();
 	};
-	
+
+class CAddAppRegInfoStep : public CSisRegistrySessionStep
+    {
+public:
+    CAddAppRegInfoStep();
+    virtual TVerdict doTestStepL();
+    };
+
+class CRemoveAppRegInfoStep : public CSisRegistrySessionStep
+    {
+public:
+    CRemoveAppRegInfoStep();
+    virtual TVerdict doTestStepL();
+    };
+
+class CheckAppRegData : public CSisRegistrySessionStep
+    {
+public:
+    CheckAppRegData();
+    virtual TVerdict doTestStepL();
+    };
 #endif
 
--- a/installationservices/swi/test/tsisregistrytest/tsisregistrytest.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest/tsisregistrytest.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -126,6 +126,10 @@
 		{
 		name = new CInRomNonRemovablePackage;
 		}
+    if (strippedStepName == KSetCenRepSetting)
+        {
+        name = new CSetCenRepSettingStep; 
+        }
 	if (strippedStepName == KInstalledDrives)
 		{
 		name = new CInstalledDrives;
@@ -350,7 +354,18 @@
 		{
 		name = new CChangeLocaleStep;
 		}
-
+	else if (aStepName == KCAddAppRegInfoStep)
+	    {
+        name = new CAddAppRegInfoStep;
+	    }
+	else if (aStepName == KCRemoveAppRegInfoStep)
+        {
+        name = new CRemoveAppRegInfoStep;
+        }
+	else if (aStepName == KCheckAppRegData)
+	    {
+        name = new CheckAppRegData;
+	    }
 	if(performanceStep && name)
 		{
 		CSisRegistryTestStepBase *baseTestStep = dynamic_cast<CSisRegistryTestStepBase*>(name);
--- a/installationservices/swi/test/tsisregistrytest/tsisregistrytest.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest/tsisregistrytest.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1999-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -70,4 +70,5 @@
 LIBRARY		swidataprovider.lib
 LIBRARY		sisxfile.lib 
 LIBRARY		scrclient.lib
+LIBRARY 	centralrepository.lib
 SMPSAFE
--- a/installationservices/swi/test/tsisregistrytest/tsisregistryteststep.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest/tsisregistryteststep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -27,6 +27,7 @@
 #include <test/testexecutestepbase.h>
 
 // Step names
+_LIT(KSetCenRepSetting, "SetCenRepSetting");
 _LIT(KInstalledUids, "InstalledUids");
 _LIT(KInstalledPackages, "InstalledPackages");
 _LIT(KRemovablePackages, "RemovablePackages");
@@ -91,6 +92,9 @@
 _LIT(KDependenciesStep, "Dependencies");
 _LIT(KEmbeddedPackagesStep, "EmbeddedPackages");
 _LIT(KChangeLocale, "ChangeLocale");
+_LIT(KCAddAppRegInfoStep,"AddAppRegInfo");
+_LIT(KCRemoveAppRegInfoStep,"RemoveAppRegInfo");
+_LIT(KCheckAppRegData,"CheckAppRegData");
 
 // Base class for all steps
 class CSisRegistryTestStepBase : public CTestStep
--- a/installationservices/swi/test/tsisregistrytest_legacy/Scripts/tsisregistrytest.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest_legacy/Scripts/tsisregistrytest.script	Tue Aug 31 15:21:33 2010 +0300
@@ -221,7 +221,7 @@
 END_TESTCASE API-SEC-SISREGISTRY-B-0010
 
 //! @file
-//! @SYMTstCaseID		API-SEC-SISREGISTRY-B-0011
+//! @SYMTestCaseID		API-SEC-SISREGISTRY-B-0011
 //! @SYMTestCaseDesc		Gets the Registry Files(reg, clt and hash) for the package
 //! @SYMTestPriority		Medium
 //! @SYMTestActions		Installs the PU package over existing SA and Requests the Regisrty files.
@@ -278,7 +278,7 @@
 END_TESTCASE API-SEC-SISREGISTRY-B-0014
 
 
-//! @fie
+//! @file
 //! @SYMTestCaseID		API-SEC-SISREGISTRY-B-0015
 //! @SYMTestCaseDesc		Gets the Registry Files(reg, clt and hash) for the package.
 //! @SYMTestPriority		Medium
--- a/installationservices/swi/test/tsisregistrytest_legacy/sessionstep.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest_legacy/sessionstep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -21,7 +21,8 @@
  @test
  @internalTechnology
 */
- 
+
+#include <e32svr.h>
 #include <test/testexecutelog.h>
 #include <test/testexecutestepbase.h>
 #include "sessionstep.h"
@@ -37,6 +38,7 @@
 #include "sisregistrylog.h"
 #include <s32file.h>
 
+#include <centralrepository.h>
 
 /////////////////////////////////////////////////////////////////////
 // defs, Constants used by test steps
@@ -44,6 +46,8 @@
 
 _LIT(KNoUid, "nouid");
 _LIT(KUid, "uid");
+_LIT(KCenRepKey, "cenrepkey");
+_LIT(KCenRepValue, "cenrepvalue");
 _LIT(KDrivebitmapcount, "drivebitmapcout");
 _LIT(KSid, "sid");
 _LIT(KPackage, "package");
@@ -134,10 +138,9 @@
 	    return TestStepResult();
 	    }
 	CleanupClosePushL(entry);
-	
+
+	CleanupResetAndDestroyPushL(packages);
 	entry.EmbeddingPackagesL(packages);
-	CleanupResetAndDestroyPushL(packages);
-	
 	
 	if(packages.Count() != embeddingPkgCount)
 		{
@@ -653,6 +656,60 @@
 	return TestStepResult();
 	}
 	
+
+/////////////////////////////////////////////////////////////////////
+// CSetCenRepSettingStep - Set Central Reposatory Value
+/////////////////////////////////////////////////////////////////////
+CSetCenRepSettingStep::CSetCenRepSettingStep()
+    {
+    SetTestStepName(KSetCenRepSetting);
+    }
+
+TVerdict CSetCenRepSettingStep::doTestStepL()
+    {        
+    SetTestStepResult(EPass);
+    TUid repUid;
+    if(!GetUidFromConfig(ConfigSection(), KUid, repUid))
+        {
+        ERR_PRINTF1(_L("Package UID is missing in the configuration file!"));
+        SetTestStepResult(EFail);
+        return TestStepResult();
+        }
+    
+    TInt cenRepKey;
+    if(!GetIntFromConfig(ConfigSection(), KCenRepKey, cenRepKey))
+        {
+        ERR_PRINTF1(_L("Central Reposatory Key is missing in the configuration file!"));
+        SetTestStepResult(EFail);
+        return TestStepResult();
+        }
+    
+    TInt cenRepValue;
+    if(!GetIntFromConfig(ConfigSection(), KCenRepValue, cenRepValue))
+        {
+        ERR_PRINTF1(_L("Central Reposatory Value is missing in the configuration file!"));
+        SetTestStepResult(EFail);
+        return TestStepResult();
+        }
+    
+    CRepository* rep = CRepository::NewLC(repUid);
+    TInt err = rep->Set(cenRepKey, cenRepValue);
+        
+    if( err == KErrNone )
+    {
+        INFO_PRINTF4(_L("Setting Central Reposatory  0x%08x  , key = %d, value = %d"),repUid,cenRepKey,cenRepValue);
+    }
+    else
+    {
+        SetTestStepResult(EFail);
+        ERR_PRINTF4(_L("Failed Setting Central Reposatory  0x%08x  , key = %d, value = %d"),repUid,cenRepKey,cenRepValue);
+    }
+    
+    CleanupStack::PopAndDestroy(rep); 
+    return TestStepResult();
+    }
+
+
 /////////////////////////////////////////////////////////////////////
 // CIsPackageInstalledStep - checks if packages are registered
 /////////////////////////////////////////////////////////////////////
--- a/installationservices/swi/test/tsisregistrytest_legacy/sessionstep.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest_legacy/sessionstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -56,6 +56,14 @@
 	virtual TVerdict doTestStepL();
 	};
 
+// Set Central Reposatory Value 
+class CSetCenRepSettingStep : public CSisRegistrySessionStep
+    {
+public:
+    CSetCenRepSettingStep();
+    virtual TVerdict doTestStepL();
+    };
+
 // Check filename for sid
 class CSidFileStep : public CSisRegistrySessionStep
 	{
--- a/installationservices/swi/test/tsisregistrytest_legacy/tsisregistrytest.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest_legacy/tsisregistrytest.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -108,6 +108,10 @@
 		{
 		name = new CInRomNonRemovablePackage;
 		}
+    if (aStepName == KSetCenRepSetting)
+        {
+        name = new CSetCenRepSettingStep; 
+        }
 	if (aStepName == KInstalledDrives)
 		{
 		name = new CInstalledDrives;
--- a/installationservices/swi/test/tsisregistrytest_legacy/tsisregistrytest.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest_legacy/tsisregistrytest.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1999-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -58,4 +58,5 @@
 LIBRARY     testutilclientswi.lib
 LIBRARY		x509.lib
 LIBRARY     estor.lib 
+LIBRARY 	centralrepository.lib
 SMPSAFE
--- a/installationservices/swi/test/tsisregistrytest_legacy/tsisregistryteststep.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tsisregistrytest_legacy/tsisregistryteststep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -27,6 +27,7 @@
 #include <test/testexecutestepbase.h>
 
 // Step names
+_LIT(KSetCenRepSetting, "SetCenRepSetting");
 _LIT(KInstalledUids, "InstalledUids");
 _LIT(KInstalledPackages, "InstalledPackages");
 _LIT(KRemovablePackages, "RemovablePackages");
--- a/installationservices/swi/test/tswiobserver/refswiobsplugin/group/refswiobsplugin.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tswiobserver/refswiobsplugin/group/refswiobsplugin.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -29,7 +29,6 @@
 
 USERINCLUDE   ../inc
 USERINCLUDE   ../../../../inc
-USERINCLUDE   ../../../../../../../../mw/appinstall/installationservices/swi/inc
 
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 OS_LAYER_ESTLIB_SYSTEMINCLUDE  
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate1_post.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate1_post.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -18,3 +18,15 @@
 del /s /f /q \epoc32\release\winscw\udeb\z\system\install\fota_stub_v1.sis
 del /s /f /q \epoc32\release\winscw\urel\z\system\install\fota_stub_v1.sis
 
+del /s /f /q \epoc32\release\winscw\udeb\z\system\install\fotaupdatestubapp1.sis
+del /s /f /q \epoc32\release\winscw\urel\z\system\install\fotaupdatestubapp1.sis
+
+del /s /f /q \epoc32\release\winscw\udeb\z\private\10003a3f\apps\fotaupdatestubapp1_reg.rsc
+del /s /f /q \epoc32\release\winscw\urel\z\private\10003a3f\apps\fotaupdatestubapp1_reg.rsc
+
+del /s /f /q \epoc32\release\winscw\udeb\z\private\10003a3f\apps\fotaupdateapp1_reg.rsc
+del /s /f /q \epoc32\release\winscw\urel\z\private\10003a3f\apps\fotaupdateapp1_reg.rsc
+
+del /s /f /q \epoc32\winscw\c\private\10003a3f\apps\fotaupdateUDA1_reg.rsc
+
+del /s /f /q \epoc32\winscw\c\private\10003a3f\import\apps\fotaupdateUDA2_reg.rsc
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate1_pre.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate1_pre.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -18,5 +18,19 @@
 xcopy /Q /Y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\fota_stub_v1.sis \epoc32\release\winscw\udeb\z\system\install\
 xcopy /Q /Y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\fota_stub_v1.sis \epoc32\release\winscw\urel\z\system\install\
 
+xcopy /Q /Y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\fotaupdateapp1_reg.rsc \epoc32\release\winscw\udeb\z\private\10003a3f\apps\
+xcopy /Q /Y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\fotaupdateapp1_reg.rsc \epoc32\release\winscw\urel\z\private\10003a3f\apps\
+
+xcopy /Q /Y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\fotaupdatestubapp1_reg.rsc \epoc32\release\winscw\udeb\z\private\10003a3f\apps\
+xcopy /Q /Y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\fotaupdatestubapp1_reg.rsc \epoc32\release\winscw\urel\z\private\10003a3f\apps\
+
+xcopy /Q /Y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\fotaupdatestubapp1.sis \epoc32\release\winscw\udeb\z\system\install\
+xcopy /Q /Y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\fotaupdatestubapp1.sis \epoc32\release\winscw\urel\z\system\install\
+
+xcopy /Q /Y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\fotaupdateUDA1_reg.rsc \epoc32\winscw\c\private\10003a3f\apps\
+
+md \epoc32\winscw\c\private\10003a3f\import\apps
+xcopy /Q /Y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\fotaupdateUDA2_reg.rsc \epoc32\winscw\c\private\10003a3f\import\apps
+
 rem cleanup anything from previous tests.
 del /s /f /q \epoc32\winscw\c\sys\install\sisregistry\
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate2_post.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate2_post.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009 -2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -21,3 +21,11 @@
 del /s /f /q \epoc32\release\winscw\urel\z\resource\versions\sw.txt
 del /s /f /q \epoc32\release\winscw\udeb\z\resource\versions\sw.txt
 
+del /s /f /q \epoc32\release\winscw\udeb\z\private\10003a3f\apps\fotaupdateapp2_reg.rsc
+del /s /f /q \epoc32\release\winscw\urel\z\private\10003a3f\apps\fotaupdateapp2_reg.rsc
+
+del /s /f /q \epoc32\release\winscw\udeb\z\private\10003a3f\apps\fotaupdatestubapp2_reg.rsc
+del /s /f /q \epoc32\release\winscw\urel\z\private\10003a3f\apps\fotaupdatestubapp2_reg.rsc
+
+del /s /f /q \epoc32\release\winscw\udeb\z\system\install\fotaupdatestubapp2.sis
+del /s /f /q \epoc32\release\winscw\urel\z\system\install\fotaupdatestubapp2.sis
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate2_pre.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/testfotaupdate2_pre.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -18,5 +18,16 @@
 xcopy /Q /Y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\fota_stub_v2.sis \epoc32\release\winscw\udeb\z\system\install\
 xcopy /Q /Y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\fota_stub_v2.sis \epoc32\release\winscw\urel\z\system\install\
 
+xcopy /Q /Y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\fotaupdateapp2_reg.rsc \epoc32\release\winscw\udeb\z\private\10003a3f\apps\
+xcopy /Q /Y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\fotaupdateapp2_reg.rsc \epoc32\release\winscw\urel\z\private\10003a3f\apps\
+
+xcopy /Q /Y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\fotaupdatestubapp2_reg.rsc \epoc32\release\winscw\udeb\z\private\10003a3f\apps\
+xcopy /Q /Y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\fotaupdatestubapp2_reg.rsc  \epoc32\release\winscw\urel\z\private\10003a3f\apps\
+
+xcopy /Q /Y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\fotaupdatestubapp2.sis \epoc32\release\winscw\udeb\z\system\install\
+xcopy /Q /Y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\fotaupdatestubapp2.sis \epoc32\release\winscw\urel\z\system\install\
+
 xcopy /Q /Y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\sw.txt 		\epoc32\release\winscw\urel\z\resource\versions\
 xcopy /Q /Y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\sw.txt 		\epoc32\release\winscw\udeb\z\resource\versions\
+
+del /s /f /q \epoc32\winscw\c\sys\install\scr\
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/tswiappregintegration_post.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+
+del /s /f /q \epoc32\release\winscw\udeb\z\sys\bin\swiappregintegration_base01.exe
+del /s /f /q \epoc32\release\winscw\udeb\z\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+del /s /f /q \epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_loc.rsc
+del /s /f /q \epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_rsc.mbm
+del /s /f /q \epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_loc.r01
+del /s /f /q \epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_01.mbm
+del /s /f /q \epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_loc.r02
+del /s /f /q \epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_02.mbm
+
+del /s /f /q \epoc32\release\winscw\urel\z\sys\bin\swiappregintegration_base01.exe
+del /s /f /q \epoc32\release\winscw\urel\z\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+del /s /f /q \epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_loc.rsc
+del /s /f /q \epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_rsc.mbm
+del /s /f /q \epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_loc.r01
+del /s /f /q \epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_01.mbm
+del /s /f /q \epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_loc.r02
+del /s /f /q \epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_02.mbm
+
+del /s /f /q \epoc32\release\winscw\udeb\z\system\install\swiappregintegration_base01_stub.sis
+del /s /f /q \epoc32\release\winscw\urel\z\system\install\swiappregintegration_base01_stub.sis
+
+del /s /f /q \epoc32\winscw\c\sys\install
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/batchfiles/tswiappregintegration_pre.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,47 @@
+@rem
+@rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+
+rem Copy the list of files to Z in winscw
+md \epoc32\release\winscw\udeb\z\private\10003a3f\import\apps
+md \epoc32\release\winscw\urel\z\private\10003a3f\import\apps
+copy /y \epoc32\release\winscw\udeb\swiappregintegration_base01.exe									\epoc32\release\winscw\udeb\z\sys\bin\swiappregintegration_base01.exe
+copy /y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_reg.rsc	\epoc32\release\winscw\udeb\z\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+copy /y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.rsc	\epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_loc.rsc
+copy /y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm			\epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_rsc.mbm
+copy /y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r01	\epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_loc.r01
+copy /y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm			\epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_01.mbm
+copy /y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r02	\epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_loc.r02
+copy /y \epoc32\release\winscw\udeb\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm			\epoc32\release\winscw\udeb\z\resource\apps\swiappregintegration_base01_02.mbm
+
+copy /y \epoc32\release\winscw\urel\swiappregintegration_base01.exe									\epoc32\release\winscw\urel\z\sys\bin\swiappregintegration_base01.exe
+copy /y \epoc32\release\winscw\urel\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_reg.rsc	\epoc32\release\winscw\urel\z\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc
+copy /y \epoc32\release\winscw\urel\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.rsc	\epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_loc.rsc
+copy /y \epoc32\release\winscw\urel\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm			\epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_rsc.mbm
+copy /y \epoc32\release\winscw\urel\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r01	\epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_loc.r01
+copy /y \epoc32\release\winscw\urel\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm			\epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_01.mbm
+copy /y \epoc32\release\winscw\urel\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r02	\epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_loc.r02
+copy /y \epoc32\release\winscw\urel\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm			\epoc32\release\winscw\urel\z\resource\apps\swiappregintegration_base01_02.mbm
+
+rem Copy the stub sis file
+
+copy /y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\swiappregintegration_base01_stub.sis \epoc32\release\winscw\udeb\z\system\install\swiappregintegration_base01_stub.sis
+copy /y \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\swiappregintegration_base01_stub.sis \epoc32\release\winscw\urel\z\system\install\swiappregintegration_base01_stub.sis
+
+del /s /f /q \epoc32\winscw\c\sys\install
+del /s /f /q \epoc32\winscw\c\sys\bin
+del /s /f /q \epoc32\winscw\c\sys\hash
+del /s /f /q \epoc32\winscw\c\resource\apps
+del /s /f /q \epoc32\winscw\c\private\10003a3f\import\apps
\ No newline at end of file
Binary file installationservices/swi/test/tuiscriptadaptors/scripts/fotaupdatestubapp1.sis has changed
Binary file installationservices/swi/test/tuiscriptadaptors/scripts/fotaupdatestubapp2.sis has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/nonusiftuiscriptadaptors.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,42 @@
+//
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//! @file
+// SWIS unit (integration) tests
+PRINT Run all SWIS tests
+LOAD_SUITE tuiscriptadaptors
+
+//! @SYMTestCaseID 		API-SEC-DEF082510-0001
+//! @SYMTestCaseDesc		Import ECOM plugins for apparc SidChecker interface - required by INC069526
+//! @SYMDEF			DEF082510
+//! @SYMTestPriority		High
+//! @SYMTestType		CIT
+//! @SYMTestStatus		3. Released
+//! @SYMTestActions 		Verify Sid presence query via plugni works.
+//! @SYMTestExpectedResults	Present when present, absent when absent
+//! @SYMDevelopedForRelease	Mike
+
+START_TESTCASE API-SEC-DEF082510-0001
+
+RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_absent
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe
+RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_present
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini u_exe
+RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_absent
+
+END_TESTCASE API-SEC-DEF082510-0001
+
+// Ensure that SWIS shuts down after the above tests to make sure heap checks run
+RUN_TEST_STEP 5 tuiscriptadaptors SwisNotRunning
Binary file installationservices/swi/test/tuiscriptadaptors/scripts/swiappregintegration_base01_stub.sis has changed
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/testdevicelanguages.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/testdevicelanguages.script	Tue Aug 31 15:21:33 2010 +0300
@@ -599,6 +599,8 @@
 RUN_TEST_STEP 100 tSisRegistryTest IsPackageInstalled z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini equ_package_info_english_am
 // Uninstall  
 RUN_TEST_STEP 100 tuiscriptadaptors UninstallAsyncStep z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini uninstall_base_bf_sg_sr_sa_options
+// Always set the language back to English, as tscr test cases assume that device is in english lang
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
 END_TESTCASE API-INST-PREQ2525-SWI-0009
 
 START_TESTCASE API-INST-PREQ2525-SWI-0010
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/testfotaupdate.ini	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/testfotaupdate.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -7,3 +7,167 @@
 uid-01=88000112
 package-01=fota
 vendor-01=Vendor2
+
+[app_info_fota_v1]
+Locale  = 01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0 = A000F56C
+AppRegEntriesConfigCount=1
+configsection0 = app_info_fota_v1_data
+
+[app_info_fota_v1_data]
+AppUid=A000F56C
+AppFile=Z:\sys\bin\fota.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=0
+
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=0
+PropertiesCount=0
+
+[app_info_fota_v2]
+Locale  = 01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0 = A000F56C
+AppRegEntriesConfigCount=1
+configsection0 = app_info_fota_v2_data
+
+[app_info_fota_v2_data]
+AppUid=A000F56C
+AppFile=Z:\sys\bin\fota.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Apps
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=0
+
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=0
+PropertiesCount=0
+
+[stubapp_info_fota_v1]
+uid-01=2002E5E7
+package-01=fota
+vendor-01=Vendor1
+
+[stubapp_info_fota_v2]
+uid-01=2002E5E7
+package-01=fota
+vendor-01=Vendor2
+
+[stubapp_scr_info_fota_v1]
+Locale  = 01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0 = 2002E5E7
+AppRegEntriesConfigCount=1
+configsection0 = stubapp_info_fota_v1_data
+
+[stubapp_info_fota_v1_data]
+AppUid=2002E5E7
+AppFile=Z:\sys\bin\T_groupname.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group1
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=0
+
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=0
+PropertiesCount=0
+
+[stubapp_scr_info_fota_v2]
+Locale  = 01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0 = 2002E5E7
+AppRegEntriesConfigCount=1
+configsection0 = stubapp_info_fota_v2_data
+
+[stubapp_info_fota_v2_data]
+AppUid=2002E5E7
+AppFile=Z:\sys\bin\T_groupname.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group2
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=0
+
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=0
+PropertiesCount=0
+
+
+
+[app_info_fota_UDA1]
+Locale  = 01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0 = A000F16C
+AppRegEntriesConfigCount=1
+configsection0 = app_info_fota_UDA1_data
+
+[app_info_fota_UDA1_data]
+AppUid=A000F16C
+AppFile=C:\sys\bin\UDA1.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=UDA1_Group
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=0
+
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=0
+PropertiesCount=0
+
+
+
+[app_info_fota_UDA2]
+Locale  = 01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0 = A000F26C
+AppRegEntriesConfigCount=1
+configsection0 = app_info_fota_UDA2_data
+
+[app_info_fota_UDA2_data]
+AppUid=A000F26C
+AppFile=C:\sys\bin\UDA2.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=UDA2_Group
+DefaultScreenNumber=0
+AppOpaqueDataInfoCount=0
+
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=0
+PropertiesCount=0
\ No newline at end of file
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/testfotaupdate1.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/testfotaupdate1.script	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -18,6 +18,7 @@
 PRINT Run SWI FOTA Update tests
 LOAD_SUITE tuiscriptadaptors
 LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
 
 //! @SYMTestCaseID INST-REG-FOTA-0001
 //! @SYMTestCaseDesc Tests F/W update scenario
@@ -27,4 +28,47 @@
 //! @SYMTestExpectedResults Registry is updated with latest stub info
 START_TESTCASE FotaTest1
 RUN_TEST_STEP 100 tSisRegistryTest IsPackageInstalled z:\tswi\tuiscriptadaptors\scripts\testfotaupdate.ini package_info_fota_v1
-END_TESTCASE FotaTest1
\ No newline at end of file
+END_TESTCASE FotaTest1
+
+
+//! @SYMTestCaseID INST-REG-FOTA-0003
+//! @SYMTestCaseDesc Tests F/W update scenario for application registration resource files
+//! @SYMREQ PREQ1835
+//! @SYMTestPriority High
+//! @SYMTestActions Tests F/W update scenario for application registration resource files
+//! @SYMTestExpectedResults Scr db is updated with latest app info
+START_TESTCASE FotaTest3
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\testfotaupdate.ini app_info_fota_v1
+END_TESTCASE FotaTest3
+
+//! @SYMTestCaseID INST-REG-FOTA-0004
+//! @SYMTestCaseDesc Tests F/W update scenario for application registration resource files in stub
+//! @SYMREQ PREQ1835
+//! @SYMTestPriority High
+//! @SYMTestActions Tests F/W update scenario for application registration resource files in stub
+//! @SYMTestExpectedResults Registry is updated with latest stub info
+START_TESTCASE FotaTest4
+RUN_TEST_STEP 100 tSisRegistryTest IsPackageInstalled z:\tswi\tuiscriptadaptors\scripts\testfotaupdate.ini stubapp_info_fota_v1
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\testfotaupdate.ini stubapp_scr_info_fota_v1
+END_TESTCASE FotaTest4
+
+
+//! @SYMTestCaseID INST-REG-FOTA-0005
+//! @SYMTestCaseDesc Tests F/W update scenario for application registration resource files present in <systemdrive>\private\10003a3f\apps
+//! @SYMREQ PREQ1835
+//! @SYMTestPriority High
+//! @SYMTestActions Tests F/W update scenario for application registration resource files present in <systemdrive>\private\10003a3f\apps
+//! @SYMTestExpectedResults Scr db is updated with latest app info
+START_TESTCASE FotaTest5
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\testfotaupdate.ini app_info_fota_UDA1
+END_TESTCASE FotaTest5
+
+//! @SYMTestCaseID INST-REG-FOTA-0006
+//! @SYMTestCaseDesc Tests F/W update scenario for application registration resource files present in <systemdrive>\private\10003a3f\import\apps
+//! @SYMREQ PREQ1835
+//! @SYMTestPriority High
+//! @SYMTestActions Tests F/W update scenario for application registration resource files present in <systemdrive>\private\10003a3f\import\apps
+//! @SYMTestExpectedResults Scr db is updated with latest app info
+START_TESTCASE FotaTest6
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\testfotaupdate.ini app_info_fota_UDA2
+END_TESTCASE FotaTest6
\ No newline at end of file
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/testfotaupdate2.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/testfotaupdate2.script	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -18,6 +18,7 @@
 PRINT Run SWI FOTA Update tests
 LOAD_SUITE tuiscriptadaptors
 LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
 
 //! @SYMTestCaseID INST-REG-FOTA-0002
 //! @SYMTestCaseDesc Tests F/W update scenario
@@ -27,4 +28,26 @@
 //! @SYMTestExpectedResults Registry is updated with latest stub info
 START_TESTCASE FotaTest2
 RUN_TEST_STEP 100 tSisRegistryTest IsPackageInstalled z:\tswi\tuiscriptadaptors\scripts\testfotaupdate.ini package_info_fota_v2
-END_TESTCASE FotaTest2
\ No newline at end of file
+END_TESTCASE FotaTest2
+
+
+//! @SYMTestCaseID INST-REG-FOTA-0005
+//! @SYMTestCaseDesc Tests F/W update scenario for application registration resource files
+//! @SYMREQ PREQ1835
+//! @SYMTestPriority High
+//! @SYMTestActions Tests F/W update scenario for application registration resource files
+//! @SYMTestExpectedResults SCR db is updated with latest app info
+START_TESTCASE FotaTest5
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\testfotaupdate.ini app_info_fota_v2
+END_TESTCASE FotaTest5
+
+//! @SYMTestCaseID INST-REG-FOTA-0006
+//! @SYMTestCaseDesc Tests F/W update scenario for application registration resource files in stub
+//! @SYMREQ PREQ1835
+//! @SYMTestPriority High
+//! @SYMTestActions Tests F/W update scenario for application registration resource files in stub
+//! @SYMTestExpectedResults Registry is updated with latest stub info
+START_TESTCASE FotaTest6
+RUN_TEST_STEP 100 tSisRegistryTest IsPackageInstalled z:\tswi\tuiscriptadaptors\scripts\testfotaupdate.ini stubapp_info_fota_v2
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\testfotaupdate.ini stubapp_scr_info_fota_v2
+END_TESTCASE FotaTest6
\ No newline at end of file
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/testpreinstalled.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/testpreinstalled.script	Tue Aug 31 15:21:33 2010 +0300
@@ -17,6 +17,7 @@
 // SWIS unit (integration) tests for upgrades
 PRINT Run all SWIS tests
 LOAD_SUITE tuiscriptadaptors
+LOAD_SUITE tdaemon
 
 //! @SYMTestCaseID 		API-SEC-UISA-PreInstalledTest-I-0001
 //! @SYMTestCaseDesc 		Test pre-installed media
@@ -454,47 +455,50 @@
 //! @SYMTestExpectedResults 	No installation
 //! @SYMDevelopedForRelease 	Sphinx
 
-START_TESTCASE API-SEC-Controller-0001
+//Commenting the testcase because tdaemon is removed from code base. To be restored later.
+
+//START_TESTCASE API-SEC-Controller-0001
 
 // Install the full TEXTFILE.SIS file
-RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini textfile
+//RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini textfile
 
 // Check that the registry is present
-RUN_TEST_STEP 100 tuiscriptadaptors MmcAskRegistry z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini textfile_present
+//RUN_TEST_STEP 100 tuiscriptadaptors MmcAskRegistry z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini textfile_present
 
 // Save the .ctl file
-RUN_UTILS CopyFile x:\sys\install\sisregistry\80000001\00000000_0000.ctl x:\00000000_0000.ctl
+//RUN_UTILS CopyFile x:\sys\install\sisregistry\80000001\00000000_0000.ctl x:\00000000_0000.ctl
 
 // Delete the x:\sys\install\sisregistry\80000001\00000000_0000.ctl file
-RUN_TEST_STEP 10 tuiscriptadaptors MmcDeleteFilesStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini delete_textfile_ctlfile
+//RUN_TEST_STEP 10 tuiscriptadaptors MmcDeleteFilesStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini delete_textfile_ctlfile
 
 // Copy another package .ctl file to x:\sys\install\sisregistry\80000001\00000000_0000.ctl
-RUN_TEST_STEP 10 tuiscriptadaptors MmcCopyFilesStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini copy_textfile_ctlfile
+//RUN_TEST_STEP 10 tuiscriptadaptors MmcCopyFilesStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini copy_textfile_ctlfile
 
-RUN_TEST_STEP 100 tuiscriptadaptors MmcUnMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+//RUN_TEST_STEP 100 tuiscriptadaptors MmcUnMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
 
-RUN_TEST_STEP 100 tuiscriptadaptors MmcMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+//RUN_TEST_STEP 100 tuiscriptadaptors MmcMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+//RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 
 // Check that the registry is not present
-RUN_TEST_STEP 100 tuiscriptadaptors MmcAskRegistry z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini textfile_absent
+//RUN_TEST_STEP 100 tuiscriptadaptors MmcAskRegistry z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini textfile_absent
 
 // Restore the original .ctl file to x:\sys\install\sisregistry\80000001\00000000_0000.ctl
-RUN_TEST_STEP 10 tuiscriptadaptors MmcDeleteFilesStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini delete_textfile_ctlfile
-RUN_TEST_STEP 10 tuiscriptadaptors MmcCopyFilesStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini copy_textfile_ctlfile2
+//RUN_TEST_STEP 10 tuiscriptadaptors MmcDeleteFilesStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini delete_textfile_ctlfile
+//RUN_TEST_STEP 10 tuiscriptadaptors MmcCopyFilesStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini copy_textfile_ctlfile2
 
-RUN_TEST_STEP 100 tuiscriptadaptors MmcUnMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+//RUN_TEST_STEP 100 tuiscriptadaptors MmcUnMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
 
-RUN_TEST_STEP 100 tuiscriptadaptors MmcMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+//RUN_TEST_STEP 100 tuiscriptadaptors MmcMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
 
 // Check that the registry is okay now.
-RUN_TEST_STEP 100 tuiscriptadaptors MmcAskRegistry z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini textfile_present
+//RUN_TEST_STEP 100 tuiscriptadaptors MmcAskRegistry z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini textfile_present
 
 // Uninstall TEXTFILE.SIS
-RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini u_textfile
+//RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\testpreinstalled.ini u_textfile
 
-RUN_UTILS DeleteFile x:\00000000_0000.ctl
+//RUN_UTILS DeleteFile x:\00000000_0000.ctl
 
-END_TESTCASE API-SEC-Controller-0001
+//END_TESTCASE API-SEC-Controller-0001
 
 
 //! @SYMTestCaseID 		API-SEC-Controller-0002
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/tpropagation.ini	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tpropagation.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -430,4 +430,97 @@
 delete4=e:\resources\new_resources.txt
 
 
+//APPINS-SWI-PROP-0001
+[install_test_appreg_entries_armv5]
+sis=z:\tswi\tsis\data\test_appreg_entries_armv5.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple_drive_e.xml
+numexist=4
+exist0=e:\sys\bin\swiappregintegration_case06.exe
+exist1=e:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc
+exist2=e:\resource\apps\swiappregintegration_case06_loc.rsc
+exist3=e:\resource\apps\swiappregintegration.mbm
 
+[backup_files_armv5_test_appreg_entries]
+numcopy=5
+source0=e:\private\10202dce\80010009_0.sis
+dest0=c:\80010009_0.sis
+source1=e:\sys\bin\swiappregintegration_case06.exe
+dest1=c:\swiappregintegration_case06.exe
+source2=e:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc
+dest2=c:\swiappregintegration_case06_reg.rsc
+source3=e:\resource\apps\swiappregintegration_case06_loc.rsc
+dest3=c:\swiappregintegration_case06_loc.rsc
+source4=e:\resource\apps\swiappregintegration.mbm
+dest4=c:\swiappregintegration.mbm
+
+[uninstall_test_appreg_entries_armv5]
+uid=80010009
+script=z:\tswi\tuiscriptadaptors\scripts\simple_drive_e.xml
+
+[copy_to_mmc_armv5_test_appreg_entries]
+numcopy=6
+source0=c:\80010009_0.sis
+dest0=e:\private\10202dce\80010009_0.sis
+source1=c:\80010009_0.sis
+dest1=e:\80010009_0.sis
+source2=c:\swiappregintegration_case06.exe
+dest2=e:\sys\bin\swiappregintegration_case06.exe
+source3=c:\swiappregintegration_case06_reg.rsc
+dest3=e:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc
+source4=c:\swiappregintegration_case06_loc.rsc
+dest4=e:\resource\apps\swiappregintegration_case06_loc.rsc
+source5=c:\swiappregintegration.mbm
+dest5=e:\resource\apps\swiappregintegration.mbm
+
+[cleanup_backup_armv5_test_appreg_entries]
+numdelete=5
+delete0=c:\80010009_0.sis
+delete1=c:\swiappregintegration_case06.exe
+delete2=c:\swiappregintegration_case06_reg.rsc
+delete3=c:\swiappregintegration_case06_loc.rsc
+delete4=c:\swiappregintegration.mbm
+
+[install_stub_armv5_test_appreg_entries]
+sis=e:\80010009_0.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple_drive_e.xml
+numexist=4
+exist0=e:\sys\bin\swiappregintegration_case06.exe
+exist1=e:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc
+exist2=e:\resource\apps\swiappregintegration_case06_loc.rsc
+exist3=e:\resource\apps\swiappregintegration.mbm
+
+[uninstall_armv5_test_appreg_entries]
+uid=80010009
+script=z:\tswi\tuiscriptadaptors\scripts\simple_drive_e.xml
+
+[verify_case06_base_armv5]
+AppRegEntriesConfigCount=1
+configsection0 = verify_case06_base_data_armv5
+CompareWithDb=True
+
+[verify_case06_base_data_armv5]
+AppUid=90000006
+AppFile=E:\sys\bin\swiappregintegration_case06.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=GroupI
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_RSC
+LocCaption0=HelloWorld_RSC
+LocNumberOfAppIcons0=127
+LocIconFileName0=C:\resource\apps\swiappregintegration.mbm
+LocGroupName0=Group_RSC
+PropertiesCount=0
+
+[temp_files]
+DbFilePath=e:\resource\apps\swiappregintegration.mbm
+JournalFilePath=e:\resource\apps\swiappregintegration.mbm
+
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/tpropagation_arm.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tpropagation_arm.script	Tue Aug 31 15:21:33 2010 +0300
@@ -17,6 +17,8 @@
 // SWIS unit (integration) tests
 PRINT Propagation tests running...
 LOAD_SUITE tuiscriptadaptors
+LOAD_SUITE tscrapparc
+LOAD_SUITE tscr
 
 //! @SYMTestCaseID 		API-SEC-Propagation-HW-0001
 //! @SYMTestCaseDesc 		Tests that a propagation will install correctly with a modified version of one of the files listed in the stub file.
@@ -256,4 +258,36 @@
 END_TESTCASE API-SEC-SWI-PREQ1912-MP-HW-0002
 
 
+//! @SYMTestCaseID 		APPINS-SWI-PROP-HW-0001
+//! @SYMTestCaseDesc 		Tests that a propagation will install as per required and the SCR db is populated correctly
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions 		Simulate a propagation installation and verify the contents retrieved from SCR db.
+//! @SYMTestExpectedResults 	Required application's details correctly retrieved from the db.
 
+START_TESTCASE APPINS-SWI-PROP-HW-0001
+
+RUN_TEST_STEP_RESULT -21 100 tuiscriptadaptors MmcMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini E
+DELAY 2000
+RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini E
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini install_test_appreg_entries_armv5
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini verify_case06_base_armv5
+RUN_TEST_STEP 100 tuiscriptadaptors SwiCopyFilesStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini backup_files_armv5_test_appreg_entries
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini uninstall_test_appreg_entries_armv5
+
+RUN_TEST_STEP 100 tuiscriptadaptors SwiCopyFilesStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini copy_to_mmc_armv5_test_appreg_entries
+RUN_TEST_STEP 100 tuiscriptadaptors SwiDeleteFilesStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini cleanup_backup_armv5_test_appreg_entries
+
+RUN_TEST_STEP 100 tuiscriptadaptors MmcUnMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini E
+DELAY 2000
+RUN_TEST_STEP 100 tuiscriptadaptors MmcMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini E
+DELAY 2000
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini install_stub_armv5_test_appreg_entries
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini verify_case06_base_armv5
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini uninstall_armv5_test_appreg_entries
+
+END_TESTCASE APPINS-SWI-PROP-HW-0001
+
+// Deleting the temporary files, but not the SCR DB. Here we are reusing the step to delete something under resource\apps
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini temp_files
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tswiappregintegration.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1182 @@
+
+[swiappregintegration_case01]
+sis=z:\tswi\tsis\data\swiappregintegration01.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=03
+devicelanguage2=24
+
+[u_swiappregintegration_case01]
+uid=80010002
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[swiappregintegration_case01_EN]
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration_case01_EN_data
+CompareWithDb=True
+
+[swiappregintegration_case01_IF]
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration_case01_IF_data
+CompareWithDb=True
+
+[swiappregintegration_case01_RSC]
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration_case01_RSC_data
+CompareWithDb=True
+
+[swiappregintegration_case01_EN_data]
+AppUid=90000003
+AppFile=C:\sys\bin\swiappregintegration.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+
+OwnedFileCount=2
+FileName0=c:\temp\AppNameTempFile.txt
+FileName1=c:\temp\AppName.txt
+
+ServiceInfoCount=3
+ServiceUid0=10208DCA
+ServiceOpaqueDataInfoCount0=0
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+ServiceUid1=01020304
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+ServiceUid2=02030405
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=1
+LocAppLanguage0=1
+LocShortCaption0=HW_EN
+LocCaption0=HelloWorld_EN
+LocNumberOfAppIcons0=11
+LocIconFileName0=C:\resource\apps\swiappregintegration01_01.mbm
+LocGroupName0=Group_EN
+
+ViewDataCount0=2
+VwUid0=1234
+VwScreenMode0=1
+VwCaption0=View_01_EN
+VwNumberOfAppIcons0=12
+VwIconFileName0=C:\resource\apps\swiappregintegration01_01.mbm
+VwUid1=1235
+VwScreenMode1=2
+VwCaption1=View_02_EN
+VwIconFileName1=C:\resource\apps\swiappregintegration01_01.mbm
+VwNumberOfAppIcons1=13
+
+PropertiesCount=0
+
+[swiappregintegration_case01_IF_data]
+AppUid=90000003
+AppFile=C:\sys\bin\swiappregintegration.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+
+OwnedFileCount=2
+FileName0=c:\temp\AppNameTempFile.txt
+FileName1=c:\temp\AppName.txt
+
+ServiceInfoCount=3
+ServiceUid0=10208DCA
+ServiceOpaqueDataInfoCount0=0
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+ServiceUid1=01020304
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+ServiceUid2=02030405
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=1
+LocAppLanguage0=24
+LocShortCaption0=HW_IF
+LocCaption0=HelloWorld_IF
+LocNumberOfAppIcons0=17
+LocIconFileName0=C:\resource\apps\swiappregintegration01_24.mbm
+LocGroupName0=Group_IF
+
+ViewDataCount0=2
+VwUid0=1238
+VwScreenMode0=5
+VwCaption0=View_01_IF
+VwNumberOfAppIcons0=18
+VwIconFileName0=C:\resource\apps\swiappregintegration01_24.mbm
+VwUid1=1239
+VwScreenMode1=6
+VwCaption1=View_02_IF
+VwIconFileName1=C:\resource\apps\swiappregintegration01_24.mbm
+VwNumberOfAppIcons1=19
+
+PropertiesCount=0
+
+[swiappregintegration_case01_RSC_data]
+AppUid=90000003
+AppFile=C:\sys\bin\swiappregintegration.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+
+OwnedFileCount=2
+FileName0=c:\temp\AppNameTempFile.txt
+FileName1=c:\temp\AppName.txt
+
+ServiceInfoCount=3
+ServiceUid0=10208DCA
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+ServiceOpaqueDataInfoCount0=0
+ServiceUid1=01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceUid2=02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_RSC
+LocCaption0=HelloWorld_RSC
+LocNumberOfAppIcons0=20
+LocIconFileName0=C:\resource\apps\swiappregintegration01_rsc.mbm
+LocGroupName0=Group_RSC
+
+ViewDataCount0=2
+VwUid0=1240
+VwScreenMode0=7
+VwCaption0=View_01_RSC
+VwNumberOfAppIcons0=21
+VwIconFileName0=C:\resource\apps\swiappregintegration01_rsc.mbm
+VwUid1=1241
+VwScreenMode1=8
+VwCaption1=View_02_RSC
+VwIconFileName1=C:\resource\apps\swiappregintegration01_rsc.mbm
+VwNumberOfAppIcons1=22
+
+PropertiesCount=0
+
+
+[swiappregintegration_base01_EN_data]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=1
+LocShortCaption0=HW_Base01_EN
+LocCaption0=HelloWorld_Base01_EN
+LocNumberOfAppIcons0=123
+LocIconFileName0=C:\resource\apps\swiappregintegration_base01_01.mbm
+LocGroupName0=Group_Base01_EN
+PropertiesCount=0
+
+
+[swiappregintegration_base01_FR_data]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=2
+LocShortCaption0=HW_Base01_FR
+LocCaption0=HelloWorld_Base01_FR
+LocNumberOfAppIcons0=124
+LocIconFileName0=C:\resource\apps\swiappregintegration_base01_02.mbm
+LocGroupName0=Group_Base01_FR
+PropertiesCount=0
+
+
+[swiappregintegration_base01_GE_data]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=3
+LocShortCaption0=HW_Base01_GE
+LocCaption0=HelloWorld_Base01_GE
+LocNumberOfAppIcons0=125
+LocIconFileName0=C:\resource\apps\swiappregintegration_base01_03.mbm
+LocGroupName0=Group_Base01_GE
+PropertiesCount=0
+
+
+[swiappregintegration_base01_RSC_data]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_Base01_RSC
+LocCaption0=HelloWorld_Base01_RSC
+LocNumberOfAppIcons0=127
+LocIconFileName0=C:\resource\apps\swiappregintegration_base01_rsc.mbm
+LocGroupName0=Group_Base01_RSC
+PropertiesCount=0
+
+[swiappregintegration_base01_FR_2_data]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=2
+LocShortCaption0=HW_Base01_FR_2
+LocCaption0=HelloWorld_Base01_FR_2
+LocNumberOfAppIcons0=126
+LocIconFileName0=C:\resource\apps\swiappregintegration_base01_02.mbm
+LocGroupName0=Group_Base01_FR2
+PropertiesCount=0
+
+
+[swiappregintegration_case02_EN_data]
+AppUid=90000005
+AppFile=C:\sys\bin\swiappregintegration02.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppGroup02
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=1
+ServiceUid0=10208DCA
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=doc/txt
+ServiceDataTypePriority1=0
+ServiceDataType1=doc/pdf
+ServiceOpaqueDataInfoCount0=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=1
+LocShortCaption0=HW_App2_EN
+LocCaption0=HelloWorld_App2_EN
+LocNumberOfAppIcons0=19
+LocIconFileName0=C:\resource\apps\swiappregintegration02_01.mbm
+PropertiesCount=0
+
+
+[swiappregintegration_case02_RSC_data]
+AppUid=90000005
+AppFile=C:\sys\bin\swiappregintegration02.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppGroup02
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=1
+ServiceUid0=10208DCA
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=doc/txt
+ServiceDataTypePriority1=0
+ServiceDataType1=doc/pdf
+ServiceOpaqueDataInfoCount0=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_App2_RSC
+LocCaption0=HelloWorld_App2_RSC
+LocNumberOfAppIcons0=29
+LocIconFileName0=C:\resource\apps\swiappregintegration02_rsc.mbm
+PropertiesCount=0
+
+[swiappregintegration03_IF]
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration03_IF_DATA
+CompareWithDb=True
+
+[swiappregintegration03_RSC]
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration03_RSC_DATA
+CompareWithDb=True
+
+[swiappregintegration03_IF_DATA]
+AppUid=90000006
+AppFile=C:\sys\bin\swiappregintegration03.exe
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=24
+AppOpaqueData0=IF Localised text App
+ServiceInfoCount=2
+ServiceUid0=01020305
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg3
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif3
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=24
+ServiceOpaqueData0=IF Localised text for service UID 0x01020305
+ServiceUid1=10208DCA
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=doc/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=doc/gif2
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale1=24
+ServiceOpaqueData1=IF Localised text for service UID 0x10208DCA
+LocalizableAppInfoCount=1
+LocAppLanguage0=24
+LocShortCaption0=C03_IF
+LocCaption0=Case03_IF
+LocNumberOfAppIcons0=112
+LocIconFileName0=C:\Icon\swiappregintegration03_24.mbm
+LocalizableAppInfoCount=1
+OwnedFileCount=0
+PropertiesCount=0
+
+[swiappregintegration03_RSC_DATA]
+AppUid=90000006
+AppFile=C:\sys\bin\swiappregintegration03.exe
+OwnedFileCount=0
+ServiceInfoCount=2
+ServiceUid0=01020305
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg3
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif3
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=RSC Localised text for service UID 0x01020305
+ServiceUid1=10208DCA
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=doc/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=doc/gif2
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=RSC Localised text for service UID 0x10208DCA
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=C03_RSC
+LocCaption0=Case03_RSC
+LocNumberOfAppIcons0=113
+LocIconFileName0=C:\Icon\swiappregintegration03_rsc.mbm
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=0
+AppOpaqueData0=RSC Localised text App
+PropertiesCount=0
+
+
+[swiappregintegration_base01]
+sis=z:\tswi\tsis\data\swiappregintegration_base01.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=02
+CompareWithDb=True
+
+[u_swiappregintegration_base01]
+uid=80010003
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[swiappregintegration_base02]
+sis=z:\tswi\tsis\data\swiappregintegration_base02.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=02
+devicelanguage2=03
+
+[swiappregintegration_base02_ru]
+sis=z:\tswi\tsis\data\swiappregintegration_base02_ru_root5.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=02
+devicelanguage2=03
+CompareWithDb=True
+
+[u_swiappregintegration_base02]
+uid=80010003
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[swiappregintegration_base01_sp]
+sis=z:\tswi\tsis\data\swiappregintegration_base01_sp.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=03
+CompareWithDb=True
+
+[swiappregintegration_case02_EN]
+AppRegEntriesConfigCount=2
+configsection0 = swiappregintegration_base01_EN_data
+configsection1 = swiappregintegration_case02_EN_data
+CompareWithDb=True
+
+[swiappregintegration_case02_FR]
+AppRegEntriesConfigCount=2
+configsection0 = swiappregintegration_base01_FR_2_data
+configsection1 = swiappregintegration_case02_RSC_data
+CompareWithDb=True
+
+[swiappregintegration_case02_GE]
+AppRegEntriesConfigCount=2
+configsection0 = swiappregintegration_base01_GE_data
+configsection1 = swiappregintegration_case02_RSC_data
+CompareWithDb=True
+
+[swiappregintegration_case02_EN_REV]
+AppRegEntriesConfigCount=2
+configsection1 = swiappregintegration_base01_EN_data
+configsection0 = swiappregintegration_case02_EN_data
+CompareWithDb=True
+
+[swiappregintegration_case02_FR_REV]
+AppRegEntriesConfigCount=2
+configsection1 = swiappregintegration_base01_FR_2_data
+configsection0 = swiappregintegration_case02_RSC_data
+CompareWithDb=True
+
+[swiappregintegration_case02_GE_REV]
+AppRegEntriesConfigCount=2
+configsection1 = swiappregintegration_base01_GE_data
+configsection0 = swiappregintegration_case02_RSC_data
+CompareWithDb=True
+
+[swiappregintegration_base01_pu]
+sis=z:\tswi\tsis\data\swiappregintegration_base01_pu.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=02
+devicelanguage2=03
+CompareWithDb=True
+
+[swiappregintegration_base01_EN]
+Locale  = 01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0 = 90000004
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration_base01_EN_data
+CompareWithDb=True
+
+[swiappregintegration_base01_EN_base]
+Locale  = 01
+NoOfEntries=1
+AppRegAppUidCount=1
+AppRegAppUid0 = 90000004
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration_base01_EN_data_base
+CompareWithDb=True
+
+[swiappregintegration_base01_EN_data_base]
+AppUid=90000004
+AppFile=Z:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=1
+LocShortCaption0=HW_Base01_EN
+LocCaption0=HelloWorld_Base01_EN
+LocNumberOfAppIcons0=123
+LocIconFileName0=z:\resource\apps\swiappregintegration_base01_01.mbm
+LocGroupName0=Group_Base01_EN
+PropertiesCount=0
+
+[swiappregintegration_base01_No_Eclipsing_EN]
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration_base01_No_Eclipsing_EN_data_base
+CompareWithDb=True
+
+[swiappregintegration_base01_No_Eclipsing_EN_data_base]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=1
+LocShortCaption0=HW_Base01_EN
+LocCaption0=HelloWorld_Base01_EN
+LocNumberOfAppIcons0=123
+LocIconFileName0=C:\resource\apps\swiappregintegration_base01_01.mbm
+LocGroupName0=Group_Base01_EN
+PropertiesCount=0
+
+[swiappregintegration_base01_FR]
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration_base01_FR_data_base
+CompareWithDb=True
+
+[swiappregintegration_base01_FR_data_base]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=2
+LocShortCaption0=HW_Base01_FR
+LocCaption0=HelloWorld_Base01_FR
+LocNumberOfAppIcons0=124
+LocIconFileName0=z:\resource\apps\swiappregintegration_base01_02.mbm
+LocGroupName0=Group_Base01_FR
+PropertiesCount=0
+
+
+[swiappregintegration_base01_No_Eclipsing_FR]
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration_base01_No_Eclipsing_FR_data_base
+CompareWithDb=True
+
+[swiappregintegration_base01_No_Eclipsing_FR_data_base]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=2
+LocShortCaption0=HW_Base01_FR
+LocCaption0=HelloWorld_Base01_FR
+LocNumberOfAppIcons0=124
+LocIconFileName0=C:\resource\apps\swiappregintegration_base01_02.mbm
+LocGroupName0=Group_Base01_FR
+PropertiesCount=0
+
+[swiappregintegration_base01_RSC]
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration_base01_RSC_data_base
+CompareWithDb=True
+
+[swiappregintegration_base01_RSC_data_base]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_Base01_RSC
+LocCaption0=HelloWorld_Base01_RSC
+LocNumberOfAppIcons0=127
+LocIconFileName0=z:\resource\apps\swiappregintegration_base01_rsc.mbm
+LocGroupName0=Group_Base01_RSC
+PropertiesCount=0
+
+[swiappregintegration_base01_No_Eclipsing_RSC]
+AppRegEntriesConfigCount=1
+configsection0 = swiappregintegration_base01_No_Eclipsing_RSC_data_base
+CompareWithDb=True
+
+[swiappregintegration_base01_No_Eclipsing_RSC_data_base]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_Base01_RSC
+LocCaption0=HelloWorld_Base01_RSC
+LocNumberOfAppIcons0=127
+LocIconFileName0=C:\resource\apps\swiappregintegration_base01_rsc.mbm
+LocGroupName0=Group_Base01_RSC
+PropertiesCount=0
+
+[swiappregintegration_case02_EN_romupgrade]
+AppRegEntriesConfigCount=2
+configsection0 = swiappregintegration_base01_EN_data_romupgrade
+configsection1 = swiappregintegration_case02_EN_data_romupgrade
+CompareWithDb=True
+
+[swiappregintegration_base01_EN_data_romupgrade]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=1
+LocShortCaption0=HW_Base01_EN
+LocCaption0=HelloWorld_Base01_EN
+LocNumberOfAppIcons0=123
+LocIconFileName0=z:\resource\apps\swiappregintegration_base01_01.mbm
+LocGroupName0=Group_Base01_EN
+PropertiesCount=0
+
+[swiappregintegration_case02_EN_data_romupgrade]
+AppUid=90000005
+AppFile=C:\sys\bin\swiappregintegration02.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppGroup02
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=1
+ServiceUid0=10208DCA
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=doc/txt
+ServiceDataTypePriority1=0
+ServiceDataType1=doc/pdf
+ServiceOpaqueDataInfoCount0=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=1
+LocShortCaption0=HW_App2_EN
+LocCaption0=HelloWorld_App2_EN
+LocNumberOfAppIcons0=19
+LocIconFileName0=C:\resource\apps\swiappregintegration02_01.mbm
+PropertiesCount=0
+
+[swiappregintegration_case02_FR_romupgrade]
+AppRegEntriesConfigCount=2
+configsection0 = swiappregintegration_base01_FR_2_data_romupgrade
+configsection1 = swiappregintegration_case02_RSC_data_romupgrade
+CompareWithDb=True
+
+[swiappregintegration_base01_FR_2_data_romupgrade]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=2
+LocShortCaption0=HW_Base01_FR_2
+LocCaption0=HelloWorld_Base01_FR_2
+LocNumberOfAppIcons0=126
+LocIconFileName0=z:\resource\apps\swiappregintegration_base01_02.mbm
+LocGroupName0=Group_Base01_FR2
+PropertiesCount=0
+
+[swiappregintegration_case02_RSC_data_romupgrade]
+AppUid=90000005
+AppFile=C:\sys\bin\swiappregintegration02.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppGroup02
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=1
+ServiceUid0=10208DCA
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=doc/txt
+ServiceDataTypePriority1=0
+ServiceDataType1=doc/pdf
+ServiceOpaqueDataInfoCount0=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_App2_RSC
+LocCaption0=HelloWorld_App2_RSC
+LocNumberOfAppIcons0=29
+LocIconFileName0=C:\resource\apps\swiappregintegration02_rsc.mbm
+PropertiesCount=0
+
+[swiappregintegration_case02_GE_romupgrade]
+AppRegEntriesConfigCount=2
+configsection0 = swiappregintegration_base01_GE_data_romupgrade
+configsection1 = swiappregintegration_case02_RSC_data_romupgrade
+CompareWithDb=True
+
+[swiappregintegration_base01_GE_data_romupgrade]
+AppUid=90000004
+AppFile=C:\sys\bin\swiappregintegration_base01.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Group_Base01
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=3
+LocShortCaption0=HW_Base01_GE
+LocCaption0=HelloWorld_Base01_GE
+LocNumberOfAppIcons0=125
+LocIconFileName0=C:\resource\apps\swiappregintegration_base01_03.mbm
+LocGroupName0=Group_Base01_GE
+PropertiesCount=0
+
+[swiappregintegration03]
+sis=z:\tswi\tsis\data\swiappregintegration03_opaque.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=24
+CompareWithDb=True
+
+[u_swiappregintegration03]
+uid=80010006
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[swiappregintegration_case04_noappfile]
+sis=z:\tswi\tsis\data\swiappregintegration04_noappfile.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=02
+CompareWithDb=True
+
+[swiappregintegration_case04_noappuid]
+sis=z:\tswi\tsis\data\swiappregintegration04_noappuid.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=02
+CompareWithDb=True
+
+[swiappregintegration_case04_wronguid2]
+sis=z:\tswi\tsis\data\swiappregintegration04_wronguid2.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=02
+CompareWithDb=True
+
+//APPINSTALL-SWI-APPREG-INTEGRATION-0012
+[swiappregintegration_case06_base]
+sis=z:\tusif\tsif\data\swiappregintegration_case06_base.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+
+[swiappregintegration_case06_sa]
+sis=z:\tusif\tsif\data\swiappregintegration_case06_sa.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=02
+devicelanguage2=03
+devicelanguage3=24
+
+[u_swiappregintegration_case06]
+uid=80010099
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[verify_case06_base]
+AppRegEntriesConfigCount=1
+configsection0 = verify_case06_base_data
+CompareWithDb=True
+
+[verify_case06_base_data]
+AppUid=90000009
+AppFile=C:\sys\bin\swiappregintegration_case05.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=GroupI
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_RSC
+LocCaption0=HelloWorld_RSC
+LocNumberOfAppIcons0=127
+LocIconFileName0=C:\resource\apps\swiappregintegration.mbm
+LocGroupName0=Group_RSC
+PropertiesCount=0
+
+[verify_case06_sa]
+AppRegEntriesConfigCount=4
+configsection0 = verify_case06_data2
+configsection1 = verify_case06_data4
+configsection2 = verify_case06_data5
+configsection3 = verify_case06_data1
+CompareWithDb=True
+
+[verify_case06_data1]
+AppUid=90000009
+AppFile=C:\sys\bin\swiappregintegration_case05.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=GroupI
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=1
+LocShortCaption0=HW_EN
+LocCaption0=HelloWorld_EN
+LocNumberOfAppIcons0=123
+LocIconFileName0=C:\resource\apps\swiappregintegration.mbm
+LocGroupName0=Group_EN
+PropertiesCount=0
+
+[verify_case06_data2]
+AppUid=90000005
+AppFile=C:\sys\bin\swiappregintegration02.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppGroup02
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=1
+ServiceUid0=10208DCA
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=doc/txt
+ServiceDataTypePriority1=0
+ServiceDataType1=doc/pdf
+ServiceOpaqueDataInfoCount0=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_App2_RSC
+LocCaption0=HelloWorld_App2_RSC
+LocNumberOfAppIcons0=29
+LocIconFileName0=C:\resource\apps\swiappregintegration02_rsc.mbm
+PropertiesCount=0
+
+[verify_case06_data3]
+AppUid=90000006
+AppFile=C:\sys\bin\swiappregintegration03.exe
+OwnedFileCount=0
+ServiceInfoCount=2
+ServiceUid0=01020305
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg3
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif3
+ServiceOpaqueDataInfoCount0=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=RSC Localised text for service UID 0x01020305
+ServiceUid1=10208DCA
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=doc/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=doc/gif2
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=RSC Localised text for service UID 0x10208DCA
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=C03_RSC
+LocCaption0=Case03_RSC
+LocNumberOfAppIcons0=113
+LocIconFileName0=C:\Icon\swiappregintegration03_rsc.mbm
+AppOpaqueDataInfoCount=1
+AppOpaqueLocale0=0
+AppOpaqueData0=RSC Localised text App
+PropertiesCount=0
+
+[verify_case06_data4]
+AppUid=90000006
+AppFile=C:\sys\bin\swiappregintegration_case06.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=GroupI
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_RSC
+LocCaption0=HelloWorld_RSC
+LocNumberOfAppIcons0=127
+LocIconFileName0=C:\resource\apps\swiappregintegration.mbm
+LocGroupName0=Group_RSC
+PropertiesCount=0
+
+[verify_case06_data5]
+AppUid=90000007
+AppFile=C:\sys\bin\swiappregintegration_case07.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=GroupI
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_RSC
+LocCaption0=HelloWorld_RSC
+LocNumberOfAppIcons0=127
+LocIconFileName0=C:\resource\apps\swiappregintegration.mbm
+LocGroupName0=Group_RSC
+PropertiesCount=0
+
+
+//APPINSTALL-SWI-APPREG-INTEGRATION-0009
+[swiappregintegration_SA]
+sis=z:\tusif\tsif\data\swiappregintegration_case05.SIS
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[swiappregintegration_SA_SU]
+sis=z:\tusif\tsif\data\swiappregintegration_case05_SU.SIS
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[u_swiappregintegration_SA]
+uid=80010009
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[verify_reg_SA]
+AppRegEntriesConfigCount=1
+configsection0 = verify_reg_SA_data
+CompareWithDb=True
+
+[verify_reg_SA_SU]
+AppRegEntriesConfigCount=1
+configsection0 = verify_reg_SA_SU_data
+CompareWithDb=True
+
+[verify_reg_SA_data]
+AppUid=90000009
+AppFile=C:\sys\bin\swiappregintegration_case05.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=GroupI
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_RSC
+LocCaption0=HelloWorld_RSC
+LocNumberOfAppIcons0=127
+LocIconFileName0=C:\resource\apps\swiappregintegration.mbm
+LocGroupName0=Group_RSC
+PropertiesCount=0
+
+[verify_reg_SA_SU_data]
+AppUid=90000009
+AppFile=C:\sys\bin\swiappregintegration_case05.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=GroupII
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_RSC
+LocCaption0=HelloWorld_RSC
+LocNumberOfAppIcons0=127
+LocIconFileName0=C:\resource\apps\swiappregintegration.mbm
+LocGroupName0=Group_RSC
+PropertiesCount=0
+
+
+//APPINSTALL-SWI-APPREG-INTEGRATION-0010,11
+[swiappregintegration_no_app]
+sis=z:\tusif\tsif\data\swiappregintegration_case08_sa1.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[swiappregintegration_sa_app]
+sis=z:\tusif\tsif\data\swiappregintegration_case08_sa2.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+
+[u_swiappregintegration_no_app]
+uid=80010099
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[no_app]
+AppRegEntriesConfigCount=0
+CompareWithDb=True
+
+[verify_sa_app]
+AppRegEntriesConfigCount=1
+configsection0 = verify_case06_data1
+CompareWithDb=True
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tswiappregintegration.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,207 @@
+//
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// SWI integreation test cases for appreg parsing
+//
+
+PRINT Run all SWI integreation test cases for appreg parsing
+LOAD_SUITE tuiscriptadaptors
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+LOAD_SUITE tscr
+
+// Delete the SCR Database file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr_appreginfo.ini db_file 
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0001
+//! @SYMTestCaseDesc	Installs a SIS file having complete appregistration data for EN, GE and IF
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	File installs sucessfully
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0001
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_EN
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_IF
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_spanish
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_RSC
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case01_EN
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_case01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0001
+
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0002
+//! @SYMTestCaseDesc	Upgrades an existing SA pacakge with an SA having new application and new details for FR and GE
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	File installs sucessfully
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0002
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_No_Eclipsing_EN
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_No_Eclipsing_FR
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_No_Eclipsing_RSC
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base02
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_FR
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0002
+
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0003
+//! @SYMTestCaseDesc	Upgrades an existing SA pacakge with an SP having new application and new details for GE
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	File installs sucessfully
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0003
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_sp
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0003
+
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0004
+//! @SYMTestCaseDesc	Upgrades an existing SA pacakge with an PU having new application and new details for FR and GE
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	File installs sucessfully
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0004
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_pu
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_FR
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0004
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0005
+//! @SYMTestCaseDesc	Installs an SA pacakge having an application with registration resource file with localized opaque data
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	File installs sucessfully
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0005
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration03
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration03_RSC
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration03_IF
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration03
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0005
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0006
+//! @SYMTestCaseDesc	Installs a package containg an app with registration resouce file which has no appfile name
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		
+//! @SYMTestExpectedResults	Sis installation fails
+//START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0006
+//RUN_TEST_STEP_RESULT -20 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case04_noappfile
+//END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0006
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0007
+//! @SYMTestCaseDesc	Installs a package containg an app with registration resouce file which has no application uid
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		
+//! @SYMTestExpectedResults	Sis installation fails
+//START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0007
+//RUN_TEST_STEP_RESULT -20 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case04_noappuid
+//END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0007
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0008
+//! @SYMTestCaseDesc	Installs a package having some resource file but not application registration resource file
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		
+//! @SYMTestExpectedResults	Sis installation fails
+//START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0008
+//RUN_TEST_STEP_RESULT -20 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case04_wronguid2
+//END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0008
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0009
+//! @SYMTestCaseDesc	Tests the SA upgrade that is SU signed.
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Install a SIS file that followed by an SA upgrade that is SU signed and reflects the latest SA installation. Reg data updated in second SA(Group name changed.)
+//! @SYMTestExpectedResults	File installs sucessfully
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0009
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_SA
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_reg_SA
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_SA_SU
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_reg_SA_SU
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_SA
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0009
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0010
+//! @SYMTestCaseDesc	Tests the installation of an SIS file which delivers no files followed by a SA upgrade that delivers an app.
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installation succeeds
+//! @SYMTestExpectedResults	File installs sucessfully
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0010
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_no_app
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini no_app
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_sa_app
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_sa_app
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_no_app
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0010
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0011
+//! @SYMTestCaseDesc	Tests the installation of an SIS file which delivers some files followed by a SA upgrade that delivers no files.
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installation succeeds
+//! @SYMTestExpectedResults	File installs sucessfully
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0011
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_sa_app
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_sa_app
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_no_app
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini no_app
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_no_app
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0011
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-INTEGRATION-0012
+//! @SYMTestCaseDesc	Tests the installation of an SIS file embeds an SP, which embeds a PU, which in turn embeds another SP, that embeds another SP. (SA->SP->PU->SP->SP)
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Install a SIS file that embeds recursively other SIS files with various upgrade combinations.
+//! @SYMTestExpectedResults	File installs sucessfully
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0012
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case06_base
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_case06_base
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case06_sa
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini verify_case06_sa
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_case06
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0012
+
+// Ensure that SWIS shuts down after the above tests to make sure heap checks run
+RUN_TEST_STEP 5 tuiscriptadaptors SwisNotRunning
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tswiappregintegration_stub.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+//
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// SWI integreation test cases for appreg parsing
+//
+
+PRINT Run all SWI integreation test cases for appreg parsing
+LOAD_SUITE tuiscriptadaptors
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-STUB-0001
+//! @SYMTestCaseDesc	Upgrades an existing ROM pacakge with an SA,RU having new application and new details for FR and GE
+//! @SYMTestPriority	Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	File installs sucessfully
+START_TESTCASE APPINSTALL-SWI-APPREG-STUB-0001
+// Check for the app reg entires from ROM, base_01 is present in ROM
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_EN_base
+// Upgarde the ROM based package with an SA,RU
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base02_ru
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN_romupgrade
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_FR_romupgrade
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_GE_romupgrade
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_case02_EN_romupgrade
+// Uninstall the ROM Upgrade
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini u_swiappregintegration_base01
+// Going back to the base version in ROM
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.ini swiappregintegration_base01_EN_base
+END_TESTCASE APPINSTALL-SWI-APPREG-STUB-0001
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/tswidaemonstub.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tswidaemonstub.script	Tue Aug 31 15:21:33 2010 +0300
@@ -19,6 +19,7 @@
 PRINT Run SWI Daemon Stub tests
 LOAD_SUITE tuiscriptadaptors
 LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tdaemon
 
 //! @SYMTestCaseID 		API-SEC-SWIDaemonStub-I-0001
 //! @SYMTestCaseDesc 		Install SA and SP on the media card
@@ -51,6 +52,7 @@
 
 // Mount the card back and wait for registy to be rebuilt (for ROM stubs)
 RUN_TEST_STEP 100 tuiscriptadaptors MmcMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini X
+RUN_TEST_STEP 100 tdaemon AddDriveStep z:\tswi\tdaemon\scripts\tdaemon.ini AddDriveX
 DELAY 5000
 
 // Ensure files on the removable drive aren't cleaned up and also the SA stub tries to propagate
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors.script	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -806,27 +806,6 @@
 END_TESTCASE API-SEC-DEF076366-0001
 
 
-//! @SYMTestCaseID 		API-SEC-DEF082510-0001
-//! @SYMTestCaseDesc		Import ECOM plugins for apparc SidChecker interface - required by INC069526
-//! @SYMDEF			DEF082510
-//! @SYMTestPriority		High
-//! @SYMTestType		CIT
-//! @SYMTestStatus		3. Released
-//! @SYMTestActions 		Verify Sid presence query via plugni works.
-//! @SYMTestExpectedResults	Present when present, absent when absent
-//! @SYMDevelopedForRelease	Mike
-
-START_TESTCASE API-SEC-DEF082510-0001
-
-RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_absent
-RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe
-RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_present
-RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini u_exe
-RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_absent
-
-END_TESTCASE API-SEC-DEF082510-0001
-
-
 //! @SYMTestCaseID 		API-SEC-BOGUS_LOGO-0001
 //! @SYMTestCaseDesc		Installs a SIS file with a bogus logo
 //! @SYMDEF			DEF087165 
@@ -1326,7 +1305,7 @@
 
 END_TESTCASE API-SEC-SWIREG-Hidden-0004
 
-//! @SYMTestCaseID SEC-cyclicDependency-def145326
+//! @SYMTestCaseID SEC-cyclicDependency-PDEF145405
 //! @SYMTestCaseDesc User installs a package(A) with dependency on package (B), then installs package B with dependency on A, then unistalls pkg B
 //! @SYMDEF  INC
 //! @SYMTestPriority High
@@ -1340,6 +1319,5 @@
 RUN_TEST_STEP 100 tuiscriptadaptors RemoveWithLastDependent z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini cyclicDependency_Uid
 RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini cyclicDependency_U_B
 END_TESTCASE cyclicDependency
-
 // Ensure that SWIS shuts down after the above tests to make sure heap checks run
 RUN_TEST_STEP 5 tuiscriptadaptors SwisNotRunning
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,59 @@
+[swiappregintegration_performance]
+MaxDuration=2000
+sis=z:\tswi\tsis\data\swiappregintegration01.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=03
+devicelanguage2=24
+
+[swiappregintegration_nolang_performance]
+MaxDuration=1700
+sis=z:\tswi\tsis\data\swiappregintegration01.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[swiappregintegration_sa_app_performance]
+MaxDuration=1500
+sis=z:\tusif\tsif\data\swiappregintegration_case08_sa2.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+
+[swiappregintegration_no_app_performance]
+MaxDuration=1500
+sis=z:\tusif\tsif\data\swiappregintegration_case08_sa1.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[swiappregintegration_oneapp_performance]
+MaxDuration=1500
+sis=z:\tswi\tsis\data\swiappregintegration_base01.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[swiappregintegration_twoapps_performance]
+MaxDuration=1500
+sis=z:\tswi\tsis\data\swiappregintegration_twoapps_performance.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[basic_noapp_performance]
+MaxDuration=1500
+sis=z:\tswi\tsis\data\simple1.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[u_basic_noapp_performance]
+uid=80008880
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[u_swiappregintegration_base01]
+uid=80010003
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[u_swiappregintegration_case01]
+uid=80010002
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[swiappregintegration_multipleapp_performance]
+MaxDuration=2000
+sis=z:\tswi\tsis\data\swiappregintegration_multipleapp_performance.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[u_swiappregintegration_no_app]
+uid=80010099
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,105 @@
+//
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//! @file
+// SWIS unit (integration) tests
+PRINT Run all SWIS tests
+LOAD_SUITE tuiscriptadaptors
+LOAD_SUITE tSisRegistryTest
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0001
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having an executable
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file an exe
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0001
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini basic_noapp_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_basic_noapp_performance
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0001
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0002
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having complete appregistration data for EN, GE and IF
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0002
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_case01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0002
+
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0003
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having complete appregistration data for EN, GE and IF
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data with zero device supported languages
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0003
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_nolang_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_case01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0003
+
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0004
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having an application with registration resouce file and localized data (3 loc files)
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having a single application with minimal data (app data, loclized App Info and Caption and icon info)
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0004
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_oneapp_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_base01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0004
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0005
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having two applications with registration resouce file and localized data (3 and 2 loc files)
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having two applications with minimal data (app data, loclized App Info and Caption and icon info)
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0005
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_twoapps_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_base01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0005
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0006
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having five applications with registration resouce file and localized data (3,2,1,1 and 1 loc files)
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having two applications with minimal data (app data, loclized App Info and Caption and icon info)
+//! @SYMTestExpectedResults	File installs sucessfull
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0006
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_multipleapp_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_base01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0006
+
+// Ensure that SWIS shuts down after the above tests to make sure heap checks run
+RUN_TEST_STEP 5 tuiscriptadaptors SwisNotRunning
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0007
+//! @SYMTestCaseDesc		Tests the performance of upgrade of a SIS file which delivers some files and upgrade delivering no files.
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installation succeeds
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-PERFORMANCE-0007
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_sa_app_performance
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_no_app_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_no_app
+END_TESTCASE APPINSTALL-SWI-APPREG-PERFORMANCE-0007
+
+
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors_winscw.script	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors_winscw.script	Tue Aug 31 15:21:33 2010 +0300
@@ -23,13 +23,12 @@
 //! @SYMDEF			DEF094747
 //! @SYMTestPriority		Medium
 //! @SYMTestActions		Install a SIS file , which would otherwise throw User::11 panic due to "Unique Vendor Name" exceeding descriptor's max length during AppendFormatList operation. 
-//! @SYMTestExpectedResults	The SIS file installs successfully.
+//! @SYMTestExpectedResults	The SIS file doesn't install successfully. Throws -6 as the descriptor is exceeding length
 //! @SYMDevelopedForRelease	Argus
 
 START_TESTCASE API-SEC-DEF094747-0001
 
-RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini handle_BufferOverflow1
-RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini u_handle_BufferOverflow1
+RUN_TEST_STEP_RESULT -6 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini handle_BufferOverflow1
 
 END_TESTCASE API-SEC-DEF094747-0001
 
@@ -39,13 +38,12 @@
 //! @SYMDEF			DEF094747
 //! @SYMTestPriority		Medium
 //! @SYMTestActions		Install a SIS file , which would throw User::11 panic due to "Package Name" exceeding descriptor's max length during AppendFormatList operation. 
-//! @SYMTestExpectedResults	The SIS file installs successfully.
+//! @SYMTestExpectedResults	The SIS file doesn't install successfully. Throws -6 as the descriptor is exceeding length
 //! @SYMDevelopedForRelease	Argus
 
 START_TESTCASE API-SEC-DEF094747-0002
 
-RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini handle_BufferOverflow2
-RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini u_handle_BufferOverflow2
+RUN_TEST_STEP_RESULT -6 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini handle_BufferOverflow2
 
 END_TESTCASE API-SEC-DEF094747-0002
 
@@ -55,13 +53,12 @@
 //! @SYMDEF			DEF094747
 //! @SYMTestPriority		Medium
 //! @SYMTestActions		Install a SIS file , which would otherwise throw User::11 panic due to "Vendor Name" exceeding descriptor's max length during AppendFormatList operation.
-//! @SYMTestExpectedResults	The SIS file installs successfully.
+//! @SYMTestExpectedResults	The SIS file doesn't install successfully. Throws -6 as the descriptor is exceeding length
 //! @SYMDevelopedForRelease	Argus
 
 START_TESTCASE API-SEC-DEF094747-0003
 
-RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini handle_BufferOverflow3
-RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini u_handle_BufferOverflow3
+RUN_TEST_STEP_RESULT -6 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini handle_BufferOverflow3
 
 END_TESTCASE API-SEC-DEF094747-0003
 
--- a/installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_client.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_client.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -99,3 +99,14 @@
 	return SendReceive(EDeleteEntry, TIpcArgs(index, &packageUid, &time));
 	}
 
+TInt RSisRegistryAccessSession::AddAppRegInfoL(const TDesC& aAppRegFile, TInt& aSpentTimeInMillisecond)
+    {
+    TPckg<TInt> time(aSpentTimeInMillisecond);
+    return SendReceive(EAddAppRegInfo, TIpcArgs(&aAppRegFile, &time));
+    }
+
+TInt RSisRegistryAccessSession::RemoveAppRegInfoL(const TDesC& aAppRegFile, TInt& aSpentTimeInMillisecond)
+    {
+    TPckg<TInt> time(aSpentTimeInMillisecond);
+    return SendReceive(ERemoveAppRegInfo, TIpcArgs(&aAppRegFile, &time));
+    }
--- a/installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_client.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_client.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -55,6 +55,15 @@
 	 */
 	TInt DeleteEntryL(Swi::CSisRegistryPackage& aPackage, TInt& aSpentTimeInMillisecond);
 
+	/**
+	 * Adds the Application Registration Info from *_reg.rsc
+	 */
+	TInt AddAppRegInfoL(const TDesC& aAppRegFile, TInt& aSpentTimeInMillisecond);
+	
+	/**
+     * Removes the Application Registration Info
+     */
+    TInt RemoveAppRegInfoL(const TDesC& aAppRegFile, TInt& aSpentTimeInMillisecond);
 	};
 
 #endif	// __SISREGISTRYACCESSCLIENT_H__
--- a/installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_common.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_common.h	Tue Aug 31 15:21:33 2010 +0300
@@ -34,4 +34,6 @@
 	EAddEntry,
 	EUpdateEntry,
 	EDeleteEntry,
+	EAddAppRegInfo,
+	ERemoveAppRegInfo,
 	};
--- a/installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_server_session.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/sisregistryaccess_server_session.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -32,6 +32,7 @@
 #include "siscontroller.h"
 #include "application.h"
 #include "userselections.h"
+#include "sislauncherclient.h"
 
 /////////////////////// Utility functions //////////////////////////////
 void StartTimer(TTime& aTimer)
@@ -110,81 +111,107 @@
 
 void CSisRegistryAccessSession::ServiceL(const RMessage2& aMessage)
 	{
-	// create transaction on SCR for mutable operations
-	Server().RegistrySession().CreateTransactionL();
-	// SWI regsitry needs a transaction to cover updates to logs during package add/update/removal
-	Usif::RStsSession stsSession;
-	TInt64 transactionID = stsSession.CreateTransactionL();
-	CleanupClosePushL(stsSession);
-	TInt err(0);
-	
-	TTime timer;
-	StartTimer(timer);
-	
-	TSisRegistryAccessMessages f = static_cast<TSisRegistryAccessMessages>(aMessage.Function());
-	switch (f)
-		{
-		case EAddEntry:
-		case EUpdateEntry:
-			{
-			TInt len = aMessage.GetDesLengthL(0);
-			HBufC8 *controllerData = HBufC8::NewLC(len);
-			TPtr8 ptrControllerData(controllerData->Des());
-			aMessage.ReadL(0, ptrControllerData);
-			
-			// create the controller
-			Swi::CDesDataProvider *desProvider = Swi::CDesDataProvider::NewLC(ptrControllerData);
-			Swi::Sis::CController *controller = Swi::Sis::CController::NewLC(*desProvider, Swi::Sis::EAssumeType);
-			// setup the application
-			Swi::CApplication *app = Swi::CApplication::NewLC();
-			app->SetInstall(*controller);
-			// since the attributes chosen by the user don't have impact on the adding/updating entry tests,
-			// they are set with the constant values.
-			app->UserSelections().SetLanguage(ELangEnglish);
-			app->UserSelections().SetDrive(2);
-			
-			if(EAddEntry == f)
-				{
-				TRAP(err, Server().RegistrySession().AddEntryL(*app, ptrControllerData, transactionID));
-				}
-			else
-				{
-				TRAP(err, Server().RegistrySession().UpdateEntryL(*app, ptrControllerData, transactionID));
-				}
-			CleanupStack::PopAndDestroy(4, controllerData); // controllerData, desProvider, controller, app
-			break;
-			}
-		case EDeleteEntry:
-			{
-			// Get Uid and index
-			// Augmentation index - argument 0
-			TInt packageIndex = aMessage.Int0();
-
-			// Uid (ipc argument 1)
-			TUid uid;
-			TPckg<TUid> packageUid(uid);
-			aMessage.ReadL(1, packageUid);
-			
-			// Invoke SisRegistry server API using SisRegistryClient
-			Swi::CSisRegistryPackage* package = Swi::CSisRegistryPackage::NewLC(uid, KNullDesC, KNullDesC); // For the delete API, the name and the vendor of the package are irrelevant
-			package->SetIndex(packageIndex);
-			TRAP(err, Server().RegistrySession().DeleteEntryL(*package, transactionID));
-
-			CleanupStack::PopAndDestroy(package);
-			break;
-			}
-		default:
-			{
-			PanicClient(aMessage, EPanicIllegalFunction);
-			break;
-			}
-		}
-	
-	stsSession.CommitL();
-	CleanupStack::PopAndDestroy(&stsSession);
-
-	Server().RegistrySession().CommitTransactionL();
-	
+    TSisRegistryAccessMessages f = static_cast<TSisRegistryAccessMessages>(aMessage.Function());
+    TTime timer;
+    StartTimer(timer);
+    TInt err(0);
+    if(f == EAddAppRegInfo)
+        {
+        TUint regFileNameLen = aMessage.GetDesLengthL(0);
+        HBufC* regFileName = HBufC::NewLC(regFileNameLen);
+        TPtr namePtr = regFileName->Des();
+        aMessage.ReadL(0, namePtr);
+        TUid appUid = TUid::Uid(aMessage.Int1());
+        Swi::RSisRegistrySession sisRegistryWritableSession;
+        CleanupClosePushL(sisRegistryWritableSession);
+        TRAP(err, sisRegistryWritableSession.Connect());
+        TRAP(err, sisRegistryWritableSession.AddAppRegInfoL(*regFileName););
+        CleanupStack::PopAndDestroy(2, regFileName);
+        }
+    else if(f == ERemoveAppRegInfo)
+        {
+        TUint regFileNameLen = aMessage.GetDesLengthL(0);
+        HBufC* regFileName = HBufC::NewLC(regFileNameLen);
+        TPtr namePtr = regFileName->Des();
+        aMessage.ReadL(0, namePtr);
+        TUid appUid = TUid::Uid(aMessage.Int1());
+        Swi::RSisRegistrySession sisRegistryWritableSession;
+        CleanupClosePushL(sisRegistryWritableSession);
+        TRAP(err, sisRegistryWritableSession.Connect());
+        TRAP(err, sisRegistryWritableSession.RemoveAppRegInfoL(*regFileName););
+        CleanupStack::PopAndDestroy(2, regFileName);
+        }
+    else
+        {
+        // create transaction on SCR for mutable operations
+        Server().RegistrySession().CreateTransactionL();
+        // SWI regsitry needs a transaction to cover updates to logs during package add/update/removal
+        Usif::RStsSession stsSession;
+        TInt64 transactionID = stsSession.CreateTransactionL();
+        CleanupClosePushL(stsSession);
+        
+        switch (f)
+            {
+            case EAddEntry:
+            case EUpdateEntry:
+                {
+                TInt len = aMessage.GetDesLengthL(0);
+                HBufC8 *controllerData = HBufC8::NewLC(len);
+                TPtr8 ptrControllerData(controllerData->Des());
+                aMessage.ReadL(0, ptrControllerData);
+                
+                // create the controller
+                Swi::CDesDataProvider *desProvider = Swi::CDesDataProvider::NewLC(ptrControllerData);
+                Swi::Sis::CController *controller = Swi::Sis::CController::NewLC(*desProvider, Swi::Sis::EAssumeType);
+                // setup the application
+                Swi::CApplication *app = Swi::CApplication::NewLC();
+                app->SetInstall(*controller);
+                // since the attributes chosen by the user don't have impact on the adding/updating entry tests,
+                // they are set with the constant values.
+                app->UserSelections().SetLanguage(ELangEnglish);
+                app->UserSelections().SetDrive(2);
+                
+                if(EAddEntry == f)
+                    {
+                    TRAP(err, Server().RegistrySession().AddEntryL(*app, ptrControllerData, transactionID));
+                    }
+                else
+                    {
+                    TRAP(err, Server().RegistrySession().UpdateEntryL(*app, ptrControllerData, transactionID));
+                    }
+                CleanupStack::PopAndDestroy(4, controllerData); // controllerData, desProvider, controller, app
+                break;
+                }
+            case EDeleteEntry:
+                {
+                // Get Uid and index
+                // Augmentation index - argument 0
+                TInt packageIndex = aMessage.Int0();
+    
+                // Uid (ipc argument 1)
+                TUid uid;
+                TPckg<TUid> packageUid(uid);
+                aMessage.ReadL(1, packageUid);
+                
+                // Invoke SisRegistry server API using SisRegistryClient
+                Swi::CSisRegistryPackage* package = Swi::CSisRegistryPackage::NewLC(uid, KNullDesC, KNullDesC); // For the delete API, the name and the vendor of the package are irrelevant
+                package->SetIndex(packageIndex);
+                TRAP(err, Server().RegistrySession().DeleteEntryL(*package, transactionID));
+    
+                CleanupStack::PopAndDestroy(package);
+                break;
+                }
+            default:
+                {
+                PanicClient(aMessage, EPanicIllegalFunction);
+                break;
+                }
+            }
+        
+        stsSession.CommitL();
+        CleanupStack::PopAndDestroy(&stsSession);
+        Server().RegistrySession().CommitTransactionL();
+        }	
 	TPckg<TInt> timePckg(StopTimer(timer));
 	if(EDeleteEntry == f)
 		aMessage.WriteL(2, timePckg);
--- a/installationservices/swi/test/tuiscriptadaptors/swifileutilitysteps.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/swifileutilitysteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -128,69 +128,3 @@
 	SetTestStepResult(EPass);	
 	return TestStepResult();
 	}
-
-
-CSwiFileExistsStep::CSwiFileExistsStep()
-    {
-    SetTestStepName(KSwiFileExistsStep);
-    }
-
-
-TVerdict CSwiFileExistsStep::doTestStepL()
-    {
-    SetTestStepResult(EFail);
-    
-    RTestUtilSessionSwi testUtil;
-    User::LeaveIfError(testUtil.Connect());
-    CleanupClosePushL(testUtil);
-    
-    _LIT(KNoOfFiles, "FilesCount");
-    _LIT(KFile, "File");
-    
-    TInt filesCount(0);
-    GetIntFromConfig(ConfigSection(), KNoOfFiles(), filesCount);
-    
-    if(filesCount == 0)
-        {
-        User::Leave(KErrArgument);
-        }
-    
-    for(TInt i=0; i<filesCount; ++i)
-        {
-        TBuf<12> file;
-        file = KFile;
-        GenerateIndexedAttributeNameL(file, filesCount);
-        
-        TPtrC fileName;
-        GetStringFromConfig(ConfigSection(), file, fileName);
-        
-        HBufC* fileNameBuf = fileName.AllocLC();
-        TBool result= testUtil.FileExistsL(*fileNameBuf);
-        
-        if(!result)
-            {
-            INFO_PRINTF2(_L("File not found - %S ."), fileNameBuf);
-            CleanupStack::PopAndDestroy(fileNameBuf);
-            return TestStepResult();
-            }
-        else
-            {
-            INFO_PRINTF2(_L("File exists -  %S ."), fileNameBuf);
-            CleanupStack::PopAndDestroy(fileNameBuf);
-            }
-        }
-    
-    CleanupStack::PopAndDestroy(&testUtil);
-    
-    SetTestStepResult(EPass);
-    return TestStepResult();
-    }
-
-
-void CSwiFileExistsStep::GenerateIndexedAttributeNameL(TDes& aInitialAttributeName, TInt aIndex)
-    {
-    const TInt MAX_INT_STR_LEN = 8;
-    TBuf<MAX_INT_STR_LEN> integerAppendStr;
-    integerAppendStr.Format(_L("%d"), aIndex);
-    aInitialAttributeName.Append(integerAppendStr);
-    }
--- a/installationservices/swi/test/tuiscriptadaptors/swifileutilitysteps.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/swifileutilitysteps.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -25,7 +25,6 @@
 
 _LIT(KSwiCopyFilesStep, "SwiCopyFilesStep");
 _LIT(KSwiDeleteFilesStep, "SwiDeleteFilesStep");
-_LIT(KSwiFileExistsStep, "SwiFileExistsStep");
 
 class CSwiCopyFilesStep : public CTestStep
 	{
@@ -43,16 +42,6 @@
 
 	};
 
-class CSwiFileExistsStep : public CTestStep
-    {
-public:
-    CSwiFileExistsStep();
-    TVerdict doTestStepL();
-    
-private:
-    void GenerateIndexedAttributeNameL(TDes& aInitialAttributeName, TInt aIndex);
-
-    };
 
 
 #endif //SWIFILEUTILITYSTEPS_H
--- a/installationservices/swi/test/tuiscriptadaptors/tswisasyncstep.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/tswisasyncstep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -36,7 +36,9 @@
 
 #include "dessisdataprovider.h"
 #include "cafsisdataprovider.h"
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include <apsidchecker.h>
+#endif
 #include <e32math.h>
 
 using namespace Swi;
@@ -756,6 +758,7 @@
 
 	iAsyncLauncher=CAsyncLauncher::NewL();
 	User::LeaveIfError(RProperty::Get(KUidSystemCategory, KSystemStartupModeKey, iBootMode));
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifndef SWI_TEXTSHELL_ROM
 	if (iBootMode != KTextShell) 
 		{
@@ -771,6 +774,9 @@
 	// we always get the boot mode as 0 , reset the value to 1.
 	iBootMode = KTextShell;
 #endif
+#else
+	iBootMode = KTextShell;
+#endif
 	iNotificationCount = 0;
 	}
 
@@ -784,6 +790,7 @@
 
 	delete iWatchdog;
 	iWatchdog=0;
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifndef SWI_TEXTSHELL_ROM
 	if (iBootMode != KTextShell)
 		{
@@ -791,6 +798,7 @@
 		delete iSwiSidChecker;
 		}
 #endif
+#endif
 	CActiveScheduler::Install(0);
 	delete iScheduler;
 	iScheduler=0;
--- a/installationservices/swi/test/tuiscriptadaptors/tswisasyncstep.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/tswisasyncstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -119,7 +119,9 @@
  * @test
  * @internalComponent
  */
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 class CAppSidChecker;
+#endif
 class CAsyncManager : public CActive
 	{
 public:
@@ -189,9 +191,9 @@
 	CWatchdog* iWatchdog;
 
 	Swi::CAsyncLauncher* iAsyncLauncher;
-
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	CAppSidChecker *iSwiSidChecker;
-
+#endif
 	TInt iNotificationCount;
 	TInt iBootMode;
 	};
--- a/installationservices/swi/test/tuiscriptadaptors/tswisserver.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/tswisserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -133,6 +133,8 @@
 	// install steps
 	if (aStepName == KSwisInstallStep)	// Install with file name
 		testStep = new CSwisInstallStep(CSwisInstallStep::EUseFileName);
+	else if (aStepName == KSwisInstallPerformanceStep)
+	    testStep = new CSwisInstallStep(CSwisInstallStep::ECheckInstallPerformance);
 	else if (aStepName == KSwisInstallFHStep)	// Install with file handle
 		testStep = new CSwisInstallStep(CSwisInstallStep::EUseFileHandle);
 	else if (aStepName == KSwisInstallMemStep)	// Install with CDesDataProvider
@@ -234,7 +236,7 @@
 	else if (aStepName == KSwisGetPackageDetails)	// Get Package Details
 		testStep = new CSwisUninstallPkgsStep(CSwisUninstallPkgsStep::EPkgDetails);
 	else if (aStepName == KSwisGetPublishedUidArrayStep)  // Get Published Package Uid's Array
-	    testStep = new CSwisCheckPublishUidStep();
+	        testStep = new CSwisCheckPublishUidStep();
 	else if (aStepName == KSwisRemoveWithLastDependent)  // Set RemoveWithLastDependent
 		testStep = new CSwisSetRemoveWithLastDependent();
 	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
--- a/installationservices/swi/test/tuiscriptadaptors/tswisstep.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/tswisstep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -907,6 +907,10 @@
 		case EUseFileName:
 			SetTestStepName(KSwisInstallStep);
 			break;
+			
+		case ECheckInstallPerformance:
+		    SetTestStepName(KSwisInstallPerformanceStep);
+		    break;
 		
 		case EUseCAF:
 			SetTestStepName(KSwisInstallCAFStep);
@@ -1212,6 +1216,13 @@
 	return TestStepResult();
 	}
 
+void CSwisInstallStep::PrintPerformanceLog(TTime aTime)
+    {
+    _LIT(KPerformanceTestInfo, "PERFORMANCE_LOG_INFORMATION");
+    TDateTime timer = aTime.DateTime();
+    INFO_PRINTF6(_L("%S,%d:%d:%d:%d"), &KPerformanceTestInfo(), timer.Hour(), timer.Minute(), timer.Second(), timer.MicroSecond());
+    }
+
 TInt CSwisInstallStep::DoInstallL(CInstallPrefs& aInstallPrefs)
 	{
 	switch (iInstallType)
@@ -1226,6 +1237,51 @@
 			return error;
 			}
 
+		case ECheckInstallPerformance:
+		    {
+		    _LIT(KMaxDurationName, "MaxDuration");
+            _LIT(KMaxTestCaseDuration, "TEST_CASE_MAXIMUM_ALLOWED_DURATION");
+            _LIT(KActualTestCaseDuration, "TEST_CASE_ACTUAL_DURATION");
+            
+            TInt maxDuration = 0;
+            if(!GetIntFromConfig(ConfigSection(), KMaxDurationName, maxDuration))
+                {
+                ERR_PRINTF2(_L("%S could not be found in configuration."), &KMaxDurationName());
+                User::Leave(KErrNotFound);
+                }
+            
+		    TInt error;
+		    TTime startTime, endTime;
+		    startTime.HomeTime(); // Set the start time
+		    PrintPerformanceLog(startTime);
+		    
+            if (iUseDeviceLanguages)
+                error = Launcher::Install(*iUi, iSisFileName, aInstallPrefs, iDeviceLanguages);
+            else
+                error = Launcher::Install(*iUi, iSisFileName, aInstallPrefs);
+            
+            // Calculate the time taken for installation in milliseconds
+            endTime.HomeTime();
+            PrintPerformanceLog(endTime);            
+            TTimeIntervalMicroSeconds duration = endTime.MicroSecondsFrom(startTime);
+            TInt actualDuration = I64INT(duration.Int64())/1000;
+            
+            INFO_PRINTF3(_L("%S,%d"), &KMaxTestCaseDuration(), maxDuration);
+            INFO_PRINTF3(_L("%S,%d"), &KActualTestCaseDuration(), actualDuration);
+                        
+            if(actualDuration <= maxDuration)
+                {
+                INFO_PRINTF2(_L("This test meets performance requirement (Duration=%d)."), actualDuration);
+                }
+            else
+                {
+                ERR_PRINTF2(_L("This test does not meet performance requirement (Duration=%d)."), actualDuration);
+                error = KErrGeneral;
+                SetTestStepResult(EFail);
+                }
+                
+            return error;
+		    }
 
 		case EUseOpenFileName:
 		// open the file as a shared for readers only
@@ -2023,18 +2079,21 @@
 
 CSwisMmcStep::~CSwisMmcStep()
 	{
+	#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	#ifndef SWI_TEXTSHELL_ROM
 	if (iBootMode != KTextShell)
 		{
 		delete iSwiSidChecker;
 		}
 	#endif
+	#endif
 	}
 
 TVerdict CSwisMmcStep::doTestStepPreambleL()
 	{
 	// Get the System Startup Mode
 	User::LeaveIfError(RProperty::Get(KUidSystemCategory, KSystemStartupModeKey, iBootMode));
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
 #ifndef SWI_TEXTSHELL_ROM
 	if (iBootMode != KTextShell)
 		{
@@ -2052,6 +2111,9 @@
 	// we always get the boot mode as 0 , reset the value to 1.
 	iBootMode = KTextShell;
 #endif
+#else
+	iBootMode = KTextShell;
+#endif
 
 	RFs fs;
 	User::LeaveIfError(fs.Connect());
@@ -2342,6 +2404,7 @@
 						}
 			
 					TInt presentMatchingDrives = 0;
+					#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 					for(TInt drive=EDriveA; drive<=EDriveZ; ++drive)
 						{
 							if(iSwiSidChecker->AppRegisteredAt(sid, drive))
@@ -2351,7 +2414,7 @@
 								INFO_PRINTF2(_L("AppRegisteredAt returned true for drive: %d"), drive);
 								}  
 						}
-			
+					#endif
 					if(presentMatchingDrives != expectMatchingDrives)
 						{
 						WARN_PRINTF4(_L("Matching drives mismatch for exe, SID = 0x%x - expected %d got %d"), 
@@ -2956,6 +3019,7 @@
 // to duplicate it here so we can load the apparc plugin to be able to test it.
 //
 //const TUid KAppSidCheckerInterfaceUid = {0x10281FBB};
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifndef SWI_TEXTSHELL_ROM
 const TUid KAppSidCheckerInterfaceUidv2 = {0x20007D8C};
 
@@ -2973,7 +3037,7 @@
 	return reinterpret_cast<CAppSidChecker*>(ptr);
 	}
 #endif
-
+#endif
 /////
 //Step to Set RemoveWithLastDependent property
 /////
--- a/installationservices/swi/test/tuiscriptadaptors/tswisstep.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/test/tuiscriptadaptors/tswisstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -32,11 +32,14 @@
 #include <swi/sistruststatus.h>
 
 #include <e32base.h>
+
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifndef SWI_TEXTSHELL_ROM		
 #include <apsidchecker.h>
 #else
 class CAppSidChecker;
 #endif
+#endif
 
 namespace Swi
 	{
@@ -221,7 +224,7 @@
 class CSwisInstallStep : public CSwisTestStep
 	{
 public:
-	enum TInstallType { EUseFileHandle, EUseMemory, EUseFileName, EUseCAF, EUseOpenFileName, ECheckExitValue};
+	enum TInstallType { EUseFileHandle, EUseMemory, EUseFileName, EUseCAF, EUseOpenFileName, ECheckExitValue, ECheckInstallPerformance};
 
 	CSwisInstallStep(TInstallType aInstallType, TBool aDoCancelTest = EFalse);
 	~CSwisInstallStep();
@@ -231,6 +234,7 @@
 private:
 	TInt DoInstallL(Swi::CInstallPrefs& aInstallPrefs);
 	void GetFilesToHoldOpenL();
+	void PrintPerformanceLog(TTime aTime);
 
 private:
 	TFileName iSisFileName; // name of the file to install
@@ -332,6 +336,7 @@
 #endif
 
 _LIT(KSwisInstallStep, "InstallStep");
+_LIT(KSwisInstallPerformanceStep, "InstallPerformanceStep");
 _LIT(KSwisInstallFHStep, "InstallFHStep"); // install using file handles
 _LIT(KSwisInstallMemStep, "InstallMemStep"); // install from memory
 _LIT(KSwisInstallCAFStep, "InstallCAFStep"); // install from CAF
@@ -487,9 +492,13 @@
 	TInt iDrive;
 	TInt iBootMode;
 	TChar iDriveChar;
+
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifndef SWI_TEXTSHELL_ROM
 	CAppSidChecker *iSwiSidChecker;
 #endif
+#endif
+
 	};
 	
 /**
@@ -521,5 +530,4 @@
     ~CSwisSetRemoveWithLastDependent();
     virtual TVerdict doTestStepL();
     };
-
 #endif // __TSWISSTEP_H__
Binary file installationservices/swiconfig/conf/appinstallconfig.confml has changed
Binary file installationservices/swiconfig/conf/appinstallconfig_2002cff6.crml has changed
--- a/installationservices/swiconfig/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swiconfig/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -32,6 +32,13 @@
 ../swi/swipolicy.ini /epoc32/release/winscw/udeb/z/system/data/swipolicy.ini
 ../swi/swipolicy.ini /epoc32/release/winscw/urel/z/system/data/swipolicy.ini
 ../swi/swipolicy.ini /epoc32/data/z/system/data/swipolicy.ini
+../swi/2002cff6.txt /epoc32/release/winscw/udeb/z/private/10202be9/2002cff6.txt
+../swi/2002cff6.txt /epoc32/release/winscw/urel/z/private/10202be9/2002cff6.txt
+../swi/2002cff6.txt /epoc32/data/z/system/data/2002cff6.txt
+
+// ConfML Files
+../conf/appinstallconfig.confml            OS_LAYER_EXPORTS_CONFML(appinstallconfig.confml)
+../conf/appinstallconfig_2002cff6.crml	 OS_LAYER_EXPORTS_CRML(appinstallconfig_2002cff6.crml)
 #endif
 
 ../swi/swiconfig.iby /epoc32/rom/include/swiconfig.iby
@@ -51,6 +58,11 @@
 ../usif/scr/scr.db /epoc32/release/winscw/urel/z/sys/install/scr/provisioned/scr.db
 // Export iby file for SifLauncher configuration
 ../usif/siflauncher/siflauncherconfig.iby /epoc32/rom/include/siflauncherconfig.iby
+
+//Exporting SCR's Cenrep configuration file to EPOC.
+../usif/scr/10285bc0.txt /epoc32/release/winscw/udeb/z/private/10202be9/10285bc0.txt
+../usif/scr/10285bc0.txt /epoc32/release/winscw/urel/z/private/10202be9/10285bc0.txt
+
 #endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 PRJ_TESTEXPORTS
Binary file installationservices/swiconfig/swi/2002cff6.txt has changed
--- a/installationservices/swiconfig/swi/swiconfig.iby	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swiconfig/swi/swiconfig.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -19,7 +19,7 @@
 #define __SWICONFIG_IBY__
 
 data = EPOCROOT##epoc32\data\z\system\data\swipolicy.ini \system\data\swipolicy.ini
-data = EPOCROOT##epoc32\data\z\system\data\sisregistry_5.4.txt \system\data\sisregistry_5.4.txt
+data = EPOCROOT##epoc32\data\z\system\data\2002cff6.txt \private\10202be9\2002cff6.txt
 data = MULTI_LINGUIFY(RSC ZRESOURCE\Errors\swierrors Resource\Errors\swierrors)
 
 #endif
--- a/installationservices/swiconfig/swi/swipolicy.ini	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swiconfig/swi/swipolicy.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -12,8 +12,12 @@
 UserCapabilities = NetworkServices LocalServices ReadUserData WriteUserData Location UserEnvironment 
 AllowPackagePropagate = true
 ApplicationShutdownTimeoutSeconds = 10
-RunWaitTimeoutSeconds = 180
-DeletePreinstalledFilesOnUninstall = false
+RunWaitTimeoutSeconds = 600
+DeletePreinstalledFilesOnUninstall = true
 MaxNumOfLogEntries =  5
 RemoveOnlyWithLastDependent = true
 AllowOverwriteOnRestore = false
+SISCompatibleIfNoTargetDevices = false
+AllowRunOnInstallUninstall = false
+AlternativeCodeSigningOID = 1.3.6.1.4.1.94.1.49.1.2.2.1 1.3.6.1.4.1.94.1.49.1.2.2.5
+PhoneTsyName = phonetsy
\ No newline at end of file
Binary file installationservices/swiconfig/usif/scr/10285bc0.txt has changed
Binary file installationservices/swiconfig/usif/scr/scr.db has changed
Binary file installationservices/swiconfig/usif/scr/update_db_production.xml has changed
--- a/installationservices/swiconfig/usif/siflauncher/siflauncher_reg.rss	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swiconfig/usif/siflauncher/siflauncher_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -33,6 +33,15 @@
 	newfile=KAppDoesNotSupportNewFile;
 	datatype_list=
 		{
-		DATATYPE { priority=EDataTypePriorityHigh; type="x-epoc/x-sisx-app"; }
+		DATATYPE { priority=EDataTypePrioritySystem; type="x-epoc/x-sisx-app"; },
+		DATATYPE { priority=EDataTypePrioritySystem; type="x-epoc/x-app268436505"; },
+		DATATYPE { priority=EDataTypePrioritySystem; type="application/vnd.symbian.install"; },
+		DATATYPE { priority=EDataTypePrioritySystem; type="application/x-pip"; },
+		DATATYPE { priority=EDataTypePrioritySystem; type="text/vnd.sun.j2me.app-descriptor"; },
+		DATATYPE { priority=EDataTypePrioritySystem; type="application/java"; },
+		DATATYPE { priority=EDataTypePrioritySystem; type="application/java-archive"; },
+		DATATYPE { priority=EDataTypePrioritySystem; type="application/x-java-archive"; },
+		DATATYPE { priority=EDataTypePrioritySystem; type="application/widget"; },
+		DATATYPE { priority=EDataTypePrioritySystem; type="application/x-nokia-widget"; }
 		};
 	}
--- a/installationservices/swidevicetools/source/swicertstoretool/CSWICertStoreTool.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swidevicetools/source/swicertstoretool/CSWICertStoreTool.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -400,7 +400,6 @@
 
 void CSWICertStoreTool::ParseApplicationsL(const CTestConfigSection& aSection, RArray<TUid>& aApplications)
 	{
-	CleanupClosePushL(aApplications);
 	for (TInt index = 0 ; ; ++index)
 		{
 		const CTestConfigItem* item = aSection.Item(KItemApplication, index);
@@ -425,7 +424,6 @@
 		LogL(KLogNoApplications);
 		User::Leave(KErrArgument);
 		}
-	CleanupStack::Pop(&aApplications);
 	}
 
 void CSWICertStoreTool::OpenInputFileL(const TDesC& aInputFile)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/bwins/sifnotificationu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,58 @@
+EXPORTS
+	?Total@CSifOperationProgressData@Usif@@QBEHXZ @ 1 NONAME ; int Usif::CSifOperationProgressData::Total(void) const
+	?PublishCompletionL@CPublishSifOperationInfo@Usif@@QAEXAAVCSifOperationEndData@2@@Z @ 2 NONAME ; void Usif::CPublishSifOperationInfo::PublishCompletionL(class Usif::CSifOperationEndData &)
+	?ComponentName@CSifOperationStartData@Usif@@QBEABVHBufC16@@XZ @ 3 NONAME ; class HBufC16 const & Usif::CSifOperationStartData::ComponentName(void) const
+	?NewLC@CSifOperationEndData@Usif@@SAPAV12@ABVTDesC16@@W4TErrorCategory@2@H00@Z @ 4 NONAME ; class Usif::CSifOperationEndData * Usif::CSifOperationEndData::NewLC(class TDesC16 const &, enum Usif::TErrorCategory, int, class TDesC16 const &, class TDesC16 const &)
+	?GlobalComponentId@CSifOperationProgressData@Usif@@QBEABVHBufC16@@XZ @ 5 NONAME ; class HBufC16 const & Usif::CSifOperationProgressData::GlobalComponentId(void) const
+	?ErrorMessageDetails@CSifOperationEndData@Usif@@QBEABVHBufC16@@XZ @ 6 NONAME ; class HBufC16 const & Usif::CSifOperationEndData::ErrorMessageDetails(void) const
+	?ApplicationIcons@CSifOperationStartData@Usif@@QBEABV?$RPointerArray@VHBufC16@@@@XZ @ 7 NONAME ; class RPointerArray<class HBufC16> const & Usif::CSifOperationStartData::ApplicationIcons(void) const
+	?ExternalizeL@CSifOperationProgressData@Usif@@QBEXAAVRWriteStream@@@Z @ 8 NONAME ; void Usif::CSifOperationProgressData::ExternalizeL(class RWriteStream &) const
+	?ErrorCode@CSifOperationEndData@Usif@@QBEHXZ @ 9 NONAME ; int Usif::CSifOperationEndData::ErrorCode(void) const
+	?NewL@CSifOperationStartData@Usif@@SAPAV12@ABVTDesC16@@0ABV?$RPointerArray@VHBufC16@@@@1H000@Z @ 10 NONAME ; class Usif::CSifOperationStartData * Usif::CSifOperationStartData::NewL(class TDesC16 const &, class TDesC16 const &, class RPointerArray<class HBufC16> const &, class RPointerArray<class HBufC16> const &, int, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?ExternalizeL@CSifOperationStartData@Usif@@QBEXAAVRWriteStream@@@Z @ 11 NONAME ; void Usif::CSifOperationStartData::ExternalizeL(class RWriteStream &) const
+	?NewLC@CSifNotifierBase@Usif@@SAPAV12@AAVMSifOperationsHandler@2@IW4TNotifierType@12@@Z @ 12 NONAME ; class Usif::CSifNotifierBase * Usif::CSifNotifierBase::NewLC(class Usif::MSifOperationsHandler &, unsigned int, enum Usif::CSifNotifierBase::TNotifierType)
+	?IconPath@CSifOperationStartData@Usif@@QBEABVHBufC16@@XZ @ 13 NONAME ; class HBufC16 const & Usif::CSifOperationStartData::IconPath(void) const
+	?ApplicationNames@CSifOperationStartData@Usif@@QBEABV?$RPointerArray@VHBufC16@@@@XZ @ 14 NONAME ; class RPointerArray<class HBufC16> const & Usif::CSifOperationStartData::ApplicationNames(void) const
+	?NewLC@CSifOperationStartData@Usif@@SAPAV12@ABVTDesC16@@0ABV?$RPointerArray@VHBufC16@@@@1H000@Z @ 15 NONAME ; class Usif::CSifOperationStartData * Usif::CSifOperationStartData::NewLC(class TDesC16 const &, class TDesC16 const &, class RPointerArray<class HBufC16> const &, class RPointerArray<class HBufC16> const &, int, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?Phase@CSifOperationProgressData@Usif@@QBE?AW4TSifOperationPhase@2@XZ @ 16 NONAME ; enum Usif::TSifOperationPhase Usif::CSifOperationProgressData::Phase(void) const
+	?NewLC@CSifOperationKey@Usif@@SAPAV12@XZ @ 17 NONAME ; class Usif::CSifOperationKey * Usif::CSifOperationKey::NewLC(void)
+	?NewL@CSifOperationKey@Usif@@SAPAV12@XZ @ 18 NONAME ; class Usif::CSifOperationKey * Usif::CSifOperationKey::NewL(void)
+	??1CSifOperationEndData@Usif@@UAE@XZ @ 19 NONAME ; Usif::CSifOperationEndData::~CSifOperationEndData(void)
+	?NewLC@CSifOperationProgressData@Usif@@SAPAV12@ABVTDesC16@@W4TSifOperationPhase@2@W4TSifOperationSubPhase@2@HH@Z @ 20 NONAME ; class Usif::CSifOperationProgressData * Usif::CSifOperationProgressData::NewLC(class TDesC16 const &, enum Usif::TSifOperationPhase, enum Usif::TSifOperationSubPhase, int, int)
+	?PublishStartL@CPublishSifOperationInfo@Usif@@QAEXAAVCSifOperationStartData@2@@Z @ 21 NONAME ; void Usif::CPublishSifOperationInfo::PublishStartL(class Usif::CSifOperationStartData &)
+	?SubPhase@CSifOperationProgressData@Usif@@QBE?AW4TSifOperationSubPhase@2@XZ @ 22 NONAME ; enum Usif::TSifOperationSubPhase Usif::CSifOperationProgressData::SubPhase(void) const
+	?CancelSubscribeL@CSifOperationsNotifier@Usif@@QAEXXZ @ 23 NONAME ; void Usif::CSifOperationsNotifier::CancelSubscribeL(void)
+	?ComponentIcon@CSifOperationStartData@Usif@@QBEABVHBufC16@@XZ @ 24 NONAME ; class HBufC16 const & Usif::CSifOperationStartData::ComponentIcon(void) const
+	?NewLC@CSifOperationsNotifier@Usif@@SAPAV12@AAVMSifOperationsHandler@2@@Z @ 25 NONAME ; class Usif::CSifOperationsNotifier * Usif::CSifOperationsNotifier::NewLC(class Usif::MSifOperationsHandler &)
+	?NewL@CSifOperationStartData@Usif@@SAPAV12@AAVRReadStream@@@Z @ 26 NONAME ; class Usif::CSifOperationStartData * Usif::CSifOperationStartData::NewL(class RReadStream &)
+	?ComponentSize@CSifOperationStartData@Usif@@QBEHXZ @ 27 NONAME ; int Usif::CSifOperationStartData::ComponentSize(void) const
+	?SoftwareType@CSifOperationStartData@Usif@@QBEABVHBufC16@@XZ @ 28 NONAME ; class HBufC16 const & Usif::CSifOperationStartData::SoftwareType(void) const
+	?NewL@CPublishSifOperationInfo@Usif@@SAPAV12@XZ @ 29 NONAME ; class Usif::CPublishSifOperationInfo * Usif::CPublishSifOperationInfo::NewL(void)
+	?NewL@CSifNotifierBase@Usif@@SAPAV12@AAVMSifOperationsHandler@2@IW4TNotifierType@12@@Z @ 30 NONAME ; class Usif::CSifNotifierBase * Usif::CSifNotifierBase::NewL(class Usif::MSifOperationsHandler &, unsigned int, enum Usif::CSifNotifierBase::TNotifierType)
+	?ErrorCategory@CSifOperationEndData@Usif@@QBE?AW4TErrorCategory@2@XZ @ 31 NONAME ; enum Usif::TErrorCategory Usif::CSifOperationEndData::ErrorCategory(void) const
+	?ExternalizeL@CSifOperationEndData@Usif@@QBEXAAVRWriteStream@@@Z @ 32 NONAME ; void Usif::CSifOperationEndData::ExternalizeL(class RWriteStream &) const
+	?GlobalComponentId@CSifOperationStartData@Usif@@QBEABVHBufC16@@XZ @ 33 NONAME ; class HBufC16 const & Usif::CSifOperationStartData::GlobalComponentId(void) const
+	??1CSifOperationStartData@Usif@@UAE@XZ @ 34 NONAME ; Usif::CSifOperationStartData::~CSifOperationStartData(void)
+	?CancelSubscribeL@CSifOperationsNotifier@Usif@@QAEXI@Z @ 35 NONAME ; void Usif::CSifOperationsNotifier::CancelSubscribeL(unsigned int)
+	?Key@CSifNotifierBase@Usif@@QAEIXZ @ 36 NONAME ; unsigned int Usif::CSifNotifierBase::Key(void)
+	?CurrentProgess@CSifOperationProgressData@Usif@@QBEHXZ @ 37 NONAME ; int Usif::CSifOperationProgressData::CurrentProgess(void) const
+	?NewL@CSifOperationProgressData@Usif@@SAPAV12@AAVRReadStream@@@Z @ 38 NONAME ; class Usif::CSifOperationProgressData * Usif::CSifOperationProgressData::NewL(class RReadStream &)
+	?PublishProgressL@CPublishSifOperationInfo@Usif@@QAEXAAVCSifOperationProgressData@2@@Z @ 39 NONAME ; void Usif::CPublishSifOperationInfo::PublishProgressL(class Usif::CSifOperationProgressData &)
+	??1CSifNotifierBase@Usif@@UAE@XZ @ 40 NONAME ; Usif::CSifNotifierBase::~CSifNotifierBase(void)
+	?NewL@CSifOperationEndData@Usif@@SAPAV12@ABVTDesC16@@W4TErrorCategory@2@H00@Z @ 41 NONAME ; class Usif::CSifOperationEndData * Usif::CSifOperationEndData::NewL(class TDesC16 const &, enum Usif::TErrorCategory, int, class TDesC16 const &, class TDesC16 const &)
+	??1CSifOperationsNotifier@Usif@@UAE@XZ @ 42 NONAME ; Usif::CSifOperationsNotifier::~CSifOperationsNotifier(void)
+	?GlobalComponentId@CSifOperationEndData@Usif@@QBEABVHBufC16@@XZ @ 43 NONAME ; class HBufC16 const & Usif::CSifOperationEndData::GlobalComponentId(void) const
+	?NewL@CSifOperationEndData@Usif@@SAPAV12@AAVRReadStream@@@Z @ 44 NONAME ; class Usif::CSifOperationEndData * Usif::CSifOperationEndData::NewL(class RReadStream &)
+	?SubscribeL@CSifOperationsNotifier@Usif@@QAEXIH@Z @ 45 NONAME ; void Usif::CSifOperationsNotifier::SubscribeL(unsigned int, int)
+	?ExternalizeL@CSifOperationKey@Usif@@QBEXAAVRWriteStream@@@Z @ 46 NONAME ; void Usif::CSifOperationKey::ExternalizeL(class RWriteStream &) const
+	?NewLC@CPublishSifOperationInfo@Usif@@SAPAV12@XZ @ 47 NONAME ; class Usif::CPublishSifOperationInfo * Usif::CPublishSifOperationInfo::NewLC(void)
+	?ErrorMessage@CSifOperationEndData@Usif@@QBEABVHBufC16@@XZ @ 48 NONAME ; class HBufC16 const & Usif::CSifOperationEndData::ErrorMessage(void) const
+	?NewL@CSifOperationsNotifier@Usif@@SAPAV12@AAVMSifOperationsHandler@2@@Z @ 49 NONAME ; class Usif::CSifOperationsNotifier * Usif::CSifOperationsNotifier::NewL(class Usif::MSifOperationsHandler &)
+	??1CSifOperationProgressData@Usif@@UAE@XZ @ 50 NONAME ; Usif::CSifOperationProgressData::~CSifOperationProgressData(void)
+	?NewL@CSifOperationProgressData@Usif@@SAPAV12@ABVTDesC16@@W4TSifOperationPhase@2@W4TSifOperationSubPhase@2@HH@Z @ 51 NONAME ; class Usif::CSifOperationProgressData * Usif::CSifOperationProgressData::NewL(class TDesC16 const &, enum Usif::TSifOperationPhase, enum Usif::TSifOperationSubPhase, int, int)
+	??1CPublishSifOperationInfo@Usif@@UAE@XZ @ 52 NONAME ; Usif::CPublishSifOperationInfo::~CPublishSifOperationInfo(void)
+	?NewL@CSifOperationStartData@Usif@@SAPAV12@ABVTDesC16@@0ABV?$RPointerArray@VHBufC16@@@@1H000W4TSifOperationPhase@2@@Z @ 53 NONAME ; class Usif::CSifOperationStartData * Usif::CSifOperationStartData::NewL(class TDesC16 const &, class TDesC16 const &, class RPointerArray<class HBufC16> const &, class RPointerArray<class HBufC16> const &, int, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, enum Usif::TSifOperationPhase)
+	?NewLC@CSifOperationStartData@Usif@@SAPAV12@ABVTDesC16@@0ABV?$RPointerArray@VHBufC16@@@@1H000W4TSifOperationPhase@2@@Z @ 54 NONAME ; class Usif::CSifOperationStartData * Usif::CSifOperationStartData::NewLC(class TDesC16 const &, class TDesC16 const &, class RPointerArray<class HBufC16> const &, class RPointerArray<class HBufC16> const &, int, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, enum Usif::TSifOperationPhase)
+	?OperationPhase@CSifOperationStartData@Usif@@QBE?AW4TSifOperationPhase@2@XZ @ 55 NONAME ; enum Usif::TSifOperationPhase Usif::CSifOperationStartData::OperationPhase(void) const
+	?CurrentProgress@CSifOperationProgressData@Usif@@QBEHXZ @ 56 NONAME ; int Usif::CSifOperationProgressData::CurrentProgress(void) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/bwins/siftransportu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,85 @@
+EXPORTS
+	?PrepareResultsForIpcL@COpaqueNamedParams@Usif@@QAEXAAVTIpcArgs@@H@Z @ 1 NONAME ; void Usif::COpaqueNamedParams::PrepareResultsForIpcL(class TIpcArgs &, int)
+	?HasCapability@TSecurityContext@Usif@@QBEHW4TCapability@@@Z @ 2 NONAME ; int Usif::TSecurityContext::HasCapability(enum TCapability) const
+	?NewL@CComponentInfo@Usif@@SAPAV12@XZ @ 3 NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewL(void)
+	?CancelOperation@RSifTransportClient@Usif@@QAEXXZ @ 4 NONAME ; void Usif::RSifTransportClient::CancelOperation(void)
+	??0TTransportTaskParams@Usif@@QAE@XZ @ 5 NONAME ; Usif::TTransportTaskParams::TTransportTaskParams(void)
+	?HasCapabilityL@TSecurityContext@Usif@@QBEXW4TCapability@@@Z @ 6 NONAME ; void Usif::TSecurityContext::HasCapabilityL(enum TCapability) const
+	?Authenticity@CNode@CComponentInfo@Usif@@QBE?AW4TAuthenticity@3@XZ @ 7 NONAME ; enum Usif::TAuthenticity Usif::CComponentInfo::CNode::Authenticity(void) const
+	?SetRootNodeAsChildL@CComponentInfo@Usif@@QAEXAAVCNode@12@@Z @ 8 NONAME ; void Usif::CComponentInfo::SetRootNodeAsChildL(class Usif::CComponentInfo::CNode &)
+	?Activate@RSifTransportClient@Usif@@QAEXHAAVTRequestStatus@@@Z @ 9 NONAME ; void Usif::RSifTransportClient::Activate(int, class TRequestStatus &)
+	?NewSifTransportServerLC@CSifTransportServer@Usif@@SAPAVCScsServer@@XZ @ 10 NONAME ; class CScsServer * Usif::CSifTransportServer::NewSifTransportServerLC(void)
+	?NewLC@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 11 NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewLC(void)
+	?Uninstall@RSifTransportClient@Usif@@QAEXHAAVTRequestStatus@@H@Z @ 12 NONAME ; void Usif::RSifTransportClient::Uninstall(int, class TRequestStatus &, int)
+	?InstallStatus@CNode@CComponentInfo@Usif@@QBE?AW4TInstallStatus@3@XZ @ 13 NONAME ; enum Usif::TInstallStatus Usif::CComponentInfo::CNode::InstallStatus(void) const
+	?Cleanup@COpaqueNamedParams@Usif@@QAEXXZ @ 14 NONAME ; void Usif::COpaqueNamedParams::Cleanup(void)
+	??0RSifTransportClient@Usif@@QAE@XZ @ 15 NONAME ; Usif::RSifTransportClient::RSifTransportClient(void)
+	?CountL@COpaqueNamedParams@Usif@@QBEHXZ @ 16 NONAME ; int Usif::COpaqueNamedParams::CountL(void) const
+	?SecurityContext@CSifTransportTask@Usif@@IBEPBVTSecurityContext@2@XZ @ 17 NONAME ; class Usif::TSecurityContext const * Usif::CSifTransportTask::SecurityContext(void) const
+	?RootNodeL@CComponentInfo@Usif@@QBEABVCNode@12@XZ @ 18 NONAME ; class Usif::CComponentInfo::CNode const & Usif::CComponentInfo::RootNodeL(void) const
+	??1CNode@CComponentInfo@Usif@@UAE@XZ @ 19 NONAME ; Usif::CComponentInfo::CNode::~CNode(void)
+	?GetComponentInfo@RSifTransportClient@Usif@@QAEXABVTDesC16@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 20 NONAME ; void Usif::RSifTransportClient::GetComponentInfo(class TDesC16 const &, class Usif::CComponentInfo &, class TRequestStatus &)
+	?Deactivate@RSifTransportClient@Usif@@QAEXHAAVTRequestStatus@@@Z @ 21 NONAME ; void Usif::RSifTransportClient::Deactivate(int, class TRequestStatus &)
+	?Install@RSifTransportClient@Usif@@QAEXAAVRFile@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 22 NONAME ; void Usif::RSifTransportClient::Install(class RFile &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	?ExternalizeL@COpaqueNamedParams@Usif@@QBEXAAVRWriteStream@@@Z @ 23 NONAME ; void Usif::COpaqueNamedParams::ExternalizeL(class RWriteStream &) const
+	?FileHandle@CSifTransportTask@Usif@@IAEPAVRFile@@XZ @ 24 NONAME ; class RFile * Usif::CSifTransportTask::FileHandle(void)
+	?Vendor@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 25 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Vendor(void) const
+	?ComponentName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 26 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::ComponentName(void) const
+	?NewLC@CNode@CComponentInfo@Usif@@SAPAV123@ABVTDesC16@@000W4TScomoState@3@W4TInstallStatus@3@H0W4TAuthenticity@3@ABVTCapabilitySet@@HHHPAV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@PAV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@@Z @ 27 NONAME ; class Usif::CComponentInfo::CNode * Usif::CComponentInfo::CNode::NewLC(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, enum Usif::TScomoState, enum Usif::TInstallStatus, int, class TDesC16 const &, enum Usif::TAuthenticity, class TCapabilitySet const &, int, int, int, class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> *, class RPointerArray<class Usif::CComponentInfo::CNode> *)
+	??0TSecurityContext@Usif@@AAE@ABVRMessage2@@@Z @ 28 NONAME ; Usif::TSecurityContext::TSecurityContext(class RMessage2 const &)
+	??1COpaqueNamedParams@Usif@@UAE@XZ @ 29 NONAME ; Usif::COpaqueNamedParams::~COpaqueNamedParams(void)
+	?SoftwareTypeName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 30 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::SoftwareTypeName(void) const
+	?UserGrantableCaps@CNode@CComponentInfo@Usif@@QBEABVTCapabilitySet@@XZ @ 31 NONAME ; class TCapabilitySet const & Usif::CComponentInfo::CNode::UserGrantableCaps(void) const
+	?CancelImpl@CSifTransportTask@Usif@@MAEXXZ @ 32 NONAME ; void Usif::CSifTransportTask::CancelImpl(void)
+	?CustomResults@CSifTransportTask@Usif@@IAEPAVCOpaqueNamedParams@2@XZ @ 33 NONAME ; class Usif::COpaqueNamedParams * Usif::CSifTransportTask::CustomResults(void)
+	?IntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@@Z @ 34 NONAME ; int Usif::COpaqueNamedParams::IntByNameL(class TDesC16 const &) const
+	?Install@RSifTransportClient@Usif@@QAEXAAVRFile@@AAVTRequestStatus@@H@Z @ 35 NONAME ; void Usif::RSifTransportClient::Install(class RFile &, class TRequestStatus &, int)
+	?StringByNameL@COpaqueNamedParams@Usif@@QBEABVTDesC16@@ABV3@@Z @ 36 NONAME ; class TDesC16 const & Usif::COpaqueNamedParams::StringByNameL(class TDesC16 const &) const
+	??0CSifTransportTask@Usif@@IAE@AAUTTransportTaskParams@1@H@Z @ 37 NONAME ; Usif::CSifTransportTask::CSifTransportTask(struct Usif::TTransportTaskParams &, int)
+	??1CSifTransportTask@Usif@@MAE@XZ @ 38 NONAME ; Usif::CSifTransportTask::~CSifTransportTask(void)
+	?ScomoState@CNode@CComponentInfo@Usif@@QBE?AW4TScomoState@3@XZ @ 39 NONAME ; enum Usif::TScomoState Usif::CComponentInfo::CNode::ScomoState(void) const
+	?AddIntL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@H@Z @ 40 NONAME ; void Usif::COpaqueNamedParams::AddIntL(class TDesC16 const &, int)
+	?Install@RSifTransportClient@Usif@@QAEXABVTDesC16@@AAVTRequestStatus@@H@Z @ 41 NONAME ; void Usif::RSifTransportClient::Install(class TDesC16 const &, class TRequestStatus &, int)
+	?Children@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@XZ @ 42 NONAME ; class RPointerArray<class Usif::CComponentInfo::CNode> const & Usif::CComponentInfo::CNode::Children(void) const
+	?FileName@CSifTransportTask@Usif@@IBEPBVTDesC16@@XZ @ 43 NONAME ; class TDesC16 const * Usif::CSifTransportTask::FileName(void) const
+	?Uninstall@RSifTransportClient@Usif@@QAEXHABVCOpaqueNamedParams@2@AAV32@AAVTRequestStatus@@H@Z @ 44 NONAME ; void Usif::RSifTransportClient::Uninstall(int, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	?PrepareForIpcL@CComponentInfo@Usif@@QAEXAAVTIpcArgs@@H@Z @ 45 NONAME ; void Usif::CComponentInfo::PrepareForIpcL(class TIpcArgs &, int)
+	?GetComponentInfo@RSifTransportClient@Usif@@QAEXAAVRFile@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 46 NONAME ; void Usif::RSifTransportClient::GetComponentInfo(class RFile &, class Usif::CComponentInfo &, class TRequestStatus &)
+	?NewLC@CComponentInfo@Usif@@SAPAV12@XZ @ 47 NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewLC(void)
+	?GetIntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@AAH@Z @ 48 NONAME ; int Usif::COpaqueNamedParams::GetIntByNameL(class TDesC16 const &, int &) const
+	?SetRootNodeL@CComponentInfo@Usif@@QAEXPAVCNode@12@@Z @ 49 NONAME ; void Usif::CComponentInfo::SetRootNodeL(class Usif::CComponentInfo::CNode *)
+	?CustomArguments@CSifTransportTask@Usif@@IBEPBVCOpaqueNamedParams@2@XZ @ 50 NONAME ; class Usif::COpaqueNamedParams const * Usif::CSifTransportTask::CustomArguments(void) const
+	?GetNamesL@COpaqueNamedParams@Usif@@QBEXAAV?$RPointerArray@VHBufC16@@@@@Z @ 51 NONAME ; void Usif::COpaqueNamedParams::GetNamesL(class RPointerArray<class HBufC16> &) const
+	?MaxInstalledSize@CNode@CComponentInfo@Usif@@QBEHXZ @ 52 NONAME ; int Usif::CComponentInfo::CNode::MaxInstalledSize(void) const
+	?Version@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 53 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Version(void) const
+	?RequestStatus@CSifTransportTask@Usif@@IAEPAVTRequestStatus@@XZ @ 54 NONAME ; class TRequestStatus * Usif::CSifTransportTask::RequestStatus(void)
+	?Install@RSifTransportClient@Usif@@QAEXABVTDesC16@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 55 NONAME ; void Usif::RSifTransportClient::Install(class TDesC16 const &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	?AddStringL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@0@Z @ 56 NONAME ; void Usif::COpaqueNamedParams::AddStringL(class TDesC16 const &, class TDesC16 const &)
+	?ExternalizeL@CComponentInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 57 NONAME ; void Usif::CComponentInfo::ExternalizeL(class RWriteStream &) const
+	?AddChildL@CNode@CComponentInfo@Usif@@QAEXPAV123@@Z @ 58 NONAME ; void Usif::CComponentInfo::CNode::AddChildL(class Usif::CComponentInfo::CNode *)
+	?ComponentId@CNode@CComponentInfo@Usif@@QBEHXZ @ 59 NONAME ; int Usif::CComponentInfo::CNode::ComponentId(void) const
+	?ComponentId@CSifTransportTask@Usif@@IBEHXZ @ 60 NONAME ; int Usif::CSifTransportTask::ComponentId(void) const
+	?StartTransportServer@Usif@@YAHABVTDesC16@@ABVTVersion@@P6APAVCSifTransportTask@1@W4TTaskType@TransportTaskFactory@1@AAUTTransportTaskParams@1@@ZH@Z @ 61 NONAME ; int Usif::StartTransportServer(class TDesC16 const &, class TVersion const &, class Usif::CSifTransportTask * (*)(enum Usif::TransportTaskFactory::TTaskType, struct Usif::TTransportTaskParams &), int)
+	?Close@RSifTransportClient@Usif@@QAEXXZ @ 62 NONAME ; void Usif::RSifTransportClient::Close(void)
+	?SecureId@TSecurityContext@Usif@@QBE?AVTSecureId@@XZ @ 63 NONAME ; class TSecureId Usif::TSecurityContext::SecureId(void) const
+	?NewL@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 64 NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewL(void)
+	?Connect@RSifTransportClient@Usif@@QAEHABVTDesC16@@ABVTVersion@@0VTUid@@@Z @ 65 NONAME ; int Usif::RSifTransportClient::Connect(class TDesC16 const &, class TVersion const &, class TDesC16 const &, class TUid)
+	??1CComponentInfo@Usif@@UAE@XZ @ 66 NONAME ; Usif::CComponentInfo::~CComponentInfo(void)
+	?GlobalComponentId@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 67 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::GlobalComponentId(void) const
+	?ComponentInfo@CSifTransportTask@Usif@@IAEPAVCComponentInfo@2@XZ @ 68 NONAME ; class Usif::CComponentInfo * Usif::CSifTransportTask::ComponentInfo(void)
+	?InternalizeL@COpaqueNamedParams@Usif@@QAEXAAVRReadStream@@@Z @ 69 NONAME ; void Usif::COpaqueNamedParams::InternalizeL(class RReadStream &)
+	?PrepareArgumentsForIpcL@COpaqueNamedParams@Usif@@QBEXAAVTIpcArgs@@H@Z @ 70 NONAME ; void Usif::COpaqueNamedParams::PrepareArgumentsForIpcL(class TIpcArgs &, int) const
+	?HasExecutable@CNode@CComponentInfo@Usif@@QBEHXZ @ 71 NONAME ; int Usif::CComponentInfo::CNode::HasExecutable(void) const
+	?GroupName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 72 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::GroupName(void) const
+	?IconFileName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 73 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::IconFileName(void) const
+	?NewLC@CApplicationInfo@CComponentInfo@Usif@@SAPAV123@ABVTUid@@ABVTDesC16@@11@Z @ 74 NONAME ; class Usif::CComponentInfo::CApplicationInfo * Usif::CComponentInfo::CApplicationInfo::NewLC(class TUid const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?DriveSeletionRequired@CNode@CComponentInfo@Usif@@QBEHXZ @ 75 NONAME ; int Usif::CComponentInfo::CNode::DriveSeletionRequired(void) const
+	?AppUid@CApplicationInfo@CComponentInfo@Usif@@QBEABVTUid@@XZ @ 76 NONAME ; class TUid const & Usif::CComponentInfo::CApplicationInfo::AppUid(void) const
+	??1CApplicationInfo@CComponentInfo@Usif@@UAE@XZ @ 77 NONAME ; Usif::CComponentInfo::CApplicationInfo::~CApplicationInfo(void)
+	?Applications@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@XZ @ 78 NONAME ; class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> const & Usif::CComponentInfo::CNode::Applications(void) const
+	?Name@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 79 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::Name(void) const
+	?StringArrayByNameL@COpaqueNamedParams@Usif@@QBEABV?$RPointerArray@VHBufC16@@@@ABVTDesC16@@@Z @ 80 NONAME ; class RPointerArray<class HBufC16> const & Usif::COpaqueNamedParams::StringArrayByNameL(class TDesC16 const &) const
+	?AddIntArrayL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@ABV?$RArray@H@@@Z @ 81 NONAME ; void Usif::COpaqueNamedParams::AddIntArrayL(class TDesC16 const &, class RArray<int> const &)
+	?AddStringArrayL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@ABV?$RPointerArray@VHBufC16@@@@@Z @ 82 NONAME ; void Usif::COpaqueNamedParams::AddStringArrayL(class TDesC16 const &, class RPointerArray<class HBufC16> const &)
+	?IntArrayByNameL@COpaqueNamedParams@Usif@@QBEABV?$RArray@H@@ABVTDesC16@@@Z @ 83 NONAME ; class RArray<int> const & Usif::COpaqueNamedParams::IntArrayByNameL(class TDesC16 const &) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/bwins/sifu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,71 @@
+EXPORTS
+	?PrepareResultsForIpcL@COpaqueNamedParams@Usif@@QAEXAAVTIpcArgs@@H@Z @ 1 NONAME ; void Usif::COpaqueNamedParams::PrepareResultsForIpcL(class TIpcArgs &, int)
+	?HasCapability@TSecurityContext@Usif@@QBEHW4TCapability@@@Z @ 2 NONAME ; int Usif::TSecurityContext::HasCapability(enum TCapability) const
+	?SoftwareTypeName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 3 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::SoftwareTypeName(void) const
+	?NewL@CComponentInfo@Usif@@SAPAV12@XZ @ 4 NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewL(void)
+	?UserGrantableCaps@CNode@CComponentInfo@Usif@@QBEABVTCapabilitySet@@XZ @ 5 NONAME ; class TCapabilitySet const & Usif::CComponentInfo::CNode::UserGrantableCaps(void) const
+	?IntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@@Z @ 6 NONAME ; int Usif::COpaqueNamedParams::IntByNameL(class TDesC16 const &) const
+	?HasCapabilityL@TSecurityContext@Usif@@QBEXW4TCapability@@@Z @ 7 NONAME ; void Usif::TSecurityContext::HasCapabilityL(enum TCapability) const
+	?Close@RSoftwareInstall@Usif@@QAEXXZ @ 8 NONAME ; void Usif::RSoftwareInstall::Close(void)
+	?Authenticity@CNode@CComponentInfo@Usif@@QBE?AW4TAuthenticity@3@XZ @ 9 NONAME ; enum Usif::TAuthenticity Usif::CComponentInfo::CNode::Authenticity(void) const
+	?SetRootNodeAsChildL@CComponentInfo@Usif@@QAEXAAVCNode@12@@Z @ 10 NONAME ; void Usif::CComponentInfo::SetRootNodeAsChildL(class Usif::CComponentInfo::CNode &)
+	?Uninstall@RSoftwareInstall@Usif@@QAEXHAAVTRequestStatus@@H@Z @ 11 NONAME ; void Usif::RSoftwareInstall::Uninstall(int, class TRequestStatus &, int)
+	?StringByNameL@COpaqueNamedParams@Usif@@QBEABVTDesC16@@ABV3@@Z @ 12 NONAME ; class TDesC16 const & Usif::COpaqueNamedParams::StringByNameL(class TDesC16 const &) const
+	?ScomoState@CNode@CComponentInfo@Usif@@QBE?AW4TScomoState@3@XZ @ 13 NONAME ; enum Usif::TScomoState Usif::CComponentInfo::CNode::ScomoState(void) const
+	?Install@RSoftwareInstall@Usif@@QAEXABVTDesC16@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 14 NONAME ; void Usif::RSoftwareInstall::Install(class TDesC16 const &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	?AddIntL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@H@Z @ 15 NONAME ; void Usif::COpaqueNamedParams::AddIntL(class TDesC16 const &, int)
+	?NewLC@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 16 NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewLC(void)
+	?InstallStatus@CNode@CComponentInfo@Usif@@QBE?AW4TInstallStatus@3@XZ @ 17 NONAME ; enum Usif::TInstallStatus Usif::CComponentInfo::CNode::InstallStatus(void) const
+	?Children@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@XZ @ 18 NONAME ; class RPointerArray<class Usif::CComponentInfo::CNode> const & Usif::CComponentInfo::CNode::Children(void) const
+	?Cleanup@COpaqueNamedParams@Usif@@QAEXXZ @ 19 NONAME ; void Usif::COpaqueNamedParams::Cleanup(void)
+	?CancelOperation@RSoftwareInstall@Usif@@QAEXXZ @ 20 NONAME ; void Usif::RSoftwareInstall::CancelOperation(void)
+	?PrepareForIpcL@CComponentInfo@Usif@@QAEXAAVTIpcArgs@@H@Z @ 21 NONAME ; void Usif::CComponentInfo::PrepareForIpcL(class TIpcArgs &, int)
+	?NewLC@CComponentInfo@Usif@@SAPAV12@XZ @ 22 NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewLC(void)
+	?CountL@COpaqueNamedParams@Usif@@QBEHXZ @ 23 NONAME ; int Usif::COpaqueNamedParams::CountL(void) const
+	?SetRootNodeL@CComponentInfo@Usif@@QAEXPAVCNode@12@@Z @ 24 NONAME ; void Usif::CComponentInfo::SetRootNodeL(class Usif::CComponentInfo::CNode *)
+	?GetIntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@AAH@Z @ 25 NONAME ; int Usif::COpaqueNamedParams::GetIntByNameL(class TDesC16 const &, int &) const
+	?MaxInstalledSize@CNode@CComponentInfo@Usif@@QBEHXZ @ 26 NONAME ; int Usif::CComponentInfo::CNode::MaxInstalledSize(void) const
+	?GetNamesL@COpaqueNamedParams@Usif@@QBEXAAV?$RPointerArray@VHBufC16@@@@@Z @ 27 NONAME ; void Usif::COpaqueNamedParams::GetNamesL(class RPointerArray<class HBufC16> &) const
+	?Version@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 28 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Version(void) const
+	?RootNodeL@CComponentInfo@Usif@@QBEABVCNode@12@XZ @ 29 NONAME ; class Usif::CComponentInfo::CNode const & Usif::CComponentInfo::RootNodeL(void) const
+	??1CNode@CComponentInfo@Usif@@UAE@XZ @ 30 NONAME ; Usif::CComponentInfo::CNode::~CNode(void)
+	?GetComponentInfo@RSoftwareInstall@Usif@@QAEXABVTDesC16@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 31 NONAME ; void Usif::RSoftwareInstall::GetComponentInfo(class TDesC16 const &, class Usif::CComponentInfo &, class TRequestStatus &)
+	?Uninstall@RSoftwareInstall@Usif@@QAEXHABVCOpaqueNamedParams@2@AAV32@AAVTRequestStatus@@H@Z @ 32 NONAME ; void Usif::RSoftwareInstall::Uninstall(int, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	?Deactivate@RSoftwareInstall@Usif@@QAEXHAAVTRequestStatus@@@Z @ 33 NONAME ; void Usif::RSoftwareInstall::Deactivate(int, class TRequestStatus &)
+	?AddStringL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@0@Z @ 34 NONAME ; void Usif::COpaqueNamedParams::AddStringL(class TDesC16 const &, class TDesC16 const &)
+	?AddChildL@CNode@CComponentInfo@Usif@@QAEXPAV123@@Z @ 35 NONAME ; void Usif::CComponentInfo::CNode::AddChildL(class Usif::CComponentInfo::CNode *)
+	?ComponentId@CNode@CComponentInfo@Usif@@QBEHXZ @ 36 NONAME ; int Usif::CComponentInfo::CNode::ComponentId(void) const
+	?ExternalizeL@CComponentInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 37 NONAME ; void Usif::CComponentInfo::ExternalizeL(class RWriteStream &) const
+	??0RSoftwareInstall@Usif@@QAE@XZ @ 38 NONAME ; Usif::RSoftwareInstall::RSoftwareInstall(void)
+	?SecureId@TSecurityContext@Usif@@QBE?AVTSecureId@@XZ @ 39 NONAME ; class TSecureId Usif::TSecurityContext::SecureId(void) const
+	?Activate@RSoftwareInstall@Usif@@QAEXHAAVTRequestStatus@@@Z @ 40 NONAME ; void Usif::RSoftwareInstall::Activate(int, class TRequestStatus &)
+	?ExternalizeL@COpaqueNamedParams@Usif@@QBEXAAVRWriteStream@@@Z @ 41 NONAME ; void Usif::COpaqueNamedParams::ExternalizeL(class RWriteStream &) const
+	?Install@RSoftwareInstall@Usif@@QAEXABVTDesC16@@AAVTRequestStatus@@H@Z @ 42 NONAME ; void Usif::RSoftwareInstall::Install(class TDesC16 const &, class TRequestStatus &, int)
+	?Vendor@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 43 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Vendor(void) const
+	?NewL@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 44 NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewL(void)
+	?GetComponentInfo@RSoftwareInstall@Usif@@QAEXAAVRFile@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 45 NONAME ; void Usif::RSoftwareInstall::GetComponentInfo(class RFile &, class Usif::CComponentInfo &, class TRequestStatus &)
+	?ComponentName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 46 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::ComponentName(void) const
+	?Connect@RSoftwareInstall@Usif@@QAEHXZ @ 47 NONAME ; int Usif::RSoftwareInstall::Connect(void)
+	?Install@RSoftwareInstall@Usif@@QAEXAAVRFile@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 48 NONAME ; void Usif::RSoftwareInstall::Install(class RFile &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	??1CComponentInfo@Usif@@UAE@XZ @ 49 NONAME ; Usif::CComponentInfo::~CComponentInfo(void)
+	?NewLC@CNode@CComponentInfo@Usif@@SAPAV123@ABVTDesC16@@000W4TScomoState@3@W4TInstallStatus@3@H0W4TAuthenticity@3@ABVTCapabilitySet@@HHHPAV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@PAV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@@Z @ 50 NONAME ; class Usif::CComponentInfo::CNode * Usif::CComponentInfo::CNode::NewLC(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, enum Usif::TScomoState, enum Usif::TInstallStatus, int, class TDesC16 const &, enum Usif::TAuthenticity, class TCapabilitySet const &, int, int, int, class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> *, class RPointerArray<class Usif::CComponentInfo::CNode> *)
+	??0TSecurityContext@Usif@@AAE@ABVRMessage2@@@Z @ 51 NONAME ; Usif::TSecurityContext::TSecurityContext(class RMessage2 const &)
+	?GlobalComponentId@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 52 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::GlobalComponentId(void) const
+	?PrepareArgumentsForIpcL@COpaqueNamedParams@Usif@@QBEXAAVTIpcArgs@@H@Z @ 53 NONAME ; void Usif::COpaqueNamedParams::PrepareArgumentsForIpcL(class TIpcArgs &, int) const
+	?InternalizeL@COpaqueNamedParams@Usif@@QAEXAAVRReadStream@@@Z @ 54 NONAME ; void Usif::COpaqueNamedParams::InternalizeL(class RReadStream &)
+	??1COpaqueNamedParams@Usif@@UAE@XZ @ 55 NONAME ; Usif::COpaqueNamedParams::~COpaqueNamedParams(void)
+	?Install@RSoftwareInstall@Usif@@QAEXAAVRFile@@AAVTRequestStatus@@H@Z @ 56 NONAME ; void Usif::RSoftwareInstall::Install(class RFile &, class TRequestStatus &, int)
+	?HasExecutable@CNode@CComponentInfo@Usif@@QBEHXZ @ 57 NONAME ; int Usif::CComponentInfo::CNode::HasExecutable(void) const
+	?GroupName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 58 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::GroupName(void) const
+	?DriveSeletionRequired@CNode@CComponentInfo@Usif@@QBEHXZ @ 59 NONAME ; int Usif::CComponentInfo::CNode::DriveSeletionRequired(void) const
+	?IconFileName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 60 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::IconFileName(void) const
+	?AppUid@CApplicationInfo@CComponentInfo@Usif@@QBEABVTUid@@XZ @ 61 NONAME ; class TUid const & Usif::CComponentInfo::CApplicationInfo::AppUid(void) const
+	?NewLC@CApplicationInfo@CComponentInfo@Usif@@SAPAV123@ABVTUid@@ABVTDesC16@@11@Z @ 62 NONAME ; class Usif::CComponentInfo::CApplicationInfo * Usif::CComponentInfo::CApplicationInfo::NewLC(class TUid const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?Applications@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@XZ @ 63 NONAME ; class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> const & Usif::CComponentInfo::CNode::Applications(void) const
+	??1CApplicationInfo@CComponentInfo@Usif@@UAE@XZ @ 64 NONAME ; Usif::CComponentInfo::CApplicationInfo::~CApplicationInfo(void)
+	?Name@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 65 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::Name(void) const
+	?AddIntArrayL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@ABV?$RArray@H@@@Z @ 66 NONAME ; void Usif::COpaqueNamedParams::AddIntArrayL(class TDesC16 const &, class RArray<int> const &)
+	?AddStringArrayL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@ABV?$RPointerArray@VHBufC16@@@@@Z @ 67 NONAME ; void Usif::COpaqueNamedParams::AddStringArrayL(class TDesC16 const &, class RPointerArray<class HBufC16> const &)
+	?StringArrayByNameL@COpaqueNamedParams@Usif@@QBEABV?$RPointerArray@VHBufC16@@@@ABVTDesC16@@@Z @ 68 NONAME ; class RPointerArray<class HBufC16> const & Usif::COpaqueNamedParams::StringArrayByNameL(class TDesC16 const &) const
+	?IntArrayByNameL@COpaqueNamedParams@Usif@@QBEABV?$RArray@H@@ABVTDesC16@@@Z @ 69 NONAME ; class RArray<int> const & Usif::COpaqueNamedParams::IntArrayByNameL(class TDesC16 const &) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/bwins/sifutilsu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,4 @@
+EXPORTS
+	?UninstallL@Usif@@YAXH@Z @ 1 NONAME ; void Usif::UninstallL(int)
+	?GenerateNewAppUidL@Usif@@YA?AVTUid@@XZ @ 2 NONAME ; class TUid Usif::GenerateNewAppUidL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/common/inc/usifcommon.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This header defines common USIF entities
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef USIFCOMMON_H
+#define USIFCOMMON_H
+
+#include <e32base.h>
+
+namespace Usif
+	{
+	/**
+		This enumeration defines the possible states of a software component. According to the SCOMO specification
+		a component may be Deactivated or Activated. New software components are activated during installation by
+		default. However, the 'InstallInactive' param can be passed to the SIF in order not to activated a newly installed
+		component. Please refer to the SIF API documentation for more details.
+	 */
+	enum TScomoState
+		{
+		EDeactivated = 0,
+		EActivated   = 1
+		};
+
+	/**
+		This enumeration defines the possible options for user dialogs. 
+		If EAllowed is selected then the response to the user option dialog is treated as 'Yes'
+		If ENotAllowed is selected then the response to the user option dialog is treated as 'No'
+		If EUserConfirm is selected then user option dialog is presented to the user.
+	*/
+	enum TSifPolicy
+		{
+		EAllowed		= 0,
+		ENotAllowed		= 1,
+		EUserConfirm	= 2
+		};
+
+	/**
+		TComponentId defines an instance of a software component in the Software Component Registry. Two different components cannot 
+		have the same id on the system, however, it is not global and different components may have the same component id
+		on separate devices.Please refer to @see GlobalId for a unique identifier for software components across different devices.
+	*/
+	typedef TInt TComponentId;
+	
+	/**
+		Pre-defined software type names for the Universal Software Install Framework. 
+		'native' stands for Symbian native components delivered in the SIS/SISX packages.
+		'java' stands for Java MIDlets.
+		'widget' stands for Widgets
+	*/
+	_LIT(KSoftwareTypeNative, "native");
+	_LIT(KSoftwareTypeJava, "java");
+	_LIT(KSoftwareTypeWidget, "widget");
+
+	
+	} // end namespace Usif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/common/inc/usiferror.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Error codes defined by the Universal Software Install Framework.
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released 
+*/
+
+#ifndef USIFERROR_H
+#define USIFERROR_H
+
+
+namespace Usif
+	{
+
+		enum TErrorCategory {
+			ENone						= 0, // No Error
+			ELowMemory					= 1, // Low on RAM
+			ELowDiskSpace				= 2, // Low diskspace
+			ENetworkUnavailable			= 3, // Network not available
+			EInstallerBusy				= 4, // Installer is in use
+			ECorruptedPackage			= 5, // Package corrupt
+			EApplicationNotCompatible	= 6, // Not compatible
+			ESecurityError				= 7, // Security Error
+			EUnexpectedError			= 8, // Unexpected Error
+			EUserCancelled				= 9, // Install Cancelled
+			EUninstallationBlocked		= 10,// Uninstallation blocked
+			EUnknown					= 11 // Unknown error
+		};
+
+	}
+
+
+/** A general error in one of the Unified Installer Framework components. */
+const TInt KErrSifUnknown = -10300;
+
+/** Installation of a software upgrade could not complete because the package being upgraded was not installed on the device. */
+const TInt KErrSifMissingBasePackage = -10301;
+
+/** Installation of a software component could not complete because one or more of the packages it depends on are not present on the device. */
+const TInt KErrSifMissingDependencies = -10302;
+
+/** Installation of a software component could not complete because there was no matching installer for the package. */
+const TInt KErrSifUnsupportedSoftwareType = -10303;
+
+/** Installation of a software component failed because the delivery package was corrupt. */
+const TInt KErrSifCorruptedPackage = -10304;
+
+/** Installation of a software component failed since the parameters passed via the Software Install Framework were too large. */
+const TInt KErrSifOverflow = -10307;
+
+/** Installation of a software component failed because the same version of the component is already installed on the system. */
+const TInt KErrSifSameVersionAlreadyInstalled = -10309;
+
+/** Installation of a software component failed because a newer version of the same component is already installed on the system. */
+const TInt KErrSifNewerVersionAlreadyInstalled = -10310;
+
+/** Activation of a component failed because it was already activated. */
+const TInt KErrSifAlreadyActivated = -10311;
+
+/** Deactivation of a component failed because it was already inactive. */
+const TInt KErrSifAlreadyDeactivated = -10312;
+
+/** The component id specified is not installed on the system. */
+const TInt KErrSifBadComponentId = -10313;
+
+/** The component was not installed due to lack of free space on the target drive. */
+const TInt KErrSifNotEnoughSpace = -10314;
+
+/** The component was not installed due to an internal problem with the corresponding installer. */
+const TInt KErrSifBadInstallerConfiguration = -10315;
+
+/** Installation of a component failed because the package is not targeted for this device. */
+const TInt KErrSifPackageCannotBeInstalledOnThisDevice = -10316;
+
+/** Installation of a component failed because the component's language is not supported this device. */
+const TInt KErrSifUnsupportedLanguage = -10317;
+
+/** At least one writing operation is in progress on the SCR server. A new transaction or subsession cannot be created.*/
+const TInt KErrScrWriteOperationInProgress = -10320;
+
+/** At least one reading operation exists on the SCR server. A new transaction cannot be created. */
+const TInt KErrScrReadOperationInProgress = -10321;
+
+/** There is no active transaction on the SCR Server owned by the calling session. */
+const TInt KErrScrNoActiveTransaction = -10322;
+
+/** The requested value couldn't be found for the specified locale. */
+const TInt KErrScrUnsupportedLocale = -10323;
+
+#endif // USIFERROR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/common/inc/usiflog.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements print functions for the Universal Software Install Framework components.
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent 
+ @released
+*/
+ 
+#ifndef USIFLOG_H
+#define USIFLOG_H
+
+#include <scs/securitylog.h>
+
+namespace Usif
+	{
+	 _LIT8(KComponentName, "[USIF]");
+	   
+	#define DEBUG_PRINTF(a) {SEC_DEBUG_PRINTF(KComponentName, a);}
+	#define DEBUG_PRINTF2(a, b) {SEC_DEBUG_PRINTF2(KComponentName, a, b);}
+	#define DEBUG_PRINTF3(a, b, c) {SEC_DEBUG_PRINTF3(KComponentName, a, b, c);}
+	#define DEBUG_PRINTF4(a, b, c, d) {SEC_DEBUG_PRINTF4(KComponentName, a, b, c, d);}
+	#define DEBUG_PRINTF5(a, b, c, d, e) {SEC_DEBUG_PRINTF5(KComponentName, a, b, c, d, e);}
+	
+	#define DEBUG_CODE_SECTION(a) {SEC_DEBUG_CODE_SECTION(a);}
+	 
+	}	// End of namespace StreamAccess
+
+#endif // USIFLOG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/eabi/sifnotificationu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,61 @@
+EXPORTS
+	_ZN4Usif16CSifNotifierBase4NewLERNS_21MSifOperationsHandlerEjNS0_13TNotifierTypeE @ 1 NONAME
+	_ZN4Usif16CSifNotifierBase5NewLCERNS_21MSifOperationsHandlerEjNS0_13TNotifierTypeE @ 2 NONAME
+	_ZN4Usif16CSifOperationKey4NewLEv @ 3 NONAME
+	_ZN4Usif20CSifOperationEndData4NewLER11RReadStream @ 4 NONAME
+	_ZN4Usif20CSifOperationEndData4NewLERK7TDesC16NS_14TErrorCategoryEiS3_S3_ @ 5 NONAME
+	_ZN4Usif20CSifOperationEndData5NewLCERK7TDesC16NS_14TErrorCategoryEiS3_S3_ @ 6 NONAME
+	_ZN4Usif20CSifOperationEndDataD0Ev @ 7 NONAME
+	_ZN4Usif20CSifOperationEndDataD1Ev @ 8 NONAME
+	_ZN4Usif20CSifOperationEndDataD2Ev @ 9 NONAME
+	_ZN4Usif22CSifOperationStartData4NewLER11RReadStream @ 10 NONAME
+	_ZN4Usif22CSifOperationStartData4NewLERK7TDesC16S3_RK13RPointerArrayI7HBufC16ES8_iS3_S3_S3_ @ 11 NONAME
+	_ZN4Usif22CSifOperationStartData5NewLCERK7TDesC16S3_RK13RPointerArrayI7HBufC16ES8_iS3_S3_S3_ @ 12 NONAME
+	_ZN4Usif22CSifOperationStartDataD0Ev @ 13 NONAME
+	_ZN4Usif22CSifOperationStartDataD1Ev @ 14 NONAME
+	_ZN4Usif22CSifOperationStartDataD2Ev @ 15 NONAME
+	_ZN4Usif22CSifOperationsNotifier10SubscribeLEji @ 16 NONAME
+	_ZN4Usif22CSifOperationsNotifier16CancelSubscribeLEj @ 17 NONAME
+	_ZN4Usif22CSifOperationsNotifier16CancelSubscribeLEv @ 18 NONAME
+	_ZN4Usif22CSifOperationsNotifier4NewLERNS_21MSifOperationsHandlerE @ 19 NONAME
+	_ZN4Usif22CSifOperationsNotifier5NewLCERNS_21MSifOperationsHandlerE @ 20 NONAME
+	_ZN4Usif24CPublishSifOperationInfo13PublishStartLERNS_22CSifOperationStartDataE @ 21 NONAME
+	_ZN4Usif24CPublishSifOperationInfo16PublishProgressLERNS_25CSifOperationProgressDataE @ 22 NONAME
+	_ZN4Usif24CPublishSifOperationInfo18PublishCompletionLERNS_20CSifOperationEndDataE @ 23 NONAME
+	_ZN4Usif24CPublishSifOperationInfo4NewLEv @ 24 NONAME
+	_ZN4Usif24CPublishSifOperationInfo5NewLCEv @ 25 NONAME
+	_ZN4Usif25CSifOperationProgressData4NewLER11RReadStream @ 26 NONAME
+	_ZN4Usif25CSifOperationProgressData4NewLERK7TDesC16NS_18TSifOperationPhaseENS_21TSifOperationSubPhaseEii @ 27 NONAME
+	_ZN4Usif25CSifOperationProgressData5NewLCERK7TDesC16NS_18TSifOperationPhaseENS_21TSifOperationSubPhaseEii @ 28 NONAME
+	_ZN4Usif25CSifOperationProgressDataD0Ev @ 29 NONAME
+	_ZN4Usif25CSifOperationProgressDataD1Ev @ 30 NONAME
+	_ZN4Usif25CSifOperationProgressDataD2Ev @ 31 NONAME
+	_ZNK4Usif16CSifOperationKey12ExternalizeLER12RWriteStream @ 32 NONAME
+	_ZNK4Usif20CSifOperationEndData12ErrorMessageEv @ 33 NONAME
+	_ZNK4Usif20CSifOperationEndData12ExternalizeLER12RWriteStream @ 34 NONAME
+	_ZNK4Usif20CSifOperationEndData13ErrorCategoryEv @ 35 NONAME
+	_ZNK4Usif20CSifOperationEndData17GlobalComponentIdEv @ 36 NONAME
+	_ZNK4Usif20CSifOperationEndData19ErrorMessageDetailsEv @ 37 NONAME
+	_ZNK4Usif20CSifOperationEndData9ErrorCodeEv @ 38 NONAME
+	_ZNK4Usif22CSifOperationStartData12ExternalizeLER12RWriteStream @ 39 NONAME
+	_ZNK4Usif22CSifOperationStartData12SoftwareTypeEv @ 40 NONAME
+	_ZNK4Usif22CSifOperationStartData13ComponentIconEv @ 41 NONAME
+	_ZNK4Usif22CSifOperationStartData13ComponentNameEv @ 42 NONAME
+	_ZNK4Usif22CSifOperationStartData13ComponentSizeEv @ 43 NONAME
+	_ZNK4Usif22CSifOperationStartData16ApplicationIconsEv @ 44 NONAME
+	_ZNK4Usif22CSifOperationStartData16ApplicationNamesEv @ 45 NONAME
+	_ZNK4Usif22CSifOperationStartData17GlobalComponentIdEv @ 46 NONAME
+	_ZNK4Usif22CSifOperationStartData8IconPathEv @ 47 NONAME
+	_ZNK4Usif25CSifOperationProgressData12ExternalizeLER12RWriteStream @ 48 NONAME
+	_ZNK4Usif25CSifOperationProgressData14CurrentProgessEv @ 49 NONAME
+	_ZNK4Usif25CSifOperationProgressData17GlobalComponentIdEv @ 50 NONAME
+	_ZNK4Usif25CSifOperationProgressData5PhaseEv @ 51 NONAME
+	_ZNK4Usif25CSifOperationProgressData5TotalEv @ 52 NONAME
+	_ZNK4Usif25CSifOperationProgressData8SubPhaseEv @ 53 NONAME
+	_ZTIN4Usif16CSifNotifierBaseE @ 54 NONAME
+	_ZTVN4Usif16CSifNotifierBaseE @ 55 NONAME
+	_ZN4Usif22CSifOperationStartData4NewLERK7TDesC16S3_RK13RPointerArrayI7HBufC16ES8_iS3_S3_S3_NS_18TSifOperationPhaseE @ 56 NONAME
+	_ZN4Usif22CSifOperationStartData5NewLCERK7TDesC16S3_RK13RPointerArrayI7HBufC16ES8_iS3_S3_S3_NS_18TSifOperationPhaseE @ 57 NONAME
+	_ZNK4Usif22CSifOperationStartData14OperationPhaseEv @ 58 NONAME
+	_ZNK4Usif25CSifOperationProgressData15CurrentProgressEv @ 59 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/eabi/siftransportu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,122 @@
+EXPORTS
+	_ZN4Usif14CComponentInfo12SetRootNodeLEPNS0_5CNodeE @ 1 NONAME
+	_ZN4Usif14CComponentInfo14PrepareForIpcLER8TIpcArgsi @ 2 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfo5NewLCERK4TUidRK7TDesC16S7_S7_ @ 3 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD0Ev @ 4 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD1Ev @ 5 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD2Ev @ 6 NONAME
+	_ZN4Usif14CComponentInfo19SetRootNodeAsChildLERNS0_5CNodeE @ 7 NONAME
+	_ZN4Usif14CComponentInfo4NewLEv @ 8 NONAME
+	_ZN4Usif14CComponentInfo5CNode5NewLCERK7TDesC16S4_S4_S4_NS_11TScomoStateENS_14TInstallStatusEiS4_NS_13TAuthenticityERK14TCapabilitySetiiiP13RPointerArrayINS0_16CApplicationInfoEEPSB_IS1_E @ 9 NONAME
+	_ZN4Usif14CComponentInfo5CNode9AddChildLEPS1_ @ 10 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD0Ev @ 11 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD1Ev @ 12 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD2Ev @ 13 NONAME
+	_ZN4Usif14CComponentInfo5NewLCEv @ 14 NONAME
+	_ZN4Usif14CComponentInfoD0Ev @ 15 NONAME
+	_ZN4Usif14CComponentInfoD1Ev @ 16 NONAME
+	_ZN4Usif14CComponentInfoD2Ev @ 17 NONAME
+	_ZN4Usif16TSecurityContextC1ERK9RMessage2 @ 18 NONAME
+	_ZN4Usif16TSecurityContextC2ERK9RMessage2 @ 19 NONAME
+	_ZN4Usif17CSifTransportTask10CancelImplEv @ 20 NONAME
+	_ZN4Usif17CSifTransportTask10FileHandleEv @ 21 NONAME
+	_ZN4Usif17CSifTransportTask13ComponentInfoEv @ 22 NONAME
+	_ZN4Usif17CSifTransportTask13CustomResultsEv @ 23 NONAME
+	_ZN4Usif17CSifTransportTask13RequestStatusEv @ 24 NONAME
+	_ZN4Usif17CSifTransportTaskC2ERNS_20TTransportTaskParamsEi @ 25 NONAME
+	_ZN4Usif17CSifTransportTaskD0Ev @ 26 NONAME
+	_ZN4Usif17CSifTransportTaskD1Ev @ 27 NONAME
+	_ZN4Usif17CSifTransportTaskD2Ev @ 28 NONAME
+	_ZN4Usif18COpaqueNamedParams10AddStringLERK7TDesC16S3_ @ 29 NONAME
+	_ZN4Usif18COpaqueNamedParams12AddIntArrayLERK7TDesC16RK6RArrayIiE @ 30 NONAME
+	_ZN4Usif18COpaqueNamedParams12InternalizeLER11RReadStream @ 31 NONAME
+	_ZN4Usif18COpaqueNamedParams15AddStringArrayLERK7TDesC16RK13RPointerArrayI7HBufC16E @ 32 NONAME
+	_ZN4Usif18COpaqueNamedParams21PrepareResultsForIpcLER8TIpcArgsi @ 33 NONAME
+	_ZN4Usif18COpaqueNamedParams4NewLEv @ 34 NONAME
+	_ZN4Usif18COpaqueNamedParams5NewLCEv @ 35 NONAME
+	_ZN4Usif18COpaqueNamedParams7AddIntLERK7TDesC16i @ 36 NONAME
+	_ZN4Usif18COpaqueNamedParams7CleanupEv @ 37 NONAME
+	_ZN4Usif18COpaqueNamedParamsD0Ev @ 38 NONAME
+	_ZN4Usif18COpaqueNamedParamsD1Ev @ 39 NONAME
+	_ZN4Usif18COpaqueNamedParamsD2Ev @ 40 NONAME
+	_ZN4Usif19CSifTransportServer23NewSifTransportServerLCEv @ 41 NONAME
+	_ZN4Usif19RSifTransportClient10DeactivateEiR14TRequestStatus @ 42 NONAME
+	_ZN4Usif19RSifTransportClient15CancelOperationEv @ 43 NONAME
+	_ZN4Usif19RSifTransportClient16GetComponentInfoER5RFileRNS_14CComponentInfoER14TRequestStatus @ 44 NONAME
+	_ZN4Usif19RSifTransportClient16GetComponentInfoERK7TDesC16RNS_14CComponentInfoER14TRequestStatus @ 45 NONAME
+	_ZN4Usif19RSifTransportClient5CloseEv @ 46 NONAME
+	_ZN4Usif19RSifTransportClient7ConnectERK7TDesC16RK8TVersionS3_4TUid @ 47 NONAME
+	_ZN4Usif19RSifTransportClient7InstallER5RFileR14TRequestStatusi @ 48 NONAME
+	_ZN4Usif19RSifTransportClient7InstallER5RFileRKNS_18COpaqueNamedParamsERS3_R14TRequestStatusi @ 49 NONAME
+	_ZN4Usif19RSifTransportClient7InstallERK7TDesC16R14TRequestStatusi @ 50 NONAME
+	_ZN4Usif19RSifTransportClient7InstallERK7TDesC16RKNS_18COpaqueNamedParamsERS4_R14TRequestStatusi @ 51 NONAME
+	_ZN4Usif19RSifTransportClient8ActivateEiR14TRequestStatus @ 52 NONAME
+	_ZN4Usif19RSifTransportClient9UninstallEiR14TRequestStatusi @ 53 NONAME
+	_ZN4Usif19RSifTransportClient9UninstallEiRKNS_18COpaqueNamedParamsERS1_R14TRequestStatusi @ 54 NONAME
+	_ZN4Usif19RSifTransportClientC1Ev @ 55 NONAME
+	_ZN4Usif19RSifTransportClientC2Ev @ 56 NONAME
+	_ZN4Usif20StartTransportServerERK7TDesC16RK8TVersionPFPNS_17CSifTransportTaskENS_20TransportTaskFactory9TTaskTypeERNS_20TTransportTaskParamsEEi @ 57 NONAME
+	_ZN4Usif20TTransportTaskParamsC1Ev @ 58 NONAME
+	_ZN4Usif20TTransportTaskParamsC2Ev @ 59 NONAME
+	_ZNK4Usif14CComponentInfo12ExternalizeLER12RWriteStream @ 60 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo12IconFileNameEv @ 61 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo4NameEv @ 62 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo6AppUidEv @ 63 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo9GroupNameEv @ 64 NONAME
+	_ZNK4Usif14CComponentInfo5CNode10ScomoStateEv @ 65 NONAME
+	_ZNK4Usif14CComponentInfo5CNode11ComponentIdEv @ 66 NONAME
+	_ZNK4Usif14CComponentInfo5CNode12ApplicationsEv @ 67 NONAME
+	_ZNK4Usif14CComponentInfo5CNode12AuthenticityEv @ 68 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13ComponentNameEv @ 69 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13HasExecutableEv @ 70 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13InstallStatusEv @ 71 NONAME
+	_ZNK4Usif14CComponentInfo5CNode16MaxInstalledSizeEv @ 72 NONAME
+	_ZNK4Usif14CComponentInfo5CNode16SoftwareTypeNameEv @ 73 NONAME
+	_ZNK4Usif14CComponentInfo5CNode17GlobalComponentIdEv @ 74 NONAME
+	_ZNK4Usif14CComponentInfo5CNode17UserGrantableCapsEv @ 75 NONAME
+	_ZNK4Usif14CComponentInfo5CNode21DriveSeletionRequiredEv @ 76 NONAME
+	_ZNK4Usif14CComponentInfo5CNode6VendorEv @ 77 NONAME
+	_ZNK4Usif14CComponentInfo5CNode7VersionEv @ 78 NONAME
+	_ZNK4Usif14CComponentInfo5CNode8ChildrenEv @ 79 NONAME
+	_ZNK4Usif14CComponentInfo9RootNodeLEv @ 80 NONAME
+	_ZNK4Usif16TSecurityContext13HasCapabilityE11TCapability @ 81 NONAME
+	_ZNK4Usif16TSecurityContext14HasCapabilityLE11TCapability @ 82 NONAME
+	_ZNK4Usif16TSecurityContext8SecureIdEv @ 83 NONAME
+	_ZNK4Usif17CSifTransportTask11ComponentIdEv @ 84 NONAME
+	_ZNK4Usif17CSifTransportTask15CustomArgumentsEv @ 85 NONAME
+	_ZNK4Usif17CSifTransportTask15SecurityContextEv @ 86 NONAME
+	_ZNK4Usif17CSifTransportTask8FileNameEv @ 87 NONAME
+	_ZNK4Usif18COpaqueNamedParams10IntByNameLERK7TDesC16 @ 88 NONAME
+	_ZNK4Usif18COpaqueNamedParams12ExternalizeLER12RWriteStream @ 89 NONAME
+	_ZNK4Usif18COpaqueNamedParams13GetIntByNameLERK7TDesC16Ri @ 90 NONAME
+	_ZNK4Usif18COpaqueNamedParams13StringByNameLERK7TDesC16 @ 91 NONAME
+	_ZNK4Usif18COpaqueNamedParams15IntArrayByNameLERK7TDesC16 @ 92 NONAME
+	_ZNK4Usif18COpaqueNamedParams18StringArrayByNameLERK7TDesC16 @ 93 NONAME
+	_ZNK4Usif18COpaqueNamedParams23PrepareArgumentsForIpcLER8TIpcArgsi @ 94 NONAME
+	_ZNK4Usif18COpaqueNamedParams6CountLEv @ 95 NONAME
+	_ZNK4Usif18COpaqueNamedParams9GetNamesLER13RPointerArrayI7HBufC16E @ 96 NONAME
+	_ZTIN4Usif11CStringItemE @ 97 NONAME
+	_ZTIN4Usif12CIntegerItemE @ 98 NONAME
+	_ZTIN4Usif14CComponentInfo16CApplicationInfoE @ 99 NONAME
+	_ZTIN4Usif14CComponentInfo5CNodeE @ 100 NONAME
+	_ZTIN4Usif14CComponentInfoE @ 101 NONAME
+	_ZTIN4Usif16CStringArrayItemE @ 102 NONAME
+	_ZTIN4Usif17CIntegerArrayItemE @ 103 NONAME
+	_ZTIN4Usif17CSifTransportTaskE @ 104 NONAME
+	_ZTIN4Usif19CSifTransportServerE @ 105 NONAME
+	_ZTIN4Usif20CSifTransportRequestE @ 106 NONAME
+	_ZTIN4Usif20CSifTransportSessionE @ 107 NONAME
+	_ZTIN4Usif9CItemBaseE @ 108 NONAME
+	_ZTVN4Usif11CStringItemE @ 109 NONAME
+	_ZTVN4Usif12CIntegerItemE @ 110 NONAME
+	_ZTVN4Usif14CComponentInfo16CApplicationInfoE @ 111 NONAME
+	_ZTVN4Usif14CComponentInfo5CNodeE @ 112 NONAME
+	_ZTVN4Usif14CComponentInfoE @ 113 NONAME
+	_ZTVN4Usif16CStringArrayItemE @ 114 NONAME
+	_ZTVN4Usif17CIntegerArrayItemE @ 115 NONAME
+	_ZTVN4Usif17CSifTransportTaskE @ 116 NONAME
+	_ZTVN4Usif19CSifTransportServerE @ 117 NONAME
+	_ZTVN4Usif20CSifTransportRequestE @ 118 NONAME
+	_ZTVN4Usif20CSifTransportSessionE @ 119 NONAME
+	_ZTVN4Usif9CItemBaseE @ 120 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/eabi/sifu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,97 @@
+EXPORTS	
+	_ZN4Usif14CComponentInfo12SetRootNodeLEPNS0_5CNodeE @ 1 NONAME
+	_ZN4Usif14CComponentInfo14PrepareForIpcLER8TIpcArgsi @ 2 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfo5NewLCERK4TUidRK7TDesC16S7_S7_ @ 3 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD0Ev @ 4 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD1Ev @ 5 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD2Ev @ 6 NONAME
+	_ZN4Usif14CComponentInfo19SetRootNodeAsChildLERNS0_5CNodeE @ 7 NONAME
+	_ZN4Usif14CComponentInfo4NewLEv @ 8 NONAME
+	_ZN4Usif14CComponentInfo5CNode5NewLCERK7TDesC16S4_S4_S4_NS_11TScomoStateENS_14TInstallStatusEiS4_NS_13TAuthenticityERK14TCapabilitySetiiiP13RPointerArrayINS0_16CApplicationInfoEEPSB_IS1_E @ 9 NONAME
+	_ZN4Usif14CComponentInfo5CNode9AddChildLEPS1_ @ 10 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD0Ev @ 11 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD1Ev @ 12 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD2Ev @ 13 NONAME
+	_ZN4Usif14CComponentInfo5NewLCEv @ 14 NONAME
+	_ZN4Usif14CComponentInfoD0Ev @ 15 NONAME
+	_ZN4Usif14CComponentInfoD1Ev @ 16 NONAME
+	_ZN4Usif14CComponentInfoD2Ev @ 17 NONAME
+	_ZN4Usif16RSoftwareInstall10DeactivateEiR14TRequestStatus @ 18 NONAME
+	_ZN4Usif16RSoftwareInstall15CancelOperationEv @ 19 NONAME
+	_ZN4Usif16RSoftwareInstall16GetComponentInfoER5RFileRNS_14CComponentInfoER14TRequestStatus @ 20 NONAME
+	_ZN4Usif16RSoftwareInstall16GetComponentInfoERK7TDesC16RNS_14CComponentInfoER14TRequestStatus @ 21 NONAME
+	_ZN4Usif16RSoftwareInstall5CloseEv @ 22 NONAME
+	_ZN4Usif16RSoftwareInstall7ConnectEv @ 23 NONAME
+	_ZN4Usif16RSoftwareInstall7InstallER5RFileR14TRequestStatusi @ 24 NONAME
+	_ZN4Usif16RSoftwareInstall7InstallER5RFileRKNS_18COpaqueNamedParamsERS3_R14TRequestStatusi @ 25 NONAME
+	_ZN4Usif16RSoftwareInstall7InstallERK7TDesC16R14TRequestStatusi @ 26 NONAME
+	_ZN4Usif16RSoftwareInstall7InstallERK7TDesC16RKNS_18COpaqueNamedParamsERS4_R14TRequestStatusi @ 27 NONAME
+	_ZN4Usif16RSoftwareInstall8ActivateEiR14TRequestStatus @ 28 NONAME
+	_ZN4Usif16RSoftwareInstall9UninstallEiR14TRequestStatusi @ 29 NONAME
+	_ZN4Usif16RSoftwareInstall9UninstallEiRKNS_18COpaqueNamedParamsERS1_R14TRequestStatusi @ 30 NONAME
+	_ZN4Usif16RSoftwareInstallC1Ev @ 31 NONAME
+	_ZN4Usif16RSoftwareInstallC2Ev @ 32 NONAME
+	_ZN4Usif16TSecurityContextC1ERK9RMessage2 @ 33 NONAME
+	_ZN4Usif16TSecurityContextC2ERK9RMessage2 @ 34 NONAME
+	_ZN4Usif18COpaqueNamedParams10AddStringLERK7TDesC16S3_ @ 35 NONAME
+	_ZN4Usif18COpaqueNamedParams12AddIntArrayLERK7TDesC16RK6RArrayIiE @ 36 NONAME
+	_ZN4Usif18COpaqueNamedParams12InternalizeLER11RReadStream @ 37 NONAME
+	_ZN4Usif18COpaqueNamedParams15AddStringArrayLERK7TDesC16RK13RPointerArrayI7HBufC16E @ 38 NONAME
+	_ZN4Usif18COpaqueNamedParams21PrepareResultsForIpcLER8TIpcArgsi @ 39 NONAME
+	_ZN4Usif18COpaqueNamedParams4NewLEv @ 40 NONAME
+	_ZN4Usif18COpaqueNamedParams5NewLCEv @ 41 NONAME
+	_ZN4Usif18COpaqueNamedParams7AddIntLERK7TDesC16i @ 42 NONAME
+	_ZN4Usif18COpaqueNamedParams7CleanupEv @ 43 NONAME
+	_ZN4Usif18COpaqueNamedParamsD0Ev @ 44 NONAME
+	_ZN4Usif18COpaqueNamedParamsD1Ev @ 45 NONAME
+	_ZN4Usif18COpaqueNamedParamsD2Ev @ 46 NONAME
+	_ZNK4Usif14CComponentInfo12ExternalizeLER12RWriteStream @ 47 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo12IconFileNameEv @ 48 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo4NameEv @ 49 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo6AppUidEv @ 50 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo9GroupNameEv @ 51 NONAME
+	_ZNK4Usif14CComponentInfo5CNode10ScomoStateEv @ 52 NONAME
+	_ZNK4Usif14CComponentInfo5CNode11ComponentIdEv @ 53 NONAME
+	_ZNK4Usif14CComponentInfo5CNode12ApplicationsEv @ 54 NONAME
+	_ZNK4Usif14CComponentInfo5CNode12AuthenticityEv @ 55 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13ComponentNameEv @ 56 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13HasExecutableEv @ 57 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13InstallStatusEv @ 58 NONAME
+	_ZNK4Usif14CComponentInfo5CNode16MaxInstalledSizeEv @ 59 NONAME
+	_ZNK4Usif14CComponentInfo5CNode16SoftwareTypeNameEv @ 60 NONAME
+	_ZNK4Usif14CComponentInfo5CNode17GlobalComponentIdEv @ 61 NONAME
+	_ZNK4Usif14CComponentInfo5CNode17UserGrantableCapsEv @ 62 NONAME
+	_ZNK4Usif14CComponentInfo5CNode21DriveSeletionRequiredEv @ 63 NONAME
+	_ZNK4Usif14CComponentInfo5CNode6VendorEv @ 64 NONAME
+	_ZNK4Usif14CComponentInfo5CNode7VersionEv @ 65 NONAME
+	_ZNK4Usif14CComponentInfo5CNode8ChildrenEv @ 66 NONAME
+	_ZNK4Usif14CComponentInfo9RootNodeLEv @ 67 NONAME
+	_ZNK4Usif16TSecurityContext13HasCapabilityE11TCapability @ 68 NONAME
+	_ZNK4Usif16TSecurityContext14HasCapabilityLE11TCapability @ 69 NONAME
+	_ZNK4Usif16TSecurityContext8SecureIdEv @ 70 NONAME
+	_ZNK4Usif18COpaqueNamedParams10IntByNameLERK7TDesC16 @ 71 NONAME
+	_ZNK4Usif18COpaqueNamedParams12ExternalizeLER12RWriteStream @ 72 NONAME
+	_ZNK4Usif18COpaqueNamedParams13GetIntByNameLERK7TDesC16Ri @ 73 NONAME
+	_ZNK4Usif18COpaqueNamedParams13StringByNameLERK7TDesC16 @ 74 NONAME
+	_ZNK4Usif18COpaqueNamedParams15IntArrayByNameLERK7TDesC16 @ 75 NONAME
+	_ZNK4Usif18COpaqueNamedParams18StringArrayByNameLERK7TDesC16 @ 76 NONAME
+	_ZNK4Usif18COpaqueNamedParams23PrepareArgumentsForIpcLER8TIpcArgsi @ 77 NONAME
+	_ZNK4Usif18COpaqueNamedParams6CountLEv @ 78 NONAME
+	_ZNK4Usif18COpaqueNamedParams9GetNamesLER13RPointerArrayI7HBufC16E @ 79 NONAME
+	_ZTIN4Usif11CStringItemE @ 80 NONAME
+	_ZTIN4Usif12CIntegerItemE @ 81 NONAME
+	_ZTIN4Usif14CComponentInfo16CApplicationInfoE @ 82 NONAME
+	_ZTIN4Usif14CComponentInfo5CNodeE @ 83 NONAME
+	_ZTIN4Usif14CComponentInfoE @ 84 NONAME
+	_ZTIN4Usif16CStringArrayItemE @ 85 NONAME
+	_ZTIN4Usif17CIntegerArrayItemE @ 86 NONAME
+	_ZTIN4Usif9CItemBaseE @ 87 NONAME
+	_ZTVN4Usif11CStringItemE @ 88 NONAME
+	_ZTVN4Usif12CIntegerItemE @ 89 NONAME
+	_ZTVN4Usif14CComponentInfo16CApplicationInfoE @ 90 NONAME
+	_ZTVN4Usif14CComponentInfo5CNodeE @ 91 NONAME
+	_ZTVN4Usif14CComponentInfoE @ 92 NONAME
+	_ZTVN4Usif16CStringArrayItemE @ 93 NONAME
+	_ZTVN4Usif17CIntegerArrayItemE @ 94 NONAME
+	_ZTVN4Usif9CItemBaseE @ 95 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/eabi/sifutilsu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,4 @@
+EXPORTS
+	_ZN4Usif10UninstallLEi @ 1 NONAME
+	_ZN4Usif18GenerateNewAppUidLEv @ 2 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/engineering/Doxyfile.cfg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,245 @@
+# Doxyfile 1.4.6
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = "Universal Install Framework"
+PROJECT_NUMBER         = 
+OUTPUT_DIRECTORY       = ./output
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+USE_WINDOWS_ENCODING   = YES
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = 
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = NO
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = YES
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 8
+ALIASES                = "publishedAll=@par Interface: publishedAll\n" \
+                         "publishedPartner=@par Interface: publishedPartner\n" \
+                         "internalAll=@par Interface: internalAll\n" \
+                         "internalComponent=@par Interface: internalComponent\n" \
+                         "internalTechnology=@par Interface: internalTechnology\n" \
+                         "prototype=@par Interface: prototype\n" \
+                         "interim=@par Interface: interim\n" \
+                         "released=@par Interface: released\n" \
+                         "deprecated=@par Interface: deprecated\n" \
+                         "removed=@par Interface: removed\n" \
+                         "capability=@par Capability: \n" \
+                         "leave=@par Leave: \n" \
+                         "panic=@par Panic: \n" \
+                         "SYMPurpose=@par File Purpose: \n"
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+BUILTIN_STL_SUPPORT    = NO
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = NO
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = NO
+EXTRACT_LOCAL_METHODS  = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = YES
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = NO
+GENERATE_TESTLIST      = NO
+GENERATE_BUGLIST       = NO
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = NO
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = ../common/inc \
+						 ../scr/inc \
+						 ../sts/inc \
+						 ../sif/inc \
+FILE_PATTERNS          = *.cpp \
+                         *.h \
+                         *.inl \
+                         *.hrh \
+                         *.rss
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = *.policy
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = 
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = .
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = YES
+CHM_FILE               = ../../UsifApi.chm
+HHC_LOCATION           = "C:/Program Files/HTML Help Workshop/hhc.exe"
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 2
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = YES
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = YES
+LATEX_HIDE_INDICES     = YES
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = YES
+EXPAND_ONLY_PREDEF     = YES
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = EXPORT_C \
+                         REMOVE_CAF1 \
+                         "NONSHARABLE_CLASS(name)=class name"
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = NO
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = YES
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 1024
+MAX_DOT_GRAPH_HEIGHT   = 1024
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/engineering/builddox.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+
+rmdir /S /Q output
+mkdir output
+del /F /Q UsifApi.chm
+del /F /Q UsifApi.pdf
+doxygen Doxyfile.cfg > doxygen.log 2>&1
+UsifApi.chm
+doxygen.log
+echo Building PDF...
+cd output\latex
+make pdf
+cd ..\..
+ren output\latex\refman.pdf .\UsifApi.pdf
+echo Done.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/engineering/readme.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Portions Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+// Description:		Universal Install Framework Readme file
+
+
+This folder holds the Doxygen files needed to build the Compiled HTML Help file 
+that documents the USIF APIs.
+
+
+// ----------------------------------------------------
+// Pre-requisites for building the documentation
+// ----------------------------------------------------
+
+Windows PC with:
+
+o DOxygen 1.4.6 or later, 
+	http://www.stack.nl/~dimitri/doxygen/
+o Graphviz 2.8 or later, 
+	http://www.graphviz.org/
+o Microsoft HTML Help Workshop 4.74 or later,  
+	http://www.microsoft.com/downloads/details.aspx?familyid=00535334-c8a6-452f-9aa0-d597d16580cc&displaylang=en
+o MikTex
+	http://miktex.org/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/examples/refnativeplugin/group/refnativeplugin.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Project specification file for SIF plugin for native software
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+TARGET			refnativeplugin.dll
+TARGETTYPE		PLUGIN
+
+UID				0x10009D8D 0x10285BC3
+
+CAPABILITY		ProtServ TrustedUI ReadUserData WriteDeviceData
+
+SOURCEPATH		../source
+SOURCE			refnativeplugin.cpp
+
+USERINCLUDE		../../../common/inc
+USERINCLUDE		../../../../swi/inc
+USERINCLUDE		../../../../swi/inc/swi
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+START RESOURCE	10285BC3.rss
+	TARGET refnativeplugin.rsc
+END
+LIBRARY			euser.lib sishelper.lib sif.lib scrclient.lib
+LIBRARY			sisregistryclient.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/examples/refnativeplugin/source/10285BC3.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* ECOM DLL UID:			0x10285BC3
+* ECOM interface UID:		0x10285BC2 (KUidSifPlugin)
+* ECOM Implementation:		0x10285BC4
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+
+RESOURCE REGISTRY_INFO so_registry
+	{
+	dll_uid = 0x10285BC3;
+	interfaces =
+		{
+		INTERFACE_INFO
+			{
+			interface_uid = 0x10285BC2;
+			
+			implementations =
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x10285BC4;
+					version_no = 1;
+					default_data = "";
+					opaque_data = "";
+					}
+				};
+			}
+		};
+	}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/examples/refnativeplugin/source/refnativeplugin.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,713 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "refnativeplugin.h"
+#include "usiflog.h"
+#include <usif/sif/sif.h>
+#include <usif/sif/sifcommon.h>
+#include <usif/usiferror.h>
+#include <usif/sif/sifplugin.h>
+#include <usif/scr/screntries.h>
+#include <usif/scr/scr.h>
+#include <swi/msisuihandlers.h>
+#include <swi/asynclauncher.h>
+#include <swi/sisinstallerrors.h>
+#include <e32property.h>
+#include <sacls.h>
+#include "sisregistrywritablesession.h"
+#include "sisregistrysession.h"
+
+using namespace Usif;
+
+static const TInt KRefNativePluginImpId = 0x10285BC4;
+
+static const TImplementationProxy ImplementationTable[] = 
+	{
+	IMPLEMENTATION_PROXY_ENTRY(KRefNativePluginImpId, CRefNativePlugin::NewL)
+	};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
+
+CRefNativePlugin* CRefNativePlugin::NewL()
+	{
+	DEBUG_PRINTF(_L8("Constructing CRefNativePlugin"));
+	CRefNativePlugin *self = new (ELeave) CRefNativePlugin();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CRefNativePlugin::ConstructL()
+	{
+	iImpl = CRefNativePluginActiveImpl::NewL();
+	}
+
+CRefNativePlugin::~CRefNativePlugin()
+	{
+	delete iImpl;
+	}
+
+void CRefNativePlugin::CancelOperation()
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - Cancel"));
+	iImpl->Cancel();
+	}
+
+void CRefNativePlugin::GetComponentInfo(const TDesC& aFileName, const TSecurityContext& /*aSecurityContext*/,
+										 CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	iImpl->GetComponentInfo(aFileName, aComponentInfo, aStatus);
+	}
+
+void CRefNativePlugin::GetComponentInfo(RFile& aFileHandle, const TSecurityContext& /*aSecurityContext*/,
+						 				CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	iImpl->GetComponentInfo(aFileHandle, aComponentInfo, aStatus);
+	}
+
+void CRefNativePlugin::Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+								TRequestStatus& aStatus)
+	{
+	iImpl->Install(aFileName, aSecurityContext, aInputParams, aOutputParams, aStatus);
+	}
+
+void CRefNativePlugin::Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+								TRequestStatus& aStatus)
+	{
+	iImpl->Install(aFileHandle, aSecurityContext, aInputParams, aOutputParams, aStatus);
+	}
+
+void CRefNativePlugin::Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
+	{
+	iImpl->Uninstall(aComponentId, aSecurityContext, aInputParams, aOutputParams, aStatus);
+	}
+
+void CRefNativePlugin::Activate(TComponentId aComponentId, const TSecurityContext& aSecurityContext, TRequestStatus& aStatus)
+
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - Activate"));
+	iImpl->Activate(aComponentId, aSecurityContext, aStatus);
+	}
+
+void CRefNativePlugin::Deactivate(TComponentId aComponentId, const TSecurityContext& aSecurityContext, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - Deactivate"));
+	iImpl->Deactivate(aComponentId, aSecurityContext, aStatus);
+	}
+
+//------------------CRefNativePluginActiveImpl---------------------
+
+CRefNativePluginActiveImpl* CRefNativePluginActiveImpl::NewL()
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - Constructing CRefNativePluginActiveImpl"));
+	CRefNativePluginActiveImpl *self = new (ELeave) CRefNativePluginActiveImpl();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(1, self);
+	return self;
+	}
+
+void CRefNativePluginActiveImpl::ConstructL()
+	{
+	iInstallPrefs = Swi::CInstallPrefs::NewL();
+	iAsyncLauncher = Swi::CAsyncLauncher::NewL();
+	iComponentInfo = CComponentInfo::NewL();
+	CActiveScheduler::Add(this);
+	}
+
+CRefNativePluginActiveImpl::~CRefNativePluginActiveImpl()
+	{
+	delete iAsyncLauncher;
+	delete iInstallPrefs;
+	delete iComponentInfo;
+	}
+
+const TInt KSystemWideErrorsBoundary = -100;
+
+TInt ConvertToSifErrorCode(TInt aSwiErrorCode)
+	{
+	if (aSwiErrorCode > KSystemWideErrorsBoundary)
+		return aSwiErrorCode; 
+	switch (aSwiErrorCode)
+		{
+		case KErrSISFieldIdMissing:
+		case KErrSISFieldLengthMissing:
+		case KErrSISFieldLengthInvalid:
+		case KErrSISStringInvalidLength:
+		case KErrSISSignedControllerSISControllerMissing:
+		case KErrSISControllerSISInfoMissing:
+		case KErrSISInfoSISUidMissing:
+		case KErrSISInfoSISNamesMissing:
+		case KErrSISFieldBufferTooShort:
+		case KErrSISStringArrayInvalidElement:
+		case KErrSISInfoSISVendorNamesMissing:
+		case KErrSISInfoSISVersionMissing:
+		case KErrSISControllerSISSupportedLanguagesMissing:
+		case KErrSISSupportedLanguagesInvalidElement:
+		case KErrSISLanguageInvalidLength:
+		case KErrSISContentsSISSignedControllerMissing:
+		case KErrSISContentsSISDataMissing:
+		case KErrSISDataSISFileDataUnitMissing:
+		case KErrSISFileDataUnitTargetMissing:
+		case KErrSISFileOptionsMissing:
+		case KErrSISFileDataUnitDescriptorMissing:
+		case KErrSISFileDataDescriptionMissing:
+		case KErrSISContentsMissing:
+		case KErrSISEmbeddedControllersMissing:
+		case KErrSISEmbeddedDataUnitsMissing:
+		case KErrSISControllerOptionsMissing:
+		case KErrSISExpressionMissing:
+		case KErrSISExpressionStringValueMissing:
+		case KErrSISOptionsStringMissing:
+		case KErrSISFileOptionsExpressionMissing:
+		case KErrSISExpressionHeadValueMissing:
+		case KErrSISEmbeddedSISOptionsMissing:
+		case KErrSISInfoSISUpgradeRangeMissing:
+		case KErrSISDependencyMissingUid:
+		case KErrSISDependencyMissingVersion:
+		case KErrSISDependencyMissingNames:
+		case KErrSISControllerMissingPrerequisites:
+		case KErrSISUpgradeRangeMissingVersion:
+		case KErrSISUnexpectedFieldType:
+		case KErrSISExpressionUnknownOperator:
+		case KErrSISArrayReadError:
+		case KErrSISArrayTypeMismatch:
+		case KErrSISInvalidStringLength:
+		case KErrSISCompressionNotSupported:
+		case KErrSISTooDeeplyEmbedded:
+		case KErrWrongHeaderFormat:
+		case KErrExpressionToComplex:
+		case KErrInvalidExpression:
+		case KErrInvalidType:
+
+			return KErrSifCorruptedPackage;
+
+		case KErrBadUsage:
+		case KErrInstallerLeave:
+
+			return KErrSifUnknown;
+
+		case KErrSISPrerequisitesMissingDependency:
+
+			return KErrSifMissingDependencies;
+
+		case KErrMissingBasePackage:
+
+			return KErrSifMissingBasePackage;
+
+		case KErrCapabilitiesMismatch:
+		case KErrInvalidEclipsing:
+		case KErrSecurityError:
+		case KErrBadHash:
+		case KErrDigestNotSupported:
+		case KErrSignatureSchemeNotSupported:
+		case KErrSISWouldOverWrite:
+		case KErrSISInvalidTargetFile:
+
+			return KErrPermissionDenied;
+
+		case KErrPolicyFileCorrupt:
+
+			return KErrSifBadInstallerConfiguration;
+
+		case KErrInvalidUpgrade:
+		case KErrLegacySisFile:
+
+			return KErrSifPackageCannotBeInstalledOnThisDevice;
+
+		case KErrSISNotEnoughSpaceToInstall:
+
+			return KErrSifNotEnoughSpace;
+
+		default:
+			return KErrSifUnknown;
+		}
+	}
+
+TBool CRefNativePluginActiveImpl::NeedUserCapabilityL()
+	{
+	// Silent install is not allowed when the package requires additional capabilities
+	// than what it is signed for (Pakage may request for some capability that is not 
+	// granted by the certificate used to sign it).
+	for(TInt cap=0; cap<ECapability_Limit; ++cap)
+		{
+		if (iComponentInfo->RootNodeL().UserGrantableCaps().HasCapability(TCapability(cap)))
+			{
+			DEBUG_PRINTF2(_L("Package requires additional capability - %d"), cap);
+			return ETrue;
+			}
+		}
+			
+	return EFalse;
+	}
+
+void CRefNativePluginActiveImpl::RunL()
+	{
+	if (iSilentInstall)
+		{
+		DEBUG_PRINTF(_L("Silent install  - CRefNativePluginActiveImpl::RunL"));
+		ProcessSilentInstallL();
+		}
+	else
+		{
+		TInt res = iStatus.Int();
+		DEBUG_PRINTF2(_L8("Reference native plugin - Operation finished with result %d"), res);
+	
+		// Output options
+		if (iOutputParams != NULL)
+			{
+			iOutputParams->AddIntL(KSifOutParam_ExtendedErrCode, res);
+			
+			if (iInstallRequest && res == KErrNone)
+				{
+				TComponentId resultComponentId = 0;
+				TRAPD(getLastIdErr, resultComponentId = GetLastInstalledComponentIdL());
+				if (getLastIdErr == KErrNone)
+					iOutputParams->AddIntL(KSifOutParam_ComponentId, resultComponentId);
+				}
+			}
+	
+		User::RequestComplete(iClientStatus, ConvertToSifErrorCode(res));
+		iClientStatus = NULL;
+		}
+	}
+
+void CRefNativePluginActiveImpl::ProcessSilentInstallL()
+	{
+	// We need to do this only once per installation request
+	iSilentInstall = EFalse;
+	iInstallRequest = ETrue;
+	
+	TBool isNotAuthenticated = (ENotAuthenticated == iComponentInfo->RootNodeL().Authenticity());
+	TBool reqUserCap = NeedUserCapabilityL();
+	if (isNotAuthenticated || reqUserCap)
+		{
+		if (isNotAuthenticated)
+			{
+				DEBUG_PRINTF(_L("Silent Install is not allowed on unsigned or self-signed packages"));
+			}
+		
+		if (reqUserCap)
+			{
+				DEBUG_PRINTF(_L("Silent Install is not allowed when user capabilities are required"));
+			}
+		
+		User::RequestComplete(iClientStatus, KErrNotSupported);
+		iClientStatus = NULL;
+		}		
+	else
+		{
+		TInt err;
+		if (iFileHandle)
+			{
+			TRAP(err, iAsyncLauncher->InstallL(*this, *iFileHandle, *iInstallPrefs, iStatus));
+			}
+		else
+			{
+			//DEBUG_PRINTF2(_L("!!!Silent install for %S"), iFileName);
+			TRAP(err, iAsyncLauncher->InstallL(*this, iFileName, *iInstallPrefs, iStatus));
+			}
+		
+		if (err != KErrNone)
+			{
+			User::RequestComplete(iClientStatus, err);
+			iClientStatus = NULL;			
+			}
+		
+		SetActive();
+		}
+	}
+
+void CRefNativePluginActiveImpl::DoCancel()
+	{
+	if (iClientStatus)
+		{
+		iAsyncLauncher->CancelOperation();
+		delete iAsyncLauncher;
+		iAsyncLauncher = NULL;
+		
+		User::RequestComplete(iClientStatus, KErrCancel);
+		iClientStatus = NULL;
+		}
+	}
+
+void CRefNativePluginActiveImpl::CommonRequestPreamble(const TSecurityContext& aSecurityContext, const COpaqueNamedParams& aInputParams, 
+				COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	iInputParams = &aInputParams;
+	iOutputParams = &aOutputParams;
+
+	TInt declineOperation = 0;
+	TRAPD(err, aInputParams.GetIntByNameL(KDeclineOperationOptionName, declineOperation));
+	if(err == KErrNone && declineOperation)
+		{
+		iDeclineOperation = ETrue;
+		}
+	
+	// Check to see if we have the opaque input argument - InstallSilently 
+	TInt silentInstall = 0;
+	TRAP_IGNORE(aInputParams.GetIntByNameL(KSifInParam_InstallSilently, silentInstall));
+	if (silentInstall)
+		{
+		iSilentInstall = ETrue;
+		if (!aSecurityContext.HasCapability(ECapabilityTrustedUI))
+			{
+			User::RequestComplete(iClientStatus, KErrPermissionDenied);
+			iClientStatus = NULL;			
+			}
+		}	
+	}
+
+TComponentId CRefNativePluginActiveImpl::GetLastInstalledComponentIdL()
+  	{
+  	ASSERT(iInstallRequest);
+  
+  	// Find the id of the last installed component and return it
+  	TInt uid;
+  	User::LeaveIfError(RProperty::Get(KUidSystemCategory, KUidSwiLatestInstallation, uid));
+
+	Swi::RSisRegistrySession sisRegistrySession;
+	User::LeaveIfError(sisRegistrySession.Connect());
+	CleanupClosePushL(sisRegistrySession);
+  
+	TUid tuid(TUid::Uid(uid));
+	TComponentId componentId = sisRegistrySession.GetComponentIdForUidL(tuid);
+	CleanupStack::PopAndDestroy(&sisRegistrySession);
+	
+	return componentId;
+  	}
+
+void CRefNativePluginActiveImpl::GetComponentInfo(const TDesC& aFileName, CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF2(_L("Reference native plugin - retrieving component info for %S"), &aFileName);
+
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	TRAPD(err, iAsyncLauncher->GetComponentInfoL(*this, aFileName, *iInstallPrefs, aComponentInfo, iStatus));
+	if (err != KErrNone)
+		{
+		TRequestStatus *statusPtr(&aStatus);
+		User::RequestComplete(statusPtr, err);
+		return;
+		}
+
+	SetActive();
+	}
+
+void CRefNativePluginActiveImpl::GetComponentInfo(RFile& aFileHandle, CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - getting component info by file handle"));
+	
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;	
+
+	TRAPD(err, iAsyncLauncher->GetComponentInfoL(*this, aFileHandle, *iInstallPrefs, aComponentInfo, iStatus));
+	if (err != KErrNone)
+		{
+		TRequestStatus *statusPtr(&aStatus);
+		User::RequestComplete(statusPtr, err);
+		return;
+		}
+
+	SetActive();
+	}	
+
+void CRefNativePluginActiveImpl::Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+											const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+											TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF2(_L("Reference native plugin - install for %S"), &aFileName);
+	
+	CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus);
+	
+	TInt err;
+	if (iSilentInstall)
+		{
+		// Silent install does a few addtional checks on the package to see if is 
+		// signed and had the required capabilities. So we need to the get the 
+		// package component information with out installing it.
+		DEBUG_PRINTF2(_L("Silent install  - Get the ComponentInfo for %S"), &aFileName);
+		iFileName = aFileName;
+		TRAP(err, iAsyncLauncher->GetComponentInfoL(*this, aFileName, *iInstallPrefs, *iComponentInfo, iStatus));
+		}
+	else
+		{
+		// Proceed with the normal installation.
+		TRAP(err, iAsyncLauncher->InstallL(*this, aFileName, *iInstallPrefs, iStatus));
+		iInstallRequest = ETrue;
+		}
+	
+	if (err != KErrNone)
+		{
+		TRequestStatus *statusPtr(&aStatus);
+		User::RequestComplete(statusPtr, err);
+		return;
+		}
+	
+	SetActive();
+	}
+
+void CRefNativePluginActiveImpl::Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+											const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+											TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - install by file handle"));
+
+	CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus);
+
+	TInt err;
+	if (iSilentInstall)
+		{
+		// Silent install does a few addtional checks on the package to see if is 
+		// signed and had the required capabilities. So we need to the get the 
+		// package component information with out installing it.
+		iFileHandle = &aFileHandle;
+		TRAP(err, iAsyncLauncher->GetComponentInfoL(*this, aFileHandle, *iInstallPrefs, *iComponentInfo, iStatus));
+		}
+	else
+		{
+		// Proceed with the normal installation.
+		TRAP(err, iAsyncLauncher->InstallL(*this, aFileHandle, *iInstallPrefs, iStatus));
+		iInstallRequest = ETrue;
+		}
+	
+	if (err != KErrNone)
+		{
+		TRequestStatus *statusPtr(&aStatus);
+		User::RequestComplete(statusPtr, err);
+		return;
+		}
+
+	SetActive();
+	}
+
+void CRefNativePluginActiveImpl::Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+		  const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
+	{
+	TRAPD(err, UninstallL(aComponentId, aSecurityContext, aInputParams, aOutputParams, aStatus));
+	if (err != KErrNone)
+		{
+		TRequestStatus *statusPtr(&aStatus);
+		User::RequestComplete(statusPtr, err);
+		return;
+		}
+	SetActive();
+	}
+
+void CRefNativePluginActiveImpl::UninstallL(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+		  const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - uninstall"));
+	CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus);
+    // Get UID for given component id
+	RSoftwareComponentRegistry scrSession;
+	User::LeaveIfError(scrSession.Connect());
+	CleanupClosePushL(scrSession);
+	
+	CPropertyEntry* propertyEntry = scrSession.GetComponentPropertyL(aComponentId, _L("CompUid"));
+	CleanupStack::PushL(propertyEntry);
+
+	CIntPropertyEntry* intPropertyEntry = dynamic_cast<CIntPropertyEntry *>(propertyEntry); 
+	
+	TRequestStatus *statusPtr(&aStatus);
+	if (intPropertyEntry == NULL)
+		{
+		DEBUG_PRINTF2(_L8("UID property for component %d was not found"), aComponentId);
+		User::RequestComplete(statusPtr, KErrNotFound);
+		return;
+		}
+
+	TUid objectId = TUid::Uid(intPropertyEntry->IntValue());
+	CleanupStack::PopAndDestroy(2, &scrSession);
+
+	iAsyncLauncher->UninstallL(*this, objectId, iStatus);
+	}
+
+void CRefNativePluginActiveImpl::Activate(TComponentId aComponentId, const TSecurityContext& /*aSecurityContext*/, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - activate"));
+	iStatus = KRequestPending;
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	TRequestStatus* rs(&iStatus);
+	
+	Swi::RSisRegistryWritableSession sisRegSession;
+	TRAPD(err, 
+			User::LeaveIfError(sisRegSession.Connect());
+			sisRegSession.ActivateComponentL(aComponentId);
+			)
+	sisRegSession.Close();
+
+	User::RequestComplete(rs, err);
+	SetActive();
+	}
+
+void CRefNativePluginActiveImpl::Deactivate(TComponentId aComponentId, const TSecurityContext& /*aSecurityContext*/, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - deactivate"));
+	iStatus = KRequestPending;
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	TRequestStatus* rs(&iStatus);
+
+	Swi::RSisRegistryWritableSession sisRegSession;
+	TRAPD(err, 
+			User::LeaveIfError(sisRegSession.Connect());
+			sisRegSession.DeactivateComponentL(aComponentId);
+			)
+	sisRegSession.Close();
+
+	User::RequestComplete(rs, err);
+	SetActive();
+	}
+
+// SWI::MUiHandler implementation
+TInt CRefNativePluginActiveImpl::DisplayLanguageL(const Swi::CAppInfo& /*aAppInfo*/,const RArray<TLanguage>& /*aLanguages*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayLanguageL"));
+	return 0;
+	}
+
+TInt CRefNativePluginActiveImpl::DisplayDriveL(const Swi::CAppInfo& /*aAppInfo*/,TInt64 /*aSize*/, const RArray<TChar>& /*aDriveLetters*/, const RArray<TInt64>& /*aDriveSpaces*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayDriveL"));
+	return 0;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplayUninstallL(const Swi::CAppInfo& /*aAppInfo*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayUninstallL"));
+	if (iDeclineOperation)
+		{
+		DEBUG_PRINTF(_L8("Reference native plugin - Received an option to decline operation - stopping uninstall"));
+		return EFalse;
+		}
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplayTextL(const Swi::CAppInfo& /*aAppInfo*/, Swi::TFileTextOption /*aOption*/, const TDesC& /*aText*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayTextL"));
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplayDependencyBreakL(const Swi::CAppInfo& /*aAppInfo*/, const RPointerArray<TDesC>& /*aComponents*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayDependencyBreakL"));
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplayApplicationsInUseL(const Swi::CAppInfo& /*aAppInfo*/, const RPointerArray<TDesC>& /*aAppNames*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayApplicationsInUseL"));
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplayQuestionL(const Swi::CAppInfo& /*aAppInfo*/, Swi::TQuestionDialog /*aQuestion*/, const TDesC& /*aDes*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayQuestionL"));
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplayInstallL(const Swi::CAppInfo& /*aAppInfo*/, const CApaMaskedBitmap* /*aLogo*/, const RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayInstallL"));
+
+	if (iDeclineOperation)
+		{
+		DEBUG_PRINTF(_L8("Reference native plugin - Received an option to decline operation - stopping install"));
+		return EFalse;
+		}
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplayGrantCapabilitiesL(const Swi::CAppInfo& /*aAppInfo*/, const TCapabilitySet& /*aCapabilitySet*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayGrantCapabilitiesL"));
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplayUpgradeL(const Swi::CAppInfo& /*aAppInfo*/, const Swi::CAppInfo& /*aExistingAppInfo*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayUpgradeL"));
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplayOptionsL(const Swi::CAppInfo& /*aAppInfo*/, const RPointerArray<TDesC>& /*aOptions*/, RArray<TBool>& /*aSelections*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayOptionsL"));
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplaySecurityWarningL(const Swi::CAppInfo& /*aAppInfo*/, Swi::TSignatureValidationResult /*aSigValidationResult*/,
+						RPointerArray<CPKIXValidationResultBase>& /*aPkixResults*/, RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/, TBool /*aInstallAnyway*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplaySecurityWarningL"));
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplayOcspResultL(const Swi::CAppInfo& /*aAppInfo*/, Swi::TRevocationDialogMessage /*aMessage*/, RPointerArray<TOCSPOutcome>& /*aOutcomes*/, 
+						RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/,TBool /*aWarningOnly*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayOcspResultL"));
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::DisplayMissingDependencyL(const Swi::CAppInfo& /*aAppInfo*/, const TDesC& /*aDependencyName*/, TVersion /*aWantedVersionFrom*/,
+						TVersion /*aWantedVersionTo*/, TVersion /*aInstalledVersion*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayMissingDependencyL"));
+	return ETrue;
+	}
+
+TBool CRefNativePluginActiveImpl::HandleInstallEventL(const Swi::CAppInfo& /*aAppInfo*/, Swi::TInstallEvent /*aEvent*/, TInt /*aValue*/, const TDesC& /*aDes*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - HandleInstallEventL"));
+	return ETrue;
+	}
+
+void CRefNativePluginActiveImpl::HandleCancellableInstallEventL(const Swi::CAppInfo& /*aAppInfo*/, Swi::TInstallCancellableEvent /*aEvent*/, Swi::MCancelHandler& /*aCancelHandler*/,
+						TInt /*aValue*/,const TDesC& /*aDes*/)
+	{	
+	DEBUG_PRINTF(_L8("Reference native plugin - HandleCancellableInstallEventL"));
+	}
+
+void CRefNativePluginActiveImpl::DisplayCannotOverwriteFileL(const Swi::CAppInfo& /*aAppInfo*/, const Swi::CAppInfo& /*aInstalledAppInfo*/,const TDesC& /*aFileName*/)
+	{	
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayCannotOverwriteFileL"));
+	}
+
+void CRefNativePluginActiveImpl::DisplayErrorL(const Swi::CAppInfo& /*aAppInfo*/, Swi::TErrorDialog /*aType*/, const TDesC& /*aParam*/)
+	{
+	DEBUG_PRINTF(_L8("Reference native plugin - DisplayErrorL"));
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/examples/refnativeplugin/source/refnativeplugin.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This class implements a test SIF plugin for native software
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef REFNATIVEPLUGIN_H
+#define REFNATIVEPLUGIN_H
+
+#include <usif/sif/sifplugin.h>
+#include <usif/scr/screntries.h>
+#include <swi/msisuihandlers.h>
+#include <e32base.h>
+#include <e32std.h>
+
+namespace Swi
+{
+	class CAsyncLauncher;
+	class CInstallPrefs;
+}
+
+namespace Usif
+	{
+	
+	_LIT(KDeclineOperationOptionName, "SwiDeclineOperation");
+	// ECOM objects and CActive do not interact well - especially since SIFPlugin inherits from CBase
+	// and double C-inheritance is impossible. So, a separate class is used to drive the asynchronous interaction
+	// to the CAsyncLauncher
+	NONSHARABLE_CLASS(CRefNativePluginActiveImpl) : public CActive, public Swi::MUiHandler
+	{
+	public:
+		static CRefNativePluginActiveImpl* NewL();
+		~CRefNativePluginActiveImpl();
+
+		// CActive interface
+		void RunL();
+		void DoCancel();
+			
+		void Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+							const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+							TRequestStatus& aStatus);
+
+		void Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+							const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+							TRequestStatus& aStatus);
+							
+		void GetComponentInfo(const TDesC& aFileName, CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+
+		void GetComponentInfo(RFile& aFileHandle, CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+
+		void Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+							const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, 
+							TRequestStatus& aStatus);
+
+		void Activate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+							TRequestStatus& aStatus);
+
+		void Deactivate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+							TRequestStatus& aStatus);
+
+		// Swi::MUiHandler interface
+		TInt DisplayLanguageL(const Swi::CAppInfo& aAppInfo,const RArray<TLanguage>& aLanguages);
+		TInt DisplayDriveL(const Swi::CAppInfo& aAppInfo,TInt64 aSize, const RArray<TChar>& aDriveLetters,const RArray<TInt64>& aDriveSpaces);
+		TBool DisplayUninstallL(const Swi::CAppInfo& aAppInfo);
+		TBool DisplayTextL(const Swi::CAppInfo& aAppInfo,Swi::TFileTextOption aOption,const TDesC& aText);
+		TBool DisplayDependencyBreakL(const Swi::CAppInfo& aAppInfo, const RPointerArray<TDesC>& aComponents);
+		TBool DisplayApplicationsInUseL(const Swi::CAppInfo& aAppInfo, const RPointerArray<TDesC>& aAppNames);
+		TBool DisplayQuestionL(const Swi::CAppInfo& aAppInfo, Swi::TQuestionDialog aQuestion, const TDesC& aDes);
+		TBool DisplayInstallL(const Swi::CAppInfo& aAppInfo,const CApaMaskedBitmap* aLogo, const RPointerArray<Swi::CCertificateInfo>& aCertificates); 
+		TBool DisplayGrantCapabilitiesL(const Swi::CAppInfo& aAppInfo, const TCapabilitySet& aCapabilitySet);
+		TBool DisplayUpgradeL(const Swi::CAppInfo& aAppInfo, const Swi::CAppInfo& aExistingAppInfo);
+		TBool DisplayOptionsL(const Swi::CAppInfo& aAppInfo, const RPointerArray<TDesC>& aOptions,RArray<TBool>& aSelections);
+		TBool DisplaySecurityWarningL(const Swi::CAppInfo& aAppInfo, Swi::TSignatureValidationResult aSigValidationResult,
+									RPointerArray<CPKIXValidationResultBase>& aPkixResults, RPointerArray<Swi::CCertificateInfo>& aCertificates,TBool aInstallAnyway);
+		TBool DisplayOcspResultL(const Swi::CAppInfo& aAppInfo, Swi::TRevocationDialogMessage aMessage,RPointerArray<TOCSPOutcome>& aOutcomes, 
+									RPointerArray<Swi::CCertificateInfo>& aCertificates,TBool aWarningOnly);
+		TBool DisplayMissingDependencyL(const Swi::CAppInfo& aAppInfo, const TDesC& aDependencyName,TVersion aWantedVersionFrom,
+									TVersion aWantedVersionTo,TVersion aInstalledVersion);
+		TBool HandleInstallEventL(const Swi::CAppInfo& aAppInfo, Swi::TInstallEvent aEvent,TInt aValue = 0,const TDesC& aDes = KNullDesC);
+		void HandleCancellableInstallEventL(const Swi::CAppInfo& aAppInfo, Swi::TInstallCancellableEvent aEvent,Swi::MCancelHandler& aCancelHandler,
+									TInt aValue = 0,const TDesC& aDes=KNullDesC);
+		void DisplayCannotOverwriteFileL(const Swi::CAppInfo& aAppInfo, const Swi::CAppInfo& aInstalledAppInfo,const TDesC& aFileName);
+		void DisplayErrorL(const Swi::CAppInfo& aAppInfo,Swi::TErrorDialog aType,const TDesC& aParam);
+	private:
+		CRefNativePluginActiveImpl() : CActive(EPriorityStandard) {}
+		CRefNativePluginActiveImpl(const CRefNativePluginActiveImpl &);
+		CRefNativePluginActiveImpl & operator =(const CRefNativePluginActiveImpl &);
+		void ConstructL();
+		void CommonRequestPreamble(const TSecurityContext& aSecurityContext, const COpaqueNamedParams& aInputParams, 
+									COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus);
+		void UninstallL(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+						const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, 
+						TRequestStatus& aStatus);
+						
+		TComponentId GetLastInstalledComponentIdL();
+		TBool NeedUserCapabilityL();
+		void ProcessSilentInstallL();
+	private:
+		Swi::CAsyncLauncher* iAsyncLauncher;
+		Swi::CInstallPrefs* iInstallPrefs;
+		TRequestStatus* iClientStatus;
+		const COpaqueNamedParams* iInputParams;
+		COpaqueNamedParams* iOutputParams;
+		CComponentInfo* iComponentInfo;
+		TFileName iFileName;
+		RFile* iFileHandle; // FileHandle is not owned by the plug-in
+		TBool iDeclineOperation; // Used for plugin options - optionally specifies that the operation will not be confirmed at the first callback
+		TBool iInstallRequest; // Used to identify the type of the current requst in RunL() so we know if the id of an installed component should be sent
+		TBool iSilentInstall; // Used to identify a silent install
+		};
+
+
+	NONSHARABLE_CLASS(CRefNativePlugin) : public CSifPlugin
+		{
+	public:
+		static CRefNativePlugin* NewL();
+		~CRefNativePlugin();
+	
+		// MSIFPlugin interface
+		void GetComponentInfo(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+							  CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+
+		void GetComponentInfo(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+							  CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+		
+		void Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+							const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+							TRequestStatus& aStatus);
+
+		void Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+							const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+							TRequestStatus& aStatus);
+
+		virtual void Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+								TRequestStatus& aStatus);
+
+		virtual void Activate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								TRequestStatus& aStatus);
+
+		virtual void Deactivate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								TRequestStatus& aStatus);
+
+		void CancelOperation();
+	private:
+		CRefNativePlugin() {}
+		void ConstructL();
+		CRefNativePlugin(const CRefNativePlugin &);
+		CRefNativePlugin & operator =(const CRefNativePlugin &);
+	private:
+		CRefNativePluginActiveImpl *iImpl;
+		};
+	} // end namespace Usif
+
+#endif // REFNATIVEPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* @ Software Install Framework
+*
+*/
+
+
+/**
+ @file
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+// SIF includes
+../inc/sif.h												SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/sif/sif.h)
+../inc/sifcommon.h											SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/sif/sifcommon.h)
+../inc/sifplugin.h											SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/sif/sifplugin.h)
+../inc/sifutils.h											SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/sif/sifutils.h)
+../inc/siftransportclient.h									SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/sif/siftransportclient.h)
+../inc/siftransportserverstartup.h							SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/sif/siftransportserverstartup.h)
+../inc/siftransporttask.h									SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/sif/siftransporttask.h)
+../inc/sifnotification.h									SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/sif/sifnotification.h)
+
+// ROMKIT includes
+../inc/sif.iby												/epoc32/rom/include/sif.iby
+
+PRJ_TESTEXPORTS
+
+// TEF test scripts
+../test/tusif/scripts/tsifintegration.ini				z:/tusif/tsifintegration/tsifintegration.ini
+../test/tusif/scripts/tsifintegration.script				z:/tusif/tsifintegration/tsifintegration.script
+../test/tusif/scripts/tnotifier.ini					z:/tusif/tsif/tnotifier.ini
+../test/tusif/scripts/tnotifier.script					z:/tusif/tsif/tnotifier.script
+
+../test/scripts/tsif.ini									z:/tusif/tsif/tsif.ini
+../test/scripts/tsif.script									z:/tusif/tsif/tsif.script
+../test/scripts/tsifoom.script								z:/tusif/tsif/tsifoom.script
+
+../test/scripts/data/test.nonnativepackage.txt				z:/tusif/tsif/data/test.nonnativepackage.txt
+../test/scripts/data/test.overflow.txt						z:/tusif/tsif/data/test.overflow.txt
+../test/scripts/data/noninstallable.gif						z:/tusif/tsif/data/noninstallable.gif
+
+../test/securitytests/scripts/usifsecuritytests.script	z:/tusif/securitytests/usifsecuritytests.script
+../test/securitytests/scripts/usifsecuritytests.ini		z:/tusif/securitytests/usifsecuritytests.ini
+
+../test/tusif/scripts/tsifswtypeintegration.ini			z:/tusif/tswtype/tsifswtypeintegration.ini
+../test/tusif/scripts/tsifswtypeintegration.script		z:/tusif/tswtype/tsifswtypeintegration.script
+
+../test/tusif/scripts/tsif_appuidgen.script			z:/tusif/tsif/tsif_appuidgen.script
+../test/tusif/scripts/tsif_appuidgen.ini			z:/tusif/tsif/tsif_appuidgen.ini
+
+../test/tusif/scripts/data/test.siftestpkg			z:/tusif/tswtype/data/test.siftestpkg
+../test/tusif/scripts/data/swtypereginfo.xml			z:/tusif/tswtype/data/swtypereginfo.xml
+../test/tusif/scripts/data/Corrupt_reg.rsc			z:/tusif/tsif/data/corrupt_reg.rsc
+
+// ROMKIT includes
+../inc/tsif.iby							/epoc32/rom/include/tsif.iby
+
+PRJ_MMPFILES
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+// SIF API implementation
+../group/siftransport.mmp
+../group/sif.mmp
+../group/sifutils.mmp
+../group/sifserver.mmp
+../group/siflauncher.mmp
+../group/sifnotification.mmp
+
+#endif // TOOLS2
+#endif // TOOLS
+
+PRJ_TESTMMPFILES
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+// Test version of the SIF Launcher
+makefile ../test/group/cleansiflauncher.makefile
+../test/group/tsiflauncher.mmp
+// Test package file recognizer
+../test/tusif/group/tsifpkgrec.mmp
+// Reference SWI plugin for USIF
+../examples/refnativeplugin/group/refnativeplugin.mmp
+// Non-native test plug-in
+../test/plugins/nonnativeplugin/group/testnonnativeplugin.mmp
+../test/plugins/nonnativeplugin/group/testnonnativeplugin2.mmp
+// TEF suite for SIF
+../test/tusif/group/tsif.mmp
+// Test executables for SIF tests
+../test/tusif/group/sifintegrationtestbasepackage.mmp
+../test/tusif/group/sifintegrationtestupgradepackage.mmp
+../test/tusif/group/sifintegusercapsbasepackage.mmp
+../test/tusif/group/siftestintegrationlockfile.mmp
+../test/tusif/group/sifintegsufficientusercaps.mmp
+../test/tusif/group/sifgetcompapparcinfotest.mmp
+../test/tusif/group/sifgetcompapparcinfotestmultilang.mmp
+// Creation of SIS files for SIF tests
+makefile ../test/tusif/group/siftest.makefile
+
+// Security tests
+../test/securitytests/group/usifsecuritytests.mmp
+../test/securitytests/group/usifsecuritytests-tcb.mmp
+
+#endif // TOOLS2
+#endif // TOOLS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/group/security_softwareinstallframework.history.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="Software Install Framework">
+  <purpose>
+    Provides a uniform framework for managing software under Symbian OS.
+  </purpose>
+ 
+   <defect number="DEF136782" title="CBR errors related to sif in M04892 v9.6 build " revision="013">
+    CBR errors related to sif in M04892 v9.6 build  are fixed.
+  </defect>
+  
+    <deliverystep number="1140" name="PREQ1269: Crypto Services: Reference Native Installer provision" osproject="Diran" revision="012">
+    <milestone project="GT0433" number="MS3.3"/>
+    <preq number="1269" title="Universal Software Install Framework">
+      Delivers the set of features for the Preq1269 Phase III. Changes has been done for Reference Native Installer.
+    </preq>
+  </deliverystep>
+  
+  <defect number="DEF133526" title="KERN-EXEC 3 panic in sifserver.exe when changing the SCOMO state " revision="011">
+    Panic is resolved.
+  </defect>
+
+  <defect number="DEF132132" title="PREQ1269: SIFLauncher's configuration should be split into production and test" revision="010">
+    SIFLauncher's configuration has been splitted into production and test. 
+  </defect>
+
+   <defect number="DEF131621" title="tsif failures under CS2 " revision="009">
+	Changed SIS file generation in SIF tests to use permanent certificates.
+  </defect>
+
+   <defect number="DEF131412" title="checklocationofcertificateslog fails in ONB " revision="008">
+    Added deletion of temporary certificates added by createsis. 
+  </defect>
+
+  <defect number="DEF131880" title="RVCT3.1 error in security/usif/sif/inc/siftransporttask.h " revision="007">
+    Added IMPORT_C where required. 
+  </defect>
+
+  <defect number="DEF131875" title="SMPSAFE MMP file updates for SWI and USIF" revision="006">
+    updated MMP files for SWI and USIF components to declare them SMPSAFE 
+  </defect>
+
+  <defect number="DEF130796" title="PREQ1269: Can set the component size negative" revision="005"> 
+	 The API wasn't changed to Uint, as this would require the DB also to support unsigned values in the relevant column, and I couldn't see an option for doing it without disrupting the schema. 
+  </defect> 
+
+  <deliverystep number="1430" name="PREQ1269: Indication of executable code" osproject="Diran" revision="004">
+	  <milestone project="GT0433" number="3.15"/>
+	  <preq number="1269" title="Universal Software Install Framework">
+		  Incudes changes to enable the installer to indicate that the software component has an executable, before the installation takes place.
+	  </preq>
+  </deliverystep>
+
+  <deliverystep number="1117" name="PREQ1269: Crypto Services: Plugin management and highly desirable features
+ (Phase 2)" osproject="Diran" revision="003">
+	  <milestone project="GT0433" number="3.2"/>
+	  <preq number="1269" title="Universal Software Install Framework">
+		  1) Post-manufacture plugin management 2) Complex queries in the SCR
+			3) Additional smaller requirements and changes and 4) Improved security in the SCR
+	  </preq>
+  </deliverystep>
+
+  <defect number="DEF128672" title="PREQ1269: SIFSERVER.EXE crashing with panic KERN-EXEC 3" revision="002">
+	Parameter handling (filename, file handle, component id) in CSifServerTask::SelectAndLoadPluginL() for different types of task (install, uninstall, get component info, activate, deactivate) has been fixed.
+  </defect>
+
+  <deliverystep number="1116" name="PREQ1269: Security and Data Privacy: Universal Software Install Framework (Phase 1)" osproject="Diran" revision="001">
+	  <milestone project="GT0433" number="3.1"/>
+	  <preq number="1269" title="Universal Software Install Framework">
+		   Delivers the main set of features for the Diran Early Phase. Includes the new components (SCR, SIF and STS), migration of the native installer to use the new components and most reference code.
+			Excludes non-mandatory features and post-production plugin management.
+	  </preq>
+  </deliverystep>
+
+</relnotes>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/group/security_softwareinstallframework.mrp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+component	security_softwareinstallframework
+source	\sf\mw\appinstall\installationservices\swinstallationfw
+source	\sf\mw\appinstall\installationservices\swinstallationfw\test
+source  \sf\mw\appinstall\installationservices\swinstallationfw\examples\refnativeplugin
+binary	\sf\mw\appinstall\installationservices\swinstallationfw\group	all
+exports	\sf\mw\appinstall\installationservices\swinstallationfw\group
+notes_source	\component_defs\release.src
+
+ipr E 
+ipr T \sf\mw\appinstall\installationservices\swinstallationfw\test
+ipr T \sf\mw\appinstall\installationservices\swinstallationfw\examples\refnativeplugin
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/group/sif.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* SIF API
+* SIF API implementation
+*
+*/
+
+
+/**
+ @file
+*/
+
+TARGET sif.dll
+TARGETTYPE dll
+
+UID 0x1000008D 0x10285BC7
+
+CAPABILITY All -Tcb
+
+SOURCEPATH ../source
+SOURCE sif.cpp sifcommon.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../inc_private
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY euser.lib efsrv.lib estor.lib
+LIBRARY siftransport.lib
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/group/siflauncher.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET				siflauncher.exe
+TARGETTYPE			exe
+TARGETPATH			/sys/bin
+
+// We need WriteDeviceData so that the installer data types can have priority EDataTypePrioritySystem
+CAPABILITY			TrustedUI WriteDeviceData
+
+VENDORID			0x70000001
+
+UID					0x0 0x10285BD0
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE			../inc
+USERINCLUDE			../common/inc
+
+SOURCEPATH			../source
+SOURCE				siflauncher.cpp
+
+SOURCEPATH			../../swiconfig/usif/siflauncher
+
+START RESOURCE		siflauncher_reg.rss
+TARGETPATH			/private/10003a3f/apps
+END
+
+start resource		siflauncher_loc.rss
+targetpath			/resource/apps
+lang				sc
+end
+
+// Bitmaps
+START BITMAP		siflauncher.mbm
+SOURCEPATH			../../swiconfig/usif/siflauncher
+TARGETPATH			/resource/apps
+HEADER
+SOURCE				c8,1 INST24.bmp INST24M.BMP INST32.BMP INST32M.BMP INST48.BMP INST48M.BMP
+END
+
+LIBRARY				euser.lib efsrv.lib
+LIBRARY				apgrfx.lib apparc.lib apmime.lib
+LIBRARY				sif.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/group/sifnotification.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* SIF Notifier Library
+*
+*/
+
+
+/**
+ @file
+*/
+
+TARGET sifnotification.dll
+TARGETTYPE dll
+
+UID 0x1000008D 0x10286357
+
+CAPABILITY All -Tcb
+
+SOURCEPATH ../source
+SOURCE sifnotification.cpp
+SOURCE sifnotifierdata.cpp
+
+USERINCLUDE ../inc_private
+USERINCLUDE ../../swcomponentregistry/inc_private
+USERINCLUDE	../common/inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY euser.lib efsrv.lib estor.lib ipcstream.lib
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/group/sifserver.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET				sifserver.exe        
+TARGETTYPE			exe
+
+EPOCSTACKSIZE   		0x4000
+
+CAPABILITY			ProtServ TrustedUI ReadUserData WriteDeviceData
+
+VENDORID			0x70000001
+
+UID					0x0 0x10285BCB
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE			../inc
+USERINCLUDE			../common/inc
+USERINCLUDE			../inc_private
+
+SOURCEPATH			../source
+SOURCE				sifserverstartup.cpp sifservertask.cpp
+
+LIBRARY				estor.lib efsrv.lib euser.lib ecom.lib apgrfx.lib apmime.lib
+LIBRARY				siftransport.lib scrclient.lib sifutils.lib
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/group/siftransport.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* SIF API
+* SIF transport client implementation
+*
+*/
+
+
+/**
+ @file
+*/
+
+TARGET siftransport.dll
+TARGETTYPE dll
+
+UID 0x1000008D 0x10286353
+
+CAPABILITY All -Tcb
+
+SOURCEPATH ../source
+SOURCE siftransportclient.cpp sifcommon.cpp
+SOURCE siftransportserver.cpp siftransportsession.cpp siftransportrequest.cpp siftransporttask.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../common/inc
+USERINCLUDE ../inc_private
+USERINCLUDE ../../swcomponentregistry/inc_private
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY euser.lib efsrv.lib estor.lib scsclient.lib scsserver.lib ipcstream.lib sifnotification.lib
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/group/sifutils.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* SIF Utils Library
+* SIF Utils Library implementation
+*
+*/
+
+
+/**
+ @file
+*/
+
+TARGET sifutils.dll
+TARGETTYPE dll
+
+UID 0x1000008D 0x10286355
+
+CAPABILITY All -Tcb
+
+SOURCEPATH ../source
+SOURCE sifutils.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../../swcomponentregistry/inc_private
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY euser.lib efsrv.lib estor.lib
+LIBRARY scrclient.lib stsclient.lib
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/sif.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,275 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines the SIF API.
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef SIF_H
+#define SIF_H
+
+#include <usif/sif/siftransportclient.h>
+
+namespace Usif
+	{
+	/**
+		The RSoftwareInstall class provides an asynchronous interface to the Software
+		Install Framework. This class wraps all the details of client-server communication
+		with the SIF server residing in a separate process. This API is asynchronous and
+		therefore clients may issue concurrect requests. However, the SIF constrains
+		concurrent operations by default. A client issuing an Install or Uninstall request
+		may set the aExclusiveOperation flag to EFalse in order to allow for concurrent
+		execution of his request. However, even if this flag is set to EFalse, a request
+		may fail with KErrServerBusy if a corresponding underlying installer doesn't
+		support concurrent operations.
+
+		This class is intended to be used by SIF client applications, for example, application
+		or device managers.
+
+		Software @see TComponentId needed for the Uninstall/Activate/Deactivate APIs is a unique
+		identifier of an installed component regardless of its type across the system.  When installing
+		a package containing other embedded packages each embedded component gets its own @see
+		TComponentId in the descending order. For example, we have a package P1 that contains an
+		embedded package P2 that contains yet another embedded package P3.
+		After installation the components may be identified by the following Ids:
+		- Id of Component 1 (Package 1): 6 (example value)
+		- Id of Component 2 (Package 2): 7
+		- Id of Component 3 (Package 3): 8
+		Component 3 with Id = 8 is the last installed/most embedded component and therefore its id
+		is the highest.
+
+		All the SIF operations may require special capabilities in order to complete successfully.
+		This check may be implemented in a SIF plug-in. For example, a silent installation may require
+		the TrustedUI capability. However, this is expected behavour that standard operations
+		don't require any capabilities. Please see @see Usif::CSifPlugin description for further details
+		if there are any deviations from this rule.
+	 */
+
+	class RSoftwareInstall
+		{
+	public:
+		IMPORT_C RSoftwareInstall();
+
+		/**
+		   Connects a client to the SIF server.
+		 
+		@return	Symbian OS error code where KErrNone indicates
+				success and any other value indicates failure.
+		*/
+		IMPORT_C TInt Connect();
+
+		/**
+		   Disconnects a client from the SIF server.
+		*/
+		IMPORT_C void Close();
+
+		/**
+		Returns the details of a component to be installed by file name
+		 
+		@param aFileName The file name of a component to be queried
+		@param aComponentInfo On return, contains the details of a component
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		IMPORT_C void GetComponentInfo(const TDesC& aFileName, CComponentInfo& aComponentInfo,
+										TRequestStatus& aStatus);
+
+		/**
+		 * Returns the details of a component to be installed by file handle
+		 
+		@param aFileHandle The file handle of a component to be queried
+		@param aComponentInfo On return, contains the details of a component
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		IMPORT_C void GetComponentInfo(RFile& aFileHandle, CComponentInfo& aComponentInfo,
+										TRequestStatus& aStatus);
+
+		/**
+		Installs a component by file name
+		
+		@param aFileName The file name of a component to be installed
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation If this flag is set to ETrue, the Install
+		operation is executed in the Exclusive mode. In this mode the SIF
+		Server executes only one operation at a time. If there is another
+		operation in progress the SIF Server returns KErrServerBusy.
+		If this flag is set to EFalse, the SIF Server executes the operation
+		even if there is a concurrent operation in progress. The default value
+		is ETrue.
+		*/
+		IMPORT_C void Install(const TDesC& aFileName, TRequestStatus& aStatus,
+							TBool aExclusiveOperation = ETrue);
+
+		/**
+		Installs a component by file name using opaque arguments/results
+		
+		@param aFileName The file name of a component to be installed
+		@param aArguments The array of opaque params for a SIF plug-in. An empty
+		array may be passed.  The following param is defined for the "SCOMO Install
+		Inactive" operation:
+		Name: InstallInactive, Type: Int, Value: ETrue
+		@param aResults The array of opaque params returned from a SIF plug-in.
+		The following return param is defined for the id of an installed component:
+		Name: ComponentId, Type: Int
+		For packages containing embedded components, the returned param contains
+		the id of the last/most embedded component.
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation If this flag is set to ETrue, the Install
+		operation is executed in the Exclusive mode. In this mode the SIF
+		Server executes only one operation at a time. If there is another
+		operation in progress the SIF Server returns KErrServerBusy.
+		If this flag is set to EFalse, the SIF Server executes the operation
+		even if there is a concurrent operation in progress. The default value
+		is ETrue.
+		*/
+		IMPORT_C void Install(const TDesC& aFileName, const COpaqueNamedParams& aArguments,
+								COpaqueNamedParams& aResults, TRequestStatus& aStatus,
+								TBool aExclusiveOperation = ETrue);
+
+		/**
+		Installs a component by file handle
+		
+		@param aFileHandle The file handle of a component to be installed
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation If this flag is set to ETrue, the Install
+		operation is executed in the Exclusive mode. In this mode the SIF
+		Server executes only one operation at a time. If there is another
+		operation in progress the SIF Server returns KErrServerBusy.
+		If this flag is set to EFalse, the SIF Server executes the operation
+		even if there is a concurrent operation in progress. The default value
+		is ETrue.
+		*/
+		IMPORT_C void Install(RFile& aFileHandle, TRequestStatus& aStatus,
+								TBool aExclusiveOperation = ETrue);
+
+		/**
+		Installs a component by file handle using opaque arguments/results
+		
+		@param aFileHandle The file handle of a component to be installed
+		@param aArguments The array of opaque params for a SIF plug-in. An empty
+		array may be passed.  The following param is defined for the "SCOMO Install
+		Inactive" operation:
+		Name: InstallInactive, Type: Int, Value: ETrue
+		@param aResults The array of opaque params returned from a SIF plug-in.
+		The following return param is defined for the id of an installed component:
+		Name: ComponentId, Type: Int
+		For packages containing embedded components, the returned param contains
+		the id of the last/most embedded component.
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation If this flag is set to ETrue, the Install
+		operation is executed in the Exclusive mode. In this mode the SIF
+		Server executes only one operation at a time. If there is another
+		operation in progress the SIF Server returns KErrServerBusy.
+		If this flag is set to EFalse, the SIF Server executes the operation
+		even if there is a concurrent operation in progress. The default value
+		is ETrue.
+		*/
+		IMPORT_C void Install(RFile& aFileHandle, const COpaqueNamedParams& aArguments,
+								COpaqueNamedParams& aResults, TRequestStatus& aStatus,
+								TBool aExclusiveOperation = ETrue);
+
+		/**
+		Uninstalls a component
+		
+		@param aComponentId The id of a component to be uninstalled
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation If this flag is set to ETrue, the Uninstall
+		operation is executed in the Exclusive mode. In this mode the SIF
+		Server executes only one operation at a time. If there is another
+		operation in progress the SIF Server returns KErrServerBusy.
+		If this flag is set to EFalse, the SIF Server executes the operation
+		even if there is a concurrent operation in progress. The default value
+		is ETrue.
+		*/
+		IMPORT_C void Uninstall(TComponentId aComponentId, TRequestStatus& aStatus,
+								TBool aExclusiveOperation = ETrue);
+
+		/**
+		Uninstalls a component
+		
+		@param aComponentId The id of a component to be uninstalled
+		@param aArguments The array of opaque params for a SIF plug-in. An empty
+		array may be passed.
+		@param aResults The array of opaque results returned from a SIF plug-in.
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation If this flag is set to ETrue, the Uninstall
+		operation is executed in the Exclusive mode. In this mode the SIF
+		Server executes only one operation at a time. If there is another
+		operation in progress the SIF Server returns KErrServerBusy.
+		If this flag is set to EFalse, the SIF Server executes the operation
+		even if there is a concurrent operation in progress. The default value
+		is ETrue.
+		*/
+		IMPORT_C void Uninstall(TComponentId aComponentId, const COpaqueNamedParams& aArguments,
+								COpaqueNamedParams& aResults, TRequestStatus& aStatus,
+								TBool aExclusiveOperation = ETrue);
+
+		/**
+		Activates a component.
+
+  		The SCOMO state of a component can be changed at any time through the SIF API. However, capability
+		checking may apply depending on the particular installer. For example, a Python installer may require the 
+		ECapabilityWriteUserData capability to activate or deactivate a Python component.
+		
+		@param aComponentId The id of a component to be activated
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		IMPORT_C void Activate(TComponentId aComponentId, TRequestStatus& aStatus);
+
+		/**
+		Deactivates a component.
+
+  		The SCOMO state of a component can be changed at any time through the SIF API. However, capability
+		checking may apply depending on the particular installer. For example, a Python installer may require the 
+		ECapabilityWriteUserData capability to activate or deactivate a Python component.
+		
+		@param aComponentId The id of a component to be deactivated
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		IMPORT_C void Deactivate(TComponentId aComponentId, TRequestStatus& aStatus);
+
+		/**
+		Cancels an ongoing asynchronous request
+		
+		This is a synchronous call. When it returns the original asynchronous call is completed.
+		*/
+		IMPORT_C void CancelOperation();
+	
+#ifdef _DEBUG
+		friend class CSifOperationStep;
+#endif //_DEBUG
+
+	private:
+		RSifTransportClient iTransport;
+		};
+
+	} // namespace Usif
+
+#endif // SIF_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/sif.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef SIF_IBY
+#define SIF_IBY
+
+define ZDRIVE EPOCROOT##epoc32\data\Z
+
+#include "siflauncherconfig.iby"
+
+REM Software Install Framework
+
+file=ABI_DIR\BUILD_DIR\sif.dll				\sys\bin\sif.dll
+file=ABI_DIR\BUILD_DIR\sifutils.dll			\sys\bin\sifutils.dll
+file=ABI_DIR\BUILD_DIR\siftransport.dll		\sys\bin\siftransport.dll
+file=ABI_DIR\BUILD_DIR\sifnotification.dll	\sys\bin\sifnotification.dll
+file=ABI_DIR\BUILD_DIR\sifserver.exe		\sys\bin\sifserver.exe
+file=ABI_DIR\BUILD_DIR\siflauncher.exe		\sys\bin\siflauncher.exe
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/sifcommon.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,774 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines common types for the SIF APIs.
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef SIFCOMMON_H
+#define SIFCOMMON_H
+
+#include <ct/rcpointerarray.h>
+#include <s32strm.h>
+#include <usif/usifcommon.h>
+
+namespace Usif
+    {
+    class MOpaqueParam;
+
+    /**
+        This enumeration defines the possible values of the status of an installation package. This status
+        can be obtained from a @see CComponentInfo object using the @see CComponentInfo::InstallStatusL()
+        method.
+     */
+    enum TInstallStatus
+        {
+        ENewComponent,                  ///< New installation; the component is not present in the system
+        EUpgrade,                       ///< This is a valid upgrade of an existing component
+        EAlreadyInstalled,              ///< Component with the same version is already installed
+        ENewerVersionAlreadyInstalled,  ///< A newer version of the component is already installed
+        EInvalid                        ///< Package is not valid and cannot be installed, for example,
+                                        ///< it may be an upgrade of an uninstalled component or the
+                                        ///< package may be corrupt
+        };
+
+    /**
+        This enumeration defines the possible values of the authenticity of an installation package. This authenticity
+        can be obtained from a @see CComponentInfo object using the @see CComponentInfo::Authenticity()
+        method.
+     */
+    enum TAuthenticity
+        {
+        ENotAuthenticated,          ///< Component could not be authenticated by the installer, e.g. unsigned or self-signed
+        EAuthenticated,             ///< Component is authenticated
+        };
+
+    /**
+        The TSecurityContext class allows SIF plug-ins to verify the capabilities and secure Ids of SIF clients.
+        For example, when a SIF client requests silent installation a SIF plug-in may verify that that the client
+        has the TrustedUI capability.
+     */
+    class TSecurityContext
+        {
+    public:
+        /**
+            Checks if the SIF client has a given capability.
+
+            @param aCapability The capability to test.
+            @return ETrue if the SIF client has the capability, EFalse otherwise.
+        */
+        IMPORT_C TBool HasCapability(TCapability aCapability) const;
+
+        /**
+            Checks if the SIF client has a given capability.
+
+            @param aCapability The capability to test.
+            @leave KErrPermissionDenied If the SIF client does not have the capability.
+        */
+        IMPORT_C void HasCapabilityL(TCapability aCapability) const;
+
+        /**
+            Returns the secure Id of a SIF client.
+        */
+        IMPORT_C TSecureId SecureId() const;
+
+    private:
+        friend class CSifTransportRequest;
+        IMPORT_C TSecurityContext(const RMessage2& aMessage);
+
+        const RMessagePtr2 iMsg;
+        };
+
+    /**
+        This class provides information about a software package. Returned by RSoftwareInstall::GetComponentInfo()."
+     */
+    class CComponentInfo : public CBase
+        {
+    public:
+
+        class CApplicationInfo : public CBase
+            {
+        public:
+            IMPORT_C static CApplicationInfo* NewLC(const TUid& aAppUid, const TDesC& aName, const TDesC& aGroupName, const TDesC& aIconFileName);
+            static CApplicationInfo* NewL(RReadStream& aStream);
+            void ExternalizeL(RWriteStream& aStream) const;
+                        
+            IMPORT_C const TUid& AppUid() const;
+            IMPORT_C const TDesC& Name() const;
+            IMPORT_C const TDesC& GroupName() const;
+            IMPORT_C const TDesC& IconFileName() const;                       
+            IMPORT_C virtual ~CApplicationInfo();
+                        
+        private:                  
+            CApplicationInfo();           
+            
+            TUid iAppUid; // Application UID
+            HBufC* iName; // Name of the application
+            HBufC* iGroupName; // Group folder name where the application will be present
+            HBufC* iIconFileName; // Full path of the icon file
+            };
+               
+        class CNode : public CBase
+            {
+        public:
+            /**
+                Initializes the object with the details of a component.
+
+                @param aSoftwareTypeName The name of the software type of a component.
+                @param aComponentName The name of a component.
+                @param aVersion The version of a component.
+                @param aVendor The name of a component vendor.
+                @param aScomoState The SCOMO state of a component.
+                @param TInstallStatus The installation status of a component.
+                @param aComponentId The Id of a component.
+                @param aGlobalComponentId The global Id of a component.
+                @param aAuthenticity The authenticity of a component.
+                @param aUserGrantableCaps User grantable capabilities of a component.
+                @param aHasExe Whether component has an executable.
+                @param aIsDriveSelectionRequired Whether drive selection is required or not.
+                @param aApplications Information of the applications in the package.
+                @param aChildren Child nodes describing embedded components of a component. This method
+                        passes the ownership of the child nodes to this new node and empties the aChildren array.
+                However, if the leave occurs the caller must delete the child nodes in the array.
+                @leave KErrOverflow it the total length of aName, aVersion and aVendor exceeds 512 characters.
+                @leave Or other system wide error code
+            */
+            IMPORT_C static CNode* NewLC(const TDesC& aSoftwareTypeName, const TDesC& aComponentName,
+                                const TDesC& aVersion, const TDesC& aVendor, TScomoState aScomoState,
+                                TInstallStatus aInstallStatus, TComponentId aComponentId,
+                                const TDesC& aGlobalComponentId, TAuthenticity aAuthenticity,
+                                const TCapabilitySet& aUserGrantableCaps, TInt aMaxInstalledSize,
+                                TBool aHasExe, TBool aIsDriveSelectionRequired, 
+                                RPointerArray<CApplicationInfo>* aApplications = NULL, 
+                                RPointerArray<CNode>* aChildren = NULL);
+
+            /**
+                Adds a child node to this node. This method passes the ownership of the child node
+                to this node so the caller must pop it from the cleanup stack but not delete.
+
+                @return The pointer to the child node to be added.
+                @leave System wide error code
+            */
+            IMPORT_C void AddChildL(CNode* aChild);
+
+            /**
+                Returns the name of software type of a component.
+
+                @return The name of the software type of a component.
+                @leave System wide error code
+            */
+            IMPORT_C const TDesC& SoftwareTypeName() const;
+
+            /**
+                Returns the name of a component.
+
+                @return The name of a component.
+                @leave System wide error code
+            */
+            IMPORT_C const TDesC& ComponentName() const;
+
+            /**
+                Returns the version of a component.
+
+                @return The version of a component.
+                @leave System wide error code
+            */
+            IMPORT_C const TDesC& Version() const;
+
+            /**
+                Returns the name of the component vendor.
+
+                @return The name of the component vendor.
+                @leave System wide error code
+            */
+            IMPORT_C const TDesC& Vendor() const;
+
+            /**
+                Returns the SCOMO state of a component. This has meaning only if the installStatus of the component
+                is not EInvalid or ENewComponent.
+
+                @return The SCOMO state of a component.
+                @leave System wide error code
+            */
+            IMPORT_C TScomoState ScomoState() const;
+
+            /**
+                Returns the installation status of a component.
+
+                @return The installation status of a component.
+                @leave System wide error code
+            */
+            IMPORT_C TInstallStatus InstallStatus() const;
+
+            /**
+                Returns the Id of a component.
+
+                @return The Id of a component.
+                @leave System wide error code
+            */
+            IMPORT_C TComponentId ComponentId() const;
+
+            /**
+                Returns the global Id of a component.
+
+                @return The global Id of a component.
+                @leave System wide error code
+            */
+            IMPORT_C const TDesC& GlobalComponentId() const;
+
+            /**
+                Returns the authenticity of a component.
+
+                @return The authenticity of a component.
+                @leave System wide error code
+            */
+            IMPORT_C TAuthenticity Authenticity() const;
+
+            /**
+                Returns user capabilities required by a component.
+
+                @return The user grantable capabilities.
+                @leave System wide error code
+            */
+            IMPORT_C const TCapabilitySet& UserGrantableCaps() const;
+
+            /**
+                Returns the maximum size of a component after installation.
+
+                @return The maximum size of a component.
+                @leave System wide error code
+            */
+            IMPORT_C TInt MaxInstalledSize() const;
+
+            /**
+                Returns the array of CComponentInfo objects for the components embedded
+                in the component being queried.
+
+                @return The array of the embedded CComponentInfo objects.
+                @leave System wide error code
+            */
+            IMPORT_C const RPointerArray<CNode>& Children() const;
+
+            /**
+                Destructor.
+            */
+            IMPORT_C virtual ~CNode();
+            /**
+                Returns the HasExecutable Flag which indicates whether the
+                component has an executable.
+
+                @return The HasExecutable TBool Flag .
+            */
+            IMPORT_C TBool HasExecutable() const;
+            
+            /**
+            Returns the IsDriveSelectionRequired Flag which indicates whether the
+            drive selection is required or not.
+
+            @return The IsDriveSelectionRequired TBool Flag .
+            */
+            IMPORT_C TBool DriveSeletionRequired() const;
+            
+            /**
+            Returns the applications in the component being queried.
+
+            @return The array of the CApplicationInfo objects.
+            @leave System wide error code
+            */
+            IMPORT_C const RPointerArray<CApplicationInfo>& Applications() const;
+
+        private:
+            friend class CComponentInfo;
+
+            CNode();
+            CNode& operator=(const CNode& other);
+            CNode(const CNode& other);
+
+            static CNode* NewL(RReadStream& aStream);
+            void ExternalizeL(RWriteStream& aStream) const;
+
+            HBufC* iSoftwareTypeName;                           ///< The name of software type of the component
+            HBufC* iComponentName;                              ///< The name of the software component
+            HBufC* iVersion;                                    ///< The Version of the software component 
+            HBufC* iVendor;                                     ///< The of the vendor of the software component
+            HBufC* iGlobalComponentId;                          ///< The global id of the component if already installed
+            TScomoState iScomoState;                            ///< The SCOMO status of the component
+            TInstallStatus iInstallStatus;                      ///< Informs whether the component is already installed or upgradeable
+            TComponentId iComponentId;                          ///< The unique id of the component if already installed
+            TAuthenticity iAuthenticity;                        ///< The authenticity of the component
+            TCapabilitySet iUserGrantableCaps;                  ///< User grantable capabilities required be the component
+            TInt iMaxInstalledSize;                             ///< The maximum size of the component after installation
+            TBool iHasExe;                                      ///< Indicates Whether the component has an executable
+            TBool iIsDriveSelectionRequired;                    ///< Indicates Whether drive selection is required or not.
+            RCPointerArray<CApplicationInfo> iApplications;     ///< The array of application info of the component being queried
+            RCPointerArray<CNode> iChildren;                    ///< The array of components embedded in the component being queried            
+            };
+
+    public:
+
+        /**
+            Creates a new instance of the CComponentInfo class.
+
+            @leave System wide error code
+         */
+        IMPORT_C static CComponentInfo* NewL();
+
+        /**
+            Creates a new instance of the CComponentInfo class.
+
+            @leave System wide error code
+         */
+        IMPORT_C static CComponentInfo* NewLC();
+
+        /**
+            Returns the root node of this CComponentInfo object.
+
+            @return The root node of this CComponentInfo object.
+            @leave System wide error code
+         */
+        IMPORT_C const CNode& RootNodeL() const;
+
+        /**
+            Sets a node as the root node of this component info. This method passes the
+            ownership of the root node to this object so the caller must pop it from the
+            cleanup stack but not delete.
+            
+            @return The pointer to the root node to be set.
+            @leave System wide error code
+         */
+        IMPORT_C void SetRootNodeL(CNode* aRootNode);
+
+        /**
+            Returns the pointer to the root node of this object. The caller takes the ownership
+            of this node and must delete it when no longer needed. After this call the CComponentInfo
+            object doesn't contain a root node. Hence, calling RootNodeL() results in the leave with
+             KErrNotFound.
+            
+            @return The pointer to the root node.
+            @leave System wide error code
+         */
+        IMPORT_C void SetRootNodeAsChildL(CNode& aParentNode);
+
+        /**
+            Externalises an object of this class to a write stream.
+
+            @param aStream Stream to which the object should be externalised.
+            @leave System wide error code
+         */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+
+        /**
+            Allocates a buffer for serialized CComponentInfo and registers it in the @see TIpcArgs class.
+            The SIF server serializes a @see CComponentInfo object into this buffer.
+
+            @param aIpcArgs Arguments to be sent to the SIF Server.
+            @param aIndex An index value that identifies the slot in the array of arguments into which
+            the argument value is to be placed. This must be a value in the range 0 to 3.
+            @leave System wide error code
+        */
+        IMPORT_C void PrepareForIpcL(TIpcArgs& aIpcArgs, TInt aIndex);
+
+        /**
+            Destructor.
+        */
+        IMPORT_C virtual ~CComponentInfo();
+
+    private:
+        CComponentInfo();
+        CComponentInfo& operator=(const CComponentInfo& other);
+        CComponentInfo(const CComponentInfo& other);
+
+        void InternalizeFromExternalBufferL() const;
+        void ConstInternalizeL(RReadStream& aStream) const;
+        void CleanupExternalBuffer() const;
+
+        CNode* iRootNode;
+
+        mutable HBufC8* iExternalBuffer;
+        mutable TPtr8 iExternalBufferPtr;
+        mutable TBool iDeferredInternalization;
+
+        enum
+            {
+            // An arbitrary limit for the length of a single descriptor, for example aComponentName, aVersion or aVendor.
+            KMaxDescriptorLength = 256,
+            // An arbitrary limit for the total length of iSoftwareTypeName, iComponentName, iVersion, iVendor and iGlobalComponentId.
+            KMaxHeapBufLength = 2048,
+            // An arbitrary size of the internal buffer for sending the component info across the process boundary
+            KMaxComponentInfoStreamedSize = 2*KMaxHeapBufLength+6*sizeof(TInt)+sizeof(TInt8),
+            };
+        };
+
+
+    /**
+        The COpaqueNamedParams class is a container for integer and string values identified by name.
+
+        This class is designed for sending opaque params across the process boundary. For example, a SIF
+        client may use it to send custom arguments to the SIF server or receive custom results.
+    */
+    NONSHARABLE_CLASS(COpaqueNamedParams) : public CBase
+        {
+    public:
+        /**
+            Creates a new instance of the COpaqueNamedParams class.
+
+            @leave System wide error code
+         */
+        IMPORT_C static COpaqueNamedParams* NewL();
+
+        /**
+            Creates a new instance of the COpaqueNamedParams class.
+
+            @leave System wide error code
+         */
+        IMPORT_C static COpaqueNamedParams* NewLC();
+
+        /**
+            Externalises an object of this class to a write stream.
+
+            @param aStream Stream to which the object should be externalised.
+            @leave System wide error code
+         */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+
+        /**
+            Internalises an object of this class from a read stream.
+
+            @param aStream Stream from which the object should be internalised.
+            @leave System wide error code
+         */
+        IMPORT_C void InternalizeL(RReadStream& aStream);
+
+        /**
+            Allocates a buffer and serializes the params of this object into it. The buffer is registered
+            in the @see TIpcArgs class in order to be sent to the SIF Server.
+
+            @param aIpcArgs Ipc arguments to be sent to the SIF Server.
+            @param aIndex An index value that identifies the slot in the array of arguments into which
+            the argument value is to be placed. This must be a value in the range 0 to 3.
+            @leave System wide error code
+        */
+        IMPORT_C void PrepareArgumentsForIpcL(TIpcArgs& aIpcArgs, TInt aIndex) const;
+
+        /**
+            Allocates a buffer for serialized opaque results and registers it in the TIpcArgs class.
+            The SIF server serializes opaque results into this buffer.
+
+            @param aIpcArgs Arguments to be sent to the SIF Server.
+            @param aIndex An index value that identifies the slot in the array of arguments into which
+            the argument value is to be placed. This must be a value in the range 0 to 3.
+            @leave System wide error code
+        */
+        IMPORT_C void PrepareResultsForIpcL(TIpcArgs& aIpcArgs, TInt aIndex);
+
+        /**
+            Returns the number of the opaque params added to this object.
+            @leave System wide error code
+        */
+        IMPORT_C TInt CountL() const;
+
+        /**
+            Adds a string param to this object. If a param with the same name already exists it gets overwritten.
+
+            @param aName The name of the string param to be added.
+            @param aValue The value of the string param to be added.
+            @leave KErrOverflow if the size of the name or value of the string param being added exceeds 128 bytes or
+            the memory allocated for all the params added to this container exceeds 512 bytes.
+            @leave System wide error code
+        */
+        IMPORT_C void AddStringL(const TDesC& aName, const TDesC& aValue);
+        
+        /**
+            Adds a string array param to this object. If a param with the same name already exists it gets overwritten.
+
+            @param aName The name of the string param to be added.
+            @param aValueArray The array of value string params to be added.
+            @leave KErrOverflow if the size of the name or any value in the string array being added exceeds 128 bytes or
+            the memory allocated for all the params added to this container exceeds 512 bytes.
+            @leave System wide error code.
+        */
+        IMPORT_C void AddStringArrayL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray);        
+
+        /**
+            Adds an integer param to this object. If a param with the same name already exists it gets overwritten.
+
+            @param aName The name of the integer param to be added.
+            @param aValue The value of the integer param to be added.
+            @leave KErrOverflow if the size of the name being added exceeds 128 bytes or
+            the memory allocated for all the params added to this container exceeds 512 bytes.
+            @leave System wide error code
+        */
+        IMPORT_C void AddIntL(const TDesC& aName, TInt aValue);
+        
+        /**
+            Adds an integer array param to this object. If a param with the same name already exists it gets overwritten.
+
+            @param aName The name of the integer param to be added.
+            @param aValueArray The array of value integer params to be added.
+            @leave KErrOverflow if the size of the name being added exceeds 128 bytes or
+            the memory allocated for all the params added to this container exceeds 512 bytes.
+            @leave System wide error code.
+        */
+        IMPORT_C void AddIntArrayL(const TDesC& aName, const RArray<TInt>& aValueArray);
+        
+
+        /**
+            Returns the list of the names of params added to the object.
+
+            @param aNames The list of the names of params. The caller is responsible for the instantiation
+            and cleanup of RPointerArray<HBufC>. The caller must also destroy all the elements of aNames added
+            by this method.
+            @leave System wide error code
+        */
+        IMPORT_C void GetNamesL(RPointerArray<HBufC>& aNames) const; 
+
+        /**
+            Gets a reference to the string param identified by aName.
+
+            @param aName The name of the string param to be obtained.
+            @return The value of the string param or KNullDesC if not found.
+            @leave System wide error code
+        */
+        IMPORT_C const TDesC& StringByNameL(const TDesC& aName) const;
+        
+        /**
+            Gets a reference to the string array param identified by aName.
+
+            @param aName The name of the string param to be obtained.
+            @return The string array param.
+            @leave KErrNotFound if aName is not found.
+			@leave System wide error code.
+        */
+        IMPORT_C const RPointerArray<HBufC>& StringArrayByNameL(const TDesC& aName) const;        
+
+        /**
+            Returns the integer param identified by aName.
+
+            @param aName The name of the integer param to be obtained.
+            @param aValue The value of the integer param returned by this method.
+            @return Indicates if the requested param has been found.
+            @leave System wide error code
+        */
+        IMPORT_C TBool GetIntByNameL(const TDesC& aName, TInt& aValue) const;
+
+        /**
+            Returns the integer param identified by aName.
+
+            @param aName The name of the integer param to be obtained.
+            @return The value of the integer param.
+            @leave KErrNotFound if not found
+            @leave Or other system-wide error code.
+        */
+        IMPORT_C TInt IntByNameL(const TDesC& aName) const;
+        
+        /**
+            Returns the integer array param identified by aName.
+
+            @param aName The name of the integer param to be obtained.
+            @return The integer array param.
+            @leave KErrNotFound if aName is not found.
+            @leave Or other system-wide error code.
+        */
+        IMPORT_C const RArray<TInt>& IntArrayByNameL(const TDesC& aName) const;        
+
+        /**
+            Empties the container and frees all memory allocated to the params.
+        */
+        IMPORT_C void Cleanup();
+
+        /**
+            Destructor.
+        */
+        IMPORT_C virtual ~COpaqueNamedParams();
+
+    private:
+        COpaqueNamedParams();
+        COpaqueNamedParams& operator=(const COpaqueNamedParams& other);
+        COpaqueNamedParams(const COpaqueNamedParams& other);
+        
+        void InternalizeFromExternalBufferL() const;
+        void ConstInternalizeL(RReadStream& aStream) const;
+        void ConstCleanup() const;
+        void CleanupExternalBuffer() const;
+        void VerifyExternalizedSizeForNewParamArrayL(TInt aNameSize, TInt aValueSize) const;
+        void VerifyExternalizedSizeForExistingParamArrayL(TInt aOldValueSize, TInt aNewValueSize) const;
+        void AddOpaqueParamL(MOpaqueParam* aItemBase);
+private:
+        RPointerArray<MOpaqueParam> iParams;
+        
+        mutable HBufC8* iExternalBuffer;
+        mutable TPtr8 iExternalBufferPtr;
+        mutable TBool iDeferredInternalization;
+        mutable TInt iExternalizedSize;
+
+        };
+
+	/**
+        Input Opaque Parameters:
+
+		Pre-defined opaque arguments and results:
+		"InstallInactive" - Yes/No 
+		If provided in the opaque installation parameters, requests the installation of
+		a component without activating it. Otherwise, components are activeted after installation by default.
+		
+		"InstallSilently" - Yes/No 
+		If provided in the opaque installation parameters, requests a silent installation,
+		i.e. one which avoids interaction with the user whenever possible. Please note that this may involve
+		additional security checks, and is not necessarily supported by all installers.
+
+		"Drive" -  Array of TUInt 
+		Preffered drive in the order of priority with zero index being the highest priority
+		
+		"Languages" - Array of TLanguage
+		List of languages to use
+		
+		"OCSPUrl" - TDesC
+		The OSCP responder's URL
+
+		"PerformOCSP" - TSifPolicy
+		Whether OCSP should be performed or not or Request user
+
+		"IgnoreOCSPWarnings" - TSifPolicy
+		Action in case of OCSP warnings 
+
+		"AllowUpgrade" - TSifPolicy
+		Allow an upgrade (if yes, upgrade of the application) 
+
+		"AllowUpgradeData" - TSifPolicy
+		Whether private data of the application to be retained or removed during the upgrade
+
+		"InstallOptionalItems" - TSifPolicy
+		Install optional items in package 
+
+		"AllowUntrusted" - TSifPolicy
+		Check if installation of untrusted (uncertified) package is allowed 
+
+		"GrantCapabilities" - TSifPolicy
+		Whether to grant user capabilities 
+
+		"AllowAppShutdown" - TSifPolicy
+		Should we silently kill an application if needed 
+
+		"AllowAppBreakDependency" - TSifPolicy
+		Allow uninstall of dependent packages 
+
+		"AllowOverwrite" - TSifPolicy
+		Can files be overwritten 
+
+		"PackageInfo" - TSifPolicy
+		Whether to skip infos 
+
+		"AllowDownload" - TSifPolicy
+		Is it ok to download 
+
+		"UserName" - TDesC
+		UserName for Download request
+
+		"Password" - TDesC
+		Password for Download request
+
+		"SourceUrl" - TDesC
+		SourceUrl or Directory
+
+		"IAP" - TInt
+		Internet Access Point
+
+		"SNAP" -  TInt
+		Service Network Access Point, alternative to passing iap 
+
+  		"MimeType" -  TDesC
+		Represents MIME Type to be used during HTTP download
+
+  		"Charset" -  TDesC
+		Represents charset to be used during HTTP download 
+
+		"AllowIncompatible" -  TSifPolicy
+		Check if installation of incompatible packages is allowed 
+
+        
+
+		Output Opaque parameters:
+
+		"ComponentId" - Array of TUInt
+		If returned in the custom results, provides the id's of the newly added components
+		after an install. Please note that not all installers (i.e. SIF Plugins) may support this.
+		Eg: Includes embedded sis packages component ID's as well for native installer
+
+		"ErrCategory" - TInt
+		If returned in the custom results gives the error category, that is defined by USIF
+
+		"ErrCode" - TInt
+		If returned in the custom results gives one of the USIF error code.
+		
+		"ExtendedErrCode" - TInt
+		If returned in the custom results gives the extended error information, that is specific to 
+		a software component type.
+
+		"ErrMessage" - TDesC
+		If returned in the custom results gives the localized error message
+
+		"ErrMessageDetails" - TDesC
+		If returned in the custom results gives the localized error message details about error
+
+	*/
+	_LIT(KSifInParam_InstallInactive, "InstallInactive");
+	_LIT(KSifInParam_InstallSilently, "InstallSilently");
+	_LIT(KSifInParam_Drive, "Drive");
+	_LIT(KSifInParam_Languages, "Languages");
+	_LIT(KSifInParam_OCSPUrl, "OCSPUrl");
+	_LIT(KSifInParam_PerformOCSP, "PerformOCSP");
+	_LIT(KSifInParam_IgnoreOCSPWarnings, "IgnoreOCSPWarnings");
+	_LIT(KSifInParam_AllowUpgrade, "AllowUpgrade");
+	_LIT(KSifInParam_AllowUpgradeData, "AllowUpgradeData");
+	_LIT(KSifInParam_InstallOptionalItems, "InstallOptionalItems");
+	_LIT(KSifInParam_AllowUntrusted, "AllowUntrusted");
+	_LIT(KSifInParam_GrantCapabilities, "GrantCapabilities");
+	_LIT(KSifInParam_AllowAppShutdown, "AllowAppShutdown");
+	_LIT(KSifInParam_AllowAppBreakDependency, "AllowAppBreakDependency");
+	_LIT(KSifInParam_AllowOverwrite, "AllowOverwrite");
+	_LIT(KSifInParam_PackageInfo, "PackageInfo");
+	_LIT(KSifInParam_AllowDownload, "AllowDownload");
+	_LIT(KSifInParam_UserName, "UserName");
+	_LIT(KSifInParam_Password, "Password");
+	_LIT(KSifInParam_SourceUrl, "SourceUrl");
+	_LIT(KSifInParam_IAP, "IAP");
+	_LIT(KSifInParam_SNAP, "SNAP");
+	_LIT(KSifInParam_MimeType, "MimeType");
+	_LIT(KSifInParam_Charset, "Charset");
+	_LIT(KSifInParam_AllowIncompatible, "AllowIncompatible");
+
+	_LIT(KSifOutParam_ComponentId, "ComponentId");
+	_LIT(KSifOutParam_ErrCategory, "ErrCategory");
+	_LIT(KSifOutParam_ErrCode, "ErrCode");
+	_LIT(KSifOutParam_ExtendedErrCode, "ExtendedErrCode");
+	_LIT(KSifOutParam_ErrMessage, "ErrMessage");
+	_LIT(KSifOutParam_ErrMessageDetails, "ErrMessageDetails");
+
+    /**
+        SIF Server Secure ID
+    
+        Installers should use this id to verify that installation requests come from the SIF Server.
+    */
+    _LIT_SECURE_ID(KSifServerUid,0x10285BCB);
+
+    } // namespace Usif
+
+#endif // USIF_SIF_COMMON_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/sifnotification.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,587 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sifnotification.h - Interfaces to publish (by installers) and get notified (for clients) to an SIF operation progress
+*
+*/
+
+/**
+ @file
+ @released
+ @publishedPartner
+*/
+
+#ifndef __SIFNOTIFICATION_H__
+#define __SIFNOTIFICATION_H__
+
+#include <e32std.h>
+#include <e32base.h>
+#include <s32strm.h>
+#include <usif/usiferror.h>
+#include <e32property.h> 
+
+namespace Usif
+{
+// Forward declaration.
+class CSifNotifierBase;
+class CDeleteKeyTimer;
+
+//Identifies the type of operation
+enum TSifOperationPhase
+    {
+    EInstalling = 1,
+    EUninstalling,
+    EUpgrading
+    };
+
+//Identifies a stage in type of operation
+enum TSifOperationSubPhase 
+    {
+    ENoSubPhase = 1,
+    EOCSPCheck,
+    EDownload,
+    EFileOperation
+    };
+
+enum TSifOperation
+    {
+    ESifOperationStart = 1,
+    ESifOperationEnd
+    };
+
+
+/*
+ * This contains the basic information of package going to be installed/uninstalled (provided at the start of the operation)
+ */
+NONSHARABLE_CLASS(CSifOperationStartData) : public CBase    
+    {
+public:
+    /**
+        Creates a CSifOperationStartData object from the stream.
+             
+        @param  aStream   The stream to read the CSifOperationStartData object from.
+        @return A pointer to the newly allocated CSifOperationStartData object, if creation is successful.
+     */ 
+    IMPORT_C static CSifOperationStartData* NewL(RReadStream& aStream);
+    
+    /**
+        Creates a CSifOperationStartData object.
+
+		@deprecated  Use the overload with aOperationPhase instead.
+        
+        @param  aGlobalComponentId  The global component id which uniquely identifies the operation          
+        @param  aComponentName		The name of the software component
+        @param  aApplicationNames	The list of applications associated with the software component, an empty array in case of no applications
+        @param  aApplicationIcons   The list of corresponding application icon names(without path) for every application, an empty array in case of no applications                 
+        @param  aComponentSize		The total size of the component in bytes
+        @param  aIconPath			The path where all application and component icons are found
+        @param  aComponentIcon		The name of the component icon(without path)
+        @param  aSoftwareType		The software type name of the software component
+                                                   
+        @return A pointer to the newly allocated CSifOperationStartData object, if creation is successful.
+     */      
+    IMPORT_C static CSifOperationStartData* NewL(const TDesC& aGlobalComponentId, const TDesC& aComponentName, const RPointerArray<HBufC>& aApplicationNames,
+                                                  const RPointerArray<HBufC>& aApplicationIcons, TInt aComponentSize, const TDesC& aIconPath, const TDesC& aComponentIcon, 
+                                                      const TDesC& aSoftwareType);
+    
+    /**
+        Creates a CSifOperationStartData object.
+        
+        @param  aGlobalComponentId  The global component id which uniquely identifies the operation          
+        @param  aComponentName      The name of the software component
+        @param  aApplicationNames   The list of applications associated with the software component, an empty array in case of no applications
+        @param  aApplicationIcons   The list of corresponding application icon names(without path) for every application, an empty array in case of no applications                 
+        @param  aComponentSize      The total size of the component in bytes
+        @param  aIconPath           The path where all application and component icons are found
+        @param  aComponentIcon      The name of the component icon(without path)
+        @param  aSoftwareType       The software type name of the software component
+        @param  aOperationPhase     The type of SIF operation
+                                                   
+        @return A pointer to the newly allocated CSifOperationStartData object, if creation is successful.
+     */      
+    IMPORT_C static CSifOperationStartData* NewL(const TDesC& aGlobalComponentId, const TDesC& aComponentName, const RPointerArray<HBufC>& aApplicationNames,
+                                                  const RPointerArray<HBufC>& aApplicationIcons, TInt aComponentSize, const TDesC& aIconPath, const TDesC& aComponentIcon, 
+                                                      const TDesC& aSoftwareType, TSifOperationPhase aOperationPhase);
+
+    /**
+        Creates a CSifOperationStartData object.
+
+  		@deprecated  Use the overload with aOperationPhase instead.
+        
+        @param  aGlobalComponentId  The global component id which uniquely identifies the operation          
+        @param  aComponentName      The name of the software component
+        @param  aApplicationNames   The list of applications associated with the software component, an empty array in case of no applications
+        @param  aApplicationIcons   The list of corresponding application icon names(without path) for every application, an empty array in case of no applications                 
+        @param  aComponentSize      The total size of the component in bytes
+        @param  aIconPath           The path where all application and component icons are found
+        @param  aComponentIcon      The name of the component icon(without path)
+        @param  aSoftwareType       The software type name of the software component
+                                                           
+        @return A pointer to the newly allocated CSifOperationStartData object, if creation is successful.
+                The pointer is also put onto the cleanup stack. 
+     */     
+    IMPORT_C static CSifOperationStartData* NewLC(const TDesC& aGlobalComponentId, const TDesC& aComponentName, const RPointerArray<HBufC>& aApplicationNames,
+                                                      const RPointerArray<HBufC>& aApplicationIcons, TInt aComponentSize, const TDesC& aIconPath, const TDesC& aComponentIcon, 
+                                                          const TDesC& aSoftwareType);
+    
+
+    /**
+        Creates a CSifOperationStartData object.
+        
+        @param  aGlobalComponentId  The global component id which uniquely identifies the operation          
+        @param  aComponentName      The name of the software component
+        @param  aApplicationNames   The list of applications associated with the software component, an empty array in case of no applications
+        @param  aApplicationIcons   The list of corresponding application icon names(without path) for every application, an empty array in case of no applications                 
+        @param  aComponentSize      The total size of the component in bytes
+        @param  aIconPath           The path where all application and component icons are found
+        @param  aComponentIcon      The name of the component icon(without path)
+        @param  aSoftwareType       The software type name of the software component
+        @param  aOperationPhase     The type of SIF operation
+                                                           
+        @return A pointer to the newly allocated CSifOperationStartData object, if creation is successful.
+                The pointer is also put onto the cleanup stack. 
+     */     
+    IMPORT_C static CSifOperationStartData* NewLC(const TDesC& aGlobalComponentId, const TDesC& aComponentName, const RPointerArray<HBufC>& aApplicationNames,
+                                                      const RPointerArray<HBufC>& aApplicationIcons, TInt aComponentSize, const TDesC& aIconPath, const TDesC& aComponentIcon, 
+                                                          const TDesC& aSoftwareType, TSifOperationPhase aOperationPhase);
+    
+    /**
+     @return The global component Id associated with the operation.
+     */     
+    IMPORT_C const HBufC& GlobalComponentId() const;
+    
+    /**
+     @return The component name associated with the operation.
+     */     
+    IMPORT_C const HBufC& ComponentName() const;
+    
+    /**
+     @return An array of application names.
+     */     
+    IMPORT_C const RPointerArray<HBufC>& ApplicationNames() const;
+    
+    /**
+     @return An array of application icons.
+     */     
+    IMPORT_C const RPointerArray<HBufC>& ApplicationIcons() const;
+    
+    /**
+     @return The size of the component in bytes.
+     */      
+    IMPORT_C TInt ComponentSize() const;    
+    
+    /**
+     @return The path to the application icons.
+     */     
+    IMPORT_C const HBufC& IconPath() const; 
+   
+    /**
+     @return The icon associated with the component.
+     */      
+    IMPORT_C const HBufC& ComponentIcon() const;
+    
+    /**
+     @return The software type associated with the operation.
+     */      
+    IMPORT_C const HBufC& SoftwareType() const;    
+    
+    IMPORT_C ~CSifOperationStartData();          
+
+    IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+    
+    /**
+     @return The type of SIF operation.
+     */   
+    IMPORT_C TSifOperationPhase OperationPhase() const;
+
+private:
+    CSifOperationStartData();
+    void ConstructL(const TDesC& aGlobalComponentId, const TDesC& aComponentName, const RPointerArray<HBufC>& aApplicationNames,  
+                        const RPointerArray<HBufC>& aApplicationIcons, TInt aComponentSize, const TDesC& aIconPath, 
+                            const TDesC& aComponentIcon, const TDesC& aSoftwareType, TSifOperationPhase aOperationPhase);
+    void InternalizeL(RReadStream& aStream);
+
+private:
+    HBufC* iGlobalComponentId;                                    
+    HBufC* iComponentName;
+    HBufC* iComponentIcon;
+    RPointerArray<HBufC> iApplicationNames;
+    RPointerArray<HBufC> iApplicationIcons;          
+    TInt iComponentSize;
+    HBufC* iIconPath;      
+    HBufC* iSoftwareType;
+    TSifOperation iOperationType;
+    TSifOperationPhase iOperationPhase;
+    };
+
+
+/*
+ * This contains the error status information after an install/uninstall operation
+ */
+NONSHARABLE_CLASS(CSifOperationEndData) : public CBase
+    {      
+public:
+    /**
+        Creates a CSifOperationEndData object from the stream.
+             
+        @param  aStream   The stream to read the CSifOperationEndData object from.
+        @return A pointer to the newly allocated CSifOperationEndData object, if creation is successful.
+     */     
+    IMPORT_C static CSifOperationEndData* NewL(RReadStream& aStream);
+    
+    /**
+        Creates a CSifOperationEndData object.
+        
+        @param  aGlobalComponentId  The global component id which uniquely identifies the operation          
+        @param  aErrCategory		A SIF error category
+        @param  aErrCode			SIF plugin (or runtime) specific error code
+        @param  aErrMsg				SIF plugin (or runtime) specific localized error message         
+        @param  aErrMsgDetails		SIF plugin (or runtime) specific localized message details
+                                                        
+        @return A pointer to the newly allocated CSifOperationEndData object, if creation is successful.
+     */     
+    IMPORT_C static CSifOperationEndData* NewL(const TDesC& aGlobalComponentId, TErrorCategory aErrCategory, TInt aErrCode, const TDesC& aErrMsg, const TDesC& aErrMsgDetails);    
+
+    /**
+        Creates a CSifOperationEndData object.
+        
+        @param  aGlobalComponentId  The global component id which uniquely identifies the operation          
+        @param  aErrCategory		A SIF error category
+        @param  aErrCode			SIF plugin (or runtime) specific error code
+        @param  aErrMsg				SIF plugin (or runtime) specific localized error message         
+        @param  aErrMsgDetails		SIF plugin (or runtime) specific localized message details
+                                                        
+        @return A pointer to the newly allocated CSifOperationEndData object, if creation is successful.
+                The pointer is also put onto the cleanup stack. 
+     */         
+    IMPORT_C static CSifOperationEndData* NewLC(const TDesC& aGlobalComponentId, TErrorCategory aErrCategory, TInt aErrCode, const TDesC& aErrMsg, const TDesC& aErrMsgDetails);
+
+    /**
+     @return The global component Id associated with the operation.
+     */     
+    IMPORT_C const HBufC& GlobalComponentId() const;
+    
+    /**
+    @return The category to which the error belongs.
+    */     
+    IMPORT_C TErrorCategory ErrorCategory() const;
+       
+    /**
+    @return An error code associated with the operation.
+    */     
+    IMPORT_C TInt ErrorCode() const;  
+       
+    /**
+     @return An error message.
+     */     
+    IMPORT_C const HBufC& ErrorMessage() const;
+    
+    /**
+     @return More details regarding the error message. 
+     */     
+    IMPORT_C const HBufC& ErrorMessageDetails() const;
+       
+    IMPORT_C ~CSifOperationEndData();
+  
+    IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+
+private:
+    CSifOperationEndData();
+    void ConstructL(const TDesC& aGlobalComponentID, TErrorCategory aErrCategory, TInt aErrCode, const TDesC& aErrMsg, const TDesC& aErrMsgDetails);
+    void InternalizeL(RReadStream& aStream);
+
+private:     
+    HBufC* iGlobalComponentId;   
+    HBufC* iErrMsg;                                    
+    HBufC* iErrMsgDetails;
+    TErrorCategory iErrCategory; 
+    TInt iErrCode;      
+    TSifOperation iOperationType;
+    };
+
+
+/*
+ * This class provides the operation progress.
+ */
+NONSHARABLE_CLASS(CSifOperationProgressData) : public CBase
+    {
+    public:
+    /**
+        Creates a CSifOperationProgressData object from the stream.
+             
+        @param  aStream   The stream to read the CSifOperationProgressData object from.
+        @return A pointer to the newly allocated CSifOperationProgressData object, if creation is successful.
+     */          
+    IMPORT_C static CSifOperationProgressData* NewL(RReadStream& aStream);
+    
+    /**
+        Creates a CSifOperationProgressData object.
+        
+        @param  aGlobalComponentId  The global component id which uniquely identifies the operation           
+        @param  aPhase				The type of SIF operation
+        @param  aSubPhase			The current stage in the type of SIF operation
+        @param  aCurrentProgress    The amount of operation which is completed in current subphase
+        @param  aTotal				The total amount of operation required by this subphase operation
+                                                        
+        @return A pointer to the newly allocated CSifOperationProgressData object, if creation is successful.
+     */      
+    IMPORT_C static CSifOperationProgressData* NewL(const TDesC& aGlobalcomponentId, TSifOperationPhase aPhase, TSifOperationSubPhase aSubPhase, TInt aCurrentProgress, TInt aTotal);      
+
+    /**
+        Creates a CSifOperationProgressData object.
+        
+        @param  aGlobalComponentId  The global component id which uniquely identifies the operation           
+        @param  aPhase				The type of SIF operation
+        @param  aSubPhase			The current stage in the type of SIF operation
+        @param  aCurrentProgress    The amount of operation which is completed in current subphase
+        @param  aTotal				The total amount of operation required by this subphase operation
+                                                        
+        @return A pointer to the newly allocated CSifOperationProgressData object, if creation is successful.
+                The pointer is also put onto the cleanup stack. 
+     */     
+    IMPORT_C static CSifOperationProgressData* NewLC(const TDesC& aGlobalcomponentId, TSifOperationPhase aPhase, TSifOperationSubPhase aSubPhase, TInt aCurrentProgress, TInt aTotal);
+
+    /**
+     @return The global component id associated with the operation.
+     */ 
+    IMPORT_C const HBufC& GlobalComponentId() const;
+    
+    /**
+     @return The current phase of operation.
+     */     
+    IMPORT_C TSifOperationPhase Phase() const;
+    
+    /**
+     @return The current sub-phase of operation.
+     */    
+    IMPORT_C TSifOperationSubPhase SubPhase() const;
+    
+    /**
+     @return The current progress value.
+
+	 @deprecated  Use CurrentProgress() instead.
+     */     
+    IMPORT_C TInt CurrentProgess() const;
+    
+    /**
+     @return The current progress value.
+     */     
+    IMPORT_C TInt CurrentProgress() const;
+    
+    /**
+     @return The total value to achieve completion of the subphase.
+     */     
+    IMPORT_C TInt Total() const;  
+    
+    IMPORT_C ~CSifOperationProgressData();               
+
+    IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+
+private:
+    CSifOperationProgressData();
+    void ConstructL(const TDesC& aGlobalcomponentId, TSifOperationPhase aPhase, TSifOperationSubPhase aSubPhase, TInt aCurrentProgress, TInt aTotal);
+    void InternalizeL(RReadStream& aStream);
+
+private:   
+    HBufC* iGlobalComponentId;       
+    TSifOperationPhase iPhase;
+    TSifOperationSubPhase iSubPhase;
+    TInt iCurrentProgress;
+    TInt iTotal;
+    };
+
+/**
+ * This class will be used by installers to publish a single install/uninstall/update operation information.
+ * A scheduler needs to be in started when using this class.
+ */
+NONSHARABLE_CLASS(CPublishSifOperationInfo) : public CBase
+    {
+public:
+    
+    /**
+        Creates a CPublishSifOperationInfo object.
+                                                        
+        @return A pointer to the newly allocated CPublishSifOperationInfo object, if creation is successful.
+     */       
+    IMPORT_C static CPublishSifOperationInfo* NewL();
+  
+    /**
+        Creates a CPublishSifOperationInfo object.
+                             
+        @return A pointer to the newly allocated CPublishSifOperationInfo object, if creation is successful.
+                The pointer is also put onto the cleanup stack. 
+     */       
+    IMPORT_C static CPublishSifOperationInfo* NewLC();
+    
+    /**
+		Publish the start of an operation. The corresponding PublishCompletionL() method should be called later
+		else an opeartion place holder is always blocked for this operation which has started.       
+       
+		@capability WriteDeviceData
+		@param aStartData Start operation related information.
+		@leave KErrInUse No more slots are available to publish.
+     */
+    IMPORT_C void PublishStartL(CSifOperationStartData& aStartData);
+
+    /**
+		Publish the operation progress information
+       
+		@capability WriteDeviceData
+		@param aProgressData Progress operation related information.
+     */
+    IMPORT_C void PublishProgressL(CSifOperationProgressData& aProgressData);
+
+    /**
+		Publish the error status of the operation (at the end)
+       
+		@capability WriteDeviceData
+		@param aEndData End operation related information.
+     */
+    IMPORT_C void PublishCompletionL(CSifOperationEndData& aEndData);
+    
+    IMPORT_C ~CPublishSifOperationInfo(); 
+    
+private:
+    void SetKeyToDelete(TUint aStartEndKey);
+    void SetStartEndKey(TUint aStartEndKey);
+    CPublishSifOperationInfo();
+    void ConstructL();
+    TUint AvailableKeyL();
+    TUint KeyForGlobalComponentIdL(const TDesC& aGlobalComponentId);
+    
+private:
+    CDeleteKeyTimer* iDeleteTimer;
+    TInt iBufferSize;
+    TUint iStartEndKey;
+    };
+
+/**
+ * MSifOperationsHandler
+ * Clients must implement this class in order to receive notifications.
+ */
+class MSifOperationsHandler
+    {
+public:
+    /**
+       Called when a new operation is started. The client should use the SubscribeL() method 
+       (@see CSifOperationsNotifier) to register for progress and end notification for this operation.
+       This function should return quickly as this is run as part of an active object request completion handler.
+
+       @param aKey The Start End key of the operation.
+       @param aStartData Start operation related information.
+     */
+    virtual void StartOperationHandler(TUint aKey, const CSifOperationStartData& aStartData) = 0;
+    
+    /**
+       Called when an operation completes.
+       This function should return quickly as this is run as part of an active object request completion handler.
+
+       @param aEndData End operation related information.
+     */
+    virtual void EndOperationHandler(const CSifOperationEndData& aEndData) = 0;
+   
+    /**
+       Called whenever a progress update is available.
+       This function should return quickly as this is run as part of an active object request completion handler.
+
+       @param aProgressData Progress operation related information.
+     */   
+    virtual void ProgressOperationHandler(const CSifOperationProgressData& aProgressData) = 0;
+    virtual ~MSifOperationsHandler() {}
+    };
+
+/**
+ * CSifOperationsNotifier
+ *
+ * Clients must create a CSifOperationsNotifier object by passing in the handler object.
+ *
+ * For every new Sif Operation, the StartOperationHandler() method of the handler would be called along
+ * with some related information. The client can choose to subscribe to this operation by calling the 
+ * SubscribeL() method.
+ * 
+ * A scheduler needs to be started when using this class.
+ */
+NONSHARABLE_CLASS(CSifOperationsNotifier) : public CActive
+    {
+public:    
+    
+    /**
+        Creates a CSifOperationsNotifier object.
+        
+        @param  aHandler A handle to the implementation of the MSifOperationsHandler class.      
+                                        
+        @return A pointer to the newly allocated CSifOperationsNotifier object, if creation is successful.
+     */         
+    IMPORT_C static CSifOperationsNotifier* NewL(MSifOperationsHandler& aHandler);
+    
+    /**
+        Creates a CSifOperationsNotifier object.
+        
+        @param  aHandler A handle to the implementation of the MSifOperationsHandler class.     
+                                                        
+        @return A pointer to the newly allocated CSifOperationsNotifier object, if creation is successful.
+                The pointer is also put onto the cleanup stack. 
+     */         
+    IMPORT_C static CSifOperationsNotifier* NewLC(MSifOperationsHandler& aHandler);
+    
+    /**
+       Subscribe for progress and end notifications or only end notification.
+       
+       @param aKey The StartEnd key assoicated with the operation.
+       @param aSubscribeForProgressNotifications Boolean to specify optional subscription to progreess information.
+     */
+    IMPORT_C void SubscribeL(TUint aKey, TBool aSubscribeForProgressNotifications = ETrue);
+    
+    /**
+       Cancel Subscription for a specific key.
+       
+       @param aKey The StartEnd key assoicated with the operation.
+     */    
+    IMPORT_C void CancelSubscribeL(TUint aKey);
+    
+    /**
+       Cancel all subscriptions.
+     */      
+    IMPORT_C void CancelSubscribeL();
+    
+    IMPORT_C ~CSifOperationsNotifier();
+
+private:
+    enum TNotifierState
+        {
+        EFirstStart,
+        EWaitForChange
+        };
+    CSifOperationsNotifier(MSifOperationsHandler& aHandler);
+    void GetKeysL(RArray<TUint>& aKeys);
+    void ActiveOperationsNotificationL();
+    void WaitForChangeL();
+    void ConstructL();
+    void RunL();
+    void DoCancel();
+    TInt RunError(TInt aError);
+
+private:
+    MSifOperationsHandler& iHandler;
+    TInt iBufferSize;   
+    RArray<TUint> iKeyArray;
+    RProperty iProperty;
+    RPointerArray<CSifNotifierBase> iNotifierArray;
+    TNotifierState iNotifierState;
+    };
+
+
+} // namespace
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/sifplugin.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines a SIF plug-in interface.
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef SIFPLUGIN_H
+#define SIFPLUGIN_H
+
+#include <e32cmn.h>
+#include <f32file.h>
+#include <usif/sif/sifcommon.h>
+
+#include <ecom/ecom.h>
+#include <ecom/implementationproxy.h>
+
+namespace Usif
+	{
+	/** ECOM SIF plug-in Uid */
+	const TUid PluginEcomUid = {0x10285BC2};
+
+	/**
+	An abstract SIF plug-in interface. It implements the SIF software management
+	services interfaces for a particular software type. 
+
+	The SIF Server uses a SIF plug-in when a package of a type it supports
+	is to be processed.
+
+	Each method in this interface provides a security context. An installer may
+	use it in order to verify client's identity and capabilities. For example, a Java
+	installer may require the ECapabilityWriteUserData capability to activate or
+	deactivate a MIDlet.
+
+	Complex installers that need to be implemented as stand-alone servers may use
+	the SIF Transport library in order to simplify sending/receiving SIF requests
+	across a process boundary.
+	*/
+	class CSifPlugin : public CBase
+		{
+	public:
+
+		/**
+		A derived class must provide an implementation that returns details of a component
+		to be installed by file name.
+		
+		@param aFileName Component's file name
+		@param aSecurityContext this param allows the plug-in to verify client's identity
+		@param aComponentInfo On return, contains component's details
+		@param aStatus Asynchronous completion status
+		*/
+		virtual void GetComponentInfo(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+									CComponentInfo& aComponentInfo, TRequestStatus& aStatus) = 0;
+		
+		/**
+		A derived class must provide an implementation that returns details of a component
+		to be installed by file handle.
+		
+		@param aFileHandle Component's file name
+		@param aSecurityContext this param allows the plug-in to verify client's identity
+		@param aComponentInfo On return, contains component's details
+		@param aStatus Asynchronous completion status
+		*/
+		virtual void GetComponentInfo(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+									CComponentInfo& aComponentInfo, TRequestStatus& aStatus) = 0;
+
+		/**
+		A derived class must provide an implementation that installs a component by file name.
+		
+		@param aFileName Component's file name
+		@param aSecurityContext this param allows the plug-in to verify client's identity
+		@param aArguments The array of opaque params for the plug-in. An empty
+		array may be passed.  The following param is defined for the "SCOMO Install
+		Inactive" operation:
+		Name: InstallInactive, Type: Int, Value: ETrue
+		If a plug-in receives this param, it must install a component normally but the SCOMO
+		State should remain EDeactivated.
+		@param aResults The array of opaque params returned from the plug-in.
+		The following return param is defined for the id of an installed component:
+		Name: ComponentId, Type: Int
+		Each plug-in must add this param to aResults after a successful installation.
+		For packages containing embedded components, the returned param contains
+		the id of the last/most embedded component.
+		@param aStatus Asynchronous completion status
+		*/
+		virtual void Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+							const COpaqueNamedParams& aArguments, COpaqueNamedParams& aResults,
+							TRequestStatus& aStatus) = 0;
+
+		/**
+		A derived class must provide an implementation that installs a component by file handle.
+		
+		@param aFileHandle Component's file handle
+		@param aSecurityContext this param allows the plug-in to verify client's identity
+		@param aArguments The array of opaque params for the plug-in. An empty
+		array may be passed.  The following param is defined for the "SCOMO Install
+		Inactive" operation:
+		Name: InstallInactive, Type: Int, Value: ETrue
+		If a plug-in receives this param, it must install a component normally but the SCOMO
+		State should remain EDeactivated.
+		@param aResults The array of opaque params returned from the plug-in.
+		The following return param is defined for the id of an installed component:
+		Name: ComponentId, Type: Int
+		Each plug-in must add this param to aResults after a successful installation.
+		For packages containing embedded components, the returned param contains
+		the id of the last/most embedded component.
+		@param aStatus Asynchronous completion status
+		*/
+		virtual void Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+							const COpaqueNamedParams& aArguments, COpaqueNamedParams& aResults,
+							TRequestStatus& aStatus) = 0;
+
+		/**
+		A derived class must provide an implementation that uninstalls a component.
+		
+		@param aComponentId The id of a component to be uninstalled
+		@param aSecurityContext this param allows the plug-in to verify client's identity
+		@param aArguments The array of opaque params for the plug-in. An empty
+		array may be passed.
+		@param aResults The array of opaque results returned from the plug-in.
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		virtual void Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aArguments, COpaqueNamedParams& aResults,
+								TRequestStatus& aStatus) = 0;
+
+		/**
+		A derived class must provide an implementation that activates a component.
+
+		@param aComponentId The id of a component to be activated
+		@param aSecurityContext this param allows the plug-in to verify client's identity
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		virtual void Activate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								TRequestStatus& aStatus) = 0;
+
+		/**
+		A derived class must provide an implementation that deactivates a component.
+
+		@param aComponentId The id of a component to be deactivated
+		@param aSecurityContext this param allows the plug-in to verify client's identity
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		virtual void Deactivate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								TRequestStatus& aStatus) = 0;
+
+		/**
+		A derived class must provide an implementation that cancels an ongoing asynchronous request.
+		
+		This is a synchronous call. When it returns the original asynchronous call is completed.
+		*/
+		virtual void CancelOperation() = 0;
+
+		virtual ~CSifPlugin() {}
+		};
+	} // namespace Usif
+
+#endif // SIFPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/sifservercommon.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Common stuff for the Universal Software Install Framework server and client
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef SIFSERVERCOMMON_H
+#define SIFSERVERCOMMON_H
+
+#include <e32uid.h>
+
+namespace Usif
+	{
+
+	/** The name of the SIF Server */
+	_LIT(KSifServerName,"!SifServer");
+
+	const TInt KSifVerMajor = 1;	///< SIF server version major component.
+	const TInt KSifVerMinor = 0;	///< SIF server version minor component.
+	const TInt KSifVerBuild = 0;	///< SIF server version build number.
+
+	/** Executable image which runs the server process. */
+	_LIT(KServerImageName, "sifserver.exe");
+
+	/**
+		Returns the version of the SIF Server.
+
+		This function is defined because there is no literal constructor for TVersion.
+
+		@return	Defines a version number which the client can use to open the server.  If the client
+				was built with a higher version number, then it cannot open the server.  This ensures that
+				a client only talks to a server whose version is at least as high as its own.
+	 */
+	inline TVersion Version()
+		{
+		TVersion v(KSifVerMajor, KSifVerMinor, KSifVerBuild);
+		return v;
+		}
+
+	} // End of namespace Usif
+
+#endif	// #ifndef SIFSERVERCOMMON_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/sifservertask.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines a SIF Server task that implements the CSifTransportTask interface.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef SIFSERVERTASK_H
+#define SIFSERVERTASK_H
+
+#include <f32file.h>
+#include <usif/sif/siftransporttask.h>
+#include "sifservercommon.h"
+
+namespace Usif
+	{
+	class CSifPlugin;
+
+	/**
+	A SIF Server task. It implements the functionality of the SIF Server.
+	
+	This task is instantiated and executed by the @see CSifTransportRequest class
+	in response to an incoming software management request.
+	*/
+	class CSifServerTask : public CSifTransportTask
+		{
+	public:
+		/**
+		Instantiates a SIF Server task.
+		
+		@return Pointer to a @see CSifServerTask object.
+		*/
+		static CSifServerTask* NewL(TransportTaskFactory::TTaskType aTaskType, TTransportTaskParams& aParams);
+
+		virtual ~CSifServerTask();
+
+	protected:
+		/**
+		Implements the functionality of the SIF Server.
+		
+		@return TBool, ETrue if the processing of a software management request
+		is completed and the task can be cleaned up, EFalse if the request requires
+		further processing so this method will be called again.
+		*/
+		virtual TBool ExecuteImplL();
+
+		/**
+		Cancels an ongoing asynchronous request.
+		*/
+		virtual void CancelImpl();
+
+	private:
+		CSifServerTask(TransportTaskFactory::TTaskType aTaskType, TTransportTaskParams& aParams);
+
+		void SelectAndLoadPluginL();
+
+		TransportTaskFactory::TTaskType iTaskType;
+		CSifPlugin* iPlugin;
+		TUid iEcomKey;
+		};
+
+	} // End of namespace Usif
+
+
+#endif	// #ifndef SIFSERVERTASK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/siftransportclient.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,218 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines the client side of the SIF Transport.
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef SIFTRANSPORTCLIENT_H
+#define SIFTRANSPORTCLIENT_H
+
+#include <usif/sif/sifcommon.h>
+#include <scs/scsclient.h>
+#include <e32base.h>
+#include <f32file.h>
+
+namespace Usif
+	{
+
+	/**
+	A client part of the SIF Transport. This class sends software management requests
+	across the process boundary to a specified Transport Server.
+	*/
+	class RSifTransportClient : public RScsClientBase
+		{
+	public:
+		IMPORT_C RSifTransportClient();
+
+		/**
+		 Connects a client to the SIF server.
+		 
+		@return	Symbian OS error code where KErrNone indicates
+				success and any other value indicates failure.
+		*/
+		IMPORT_C TInt Connect(const TDesC& aServerName, const TVersion& aRequiredVersion, const TDesC& aServerImageName, TUid aServerUid);
+
+		/**
+		   Disconnects a client from the SIF server.
+		*/
+		IMPORT_C void Close();
+
+		/**
+		Returns the details of a component to be installed by file name
+		 
+		@param aFileName The file name of a component to be queried
+		@param aComponentInfo On return, contains the details of a component
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		IMPORT_C void GetComponentInfo(const TDesC& aFileName, CComponentInfo& aComponentInfo,
+										TRequestStatus& aStatus);
+
+		/**
+		 * Returns the details of a component to be installed by file handle
+		 
+		@param aFileHandle The file handle of a component to be queried
+		@param aComponentInfo On return, contains the details of a component
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		IMPORT_C void GetComponentInfo(RFile& aFileHandle, CComponentInfo& aComponentInfo,
+										TRequestStatus& aStatus);
+
+		/**
+		Installs a component by file name
+		
+		@param aFileName The file name of a component to be installed
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation If this flag is set to ETrue, the Install
+		operation is executed in the Exclusive mode. In this mode the SIF Transport
+		Server executes only one operation at a time. If there is another
+		operation in progress the SIF Server returns KErrServerBusy.
+		If this flag is set to EFalse, the SIF Server executes the operation
+		even if there is a concurrent operation in progress.
+		*/
+		IMPORT_C void Install(const TDesC& aFileName, TRequestStatus& aStatus,
+							TBool aExclusiveOperation);
+
+		/**
+		Installs a component by file name using opaque arguments/results
+		
+		@param aFileName The file name of a component to be installed
+		@param aArguments The array of opaque params for the plug-in. An empty
+		array may be passed.  The following param is defined for the "SCOMO Install
+		Inactive" operation:
+		Name: InstallInactive, Type: Int, Value: ETrue
+		@param aResults The array of opaque params returned from the plug-in.
+		The following return param is defined for the id of an installed component:
+		Name: ComponentId, Type: Int
+		For packages containing embedded components, the returned param contains
+		the id of the last/most embedded component.
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation Enables the ExclusiveOperation mode. Please
+		see @see RSifTransportClient::Install by file name for details.
+		*/
+		IMPORT_C void Install(const TDesC& aFileName, const COpaqueNamedParams& aArguments,
+								COpaqueNamedParams& aResults, TRequestStatus& aStatus,
+								TBool aExclusiveOperation);
+
+		/**
+		Installs a component by file handle
+		
+		@param aFileHandle The file handle of a component to be installed
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation Enables the ExclusiveOperation mode. Please
+		see @see RSifTransportClient::Install by file name for details.
+		*/
+		IMPORT_C void Install(RFile& aFileHandle, TRequestStatus& aStatus,
+							TBool aExclusiveOperation);
+
+		/**
+		Installs a component by file handle using opaque arguments/results
+		
+		@param aFileHandle The file handle of a component to be installed
+		@param aArguments The array of opaque params for the plug-in. An empty
+		array may be passed.  The following param is defined for the "SCOMO Install
+		Inactive" operation:
+		Name: InstallInactive, Type: Int, Value: ETrue
+		@param aResults The array of opaque params returned from the plug-in.
+		The following return param is defined for the id of an installed component:
+		Name: ComponentId, Type: Int
+		For packages containing embedded components, the returned param contains
+		the id of the last/most embedded component.
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation Enables the ExclusiveOperation mode. Please
+		see @see RSifTransportClient::Install by file name for details.
+		*/
+		IMPORT_C void Install(RFile& aFileHandle, const COpaqueNamedParams& aArguments,
+								COpaqueNamedParams& aResults, TRequestStatus& aStatus,
+								TBool aExclusiveOperation);
+
+		/**
+		Uninstalls a component
+		
+		@param aComponentId The id of a component to be uninstalled
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation Enables the ExclusiveOperation mode. Please
+		see @see RSifTransportClient::Install by file name for details.
+		*/
+		IMPORT_C void Uninstall(TComponentId aComponentId, TRequestStatus& aStatus,
+								TBool aExclusiveOperation);
+
+		/**
+		Uninstalls a component
+		
+		@param aComponentId The id of a component to be uninstalled
+		@param aArguments The array of opaque params for the plug-in. An empty
+		array may be passed.
+		@param aResults The array of opaque results returned from the plug-in.
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		@param aExclusiveOperation Enables the ExclusiveOperation mode. Please
+		see @see RSifTransportClient::Install by file name for details.
+		*/
+		IMPORT_C void Uninstall(TComponentId aComponentId, const COpaqueNamedParams& aArguments,
+								COpaqueNamedParams& aResults, TRequestStatus& aStatus,
+								TBool aExclusiveOperation);
+
+		/**
+		Activates a component
+		
+		@param aComponentId The id of a component to be activated
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		IMPORT_C void Activate(TComponentId aComponentId, TRequestStatus& aStatus);
+
+		/**
+		Deactivates a component
+		
+		@param aComponentId The id of a component to be deactivated
+		@param aStatus The request status. KErrNone, if successful, otherwise
+		one of the other system-wide or SIF error codes defined in usiferror.h.
+		*/
+		IMPORT_C void Deactivate(TComponentId aComponentId, TRequestStatus& aStatus);
+
+		/**
+		Cancels an ongoing asynchronous request
+		
+		This is a synchronous call. When it returns the original asynchronous call is completed.
+		*/
+		IMPORT_C void CancelOperation();
+
+	private:
+		void CallSifFunction(TInt aFunction, const TIpcArgs& aArgs, TRequestStatus& aStatus);
+		void PrepareOpaqueParamsL(TIpcArgs& aIpcArgs, const COpaqueNamedParams& aArguments,
+									COpaqueNamedParams& aResults);
+
+		HBufC8* iArgBuf;
+		HBufC8* iResBuf;
+		TInt iOngoingFunction;
+		};
+
+	} // namespace Usif
+
+#endif // SIFTRANSPORTCLIENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/siftransportcommon.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Common stuff for the Sit Transport library.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef SIFTRANSPORTCOMMON_H
+#define SIFTRANSPORTCOMMON_H
+
+#include <e32uid.h>
+
+namespace Usif
+	{
+
+		/**
+			Operations supported by the SIF Server
+
+			bit 0 reserved for requests that send file name in an asynchronous IPC,
+			bit 1 reserved for requests that send file handle in an asynchronous IPC,
+			bit 2 reserved for requests that send component info in an asynchronous IPC,
+			bit 3 reserved for requests that send component id in an asynchronous IPC,
+			bit 4 reserved for requests that send opaque data in an asynchronous IPC,
+			bit 5 reserved for requests that send opaque data to a plug-in,
+			bit 6 reserved for installation requests
+	 	*/
+	enum TSifTransportFunction
+		{
+		EFileNameInIpc								= 0x01,
+		EFileHandleInIpc							= 0x02,
+		EComponentInfoInIpc							= 0x04,
+		EComponentIdInIpc							= 0x08,
+		EOpaqueDataInIpc							= 0x10,
+		EOpaqueDataToPlugin							= 0x20,
+		EInstall									= 0x40,
+		EGetComponentInfoByFileName 				= 0x100|EFileNameInIpc|EComponentInfoInIpc,
+		EGetComponentInfoByFileHandle				= 0x200|EFileHandleInIpc|EComponentInfoInIpc,
+		EInstallByFileName							= 0x300|EInstall|EFileNameInIpc|EOpaqueDataToPlugin,
+		EInstallByFileNameWithOpaqueData			= 0x400|EInstall|EFileNameInIpc|EOpaqueDataInIpc|EOpaqueDataToPlugin,
+		EInstallByFileHandle						= 0x500|EInstall|EFileHandleInIpc|EOpaqueDataToPlugin,
+		EInstallByFileHandleWithOpaqueData			= 0x600|EInstall|EFileHandleInIpc|EOpaqueDataInIpc|EOpaqueDataToPlugin,
+		EInstallByFileHandleWithOpaqueDataPreamble	= 0x700,
+		EUninstall									= 0x800|EComponentIdInIpc|EOpaqueDataToPlugin,
+		EUninstallWithOpaqueData					= 0x900|EComponentIdInIpc|EOpaqueDataInIpc|EOpaqueDataToPlugin,
+		EActivate									= 0xa00|EComponentIdInIpc,
+		EDeactivate									= 0xb00|EComponentIdInIpc
+		};
+
+	} // End of namespace Usif
+
+#endif	// #ifndef SIFSERVERCOMMON_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/siftransportserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* The server side of the SIF Transport library
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef SIFTRANSPORTSERVER_H
+#define SIFTRANSPORTSERVER_H
+
+#include <f32file.h>
+#include <scs/scsserver.h>
+#include <usif/sif/sifcommon.h>
+#include <usif/sif/siftransporttask.h>
+#include "siftransportcommon.h"
+
+namespace Usif
+	{
+	// forward declaration
+	class CSifTransportServer;
+
+	/**
+	A SIF Transport session. It is instantiated by the @see CSifTransportServer class in response
+	to an incoming connection. The session instantiates an asynchronous request (an instance
+	of the @see CSifTransportRequest class) and hands over the processing of a request to it.
+	*/
+	class CSifTransportSession : public CScsSession
+		{
+	public:
+		/** Creates an instance of the CSifTransportSession class. */
+		static CSifTransportSession* NewL(CSifTransportServer &aServer, TransportTaskFactory::GenerateTask aTaskFactory);
+
+		/** Destroys an instance of the CSifTransportSession class. */
+		virtual ~CSifTransportSession();
+
+		/** Implements the CScsSession interface */
+		virtual TBool DoServiceL(TInt aFunction, const RMessage2& aMessage);
+
+	private:
+		CSifTransportSession(CSifTransportServer &aServer, TransportTaskFactory::GenerateTask aTaskFactory);
+
+		TransportTaskFactory::GenerateTask iTaskFactory;
+		TBool iExclusiveOperation;
+		};
+
+	/**
+	A SIF Transport server. It is instantiated by the system when a client submits a connection request.
+	The server instantiates a SIF Transport session object in response to an incoming software management
+	request and hands over further processing to it.
+	
+	This is a transient server which means that it is instantiated in response to an incoming connection
+	and shuts down itself, after timeout specified in @see StartTransportServer, if there are no sessions.
+	*/
+	class CSifTransportServer : public CScsServer
+		{
+	public:
+		/** Creates an instance of the CSifTransportSession class. */
+		IMPORT_C static CScsServer* NewSifTransportServerLC();
+
+		/** Destroys an instance of the CSifTransportServer class. */
+		virtual ~CSifTransportServer();
+
+		/** Implements the CScsServer interface */
+		virtual CScsSession* DoNewSessionL(const RMessage2& aMessage);
+
+	private:
+		friend TInt StartTransportServer(const TDesC& aServerName, const TVersion& aVersion, TransportTaskFactory::GenerateTask aTaskFactory, TInt aShutdownPeriodUs);
+		static CSifTransportServer* NewLC(const TDesC& aServerName, const TVersion& aVersion, TransportTaskFactory::GenerateTask aTaskFactory, TInt aShutdownPeriodUs);
+
+		CSifTransportServer(const TVersion& aVersion, TransportTaskFactory::GenerateTask aFactory);
+		void ConstructL(const TDesC& aServerName, TInt aShutdownPeriodUs);
+
+		TransportTaskFactory::GenerateTask iTaskFactory;
+		};
+
+	/**
+	A SIF Transport request. An instance of this object is created by @see CSifTransportSession
+	class to represent an asynchronous software management request. The request takes a task
+	factory in the @see CSifTransportRequest::CreateAndExecuteL() method and uses it to
+	instantiate an appropriate task and execute it.
+	 */
+	class CSifTransportRequest : public CAsyncRequest
+		{
+	public:
+		/** Creates an instance of the CSifTransportRequest class. */
+		static void CreateAndExecuteL(TInt aFunction, CSifTransportSession* aSession, TransportTaskFactory::GenerateTask aTaskFactory, const RMessage2& aMessage);
+		
+		/** Destroys an instance of the CSifTransportRequest class. */
+		virtual ~CSifTransportRequest();
+
+	private:
+		CSifTransportRequest(TInt aFunction, CSifTransportSession* aSession, const RMessage2& aMessage);
+		void PrepareParamsL();
+		void SetupRequestL(TransportTaskFactory::GenerateTask aTaskFactory);
+		TInt AdoptFileHandle(TInt aFunction, const RMessage2& aMessage);
+		
+		void ProcessTaskResultsL();
+		void ProcessOpaqueResultsL();
+		void LaunchTask();
+
+		// Implement CAsyncRequest and CActive
+		virtual void DoCleanup();
+		virtual void DoCancel();
+		virtual void RunL();
+
+	private:
+		enum { EInvalidComponentId = -1 };
+
+		RFile iFile;
+		TInt iFunction;
+		const TSecurityContext iSecurityContext;
+		TComponentId iComponentId;
+
+		// Task to be executed by the server and its params
+		CSifTransportTask* iTask;
+		TTransportTaskParams iParams;
+		TBool iTaskComplete;
+		};
+
+	// The string below must be up to 16 characters, otherwise it will be truncated
+	_LIT(KSifTransportServerRequestError, "SifTransportError");
+
+	} // End of namespace Usif
+
+#endif	// #ifndef SIFTRANSPORTSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/siftransportserverstartup.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines a SIF Transport Server startup function
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef SIFTRANSPORTSERVERSTARTUP_H
+#define SIFTRANSPORTSERVERSTARTUP_H
+
+#include <usif/sif/siftransporttask.h>
+
+namespace Usif
+	{
+	/** Default shutdown period is 2 seconds */
+	const TInt KDefaultShutdownPeriodUs = 2 * 1000 * 1000;
+
+	/**
+	Starts a transient server. This function should be called from an executable entrypoint
+	which is the @see E32Main() function.
+	
+	@param aServerName The name of a server to be started.
+	@param aVersion The version of a server to be started.
+	@param aTaskFactory A factory function. It is used to generate tasks which implement
+	software management requests for the installer.
+	@param aShutdownPeriodUs A shutdown period after which a server shuts down itself
+	if there are no sessions.
+	*/
+	IMPORT_C TInt StartTransportServer(const TDesC& aServerName, const TVersion& aVersion, TransportTaskFactory::GenerateTask aTaskFactory, TInt aShutdownPeriodUs = KDefaultShutdownPeriodUs);
+
+	} // End of namespace Usif
+
+#endif	// #ifndef SIFTRANSPORTSERVERSTARTUP_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/siftransporttask.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,161 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* The file defines a base class for SIF Transport tasks and a factory function for them.
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef SIFTRANSPORTTASK_H
+#define SIFTRANSPORTTASK_H
+
+#include <f32file.h>
+#include <usif/sif/sifcommon.h>
+
+namespace Usif
+	{
+
+	/** An auxiliary data structure for passing task's parameters across the SIF Transport library. */
+	struct TTransportTaskParams
+		{
+		IMPORT_C TTransportTaskParams();
+		CComponentInfo* iComponentInfo;
+		TComponentId iComponentId;
+		const TDesC* iFileName;
+		RFile* iFileHandle;
+		const COpaqueNamedParams* iCustomArguments;
+		COpaqueNamedParams* iCustomResults;
+		const TSecurityContext* iSecurityContext;
+		TRequestStatus* iRequestStatus;
+		enum { EInvalidComponentId = -1 };
+		};
+
+// ===========================================================================================================
+
+	/**
+	The core class of the SIF Transport library.
+	
+	It defines an abstract interface for SIF Transport tasks. These tasks are instantiated
+	and executed to handle processing of incoming software management requests.
+	
+	Each Transport task is executed in the context of the active object. If a task issues
+	a request to an asynchronous service provider, it should use a @see TRequestStatus
+	object provided in @see TTransportTaskParams. Otherwise, tasks that don't issue
+	asynchronous requests must complete this request status themselves before they leave
+	the @see CSifTransportTask::ExecuteImplL method. In order to simplify tasks that don't
+	deal with asynchronous service providers the AutoCompletion mode has been implementd. In this
+	mode the request status is completed automatically by the base class. The AutoCompletion
+	mode is enabled by default and should be disabled in constructors of tasks that issue
+	asynchronous requests.
+	
+	An implementation of the Transport Task Factory defined below is responsible for
+	instantiating Transport tasks.
+	*/
+	class CSifTransportTask : public CBase
+		{
+	protected:
+		/**
+		Constructs the object.
+		
+		@param aParams Parameters needed to execute the task. Please
+		see @see TTransportTaskParams for details.
+		@param aAutoCompletion Enables the AutoCompletion mode. 
+		*/
+		IMPORT_C CSifTransportTask(TTransportTaskParams& aParams, TBool aAutoCompletion = ETrue);
+
+		/** Destroys the object. */
+		IMPORT_C virtual ~CSifTransportTask();
+
+		/**
+		Implementation of this abstract method is supposed to process an incoming software
+		management request.
+		
+		If this method leaves with any error code the execution of the task terminates
+		immediately. The leave code is passed to the user as a request completion code.
+		
+		@return TBool, ETrue it the processing of a software management request has been
+		completed and the task can be cleaned up, EFalse if the method must be called again
+		for further processing.
+		*/
+		IMPORT_C virtual TBool ExecuteImplL() = 0;
+		
+		/**
+		Cancels the execution of an asynchronous task.
+		
+		The default implementation is empty. Tasks that issue requests to asynchronous
+		service providers must implement this method in order to cancel them.
+		*/
+		IMPORT_C virtual void CancelImpl();
+
+		/** Gets the id of a component */
+		IMPORT_C TComponentId ComponentId() const;
+		/** Gets the file name of a package */
+		IMPORT_C const TDesC* FileName() const;
+		/** Gets the file handle of a package */
+		IMPORT_C RFile* FileHandle();
+		/** Gets custom arguments */
+		IMPORT_C const COpaqueNamedParams* CustomArguments() const;
+		/** Gets custom results */
+		IMPORT_C COpaqueNamedParams* CustomResults();
+		/** Gets security context */
+		IMPORT_C const TSecurityContext* SecurityContext() const;
+		/** Gets request status associated with the task */
+		IMPORT_C TRequestStatus* RequestStatus();
+		/** Gets component info */
+		IMPORT_C CComponentInfo* ComponentInfo();
+
+	private:
+		// These methods are used only by the CSifTransportRequest class to execute and cancel SIF Transport tasks
+		friend class CSifTransportRequest;
+		TBool Execute();
+		void Cancel();
+
+	private:
+		CSifTransportTask(const CSifTransportTask&);
+		CSifTransportTask& operator=(const CSifTransportTask&);
+		
+		TTransportTaskParams& iParams;
+		TBool iAutoCompletion;
+		};
+
+// ===========================================================================================================
+
+	/**
+	Definition of a factory function for the SIF Transport library. The @see SifTransportRequest class uses implementations
+	of this function to instantiate and execute appropriate SIF Transport tasks. It happens in response to incoming software
+	management requests.
+	*/
+	namespace TransportTaskFactory
+		{
+		enum TTaskType
+			{
+			EGetComponentInfo,
+			EInstall,
+			EUninstall,
+			EActivate,
+			EDeactivate
+			};
+
+		typedef CSifTransportTask* (*GenerateTask)(TTaskType aTaskType, TTransportTaskParams& aParams);
+		}
+
+	} // namespace Usif
+
+#endif // SIFTRANSPORTTASK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/sifutils.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines a SIF utility library.
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef SIFUTILS_H
+#define SIFUTILS_H
+#include <e32cmn.h> 
+
+namespace Usif
+	{
+	
+		/**
+			This function uninstalls a component by removing it from the SCR and deleting its files.
+			This is a synchronous API and therefore doesn't support cancellation. Hence, it is designated
+			for simple installers that don't require this functionality.
+
+			@param aComponentId The id of a component to be uninstalled
+			@leave System wide error code
+		*/
+		IMPORT_C void UninstallL(TComponentId aComponentId);
+		
+		/**
+           Generate a new AppUid to be used to register non native applications.
+		   
+		   The cenrep file of SCR contains a list of AppUid ranges preallocated to non native apps.
+           This API can be used to request a new UID from these ranges.
+
+			@return an AppUid if available, else a null object is returned.
+		 */
+		IMPORT_C TUid GenerateNewAppUidL();
+	}
+
+#endif // SIFUTILS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc/tsif.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef TSIF_IBY
+#define TSIF_IBY
+
+REM Software Install Framework
+
+define ZDRIVE \epoc32\data\Z
+define DATADRIVE \tusif\tsif\data
+
+ECOM_PLUGIN(refnativeplugin.dll,10285BC3.rsc)
+ECOM_PLUGIN(testnonnativeplugin.dll,10285BD1.rsc)
+
+file=ABI_DIR\BUILD_DIR\tusifsuite.exe							\sys\bin\tusifsuite.exe
+
+data=ZDRIVE\tusif\tsif\tsif.ini									\tusif\tsif\tsif.ini
+data=ZDRIVE\tusif\tsif\tsif.script								\tusif\tsif\tsif.script
+data=ZDRIVE\tusif\tsif\tsif_appuidgen.ini							\tusif\tsif\tsif_appuidgen.ini
+data=ZDRIVE\tusif\tsif\tsif_appuidgen.script							\tusif\tsif\tsif_appuidgen.script
+data=ZDRIVE\tusif\tsif\tnotifier.ini							\tusif\tsif\tnotifier.ini
+data=ZDRIVE\tusif\tsif\tnotifier.script							\tusif\tsif\tnotifier.script
+data=ZDRIVE\tusif\tsifintegration\tsifintegration.ini			\tusif\tsifintegration\tsifintegration.ini
+data=ZDRIVE\tusif\tsifintegration\tsifintegration.script		\tusif\tsifintegration\tsifintegration.script
+data=ZDRIVE\tusif\tsifintegration\data\compound.sifrefbinpkg	\tusif\tsifintegration\data\compound.sifrefbinpkg
+data=ZDRIVE\tusif\tswtype\tsifswtypeintegration.ini				\tusif\tswtype\tsifswtypeintegration.ini
+data=ZDRIVE\tusif\tswtype\tsifswtypeintegration.script			\tusif\tswtype\tsifswtypeintegration.script
+data=ZDRIVE\tusif\tswtype\data\test.siftestpkg					\tusif\tswtype\data\test.siftestpkg
+data=ZDRIVE\tusif\tsif\data\test.nonnativepackage.txt			DATADRIVE\test.nonnativepackage.txt
+data=ZDRIVE\tusif\tsif\data\test.overflow.txt					DATADRIVE\test.overflow.txt
+data=ZDRIVE\tusif\tsif\data\noninstallable.gif					DATADRIVE\noninstallable.gif
+
+data=ABI_DIR\BUILD_DIR\sifintegrationtestbase.sis				DATADRIVE\sifintegrationtestbase.sis
+data=ABI_DIR\BUILD_DIR\sifintegrationtestupgrade.sis			DATADRIVE\sifintegrationtestupgrade.sis
+data=ABI_DIR\BUILD_DIR\sifintegrationtestinvalidupgrade.sis		DATADRIVE\sifintegrationtestinvalidupgrade.sis
+data=ABI_DIR\BUILD_DIR\sifselfsignedwithprotecteduid.sis		DATADRIVE\sifselfsignedwithprotecteduid.sis
+data=ABI_DIR\BUILD_DIR\sifcomponentinfointegration.sis			DATADRIVE\sifcomponentinfointegration.sis
+data=ABI_DIR\BUILD_DIR\sifcomponentinfointegpu.sis				DATADRIVE\sifcomponentinfointegpu.sis
+data=ABI_DIR\BUILD_DIR\sifcomponentinfointegsp.sis				DATADRIVE\sifcomponentinfointegsp.sis
+data=ABI_DIR\BUILD_DIR\embeddingouterbase.sis					DATADRIVE\embeddingouterbase.sis
+data=ABI_DIR\BUILD_DIR\emptynameandvendor.sis					DATADRIVE\emptynameandvendor.sis
+data=ABI_DIR\BUILD_DIR\embeddingbasewithexe.sis					DATADRIVE\embeddingbasewithexe.sis
+data=ABI_DIR\BUILD_DIR\sifintegusercapsbase.sis					DATADRIVE\sifintegusercapsbase.sis
+data=ABI_DIR\BUILD_DIR\sifintegrationtestnocaps.sis				DATADRIVE\sifintegrationtestnocaps.sis
+data=ABI_DIR\BUILD_DIR\embeddingbasewithtextandinnerwithexe.sis			DATADRIVE\embeddingbasewithtextandinnerwithexe.sis
+data=ABI_DIR\BUILD_DIR\sifintegrationtestmultiplefiles.sis			DATADRIVE\sifintegrationtestmultiplefiles.sis
+data=ABI_DIR\BUILD_DIR\sifintegrationtestextensionindifferentcase.sis		DATADRIVE\sifintegrationtestextensionindifferentcase.sis
+data=ABI_DIR\BUILD_DIR\sifintegrationtestwithonlydll.sis			DATADRIVE\sifintegrationtestwithonlydll.sis
+data=ABI_DIR\BUILD_DIR\sifintegsufficientusercaps.sis				DATADRIVE\sifintegsufficientusercaps.sis
+
+data=ABI_DIR\BUILD_DIR\sifintegrationtestbasewithdrivedialog.sis				DATADRIVE\sifintegrationtestbasewithdrivedialog.sis
+data=ABI_DIR\BUILD_DIR\sifintegrationtestupgradewithdrivedialog.sis				DATADRIVE\sifintegrationtestupgradewithdrivedialog.sis
+data=ABI_DIR\BUILD_DIR\embeddedinnerwithupgrade.sis						DATADRIVE\embeddedinnerwithupgrade.sis
+data=ABI_DIR\BUILD_DIR\embeddedinnerwithupgradeouterasbasewithdrivedialog.sis			DATADRIVE\embeddedinnerwithupgradeouterasbasewithdrivedialog.sis
+
+data=ZDRIVE\tusif\tsif\data\sifgetcompapparcinfotest.sis					DATADRIVE\sifgetcompapparcinfotest.sis
+data=ZDRIVE\tusif\tsif\data\sifgetcompapparcinfotestmultilang.sis				DATADRIVE\sifgetcompapparcinfotestmultilang.sis
+data=ZDRIVE\tusif\tsif\data\sifgetcompapparcinfotestmultifiles.sis				DATADRIVE\sifgetcompapparcinfotestmultifiles.sis
+data=ZDRIVE\tusif\tsif\data\sifgetcompapparcinfotestnonapparcrsc.sis				DATADRIVE\sifgetcompapparcinfotestnonapparcrsc.sis
+data=ZDRIVE\tusif\tsif\data\sifgetcompapparcinfotestnonapparcpath.sis				DATADRIVE\sifgetcompapparcinfotestnonapparcpath.sis
+data=ZDRIVE\tusif\tsif\data\sifgetcompapparcinfotestmultiapp.sis				DATADRIVE\sifgetcompapparcinfotestmultiapp.sis
+data=ZDRIVE\tusif\tsif\data\sifgetcompapparcinfotestmultiapp_OneAppWithNonApparcRsc.sis 	DATADRIVE\sifgetcompapparcinfotestmultiapp_OneAppWithNonApparcRsc.sis
+data=ZDRIVE\tusif\tsif\data\sifgetcompapparcinfotest_corruptrsc.sis				DATADRIVE\sifgetcompapparcinfotest_corruptrsc.sis
+data=ZDRIVE\tusif\tsif\data\sifgetcompapparcinfotestembedded_innerwithdifficon.sis		DATADRIVE\sifgetcompapparcinfotestembedded_innerwithdifficon.sis
+data=ZDRIVE\tusif\tsif\data\sifgetcompapparcinfotest_nolocale.sis				DATADRIVE\sifgetcompapparcinfotest_nolocale.sis
+data=ZDRIVE\tusif\tsif\data\sifgetcompapparcinfotestmultifiles_largeandsmallextn.sis		DATADRIVE\sifgetcompapparcinfotestmultifiles_largeandsmallextn.sis
+
+data=ZDRIVE\tusif\tswtype\data\sifswtypebase.sis				\tusif\tswtype\data\sifswtypebase.sis
+data=ZDRIVE\tusif\tswtype\data\sifswtypeupgrade.sis				\tusif\tswtype\data\sifswtypeupgrade.sis
+
+data=ZDRIVE\tusif\tsif\data\swiappregintegration_case05.sis		DATADRIVE\swiappregintegration_case05.sis
+data=ZDRIVE\tusif\tsif\data\swiappregintegration_case05_SU.sis		DATADRIVE\swiappregintegration_case05_SU.sis
+data=ZDRIVE\tusif\tsif\data\swiappregintegration_case06_base.sis	DATADRIVE\swiappregintegration_case06_base.sis
+data=ZDRIVE\tusif\tsif\data\swiappregintegration_case06_sa.sis		DATADRIVE\swiappregintegration_case06_sa.sis
+data=ZDRIVE\tusif\tsif\data\swiappregintegration_case08_sa1.sis		DATADRIVE\swiappregintegration_case08_sa1.sis
+data=ZDRIVE\tusif\tsif\data\swiappregintegration_case08_sa2.sis		DATADRIVE\swiappregintegration_case08_sa2.sis
+
+REM security tests
+file=ABI_DIR\BUILD_DIR\usifsecuritytests.dll					\sys\bin\usifsecuritytests.dll
+
+data=ZDRIVE\tusif\securitytests\usifsecuritytests.ini			\tusif\securitytests\usifsecuritytests.ini
+data=ZDRIVE\tusif\securitytests\usifsecuritytests.script		\tusif\securitytests\usifsecuritytests.script
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc_private/sifcommon_internal.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,160 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sifcommon_internal.h.
+*
+*/
+
+/**
+ @file
+ @released
+ @internal
+*/
+
+#ifndef __SIFCOMMON_INTERNAL_H__
+#define __SIFCOMMON_INTERNAL_H__
+
+namespace Usif {
+
+const TUint KMaxOpaqueParamsDescriptorSize = 128;
+const TUint KMaxOpaqueParamsExternalizedSize = 512;
+
+class MOpaqueParam
+    {
+public:
+    enum TType
+        {
+        EString,
+        EStringArray,
+        EInteger,
+        EIntegerArray
+        };
+    
+    virtual void ExternalizeL(RWriteStream& aStream) const = 0;
+    virtual void InternalizeL(RReadStream& aStream) = 0;
+    virtual const HBufC& Name() const = 0;
+    virtual TType Type() const = 0;
+    virtual TInt ValueSize() const = 0;
+    virtual ~MOpaqueParam() {}
+    };
+
+class CItemBase : public CBase, public MOpaqueParam
+    {
+public:
+    void ExternalizeL(RWriteStream& aStream) const;
+    void InternalizeL(RReadStream& aStream);
+    const HBufC& Name() const;
+    TType Type() const;
+    TInt ValueSize() const;
+    ~CItemBase();
+    
+protected:
+    CItemBase(TType aType);
+    void SetValueSize(TInt aSize);
+    void VerifyExternalizedSizeForParamL(TUint aValueSize) const;
+    void SetNameL(const TDesC& aName);
+    
+private:
+    HBufC* iName;
+    TType iType;
+    TUint iSize;
+    };
+class CStringItem : public CItemBase
+    {
+public:
+    static CStringItem* NewL(RReadStream& aStream);
+    static CStringItem* NewL(const TDesC& aName, const TDesC& aValue);
+    void ExternalizeL(RWriteStream& aStream) const;
+    void InternalizeL(RReadStream& aStream);  
+    const HBufC& Name() const;
+    TType Type() const;
+    TInt ValueSize() const;
+    const TDesC& StringValue() const;
+    ~CStringItem();
+    
+private:
+    CStringItem();
+    void ConstructL(const TDesC& aName, const TDesC& aValue);
+    
+private:
+    HBufC* iString;
+    };
+
+class CStringArrayItem : public CItemBase
+    {
+public:
+    static CStringArrayItem* NewL(RReadStream& aStream);
+    static CStringArrayItem* NewL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray);
+    void ExternalizeL(RWriteStream& aStream) const;
+    void InternalizeL(RReadStream& aStream);
+    const HBufC& Name() const;
+    TType Type() const;
+    TInt ValueSize() const;
+    const RPointerArray<HBufC>& StringArrayValue() const;
+    ~CStringArrayItem();
+    
+private:
+    void ConstructL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray);
+    CStringArrayItem();
+    
+private:
+    RPointerArray<HBufC> iStringArray;    
+    };
+
+class CIntegerItem : public CItemBase
+    {
+public:
+    static CIntegerItem* NewL(RReadStream& aStream);
+    static CIntegerItem* NewL(const TDesC& aName, TInt aValue);
+    void ExternalizeL(RWriteStream& aStream) const;
+    void InternalizeL(RReadStream& aStream);
+    const HBufC& Name() const;
+    TType Type() const;
+    TInt ValueSize() const;
+    TInt IntegerValue() const;
+    ~CIntegerItem();
+    
+private:
+    CIntegerItem(TInt aValue);
+    void ConstructL(const TDesC& aName);
+    
+private:
+    TInt iInteger;
+    };
+
+class CIntegerArrayItem : public CItemBase
+    {
+public:
+    static CIntegerArrayItem* NewL(RReadStream& aStream);
+    static CIntegerArrayItem* NewL(const TDesC& aName, const RArray<TInt>& aValueArray);
+    void ExternalizeL(RWriteStream& aStream) const;
+    void InternalizeL(RReadStream& aStream);
+    const HBufC& Name() const;
+    TType Type() const;
+    TInt ValueSize() const;
+    const RArray<TInt>& IntegerArrayValue() const;
+    ~CIntegerArrayItem();
+    
+private:
+    CIntegerArrayItem();
+    void ConstructL(const TDesC& aName, const RArray<TInt>& aValueArray);
+    
+private:
+    RArray<TInt> iIntegerArray;
+    };
+
+
+} //namespace 
+
+#endif //__SIFCOMMON_INTERNAL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc_private/sifnotification_internal.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sifnotification_internal.h - Internal classes used by the Sif notifier.
+*
+*/
+
+/**
+ @file
+ @released
+ @internal
+*/
+
+#ifndef __SIFNOTIFICATION_INTERNAL_H__
+#define __SIFNOTIFICATION_INTERNAL_H__
+
+#include <e32std.h>
+#include <usif/sif/sifnotification.h>
+
+namespace Usif {
+
+const TUint KBufferSize = 100;
+const TInt KMaxNumberOfOperations = 11;//One more than the maximum number of operations that that could be tracked
+//The Global operation key, this property will contain the total number and list of all the ongoing operations.
+const TUint KSifOperationKey = 0x2002ED64; 
+//StartEnd and progress key for the first operation
+const TUint KSifFirstOperationStartEndKey = 0x2002ED65; 
+//StartEnd and progress key for the second operation
+const TUint KSifSecondOperationStartEndKey = 0x2002ED67;
+//StartEnd and progress key for the third operation
+const TUint KSifThirdOperationStartEndKey = 0x2002ED69;
+//StartEnd and progress key for the fourth operation
+const TUint KSifFourthOperationStartEndKey = 0x2002F7C4;
+//StartEnd and progress key for the fifth operation
+const TUint KSifFifthOperationStartEndKey = 0x2002F7C6;
+//StartEnd and progress key for the sixth operation
+const TUint KSifSixthOperationStartEndKey = 0x2002F7C8;
+//StartEnd and progress key for the seventh operation
+const TUint KSifSeventhOperationStartEndKey = 0x2002F7CA;
+//StartEnd and progress key for the eight operation
+const TUint KSifEightOperationStartEndKey = 0x2002F7CC;
+//StartEnd and progress key for the ninth operation
+const TUint KSifNinthOperationStartEndKey = 0x2002F7CE;
+//StartEnd and progress key for the tenth operation
+const TUint KSifTenthOperationStartEndKey = 0x2002F7D0;
+
+const TUint KSifPropertyTable [KMaxNumberOfOperations-1] = {KSifFirstOperationStartEndKey, KSifSecondOperationStartEndKey, KSifThirdOperationStartEndKey,
+                                                            KSifFourthOperationStartEndKey, KSifFifthOperationStartEndKey, KSifSixthOperationStartEndKey,
+                                                            KSifSeventhOperationStartEndKey, KSifEightOperationStartEndKey, KSifNinthOperationStartEndKey, KSifTenthOperationStartEndKey};
+
+const TInt KDeleteKeyDelay = 2000000; // 2 seconds
+
+const TInt KStartBufLength = 100;
+const TInt KProgressBufLength = 25;
+
+_LIT_SECURITY_POLICY_C1(KSecurityPolicyNone, ECapability_None);
+_LIT_SECURITY_POLICY_C1(KSecurityPolicyWDD, ECapabilityWriteDeviceData);
+
+/**
+ * This class will be used internally to start timer after publishing the completion data.
+ * The property which holds the Start-End and Progress data will be deleted after this timer.
+ */
+NONSHARABLE_CLASS(CDeleteKeyTimer) : public CTimer
+    {
+public:
+    static CDeleteKeyTimer* NewL(const TUint aKey);
+    CDeleteKeyTimer();
+    ~CDeleteKeyTimer();
+    void Start();
+private:
+    void ConstructL(const TUint aKey);
+    void RunL();
+    TInt RunError(TInt aError);
+    TUint iKey;//StartEnd key to be deleted
+    };
+
+
+NONSHARABLE_CLASS(CSifOperationKey) : public CBase
+    /**
+     * This class will be used internally to hold contents of KSIFOperationKey
+     */
+    {
+public:
+    IMPORT_C static CSifOperationKey* NewL();
+    IMPORT_C static CSifOperationKey* NewLC();    
+    static CSifOperationKey* NewL(RReadStream& aStream);
+    ~CSifOperationKey(); 
+    void AddKeyL(TUint aKey);
+    void DeleteKey(TUint aPos);
+    const RArray<TUint>& StartEndKeys() const;
+    IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+private:
+    void InternalizeL(RReadStream& aStream);
+    CSifOperationKey();
+    void ConstructL();
+
+private:
+    RArray<TUint> iStartEndKeyArray; 
+    };
+
+
+/**
+ * This class will be used internally to subscribe to changes in individual operations requested by the client.
+ */
+class CSifNotifierBase : public CActive
+    {
+public:
+	enum TNotifierType
+        {
+        EStartEndNotifier =1,
+        EProgressNotifier
+        };
+
+    IMPORT_C static CSifNotifierBase* NewL(MSifOperationsHandler& aHandler, TUint aKey, TNotifierType aType);
+    IMPORT_C static CSifNotifierBase* NewLC(MSifOperationsHandler& aHandler, TUint aKey, TNotifierType aType);
+    IMPORT_C TUint Key();
+    IMPORT_C ~CSifNotifierBase();
+    
+private:
+    CSifNotifierBase(MSifOperationsHandler& aHandler, TUint aKey, TNotifierType aType);
+    void WaitForChangeL();
+    void ConstructL();
+    void RunL();
+    TInt RunError(TInt aError);
+    void DoCancel();
+    
+private:
+    MSifOperationsHandler& iHandler; 
+    TUint iKey;
+    RProperty iProperty;
+    TInt iBufferSize;
+    TNotifierType iType;
+    };
+
+
+} //namespace 
+
+#endif //__SIFNOTIFICATION_INTERNAL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/sif.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements the RSoftwareInstall API.
+*
+*/
+
+
+#include <usif/sif/sif.h>
+#include "sifservercommon.h"
+
+using namespace Usif;
+
+EXPORT_C RSoftwareInstall::RSoftwareInstall()
+	{
+	}
+
+EXPORT_C TInt RSoftwareInstall::Connect()
+	{
+	TVersion ver = Version();
+	return iTransport.Connect(KSifServerName, ver, KServerImageName, KSifServerUid);
+	}
+
+EXPORT_C void RSoftwareInstall::Close()
+	{
+	iTransport.Close();
+	}
+
+EXPORT_C void RSoftwareInstall::GetComponentInfo(const TDesC& aFileName, CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	iTransport.GetComponentInfo(aFileName, aComponentInfo, aStatus);
+	}
+
+EXPORT_C void RSoftwareInstall::GetComponentInfo(RFile& aFileHandle, CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	iTransport.GetComponentInfo(aFileHandle, aComponentInfo, aStatus);
+	}
+
+EXPORT_C void RSoftwareInstall::Install(const TDesC& aFileName, TRequestStatus& aStatus, TBool aExclusiveOperation)
+	{
+	iTransport.Install(aFileName, aStatus, aExclusiveOperation);
+	}
+
+EXPORT_C void RSoftwareInstall::Install(const TDesC& aFileName, const COpaqueNamedParams& aArguments,
+										COpaqueNamedParams& aResults, TRequestStatus& aStatus,
+										TBool aExclusiveOperation)
+	{
+	iTransport.Install(aFileName, aArguments, aResults, aStatus, aExclusiveOperation);
+	}
+
+EXPORT_C void RSoftwareInstall::Install(RFile& aFileHandle, TRequestStatus& aStatus, TBool aExclusiveOperation)
+	{
+	iTransport.Install(aFileHandle, aStatus, aExclusiveOperation);
+	}
+
+EXPORT_C void RSoftwareInstall::Install(RFile& aFileHandle, const COpaqueNamedParams& aArguments,
+										COpaqueNamedParams& aResults, TRequestStatus& aStatus,
+										TBool aExclusiveOperation)
+	{
+	iTransport.Install(aFileHandle, aArguments, aResults, aStatus, aExclusiveOperation);
+	}
+
+EXPORT_C void RSoftwareInstall::Uninstall(TComponentId aComponentId, TRequestStatus& aStatus, TBool aExclusiveOperation)
+	{
+	iTransport.Uninstall(aComponentId, aStatus, aExclusiveOperation);
+	}
+
+EXPORT_C void RSoftwareInstall::Uninstall(TComponentId aComponentId, const COpaqueNamedParams& aArguments,
+										COpaqueNamedParams& aResults, TRequestStatus& aStatus,
+										TBool aExclusiveOperation)
+	{
+	iTransport.Uninstall(aComponentId, aArguments, aResults, aStatus, aExclusiveOperation);
+	}
+
+EXPORT_C void RSoftwareInstall::Activate(TComponentId aComponentId, TRequestStatus& aStatus)
+	{
+	iTransport.Activate(aComponentId, aStatus);
+	}
+
+	EXPORT_C void RSoftwareInstall::Deactivate(TComponentId aComponentId, TRequestStatus& aStatus)
+	{
+	iTransport.Deactivate(aComponentId, aStatus);
+	}
+
+EXPORT_C void RSoftwareInstall::CancelOperation()
+	{
+	iTransport.CancelOperation();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/sifcommon.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1264 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <f32file.h>
+#include <usif/sif/sifcommon.h>
+#include <s32mem.h>
+#include <scs/cleanuputils.h>
+#include <scs/streamingarray.h>
+#include "sifcommon_internal.h"
+
+using namespace Usif;
+
+/**
+	The COpaqueNamedParams and CComponentInfo containers implement the deferred internalization
+	logic. This mechanism is necessary because these containers may be passed through IPC between
+	the SIF client and server. Hence, they must be externalized and internalized on both sides.
+	However, The SIF client doesn't implement an active object and therefore it cannot internalize
+	parameters returned by the SIF server. This de-serialization is done by the deferred internalization
+	logic when the user accesses them first time.
+	Hence, all the get methods, for example Name(), GetIntByName(), StringByNameL(), call the
+	InternalizeFromExternalBufferL() method which calls ConstInternalizeL() in order to unpack
+	the data recived from the SIF server if there is any. ConstInternalizeL() is a const method despite
+	the fact it modifies class'es members. This is done to keep the get methods const as expected by
+	the users.
+ */
+
+// ##########################################################################################
+
+namespace
+	{
+	TInt PackCapabilitySet(const TCapabilitySet& aCapSet)
+		{
+		TInt caps=0;
+		for (TInt c=0; c<ECapability_Limit; ++c)
+			{
+			if (aCapSet.HasCapability(TCapability(c)))
+				{
+				caps += (1<<c);
+				}
+			}
+		return caps;
+		}
+
+	void UnpackCapabilitySet(TInt aPackedCapSet, TCapabilitySet& aCapSet)
+		{
+		for (TInt c=0; c<ECapability_Limit; ++c)
+			{
+			const TInt cap = 1<<c;
+			if (aPackedCapSet&cap)
+				{
+				aCapSet.AddCapability(TCapability(c));
+				}
+			}
+		}
+	}
+
+// ##########################################################################################
+ 
+EXPORT_C TSecurityContext::TSecurityContext(const RMessage2& aMessage): iMsg(aMessage)
+	{
+	}
+
+EXPORT_C TBool TSecurityContext::HasCapability(TCapability aCapability) const
+	{
+	return iMsg.HasCapability(aCapability);
+	}
+
+EXPORT_C void TSecurityContext::HasCapabilityL(TCapability aCapability) const
+	{
+	iMsg.HasCapabilityL(aCapability);
+	}
+
+EXPORT_C TSecureId TSecurityContext::SecureId() const
+	{
+	return iMsg.SecureId();
+	}
+
+// ##########################################################################################
+
+CComponentInfo::CApplicationInfo::CApplicationInfo()
+    {
+    }
+
+EXPORT_C CComponentInfo::CApplicationInfo::~CApplicationInfo()
+    {
+    delete iName;
+    delete iGroupName;
+    delete iIconFileName;
+    }
+
+EXPORT_C CComponentInfo::CApplicationInfo* CComponentInfo::CApplicationInfo::NewLC(const TUid& aAppUid, const TDesC& aName, const TDesC& aGroupName, const TDesC& aIconFileName)
+    {
+        _LIT(emptyString,"");
+        // Leave if aName, aGroupName or aIconFileName exceeds KMaxDescriptorLength
+       if ((&aName != NULL && aName.Length() > KMaxDescriptorLength) || 
+               (&aGroupName != NULL && aGroupName.Length() > KMaxDescriptorLength) ||
+               (&aIconFileName != NULL && aIconFileName.Length() > KMaxDescriptorLength))
+            {
+            User::Leave(KErrOverflow);
+            }
+        
+       CComponentInfo::CApplicationInfo* self = new (ELeave) CComponentInfo::CApplicationInfo();
+       CleanupStack::PushL(self);
+
+        self->iAppUid = aAppUid;  
+        if(&aName == NULL)
+            {
+            self->iName = emptyString().AllocL();
+            }
+        else
+            {
+            self->iName = aName.AllocL();
+            }
+   
+        if(&aGroupName == NULL)
+            {
+            self->iGroupName = emptyString().AllocL();
+            }
+        else
+            {
+            self->iGroupName = aGroupName.AllocL();
+            }
+        
+        if(&aIconFileName == NULL)
+            {
+            self->iIconFileName = emptyString().AllocL();
+            }
+        else
+            {
+            self->iIconFileName = aIconFileName.AllocL();
+            }     
+    
+        return self;
+    }
+
+EXPORT_C const TUid& CComponentInfo::CApplicationInfo::AppUid() const
+    {
+    return iAppUid;
+    }
+
+EXPORT_C const TDesC& CComponentInfo::CApplicationInfo::Name() const
+    {
+    return *iName;
+    }
+
+EXPORT_C const TDesC& CComponentInfo::CApplicationInfo::GroupName() const
+    {
+    return *iGroupName;
+    }
+
+EXPORT_C const TDesC& CComponentInfo::CApplicationInfo::IconFileName() const            
+    {
+    return *iIconFileName;
+    }
+
+CComponentInfo::CApplicationInfo* CComponentInfo::CApplicationInfo::NewL(RReadStream& aStream)
+    {    
+    CApplicationInfo* self = new (ELeave) CApplicationInfo();
+    CleanupStack::PushL(self);
+    
+    self->iAppUid = TUid::Uid(aStream.ReadInt32L());
+    self->iName = HBufC::NewL(aStream, KMaxDescriptorLength);
+    self->iGroupName = HBufC::NewL(aStream, KMaxDescriptorLength);
+    self->iIconFileName = HBufC::NewL(aStream, KMaxDescriptorLength);
+    
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CComponentInfo::CApplicationInfo::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L(iAppUid.iUid);    
+    aStream << *iName;
+    aStream << *iGroupName;
+    aStream << *iIconFileName;
+    }
+            
+// ##########################################################################################
+
+CComponentInfo::CNode::CNode() : iAuthenticity(ENotAuthenticated)
+	{
+	iUserGrantableCaps.SetEmpty();
+	}
+
+EXPORT_C CComponentInfo::CNode::~CNode()
+	{
+	delete iSoftwareTypeName;
+	delete iComponentName;
+	delete iGlobalComponentId;
+	delete iVersion;
+	delete iVendor;
+
+	iApplications.Close();
+	iChildren.Close();	
+	}
+
+EXPORT_C CComponentInfo::CNode* CComponentInfo::CNode::NewLC(const TDesC& aSoftwareTypeName, const TDesC& aComponentName,
+															const TDesC& aVersion, const TDesC& aVendor, TScomoState aScomoState,
+															TInstallStatus aInstallStatus, TComponentId aComponentId,
+															const TDesC& aGlobalComponentId, TAuthenticity aAuthenticity,
+															const TCapabilitySet& aUserGrantableCaps, TInt aMaxInstalledSize,
+															TBool aHasExe, TBool aIsDriveSelectionRequired,
+															RPointerArray<CApplicationInfo>* aApplications, RPointerArray<CNode>* aChildren)
+	{
+	// We leave if aSoftwareTypeName, aComponentName, aVersion, aVendor or aGlobalComponentId exceeds KMaxDescriptorLength
+	if (aSoftwareTypeName.Length() > KMaxDescriptorLength ||
+		aComponentName.Length() > KMaxDescriptorLength ||
+		aVersion.Length() > KMaxDescriptorLength ||
+		aVendor.Length() > KMaxDescriptorLength ||
+		aGlobalComponentId.Length() > KMaxDescriptorLength)
+		{
+		User::Leave(KErrOverflow);
+		}
+		
+
+	// Since the max heap buffer length is 2K, which is more than (num of parameters * KMaxDescriptorLength), we just assert this condition
+	__ASSERT_ALWAYS(aSoftwareTypeName.Length() + aComponentName.Length() + aVersion.Length() + aVendor.Length() + 
+					aGlobalComponentId.Length() <= KMaxHeapBufLength, User::Leave(KErrOverflow));
+
+	// Create an instance of CNode
+	CNode* self = new (ELeave) CNode();
+	CleanupStack::PushL(self);
+
+	// Copy Software Type Name, Component Name, Version, aVendor, aGlobalComponentId
+	self->iSoftwareTypeName = aSoftwareTypeName.AllocL();
+	self->iComponentName = aComponentName.AllocL();
+	self->iVersion = aVersion.AllocL();
+	self->iVendor = aVendor.AllocL();
+	self->iGlobalComponentId = aGlobalComponentId.AllocL();
+
+	// Others
+	self->iScomoState = aScomoState;
+	self->iInstallStatus = aInstallStatus;
+	self->iComponentId = aComponentId;
+	self->iAuthenticity = aAuthenticity;
+	self->iUserGrantableCaps = aUserGrantableCaps;
+	self->iMaxInstalledSize = aMaxInstalledSize;
+	self->iHasExe = aHasExe;
+	self->iIsDriveSelectionRequired = aIsDriveSelectionRequired;
+
+	if(aApplications != NULL)
+        {
+        for (TInt i=aApplications->Count()-1; i>=0; --i)
+            {
+            self->iApplications.InsertL((*aApplications)[i], 0);
+            aApplications->Remove(i);
+            }
+        }
+	
+	// Embedded Components
+	if(aChildren != NULL)
+		{
+		for (TInt i=aChildren->Count()-1; i>=0; --i)
+			{
+			self->iChildren.InsertL((*aChildren)[i], 0);
+			aChildren->Remove(i);
+			}
+		}
+	
+	return self;
+	}
+
+EXPORT_C void CComponentInfo::CNode::AddChildL(CComponentInfo::CNode* aChild)
+	{
+	if (aChild == NULL)
+		{
+		User::Leave(KErrArgument);
+		}
+
+	iChildren.AppendL(aChild);
+	}
+
+CComponentInfo::CNode* CComponentInfo::CNode::NewL(RReadStream& aStream)
+	{
+	// Create an instance of CNode
+	CNode* self = new (ELeave) CNode();
+	CleanupStack::PushL(self);
+	
+	self->iSoftwareTypeName = HBufC::NewL(aStream, KMaxDescriptorLength);
+	self->iComponentName = HBufC::NewL(aStream, KMaxDescriptorLength);
+	self->iVersion = HBufC::NewL(aStream, KMaxDescriptorLength);
+	self->iVendor = HBufC::NewL(aStream, KMaxDescriptorLength);
+	self->iGlobalComponentId = HBufC::NewL(aStream, KMaxDescriptorLength);
+	self->iScomoState = static_cast<TScomoState>(aStream.ReadInt32L());
+	self->iInstallStatus = static_cast<TInstallStatus>(aStream.ReadInt32L());
+	self->iComponentId = aStream.ReadInt32L();
+	self->iAuthenticity = static_cast<TAuthenticity>(aStream.ReadInt32L());
+	UnpackCapabilitySet(aStream.ReadInt32L(), self->iUserGrantableCaps);
+	self->iMaxInstalledSize = aStream.ReadInt32L();
+	self->iHasExe = aStream.ReadInt32L();
+	self->iIsDriveSelectionRequired = aStream.ReadInt32L();	
+	
+	const TInt numApplications = aStream.ReadInt32L();
+    for (TInt i=0; i<numApplications; ++i)
+        {
+        CApplicationInfo* app = CApplicationInfo::NewL(aStream);
+        CleanupStack::PushL(app);
+        self->iApplications.AppendL(app);
+        CleanupStack::Pop(app);
+        }
+	
+	const TInt numChildren = aStream.ReadInt32L();
+	for (TInt i=0; i<numChildren; ++i)
+		{
+		CNode* node = CNode::NewL(aStream);
+		CleanupStack::PushL(node);
+		self->iChildren.AppendL(node);
+		CleanupStack::Pop(node);
+		}
+	
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CComponentInfo::CNode::ExternalizeL(RWriteStream& aStream) const
+	{
+	ASSERT (iSoftwareTypeName!=NULL && iComponentName!=NULL && iVersion!=NULL && iVendor!=NULL && iGlobalComponentId!=NULL);
+
+	aStream << *iSoftwareTypeName;
+	aStream << *iComponentName;
+	aStream << *iVersion;
+	aStream << *iVendor;
+	aStream << *iGlobalComponentId;
+
+	aStream.WriteInt32L(iScomoState);
+	aStream.WriteInt32L(iInstallStatus);
+	aStream.WriteInt32L(iComponentId);
+	aStream.WriteInt32L(static_cast<TInt>(iAuthenticity));
+	aStream.WriteInt32L(PackCapabilitySet(iUserGrantableCaps));
+	aStream.WriteInt32L(iMaxInstalledSize);
+	aStream.WriteInt32L(iHasExe);
+	aStream.WriteInt32L(iIsDriveSelectionRequired);
+	
+	const TInt numApplications = iApplications.Count();
+    aStream.WriteInt32L(numApplications);
+    for (TInt i=0; i<numApplications; ++i)
+        {
+        iApplications[i]->ExternalizeL(aStream);
+        }
+	
+	const TInt numChildren = iChildren.Count();
+	aStream.WriteInt32L(numChildren);
+	for (TInt i=0; i<numChildren; ++i)
+		{
+		iChildren[i]->ExternalizeL(aStream);
+		}
+	}
+
+EXPORT_C const TDesC& CComponentInfo::CNode::SoftwareTypeName() const
+	{
+	return *iSoftwareTypeName;
+	}
+
+EXPORT_C const TDesC& CComponentInfo::CNode::ComponentName() const
+	{
+	return *iComponentName;
+	}
+
+EXPORT_C const TDesC& CComponentInfo::CNode::Version() const
+	{
+	return *iVersion;
+	}
+
+EXPORT_C const TDesC& CComponentInfo::CNode::Vendor() const
+	{
+	return *iVendor;
+	}
+
+EXPORT_C TScomoState CComponentInfo::CNode::ScomoState() const
+	{
+	return iScomoState;
+	}
+
+EXPORT_C TInstallStatus CComponentInfo::CNode::InstallStatus() const
+	{
+	return iInstallStatus;
+	}
+
+EXPORT_C TComponentId CComponentInfo::CNode::ComponentId() const
+	{
+	return iComponentId;
+	}
+
+EXPORT_C const TDesC& CComponentInfo::CNode::GlobalComponentId() const
+	{
+	return *iGlobalComponentId;
+	}
+
+EXPORT_C TAuthenticity CComponentInfo::CNode::Authenticity() const
+	{
+	return iAuthenticity;
+	}
+
+EXPORT_C const TCapabilitySet& CComponentInfo::CNode::UserGrantableCaps() const
+	{
+	return iUserGrantableCaps;
+	}
+
+EXPORT_C TInt CComponentInfo::CNode::MaxInstalledSize() const
+	{
+	return iMaxInstalledSize;
+	}
+
+EXPORT_C TBool CComponentInfo::CNode::HasExecutable() const
+	{
+	return iHasExe;
+	}
+
+EXPORT_C TBool CComponentInfo::CNode::DriveSeletionRequired() const
+    {
+    return iIsDriveSelectionRequired;
+    }
+
+EXPORT_C const RPointerArray<CComponentInfo::CApplicationInfo>& CComponentInfo::CNode::Applications() const
+    {
+    return iApplications;
+    }
+
+EXPORT_C const RPointerArray<CComponentInfo::CNode>& CComponentInfo::CNode::Children() const
+	{
+	return iChildren;
+	}
+
+// ##########################################################################################
+
+CComponentInfo::CComponentInfo() : iExternalBufferPtr(NULL, 0, 0)
+	{
+	}
+
+EXPORT_C CComponentInfo::~CComponentInfo()
+	{
+	delete iRootNode;
+
+	CleanupExternalBuffer();
+	}
+
+EXPORT_C CComponentInfo* CComponentInfo::NewL()
+	{
+	return new (ELeave) CComponentInfo;
+	}
+
+EXPORT_C CComponentInfo* CComponentInfo::NewLC()
+	{
+	CComponentInfo* self = new (ELeave) CComponentInfo;
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+EXPORT_C const CComponentInfo::CNode& CComponentInfo::RootNodeL() const
+	{
+	InternalizeFromExternalBufferL();
+	
+	if (iRootNode == NULL)
+		{
+		User::Leave(KErrNotFound);
+		}
+	
+	return *iRootNode;
+	}
+
+EXPORT_C void CComponentInfo::SetRootNodeL(CNode* aRootNode)
+	{
+	InternalizeFromExternalBufferL();
+	
+	if (aRootNode == NULL)
+		{
+		User::Leave(KErrArgument);
+		}
+	
+	delete iRootNode;
+	iRootNode = aRootNode;
+	}
+
+EXPORT_C void CComponentInfo::SetRootNodeAsChildL(CNode& aParentNode)
+	{
+	InternalizeFromExternalBufferL();
+	
+	if (iRootNode == NULL)
+		{
+		User::Leave(KErrNotFound);
+		}
+	
+	aParentNode.AddChildL(iRootNode);
+	iRootNode = NULL;
+	}
+
+EXPORT_C void CComponentInfo::ExternalizeL(RWriteStream& aStream) const
+	{
+	InternalizeFromExternalBufferL();
+	
+	aStream.WriteInt8L(iRootNode != NULL);
+	
+	if (iRootNode != NULL)
+		{
+		iRootNode->ExternalizeL(aStream);
+		}
+	}
+
+void CComponentInfo::ConstInternalizeL(RReadStream& aStream) const
+	{
+	CNode*& rootNode = const_cast<CNode*&>(iRootNode);
+	delete rootNode;
+	rootNode = NULL;
+	
+	if (aStream.ReadInt8L() != 0)
+		{
+		rootNode = CNode::NewL(aStream);
+		}
+	}
+
+void CComponentInfo::CleanupExternalBuffer() const
+	{
+	delete iExternalBuffer;
+	iExternalBuffer = NULL;
+	iDeferredInternalization = EFalse;
+	}
+
+void CComponentInfo::InternalizeFromExternalBufferL() const
+	{
+	if (iDeferredInternalization)
+		{
+		iDeferredInternalization = EFalse;
+
+		RDesReadStream rs(*iExternalBuffer);
+		CleanupClosePushL(rs);
+		ConstInternalizeL(rs);
+		CleanupStack::PopAndDestroy(&rs);
+
+		CleanupExternalBuffer();
+		}
+	}
+
+EXPORT_C void CComponentInfo::PrepareForIpcL(TIpcArgs& aIpcArgs, TInt aIndex)
+	{
+	delete iExternalBuffer;
+	iExternalBuffer = NULL;
+
+	iExternalBuffer = HBufC8::NewL(KMaxComponentInfoStreamedSize);
+	iExternalBufferPtr.Set(iExternalBuffer->Des());
+	
+	aIpcArgs.Set(aIndex, &iExternalBufferPtr);
+	
+	iDeferredInternalization = ETrue;
+	}
+
+// ##########################################################################################
+
+COpaqueNamedParams::COpaqueNamedParams()
+	: iExternalBuffer(NULL), iExternalBufferPtr(NULL, 0, 0), iDeferredInternalization(EFalse), iExternalizedSize(2*sizeof(TInt))
+	{
+	}
+
+EXPORT_C COpaqueNamedParams::~COpaqueNamedParams()
+	{
+	Cleanup();
+	iParams.Close();
+	CleanupExternalBuffer();
+	}
+
+EXPORT_C COpaqueNamedParams* COpaqueNamedParams::NewL()
+	{
+	return new (ELeave) COpaqueNamedParams;
+	}
+
+EXPORT_C COpaqueNamedParams* COpaqueNamedParams::NewLC()
+	{
+	COpaqueNamedParams* self = new (ELeave) COpaqueNamedParams;
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+void COpaqueNamedParams::VerifyExternalizedSizeForNewParamArrayL(TInt aNameSize, TInt aValueSize) const
+	{
+	const TInt load = 2*sizeof(TInt) + aNameSize + aValueSize;
+	if (aNameSize > KMaxOpaqueParamsDescriptorSize || iExternalizedSize + load > KMaxOpaqueParamsExternalizedSize)
+		{
+		User::Leave(KErrOverflow);
+		}
+	iExternalizedSize += load;
+	}
+
+void COpaqueNamedParams::VerifyExternalizedSizeForExistingParamArrayL(TInt aOldValueSize, TInt aNewValueSize) const
+	{
+	const TInt diff = aNewValueSize - aOldValueSize;
+	if (iExternalizedSize + diff > KMaxOpaqueParamsExternalizedSize)
+		{
+		User::Leave(KErrOverflow);
+		}
+	iExternalizedSize += diff;
+	}
+
+EXPORT_C void COpaqueNamedParams::AddStringL(const TDesC& aName, const TDesC& aValue)
+	{
+	CStringItem* stringItem = CStringItem::NewL(aName, aValue);
+	CleanupStack::PushL(stringItem);
+	
+	AddOpaqueParamL(stringItem);
+    CleanupStack::Pop(stringItem);
+	}
+
+EXPORT_C void COpaqueNamedParams::AddStringArrayL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray)
+    {
+    CStringArrayItem* stringArray = CStringArrayItem::NewL(aName, aValueArray);
+    CleanupStack::PushL(stringArray);
+    
+    AddOpaqueParamL(stringArray);
+    CleanupStack::Pop(stringArray);
+    }
+
+EXPORT_C void COpaqueNamedParams::AddIntL(const TDesC& aName, TInt aValue)
+	{
+	CIntegerItem* integer = CIntegerItem::NewL(aName, aValue);
+    CleanupStack::PushL(integer);
+    
+    AddOpaqueParamL(integer);
+    CleanupStack::Pop(integer);	
+	}
+
+EXPORT_C void COpaqueNamedParams::AddIntArrayL(const TDesC& aName, const RArray<TInt>& aValueArray)
+    {
+    CIntegerArrayItem* integerArray = CIntegerArrayItem::NewL(aName, aValueArray);
+    CleanupStack::PushL(integerArray);
+    
+    AddOpaqueParamL(integerArray);
+    CleanupStack::Pop(integerArray);     
+    }
+
+void COpaqueNamedParams::AddOpaqueParamL(MOpaqueParam* aItemBase)
+    {
+    const TInt count = iParams.Count();
+        
+    for (TInt i=0; i<count; ++i)
+        {
+        if (iParams[i]->Name().CompareF(aItemBase->Name()) == 0)
+            {
+            VerifyExternalizedSizeForExistingParamArrayL(iParams[i]->ValueSize(), aItemBase->ValueSize());
+            
+            delete iParams[i];
+            iParams[i] = aItemBase;
+            return;
+            }
+        }
+
+    VerifyExternalizedSizeForNewParamArrayL(aItemBase->Name().Size(), aItemBase->ValueSize());
+    iParams.AppendL(aItemBase); 
+    }
+
+EXPORT_C void COpaqueNamedParams::GetNamesL(RPointerArray<HBufC>& aNames) const
+	{
+	InternalizeFromExternalBufferL();
+
+	const TInt len = iParams.Count();
+	for (TInt i=0; i<len; ++i)
+		{
+		HBufC* name = iParams[i]->Name().AllocLC();
+		aNames.AppendL(name);
+		CleanupStack::Pop(name);
+		}
+	}
+	
+EXPORT_C void COpaqueNamedParams::ExternalizeL(RWriteStream& aStream) const
+	{
+	InternalizeFromExternalBufferL();
+
+	TInt count = iParams.Count();
+	aStream.WriteInt32L(count);
+	for (TInt i=0; i<count; ++i)
+		{
+		aStream.WriteInt32L(iParams[i]->Type());
+		iParams[i]->ExternalizeL(aStream);
+		}
+	
+	aStream.WriteInt32L(iExternalizedSize);
+	}
+
+EXPORT_C void COpaqueNamedParams::InternalizeL(RReadStream& aStream)
+	{
+	ConstInternalizeL(aStream);
+	}
+
+void COpaqueNamedParams::ConstInternalizeL(RReadStream& aStream) const
+	{
+    ConstCleanup();
+	RPointerArray<MOpaqueParam>& refParams = const_cast<RPointerArray<MOpaqueParam>& >(iParams);
+	
+	TInt count = aStream.ReadInt32L();
+	for (TInt i=0; i<count; ++i)
+		{
+		MOpaqueParam::TType type = static_cast<MOpaqueParam::TType>(aStream.ReadInt32L());
+	    MOpaqueParam* param(0);
+		switch(type)
+		    {
+		    case MOpaqueParam::EString:
+		        param = CStringItem::NewL(aStream);
+		        break;
+		        
+            case MOpaqueParam::EStringArray:
+                param = CStringArrayItem::NewL(aStream);
+                break;
+                
+            case MOpaqueParam::EInteger:
+                param = CIntegerItem::NewL(aStream);
+                break;     
+                
+            case MOpaqueParam::EIntegerArray:
+                param = CIntegerArrayItem::NewL(aStream);
+                break;     
+                
+            default:
+                User::Leave(KErrCorrupt);
+		    }
+		CleanupStack::PushL(param);
+		refParams.AppendL(param);
+		CleanupStack::Pop(param);
+		}
+		
+	iExternalizedSize = aStream.ReadInt32L();
+	}
+
+EXPORT_C void COpaqueNamedParams::PrepareArgumentsForIpcL(TIpcArgs& aIpcArgs, TInt aIndex) const
+	{
+	delete iExternalBuffer;
+	iExternalBuffer = NULL;
+	iExternalBuffer = HBufC8::NewL(iExternalizedSize);
+	iExternalBufferPtr.Set(iExternalBuffer->Des());
+	
+	RDesWriteStream ws(iExternalBufferPtr);
+	CleanupClosePushL(ws);
+	ExternalizeL(ws);
+	ws.CommitL();
+	CleanupStack::PopAndDestroy(&ws);
+	
+	aIpcArgs.Set(aIndex, &iExternalBufferPtr);
+	}
+
+EXPORT_C void COpaqueNamedParams::PrepareResultsForIpcL(TIpcArgs& aIpcArgs, TInt aIndex)
+	{
+	delete iExternalBuffer;
+	iExternalBuffer = NULL;
+	iExternalBuffer = HBufC8::NewL(KMaxOpaqueParamsExternalizedSize);
+	iExternalBufferPtr.Set(iExternalBuffer->Des());
+	
+	RDesWriteStream ws(iExternalBufferPtr);
+	CleanupClosePushL(ws);
+	ws.WriteInt32L(0); // Write the initial count of results, so that the object will be valid even if no results are added
+	CleanupStack::PopAndDestroy(&ws);
+	
+	aIpcArgs.Set(aIndex, &iExternalBufferPtr);
+	
+	iDeferredInternalization = ETrue;
+	}
+
+void COpaqueNamedParams::InternalizeFromExternalBufferL() const
+	{
+	if (iDeferredInternalization)
+		{
+		iDeferredInternalization = EFalse;
+		
+		RDesReadStream rs(*iExternalBuffer);
+		CleanupClosePushL(rs);
+		ConstInternalizeL(rs);
+		CleanupStack::PopAndDestroy(&rs);
+
+		CleanupExternalBuffer();
+		}
+	}
+
+EXPORT_C const TDesC& COpaqueNamedParams::StringByNameL(const TDesC& aName) const
+	{
+	InternalizeFromExternalBufferL();
+	
+	const TInt count = iParams.Count();
+	for (TInt i=0; i<count; ++i)
+		{
+		if (iParams[i]->Type() == MOpaqueParam::EString && iParams[i]->Name().CompareF(aName) == 0)
+			{
+			CStringItem* string = static_cast<CStringItem*>(iParams[i]);
+			return string->StringValue();
+			}
+		}
+	
+	return KNullDesC;    
+	}
+
+EXPORT_C const RPointerArray<HBufC>& COpaqueNamedParams::StringArrayByNameL(const TDesC& aName) const
+    {
+    InternalizeFromExternalBufferL();
+  
+    const TInt count = iParams.Count();
+    TInt i;
+    for (i=0; i<count; ++i)
+        {
+        if (iParams[i]->Type() == MOpaqueParam::EStringArray && iParams[i]->Name().CompareF(aName) == 0)
+            {
+            break;
+            }
+        }
+    
+    if(i == count)
+        {
+        User::Leave(KErrNotFound); 
+        }
+    CStringArrayItem* stringArray = static_cast<CStringArrayItem*>(iParams[i]);  
+    return stringArray->StringArrayValue();
+    }
+
+EXPORT_C TBool COpaqueNamedParams::GetIntByNameL(const TDesC& aName, TInt& aValue) const
+	{
+	InternalizeFromExternalBufferL();
+	
+    const TInt count = iParams.Count();
+    for (TInt i=0; i<count; ++i)
+        {
+        if (iParams[i]->Type() == MOpaqueParam::EInteger && iParams[i]->Name().CompareF(aName) == 0)
+            {
+            CIntegerItem* integer = static_cast<CIntegerItem*>(iParams[i]); 
+            aValue = integer->IntegerValue();
+            return ETrue;
+            }
+        }
+    
+    return EFalse;
+	}
+
+EXPORT_C TInt COpaqueNamedParams::IntByNameL(const TDesC& aName) const
+	{
+	InternalizeFromExternalBufferL();
+
+	TInt val;
+	if (!GetIntByNameL(aName, val))
+		{
+		User::Leave(KErrNotFound);
+		}
+	return val;
+	}
+
+EXPORT_C  const RArray<TInt>& COpaqueNamedParams::IntArrayByNameL(const TDesC& aName) const
+    {  
+    InternalizeFromExternalBufferL();
+  
+    const TInt count = iParams.Count();
+    TInt i;
+    for (i=0; i<count; ++i)
+        {
+        if (iParams[i]->Type() == MOpaqueParam::EIntegerArray && iParams[i]->Name().CompareF(aName) == 0)
+            {
+            break;
+            }
+        }
+    
+    if(i == count)
+        {
+        User::Leave(KErrNotFound); 
+        }
+    CIntegerArrayItem* integerArray = static_cast<CIntegerArrayItem*>(iParams[i]);      
+    return integerArray->IntegerArrayValue();
+    }
+
+EXPORT_C TInt COpaqueNamedParams::CountL() const
+	{
+	InternalizeFromExternalBufferL();
+	return iParams.Count();
+	}
+	
+EXPORT_C void COpaqueNamedParams::Cleanup()
+	{
+	ConstCleanup();
+	}
+
+void COpaqueNamedParams::ConstCleanup() const
+	{
+	// Cleanup internal params
+	iExternalizedSize = 2*sizeof(TInt);
+	
+	RPointerArray<MOpaqueParam>& refParams = const_cast<RPointerArray<MOpaqueParam>&>(iParams);
+	refParams.ResetAndDestroy();
+	}
+
+	void COpaqueNamedParams::CleanupExternalBuffer() const
+	{
+	delete iExternalBuffer;
+	iExternalBuffer = NULL;
+	iDeferredInternalization = EFalse;
+	}
+	
+
+/*
+ * SifCommon internal classes
+ */
+
+
+CItemBase::CItemBase(TType aType):
+    iType(aType)
+    {
+    
+    }
+
+CItemBase::TType CItemBase::Type() const
+    {
+    return iType;
+    }
+
+void CItemBase::SetNameL(const TDesC& aName)
+    {
+    delete iName;
+    iName = aName.AllocL();
+    }
+
+
+CItemBase::~CItemBase()
+    {
+    delete iName;
+    }
+
+const HBufC& CItemBase::Name() const
+    {
+    return *iName;
+    }
+
+void CItemBase::SetValueSize(TInt aSize)
+    {
+    iSize = aSize;
+    }
+
+TInt CItemBase::ValueSize() const
+    {
+    return iSize;
+    }
+
+void CItemBase::VerifyExternalizedSizeForParamL(TUint aValueSize) const
+    {
+    if(aValueSize > KMaxOpaqueParamsDescriptorSize)
+        {
+        User::Leave(KErrOverflow);
+        }
+    }
+
+void CItemBase::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream << Name();
+    aStream.WriteInt32L(iSize);
+    }
+
+void CItemBase::InternalizeL (RReadStream& aStream)
+    {
+    delete iName;
+    iName = HBufC::NewL(aStream, KMaxOpaqueParamsDescriptorSize);
+    iSize = aStream.ReadInt32L();
+    }
+    
+/*
+ * CStringItem
+ */
+CStringItem::CStringItem():
+    CItemBase(EString)
+    {
+    
+    }
+
+CStringItem* CStringItem::NewL(const TDesC& aName, const TDesC& aValue)
+    {
+    CStringItem* self = new(ELeave)CStringItem();
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aValue);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CStringItem* CStringItem::NewL(RReadStream& aStream)
+    {   
+    CStringItem *self = new(ELeave)CStringItem();
+    CleanupStack::PushL(self);
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CStringItem::ConstructL(const TDesC& aName, const TDesC& aValue)
+    {
+    VerifyExternalizedSizeForParamL(aValue.Size());
+    SetNameL(aName);
+    iString = aValue.AllocL();
+    SetValueSize(iString->Size());
+    }
+
+CStringItem::~CStringItem()
+    {
+    delete iString;
+    }
+
+void CStringItem::ExternalizeL(RWriteStream& aStream) const
+    {
+	CItemBase::ExternalizeL(aStream);
+    aStream << *iString;
+    }
+
+void CStringItem::InternalizeL(RReadStream& aStream)
+    {
+    CItemBase::InternalizeL(aStream);
+    DeleteObjectZ(iString);
+    iString = HBufC::NewL(aStream, KMaxOpaqueParamsDescriptorSize);
+    }
+
+const TDesC& CStringItem::StringValue() const
+    {
+    return *iString;
+    }
+
+const HBufC& CStringItem::Name() const
+    {
+    return CItemBase::Name(); 
+    }
+
+MOpaqueParam::TType CStringItem::Type() const
+    {
+    return CItemBase::Type();
+    }
+
+TInt CStringItem::ValueSize() const
+    {
+    return CItemBase::ValueSize();
+    }
+/*
+ * CStringArrayItem
+ */
+
+CStringArrayItem::CStringArrayItem():
+    CItemBase(EStringArray)
+    {
+    
+    }
+
+CStringArrayItem* CStringArrayItem::NewL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray)
+    {
+    CStringArrayItem* self = new(ELeave)CStringArrayItem();
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aValueArray);
+    CleanupStack::Pop(self);    
+    return self;
+    }
+
+CStringArrayItem* CStringArrayItem::NewL(RReadStream& aStream)
+    {   
+    CStringArrayItem *self = new(ELeave)CStringArrayItem();
+    CleanupStack::PushL(self);    
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CStringArrayItem::ConstructL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray)
+    {
+    SetNameL(aName);
+    for(TInt i=0; i< aValueArray.Count(); ++i)
+        {
+        VerifyExternalizedSizeForParamL(aValueArray[i]->Size());
+        HBufC* value = aValueArray[i]->AllocLC();
+        iStringArray.AppendL(value);
+        SetValueSize(ValueSize()+ value->Size());
+        CleanupStack::Pop();
+        }
+    }
+
+void CStringArrayItem::ExternalizeL(RWriteStream& aStream) const
+    {
+    CItemBase::ExternalizeL(aStream);
+    ExternalizePointersArrayL(iStringArray, aStream);
+    }
+
+void CStringArrayItem::InternalizeL(RReadStream& aStream)
+    {
+    CItemBase::InternalizeL(aStream);
+    iStringArray.ResetAndDestroy();
+    InternalizePointersArrayL(iStringArray, aStream);
+    }
+
+const RPointerArray<HBufC>& CStringArrayItem:: StringArrayValue() const
+    {
+    return iStringArray;
+    }
+
+const HBufC& CStringArrayItem::Name() const
+    {
+    return CItemBase::Name(); 
+    }
+
+MOpaqueParam::TType CStringArrayItem::Type() const
+    {
+    return CItemBase::Type();
+    }
+
+TInt CStringArrayItem::ValueSize() const
+    {
+    return CItemBase::ValueSize();
+    }
+
+CStringArrayItem::~CStringArrayItem()
+    {
+    iStringArray.ResetAndDestroy();
+    }
+
+/*
+ * CIntegerItem
+ */
+
+CIntegerItem::CIntegerItem(TInt aValue):
+    CItemBase(EInteger),
+    iInteger(aValue)
+    {
+    
+    }
+
+CIntegerItem* CIntegerItem::NewL(const TDesC& aName, TInt aValue)
+    {
+    CIntegerItem* self = new(ELeave)CIntegerItem(aValue);
+    CleanupStack::PushL(self);
+    self->ConstructL(aName);
+    CleanupStack::Pop(self);  
+    return self;
+    }
+
+CIntegerItem* CIntegerItem::NewL(RReadStream& aStream)
+    {   
+    CIntegerItem *self = new(ELeave)CIntegerItem(0);
+    CleanupStack::PushL(self);
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CIntegerItem::ConstructL(const TDesC& aName)
+    {
+    SetNameL(aName);
+    SetValueSize(sizeof(TInt));
+    }
+
+void CIntegerItem::ExternalizeL(RWriteStream& aStream) const
+    {
+    CItemBase::ExternalizeL(aStream);
+    aStream.WriteInt32L(iInteger);
+    }
+
+void CIntegerItem::InternalizeL(RReadStream& aStream)
+    {
+    CItemBase::InternalizeL(aStream);
+    iInteger = aStream.ReadInt32L();
+    }
+
+TInt CIntegerItem::IntegerValue() const
+    {
+    return iInteger;
+    }
+
+const HBufC& CIntegerItem::Name() const
+    {
+    return CItemBase::Name(); 
+    }
+
+MOpaqueParam::TType CIntegerItem::Type() const
+    {
+    return CItemBase::Type();
+    }
+
+TInt CIntegerItem::ValueSize() const
+    {
+    return CItemBase::ValueSize();
+    }
+
+CIntegerItem::~CIntegerItem()
+    {
+    }
+
+/*
+ * CIntegerArrayItem
+ */
+
+CIntegerArrayItem::CIntegerArrayItem():
+    CItemBase(EIntegerArray)
+    {
+    
+    }
+
+CIntegerArrayItem* CIntegerArrayItem::NewL(const TDesC& aName, const RArray<TInt>& aValueArray)
+    {
+    CIntegerArrayItem* self = new(ELeave)CIntegerArrayItem();
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aValueArray);
+    CleanupStack::Pop(self);    
+    return self;
+    }
+
+CIntegerArrayItem* CIntegerArrayItem::NewL(RReadStream& aStream)
+    {   
+    CIntegerArrayItem *self = new(ELeave)CIntegerArrayItem();
+    CleanupStack::PushL(self);    
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+void CIntegerArrayItem::ConstructL(const TDesC& aName, const RArray<TInt>& aValueArray)
+    {
+    SetNameL(aName);
+    
+    for(TInt i=0; i<aValueArray.Count(); ++i)
+        {
+        iIntegerArray.AppendL(aValueArray[i]);
+        SetValueSize(ValueSize()+sizeof(TInt));
+        }
+    }
+
+void CIntegerArrayItem::ExternalizeL(RWriteStream& aStream) const
+    {
+    CItemBase::ExternalizeL(aStream);
+    ExternalizeFixedLengthArrayL(iIntegerArray, aStream);
+    }
+
+void CIntegerArrayItem::InternalizeL(RReadStream& aStream)
+    {
+    CItemBase::InternalizeL(aStream);
+    iIntegerArray.Reset();
+    InternalizeFixedLengthArrayL(iIntegerArray, aStream);
+    }
+
+const RArray<TInt>& CIntegerArrayItem::IntegerArrayValue() const
+    {
+    return iIntegerArray;
+    }
+
+const HBufC& CIntegerArrayItem::Name() const
+    {
+    return CItemBase::Name(); 
+    }
+
+MOpaqueParam::TType CIntegerArrayItem::Type() const
+    {
+    return CItemBase::Type();
+    }
+
+TInt CIntegerArrayItem::ValueSize() const
+    {
+    return CItemBase::ValueSize();
+    }
+
+CIntegerArrayItem::~CIntegerArrayItem()
+    {
+    iIntegerArray.Close();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/siflauncher.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements  a built-in SIF launcher that integrates the SIF API with AppArc.
+* Thanks to this integration,  generic applications may launch installation of
+* a common scenario widely used, for example by file and web browsers, when
+* the user clicks on a file or link.
+*
+*/
+
+
+/**
+ a software component using @see RApaLsSession::StartDocument. This is
+*/
+
+#include <e32base.h>
+#include <apgcli.h>
+#include <apacmdln.h>
+#include <f32file.h>
+#include <usif/sif/sif.h>
+#include "usiflog.h"
+
+using namespace Usif;
+
+LOCAL_C void LaunchInstallL();
+
+/** main function called by E32 */
+GLDEF_C TInt E32Main()
+	{
+	CTrapCleanup* cleanup=CTrapCleanup::New();
+
+	__UHEAP_MARK;
+	TRAPD(err,LaunchInstallL());
+	__UHEAP_MARKEND;
+
+	delete cleanup;
+	return err;
+	}
+
+LOCAL_C void LaunchInstallL()
+    {
+	// Get the command line object with data as attached to the process by AppArc.
+	CApaCommandLine* commandLine = NULL;
+	TInt err = CApaCommandLine::GetCommandLineFromProcessEnvironment(commandLine);
+	DEBUG_PRINTF2(_L8("SIF Launcher: CApaCommandLine::GetCommandLineFromProcessEnvironment result = %d\n"),err);
+	User::LeaveIfError(err);
+	
+	CleanupStack::PushL(commandLine);
+	
+	switch (commandLine->Command())
+		{
+		case EApaCommandOpen:
+			{
+			// Open the file and use the handle to install it
+			RFile fileHandle;
+			CleanupClosePushL(fileHandle);
+			commandLine->GetFileByHandleL(fileHandle);
+
+			// Establish a connection with the SIF server
+			RSoftwareInstall sif;
+			err = sif.Connect();
+			if (err != KErrNone)
+				{
+				DEBUG_PRINTF2(_L8("SIF Launcher: RSoftwareInstall::Connect() failed, error = %d\n"),err);
+				User::Leave(err);
+				}
+
+			CleanupClosePushL(sif);
+			TRequestStatus status;
+			
+			if (fileHandle.SubSessionHandle() != KNullHandle)
+				{
+				// We've got a working file handle, so use it...
+				DEBUG_PRINTF(_L8("SIF Launcher: installation by file handle...\n"));
+				sif.Install(fileHandle, status);
+				}
+			else
+				{
+				// ...otherwise the file name of a package
+				DEBUG_PRINTF(_L8("SIF Launcher: installation by file name...\n"));
+				sif.Install(commandLine->DocumentName(), status);
+				}
+				
+			User::WaitForRequest(status);
+			DEBUG_PRINTF2(_L8("SIF Launcher: installation finished with err = %d\n"),status.Int());
+			CleanupStack::PopAndDestroy(2, &fileHandle);
+			break;
+			}
+			
+		/* SIF Launcher doesn't support the following commands:
+		- EApaCommandCreate,
+		- EApaCommandRun,
+		- EApaCommandBackground,
+		- EApaCommandViewActivate,
+		- EApaCommandRunWithoutViews,
+		- EApaCommandBackgroundAndWithoutViews */
+		default:
+			User::Leave(KErrNotSupported);
+			break;
+		}
+
+	CleanupStack::PopAndDestroy(commandLine);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/sifnotification.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,826 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements the SifNotifier library
+*
+*/
+
+#include <usif/sif/sifnotification.h>
+#include <s32mem.h> 
+#include <scs/cleanuputils.h>
+#include <scs/streamingarray.h>
+#include "sifnotification_internal.h"
+#include <usif/sif/sif.h>
+#include "e32property.h" 
+#include "scrclient.inl"
+#include "usiflog.h"
+
+
+using namespace Usif;
+
+/**
+ * A global method which is used by both the publisher and subscriber code to retrieve data.
+ * 
+ */
+void GetDataL(TUint aKey, TInt& aBufferSize, RBuf8& aData)
+    {
+    aData.CreateL(aBufferSize);
+    aData.CleanupClosePushL();
+    TInt err = RProperty::Get(KUidSystemCategory, aKey, aData);
+    
+    // If the buffer size is too small.
+    while (err == KErrOverflow)
+        {
+        aBufferSize*=2;
+        aData.ReAllocL(aBufferSize);
+        err = RProperty::Get(KUidSystemCategory, aKey, aData);
+        }
+        
+    User::LeaveIfError(err);
+    CleanupStack::Pop();
+    }
+
+////////////////////////////
+// CPublishSifOperationInfo
+////////////////////////////
+
+CPublishSifOperationInfo::CPublishSifOperationInfo():
+    iBufferSize(KBufferSize)
+    {
+    // empty
+    }
+
+CPublishSifOperationInfo::~CPublishSifOperationInfo()
+    {
+    delete iDeleteTimer;
+    if (iStartEndKey != 0)
+        {
+        RProperty::Delete(KUidSystemCategory, iStartEndKey);
+        RProperty::Delete(KUidSystemCategory, (iStartEndKey+1));
+        }
+    }
+
+EXPORT_C CPublishSifOperationInfo* CPublishSifOperationInfo::NewL()
+    {
+    CPublishSifOperationInfo *self = CPublishSifOperationInfo::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CPublishSifOperationInfo* CPublishSifOperationInfo::NewLC()
+    {
+    CPublishSifOperationInfo *self = new(ELeave) CPublishSifOperationInfo();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+void CPublishSifOperationInfo::ConstructL()
+    {
+    
+    }
+
+TUint CPublishSifOperationInfo::AvailableKeyL()
+    {
+    TBuf8<KMaxNumberOfOperations*sizeof(TInt)> buf;
+    for(TInt i=0; i< KMaxNumberOfOperations-1; ++i)
+        {
+        if(KErrNotFound == RProperty::Get(KUidSystemCategory, KSifPropertyTable[i], buf))
+            {
+            return KSifPropertyTable[i];
+            }
+        }
+
+	User::Leave(KErrInUse);
+    return KErrNone; // Keep compiler happy.
+    }
+
+TUint CPublishSifOperationInfo::KeyForGlobalComponentIdL(const TDesC& aGlobalComponentId)
+    {
+    TBuf8<KMaxNumberOfOperations*sizeof(TInt)> buf;
+    //Get all ongoing operations
+    User::LeaveIfError(RProperty::Get(KUidSystemCategory, KSifOperationKey, buf));
+   
+    RDesReadStream readStream(buf);
+    CleanupClosePushL(readStream);
+    CSifOperationKey* opKey = CSifOperationKey::NewL(readStream);
+    CleanupStack::PopAndDestroy(&readStream);
+    CleanupStack::PushL(opKey);
+    
+    RArray<TUint> startEndKeyArr = opKey->StartEndKeys();
+	// Get the data for all the ongoing operations and check for global component id
+    for (TInt i=0; i<startEndKeyArr.Count(); ++i)
+        {
+        RBuf8 startDatabuf;
+        startDatabuf.CleanupClosePushL();
+
+		GetDataL(startEndKeyArr[i], iBufferSize, startDatabuf);
+        RDesReadStream readStream(startDatabuf);
+        CleanupClosePushL(readStream);
+        
+        // Read the first 4 bytes
+        TSifOperation opType = static_cast<TSifOperation>(readStream.ReadInt32L());         
+        if(opType != ESifOperationStart)
+            {
+            CleanupStack::PopAndDestroy(2, &startDatabuf);
+            continue;
+            }
+                    
+        // Release the stream and reopen it.
+        readStream.Release();
+        readStream.Open(startDatabuf);
+                    
+        CSifOperationStartData* startObj = CSifOperationStartData::NewL(readStream);
+        CleanupStack::PushL(startObj);
+		// Check if the global component id is the same as what we are looking for
+        if( KErrNone == aGlobalComponentId.Compare(startObj->GlobalComponentId()))
+            {
+            TInt key = startEndKeyArr[i];
+            CleanupStack::PopAndDestroy(4, opKey);
+            return key;
+            }
+        CleanupStack::PopAndDestroy(3, &startDatabuf);
+        }
+    CleanupStack::PopAndDestroy(opKey);
+    
+    // Could not find corresponding key
+    User::Leave(KErrNotFound);
+    return KErrNone; // Keep compiler happy.
+    }
+    
+void CPublishSifOperationInfo::SetKeyToDelete(TUint aStartEndKey)
+    {
+    iStartEndKey = aStartEndKey;
+    }
+
+EXPORT_C void CPublishSifOperationInfo::PublishStartL(CSifOperationStartData& aSifOperationStartData)
+    {
+    // Get Property key from free pool which could be used for this operation.
+    TUint key = AvailableKeyL();    
+    
+    // Define key from free pool. Start data could be bigger than 512 bytes, hence using ELargeByteArray.
+    User::LeaveIfError(RProperty::Define(KUidSystemCategory, key, RProperty::ELargeByteArray,KSecurityPolicyWDD,KSecurityPolicyNone,KStartBufLength));
+        
+    // Store this key and delete it in case of any leaves
+    SetKeyToDelete(key);
+    
+    // Publish start info of operation in defined key.
+    RBuf8 bufStartData;
+    bufStartData.CleanupClosePushL();
+    ExternalizeRefObjectL(aSifOperationStartData, bufStartData);
+
+    User::LeaveIfError(RProperty::Set(KUidSystemCategory, key, bufStartData));
+    
+    CleanupStack::PopAndDestroy(&bufStartData);
+    
+    // Define key for progress data for this operation.
+    User::LeaveIfError(RProperty::Define(KUidSystemCategory, (key+1), RProperty::EByteArray,KSecurityPolicyWDD,KSecurityPolicyNone, KProgressBufLength));
+    
+    // Publish(append this key to existing info) the newly defined key in the global SIF key.
+    TBuf8<KMaxNumberOfOperations*sizeof(TUint)> buf;
+
+    User::LeaveIfError(RProperty::Get(KUidSystemCategory, KSifOperationKey, buf));
+
+    RDesReadStream stream(buf);
+    CleanupClosePushL(stream);      
+    
+    // Retrieve current keys.
+    CSifOperationKey* currentKeys = CSifOperationKey::NewL(stream);
+    CleanupStack::PopAndDestroy(&stream);
+    
+    CleanupStack::PushL(currentKeys);
+    
+    // Append the new key.
+    currentKeys->AddKeyL(key);
+    
+    RBuf8 bufOperationKeys;
+    bufOperationKeys.CleanupClosePushL();
+    ExternalizeRefObjectL(*currentKeys, bufOperationKeys);
+    
+    // Publish the new set of keys.
+    User::LeaveIfError(RProperty::Set(KUidSystemCategory, KSifOperationKey, bufOperationKeys));
+    
+    // Everything finished fine, we need not delete the keys defined above.
+    SetKeyToDelete(0);
+    
+    CleanupStack::PopAndDestroy(2, currentKeys);
+    }
+
+EXPORT_C void CPublishSifOperationInfo::PublishProgressL(CSifOperationProgressData& aSifOperationProgressData)
+    {
+    TUint startEndKey = 0;
+    
+    HBufC16 *compGlobalId = aSifOperationProgressData.GlobalComponentId().AllocLC();
+	//Get the key defined for this operation
+    startEndKey = KeyForGlobalComponentIdL(compGlobalId->Des());
+    CleanupStack::PopAndDestroy(compGlobalId);
+
+    //Publish progress info of operation in defined key
+    RBuf8 bufProgressData;
+    bufProgressData.CleanupClosePushL();
+    ExternalizeRefObjectL(aSifOperationProgressData, bufProgressData);
+    User::LeaveIfError(RProperty::Set(KUidSystemCategory, (startEndKey+1), bufProgressData));
+    CleanupStack::PopAndDestroy(&bufProgressData);
+    }
+
+EXPORT_C void CPublishSifOperationInfo::PublishCompletionL(CSifOperationEndData& aSifOperationEndData)
+    {
+    TUint endKey = 0;
+    HBufC *compGlobalId = aSifOperationEndData.GlobalComponentId().AllocLC();
+	//Get the key defined for this operation
+    endKey = KeyForGlobalComponentIdL(compGlobalId->Des());
+    CleanupStack::PopAndDestroy(compGlobalId);
+    
+    // Store this key and delete it in case of any leaves
+    SetKeyToDelete(endKey);
+    
+    //Publish end info of operation in defined key
+    RBuf8 bufEndData;
+    bufEndData.CleanupClosePushL();
+    ExternalizeRefObjectL(aSifOperationEndData, bufEndData);
+
+    User::LeaveIfError(RProperty::Set(KUidSystemCategory, endKey, bufEndData));
+    CleanupStack::PopAndDestroy(&bufEndData);
+    
+    // Wait for KDeleteKeyDelay seconds before deleting this key.
+    if(iDeleteTimer)
+        iDeleteTimer->Cancel();
+    delete iDeleteTimer;
+    iDeleteTimer = CDeleteKeyTimer::NewL(endKey);
+    
+    // Everything finished fine, we need not delete the keys defined for this operation
+    SetKeyToDelete(0);
+    
+    iDeleteTimer->Start();
+
+    }
+
+
+
+//////////////////////////
+// CSifOperationsNotifier
+//////////////////////////
+
+
+EXPORT_C CSifOperationsNotifier* CSifOperationsNotifier::NewL(MSifOperationsHandler& aHandler)
+    {
+    CSifOperationsNotifier* self = CSifOperationsNotifier::NewLC(aHandler);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+EXPORT_C CSifOperationsNotifier* CSifOperationsNotifier::NewLC(MSifOperationsHandler& aHandler)
+    {
+    CSifOperationsNotifier* self = new (ELeave) CSifOperationsNotifier(aHandler);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+CSifOperationsNotifier::CSifOperationsNotifier(MSifOperationsHandler& aHandler):
+    CActive(EPriorityNormal),
+    iHandler(aHandler),
+    iBufferSize(KBufferSize) 
+    {
+    //Empty
+    }
+
+
+void CSifOperationsNotifier::ConstructL()
+    {
+    CActiveScheduler::Add(this);
+    iProperty.Attach(KUidSystemCategory,KSifOperationKey,EOwnerThread);
+    
+    // On first start, the notifier looks for any active operations and 
+    // notifies the client.
+    iNotifierState = EFirstStart;
+    
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();
+    }
+
+
+void CSifOperationsNotifier::RunL()
+    {  
+    User::LeaveIfError(iStatus.Int());
+    
+    // Resubscribe for any changes to the global key.
+    WaitForChangeL();
+    
+    if( iNotifierState == EFirstStart)
+        {
+        // Notify the client of any active operation.
+        ActiveOperationsNotificationL();
+        iNotifierState = EWaitForChange;    
+        return;
+        }
+ 
+   // Global key change notification received.      
+    RArray<TUint> newKeyArray;
+    GetKeysL(newKeyArray);
+    CleanupClosePushL(newKeyArray);
+    
+    if(iKeyArray.Count() < newKeyArray.Count())
+        {
+        // New Keys added.
+        RBuf8 externalizedBuffer;
+        externalizedBuffer.CleanupClosePushL();
+        
+        // Retrieve the new keys and send the start operation notification to each.
+        for(TInt i = iKeyArray.Count(); i< newKeyArray.Count(); ++i)
+            {
+            externalizedBuffer.Close();
+            GetDataL(newKeyArray[i], iBufferSize, externalizedBuffer);
+            
+            RDesReadStream stream(externalizedBuffer);
+            CleanupClosePushL(stream);
+            // Read the first 4 bytes
+            TSifOperation opType = static_cast<TSifOperation>(stream.ReadInt32L());         
+            if(opType != ESifOperationStart)
+                {
+                CleanupStack::PopAndDestroy(&stream);
+                continue;
+                }
+            
+            // Release the stream and reopen it.
+            stream.Release();
+            stream.Open(externalizedBuffer);
+           
+            CSifOperationStartData* startData = CSifOperationStartData::NewL(stream);
+            CleanupStack::PushL(startData);
+            
+            //Update iKeyArray with the new key.
+            iKeyArray.AppendL(newKeyArray[i]);
+            
+            iHandler.StartOperationHandler(newKeyArray[i], *startData);
+            CleanupStack::PopAndDestroy(2, &stream);            
+            
+            }
+        CleanupStack::PopAndDestroy(&externalizedBuffer);
+        }
+    else if (iKeyArray.Count() > newKeyArray.Count())
+        {
+        // Keys removed.
+        for(TInt i = 0; i<iKeyArray.Count(); ++i)
+            {
+            // Key present in iKeyArray (the previous array of keys) is no longer
+            // present in the newKeyArray.
+            if(newKeyArray.Find(iKeyArray[i]) == KErrNotFound)
+                {
+                CancelSubscribeL(iKeyArray[i]);
+                iKeyArray.Remove(i);
+                }
+            }
+        }   
+    CleanupStack::PopAndDestroy(&newKeyArray);
+    }
+
+void CSifOperationsNotifier::ActiveOperationsNotificationL()
+    {
+    // Notify the caller of any operation currently in progress.
+    GetKeysL(iKeyArray);
+    
+    RBuf8 externalizedBuffer;
+    
+    for(TInt i=0; i<iKeyArray.Count(); ++i)
+        {
+        externalizedBuffer.Close();
+        GetDataL(iKeyArray[i], iBufferSize, externalizedBuffer);
+        CleanupClosePushL(externalizedBuffer);
+        
+        RDesReadStream stream(externalizedBuffer);
+        CleanupClosePushL(stream);
+        
+        //Read the first 4 bytes
+        TSifOperation opType = static_cast<TSifOperation>(stream.ReadUint32L());
+        if(opType != ESifOperationStart)
+            {
+            // Ignore this key and continue.
+            CleanupStack::PopAndDestroy(2, &externalizedBuffer);
+            continue;
+            }
+        // Release the stream and reopen it.
+        stream.Release();
+        stream.Open(externalizedBuffer);
+        
+        CSifOperationStartData* startData = CSifOperationStartData::NewL(stream);
+        CleanupStack::PushL(startData);
+        iHandler.StartOperationHandler(iKeyArray[i], *startData); 
+        CleanupStack::PopAndDestroy(startData);  
+           
+        CleanupStack::PopAndDestroy(2, &externalizedBuffer);  
+        }
+    
+    }
+void CSifOperationsNotifier::WaitForChangeL()
+    {   
+    iProperty.Subscribe(iStatus);
+    SetActive();
+    }
+
+
+void CSifOperationsNotifier::GetKeysL(RArray<TUint>& aKeys)
+    {
+    TBuf8<KMaxNumberOfOperations * sizeof(TInt)> keysBuffer;
+    User::LeaveIfError(iProperty.Get(keysBuffer));
+    
+    RDesReadStream stream(keysBuffer);
+    CleanupClosePushL(stream);
+    
+    // Construct the CSifOperationKey object from the buffer.
+    CSifOperationKey* opKey = CSifOperationKey::NewL(stream);
+    CleanupStack::PushL(opKey);
+    
+    for(TInt i=0; i<opKey->StartEndKeys().Count(); ++i)
+        {
+        aKeys.AppendL(opKey->StartEndKeys()[i]);
+        }
+    
+    CleanupStack::PopAndDestroy(2, &stream);
+    }
+
+
+EXPORT_C void CSifOperationsNotifier::SubscribeL(TUint aKey, TBool aSubscribeForProgressNotifications)
+    {
+    User::LeaveIfError(iKeyArray.Find(aKey));
+    
+    // Start End notifier.
+    CSifNotifierBase* startEndNotifier = CSifNotifierBase::NewLC(iHandler, aKey, CSifNotifierBase::EStartEndNotifier);
+    iNotifierArray.AppendL(startEndNotifier);
+    CleanupStack::Pop(startEndNotifier);
+    
+    if(aSubscribeForProgressNotifications)
+        {
+        // Progress Notifier.
+        CSifNotifierBase* progressNotifier = CSifNotifierBase::NewLC(iHandler, aKey+1, CSifNotifierBase::EProgressNotifier);
+        iNotifierArray.AppendL(progressNotifier);
+        CleanupStack::Pop(progressNotifier);
+        }
+    }
+
+
+EXPORT_C void CSifOperationsNotifier::CancelSubscribeL(TUint aKey)
+    {
+    TInt index = iKeyArray.Find(aKey);
+    
+    if(index == KErrNotFound)
+        {
+        // No need to leave.
+        return;
+        }
+    
+    for(TInt i=0; i< iNotifierArray.Count(); ++i)
+        {
+
+        if(iNotifierArray[i]->Key() == aKey)
+            {
+            delete iNotifierArray[i];
+            iNotifierArray.Remove(i);
+            
+            // Delete progress notification object also, if present.
+            // i now points to the next element
+            if( i <= iNotifierArray.Count()-1 && iNotifierArray[i]->Key() == aKey+1)
+                {
+                delete iNotifierArray[i];
+                iNotifierArray.Remove(i);
+                }
+            }
+        
+        }
+
+    }
+
+
+EXPORT_C void CSifOperationsNotifier::CancelSubscribeL()
+    {
+    //Destroy all the notifiers.
+    Cancel();
+    }
+
+
+void CSifOperationsNotifier::DoCancel()
+    {
+    iProperty.Cancel();
+    iNotifierArray.ResetAndDestroy();
+    }
+
+TInt CSifOperationsNotifier::RunError(TInt aError)
+    {
+    DEBUG_PRINTF2(_L8("CSifOperationsNotifier::RunError : Error code %d"), aError);
+    // If RunL() leaves due to ActiveOperationsNotificationL(), change the state.
+    if(iNotifierState == EFirstStart)
+        {
+        iNotifierState = EWaitForChange;
+        }
+    (void)aError;
+    return KErrNone;
+    }
+
+
+CSifOperationsNotifier::~CSifOperationsNotifier()
+    {
+    Cancel();
+    iProperty.Close();
+    iKeyArray.Close();
+    }
+
+
+
+//////////////////////////
+// CSifNotifierBase
+//////////////////////////
+
+
+EXPORT_C CSifNotifierBase* CSifNotifierBase::NewL(MSifOperationsHandler& aHandler, TUint aKey, TNotifierType aType)
+    {
+    CSifNotifierBase* self = CSifNotifierBase::NewLC(aHandler, aKey, aType);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+EXPORT_C CSifNotifierBase* CSifNotifierBase::NewLC(MSifOperationsHandler& aHandler, TUint aKey, TNotifierType aType)
+    {
+    CSifNotifierBase* self = new (ELeave) CSifNotifierBase(aHandler, aKey, aType);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+CSifNotifierBase::CSifNotifierBase(MSifOperationsHandler& aHandler, TUint aKey, TNotifierType aType):
+    CActive(EPriorityNormal),
+    iHandler(aHandler),
+    iKey(aKey),
+    iBufferSize(KBufferSize),
+    iType(aType)
+    {
+    //Empty
+    }
+
+
+void CSifNotifierBase::ConstructL()
+    {
+    CActiveScheduler::Add(this);
+    iProperty.Attach(KUidSystemCategory,iKey,EOwnerThread);
+    // Subscribe to the key and wait for a notification.
+    WaitForChangeL();
+    }
+
+
+void CSifNotifierBase::RunL()
+    {
+    User::LeaveIfError(iStatus.Int());
+    
+    //Resubscribe for any changes.
+    WaitForChangeL();
+    
+    RBuf8 externalizedBuffer;
+    GetDataL(iKey, iBufferSize, externalizedBuffer);  
+    externalizedBuffer.CleanupClosePushL();
+    
+    RDesReadStream stream(externalizedBuffer);
+    CleanupClosePushL(stream);
+    
+    switch (iType)
+        {
+        case EStartEndNotifier:
+            {
+            //Read the first 4 bytes
+            TSifOperation opType = static_cast<TSifOperation>(stream.ReadInt32L());
+            stream.Release();
+            stream.Open(externalizedBuffer);
+            switch(opType)
+                {
+                case ESifOperationEnd:
+                    {
+                    CSifOperationEndData* endData = CSifOperationEndData::NewL(stream);
+                    CleanupStack::PushL(endData);
+                    iHandler.EndOperationHandler(*endData);
+                    CleanupStack::PopAndDestroy(endData);
+                    break;
+                    }
+                    
+                default:
+                    // Cannot receive a start notification here !
+                    User::Leave(KErrNotSupported);
+                    break; 
+                }            
+            }
+            
+         break;
+            
+        case EProgressNotifier:
+            {
+            CSifOperationProgressData* progressData = CSifOperationProgressData::NewL(stream);
+            CleanupStack::PushL(progressData);
+            iHandler.ProgressOperationHandler(*progressData);
+            CleanupStack::PopAndDestroy(progressData);
+            }
+        }
+
+    
+    CleanupStack::PopAndDestroy(2, &externalizedBuffer);
+    }
+
+
+
+void CSifNotifierBase::WaitForChangeL()
+    {
+    iProperty.Subscribe(iStatus);
+    SetActive();
+    }
+
+
+TInt CSifNotifierBase::RunError(TInt aError)
+    {
+    DEBUG_PRINTF2(_L8("CSifNotifierBase::RunError : Error code %d"), aError);
+    (void)aError;
+    return KErrNone;
+    }
+
+TUint CSifNotifierBase::Key()
+    {
+    return iKey;
+    }
+
+void CSifNotifierBase::DoCancel()
+    {
+    iProperty.Cancel();
+    }
+
+
+CSifNotifierBase::~CSifNotifierBase()
+    {
+    Cancel();
+    }
+
+
+
+/////////////////////
+// CSifOperationKey
+/////////////////////
+
+CSifOperationKey::CSifOperationKey()
+    {
+    // empty
+    }
+
+CSifOperationKey::~CSifOperationKey()
+    {
+    iStartEndKeyArray.Close();
+    }
+
+EXPORT_C CSifOperationKey* CSifOperationKey::NewL()
+    {
+    CSifOperationKey *self = CSifOperationKey::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CSifOperationKey* CSifOperationKey::NewLC()
+    {
+    CSifOperationKey *self = new(ELeave) CSifOperationKey();
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CSifOperationKey* CSifOperationKey::NewL(RReadStream& aStream)
+    {
+    CSifOperationKey *self = new(ELeave) CSifOperationKey();
+    CleanupStack::PushL(self);
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C void CSifOperationKey::ExternalizeL(RWriteStream& aStream) const
+    {
+    TInt count = iStartEndKeyArray.Count();
+    aStream.WriteUint32L(count);
+    for(TInt i=0 ; i< count; ++i)
+        {
+        aStream.WriteUint32L(iStartEndKeyArray[i]);
+        }
+    }
+    
+void CSifOperationKey::InternalizeL(RReadStream& aStream)
+    {
+    TInt count = aStream.ReadUint32L();
+    for(TInt i=0 ; i< count; ++i)
+        {
+        iStartEndKeyArray.AppendL(aStream.ReadUint32L());
+        }
+    }
+
+const RArray<TUint>& CSifOperationKey::StartEndKeys() const
+    {
+    return iStartEndKeyArray;
+    }
+
+void CSifOperationKey::AddKeyL(TUint aKey)
+    {
+    iStartEndKeyArray.AppendL(aKey);
+    }
+
+void CSifOperationKey::DeleteKey(TUint aPos)
+    {
+    iStartEndKeyArray.Remove(aPos);
+    }
+
+
+/////////////////////
+// CDeleteKeyTimer
+/////////////////////
+
+
+CDeleteKeyTimer::CDeleteKeyTimer() : CTimer(EPriorityLow)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CDeleteKeyTimer::~CDeleteKeyTimer()
+    {
+    Cancel();
+    }
+
+CDeleteKeyTimer* CDeleteKeyTimer::NewL(const TUint aKey)
+    {
+    CDeleteKeyTimer* self = new(ELeave) CDeleteKeyTimer();
+    CleanupStack::PushL(self);
+    self->ConstructL(aKey);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CDeleteKeyTimer::ConstructL(const TUint aKey)
+    {
+    CTimer::ConstructL();
+    iKey = aKey;
+    }
+
+void CDeleteKeyTimer::Start()
+    {
+    After(KDeleteKeyDelay);
+    }
+
+void CDeleteKeyTimer::RunL()
+    {
+    // Publish(remove this key from existing info) the remaining keys in the global SIF key.
+    TBuf8<KMaxNumberOfOperations * sizeof(TInt)> buf;
+	RProperty oprnProperty;
+	CleanupClosePushL(oprnProperty);
+	
+	oprnProperty.Attach(KUidSystemCategory, KSifOperationKey);
+    TInt err = oprnProperty.Get(buf);
+    User::LeaveIfError(err);
+    
+    RDesReadStream readStream(buf);
+    CleanupClosePushL(readStream);
+    CSifOperationKey* opKey = CSifOperationKey::NewL(readStream);
+    CleanupStack::PushL(opKey);
+
+    //Find the position of the key 
+    TInt pos = opKey->StartEndKeys().Find(iKey);
+    
+    // Delete key, externalize the updated CSifOperationKey object and publish it.
+    opKey->DeleteKey(pos);
+    
+    RBuf8 operationKeyData;
+    operationKeyData.CleanupClosePushL();
+    ExternalizeRefObjectL(*opKey, operationKeyData);
+    
+    User::LeaveIfError(oprnProperty.Set(operationKeyData));
+    
+    // StartEnd Key.
+    RProperty::Delete(KUidSystemCategory, iKey);
+    // Progress Key.
+    RProperty::Delete(KUidSystemCategory, (iKey+1));
+    
+    CleanupStack::PopAndDestroy(4, &oprnProperty);
+    }
+
+
+TInt CDeleteKeyTimer::RunError(TInt aError)
+    {
+    DEBUG_PRINTF2(_L8("CDeleteKeyTimer::RunError : Error code %d"), aError);
+    (void)aError;
+    
+    // StartEnd Key.
+    RProperty::Delete(KUidSystemCategory, iKey);
+    // Progress Key.
+    RProperty::Delete(KUidSystemCategory, (iKey+1));
+    return KErrNone;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/sifnotifierdata.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,404 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements the data classes provided by the SifNotifier library
+*
+*/
+
+#include <usif/sif/sifnotification.h> 
+#include <scs/cleanuputils.h>
+#include <scs/streamingarray.h>
+#include "sifnotification_internal.h"
+#include <usif/sif/sif.h>
+
+
+using namespace Usif;
+
+//////////////////////////
+// CSifOperationStartData
+//////////////////////////
+
+CSifOperationStartData::CSifOperationStartData()
+    {
+    // empty
+    }
+
+EXPORT_C CSifOperationStartData::~CSifOperationStartData()
+    {
+    delete iGlobalComponentId;                                    
+    delete iComponentName;
+    delete iComponentIcon;
+    iApplicationNames.ResetAndDestroy();
+    iApplicationIcons.ResetAndDestroy();          
+    delete iIconPath;      
+    delete iSoftwareType;
+    }
+
+
+EXPORT_C CSifOperationStartData* CSifOperationStartData::NewL(RReadStream& aStream)
+    {
+    CSifOperationStartData *self = new(ELeave) CSifOperationStartData();
+    CleanupStack::PushL(self);
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CSifOperationStartData* CSifOperationStartData::NewL(const TDesC& aGlobalComponentId, const TDesC& aComponentName,
+                                        const RPointerArray<HBufC>& aApplicationNames, const RPointerArray<HBufC>& aApplicationIcons, 
+                                        TInt aComponentSize, const TDesC& aIconPath, const TDesC& aComponentIcon, const TDesC& aSoftwareType)
+    {
+    return CSifOperationStartData::NewL(aGlobalComponentId, aComponentName, 
+                                        aApplicationNames, aApplicationIcons, aComponentSize, aIconPath, aComponentIcon, aSoftwareType, EInstalling);
+    }
+
+EXPORT_C CSifOperationStartData* CSifOperationStartData::NewL(const TDesC& aGlobalComponentId, const TDesC& aComponentName,
+                                        const RPointerArray<HBufC>& aApplicationNames, const RPointerArray<HBufC>& aApplicationIcons, 
+                                        TInt aComponentSize, const TDesC& aIconPath, const TDesC& aComponentIcon, const TDesC& aSoftwareType, 
+                                        TSifOperationPhase aOperationPhase)
+    {
+    CSifOperationStartData *self = CSifOperationStartData::NewLC(aGlobalComponentId, aComponentName, 
+                                        aApplicationNames, aApplicationIcons, aComponentSize, aIconPath, aComponentIcon, aSoftwareType, aOperationPhase);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+EXPORT_C CSifOperationStartData* CSifOperationStartData::NewLC(const TDesC& aGlobalComponentId, const TDesC& aComponentName,
+                                        const RPointerArray<HBufC>& aApplicationNames, const RPointerArray<HBufC>& aApplicationIcons, const TInt aComponentSize, 
+                                        const TDesC& aIconPath, const TDesC& aComponentIcon, const TDesC& aSoftwareType)
+    {
+    return CSifOperationStartData::NewLC(aGlobalComponentId, aComponentName, 
+                                        aApplicationNames, aApplicationIcons, aComponentSize, aIconPath, aComponentIcon, aSoftwareType, EInstalling);
+    }
+
+EXPORT_C CSifOperationStartData* CSifOperationStartData::NewLC(const TDesC& aGlobalComponentId, const TDesC& aComponentName,
+										const RPointerArray<HBufC>& aApplicationNames, const RPointerArray<HBufC>& aApplicationIcons, const TInt aComponentSize, 
+                                        const TDesC& aIconPath, const TDesC& aComponentIcon, const TDesC& aSoftwareType, TSifOperationPhase aOperationPhase)
+    {
+    CSifOperationStartData *self = new(ELeave) CSifOperationStartData();
+    CleanupStack::PushL(self);
+    self->ConstructL(aGlobalComponentId, aComponentName, aApplicationNames, aApplicationIcons, aComponentSize, aIconPath, aComponentIcon, aSoftwareType, aOperationPhase);
+    return self;
+    }
+
+void CSifOperationStartData::ConstructL(const TDesC& aGlobalComponentId, const TDesC& aComponentName, const RPointerArray<HBufC>& aApplicationNames,
+                                        const RPointerArray<HBufC>& aApplicationIcons, TInt aComponentSize, const TDesC& aIconPath, const TDesC& aComponentIcon, 
+                                        const TDesC& aSoftwareType, TSifOperationPhase aOperationPhase)
+    {
+	iGlobalComponentId = aGlobalComponentId.AllocL();
+    iComponentName = aComponentName.AllocL();
+    iComponentIcon = aComponentIcon.AllocL();
+
+    for(TInt i=0; i<aApplicationNames.Count();++i)
+        {
+        HBufC* applicationName = aApplicationNames[i]->AllocLC();
+        iApplicationNames.AppendL(applicationName);
+        CleanupStack::Pop(applicationName);
+        }
+
+    for(TInt i=0; i<aApplicationIcons.Count();++i)
+        {
+        HBufC* applicationIcon = aApplicationIcons[i]->AllocLC();
+        iApplicationIcons.AppendL(applicationIcon);
+        CleanupStack::Pop(applicationIcon);
+        }
+    
+    iComponentSize = aComponentSize;
+    iIconPath = aIconPath.AllocL();      
+    iSoftwareType = aSoftwareType.AllocL();
+    iOperationPhase = aOperationPhase;
+    }
+
+EXPORT_C void CSifOperationStartData::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteUint32L(ESifOperationStart);
+	aStream << *iGlobalComponentId;
+	aStream << *iComponentName;
+	ExternalizePointersArrayL(iApplicationNames, aStream);
+	ExternalizePointersArrayL(iApplicationIcons, aStream);
+	aStream.WriteUint16L(iComponentSize);
+	aStream << *iIconPath;
+	aStream << *iComponentIcon;
+	aStream << *iSoftwareType;
+	aStream << TCardinality(iOperationPhase);
+	}
+	
+void CSifOperationStartData::InternalizeL(RReadStream& aStream)
+    {
+    iOperationType = static_cast<TSifOperation>(aStream.ReadUint32L());
+    DeleteObjectZ(iGlobalComponentId);
+    iGlobalComponentId = HBufC::NewL(aStream, KMaxTInt);
+    DeleteObjectZ(iComponentName);
+    iComponentName = HBufC::NewL(aStream, KMaxTInt);
+    iApplicationNames.ResetAndDestroy();
+    InternalizePointersArrayL(iApplicationNames, aStream);
+    iApplicationIcons.ResetAndDestroy();
+    InternalizePointersArrayL(iApplicationIcons, aStream);
+    iComponentSize = aStream.ReadUint16L();
+    DeleteObjectZ(iIconPath);
+    iIconPath = HBufC::NewL(aStream, KMaxTInt);
+    DeleteObjectZ(iComponentIcon);
+    iComponentIcon = HBufC::NewL(aStream, KMaxTInt);
+    DeleteObjectZ(iSoftwareType);
+    iSoftwareType = HBufC::NewL(aStream, KMaxTInt);
+    TCardinality c;
+    aStream >> c;
+    iOperationPhase = static_cast<TSifOperationPhase>(static_cast<TInt>(c));
+    }
+
+EXPORT_C const HBufC& CSifOperationStartData::GlobalComponentId() const
+    {
+    return *iGlobalComponentId;
+    }
+
+EXPORT_C const HBufC& CSifOperationStartData::ComponentName() const
+    {
+    return *iComponentName;
+    }
+
+EXPORT_C const RPointerArray<HBufC>& CSifOperationStartData::ApplicationNames() const
+    {
+    return iApplicationNames;
+    }
+
+EXPORT_C const RPointerArray<HBufC>& CSifOperationStartData::ApplicationIcons() const
+    {
+    return iApplicationIcons;
+    }
+
+EXPORT_C const HBufC& CSifOperationStartData::IconPath() const
+    {
+    return *iIconPath;
+    }
+
+EXPORT_C const HBufC& CSifOperationStartData::ComponentIcon() const
+    {
+    return *iComponentIcon;
+    }
+
+EXPORT_C const HBufC& CSifOperationStartData::SoftwareType() const
+    {
+    return *iSoftwareType;
+    }
+
+
+EXPORT_C TInt CSifOperationStartData::ComponentSize() const
+    {
+    return iComponentSize;
+    }
+
+EXPORT_C TSifOperationPhase CSifOperationStartData::OperationPhase() const
+    {
+    return iOperationPhase;
+    }
+
+////////////////////////
+// CSifOperationEndData
+////////////////////////
+
+CSifOperationEndData::CSifOperationEndData()
+    {
+    // empty
+    }
+
+EXPORT_C CSifOperationEndData::~CSifOperationEndData()
+    {
+    delete iGlobalComponentId;
+    delete iErrMsg;                                    
+    delete iErrMsgDetails;
+    }
+
+
+EXPORT_C CSifOperationEndData* CSifOperationEndData::NewL(RReadStream& aStream)
+    {
+    CSifOperationEndData *self = new(ELeave) CSifOperationEndData();
+    CleanupStack::PushL(self);
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CSifOperationEndData* CSifOperationEndData::NewL(const TDesC& aGlobalComponentId, TErrorCategory aErrCategory, TInt aErrCode, const TDesC& aErrMsg, const TDesC& aErrMsgDetails)
+    {
+    CSifOperationEndData *self = CSifOperationEndData::NewLC(aGlobalComponentId, aErrCategory, aErrCode, aErrMsg, aErrMsgDetails);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CSifOperationEndData* CSifOperationEndData::NewLC(const TDesC& aGlobalComponentId, TErrorCategory aErrCategory, TInt aErrCode, const TDesC& aErrMsg, const TDesC& aErrMsgDetails)
+    {
+    CSifOperationEndData *self = new(ELeave) CSifOperationEndData();
+    CleanupStack::PushL(self);
+    self->ConstructL(aGlobalComponentId, aErrCategory, aErrCode, aErrMsg, aErrMsgDetails);
+    return self;
+    }
+
+void CSifOperationEndData::ConstructL(const TDesC& aGlobalComponentId, TErrorCategory aErrCategory, TInt aErrCode, const TDesC& aErrMsg, const TDesC& aErrMsgDetails)
+    {
+	iGlobalComponentId = aGlobalComponentId.AllocL();      
+    iErrCategory = aErrCategory;
+    iErrCode = aErrCode;
+    iErrMsg = aErrMsg.AllocL();
+    iErrMsgDetails = aErrMsgDetails.AllocL();
+    }
+
+EXPORT_C void CSifOperationEndData::ExternalizeL(RWriteStream& aStream) const
+    {
+	aStream.WriteUint32L(ESifOperationEnd);
+    aStream << *iGlobalComponentId;
+    aStream << TCardinality(iErrCategory);
+    aStream.WriteUint16L(iErrCode);
+    aStream << *iErrMsg;
+    aStream << *iErrMsgDetails;
+    }
+    
+void CSifOperationEndData::InternalizeL(RReadStream& aStream)
+    {
+    iOperationType = static_cast<TSifOperation>(aStream.ReadUint32L());
+    iGlobalComponentId = HBufC::NewL(aStream, KMaxTInt);
+    TCardinality c;
+    aStream >> c;
+	iErrCategory = static_cast<TErrorCategory>(static_cast<TInt>(c));
+    iErrCode = aStream.ReadUint16L();
+    DeleteObjectZ(iErrMsg);
+    iErrMsg = HBufC::NewL(aStream, KMaxTInt);
+    DeleteObjectZ(iErrMsgDetails);
+    iErrMsgDetails = HBufC::NewL(aStream, KMaxTInt);
+    }
+
+EXPORT_C const HBufC& CSifOperationEndData::GlobalComponentId() const
+    {
+    return *iGlobalComponentId;
+    }
+
+EXPORT_C TErrorCategory CSifOperationEndData::ErrorCategory() const
+    {
+    return iErrCategory;
+    }
+
+EXPORT_C TInt CSifOperationEndData::ErrorCode() const
+    {
+    return iErrCode;
+    }
+
+EXPORT_C const HBufC& CSifOperationEndData::ErrorMessage() const
+    {
+    return *iErrMsg;
+    }
+
+EXPORT_C const HBufC& CSifOperationEndData::ErrorMessageDetails() const
+    {
+    return *iErrMsgDetails;
+    }
+
+/////////////////////////////
+// CSifOperationProgressData
+/////////////////////////////
+
+CSifOperationProgressData::CSifOperationProgressData()
+    {
+    // empty
+    }
+
+
+EXPORT_C CSifOperationProgressData* CSifOperationProgressData::NewL(RReadStream& aStream)
+    {
+    CSifOperationProgressData *self = new(ELeave) CSifOperationProgressData();
+    CleanupStack::PushL(self);
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CSifOperationProgressData* CSifOperationProgressData::NewL(const TDesC& aGlobalComponentId, TSifOperationPhase aPhase, TSifOperationSubPhase aSubPhase, TInt aCurrentProgress, TInt aTotal)
+    {
+    CSifOperationProgressData *self = CSifOperationProgressData::NewLC(aGlobalComponentId, aPhase, aSubPhase, aCurrentProgress, aTotal);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CSifOperationProgressData* CSifOperationProgressData::NewLC(const TDesC& aGlobalComponentId, TSifOperationPhase aPhase, TSifOperationSubPhase aSubPhase, TInt aCurrentProgress, TInt aTotal)
+    {
+    CSifOperationProgressData *self = new(ELeave) CSifOperationProgressData();
+    CleanupStack::PushL(self);
+    self->ConstructL(aGlobalComponentId, aPhase, aSubPhase, aCurrentProgress, aTotal);
+    return self;
+    }
+
+void CSifOperationProgressData::ConstructL(const TDesC& aGlobalComponentId, TSifOperationPhase aPhase, TSifOperationSubPhase aSubPhase, TInt aCurrentProgress, TInt aTotal)
+    {
+    iGlobalComponentId = aGlobalComponentId.AllocL();      
+    iPhase = aPhase;
+    iSubPhase = aSubPhase;
+    iCurrentProgress = aCurrentProgress;
+    iTotal = aTotal;
+    }
+
+EXPORT_C void CSifOperationProgressData::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream << *iGlobalComponentId;
+    aStream << TCardinality(iPhase);
+    aStream << TCardinality(iSubPhase);
+    aStream.WriteUint16L(iCurrentProgress);
+    aStream.WriteUint16L(iTotal);
+    }
+    
+void CSifOperationProgressData::InternalizeL(RReadStream& aStream)
+    {
+    iGlobalComponentId = HBufC::NewL(aStream, KMaxTInt);
+    TCardinality c;
+    aStream >> c;
+    iPhase = static_cast<TSifOperationPhase>(static_cast<TInt>(c));
+    aStream >> c;
+    iSubPhase = static_cast<TSifOperationSubPhase>(static_cast<TInt>(c));
+    iCurrentProgress = aStream.ReadUint16L();
+    iTotal = aStream.ReadUint16L();
+    }
+
+EXPORT_C const HBufC& CSifOperationProgressData::GlobalComponentId() const
+    {
+    return *iGlobalComponentId;
+    }
+
+EXPORT_C TSifOperationPhase CSifOperationProgressData::Phase() const
+    {
+    return iPhase;
+    }
+
+EXPORT_C TSifOperationSubPhase CSifOperationProgressData::SubPhase() const
+    {
+    return iSubPhase;
+    }
+
+EXPORT_C TInt CSifOperationProgressData::CurrentProgress() const
+    {
+    return iCurrentProgress;
+    }
+
+EXPORT_C TInt CSifOperationProgressData::CurrentProgess() const
+    {
+    return CurrentProgress();
+    }
+
+EXPORT_C TInt CSifOperationProgressData::Total() const
+    {
+    return iTotal;
+    }
+
+
+EXPORT_C CSifOperationProgressData::~CSifOperationProgressData()
+    {
+    delete iGlobalComponentId;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/sifserverstartup.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Executable entrypoint and server object factory function.
+*
+*/
+
+
+#include <usif/sif/siftransportserverstartup.h>
+#include "sifservertask.h"
+
+using namespace Usif;
+
+namespace
+	{
+	/** A factory function for the SIF Server */
+	CSifTransportTask* SifServerTaskFactoryL(TransportTaskFactory::TTaskType aTaskType, TTransportTaskParams& aParams)
+		{
+		return CSifServerTask::NewL(aTaskType, aParams);
+		}
+	}
+
+/**
+	Executable entrypoint.
+
+	@return	Symbian OS error code where KErrNone indicates
+			success and any other value indicates failure.
+ */
+TInt E32Main()
+	{
+	return StartTransportServer(KSifServerName, Version(), SifServerTaskFactoryL);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/sifservertask.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,218 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements a SIF Transport task for the SIF Server.
+*
+*/
+
+
+#include <e32base.h>
+#include <e32std.h>
+#include <usif/usiferror.h>
+#include <usif/sif/sifplugin.h>
+#include <usif/scr/scr.h>
+#include <apgcli.h>
+#include "sifservertask.h"
+#include "siftransportcommon.h"
+#include "usiflog.h"
+#include "sifutils.h"
+#include "e32property.h" 
+
+using namespace Usif;
+
+CSifServerTask* CSifServerTask::NewL(TransportTaskFactory::TTaskType aTaskType, TTransportTaskParams& aParams)
+	{
+	CSifServerTask* self = new (ELeave) CSifServerTask(aTaskType, aParams);
+	CleanupStack::PushL(self);
+   
+	// Query AppArc about the (MIME) type of the package to be processed and instantiate an appropriate SIF plug-in
+	self->SelectAndLoadPluginL();
+
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CSifServerTask::CSifServerTask(TransportTaskFactory::TTaskType aTaskType, TTransportTaskParams& aParams)
+	: CSifTransportTask(aParams, EFalse), iTaskType(aTaskType)
+	{
+	}
+
+CSifServerTask::~CSifServerTask()
+	{
+	DEBUG_PRINTF2(_L8("CSifServerTask::~CSifServerTask() for aFunction = %d\n"),iTaskType);
+	                
+	// Clean up the plugin
+	delete iPlugin;
+	iPlugin = NULL;
+	REComSession::DestroyedImplementation(iEcomKey);
+	REComSession::FinalClose();
+	}
+
+TBool CSifServerTask::ExecuteImplL()
+	{
+	DEBUG_PRINTF2(_L8("CSifServerTask::ExecuteImpl() for aRequest = %d\n"),iTaskType);
+	
+	// Plug-in does not exists and request is not for default uninstallation so leave.
+	if (!iPlugin && iTaskType != TransportTaskFactory::EUninstall)
+		User::Leave(KErrNotFound);
+
+	// Hand over the software management request to the plug-in
+	switch (iTaskType)
+		{
+		case TransportTaskFactory::EGetComponentInfo:
+			{
+			if (FileName())
+				{
+				iPlugin->GetComponentInfo(*FileName(), *SecurityContext(), *ComponentInfo(), *RequestStatus());
+				}
+			else
+				{
+				iPlugin->GetComponentInfo(*FileHandle(), *SecurityContext(), *ComponentInfo(), *RequestStatus());
+				}
+			break;
+			}
+
+		case TransportTaskFactory::EInstall:
+			{
+			if (FileName())
+				{
+				iPlugin->Install(*FileName(), *SecurityContext(), *CustomArguments(), *CustomResults(), *RequestStatus());
+				}
+			else
+				{
+				iPlugin->Install(*FileHandle(), *SecurityContext(), *CustomArguments(), *CustomResults(), *RequestStatus());
+				}
+			break;
+			}
+
+		case TransportTaskFactory::EUninstall:
+			{
+			if (!iPlugin)
+				{
+				// The default uninstaller is used when the Plugin is no longer present.
+				UninstallL(ComponentId());
+				TRequestStatus* requestStatusPtr(RequestStatus());
+				User::RequestComplete(requestStatusPtr, KErrNone);
+				}
+			else
+				{
+				iPlugin->Uninstall(ComponentId(), *SecurityContext(), *CustomArguments(), *CustomResults(), *RequestStatus());
+				}
+			break;
+			}
+
+		case TransportTaskFactory::EActivate:
+			{
+			iPlugin->Activate(ComponentId(), *SecurityContext(), *RequestStatus());
+			break;
+			}
+
+		case TransportTaskFactory::EDeactivate:
+			{
+			iPlugin->Deactivate(ComponentId(), *SecurityContext(), *RequestStatus());
+			break;
+			}
+
+		default:
+			ASSERT(0);
+		}
+	return ETrue;
+	}
+
+void CSifServerTask::CancelImpl()
+	{
+	DEBUG_PRINTF2(_L8("CSifServerTask::Cancel for aTaskType = %d\n"), iTaskType);
+	ASSERT(iPlugin);
+	iPlugin->CancelOperation();
+	}
+
+void CSifServerTask::SelectAndLoadPluginL()
+	{
+	DEBUG_PRINTF2(_L8("CSifServerTask::SelectAndLoadPluginL() for aFunction = %d\n"),iTaskType);
+
+	// The code below assumes that each SIF request provides a component id xor a file handle xor a file name.
+	// In case of changes that invalidate this assumption the code must be modified.
+
+	TDataType dataType;
+	if (iTaskType == TransportTaskFactory::EGetComponentInfo || iTaskType  == TransportTaskFactory::EInstall)
+		{
+		// Get the MIME type of the component to be installed from AppArc
+		DEBUG_PRINTF(_L8("Getting the MIME type of the component to be installed from AppArc\n"));
+		RApaLsSession apa;
+		TInt err = apa.Connect();
+		if (err != KErrNone)
+			{
+			DEBUG_PRINTF2(_L8("Failed to connect to the AppArc server, err = %d\n"),err);
+			User::Leave(err);
+			}
+		CleanupClosePushL(apa);
+		TUid appUid = TUid::Null();
+		if (FileName())
+			{
+			err = apa.AppForDocument(*FileName(), appUid, dataType);
+			}
+		else
+			{
+			err = apa.AppForDocument(*FileHandle(), appUid, dataType);
+			}
+		// A possible problem with recognizers is returning a successful result, but forgetting to set the MIME type. The second condition below protects against that.
+		if (err != KErrNone || dataType.Des8().Ptr() == NULL) 
+			{
+			DEBUG_PRINTF2(_L8("Failed to obtain the MIME type of a component, err = %d\n"),err);
+			User::Leave(err);
+			}
+		CleanupStack::PopAndDestroy(&apa);
+		}
+
+	// Get the uid of the matching plug-in from SCR for ...
+	RSoftwareComponentRegistry scr;
+	TInt err = scr.Connect();
+	if (err != KErrNone)
+		{
+		DEBUG_PRINTF2(_L8("Failed to connect to the SCR, err = %d\n"),err);
+		User::Leave(err);
+		}
+	CleanupClosePushL(scr);
+
+	//... iComponentId or the MIME type obtained above
+	TUid pluginUid = TUid::Null();
+	if (iTaskType != TransportTaskFactory::EInstall && iTaskType != TransportTaskFactory::EGetComponentInfo)
+		{
+		// Verify the given component id
+		CComponentEntry* entry = CComponentEntry::NewLC();
+		if (!scr.GetComponentL(ComponentId(), *entry))
+			{
+			DEBUG_PRINTF2(_L8("ComponentId = %d not found in the SCR"), ComponentId());
+			User::Leave(KErrSifBadComponentId);
+			}
+		CleanupStack::PopAndDestroy(entry);
+		
+		// Get the PluginUid only when an Installer Plugin is present.
+		if (!scr.IsComponentOrphanedL(ComponentId()))
+			{
+			pluginUid = scr.GetPluginUidL(ComponentId());
+			}
+		}
+	else
+		{
+		pluginUid = scr.GetPluginUidL(dataType.Des());
+		}
+	CleanupStack::PopAndDestroy(&scr);
+
+	// Load the plug-in
+	if( pluginUid != TUid::Null() )
+		{
+		iPlugin = reinterpret_cast<CSifPlugin*>(REComSession::CreateImplementationL(pluginUid, iEcomKey));
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/siftransportclient.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements the client side of the SIF Transport library
+*
+*/
+
+
+#include <f32file.h>
+#include <usif/sif/sif.h>
+#include <scs/scscommon.h>
+#include "siftransportclient.h"
+#include "siftransportcommon.h"
+
+using namespace Usif;
+
+	EXPORT_C RSifTransportClient::RSifTransportClient()
+	: RScsClientBase(), iArgBuf(NULL), iResBuf(NULL), iOngoingFunction(0)
+	{
+	}
+
+EXPORT_C TInt RSifTransportClient::Connect(const TDesC& aServerName, const TVersion& aRequiredVersion, const TDesC& aServerImageName, TUid aServerUid)
+	{
+	TUidType uidType(KExecutableImageUid, KNullUid, aServerUid);
+	return RScsClientBase::Connect(aServerName, aRequiredVersion, aServerImageName, uidType);
+	}
+
+EXPORT_C void RSifTransportClient::Close()
+	{
+	delete iArgBuf;
+	delete iResBuf;
+
+	RScsClientBase::Close();
+	}
+
+EXPORT_C void RSifTransportClient::GetComponentInfo(const TDesC& aFileName, CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	TIpcArgs ipcArgs(&aFileName);
+	TRAPD(err, aComponentInfo.PrepareForIpcL(ipcArgs, 2));
+	if (err)
+		{
+		TRequestStatus *status(&aStatus);
+		User::RequestComplete(status, err);
+		return;
+		}
+	
+	CallSifFunction(EGetComponentInfoByFileName, ipcArgs, aStatus);
+	}
+
+EXPORT_C void RSifTransportClient::GetComponentInfo(RFile& aFileHandle, CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	TIpcArgs ipcArgs;
+	TInt transferErr = aFileHandle.TransferToServer(ipcArgs, 0, 1);
+	TRAPD(err, aComponentInfo.PrepareForIpcL(ipcArgs, 2));
+	if (err || transferErr)
+		{
+		TRequestStatus *status(&aStatus);
+		User::RequestComplete(status, err ? err : transferErr);
+		return;
+		}
+	
+	CallSifFunction(EGetComponentInfoByFileHandle, ipcArgs, aStatus);
+	}
+
+EXPORT_C void RSifTransportClient::Install(const TDesC& aFileName, TRequestStatus& aStatus, TBool aExclusiveOperation)
+	{
+	TIpcArgs ipcArgs(&aFileName, aExclusiveOperation);
+	CallSifFunction(EInstallByFileName, ipcArgs, aStatus);
+	}
+
+EXPORT_C void RSifTransportClient::Install(const TDesC& aFileName, const COpaqueNamedParams& aArguments,
+										COpaqueNamedParams& aResults, TRequestStatus& aStatus, TBool aExclusiveOperation)
+	{
+	TIpcArgs ipcArgs(&aFileName, aExclusiveOperation);
+	TRAPD(err, PrepareOpaqueParamsL(ipcArgs, aArguments, aResults));
+	if (err)
+		{
+		TRequestStatus *status(&aStatus);
+		User::RequestComplete(status, err);
+		return;
+		}
+	
+	CallSifFunction(EInstallByFileNameWithOpaqueData, ipcArgs, aStatus);
+	}
+
+EXPORT_C void RSifTransportClient::Install(RFile& aFileHandle, TRequestStatus& aStatus, TBool aExclusiveOperation)
+	{
+	TIpcArgs ipcArgs(0, 0, aExclusiveOperation);
+	TInt err = aFileHandle.TransferToServer(ipcArgs, 0, 1);
+	if (err)
+		{
+		TRequestStatus *status(&aStatus);
+		User::RequestComplete(status, err);
+		return;
+		}	
+
+	CallSifFunction(EInstallByFileHandle, ipcArgs, aStatus);
+	}
+
+EXPORT_C void RSifTransportClient::Install(RFile& aFileHandle, const COpaqueNamedParams& aArguments,
+										COpaqueNamedParams& aResults, TRequestStatus& aStatus, TBool aExclusiveOperation)
+	{
+	// An axiliary synchronous call to pass the aExclusiveOperation flag the server as a fifth parameter
+	TIpcArgs ipcArgs1(aExclusiveOperation);
+	CallSessionFunction(EInstallByFileHandleWithOpaqueDataPreamble, ipcArgs1);
+
+	// Proper asynchronous call
+	TIpcArgs ipcArgs2;
+	TInt transferErr = aFileHandle.TransferToServer(ipcArgs2, 0, 1);
+	TRAPD(err, PrepareOpaqueParamsL(ipcArgs2, aArguments, aResults));
+	if (err || transferErr)
+		{
+		TRequestStatus *status(&aStatus);
+		User::RequestComplete(status, err ? err : transferErr);
+		return;
+		}
+	CallSifFunction(EInstallByFileHandleWithOpaqueData, ipcArgs2, aStatus);
+	}
+
+EXPORT_C void RSifTransportClient::Uninstall(TComponentId aComponentId, TRequestStatus& aStatus, TBool aExclusiveOperation)
+	{
+	TIpcArgs ipcArgs(aComponentId, aExclusiveOperation);
+	CallSifFunction(EUninstall, ipcArgs, aStatus);
+	}
+
+EXPORT_C void RSifTransportClient::Uninstall(TComponentId aComponentId, const COpaqueNamedParams& aArguments,
+											COpaqueNamedParams& aResults, TRequestStatus& aStatus, TBool aExclusiveOperation)
+	{
+	TIpcArgs ipcArgs(aComponentId, aExclusiveOperation);
+	TRAPD(err, PrepareOpaqueParamsL(ipcArgs, aArguments, aResults));
+	if (err)
+		{
+		TRequestStatus *status(&aStatus);
+		User::RequestComplete(status, err);
+		return;
+		}
+	
+	CallSifFunction(EUninstallWithOpaqueData, ipcArgs, aStatus);
+	}
+	
+EXPORT_C void RSifTransportClient::Activate(TComponentId aComponentId, TRequestStatus& aStatus)
+	{
+	TIpcArgs ipcArgs(aComponentId);
+	CallSifFunction(EActivate, ipcArgs, aStatus);
+	}
+	
+	
+EXPORT_C void RSifTransportClient::Deactivate(TComponentId aComponentId, TRequestStatus& aStatus)
+	{
+	TIpcArgs ipcArgs(aComponentId);
+	CallSifFunction(EDeactivate, ipcArgs, aStatus);
+	}
+
+EXPORT_C void RSifTransportClient::CancelOperation()
+	{
+	if (iOngoingFunction > 0)
+		{
+		CancelSessionFunction(iOngoingFunction);
+		iOngoingFunction = 0;
+		}
+	}
+	
+void RSifTransportClient::CallSifFunction(TInt aFunction, const TIpcArgs& aArgs, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	iOngoingFunction = aFunction;
+	CallSessionFunction(aFunction, aArgs, aStatus);
+	}
+
+void RSifTransportClient::PrepareOpaqueParamsL(TIpcArgs& aIpcArgs, const COpaqueNamedParams& aArguments,
+											COpaqueNamedParams& aResults)
+	{
+	aArguments.PrepareArgumentsForIpcL(aIpcArgs, 2);
+	aResults.PrepareResultsForIpcL(aIpcArgs, 3);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/siftransportrequest.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,279 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements an AsyncRequest object for the SIF Transport library
+*
+*/
+
+
+#include <e32base.h>
+#include <e32std.h>
+#include <apgcli.h>
+#include <scs/ipcstream.h>
+#include <scs/nullstream.h>
+#include <scs/cleanuputils.h>
+#include <usif/usiferror.h>
+#include "usiflog.h"
+#include "siftransportserver.h"
+#include "siftransportcommon.h"
+
+using namespace Usif;
+
+void CSifTransportRequest::CreateAndExecuteL(TInt aFunction, CSifTransportSession* aSession, TransportTaskFactory::GenerateTask aTaskFactory, const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF2(_L8("CSifTransportRequest::CreateAndExecuteL for aFunction = %d\n"),aFunction);
+		
+	CSifTransportRequest* self = new (ELeave) CSifTransportRequest(aFunction, aSession, aMessage);
+	CleanupStack::PushL(self);
+	
+	// Validate the file handle adoption.
+	TInt err = self->AdoptFileHandle(aFunction, aMessage);
+	if (err != KErrNone)
+		{
+		DEBUG_PRINTF2(_L8("Failed to adopt a file handle from RMessage2, error = %d\n"),err);
+		aMessage.Panic(KSifTransportServerRequestError, err);
+		User::Leave(err);
+		}
+		
+	self->PrepareParamsL();
+	self->SetupRequestL(aTaskFactory);
+	self->TransferToScsFrameworkL();
+	CleanupStack::Pop(self);
+	self->SetActive();
+	self->LaunchTask();
+	}
+
+// Read file handle from aMessage for all request by file handle.
+TInt CSifTransportRequest::AdoptFileHandle(TInt aFunction, const RMessage2& aMessage)
+	{	
+	if (aFunction & EFileHandleInIpc)
+		{
+		 return (iFile.AdoptFromClient(aMessage, 0, 1));
+		}
+	return KErrNone;
+	}
+
+CSifTransportRequest::CSifTransportRequest(TInt aFunction, CSifTransportSession* aSession, const RMessage2& aMessage)
+	:	CAsyncRequest(aSession, 0, aMessage), iFunction(aFunction), iSecurityContext(aMessage)
+	// iFile and iSecurityContext above cannot be a local variable because we pass it to SIF plug-ins during asynchronous calls.
+	// Hence, their lifetime must be guaranteed.
+	{
+	if (iFunction & EInstall)
+		{
+		iComponentId = EInvalidComponentId;
+		}
+
+	// Read component id from aMessage.
+	if (aFunction & EComponentIdInIpc)
+		{
+		iComponentId = aMessage.Int0();
+		}
+	}
+
+CSifTransportRequest::~CSifTransportRequest()
+	{
+	DEBUG_PRINTF2(_L8("CSifRequest::~CSifRequest() for aFunction = %d\n"),iFunction);
+
+	Cancel();
+	
+	if (iParams.iFileHandle != NULL)
+		{
+		iParams.iFileHandle->Close();
+		}
+
+	delete iParams.iFileName;
+	delete iParams.iComponentInfo;
+	delete iParams.iCustomArguments;
+	delete iParams.iCustomResults;
+	delete iTask;
+	}
+
+void CSifTransportRequest::PrepareParamsL()
+	{
+	DEBUG_PRINTF2(_L8("CSifRequest::PrepareParamsL() for aFunction = %d\n"),iFunction);
+
+	// Make sure that the buffers for opaque containers are not allocated
+	ASSERT(iParams.iComponentInfo == NULL);
+	ASSERT(iParams.iCustomArguments == NULL);
+	ASSERT(iParams.iCustomResults == NULL);
+
+	// Read file name from iMessagePtr2
+	if (iFunction & EFileNameInIpc)
+		{
+		// iFileName below cannot be a local variable because we pass it to installation
+		// requests during asynchronous calls. Hence, the lifetime of it must be guaranteed.
+		HBufC* fileName = HBufC::NewL(KMaxFileName);
+		iParams.iFileName = fileName;
+		TPtr bufFileName(fileName->Des());
+		iMessagePtr2.ReadL(0, bufFileName);
+		}
+
+	// Create component info
+	if (iFunction & EComponentInfoInIpc)
+		{
+		iParams.iComponentInfo = CComponentInfo::NewL();
+		}
+
+	// Create containers for custom params
+	if (iFunction & EOpaqueDataToPlugin)
+		{
+		// We have to also create these containers for asynchronous requests
+		// without opaque params. This is because a request API may not
+		// provide methods without opaque params in order to keep it small.
+		iParams.iCustomArguments = COpaqueNamedParams::NewL();
+		iParams.iCustomResults = COpaqueNamedParams::NewL();
+		}
+
+	// Read custom arguments from iMessagePtr2
+	if ((iFunction & EOpaqueDataInIpc) && (iFunction & EOpaqueDataToPlugin))
+		{
+		RIpcReadStream ipcrstream;
+		ipcrstream.Open(iMessagePtr2, 2);
+		CleanupClosePushL(ipcrstream);
+		ipcrstream >> const_cast<COpaqueNamedParams&>(*iParams.iCustomArguments);
+		CleanupStack::PopAndDestroy(&ipcrstream);
+		}
+	}
+
+void CSifTransportRequest::SetupRequestL(TransportTaskFactory::GenerateTask aTaskFactory)
+	{
+	DEBUG_PRINTF2(_L8("CSifTransportRequest::SetupInstallerRequestL() for aFunction = %d\n"),iFunction);
+
+	iParams.iSecurityContext = &iSecurityContext;
+	iParams.iRequestStatus = &iStatus;
+
+	// Instantiate an appropriate SIF Transport Task using aTaskFactory
+	switch (iFunction)
+		{
+		case EGetComponentInfoByFileName:
+		case EGetComponentInfoByFileHandle:
+			{
+			if (iParams.iFileName == NULL)
+				{
+				iParams.iFileHandle = &iFile;
+				}
+
+			iTask = aTaskFactory(TransportTaskFactory::EGetComponentInfo, iParams);
+			break;
+			}
+
+		case EInstallByFileName:
+		case EInstallByFileHandle:
+		case EInstallByFileNameWithOpaqueData:
+		case EInstallByFileHandleWithOpaqueData:
+			{
+			if (iParams.iFileName == NULL)
+				{
+				iParams.iFileHandle = &iFile;
+				}
+
+			iTask = aTaskFactory(TransportTaskFactory::EInstall, iParams);
+			break;
+			}
+
+		case EUninstall:
+		case EUninstallWithOpaqueData:
+			{
+			iParams.iComponentId = iComponentId;
+			iTask = aTaskFactory(TransportTaskFactory::EUninstall, iParams);
+			break;
+			}
+
+		case EActivate:
+			{
+			iParams.iComponentId = iComponentId;
+
+			iTask = aTaskFactory(TransportTaskFactory::EActivate, iParams);
+			break;
+			}
+
+		case EDeactivate:
+			{
+			iParams.iComponentId = iComponentId;
+			iTask = aTaskFactory(TransportTaskFactory::EDeactivate, iParams);
+			break;
+			}
+
+		default:
+			ASSERT(0);
+		}
+	}
+
+void CSifTransportRequest::DoCancel()
+	{
+	DEBUG_PRINTF2(_L8("CSifTransportRequest::DoCancel() for aFunction = %d\n"),iFunction);
+	
+	ASSERT(iTask != NULL);
+
+	iTask->Cancel();
+	}
+
+void CSifTransportRequest::DoCleanup()
+	{
+	DEBUG_PRINTF2(_L8("CSifTransportRequest::DoCleanup() for aFunction = %d\n"),iFunction);
+	Cancel();
+	}
+
+void CSifTransportRequest::ProcessOpaqueResultsL()
+	{
+	// Write custom results to iMessagePtr2
+	RIpcWriteStream ipcwstream;
+	ipcwstream.Open(iMessagePtr2, 3);
+	CleanupClosePushL(ipcwstream);
+	ipcwstream << *iParams.iCustomResults;
+	CleanupStack::PopAndDestroy(&ipcwstream);
+	}
+
+void CSifTransportRequest::ProcessTaskResultsL()
+	{
+	if (iFunction & EComponentInfoInIpc)
+		{
+		// Write component info to iMessagePtr2
+		RIpcWriteStream ipcwstream;
+		ipcwstream.Open(iMessagePtr2, 2);
+		CleanupClosePushL(ipcwstream);
+		ipcwstream << *iParams.iComponentInfo;
+		CleanupStack::PopAndDestroy(&ipcwstream);
+		}
+
+	if (iFunction & EOpaqueDataInIpc)
+		{
+		TRAPD(err, ProcessOpaqueResultsL());
+		if (err != KErrNone)
+			{
+			DEBUG_PRINTF3(_L8("CSifRequest::RunL() for aFunction = %d - received error %d while processing opaque results. The error is ignored, since the install operation has already completed"),iFunction, err);
+			}
+		}
+	}
+
+void CSifTransportRequest::RunL()
+	{
+	DEBUG_PRINTF2(_L8("CSifTransportRequest::RunL() for aFunction = %d\n"),iFunction);
+	
+	if (iTaskComplete)
+		{
+		ProcessTaskResultsL();
+		CAsyncRequest::RunL();
+		}
+	else
+		{
+		SetActive();
+		iTaskComplete = iTask->Execute();
+		}
+	}
+
+void CSifTransportRequest::LaunchTask()
+	{
+	iTaskComplete = iTask->Execute();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/siftransportserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2008 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements the SIF Transport Server.
+*
+*/
+
+
+#include "siftransportserver.h"
+#include "siftransportcommon.h"
+#include <e32property.h>
+#include "sifnotification_internal.h"
+#include "scrclient.inl"
+
+using namespace Usif;
+
+CSifTransportServer* CSifTransportServer::NewLC(const TDesC& aServerName, const TVersion& aVersion,
+									TransportTaskFactory::GenerateTask aTaskFactory, TInt aShutdownPeriodUs)
+/**
+	Factory function allocates new, initialized instance of
+	CSifServer which is left on the cleanup stack.
+
+	@return					New, initialized instance of CSifServer
+							which is left on the cleanup stack.
+ */
+	{
+	CSifTransportServer* self = new (ELeave) CSifTransportServer(aVersion, aTaskFactory);
+	CleanupStack::PushL(self);
+	self->ConstructL(aServerName, aShutdownPeriodUs);
+	return self;
+	}
+
+CSifTransportServer::CSifTransportServer(const TVersion& aVersion, TransportTaskFactory::GenerateTask aTaskFactory)
+/**
+	Initializes the superclass with this server's version.
+ */
+	:	CScsServer(aVersion), iTaskFactory(aTaskFactory)
+	{
+	}
+
+void CSifTransportServer::ConstructL(const TDesC& aServerName, TInt aShutdownPeriodUs)
+/**
+	Second-phase construction initializes the superclass and
+	starts the server.
+ */
+	{
+	// Define a key (KSifOperationKey) which would be used to notify the client of any new operations.
+    TInt ret = RProperty::Define(KUidSystemCategory, KSifOperationKey, RProperty::EByteArray, KSecurityPolicyWDD, KSecurityPolicyNone,(sizeof(TInt) * KMaxNumberOfOperations));
+    if (ret != KErrAlreadyExists && ret != KErrNone)
+        {
+        User::Leave(ret);
+        }
+
+    if(ret == KErrNone)
+        {
+        // Create a empty CSifOperationKey object and publish it.
+        CSifOperationKey* nullKey = CSifOperationKey::NewL();
+        CleanupStack::PushL(nullKey);
+        RBuf8 nullKeyBuffer;
+        nullKeyBuffer.CleanupClosePushL();
+        ExternalizeRefObjectL(*nullKey, nullKeyBuffer);
+        User::LeaveIfError(RProperty::Set(KUidSystemCategory, KSifOperationKey, nullKeyBuffer));
+		CleanupStack::PopAndDestroy(2, nullKey);
+        }
+    
+    CScsServer::ConstructL(aShutdownPeriodUs);
+	StartL(aServerName);
+	}
+
+
+CSifTransportServer::~CSifTransportServer()
+/**
+	Cleanup the server, in particular close the RFs session.
+ */
+	{
+	RProperty::Delete(Usif::KSifOperationKey);
+	}
+
+CScsSession* CSifTransportServer::DoNewSessionL(const RMessage2& /*aMessage*/)
+/**
+	Implement CScsServer by allocating a new instance of CSifSession.
+
+	@param	aMessage	Standard server-side handle to message.	 Not used.
+	@return			New instance of CSifSession which is owned by the
+					caller.
+ */
+	{
+	return CSifTransportSession::NewL(*this, iTaskFactory);
+	}
+
+namespace
+	{
+	struct TServerStartupInfo
+		{
+		const TDesC* iServerName;
+		const TVersion* iVersion;
+		TransportTaskFactory::GenerateTask iTaskFactory;
+		TInt iShutdownPeriodUs;
+		};
+	}
+
+EXPORT_C CScsServer* CSifTransportServer::NewSifTransportServerLC()
+/**
+	This factory function is called by SCS.  It allocates
+	the server object and leaves it on the cleanup stack.
+
+	@return	New initialized instance of CScsTestServer.
+			On return this is on the cleanup stack.
+*/ 
+	{
+	TServerStartupInfo* ssi = static_cast<TServerStartupInfo*>(Dll::Tls());
+	return CSifTransportServer::NewLC(*ssi->iServerName, *ssi->iVersion, ssi->iTaskFactory, ssi->iShutdownPeriodUs);
+	}
+
+namespace Usif
+	{
+	EXPORT_C TInt StartTransportServer(const TDesC& aServerName, const TVersion& aVersion, TransportTaskFactory::GenerateTask aTaskFactory,  TInt aShutdownPeriodUs)
+		{
+		// A local object can be used with TLS here because it is read by CSifTransportServer::NewSifTransportServerLC()
+		// before we leave the scope of this function. This is because CSifTransportServer::NewSifTransportServerLC() is a callback
+		// function called by the SCS Server in response to StartScsServer().
+		TServerStartupInfo ssi = {&aServerName, &aVersion, aTaskFactory, aShutdownPeriodUs};
+		Dll::SetTls(&ssi);
+		TInt err = StartScsServer(CSifTransportServer::NewSifTransportServerLC);
+		return err;
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/siftransportsession.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements the SIF Transport Session
+*
+*/
+
+
+#include "siftransportserver.h"
+#include <scs/ipcstream.h>
+#include <scs/nullstream.h>
+#include <usif/sif/sif.h>
+#include "siftransportcommon.h"
+#include "usiflog.h"
+
+using namespace Usif;
+
+CSifTransportSession* CSifTransportSession::NewL(CSifTransportServer &aServer, TransportTaskFactory::GenerateTask aTaskFactory)
+/**
+	Factory function allocates new instance of CSifTransportSession.
+
+	@return	New, initialized instance of CSifTransportSession
+			which is owned by the caller.
+ */
+	{
+	CSifTransportSession* self = new (ELeave) CSifTransportSession(aServer, aTaskFactory);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CSifTransportSession::CSifTransportSession(CSifTransportServer &aServer, TransportTaskFactory::GenerateTask aTaskFactory)
+/**
+	This private constructor prevents direct instantiation.
+ */
+	: CScsSession(aServer), iTaskFactory(aTaskFactory), iExclusiveOperation(ETrue)
+	{
+	DEBUG_PRINTF3(_L8("0x%x CSifSession(server %x)\n"), this, &aServer);
+	}
+
+CSifTransportSession::~CSifTransportSession()
+/**
+	The base class destructor destroys any remaining subsessions
+	or outstanding requests.
+ */
+	{
+	DEBUG_PRINTF2(_L8("0x%x ~CSifTransportSession)\n"), this);
+	}
+
+TBool CSifTransportSession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
+/**
+	Implement CScsSession by handling the supplied message.
+
+	Note the subsession creation command is automatically sent to
+	DoCreateSubsessionL, and not this function.
+
+	@param	aFunction	Function identifier without SCS code.
+	@param	aMessage	Standard server-side handle to message.
+ */
+	{
+
+	DEBUG_PRINTF3(_L8("0x%x CSifSession::DoServiceL function %d\n"), this, aFunction);
+
+	// Check if aFunction falls into the expected range
+	if (aFunction < EGetComponentInfoByFileName || aFunction > EDeactivate)
+		{
+		aMessage.Panic(KSifTransportServerRequestError, KErrNotSupported);
+		return ETrue;
+		}
+
+	// Check if this is an Install or Uninstall request, if yes read the ExclusiveOperation flag from aMessage
+	if (aFunction == EGetComponentInfoByFileName || aFunction == EGetComponentInfoByFileHandle)
+		{
+		// GetComponentInfo requests are always processed regardless of the state of the SIF server.
+		iExclusiveOperation = EFalse;
+		}
+	else if (aFunction >= EInstallByFileName && aFunction <= EUninstallWithOpaqueData)
+		{
+		// Read the ExclusiveOperation flag from aMessage for a synchronous request
+		if (aFunction == EInstallByFileHandleWithOpaqueDataPreamble)
+			{
+			iExclusiveOperation = aMessage.Int0() != EFalse;
+			return ETrue;
+			}
+
+		// Read the ExclusiveOperation flag from aMessage for asynchronous requests
+		if (aFunction == EInstallByFileName ||
+			aFunction == EInstallByFileNameWithOpaqueData ||
+			aFunction == EUninstall ||
+			aFunction == EUninstallWithOpaqueData)
+			{
+			iExclusiveOperation = aMessage.Int1() != EFalse;
+			}
+		else if (aFunction == EInstallByFileHandle)
+			{
+			iExclusiveOperation = aMessage.Int2() != EFalse;
+			}
+		}
+	else
+		{
+		// We set iExclusiveOperation to ETrue in the constructor. However, we have to
+		// set it here again because the client may send more requests within the same
+		// session.
+		iExclusiveOperation = ETrue;
+		}
+
+	// If the  ExclusiveOperation flag is set to ETrue and there is another pending request we leave with KErrServerBusy
+	if (iExclusiveOperation && iServer.iAsyncRequests.Count() > 0)
+		{
+		User::Leave(KErrServerBusy);
+		}
+
+	// Create new request and execute it
+	CSifTransportRequest::CreateAndExecuteL(aFunction, this, iTaskFactory, aMessage);
+
+	return EFalse;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/siftransporttask.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sifinstallerrequest.cpp
+* This file implements the CSifTransportTask class.
+*
+*/
+
+
+#include <usif/sif/siftransporttask.h>
+#include <usif/usiferror.h>
+
+using namespace Usif;
+
+EXPORT_C TTransportTaskParams::TTransportTaskParams()
+	: iComponentInfo(NULL),
+	iComponentId(EInvalidComponentId),
+	iFileName(NULL),
+	iFileHandle(NULL),
+	iCustomArguments(NULL),
+	iCustomResults(NULL),
+	iRequestStatus(NULL)
+	{
+	}
+
+// ===========================================================================================================
+
+EXPORT_C CSifTransportTask::CSifTransportTask(TTransportTaskParams& aParams, TBool aAutoCompletion)
+	: iParams(aParams), iAutoCompletion(aAutoCompletion)
+	{
+	}
+
+EXPORT_C CSifTransportTask::~CSifTransportTask()
+	{
+	}
+
+TBool CSifTransportTask::Execute()
+	{
+	TBool done(EFalse);
+	TRAPD(err, done = ExecuteImplL());
+	if (err != KErrNone)
+		{
+		TRequestStatus* status(iParams.iRequestStatus);
+		User::RequestComplete(status, err);
+		done = ETrue;
+		}
+	else if (iAutoCompletion)
+		{
+		TRequestStatus* status(iParams.iRequestStatus);
+		User::RequestComplete(status, KErrNone);
+		}
+	return done;
+	}
+
+void CSifTransportTask::Cancel()
+	{
+	CancelImpl();
+	}
+
+EXPORT_C void CSifTransportTask::CancelImpl()
+	{
+	}
+
+EXPORT_C TComponentId CSifTransportTask::ComponentId() const
+	{
+	return iParams.iComponentId;
+	}
+
+EXPORT_C const TDesC* CSifTransportTask::FileName() const
+	{
+	return iParams.iFileName;
+	}
+
+EXPORT_C RFile* CSifTransportTask::FileHandle()
+	{
+	return iParams.iFileHandle;
+	}
+
+EXPORT_C const COpaqueNamedParams* CSifTransportTask::CustomArguments() const
+	{
+	return iParams.iCustomArguments;
+	}
+
+EXPORT_C COpaqueNamedParams* CSifTransportTask::CustomResults()
+	{
+	return iParams.iCustomResults;
+	}
+
+EXPORT_C const TSecurityContext* CSifTransportTask::SecurityContext() const
+	{
+	return iParams.iSecurityContext;
+	}
+
+EXPORT_C TRequestStatus* CSifTransportTask::RequestStatus()
+	{
+	return iParams.iRequestStatus;
+	}
+
+EXPORT_C CComponentInfo* CSifTransportTask::ComponentInfo()
+	{
+	return iParams.iComponentInfo;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/source/sifutils.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements the SifUtils library
+*
+*/
+
+
+#include <usif/scr/scr.h>
+#include <usif/sts/sts.h>
+#include "sifutils.h"
+#include "scr_internal.h"
+
+EXPORT_C void Usif::UninstallL(TComponentId aComponentId)
+	{
+	// Connect to the SCR and start a transaction
+	RSoftwareComponentRegistry scr;
+	User::LeaveIfError(scr.Connect());
+	CleanupClosePushL(scr);
+	scr.CreateTransactionL();
+		// Connect to the STS and start a transaction
+	RStsSession sts;
+	sts.CreateTransactionL();
+	CleanupClosePushL(sts);
+		// Get a list of files to be deleted
+	RSoftwareComponentRegistryFilesList fileList;
+	fileList.OpenListL(scr, aComponentId);
+	CleanupClosePushL(fileList);
+		// Unregister and delete the files from iFileList
+	HBufC* file = NULL;
+	while ((file = fileList.NextFileL()) != NULL)
+		{
+		CleanupStack::PushL(file);
+		sts.RemoveL(*file);
+		CleanupStack::PopAndDestroy(file);
+		}
+	CleanupStack::PopAndDestroy(&fileList);
+	
+	// Delete the component from the SCR
+	scr.DeleteComponentL(aComponentId);
+
+	// Commit the STS & SCR transactions
+	sts.CommitL();
+	scr.CommitTransactionL();
+	CleanupStack::PopAndDestroy(2, &scr);
+	}
+	
+EXPORT_C TUid Usif::GenerateNewAppUidL()
+    {
+    // Connect to SCR using the internal client.
+    RScrInternalClient scr;
+    User::LeaveIfError(scr.Connect());
+    CleanupClosePushL(scr);
+    
+	//Request for an unused UID.
+    TUid generatedUid = scr.GenerateNewAppUidL();
+    
+    CleanupStack::PopAndDestroy(&scr);
+    return generatedUid;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/group/cleansiflauncher.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,30 @@
+@rem
+@rem Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+@echo off
+
+set PLATFORM=%1
+set CFG=%2
+
+del /f /q %EPOCROOT%epoc32\release\%PLATFORM%\%CFG%\siflauncher.exe
+
+del /f /q %EPOCROOT%epoc32\release\%PLATFORM%\%CFG%\z\resource\apps\siflauncher.mbm
+del /f /q %EPOCROOT%epoc32\release\%PLATFORM%\%CFG%\z\resource\apps\siflauncher_loc.rsc
+del /f /q %EPOCROOT%epoc32\release\%PLATFORM%\%CFG%\z\private\10003a3f\apps\siflauncher_reg.rsc
+
+del /f /q %EPOCROOT%epoc32\data\z\resource\apps\siflauncher.mbm
+del /f /q %EPOCROOT%epoc32\data\z\resource\apps\siflauncher_loc.rsc
+del /f /q %EPOCROOT%epoc32\data\z\private\10003a3f\apps\siflauncher_reg.rsc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/group/cleansiflauncher.makefile	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,39 @@
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+# cleansiflauncher.makefile cleans the production version of the SIF Launcher.
+#
+
+do_nothing:
+	rem do nothing
+
+#
+# The targets invoked by abld...
+#
+
+MAKMAKE : do_nothing
+FREEZE : do_nothing
+LIB : do_nothing
+RESOURCE : do_nothing
+CLEANLIB : do_nothing
+FINAL : do_nothing
+SAVESPACE : do_nothing
+CLEAN : do_nothing
+RELEASABLES : do_nothing
+
+BLD : 
+	echo **************************************************
+	echo Removing SIF Launcher files after production build
+	echo **************************************************
+	call cleansiflauncher.bat $(PLATFORM) $(CFG)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/group/tsiflauncher.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Test version of the SIF Launcher. It registers the reference
+* software type "binary/sif-refpkg" in addition to the production
+* configuration that registers "x-epoc/x-sisx-app" only.
+*
+*/
+
+
+TARGET				siflauncher.exe
+TARGETTYPE			exe
+TARGETPATH			/sys/bin
+
+// We need WriteDeviceData so that the installer data types can have priority EDataTypePrioritySystem
+CAPABILITY			TrustedUI WriteDeviceData
+
+VENDORID			0x70000001
+
+UID					0x0 0x10285BD0
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE			../../inc
+USERINCLUDE			../../common/inc
+
+SOURCEPATH			../../source
+SOURCE				siflauncher.cpp
+
+SOURCEPATH			../siflauncherconfig
+
+START RESOURCE		siflauncher_reg.rss
+TARGETPATH			/private/10003a3f/apps
+END
+
+start resource		siflauncher_loc.rss
+targetpath			/resource/apps
+lang				sc
+end
+
+// Bitmaps
+START BITMAP		siflauncher.mbm
+SOURCEPATH			../../../swiconfig/usif/siflauncher
+TARGETPATH			/resource/apps
+HEADER
+SOURCE				c8,1 INST24.bmp INST24M.BMP INST32.BMP INST32M.BMP INST48.BMP INST48M.BMP
+END
+
+LIBRARY				euser.lib efsrv.lib
+LIBRARY				apgrfx.lib apparc.lib apmime.lib
+LIBRARY				sif.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/plugins/nonnativeplugin/group/testnonnativeplugin.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Project specification file for a SIF non-native reference plugin
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+TARGET				testnonnativeplugin.dll
+TARGETTYPE			PLUGIN
+
+UID 0x10009D8D 0x10285BD1
+
+CAPABILITY			ProtServ TrustedUI ReadUserData WriteDeviceData
+
+SOURCEPATH			../source
+SOURCE				testnonnativeplugin.cpp
+
+USERINCLUDE			../../../../common/inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+START RESOURCE 10285BD1.rss
+	TARGET testnonnativeplugin.rsc
+END
+
+LIBRARY euser.lib efsrv.lib
+
+LIBRARY sif.lib scrclient.lib stsclient.lib sifutils.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/plugins/nonnativeplugin/group/testnonnativeplugin2.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Project specification file for a SIF non-native reference plugin
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+MACRO TESTNONNATIVEPLUGIN2
+
+TARGET				testnonnativeplugin2.dll
+TARGETTYPE			PLUGIN
+
+UID 0x10009D8D 0x102866EE
+
+VENDORID	0x70000001
+
+CAPABILITY			ProtServ TrustedUI ReadUserData WriteDeviceData
+
+SOURCEPATH			../source
+SOURCE				testnonnativeplugin.cpp
+
+USERINCLUDE			../../../../common/inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+START RESOURCE 102866EE.rss
+	TARGET testnonnativeplugin2.rsc
+END
+
+LIBRARY euser.lib efsrv.lib
+
+LIBRARY sif.lib scrclient.lib stsclient.lib sifutils.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/plugins/nonnativeplugin/source/10285BD1.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* ECOM DLL UID:			0x10285BD1
+* ECOM interface UID:		0x10285BC2 (KUidSifPlugin)
+* ECOM Implementation:		0x10285BD2
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+
+RESOURCE REGISTRY_INFO so_registry
+	{
+	dll_uid = 0x10285BD1;
+	interfaces =
+		{
+		INTERFACE_INFO
+			{
+			interface_uid = 0x10285BC2;
+			
+			implementations =
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x10285BD2;
+					version_no = 1;
+					default_data = "";
+					opaque_data = "";
+					}
+				};
+			}
+		};
+	}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/plugins/nonnativeplugin/source/102866EE.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* ECOM DLL UID:			0x102866EE
+* ECOM interface UID:		0x10285BC2 (KUidSifPlugin)
+* ECOM Implementation:		0x102866EF
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+
+RESOURCE REGISTRY_INFO so_registry
+	{
+	dll_uid = 0x102866EE;
+	interfaces =
+		{
+		INTERFACE_INFO
+			{
+			interface_uid = 0x10285BC2;
+			
+			implementations =
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x102866EF;
+					version_no = 1;
+					default_data = "";
+					opaque_data = "";
+					}
+				};
+			}
+		};
+	}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/plugins/nonnativeplugin/source/testnonnativeplugin.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,422 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "testnonnativeplugin.h"
+#include "usiflog.h"
+#include <usif/sif/sif.h>
+#include <usif/sif/sifcommon.h>
+#include <usif/usiferror.h>
+#include <usif/sif/sifplugin.h>
+#include <usif/scr/screntries.h>
+#include <usif/scr/scr.h>
+#include <usif/sts/sts.h>
+#include <usif/sif/sifutils.h>
+
+using namespace Usif;
+
+namespace
+	{
+	const TInt KUserGrantableCapsBitMask = 49152; // ECapabilityReadUserData, ECapabilityWriteUserData
+	const TInt KMaxInstalledSize = 1234;
+	const TBool KHasExe = EFalse;
+	const TBool KDriveSelectionRequired = EFalse;	
+	const TAuthenticity KAuthenticity = EAuthenticated;
+	_LIT_SECURE_ID(KSifTestSuiteSecureId, 0x10285BCC);
+	_LIT_SECURE_ID(KSifRefInstallerServerSecureId, 0x1028634E);
+	_LIT_SECURE_ID(KSifLauncherSecureId, 0x10285BD0);
+	_LIT(KSifTestComponentVersion, "1.0.0");
+	_LIT(KSifTestGlobalComponentId, "test.nonnativepackage.txt");
+#ifndef TESTNONNATIVEPLUGIN2
+	const TInt KTestNonNativePluginImpId = 0x10285BD2;
+	const TComponentId KSifTestComponentId = 12345678;
+	_LIT(KSifTestSoftwareType, "plain");
+	_LIT(KSifTestComponentName, "Test Component");
+	_LIT(KSifTestComponentVendor, "Symbian");
+	_LIT(KSifTestInstallPath, "c:\\tusif\\tsif\\nonnativeplugin\\%S\\file%d");
+	_LIT(KSifTestOutIntParam, "NonNativePlugin");
+#else
+	const TInt KTestNonNativePluginImpId = 0x102866EF;
+	const TComponentId KSifTestComponentId = 87654321;
+	_LIT(KSifTestSoftwareType, "testSoftwareType");
+	_LIT(KSifTestComponentName, "Test Layered Execution Environment");
+	_LIT(KSifTestComponentVendor, "Test Vendor");
+	_LIT(KSifTestInstallPath, "c:\\tusif\\tsif\\nonnativeplugin2\\%S\\file%d");
+	_LIT(KSifTestOutIntParam, "NonNativePlugin2");
+#endif
+
+	const TImplementationProxy ImplementationTable[] = 
+		{
+		IMPLEMENTATION_PROXY_ENTRY(KTestNonNativePluginImpId, CTestNonNativePlugin::NewL)
+		};
+
+	void UnpackCapabilitySet(TInt aPackedCapSet, TCapabilitySet& aCapSet)
+		{
+		for (TInt c=0; c<ECapability_Limit; ++c)
+			{
+			const TInt cap = 1<<c;
+			if (aPackedCapSet&cap)
+				{
+				aCapSet.AddCapability(TCapability(c));
+				}
+			}
+		}
+
+	TComponentId AddComponentToScrL(RSoftwareComponentRegistry& aScr, const TDesC& aComponentName, const TDesC& aVendor)
+		{
+		// Check if the component is already installed
+		RSoftwareComponentRegistryView scrView;
+		CComponentFilter* filter = CComponentFilter::NewLC();
+		filter->SetNameL(aComponentName);
+		filter->SetVendorL(aVendor);
+
+		scrView.OpenViewL(aScr, filter);
+		CleanupClosePushL(scrView);
+
+		CComponentEntry* component = scrView.NextComponentL();
+		CleanupStack::PopAndDestroy(2, filter);
+		if (component != NULL)
+			{
+			delete component;
+			DEBUG_PRINTF2(_L("Non-native component: %S already installed"), &aComponentName);
+			User::Leave(KErrSifSameVersionAlreadyInstalled);
+			}
+
+		TComponentId componentId = aScr.AddComponentL(aComponentName, aVendor, KSifTestSoftwareType);
+		DEBUG_PRINTF2(_L("Added a non-native component with id %d"), componentId);
+
+		return componentId;
+		}
+
+	void CreateAndRegisterFilesL(RSoftwareComponentRegistry& aScr, TComponentId aComponentId, const TDesC& aComponentName)
+		{
+		RStsSession sts;
+		sts.CreateTransactionL();
+		CleanupClosePushL(sts);
+
+		const TInt numComponentFiles = 3;
+		const TInt maxIntDigits = 10;
+		
+		TInt componentSize = 0;
+		
+		for (TInt i=0; i<numComponentFiles; ++i)
+			{
+			// Generate the full path of the i-th file
+			const TInt maxPathLen = KSifTestInstallPath.iTypeLength+aComponentName.Length()+maxIntDigits;
+			HBufC* filePath = HBufC::NewLC(maxPathLen);
+			TPtr filePathPtr = filePath->Des();
+			filePathPtr.Format(KSifTestInstallPath, &aComponentName, i);
+
+			// Create the file
+			RFile file;
+			sts.CreateNewL(*filePath, file, TFileMode(EFileShareExclusive |EFileWrite));
+			_LIT8(KNonNativeFootprint, "This file belongs to the Non-Native Test component.");
+			User::LeaveIfError(file.Write(KNonNativeFootprint));
+			componentSize += KNonNativeFootprint.iTypeLength;
+			file.Close();
+
+			// Register the file in the SCR
+			aScr.RegisterComponentFileL(aComponentId, *filePath);
+
+			CleanupStack::PopAndDestroy(filePath);
+			}
+
+		aScr.SetComponentSizeL(aComponentId, componentSize);
+
+		sts.CommitL();
+		CleanupStack::PopAndDestroy(&sts);
+		}
+
+	// The literals below are hardcoded because they are used only here so there
+	// is no risk of duplication or a typo. Of course, they are also used in the
+	// sif.ini file but we cannot reuse them there in any case.
+
+	void ProcessOpaqueParamsL(const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams)
+		{
+		aOutputParams.AddIntL(KSifTestOutIntParam, ETrue);
+		TInt silent = ETrue;
+		TBool silentFound = aInputParams.GetIntByNameL(_L("DoSilent"), silent);
+		if (silentFound)
+			{
+			aOutputParams.AddIntL(_L("DoneSilently"), silent);
+			}
+		}
+
+	void InstallL(const TDesC& aComponentName, COpaqueNamedParams& aOutputParams)
+		{
+		RSoftwareComponentRegistry scr;
+		User::LeaveIfError(scr.Connect());
+		CleanupClosePushL(scr);
+		scr.CreateTransactionL();
+
+		TComponentId componentId = AddComponentToScrL(scr, aComponentName, KSifTestComponentVendor);
+		aOutputParams.AddIntL(KSifOutParam_ComponentId, componentId);
+
+		CreateAndRegisterFilesL(scr, componentId, aComponentName);
+
+		scr.CommitTransactionL();
+		CleanupStack::PopAndDestroy(&scr);
+		}
+
+	void InstallImplL(const TDesC& aFileName, const TSecurityContext& /*aSecurityContext*/,
+					const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams)
+		{
+		// The "DummyInstallation" param instructs the installer not to execute any real operation. This dummy installation
+		// is needed in order to test the ExcludeOperation mode supported by the SIF APIs. Running multiple concurrent
+		// SIF operations may lead to concurrent SCR transactions which are not supported. Hence, this dummy installation
+		// is used as a 'safe' installation that may be launched concurrently with a regular native installation.
+		TInt dummyInstallation = EFalse;
+		if (aInputParams.GetIntByNameL(_L("DummyInstallation"), dummyInstallation) && dummyInstallation)
+			{
+			return;
+			}
+
+		ProcessOpaqueParamsL(aInputParams, aOutputParams);
+
+		TPtrC name;
+		const TInt pos = aFileName.LocateReverse('\\');
+		if (pos != KErrNotFound)
+			{
+			name.Set(aFileName.Mid(pos+1));
+			}
+		else
+			{
+			name.Set(aFileName);
+			}
+		
+		InstallL(name, aOutputParams);
+		}
+
+	void InstallImplL(RFile& aFileHandle, const TSecurityContext& /*aSecurityContext*/,
+					const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams)
+		{
+		ProcessOpaqueParamsL(aInputParams, aOutputParams);
+		HBufC* name = HBufC::NewLC(KMaxFullName);
+		TPtr namePtr = name->Des();
+		User::LeaveIfError(aFileHandle.Name(namePtr));
+		InstallL(*name, aOutputParams);
+		CleanupStack::PopAndDestroy(name);
+		}
+
+	void UninstallImplL(TComponentId aComponentId, const TSecurityContext& /*aSecurityContext*/,
+						const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams)
+		{
+		ProcessOpaqueParamsL(aInputParams, aOutputParams);
+
+		// Uninstall the component using the SIF Utils Library
+		UninstallL(aComponentId);
+		}
+
+	void CheckSecurityContextL(const TSecurityContext& aSecurityContext)
+		{
+		// There are three executables that may issue software management request for TestNonNative packages.
+		// These are:
+		// (1) TEF test server (KSifTestSuiteSecureId) - all USIF tests
+		// (2) the Reference Installer (KSifRefInstallerServerSecureId) - cross installer tests (for embedded packages)
+		// (3) the SIF Launcher - for testing integration with AppArc
+		// For the first two we also check ReadUserData to ensure coverage in integration tests
+		if (aSecurityContext.SecureId() == KSifLauncherSecureId)
+			return;
+		aSecurityContext.HasCapabilityL(ECapabilityReadUserData);
+		if (aSecurityContext.SecureId() != KSifTestSuiteSecureId &&
+			aSecurityContext.SecureId() != KSifRefInstallerServerSecureId )
+			{
+			User::Leave(KErrPermissionDenied);
+			}
+		}
+
+	TBool CheckSecurityContext(const TSecurityContext& aSecurityContext)
+		{
+		if (aSecurityContext.SecureId() == KSifLauncherSecureId)
+			return ETrue;
+		return aSecurityContext.HasCapability(ECapabilityReadUserData) &&
+			   (aSecurityContext.SecureId() == KSifTestSuiteSecureId ||
+			    aSecurityContext.SecureId() == KSifRefInstallerServerSecureId);
+		}
+
+	void GetComponentInfoImplL(CComponentInfo& aComponentInfo, TBool aTestOverflow = EFalse)
+		{
+		// Prepare capabilities
+		TCapabilitySet capSet;
+		RPointerArray<Usif::CComponentInfo::CApplicationInfo>* applications = NULL;
+		capSet.SetEmpty();
+		UnpackCapabilitySet(KUserGrantableCapsBitMask, capSet);
+		
+		// Create the root node of the CComponentInfo object
+		CComponentInfo::CNode* rootNode = CComponentInfo::CNode::NewLC(KSifTestSoftwareType, KSifTestComponentName,
+						KSifTestComponentVersion, KSifTestComponentVendor, EDeactivated, ENewComponent,
+						KSifTestComponentId, KSifTestGlobalComponentId, KAuthenticity, capSet, KMaxInstalledSize, KHasExe, KDriveSelectionRequired, applications);
+
+		// Create a long string used for overflow tests
+		HBufC* longStr = NULL;
+
+		if (aTestOverflow)
+			{
+			// The CComponentInfo class defines KMaxComponentInfoStreamedSize as:
+			// KMaxComponentInfoStreamedSize = 2*KMaxHeapBufLength+6*sizeof(TInt)+sizeof(TInt8), where KMaxHeapBufLength = 2048
+			// So, we need a tree of CNode objects in order to cause a KErrOverflow error
+			const TInt longStrLen = 256;
+			longStr = HBufC::NewLC(longStrLen);
+			TPtr longStrPtr(longStr->Des());
+			longStrPtr.Fill(TChar(0xadcb), longStrLen);
+
+			const TInt numChildren = 3;
+			for (TInt i=0; i<numChildren; ++i)
+				{
+				CComponentInfo::CNode* childNode = CComponentInfo::CNode::NewLC(KSifTestSoftwareType, *longStr,
+						KSifTestComponentVersion, *longStr, EDeactivated, ENewComponent,
+						KSifTestComponentId, *longStr, KAuthenticity, capSet, KMaxInstalledSize, KHasExe, KDriveSelectionRequired, applications);
+				
+				rootNode->AddChildL(childNode);
+				CleanupStack::Pop(childNode);
+				}
+			
+			CleanupStack::PopAndDestroy(longStr);
+			}
+
+		aComponentInfo.SetRootNodeL(rootNode);
+		CleanupStack::Pop(rootNode);
+
+		}
+	}
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
+
+CTestNonNativePlugin* CTestNonNativePlugin::NewL()
+	{
+	DEBUG_PRINTF(_L8("Constructing CTestNonNativePlugin"));
+	CTestNonNativePlugin *self = new (ELeave) CTestNonNativePlugin();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestNonNativePlugin::ConstructL()
+	{
+	}
+
+CTestNonNativePlugin::~CTestNonNativePlugin()
+	{
+	}
+
+void CTestNonNativePlugin::CancelOperation()
+	{
+	DEBUG_PRINTF(_L8("Test non-native plugin - Cancel"));
+	}
+
+void CTestNonNativePlugin::GetComponentInfo(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+										CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Test non-native plugin - GetComponentInfo by filename"));
+	aStatus = KRequestPending;
+
+	TInt err = KErrNone;
+	// We test a non-leaving version of TSecurityContext::HasCapability() here
+	if (CheckSecurityContext(aSecurityContext))
+		{
+		_LIT(KTxtTestOverflow, "z:\\tusif\\tsif\\data\\test.overflow.txt");
+		TRAP(err, GetComponentInfoImplL(aComponentInfo, aFileName == KTxtTestOverflow));
+		}
+	else
+		{
+		err = KErrPermissionDenied;
+		}
+
+	TRequestStatus *statusPtr(&aStatus);
+	User::RequestComplete(statusPtr, err);
+	}
+
+void CTestNonNativePlugin::GetComponentInfo(RFile& /*aFileHandle*/, const TSecurityContext& aSecurityContext,
+											CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Test non-native plugin - GetComponentInfo by file handle"));
+	aStatus = KRequestPending;
+
+	TRAPD(err, CheckSecurityContextL(aSecurityContext);
+			   GetComponentInfoImplL(aComponentInfo));
+
+	TRequestStatus *statusPtr(&aStatus);
+	User::RequestComplete(statusPtr, err);
+	}
+
+void CTestNonNativePlugin::Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+									const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+									TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF2(_L("Test non-native plugin - install for %S"), &aFileName);
+	aStatus = KRequestPending;
+
+	TRAPD(err, CheckSecurityContextL(aSecurityContext);
+				InstallImplL(aFileName, aSecurityContext, aInputParams, aOutputParams));
+
+	TRequestStatus *statusPtr(&aStatus);
+	User::RequestComplete(statusPtr, err);
+	}
+
+void CTestNonNativePlugin::Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+									const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+									TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L("Test non-native plugin - install by file handle"));
+	aStatus = KRequestPending;
+	
+	TRAPD(err, CheckSecurityContextL(aSecurityContext);
+			   InstallImplL(aFileHandle, aSecurityContext, aInputParams, aOutputParams));
+
+	TRequestStatus *statusPtr(&aStatus);
+	User::RequestComplete(statusPtr, err);
+	}
+
+void CTestNonNativePlugin::Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF2(_L8("Test non-native plugin - uninstall for ComponentId =  %d"), aComponentId);
+	aStatus = KRequestPending;
+
+	TRAPD(err, CheckSecurityContextL(aSecurityContext);
+	 		   UninstallImplL(aComponentId, aSecurityContext, aInputParams, aOutputParams));
+
+	TRequestStatus* statusPtr(&aStatus);
+	User::RequestComplete(statusPtr, err);
+	}
+
+void CTestNonNativePlugin::Activate(TComponentId /*aComponentId*/, const TSecurityContext& aSecurityContext, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Test non-native plugin - activate"));
+	aStatus = KRequestPending;
+
+	TRAPD(err, CheckSecurityContextL(aSecurityContext));
+
+	TRequestStatus* statusPtr(&aStatus);
+	User::RequestComplete(statusPtr, err);
+	}
+
+void CTestNonNativePlugin::Deactivate(TComponentId /*aComponentId*/, const TSecurityContext& aSecurityContext, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Test non-native plugin - deactivate"));
+	aStatus = KRequestPending;
+
+	TRAPD(err, CheckSecurityContextL(aSecurityContext));
+
+	TRequestStatus* statusPtr(&aStatus);
+	User::RequestComplete(statusPtr, err);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/plugins/nonnativeplugin/source/testnonnativeplugin.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This class implements a non-native test SIF plug-in
+*
+*/
+
+
+/**
+ @file
+ //@internalComponent
+*/
+
+#ifndef TESTNONNATIVEPLUGIN_H
+#define TESTNONNATIVEPLUGIN_H
+
+#include <usif/sif/sifplugin.h>
+#include <usif/scr/screntries.h>
+#include <e32base.h>
+#include <e32std.h>
+
+namespace Usif
+	{
+
+	NONSHARABLE_CLASS(CTestNonNativePlugin) : public CSifPlugin
+		{
+	public:
+		static CTestNonNativePlugin* NewL();
+		~CTestNonNativePlugin();
+	
+		// MSIFPlugin interface
+		void GetComponentInfo(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+							CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+
+		void GetComponentInfo(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+							CComponentInfo& aComponentInfo, TRequestStatus& aStatus);
+		
+		void Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+					const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+					TRequestStatus& aStatus);
+
+		void Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+					const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+					TRequestStatus& aStatus);
+
+		virtual void Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+								TRequestStatus& aStatus);
+
+		virtual void Activate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								TRequestStatus& aStatus);
+
+		virtual void Deactivate(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								TRequestStatus& aStatus);
+
+		void CancelOperation();
+	private:
+		CTestNonNativePlugin() {}
+		void ConstructL();
+		CTestNonNativePlugin(const CTestNonNativePlugin &);
+		CTestNonNativePlugin & operator =(const CTestNonNativePlugin &);
+		};
+	} // end namespace Usif
+
+#endif // TESTNONNATIVEPLUGIN_H
Binary file installationservices/swinstallationfw/test/scripts/data/noninstallable.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/scripts/data/test.nonnativepackage.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is a temporary non-native test package file.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/scripts/data/test.overflow.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is a temporary non-native test package file.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/scripts/tsif.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,355 @@
+
+[GetComponentInfoByFileNameOOM]
+OOMServerTest=True
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=False
+root.softwareTypeName=plain
+root.componentName=Test Component
+root.componentVersion=1.0.0
+root.componentVendor=Symbian
+root.scomoState=0
+root.installStatus=0
+root.componentId=12345678
+root.globalComponentId=test.nonnativepackage.txt
+root.authenticity=1
+root.userGrantableCapsBitMask=49152 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=1234
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[InstallClientOOM]
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=False
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=Int
+pluginRefOpaqueResultValue1=2
+OOMTest=True
+
+[GetComponentInfoByFileHandleOOM]
+OOMServerTest=True
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=True
+root.softwareTypeName=plain
+root.componentName=Test Component
+root.componentVersion=1.0.0
+root.componentVendor=Symbian
+root.scomoState=0
+root.installStatus=0
+root.componentId=12345678
+root.globalComponentId=test.nonnativepackage.txt
+root.authenticity=1
+root.userGrantableCapsBitMask=49152 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=1234
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[InstallByFileName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallByFileNameWithOpaqueParams]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=False
+useEnhancedApi=True
+pluginOpaqueArgumentName0=SwiDeclineOperation
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=0
+pluginOpaqueArgumentName1=installInactive
+pluginOpaqueArgumentType1=Int
+pluginOpaqueArgumentValue1=0
+pluginRefOpaqueResultName0=ExtendedErrCode
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=0
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=Int
+pluginRefOpaqueResultValue1=1
+
+[InstallByFileHandleWithOpaqueParams]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=True
+useEnhancedApi=True
+pluginOpaqueArgumentName0=SwiDeclineOperation
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=0
+pluginRefOpaqueResultName0=ExtendedErrCode
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=0
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=Int
+pluginRefOpaqueResultValue1=2
+
+[UninstallByNameAndVendor]
+componentName=Sif Integration Test
+componentVendor=Security Team
+useEnhancedApi=False
+
+[SynchronousCancelInstallByFileName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=False
+useEnhancedApi=True
+pluginOpaqueArgumentName0=SwiDeclineOperation
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+pluginRefOpaqueResultName0=ExtendedErrCode
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=-3
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=Int
+pluginRefOpaqueResultValue1=3
+
+[SynchronousCancelInstallByFileHandle]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=True
+useEnhancedApi=True
+pluginOpaqueArgumentName0=SwiDeclineOperation
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+pluginRefOpaqueResultName0=ExtendedErrCode
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=-3
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=Int
+pluginRefOpaqueResultValue1=4
+
+// Currently, SWI does not support activation/deactivation. Expected result should change from -5 once it does
+[ActivateByNameAndVendor]
+componentName=Sif Integration Test
+componentVendor=Security Team
+
+[DeactivateByNameAndVendor]
+componentName=Sif Integration Test
+componentVendor=Security Team
+
+[ActivateByInvalidId]
+componentId=12345678
+
+[DeactivateByInvalidId]
+componentId=12345678
+
+[NonNativeInstallByFileName]
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=False
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=Int
+pluginRefOpaqueResultValue1=1
+
+[NonNativeInstallByFileNameOOM]
+OOMServerTest=True
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=False
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=Int
+pluginRefOpaqueResultValue1=1
+
+[NonNativeInstallByFileHandle]
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=True
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=Int
+pluginRefOpaqueResultValue1=2
+
+[NonNativeInstallByFileHandleOOM]
+OOMServerTest=True
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=True
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=Int
+pluginRefOpaqueResultValue1=3
+
+[NonNativeInstallAlreadyInstalled]
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=False
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=Int
+pluginRefOpaqueResultValue1=2
+
+[InvalidNonNativeUninstallByNameAndVendor]
+componentName=test.nonnativepackage.txt
+componentVendor=Symbian
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+
+[NonNativeUninstallByNameAndVendor]
+componentName=test.nonnativepackage.txt
+componentVendor=Symbian
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+
+[NonNativeUninstallByNameAndVendorOOM]
+OOMServerTest=True
+componentName=test.nonnativepackage.txt
+componentVendor=Symbian
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+
+[UninstallClientOOM]
+OOMTest=True
+componentName=test.nonnativepackage.txt
+componentVendor=Symbian
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+
+[NonNativeSilentInstall]
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=False
+useEnhancedApi=True
+pluginOpaqueArgumentName0=DoSilent
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+pluginRefOpaqueResultName1=DoneSilently
+pluginRefOpaqueResultType1=Int
+pluginRefOpaqueResultValue1=1
+pluginRefOpaqueResultName2=ComponentId
+pluginRefOpaqueResultType2=Int
+pluginRefOpaqueResultValue2=3
+
+[VerifyNonNativePackageExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=test.nonnativepackage.txt
+componentVendor=Symbian
+packageFile0=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file0
+packageFile1=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file1
+packageFile2=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file2
+scomoState=0
+
+[VerifyNonNativePackageNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=test.nonnativepackage.txt
+componentVendor=Symbian
+packageFile0=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file0
+packageFile1=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file1
+packageFile2=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file2
+
+[VerifyPackageExistence]
+verifyExistence=True
+componentName=Sif Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+executableReturnCode=1397310977
+scomoState=1
+
+[VerifyPackageNonExistence]
+verifyExistence=False
+componentName=Sif Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+
+[VerifyInactivePackageExistence]
+verifyExistence=True
+componentName=Sif Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+executableReturnCode=1397310977
+scomoState=0
+
+[UninstallByInvalidId]
+componentId=12345678
+useEnhancedApi=False
+
+[UninstallByInvalidId2]
+componentId=-1
+useEnhancedApi=False
+
+[UninstallNonRemovable]
+componentName=c32exe
+componentVendor=symbian
+useEnhancedApi=False
+
+[InstallNonInstallableByFileName]
+packageFile=z:\tusif\tsif\data\noninstallable.gif
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallNonInstallableByFileHandle]
+packageFile=z:\tusif\tsif\data\noninstallable.gif
+operationByFileHandle=True
+useEnhancedApi=False
+
+[InvalidInstallByFileName]
+packageFile=z:\tusif\tsif\data\sifselfsignedwithprotecteduid.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InvalidInstallByFileHandle]
+packageFile=z:\tusif\tsif\data\sifselfsignedwithprotecteduid.sis
+operationByFileHandle=True
+useEnhancedApi=False
+
+[MultipleInstallWithOverlappingSession]
+expectedConcurrentResult=0
+overlapRequest=False
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[MultipleInstallWithOverlappingRequest]
+expectedConcurrentResult=-16
+overlapRequest=True
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[MultipleNonExclusiveInstall]
+expectedConcurrentResult=0
+overlapRequest=True
+exclusiveOperation=False
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+packageFile2=z:\tusif\tsif\data\test.nonnativepackage.txt
+useEnhancedApi=True
+pluginOpaqueArgumentName0=DummyInstallation
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+
+[SifCommonOOM]
+OOMTest=True
+
+[NonNativeInstallByFileNameDoNotMatchComponentId]
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=False
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=String
+pluginRefOpaqueResultValue1=__ANY_VALUE_PERMITTED__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/scripts/tsif.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,228 @@
+//
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Run all tsif Suite Tests
+
+// Delete the SCR Database file
+LOAD_SUITE tscr
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+
+LOAD_SUITE tUsifSuite
+
+/// ************************ SIF Component test cases ************************
+
+//! @SYMTestCaseID 		API-SEC-SIF-tsif-0001
+//! @SYMTestCaseDesc 		Test plugin resolution by MIME type
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsif-0001
+
+// by file name
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyNonNativePackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyNonNativePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini NonNativeUninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyNonNativePackageNonExistence
+RUN_TEST_STEP !Result=-1 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini InvalidNonNativeUninstallByNameAndVendor
+// by file handle
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini NonNativeInstallByFileHandle
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini NonNativeUninstallByNameAndVendor
+
+END_TESTCASE API-SEC-SIF-tsif-0001
+
+
+//! @SYMTestCaseID 		API-SEC-SIF-tsif-0002
+//! @SYMTestCaseDesc 		Test plugin "selection" by passing opaque options
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsif-0002
+
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini NonNativeSilentInstall
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini NonNativeUninstallByNameAndVendor
+
+END_TESTCASE API-SEC-SIF-tsif-0002
+
+
+//! @SYMTestCaseID 		API-SEC-SIF-tsif-0003
+//! @SYMTestCaseDesc 		Plugin resolution - negative test
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsif-0003
+
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini InstallNonInstallableByFileName
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini InstallNonInstallableByFileHandle
+
+END_TESTCASE API-SEC-SIF-tsif-0003
+
+// Ensure clean database before the next test, as it relies on component ids starting from 1
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+
+//! @SYMTestCaseID 		API-SEC-SIF-tsif-0004
+//! @SYMTestCaseDesc 		Install/uninstall - negative test
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsif-0004
+
+// install already installed
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini NonNativeInstallByFileName
+RUN_TEST_STEP !Result=-10309 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini NonNativeInstallAlreadyInstalled
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini NonNativeUninstallByNameAndVendor
+// invalid install
+RUN_TEST_STEP !Result=-46 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini InvalidInstallByFileName
+RUN_TEST_STEP !Result=-46 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini InvalidInstallByFileHandle
+// invalid uninstall
+RUN_TEST_STEP !Result=-10313 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini UninstallByInvalidId
+RUN_TEST_STEP !Result=-10313 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini UninstallByInvalidId2
+// Temporarily removed - requires adding a non-removable component
+///RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini UninstallNonRemovable
+
+END_TESTCASE API-SEC-SIF-tsif-0004
+
+
+//! @SYMTestCaseID 		API-SEC-SIF-tsif-0005
+//! @SYMTestCaseDesc 		Activate/deactivate test
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsif-0005
+
+// deactivate
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini InstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifDeactivateStep z:\tusif\tsif\tsif.ini DeactivateByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyInactivePackageExistence
+// activate
+RUN_TEST_STEP 100 tUsifSuite SifActivateStep z:\tusif\tsif\tsif.ini ActivateByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini UninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageNonExistence
+
+END_TESTCASE API-SEC-SIF-tsif-0005
+
+
+//! @SYMTestCaseID 		API-SEC-SIF-tsif-0006
+//! @SYMTestCaseDesc 		Activate/deactivate - negative test
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsif-0006
+
+RUN_TEST_STEP !Result=-10313 100 tUsifSuite SifActivateStep z:\tusif\tsif\tsif.ini ActivateByInvalidId
+RUN_TEST_STEP !Result=-10313 100 tUsifSuite SifDeactivateStep z:\tusif\tsif\tsif.ini DeactivateByInvalidId
+
+END_TESTCASE API-SEC-SIF-tsif-0006
+
+
+//! @SYMTestCaseID 		API-SEC-SIF-tsif-0007
+//! @SYMTestCaseDesc 		Test opaque params by file name/handle
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsif-0007
+
+// Ensure clean database before the next test, as it relies on component ids starting from 1
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+// by file name
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini InstallByFileNameWithOpaqueParams
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini UninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageNonExistence
+// by file handle
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini InstallByFileHandleWithOpaqueParams
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini UninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageNonExistence
+
+END_TESTCASE API-SEC-SIF-tsif-0007
+
+
+//! @SYMTestCaseID 		API-SEC-SIF-tsif-0008
+//! @SYMTestCaseDesc 		Synchronous cancellation by file name/handle
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsif-0008
+
+// Synchronous cancellation by file name
+RUN_TEST_STEP !Result=-3 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini SynchronousCancelInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageNonExistence
+// Synchronous cancellation by file handle
+RUN_TEST_STEP !Result=-3 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini SynchronousCancelInstallByFileHandle
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageNonExistence
+
+END_TESTCASE API-SEC-SIF-tsif-0008
+
+
+//! @SYMTestCaseID 		API-SEC-SIF-tsif-0009
+//! @SYMTestCaseDesc 		Concurrent operations
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsif-0009
+
+// with overlapping session
+RUN_TEST_STEP 100 tUsifSuite SifMultipleInstallStep z:\tusif\tsif\tsif.ini MultipleInstallWithOverlappingSession
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini UninstallByNameAndVendor
+// with overlapping request
+RUN_TEST_STEP 100 tUsifSuite SifMultipleInstallStep z:\tusif\tsif\tsif.ini MultipleInstallWithOverlappingRequest
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini UninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageNonExistence
+// with disabled ExclusiveOperation flag
+RUN_TEST_STEP 100 tUsifSuite SifMultipleInstallStep z:\tusif\tsif\tsif.ini MultipleNonExclusiveInstall
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsif\tsif.ini VerifyPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini UninstallByNameAndVendor
+
+END_TESTCASE API-SEC-SIF-tsif-0009
+
+
+// ************************ SIF Unit test cases ************************
+//! @SYMTestCaseID 		API-SEC-SIF-tsifunit-0001
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsifunit-0001
+
+RUN_TEST_STEP 100 tUsifSuite SifCommonUnitTestStep
+
+END_TESTCASE API-SEC-SIF-tsifunit-0001
+
+
+/// ************************ SIF Concurrency  Test  ************************
+//! @SYMTestCaseID 		API-SEC-SIF-tsifconcurrent-0001
+//! @SYMTestStatus   		3. Released
+
+CONCURRENT
+
+START_TESTCASE API-SEC-SIF-tsifconcurrent-0001
+
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini InstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifrefinstaller\tsifrefinstaller.ini GetComponentInfoByFileNameForUninstalledComponent
+// Since we cannot guarantee the order of installs, we cannot check reliably for componentId in the returned opaque results
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini NonNativeInstallByFileNameDoNotMatchComponentId
+
+END_TESTCASE API-SEC-SIF-tsifconcurrent-0001
+
+CONSECUTIVE
+
+// Cleanup after SEC-SIF-tsifconcurrent-001
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini NonNativeUninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini UninstallByNameAndVendor
+
+//Run the AppUid Generation tests.
+RUN_SCRIPT z:\tusif\tsif\tsif_appuidgen.script
+
+// Wait 3 seconds in order to let the SIF server shutdown itself
+DELAY 3000
+
+
+PRINT Completed SIF component tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/scripts/tsifoom.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,71 @@
+//
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Run tsif OOM Suite Tests
+
+// Delete the SCR Database file
+LOAD_SUITE tscr
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+
+LOAD_SUITE tUsifSuite
+
+// ************************ SIF Component OOM test cases ************************
+//! @SYMTestCaseID 		API-SEC-SIF-tsif-oom-0001
+//! @SYMTestCaseDesc 		Test OOM on server side
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsif-oom-0001
+
+// by file name - simulate OOM at server side
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini NonNativeInstallByFileNameOOM
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini NonNativeUninstallByNameAndVendorOOM
+// by file name - simulate OOM at client side
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini InstallClientOOM
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini UninstallClientOOM
+// by file handle
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsif\tsif.ini NonNativeInstallByFileHandleOOM
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsif\tsif.ini NonNativeUninstallByNameAndVendorOOM
+
+END_TESTCASE API-SEC-SIF-tsif-oom-0001
+
+
+//! @SYMTestCaseID 		API-SEC-SIF-tsif-oom-0002
+//! @SYMTestCaseDesc 		Test OOM on getting component information
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsif-oom-0002
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsif\tsif.ini GetComponentInfoByFileNameOOM
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsif\tsif.ini GetComponentInfoByFileHandleOOM
+
+END_TESTCASE API-SEC-SIF-tsif-oom-0002
+
+
+// ************************ SIF Unit test cases ************************
+//! @SYMTestCaseID 		API-SEC-SIF-tsifunit-OOM-0001
+//! @SYMTestStatus   		3. Released
+
+START_TESTCASE API-SEC-SIF-tsifunit-OOM-0001
+
+RUN_TEST_STEP 100 tUsifSuite SifCommonUnitTestStep z:\tusif\tsif\tsif.ini SifCommonOOM 
+
+END_TESTCASE API-SEC-SIF-tsifunit-OOM-0001
+
+
+// Wait 3 seconds in order to let the SIF server shutdown itself
+DELAY 3
+
+PRINT Complate_te_Sif_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/bwins/usifsecuritytests-tcbu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?CapabilityTestFactory@@YAPAVMCapabilityTestFactory@@XZ @ 1 NONAME ; class MCapabilityTestFactory * CapabilityTestFactory(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/bwins/usifsecuritytestsu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?CapabilityTestFactory@@YAPAVMCapabilityTestFactory@@XZ @ 1 NONAME ; class MCapabilityTestFactory * CapabilityTestFactory(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/eabi/usifsecuritytests-tcbu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,5 @@
+EXPORTS
+	_Z21CapabilityTestFactoryv @ 1 NONAME
+	_ZTI23CSifSecurityContextTest @ 2 NONAME
+	_ZTV23CSifSecurityContextTest @ 3 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/eabi/usifsecuritytestsu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+EXPORTS
+	_Z21CapabilityTestFactoryv @ 1 NONAME
+	_ZTI21CStsPublicPathSecTest @ 2 NONAME
+	_ZTI23CScrReadUserDataSecTest @ 3 NONAME
+	_ZTI24CScrNonRestrictedSecTest @ 4 NONAME
+	_ZTI26CScrWriteDeviceDataSecTest @ 5 NONAME
+	_ZTI28CScrComponentSpecificSecTest @ 6 NONAME
+	_ZTI28CScrTCBPathProtectionSecTest @ 7 NONAME
+	_ZTI28CStsTCBPathProtectionSecTest @ 8 NONAME
+	_ZTI32CScrPrivatePathProtectionSecTest @ 9 NONAME
+	_ZTI32CStsPrivatePathProtectionSecTest @ 10 NONAME
+	_ZTV21CStsPublicPathSecTest @ 11 NONAME
+	_ZTV23CScrReadUserDataSecTest @ 12 NONAME
+	_ZTV24CScrNonRestrictedSecTest @ 13 NONAME
+	_ZTV26CScrWriteDeviceDataSecTest @ 14 NONAME
+	_ZTV28CScrComponentSpecificSecTest @ 15 NONAME
+	_ZTV28CScrTCBPathProtectionSecTest @ 16 NONAME
+	_ZTV28CStsTCBPathProtectionSecTest @ 17 NONAME
+	_ZTV32CScrPrivatePathProtectionSecTest @ 18 NONAME
+	_ZTV32CStsPrivatePathProtectionSecTest @ 19 NONAME
+	_ZTI22CStsRollbackAllSecTest @ 20 NONAME
+	_ZTV22CStsRollbackAllSecTest @ 21 NONAME
+	_ZTI19CScrAllFilesSecTest @ 22 NONAME
+	_ZTV19CScrAllFilesSecTest @ 23 NONAME
+	_ZTI27CScrPluginManagementSecTest @ 24 NONAME
+	_ZTV27CScrPluginManagementSecTest @ 25 NONAME
+	_ZTI34CScrApparcComponentSpecificSecTest @ 26 NONAME
+	_ZTV34CScrApparcComponentSpecificSecTest @ 27 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/group/usifsecuritytests-tcb.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* usifsecuritytests-tcb.dll Test harness for USIF security testing without the TCB capability
+*
+*/
+
+
+/**
+ @file
+*/
+
+//         Capabilities are set by captestframework
+CAPABILITY All -Tcb
+
+TARGET			usifsecuritytests-tcb.dll
+TARGETTYPE		dll
+UID				0x101F7295 0x10285DE8
+VENDORID		0x70000001
+
+SOURCEPATH		../source
+SOURCE			usifsecuritytests-tcb.cpp
+SOURCE			sifsecuritycontext.cpp
+
+USERINCLUDE		.
+USERINCLUDE		../inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib aprcaptestframeworkutil.lib sif.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/group/usifsecuritytests.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* usifsecuritytests.dll Test harness for USIF security testing
+*
+*/
+
+
+/**
+ @file
+*/
+
+//         Capabilities are set by captestframework
+CAPABILITY All
+
+TARGET			usifsecuritytests.dll
+TARGETTYPE		dll
+UID				0x101F7295 0x10285DE3
+VENDORID		0x70000001
+
+SOURCEPATH		../source
+SOURCE			usifsecuritytests.cpp
+SOURCE			scrcomponentspecific.cpp
+SOURCE			scrreaduserdata.cpp
+SOURCE			scrnonrestricted.cpp
+SOURCE			scrfilepathprotection.cpp
+SOURCE			scrallfiles.cpp
+SOURCE			scrwritedevicedata.cpp
+SOURCE			stsfilepathprotection.cpp
+SOURCE			stsrollbackalltest.cpp
+SOURCE			scrpluginmanagement.cpp
+SOURCE			scrapparccomponentspecific.cpp
+
+USERINCLUDE		.
+USERINCLUDE		../inc
+USERINCLUDE		../../../../swtransactionservices/inc
+USERINCLUDE		../../../../swcomponentregistry/inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib efsrv.lib
+LIBRARY			aprcaptestframeworkutil.lib
+LIBRARY			scrclient.lib stsclient.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/inc/scrallfiles.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file
+ @test
+*/
+
+#include <captestframework/aprcaptestutility.h>
+
+class CScrAllFilesSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CScrAllFilesSecTest* NewL();
+	
+
+private:
+	CScrAllFilesSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/inc/scrapparccomponentspecific.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/**
+ @file
+ @test
+*/
+
+#ifndef SCRAPPARCCOMPONENTSPECIFIC_H_
+#define SCRAPPARCCOMPONENTSPECIFIC_H_
+
+
+#include <captestframework/aprcaptestutility.h>
+
+class CScrApparcComponentSpecificSecTest : public CDefaultCapabilityTest
+    {
+public:
+    static CScrApparcComponentSpecificSecTest* NewL();
+    
+
+private:
+    CScrApparcComponentSpecificSecTest();
+    
+    void RunTestL();
+
+    void ConstructL();
+    };
+
+
+#endif /* SCRAPPARCCOMPONENTSPECIFIC_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/inc/scrcomponentspecific.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file
+ @test
+*/
+
+#include <captestframework/aprcaptestutility.h>
+
+class CScrComponentSpecificSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CScrComponentSpecificSecTest* NewL();
+	
+
+private:
+	CScrComponentSpecificSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/inc/scrfilepathprotection.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file
+ @test
+*/
+
+#include <captestframework/aprcaptestutility.h>
+
+namespace Usif
+	{
+	class RSoftwareComponentRegistry;
+	}
+
+class CScrPathProtectionSecTest : public CDefaultCapabilityTest
+	{
+protected:
+	void TestFileApisL(Usif::RSoftwareComponentRegistry& aScrSession, const TDesC& aFilename, const TDesC& aLogHeader);
+	};
+
+
+class CScrPrivatePathProtectionSecTest : public CScrPathProtectionSecTest
+	{
+public:
+	static CScrPrivatePathProtectionSecTest* NewL();
+	
+private:
+	CScrPrivatePathProtectionSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
+
+class CScrTCBPathProtectionSecTest : public CScrPathProtectionSecTest
+	{
+public:
+	static CScrTCBPathProtectionSecTest* NewL();
+	
+private:
+	CScrTCBPathProtectionSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/inc/scrnonrestricted.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file
+ @test
+*/
+
+#include <captestframework/aprcaptestutility.h>
+
+class CScrNonRestrictedSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CScrNonRestrictedSecTest* NewL();
+	
+
+private:
+	CScrNonRestrictedSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/inc/scrpluginmanagement.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file
+ @test
+*/
+
+#include <captestframework/aprcaptestutility.h>
+
+class CScrPluginManagementSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CScrPluginManagementSecTest* NewL();
+	
+
+private:
+	CScrPluginManagementSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/inc/scrreaduserdata.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file
+ @test
+*/
+
+#include <captestframework/aprcaptestutility.h>
+
+class CScrReadUserDataSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CScrReadUserDataSecTest* NewL();
+	
+
+private:
+	CScrReadUserDataSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/inc/scrwritedevicedata.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file
+ @test
+*/
+
+#include <captestframework/aprcaptestutility.h>
+
+class CScrWriteDeviceDataSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CScrWriteDeviceDataSecTest* NewL();
+	
+
+private:
+	CScrWriteDeviceDataSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/inc/sifsecuritycontext.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file
+ @test
+*/
+
+#include <captestframework/aprcaptestutility.h>
+
+class CSifSecurityContextTest : public CDefaultCapabilityTest
+	{
+public:
+	static CSifSecurityContextTest* NewL();
+
+private:
+	CSifSecurityContextTest();
+
+	void RunTestL();
+
+	void ConstructL();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/inc/stsfilepathprotection.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file
+ @test
+*/
+
+#include <captestframework/aprcaptestutility.h>
+
+class CStsPrivatePathProtectionSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CStsPrivatePathProtectionSecTest* NewL();
+	
+private:
+	CStsPrivatePathProtectionSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
+
+class CStsTCBPathProtectionSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CStsTCBPathProtectionSecTest* NewL();
+	
+private:
+	CStsTCBPathProtectionSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
+
+class CStsPublicPathSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CStsPublicPathSecTest* NewL();
+	
+private:
+	CStsPublicPathSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/inc/stsrollbackalltest.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+ /*
+ * @file
+ * @test
+ */
+
+#include <captestframework/aprcaptestutility.h>
+
+class CStsRollbackAllSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CStsRollbackAllSecTest* NewL();
+	
+private:
+	CStsRollbackAllSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/scripts/usifsecuritytests.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,72 @@
+[usifsecuritytests]
+DllName=usifsecuritytests.dll
+
+[usifsecuritytests-tcb]
+DllName=usifsecuritytests-tcb.dll
+OmitTCBCapInComplementSet=True
+
+[add_test_component]
+SoftwareType=dummy
+ComponentName=testName
+VendorName=testVendor
+
+[add_app_reg_info]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=12345678
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+OpaqueData=somedata
+OwnedFileCount=2
+FileName0=file0
+FileName1=file2
+ServiceInfoCount=1
+ServiceUid0=987654321
+ServiceOpaqueData0=servicedata
+ServiceDataTypeCount=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+LocalizableAppInfoCount=2
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile
+LocNumberOfAppIcons0=2
+ViewDataCount0=1
+VwUid0=45689123
+VwScreenMode0=0
+VwCaption0=vc
+VwIconFileName0=viewiconfile
+VwNumberOfAppIcons0=0
+LocShortCaption1=sc0
+LocAppLanguage1=1
+LocGroupName1=Games
+LocCaption1=c0
+LocIconFileName1=iconfile
+LocNumberOfAppIcons1=2
+ViewDataCount1=1
+VwUid1=45689123
+VwScreenMode1=0
+VwCaption1=vc
+VwIconFileName1=viewiconfile
+VwNumberOfAppIcons1=0
+AppPropertyCount=1
+PropertyLocale0=0
+PropertyName0=p1
+PropertyIntValue0=2
+PropertyStrValue0=asd
+
+[del_app_entry]
+UseGlobalId=True
+GlobalIdName=Component_Global
+SoftwareType=plain
+ComponentIdOffset=0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/scripts/usifsecuritytests.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+//
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//! @file
+// USIF Security tests
+PRINT Run USIF Security tests
+
+LOAD_SUITE aprcaptestframework
+LOAD_SUITE tscr -SharedData
+
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+
+//! @SYMTestCaseID 		API-SEC-USIF-SecurityTests-0001
+//! @SYMTestCaseDesc 		Runs the whole suite of security test cases for USIF interfaces. 
+//! @SYMTestPriority 		High
+//! @SYMTestActions Tests 	IPC calls from different SIDs and capabilities
+//! @SYMTestExpectedResults 	KErrPermissionDenied received on calls which should fail
+//! @SYMDevelopedForRelease 	Diran
+
+
+START_TESTCASE API-SEC-USIF-SecurityTests-0001
+
+// Delete the SCR Database file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file 
+  
+// Add a dummy component for the APIs tests
+RUN_TEST_STEP 100 tscr SCRAddComponent z:\tusif\securitytests\usifsecuritytests.ini add_test_component
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\securitytests\usifsecuritytests.ini add_app_reg_info
+RUN_TEST_STEP 100 aprcaptestframework RunThoroughCapabilityChecks z:\tusif\securitytests\usifsecuritytests.ini usifsecuritytests
+RUN_TEST_STEP 100 aprcaptestframework RunThoroughCapabilityChecks z:\tusif\securitytests\usifsecuritytests.ini usifsecuritytests-tcb
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\securitytests\usifsecuritytests.ini del_app_entry
+END_TESTCASE API-SEC-USIF-SecurityTests-0001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/scrallfiles.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include "scrallfiles.h"
+
+#include <usif/scr/scr.h>
+#include <e32def.h>
+
+_LIT(KScrAllFilesSecName, "SCR AllFiles APIs test");
+
+using namespace Usif;
+
+CScrAllFilesSecTest* CScrAllFilesSecTest::NewL()
+	{
+	CScrAllFilesSecTest* self=new(ELeave) CScrAllFilesSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CScrAllFilesSecTest::CScrAllFilesSecTest()
+	{
+	SetCapabilityRequired(ECapabilityAllFiles);
+	}
+	
+void CScrAllFilesSecTest::ConstructL()
+	{
+	SetNameL(KScrAllFilesSecName);
+	}
+
+void CScrAllFilesSecTest::RunTestL()
+	{
+	RSoftwareComponentRegistry scrSession;
+	User::LeaveIfError(scrSession.Connect());
+	CleanupClosePushL(scrSession);
+	
+	TInt err(0);
+			
+	TRAP(err, scrSession.SetIsComponentRemovableL(1, ETrue));
+	CheckFailL(err, _L("SetIsComponentRemovableL - set as removable"));
+	
+	TRAP(err, scrSession.SetIsComponentRemovableL(1, EFalse));
+	CheckFailL(err, _L("SetIsComponentRemovableL - set as non-removable"));
+	
+	CleanupStack::PopAndDestroy(&scrSession);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/scrapparccomponentspecific.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "scrapparccomponentspecific.h"
+
+#include <usif/scr/scr.h>
+#include <scs/cleanuputils.h>
+#include <e32def.h>
+
+_LIT(KScrCompSecName, "SCR-APPARC Component-specific APIs test");
+
+using namespace Usif;
+
+CScrApparcComponentSpecificSecTest* CScrApparcComponentSpecificSecTest::NewL()
+    {
+    CScrApparcComponentSpecificSecTest* self=new(ELeave) CScrApparcComponentSpecificSecTest();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CScrApparcComponentSpecificSecTest::CScrApparcComponentSpecificSecTest()
+    {
+    SetSidRequired(TUid::Uid(0x10003A3F)); // Use tscrapparc SID as the one required for accessinf apparc specific subsession
+    }
+    
+void CScrApparcComponentSpecificSecTest::ConstructL()
+    {
+    SetNameL(KScrCompSecName);
+    }
+
+void CScrApparcComponentSpecificSecTest::RunTestL()
+    {
+    RSoftwareComponentRegistry scrSession;
+    User::LeaveIfError(scrSession.Connect());
+    CleanupClosePushL(scrSession);
+    RApplicationRegistryView subSession;   
+    CleanupClosePushL(subSession);
+    TRAPD(err,subSession.OpenViewL(scrSession));     
+    CheckFailL(err, _L("OpenApplicationRegistrationView"));
+          
+    if(err == NULL)
+        {
+        RPointerArray<CApplicationRegistrationData> actualAppRegData;
+        CleanupClosePushL(actualAppRegData);
+        TRAP(err,subSession.GetNextApplicationRegistrationInfoL(5, actualAppRegData));
+        CheckFailL(err, _L("GetNextApplicationRegistrationInfo"));
+        CleanupStack::PopAndDestroy(&actualAppRegData);
+        }
+    CleanupStack::PopAndDestroy(&subSession);
+    
+    RPointerArray<CLauncherExecutable> launchers;
+    CleanupClosePushL(launchers);
+    TRAP(err,scrSession.GetApplicationLaunchersL(launchers));
+    CheckFailL(err, _L("GetApplicationLaunchersL"));
+    CleanupStack::PopAndDestroy(&launchers);
+    
+    CleanupStack::PopAndDestroy(&scrSession);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/scrcomponentspecific.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,171 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include "scrcomponentspecific.h"
+
+#include <usif/scr/scr.h>
+#include <usif/scr/appregentries.h>
+#include <scs/cleanuputils.h>
+#include <e32def.h>
+
+_LIT(KScrCompSecName, "SCR Component-specific APIs test");
+
+using namespace Usif;
+
+CScrComponentSpecificSecTest* CScrComponentSpecificSecTest::NewL()
+	{
+	CScrComponentSpecificSecTest* self=new(ELeave) CScrComponentSpecificSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CScrComponentSpecificSecTest::CScrComponentSpecificSecTest()
+	{
+	SetSidRequired(TUid::Uid(0x10285BC9)); // Use tscr SID as the one required for modifying dummy components
+	}
+	
+void CScrComponentSpecificSecTest::ConstructL()
+	{
+	SetNameL(KScrCompSecName);
+	}
+
+void CScrComponentSpecificSecTest::RunTestL()
+	{
+	RSoftwareComponentRegistry scrSession;
+	User::LeaveIfError(scrSession.Connect());
+	CleanupClosePushL(scrSession);
+
+	// The transaction APIs are tested separately. If this command fails, then we can proceed, as the following operations would fail also, and no transaction management would be required
+	TRAP_IGNORE(scrSession.CreateTransactionL()); 
+	_LIT(KStringPropertyName, "StringName");
+	
+	TComponentId componentId(0);
+	TRAPD(err, componentId = scrSession.AddComponentL(_L("TestComponent"), _L("TestVendor"), _L("dummy"))); // "dummy" is a reserved test software type name
+	CheckFailL(err, _L("AddComponentL"));
+	
+	// We rely on the fact that at least one component exists in the DB, created by the script. If we failed
+	// to create a legitimate component of our own (negative security test), then we attempt doing operations
+	// on that component (they should fail also)
+	if (err != KErrNone)
+		componentId = 1; 
+	
+	TRAP(err, scrSession.SetComponentPropertyL(componentId, KStringPropertyName, _L8("PropertyValue")));
+	CheckFailL(err, _L("SetComponentPropertyL - string"));
+		
+	TRAP(err, scrSession.SetComponentPropertyL(componentId, _L("IntName"), 1));
+	CheckFailL(err, _L("SetComponentPropertyL - int"));	
+		
+	TRAP(err, scrSession.SetComponentPropertyL(componentId, _L("LocalName"), _L("PropertyValue"), ELangEnglish));
+	CheckFailL(err, _L("SetComponentPropertyL - locale"));
+		
+	TRAP(err, scrSession.SetComponentNameL(componentId, _L("TestComponentName")));
+	CheckFailL(err, _L("SetComponentNameL"));	
+	
+	TRAP(err, scrSession.SetVendorNameL(componentId, _L("TestComponentVendor")));
+	CheckFailL(err, _L("SetVendorNameL"));	
+	
+	TRAP(err, scrSession.SetComponentVersionL(componentId, _L("1.0")));
+	CheckFailL(err, _L("SetComponentVersionL"));
+	
+	TRAP(err, scrSession.SetComponentSizeL(componentId, 1));
+	CheckFailL(err, _L("SetComponentSizeL"));	
+	
+	TRAP(err, scrSession.DeleteComponentPropertyL(componentId, KStringPropertyName));
+	CheckFailL(err, _L("DeleteComponentPropertyL"));	
+		
+	TRAP(err, scrSession.SetScomoStateL(componentId, Usif::EActivated));
+	CheckFailL(err, _L("SetScomoStateL"));	
+
+	TRAP(err, scrSession.SetIsComponentRemovableL(componentId, EFalse));
+	CheckFailL(err, _L("SetIsComponentRemovableL"));		
+	
+	TRAP(err, scrSession.SetIsComponentDrmProtectedL(componentId, EFalse));
+	CheckFailL(err, _L("SetIsComponentDrmProtectedL"));
+	
+	TRAP(err, scrSession.SetIsComponentHiddenL(componentId, EFalse));
+	CheckFailL(err, _L("SetIsComponentHiddenL"));
+	
+	TRAP(err, scrSession.SetIsComponentKnownRevokedL(componentId, EFalse));
+	CheckFailL(err, _L("SetIsComponentKnownRevokedL"));
+	
+	TRAP(err, scrSession.SetIsComponentOriginVerifiedL(componentId, EFalse));
+	CheckFailL(err, _L("SetIsComponentOriginVerifiedL"));
+	
+	TRAP(err, scrSession.SetIsComponentPresentL(componentId, EFalse));
+	CheckFailL(err, _L("SetIsComponentPresentL"));
+	
+	TRAP(err, scrSession.DeleteComponentL(componentId));
+	CheckFailL(err, _L("DeleteComponentL"));	
+		
+	RPointerArray<CLocalizableComponentInfo> localisableInfoArray;
+	CleanupResetAndDestroyPushL(localisableInfoArray);
+	CLocalizableComponentInfo* localisableInfo = CLocalizableComponentInfo::NewLC(_L("TestComponent"), _L("TestVendor"), static_cast<TLanguage>(1)); 
+	localisableInfoArray.AppendL(localisableInfo);
+	CleanupStack::Pop(localisableInfo);
+		
+	TRAP(err, scrSession.AddComponentL(localisableInfoArray, _L("dummy")));
+	CheckFailL(err, _L("AddComponentL - localisable"));
+	CleanupStack::PopAndDestroy(&localisableInfoArray);
+	
+	CGlobalComponentId *dependantGlobalId = CGlobalComponentId::NewLC(_L("DependantGlobalId"), _L("dummy"));
+	CGlobalComponentId *supplierGlobalId = CGlobalComponentId::NewLC(_L("DependantGlobalId"), _L("plain"));
+	CVersionedComponentId *supplierVerCompId = CVersionedComponentId::NewLC(*supplierGlobalId);
+	TRAP(err, scrSession.AddComponentDependencyL(*supplierVerCompId, *dependantGlobalId));
+	CheckFailL(err, _L("AddComponentDependencyL"));
+	
+	TRAP(err, scrSession.DeleteComponentDependencyL(*supplierGlobalId, *dependantGlobalId));
+	CheckFailL(err, _L("DeleteComponentDependencyL"));
+	CleanupStack::PopAndDestroy(3, dependantGlobalId); // dependantGlobalId, supplierGlobalId, supplierVerCompId
+	
+	//TODO: The addition of AppRegInfo needs to be optimized
+	RPointerArray<HBufC> ownedFileArray;
+    RPointerArray<Usif::CServiceInfo> serviceInfoArray;
+    RPointerArray<Usif::CLocalizableAppInfo> localizableAppInfoArray;
+    RPointerArray<Usif::CPropertyEntry> appPropertyArray;
+	RPointerArray<Usif::COpaqueData> opaqueDataArray;
+    TUid appUid = TUid::Uid(123454321);
+     
+    TApplicationCharacteristics appCharacteristics;
+    const Usif::CApplicationRegistrationData* appRegData = Usif::CApplicationRegistrationData::NewLC(ownedFileArray, serviceInfoArray, localizableAppInfoArray, appPropertyArray, opaqueDataArray, appUid, _L("SomeFile"), appCharacteristics, 0);
+    TRAP(err, scrSession.AddApplicationEntryL(componentId, *appRegData));
+	CleanupStack::PopAndDestroy();
+	CheckFailL(err, _L("AddApplicationEntryL"));
+	
+	TRAP(err, scrSession.DeleteApplicationEntriesL(componentId));
+	CheckFailL(err, _L("DeleteApplicationEntryL"));
+
+	// Verify transaction APIs - can be invoked only by an installer
+	TRAP(err, scrSession.CreateTransactionL());
+	CheckFailL(err, _L("CreateTransactionL"));
+	
+	TRAP(err, scrSession.RollbackTransactionL());
+	CheckFailL(err, _L("RollbackTransactionL"));	
+	
+	TRAP(err, scrSession.CommitTransactionL());
+	CheckFailL(err, _L("CommitTransactionL"));	
+		
+	CleanupStack::PopAndDestroy(&scrSession);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/scrfilepathprotection.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,148 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include "scrfilepathprotection.h"
+
+#include <usif/scr/scr.h>
+#include <scs/cleanuputils.h>
+#include <e32def.h>
+
+_LIT(KScrPrivatePathSecName, "SCR private path file registration APIs test");
+
+using namespace Usif;
+
+// Throughout the tests we assume that at least one component is present, i.e. that component id 1 is valid
+const TComponentId KExistingComponentId = 1;
+
+void CScrPathProtectionSecTest::TestFileApisL(RSoftwareComponentRegistry& aScrSession, const TDesC& aFilename, const TDesC& aLogHeader)
+	{
+	TBuf<256> debugHeader;
+	
+	TInt err(0);
+	
+	TRAP(err, aScrSession.RegisterComponentFileL(KExistingComponentId, aFilename));
+	debugHeader.Format(_L("RegisterComponentFileL - %S"), &aLogHeader);
+	CheckFailL(err, debugHeader);	
+			
+	TRAP(err, aScrSession.SetFilePropertyL(KExistingComponentId, aFilename, _L("IntName"), 1));
+	debugHeader.Format(_L("SetFilePropertyL - int - %S"), &aLogHeader);
+	CheckFailL(err, debugHeader);	
+			
+	TRAP(err, aScrSession.SetFilePropertyL(KExistingComponentId, aFilename, _L("StringName"), _L8("PropertyValue")));
+	debugHeader.Format(_L("SetFilePropertyL - string - %S"), &aLogHeader);
+	CheckFailL(err, debugHeader);	
+	
+	TRAP(err, aScrSession.DeleteFilePropertyL(KExistingComponentId, aFilename, _L("StringName")));
+	debugHeader.Format(_L("DeleteFilePropertyL - %S"), &aLogHeader);
+	CheckFailL(err, debugHeader);
+	
+	TRAP(err, aScrSession.UnregisterComponentFileL(KExistingComponentId, aFilename));
+	debugHeader.Format(_L("UnregisterComponentFileL - %S"), &aLogHeader);
+	CheckFailL(err, debugHeader);		
+	}
+
+CScrPrivatePathProtectionSecTest* CScrPrivatePathProtectionSecTest::NewL()
+	{
+	CScrPrivatePathProtectionSecTest* self=new(ELeave) CScrPrivatePathProtectionSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CScrPrivatePathProtectionSecTest::CScrPrivatePathProtectionSecTest()
+	{
+	SetSidRequired(TUid::Uid(0x12345678)); // Require SID which corresponds to private directory path
+	}
+	
+void CScrPrivatePathProtectionSecTest::ConstructL()
+	{
+	SetNameL(KScrPrivatePathSecName);
+	}
+
+void CScrPrivatePathProtectionSecTest::RunTestL()
+	{
+	RSoftwareComponentRegistry scrSession;
+	User::LeaveIfError(scrSession.Connect());
+	CleanupClosePushL(scrSession);
+
+	_LIT(KOwnPrivatePathFilename, "c:\\private\\12345678\\file.txt");
+
+	TestFileApisL(scrSession, KOwnPrivatePathFilename, _L("own private path"));	
+			
+	// This test should always fail, as we are registering a file in a private directory which does not belong to us
+	SetExpectPermissionDenied(ETrue); 
+	_LIT(KOthersPrivatePathFilename, "c:\\private\\99999999\\file.txt");
+	TestFileApisL(scrSession, KOthersPrivatePathFilename, _L("others' private path"));
+		
+	SetExpectPermissionDenied(EFalse);
+	
+	// Public and import path should always succeed
+	_LIT(KOthersImportPrivatePathFilename, "c:\\private\\99999999\\import\\file.txt");
+	TestFileApisL(scrSession, KOthersImportPrivatePathFilename, _L("others' import path"));
+	
+	_LIT(KPublicFilename, "c:\file.txt");
+	TestFileApisL(scrSession, KPublicFilename, _L("public path"));	
+	CleanupStack::PopAndDestroy(&scrSession);
+	}
+
+//---------------CScrTCBPathProtectionSecTest------------------
+
+_LIT(KScrTCBPathSecName, "SCR TCB path file registration APIs test");
+
+CScrTCBPathProtectionSecTest* CScrTCBPathProtectionSecTest::NewL()
+	{
+	CScrTCBPathProtectionSecTest* self=new(ELeave) CScrTCBPathProtectionSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CScrTCBPathProtectionSecTest::CScrTCBPathProtectionSecTest()
+	{
+	SetCapabilityRequired(ECapabilityTCB);
+	}
+	
+void CScrTCBPathProtectionSecTest::ConstructL()
+	{
+	SetNameL(KScrTCBPathSecName);
+	}
+
+void CScrTCBPathProtectionSecTest::RunTestL()
+	{
+	RSoftwareComponentRegistry scrSession;
+	User::LeaveIfError(scrSession.Connect());
+	CleanupClosePushL(scrSession);
+
+	_LIT(KTcbPathFilename, "c:\\sys\\file.txt");
+	
+	TestFileApisL(scrSession, KTcbPathFilename, _L("\\sys path"));
+	
+	_LIT(KResourcePathFilename, "c:\\resource\\file.txt");
+		
+	TestFileApisL(scrSession, KResourcePathFilename, _L("\\resource path"));
+		
+	CleanupStack::PopAndDestroy(&scrSession);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/scrnonrestricted.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,265 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include "scrnonrestricted.h"
+#include <usif/scr/appregentries.h>
+#include <usif/scr/scr.h>
+#include <scs/cleanuputils.h>
+#include <e32def.h>
+
+_LIT(KScrNonRestrictedSecName, "SCR non-restricted APIs test");
+
+using namespace Usif;
+
+CScrNonRestrictedSecTest* CScrNonRestrictedSecTest::NewL()
+	{
+	CScrNonRestrictedSecTest* self=new(ELeave) CScrNonRestrictedSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CScrNonRestrictedSecTest::CScrNonRestrictedSecTest()
+	{
+	}
+	
+void CScrNonRestrictedSecTest::ConstructL()
+	{
+	SetNameL(KScrNonRestrictedSecName);
+	}
+
+_LIT(KFileName, "c:\test.fil");
+_LIT(KPropertyName, "DummyProperty");
+
+void CScrNonRestrictedSecTest::RunTestL()
+	{
+
+	// Throughout the tests we assume that at least one component is present, i.e. that component id 1 is valid
+	const TComponentId KExistingComponentId = 1;	
+	
+	RSoftwareComponentRegistry scrSession;
+	User::LeaveIfError(scrSession.Connect());
+	CleanupClosePushL(scrSession);
+	
+	TInt err(0);
+	
+	// Check component query APIs
+	
+	CComponentEntry* entry = CComponentEntry::NewLC();
+	TRAP(err, scrSession.GetComponentL(KExistingComponentId, *entry));
+	CheckFailL(err, _L("GetComponent"));
+	CleanupStack::PopAndDestroy(entry);
+
+	RArray<TComponentId> componentIds;
+	TRAP(err, scrSession.GetComponentsL(KFileName, componentIds));
+	CleanupClosePushL(componentIds);
+	CheckFailL(err, _L("GetComponentsL"));
+	CleanupStack::PopAndDestroy(&componentIds);	
+	
+	RPointerArray<CPropertyEntry> properties;
+	CleanupResetAndDestroyPushL(properties);
+	TRAP(err, scrSession.GetFilePropertiesL(KExistingComponentId, KFileName, properties));
+	CheckFailL(err, _L("GetFilePropertiesL"));
+	CleanupStack::PopAndDestroy(&properties);
+	
+	CPropertyEntry* propertyEntry(NULL);
+	TRAP(err, propertyEntry = scrSession.GetFilePropertyL(KExistingComponentId, KFileName, KPropertyName));
+	CleanupStack::PushL(propertyEntry);
+	CheckFailL(err, _L("GetFilePropertyL"));
+	CleanupStack::PopAndDestroy(propertyEntry);
+	
+	propertyEntry = NULL;
+	TRAP(err, propertyEntry = scrSession.GetComponentPropertyL(KExistingComponentId, KPropertyName));
+	CleanupStack::PushL(propertyEntry);
+	CheckFailL(err, _L("GetComponentPropertyL"));
+	CleanupStack::PopAndDestroy(propertyEntry);
+	
+	propertyEntry = NULL;
+	TRAP(err, propertyEntry = scrSession.GetComponentPropertyL(KExistingComponentId, KPropertyName, ELangEnglish));
+	CleanupStack::PushL(propertyEntry);
+	CheckFailL(err, _L("GetComponentPropertyL - localised"));
+	CleanupStack::PopAndDestroy(propertyEntry);	
+	
+	TRAP(err, scrSession.GetComponentPropertiesL(KExistingComponentId, properties));
+	CleanupResetAndDestroyPushL(properties);
+	CheckFailL(err, _L("GetFilePropertiesL"));
+	CleanupStack::PopAndDestroy(&properties);
+	
+	TRAP(err, scrSession.GetComponentPropertiesL(KExistingComponentId, properties, ELangEnglish));
+	CleanupResetAndDestroyPushL(properties);
+	CheckFailL(err, _L("GetFilePropertiesL - localised"));
+	CleanupStack::PopAndDestroy(&properties);
+	
+	TRAP(err, scrSession.GetComponentFilesCountL(KExistingComponentId));
+	CheckFailL(err, _L("GetComponentFilesCountL"));
+	
+	entry = NULL;
+	TRAP(err, entry = scrSession.GetComponentL(_L("GlobalId"), _L("dummy")));
+	CheckFailL(err, _L("GetComponentL - global id"));
+	if(entry)
+		delete entry;
+	
+	TRAP(err, scrSession.GetComponentIdL(_L("GlobalId"), _L("dummy")));
+	CheckFailL(err, _L("GetComponentIdL"));
+	
+	RPointerArray<CVersionedComponentId> globalIdList;
+	CGlobalComponentId *dependantGlobalId = CGlobalComponentId::NewLC(_L("DependantGlobalId"), _L("dummy"));
+	TRAP(err, scrSession.GetSupplierComponentsL(*dependantGlobalId, globalIdList));
+	CheckFailL(err, _L("GetSupplierComponentsL"));
+	CleanupStack::PopAndDestroy(dependantGlobalId);
+	globalIdList.Reset();
+	
+	CGlobalComponentId *supplierGlobalId = CGlobalComponentId::NewLC(_L("SupplierGlobalId"), _L("dummy"));
+	TRAP(err, scrSession.GetDependantComponentsL(*supplierGlobalId, globalIdList));
+	CheckFailL(err, _L("GetDependantComponentsL"));
+	CleanupStack::PopAndDestroy(supplierGlobalId);
+	globalIdList.ResetAndDestroy();
+	
+	// Check application manager APIs
+	
+	TRAP(err, scrSession.IsMediaPresentL(1));
+	CheckFailL(err, _L("IsMediaPresentL"));
+	
+	TRAP(err, scrSession.IsComponentOrphanedL(KExistingComponentId));
+	CheckFailL(err, _L("IsComponentOrphanedL"));
+	
+	TRAP(err, scrSession.CompareVersionsL(_L("1.2"), _L("3.2")));
+	CheckFailL(err, _L("CompareVersionsL"));
+
+	TRAP(err, scrSession.IsComponentOnReadOnlyDriveL(KExistingComponentId));
+	CheckFailL(err, _L("IsComponentOnReadOnlyDriveL"));
+	
+	TRAP(err, scrSession.IsComponentPresentL(KExistingComponentId));
+	CheckFailL(err, _L("IsComponentPresentL"));
+		
+	// Check sub-session APIs
+	RSoftwareComponentRegistryFilesList compFilesListView;
+	TRAP(err, compFilesListView.OpenListL(scrSession, KExistingComponentId));
+	CheckFailL(err, _L("RSoftwareComponentRegistryFilesList::OpenListL"));
+	CleanupClosePushL(compFilesListView);
+
+	TRAP(err, compFilesListView.NextFileL());
+	CheckFailL(err, _L("RSoftwareComponentRegistryFilesList::NextFileL"));
+	
+	CleanupStack::PopAndDestroy(&compFilesListView);
+	
+	
+	// Check sub-session APIs for InfoQueryApp		
+	
+	TUid appUid = TUid::Uid(305419896);
+	
+	HBufC* filename = NULL;
+	RRegistrationInfoForApplication AppRegInfoQueryAppSubSession;
+	AppRegInfoQueryAppSubSession.OpenL(scrSession,appUid);
+	
+	TRAP(err,AppRegInfoQueryAppSubSession.GetAppViewIconL(appUid,filename));
+	CheckFailL(err, _L("RApplicationRegistrationInfoQueryApp::GetAppViewIcon"));
+	if(NULL != filename)
+	    delete filename;
+	
+	TRAP(err,AppRegInfoQueryAppSubSession.GetAppIconL(filename));
+	CheckFailL(err, _L("RApplicationRegistrationInfoQueryApp::GetAppIcon"));
+	if(NULL != filename)
+	    delete filename;
+	
+	Usif::TApplicationCharacteristics appCharacteristics ;
+	TRAP(err,AppRegInfoQueryAppSubSession.GetAppCharacteristicsL(appCharacteristics));
+	CheckFailL(err, _L("RApplicationRegistrationInfoQueryApp::GetAppCharacteristics"));
+	
+	RPointerArray<HBufC> appOwnedFilesArray; 
+	TRAP(err,AppRegInfoQueryAppSubSession.GetAppOwnedFilesL(appOwnedFilesArray));
+	CheckFailL(err, _L("RApplicationRegistrationInfoQueryApp::GetAppOwnedFiles"));
+	    
+	
+    RRegistrationInfoForApplication infoQuerySubSession;
+    CleanupClosePushL(infoQuerySubSession); 
+    
+    infoQuerySubSession.OpenL(scrSession, appUid);
+
+    RPointerArray<Usif::CAppViewData> appViewInfoArray;
+    CleanupResetAndDestroyPushL(appViewInfoArray);   
+
+    TRAP(err,infoQuerySubSession.GetAppViewsL(appViewInfoArray));
+    CheckFailL(err, _L("RRegistrationInfoForApplication::GetAppViewsL"));
+
+    appViewInfoArray.ResetAndDestroy();
+    CleanupStack::PopAndDestroy(2,&infoQuerySubSession); 
+
+	//for RSoftwareComponentRegistryAppInfoView
+
+	CAppInfoFilter* appinfoFilter = CAppInfoFilter::NewL();
+	CleanupStack::PushL(appinfoFilter);
+	
+	RApplicationInfoView  appInfoViewsubSession;
+	CleanupClosePushL(appInfoViewsubSession);
+	TRAP(err, appInfoViewsubSession.OpenViewL(scrSession,appinfoFilter));
+	CheckFailL(err, _L("RSoftwareComponentRegistryAppInfoView::OpenAppInfoViewL"));
+	
+	RPointerArray<Usif::TAppRegInfo> appRegInfoSet;
+     
+	TRAP(err, appInfoViewsubSession.GetNextAppInfoL(5, appRegInfoSet));
+    CheckFailL(err, _L("RSoftwareComponentRegistryAppInfoView::GetNextAppInfoL"));
+ 
+	TInt count = appRegInfoSet.Count();
+	Usif::TAppRegInfo* tp=NULL;
+	for (TInt i = 0; i<count; i++ )
+	    {
+	    tp=appRegInfoSet[i];
+	    delete tp;
+	    }
+	appRegInfoSet.Close();
+	CleanupStack::PopAndDestroy(2,appinfoFilter);
+    
+	//For GetAppServiceInfo
+	RApplicationRegistrationInfo appRegInfoQuerySubSession;
+    CleanupClosePushL(appRegInfoQuerySubSession); 
+    appRegInfoQuerySubSession.OpenL(scrSession);
+	
+	RPointerArray<Usif::CServiceInfo> appServiceInfoArray;
+    CleanupResetAndDestroyPushL(appServiceInfoArray);  
+
+	CAppServiceInfoFilter* appServiceInfoFilter = CAppServiceInfoFilter::NewLC();
+
+	TRAP(err,appRegInfoQuerySubSession.GetServiceInfoL(appServiceInfoFilter, appServiceInfoArray));
+    CheckFailL(err, _L("RApplicationRegistrationInfo::GetServiceInfoL"));
+
+    CleanupStack::PopAndDestroy(3, &appRegInfoQuerySubSession); 
+
+	//GetComponentIdForAppL
+    TUid testAppUid;
+    testAppUid.iUid = 1;  
+	TRAP(err, scrSession.GetComponentIdForAppL(testAppUid));
+    CheckFailL(err, _L("RSoftwareComponentRegistry::GetComponentIdForAppL"));
+
+	//GetAppUidsForComponentL
+	TComponentId compId = 1;
+	RArray<TUid> appUids;
+	TRAP(err, scrSession.GetAppUidsForComponentL(compId, appUids));
+	CheckFailL(err, _L("RSoftwareComponentRegistry::GetAppUidsForComponentL"));
+	appUids.Close();
+    
+	CleanupStack::PopAndDestroy(&scrSession);
+        
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/scrpluginmanagement.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include "scrpluginmanagement.h"
+
+#include <usif/scr/scr.h>
+#include <scs/cleanuputils.h>
+#include <e32def.h>
+
+_LIT_SECURE_ID(KSisRegistryServerSid, 0x10202DCA);
+_LIT(KScrPluginManagementSecName, "SCR Plugin Management APIs test");
+
+using namespace Usif;
+
+CScrPluginManagementSecTest* CScrPluginManagementSecTest::NewL()
+	{
+	CScrPluginManagementSecTest* self=new(ELeave) CScrPluginManagementSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CScrPluginManagementSecTest::CScrPluginManagementSecTest()
+	{
+	SetSidRequired(KSisRegistryServerSid);
+	}
+	
+void CScrPluginManagementSecTest::ConstructL()
+	{
+	SetNameL(KScrPluginManagementSecName);
+	}
+
+void CScrPluginManagementSecTest::RunTestL()
+	{
+	RSoftwareComponentRegistry scrSession;
+	User::LeaveIfError(scrSession.Connect());
+	CleanupClosePushL(scrSession);
+	
+	// The transaction APIs are tested separately. If this command fails, then we can proceed, as the following operations would fail also, and no transaction management would be required
+	TRAP_IGNORE(scrSession.CreateTransactionL()); 
+	
+	TInt err(0);
+	
+	// First, add a new sofwtare type
+	_LIT(KSwTypeName, "usifsecuritytestsoftwaretype");
+	TUid sifPluginUid = {0xA01B7211};
+	
+	RArray<TCustomAccessInfo> sidArray;
+	CleanupClosePushL(sidArray);
+	
+	TCustomAccessInfo id1(TSecureId(0xAAFFEE11), static_cast<TAccessMode>(1));
+	TCustomAccessInfo id2(TSecureId(0xAAEEDD11), static_cast<TAccessMode>(1));
+
+	sidArray.AppendL(id1);
+	sidArray.AppendL(id2);
+	
+	_LIT(KMimeType, "usifsecuritytestmimetype");
+	RPointerArray<HBufC> mimeTypes;
+	CleanupResetAndDestroyPushL(mimeTypes);
+	mimeTypes.Append(KMimeType().AllocL());
+	
+	_LIT(KLauncherExecutable, "usifsecuritytestLauncherExec");
+	
+	Usif::CSoftwareTypeRegInfo* swType = Usif::CSoftwareTypeRegInfo::NewL(KSwTypeName);
+	CleanupStack::PushL(swType);
+	swType->SetSifPluginUid(sifPluginUid);
+	for(TInt i=0;i<sidArray.Count(); ++i)
+		{
+		swType->SetCustomAccessL(sidArray[i]);
+		}
+	for(TInt i=0;i<mimeTypes.Count(); ++i)
+		{
+		swType->SetMimeTypeL(mimeTypes[i]->Des());
+		}
+
+	swType->SetLauncherExecutableL(KLauncherExecutable);
+	
+	TRAP(err, scrSession.AddSoftwareTypeL(*swType));
+	CheckFailL(err, _L("AddSoftwareTypeL"));
+	CleanupStack::PopAndDestroy(3, &sidArray);
+	
+	// Then, delete the newly added sofwtare type. 
+	RPointerArray<HBufC> deletedMimeTypes;
+	CleanupResetAndDestroyPushL(deletedMimeTypes);
+	TRAP(err, scrSession.DeleteSoftwareTypeL(KSwTypeName,deletedMimeTypes));
+	CheckFailL(err, _L("DeleteSoftwareTypeL"));
+	CleanupStack::PopAndDestroy(&deletedMimeTypes); 
+		
+	TRAP_IGNORE(scrSession.CommitTransactionL());
+	CleanupStack::PopAndDestroy(&scrSession);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/scrreaduserdata.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include "scrreaduserdata.h"
+#include <scs/cleanuputils.h>
+#include <usif/scr/scr.h>
+#include <e32def.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "screntries_internal.h"
+#endif
+
+_LIT(KScrReadUserDataSecName, "SCR ReadUserData APIs test");
+
+using namespace Usif;
+
+CScrReadUserDataSecTest* CScrReadUserDataSecTest::NewL()
+	{
+	CScrReadUserDataSecTest* self=new(ELeave) CScrReadUserDataSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CScrReadUserDataSecTest::CScrReadUserDataSecTest()
+	{
+	SetCapabilityRequired(ECapabilityReadUserData);
+	}
+	
+void CScrReadUserDataSecTest::ConstructL()
+	{
+	SetNameL(KScrReadUserDataSecName);
+	}
+
+void CScrReadUserDataSecTest::RunTestL()
+	{
+	RSoftwareComponentRegistry scrSession;
+	User::LeaveIfError(scrSession.Connect());
+	CleanupClosePushL(scrSession);
+
+	TInt err(0);
+	TComponentId testComponentId(1);
+	// Check subsession APIs
+	CComponentFilter* componentFilter = CComponentFilter::NewLC();
+
+	RSoftwareComponentRegistryView compRegistryView;
+	TRAP(err, compRegistryView.OpenViewL(scrSession, componentFilter));
+	CheckFailL(err, _L("CComponentFilter::OpenViewL"));
+	if (err == KErrNone)
+		{
+		// In a negative test, we should fail opening a sub-session. In this case we cannot continue with NextComponentL
+		TRAP(err, compRegistryView.NextComponentL());
+		CheckFailL(err, _L("CComponentFilter::NextComponentL"));		
+		compRegistryView.Close();
+		}
+
+	RArray<TComponentId> componentIds;
+	TRAP(err, scrSession.GetComponentIdsL(componentIds));
+	if(KErrNone==err && componentIds.Count()!=0)
+	    testComponentId=componentIds[0];       //The testComponentId retrieved, is used in the subsequent tests to get its localized information
+	CleanupClosePushL(componentIds);
+	CheckFailL(err, _L("RSoftwareComponentRegistry::GetComponentIdsL"));
+
+	RPointerArray<Usif::CLocalizableComponentInfo> compLocalizedInfoArray;
+	CleanupResetAndDestroyPushL(compLocalizedInfoArray);
+	TRAP(err, scrSession.GetComponentLocalizedInfoL(testComponentId, compLocalizedInfoArray));
+	CheckFailL(err, _L("RSoftwareComponentRegistry::GetComponentLocalizedInfoL"));
+	CleanupStack::Pop(&compLocalizedInfoArray);
+	compLocalizedInfoArray.ResetAndDestroy();
+	
+	
+	RArray<TLanguage> matchingSupportedLanguages;
+	CleanupClosePushL(matchingSupportedLanguages);
+	TRAP(err, scrSession.GetComponentSupportedLocalesListL(testComponentId, matchingSupportedLanguages));
+	CheckFailL(err, _L("RSoftwareComponentRegistry::GetComponentSupportedLocalesListL"));
+    CleanupStack::PopAndDestroy(&matchingSupportedLanguages);
+	
+	RPointerArray<CScrLogEntry> logEntries;
+	TRAP(err, scrSession.RetrieveLogEntriesL(logEntries));
+	logEntries.ResetAndDestroy();
+	CheckFailL(err, _L("RSoftwareComponentRegistry::RetrieveLogEntriesL"));
+		
+	CleanupStack::PopAndDestroy(2, componentFilter); // componentIds,  componentFilter  
+
+	CleanupStack::PopAndDestroy(&scrSession);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/scrwritedevicedata.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include "scrwritedevicedata.h"
+
+#include <usif/scr/scr.h>
+#include <e32def.h>
+
+_LIT(KScrWriteDeviceDataSecName, "SCR WriteDeviceData APIs test");
+
+using namespace Usif;
+
+CScrWriteDeviceDataSecTest* CScrWriteDeviceDataSecTest::NewL()
+	{
+	CScrWriteDeviceDataSecTest* self=new(ELeave) CScrWriteDeviceDataSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CScrWriteDeviceDataSecTest::CScrWriteDeviceDataSecTest()
+	{
+	SetCapabilityRequired(ECapabilityWriteDeviceData);
+	}
+	
+void CScrWriteDeviceDataSecTest::ConstructL()
+	{
+	SetNameL(KScrWriteDeviceDataSecName);
+	}
+
+void CScrWriteDeviceDataSecTest::RunTestL()
+	{
+	RSoftwareComponentRegistry scrSession;
+	User::LeaveIfError(scrSession.Connect());
+	CleanupClosePushL(scrSession);
+	
+	TInt err(0);
+	// SetIsComponentDrmProtectedL API	
+	TRAP(err, scrSession.SetIsComponentDrmProtectedL(1, ETrue));
+	CheckFailL(err, _L("SetIsComponentDrmProtectedL - set as DRM protected"));
+	
+	TRAP(err, scrSession.SetIsComponentDrmProtectedL(1, EFalse));
+	CheckFailL(err, _L("SetIsComponentDrmProtectedL - set as non-DRM protected"));
+	
+	// SetIsComponentHiddenL API		
+	TRAP(err, scrSession.SetIsComponentHiddenL(1, ETrue));
+	CheckFailL(err, _L("SetIsComponentHiddenL - set as hidden"));
+		
+	TRAP(err, scrSession.SetIsComponentHiddenL(1, EFalse));
+	CheckFailL(err, _L("SetIsComponentHiddenL - set as visible"));
+	
+	// SetIsComponentKnownRevokedL API		
+	TRAP(err, scrSession.SetIsComponentKnownRevokedL(1, ETrue));
+	CheckFailL(err, _L("SetIsComponentKnownRevokedL - set as known-revoked"));
+		
+	TRAP(err, scrSession.SetIsComponentKnownRevokedL(1, EFalse));
+	CheckFailL(err, _L("SetIsComponentKnownRevokedL - set as non-known-revoked"));
+	
+	// SetIsComponentOriginVerifiedL API		
+	TRAP(err, scrSession.SetIsComponentOriginVerifiedL(1, ETrue));
+	CheckFailL(err, _L("SetIsComponentOriginVerifiedL - set as origin-verified"));
+		
+	TRAP(err, scrSession.SetIsComponentOriginVerifiedL(1, EFalse));
+	CheckFailL(err, _L("SetIsComponentOriginVerifiedL - set as non-origin-verified"));
+	
+	CleanupStack::PopAndDestroy(&scrSession);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/sifsecuritycontext.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include "sifsecuritycontext.h"
+#include <usif/sif/sif.h>
+#include <e32def.h>
+
+_LIT(KSifSecurityContextName, "SIF TSecurityContext APIs test");
+
+using namespace Usif;
+
+// This test calls only the GetComponentInfo() API because the logic of passing TSecurityContext to
+// a SIF plug-in is exactly the same for all the SIF operations.
+namespace
+	{
+	_LIT(KFileName, "z:\\tusif\\tsif\\data\\test.nonnativepackage.txt");
+	_LIT_SECURE_ID(KTestSuiteSecureId, 0x10285BCC);
+
+	void DoTestL()
+		{
+		RSoftwareInstall sif;
+		User::LeaveIfError(sif.Connect());
+		CleanupClosePushL(sif);
+
+		CComponentInfo* compInfo = CComponentInfo::NewLC();
+
+		TRequestStatus status;
+		sif.GetComponentInfo(KFileName, *compInfo, status);
+		User::WaitForRequest(status);
+
+		CleanupStack::PopAndDestroy(2, &sif);
+		User::LeaveIfError(status.Int());
+		}
+	}
+
+CSifSecurityContextTest* CSifSecurityContextTest::NewL()
+	{
+	CSifSecurityContextTest* self=new(ELeave) CSifSecurityContextTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CSifSecurityContextTest::CSifSecurityContextTest()
+	{
+	SetCapabilityRequired(ECapabilityReadUserData);
+	SetSidRequired(KTestSuiteSecureId);
+	}
+
+void CSifSecurityContextTest::ConstructL()
+	{
+	SetNameL(KSifSecurityContextName);
+	}
+
+void CSifSecurityContextTest::RunTestL()
+	{
+	TRAPD(err, DoTestL());
+	CheckFailL(err, _L("CSifSecurityContextTest::DoTestL()"));
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/stsfilepathprotection.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include "stsfilepathprotection.h"
+
+#include <usif/sts/sts.h>
+#include <scs/cleanuputils.h>
+#include <e32def.h>
+#include <f32file.h>
+
+_LIT(KStsPrivatePathSecName, "STS private path file registration APIs test");
+
+using namespace Usif;
+
+CStsPrivatePathProtectionSecTest* CStsPrivatePathProtectionSecTest::NewL()
+	{
+	CStsPrivatePathProtectionSecTest* self=new(ELeave) CStsPrivatePathProtectionSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CStsPrivatePathProtectionSecTest::CStsPrivatePathProtectionSecTest()
+	{
+	SetSidRequired(TUid::Uid(0x10285DDF)); //this ID must match the one used in the file path below
+	}
+	
+void CStsPrivatePathProtectionSecTest::ConstructL()
+	{
+	SetNameL(KStsPrivatePathSecName);
+	}
+
+void CStsPrivatePathProtectionSecTest::RunTestL()
+	{
+	RStsSession stsSession;
+	TInt32 transactionId(stsSession.CreateTransactionL());
+	CleanupClosePushL(stsSession);
+	TInt err(0);	
+	TUint newFileMode(EFileShareExclusive | EFileWrite);
+	
+	_LIT(KOwnPrivatePathFilename, 	"c:\\private\\10285DDF\\file.txt");
+
+	TRAP(err, stsSession.RegisterNewL(KOwnPrivatePathFilename));
+	CheckFailL(err, _L("RegisterNewL - own private path c:\\private\\10285DDF"));
+	
+	RFile dummyFileHandle;
+	CleanupClosePushL(dummyFileHandle);
+
+	TRAP(err, stsSession.CreateNewL(KOwnPrivatePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("CreateNewL - own private path c:\\private\\10285DDF"));
+	
+	TRAP(err, stsSession.RemoveL(KOwnPrivatePathFilename));
+	CheckFailL(err, _L("RemoveL - own private path c:\\private\\10285DDF"));
+
+	TRAP(err, stsSession.RegisterTemporaryL(KOwnPrivatePathFilename));
+	CheckFailL(err, _L("RegisterTemporaryL - own private path c:\\private\\10285DDF"));
+
+	TRAP(err, stsSession.CreateTemporaryL(KOwnPrivatePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("CreateTemporaryL - own private path c:\\private\\10285DDF"));
+
+	TRAP(err, stsSession.OverwriteL(KOwnPrivatePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("OverwriteL - own private path c:\\private\\10285DDF"));
+	
+	//---------------------------------------------------------------------------------	
+	
+	// This test should always pass, as we are registering a file in an import directory which can be accessed regardless of the SID
+	SetExpectPermissionDenied(EFalse); 
+	_LIT(KOthersImportPrivatePathFilename, "c:\\private\\99999999\\import\\file.txt");
+	
+
+	TRAP(err, stsSession.RegisterNewL(KOthersImportPrivatePathFilename));
+	CheckFailL(err, _L("RegisterNewL - others import path c:\\private\\99999999\\import"));
+	
+	TRAP(err, stsSession.CreateNewL(KOthersImportPrivatePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("CreateNewL - others import path c:\\private\\99999999\\import"));
+	
+	TRAP(err, stsSession.RemoveL(KOthersImportPrivatePathFilename));
+	CheckFailL(err, _L("RemoveL - others import path c:\\private\\99999999\\import"));
+
+	TRAP(err, stsSession.RegisterTemporaryL(KOthersImportPrivatePathFilename));
+	CheckFailL(err, _L("RegisterTemporaryL - others import path c:\\private\\99999999\\import"));
+
+	TRAP(err, stsSession.CreateTemporaryL(KOthersImportPrivatePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("CreateTemporaryL - others import path c:\\private\\99999999\\import"));
+
+	TRAP(err, stsSession.OverwriteL(KOthersImportPrivatePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("OverwriteL - others import path c:\\private\\99999999\\import"));
+	
+	//---------------------------------------------------------------------------------	
+	
+	// This test should always fail, as we are registering a file in a private directory which does not belong to us
+	SetExpectPermissionDenied(ETrue); 
+	_LIT(KOthersPrivatePathFilename, "c:\\private\\99999999\\file.txt");
+
+	TRAP(err, stsSession.RegisterNewL(KOthersPrivatePathFilename));
+	CheckFailL(err, _L("RegisterNewL - others private path c:\\private\\99999999"));
+	
+	TRAP(err, stsSession.CreateNewL(KOthersPrivatePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("CreateNewL - others private path c:\\private\\99999999"));
+	
+	TRAP(err, stsSession.RemoveL(KOthersPrivatePathFilename));
+	CheckFailL(err, _L("RemoveL - others private path c:\\private\\99999999"));
+
+	TRAP(err, stsSession.RegisterTemporaryL(KOthersPrivatePathFilename));
+	CheckFailL(err, _L("RegisterTemporaryL - others private path c:\\private\\99999999"));
+
+	TRAP(err, stsSession.CreateTemporaryL(KOthersPrivatePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("CreateTemporaryL - others private path c:\\private\\99999999"));
+
+	TRAP(err, stsSession.OverwriteL(KOthersPrivatePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("OverwriteL - others private path c:\\private\\99999999"));
+	
+	CleanupStack::PopAndDestroy(&dummyFileHandle);
+	CleanupStack::PopAndDestroy(&stsSession);
+	}
+
+//---------------CStsTCBPathProtectionSecTest------------------
+
+_LIT(KStsTCBPathSecName, "STS TCB path file registration APIs test");
+
+CStsTCBPathProtectionSecTest* CStsTCBPathProtectionSecTest::NewL()
+	{
+	CStsTCBPathProtectionSecTest* self=new(ELeave) CStsTCBPathProtectionSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CStsTCBPathProtectionSecTest::CStsTCBPathProtectionSecTest()
+	{
+	SetCapabilityRequired(ECapabilityTCB);
+	}
+	
+void CStsTCBPathProtectionSecTest::ConstructL()
+	{
+	SetNameL(KStsTCBPathSecName);
+	}
+
+void CStsTCBPathProtectionSecTest::RunTestL()
+	{
+	RStsSession stsSession;
+	TInt32 transactionId(stsSession.CreateTransactionL());
+	CleanupClosePushL(stsSession);
+	TInt err(0);	
+	
+	_LIT(KTcbPathFilename, "c:\\sys\\file.txt");
+
+	TRAP(err, stsSession.RegisterNewL(KTcbPathFilename));
+	CheckFailL(err, _L("RegisterNewL - \\sys path"));
+	
+	TUint newFileMode(EFileShareExclusive | EFileWrite);
+	RFile dummyFileHandle;
+	CleanupClosePushL(dummyFileHandle);
+
+	TRAP(err, stsSession.CreateNewL(KTcbPathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("CreateNewL - \\sys path"));
+	
+	TRAP(err, stsSession.RemoveL(KTcbPathFilename));
+	CheckFailL(err, _L("RemoveL - \\sys path"));
+
+	TRAP(err, stsSession.RegisterTemporaryL(KTcbPathFilename));
+	CheckFailL(err, _L("RegisterTemporaryL - \\sys path"));
+
+	TRAP(err, stsSession.CreateTemporaryL(KTcbPathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("CreateTemporaryL - \\sys path"));
+
+	TRAP(err, stsSession.OverwriteL(KTcbPathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("OverwriteL - \\sys path"));
+
+
+	_LIT(KResourcePathFilename, "c:\\resource\\file.txt");
+
+	TRAP(err, stsSession.RegisterNewL(KResourcePathFilename));
+	CheckFailL(err, _L("RegisterNewL - \\resource path"));
+	
+	TRAP(err, stsSession.CreateNewL(KResourcePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("CreateNewL - \\resource path"));
+
+	TRAP(err, stsSession.RemoveL(KResourcePathFilename));
+	CheckFailL(err, _L("RemoveL - \\resource path"));
+
+	TRAP(err, stsSession.RegisterTemporaryL(KResourcePathFilename));
+	CheckFailL(err, _L("RegisterTemporaryL - \\resource path"));
+
+	TRAP(err, stsSession.CreateTemporaryL(KResourcePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("CreateTemporaryL - \\resource path"));
+
+	TRAP(err, stsSession.OverwriteL(KResourcePathFilename, dummyFileHandle, newFileMode));
+	dummyFileHandle.Close();
+	CheckFailL(err, _L("OverwriteL - \\resource path"));
+		
+	CleanupStack::PopAndDestroy(&dummyFileHandle);
+	CleanupStack::PopAndDestroy(&stsSession);
+	}
+
+ 
+ //---------------CStsPublicPathSecTest------------------
+ 
+ _LIT(KStsPublicPathSecName, "STS public path file registration APIs test");
+ 
+ CStsPublicPathSecTest* CStsPublicPathSecTest::NewL()
+ 	{
+ 	CStsPublicPathSecTest* self=new(ELeave) CStsPublicPathSecTest();
+ 	CleanupStack::PushL(self);
+ 	self->ConstructL();
+ 	CleanupStack::Pop(self);
+ 	return self;
+ 	}
+ 
+ CStsPublicPathSecTest::CStsPublicPathSecTest()
+ 	{
+ 	}
+ 	
+ void CStsPublicPathSecTest::ConstructL()
+ 	{
+ 	SetNameL(KStsPublicPathSecName);
+ 	}
+ 
+ void CStsPublicPathSecTest::RunTestL()
+ 	{
+ 	RStsSession stsSession;
+ 	TInt32 transactionId(stsSession.CreateTransactionL());
+ 	CleanupClosePushL(stsSession);
+ 	TInt err(0);	
+
+	TUint newFileMode(EFileShareExclusive | EFileWrite);
+
+ 	//this test must always pass
+ 	SetExpectPermissionDenied(EFalse); 
+ 	_LIT(KPublicPathFilename, "c:\\publicdir\\file.txt");
+ 
+ 	TRAP(err, stsSession.RegisterNewL(KPublicPathFilename));
+ 	CheckFailL(err, _L("RegisterNewL - \\publicdir path"));
+ 	
+ 	RFile dummyFileHandle;
+ 	CleanupClosePushL(dummyFileHandle);
+ 
+ 	TRAP(err, stsSession.CreateNewL(KPublicPathFilename, dummyFileHandle, newFileMode));
+ 	dummyFileHandle.Close();
+ 	CheckFailL(err, _L("CreateNewL - \\publicdir path"));
+ 	
+ 	TRAP(err, stsSession.RemoveL(KPublicPathFilename));
+ 	CheckFailL(err, _L("RemoveL - \\publicdir path"));
+ 
+ 	TRAP(err, stsSession.RegisterTemporaryL(KPublicPathFilename));
+ 	CheckFailL(err, _L("RegisterTemporaryL - \\publicdir path"));
+ 
+ 	TRAP(err, stsSession.CreateTemporaryL(KPublicPathFilename, dummyFileHandle, newFileMode));
+ 	dummyFileHandle.Close();
+ 	CheckFailL(err, _L("CreateTemporaryL - \\publicdir path"));
+ 
+ 	TRAP(err, stsSession.OverwriteL(KPublicPathFilename, dummyFileHandle, newFileMode));
+ 	dummyFileHandle.Close();
+ 	CheckFailL(err, _L("OverwriteL - \\publicdir path"));
+ 
+ 	CleanupStack::PopAndDestroy(&dummyFileHandle);
+ 	CleanupStack::PopAndDestroy(&stsSession);
+ 	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/stsrollbackalltest.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include "stsrollbackalltest.h"
+
+#include <usif/sts/sts.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "stsrecovery.h"
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <scs/cleanuputils.h>
+#include <e32def.h>
+
+_LIT(KStsRollBackAllSecName, "STS RollBAckAllPending APIs test");
+
+using namespace Usif;
+
+CStsRollbackAllSecTest* CStsRollbackAllSecTest::NewL()
+	{
+	CStsRollbackAllSecTest* self=new(ELeave) CStsRollbackAllSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CStsRollbackAllSecTest::CStsRollbackAllSecTest()
+	{
+	SetSidRequired(TUid::Uid(0x10202DCE)); //SWI daemon's UID3 (ie: SID)
+	}
+	
+void CStsRollbackAllSecTest::ConstructL()
+	{
+	SetNameL(KStsRollBackAllSecName);
+	}
+
+void CStsRollbackAllSecTest::RunTestL()
+	{
+	RStsRecoverySession stsRecoverySession;
+	CleanupClosePushL(stsRecoverySession);
+	TRAPD(err, stsRecoverySession.RollbackAllPendingL());
+	CheckFailL(err, _L("RollbackAllPendingL"));
+	CleanupStack::PopAndDestroy(&stsRecoverySession);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/usifsecuritytests-tcb.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include <captestframework/aprcaptestutility.h>
+#include "sifsecuritycontext.h"
+
+#include <s32file.h>
+
+// Factory function
+MCapabilityTestFactory* CapabilityTestFactoryL()
+	{
+	CDefaultCapabilityTestFactory* factory=new(ELeave) CDefaultCapabilityTestFactory();
+
+	factory->AddTestL(CSifSecurityContextTest::NewL());
+
+	return factory;
+	}
+
+EXPORT_C MCapabilityTestFactory* CapabilityTestFactory()
+	{
+	MCapabilityTestFactory* factory=NULL;
+	TRAP_IGNORE(factory = CapabilityTestFactoryL());
+	return factory;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/securitytests/source/usifsecuritytests.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+*/
+
+#include <captestframework/aprcaptestutility.h>
+#include "scrcomponentspecific.h"
+#include "scrreaduserdata.h"
+#include "scrallfiles.h"
+#include "scrwritedevicedata.h"
+#include "scrnonrestricted.h"
+#include "scrfilepathprotection.h"
+#include "stsfilepathprotection.h"
+#include "stsrollbackalltest.h"
+#include "scrpluginmanagement.h"
+#include "scrapparccomponentspecific.h"
+
+#include <s32file.h>
+
+// Factory function
+MCapabilityTestFactory* CapabilityTestFactoryL()
+	{
+	CDefaultCapabilityTestFactory* factory=new(ELeave) CDefaultCapabilityTestFactory();
+
+	factory->AddTestL(CScrComponentSpecificSecTest::NewL());
+	factory->AddTestL(CScrReadUserDataSecTest::NewL());
+	factory->AddTestL(CScrNonRestrictedSecTest::NewL());
+	factory->AddTestL(CScrPrivatePathProtectionSecTest::NewL());
+	factory->AddTestL(CScrTCBPathProtectionSecTest::NewL());
+	factory->AddTestL(CScrAllFilesSecTest::NewL());
+	factory->AddTestL(CScrWriteDeviceDataSecTest::NewL());
+	factory->AddTestL(CStsTCBPathProtectionSecTest::NewL());
+	factory->AddTestL(CStsPrivatePathProtectionSecTest::NewL());
+	factory->AddTestL(CStsPublicPathSecTest::NewL());
+	factory->AddTestL(CStsRollbackAllSecTest::NewL());
+	factory->AddTestL(CScrPluginManagementSecTest::NewL());
+	factory->AddTestL(CScrApparcComponentSpecificSecTest::NewL());
+
+	return factory;
+	}
+
+EXPORT_C MCapabilityTestFactory* CapabilityTestFactory()
+	{
+	MCapabilityTestFactory* factory=NULL;
+	TRAP_IGNORE(factory = CapabilityTestFactoryL());
+	return factory;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/siflauncherconfig/siflauncher_loc.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+rls_string STRING_r_siflauncher_icon_path "z:\\resource\\apps\\siflauncher.mbm"
+rls_string STRING_r_siflauncher__short_caption "USIF"
+rls_string STRING_r_siflauncher_caption "Universal Software Install Framework"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/siflauncherconfig/siflauncher_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <appinfo.rh>
+#include "siflauncher_loc.rls"
+
+RESOURCE LOCALISABLE_APP_INFO
+	{
+	short_caption = STRING_r_siflauncher_short_caption;
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO 
+			{
+			caption=STRING_r_siflauncher_caption;
+			number_of_icons=1;
+			icon_file=STRING_r_siflauncher_icon_path;
+			}
+		};
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/siflauncherconfig/siflauncher_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* siflauncher.rss
+* Test version of the SIF Launcher registration resource file 
+*
+*/
+
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x10285BD0
+
+RESOURCE APP_REGISTRATION_INFO 
+	{
+	app_file="siflauncher";
+	localisable_resource_file="\\resource\\apps\\siflauncher_loc";
+
+	hidden=KAppNotHidden; 
+	embeddability=KAppNotEmbeddable;
+	newfile=KAppDoesNotSupportNewFile;
+	datatype_list=
+		{
+		DATATYPE { priority=EDataTypePrioritySystem; type="x-epoc/x-sisx-app"; },
+		DATATYPE { priority=EDataTypePrioritySystem; type="binary/sif-refpkg"; }
+		};
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/createleesisfiles.pl	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,300 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+
+use Cwd;
+use File::Copy;
+use File::Basename;
+
+# Helpers
+sub ReadFile($);
+sub WriteFile($$);
+sub EditFile($$$);
+
+print "This script creates SIS files containing LEEs for SIF integration tests\n";
+
+my $PLATFORM=@ARGV[0];
+my $CONFIGURATION=@ARGV[1];
+
+my $securitySourceDir = $ENV{SECURITYSOURCEDIR};
+my $CERTPATH = "$securitySourceDir\\installationservices\\switestfw\\testcertificates\\swi\\test\\tsisfile\\data\\signedsis\\Root5CA\\cert_chain_dsa_len1\\first.dsa.cer";
+my $KEYPATH = "$securitySourceDir\\installationservices\\swi\\test\\tsisfile\\data\\signedsis\\Root5CA\\cert_chain_dsa_len1\\dsa1.key";
+my $PKGDIR = "$securitySourceDir\\installationservices\\swinstallationfw\\test\\tusif\\scripts\\data";
+my $BUILDDIR = "\\epoc32\\release\\$PLATFORM\\$CONFIGURATION";
+my $DATADIR = "$BUILDDIR\\z\\tusif\\tswtype\\data";
+my $DATADIR_TSIF = "$BUILDDIR\\z\\tusif\\tsif\\data";
+my $ARMV5DATADIR = "\\epoc32\\data\\z\\tusif\\tswtype\\data";
+my $ARMV5DATADIR_TSIF = "\\epoc32\\data\\z\\tusif\\tsif\\data";
+
+my $BASE = 'sifswtypebase';
+my $UPGRADE = 'sifswtypeupgrade';
+my $SIFGETCOMAPPARCINFOTEST = 'sifgetcompapparcinfotest';
+my $SIFGETCOMAPPARCINFOTESTMULTILANG = 'sifgetcompapparcinfotestmultilang';
+my $SIFGETCOMAPPARCINFOTESTMULTIFILES = 'sifgetcompapparcinfotestmultifiles';
+my $SIFGETCOMAPPARCINFOTESTNONAPPARCRSC = 'sifgetcompapparcinfotestnonapparcrsc';
+my $SIFGETCOMAPPARCINFOTESTNONAPPARCPATH = 'sifgetcompapparcinfotestnonapparcpath';
+my $SIFGETCOMAPPARCINFOTESTMULTIAPP = 'sifgetcompapparcinfotestmultiapp';
+my $SIFGETCOMAPPARCINFOTESTMULTIAPPONEAPPWITHNONAPPARCRSC = 'sifgetcompapparcinfotestmultiapp_OneAppWithNonApparcRsc';
+my $SIFGETCOMAPPARCINFOTESTCORRUPTRSC = 'sifgetcompapparcinfotest_corruptrsc';
+my $SIFGETCOMAPPARCINFOTESTEMBEDDED = 'sifgetcompapparcinfotestembedded_innerwithdifficon';
+my $SIFGETCOMAPPARCINFOTESTNOLOCALE = 'sifgetcompapparcinfotest_nolocale';
+my $SIFGETCOMAPPARCINFOTESTLARGEANDSMALLEXTN = 'sifgetcompapparcinfotestmultifiles_largeandsmallextn';
+my $SWIAPPREGINTEGRATION_CASE05 = 'swiappregintegration_case05';
+my $SWIAPPREGINTEGRATION_CASE05_SU = 'swiappregintegration_case05_SU';
+my $SWIAPPREGINTEGRATION_CASE06_BASE = 'swiappregintegration_case06_base';
+my $SWIAPPREGINTEGRATION_CASE06_SP3 = 'swiappregintegration_case06_sp3';
+my $SWIAPPREGINTEGRATION_CASE06_SP2 = 'swiappregintegration_case06_sp2';
+my $SWIAPPREGINTEGRATION_CASE06_PU = 'swiappregintegration_case06_pu';
+my $SWIAPPREGINTEGRATION_CASE06_SP1 = 'swiappregintegration_case06_sp1';
+my $SWIAPPREGINTEGRATION_CASE06_SA = 'swiappregintegration_case06_sa';
+my $SWIAPPREGINTEGRATION_CASE08_SA1 = 'swiappregintegration_case08_sa1';
+my $SWIAPPREGINTEGRATION_CASE08_SA2 = 'swiappregintegration_case08_sa2';
+my $suffix = '_edited';
+
+# Replace <BUILDMIDPATH> and <ZDRIVEMIDPATH> in the PKG files with the current values
+my $ZDRIVEMIDPATH = 'data';
+if (lc($PLATFORM) ne "armv5")
+	{
+	$ZDRIVEMIDPATH = "release\\$PLATFORM\\$CONFIGURATION";
+	}
+my $BUILDMIDPATH = "release\\$PLATFORM\\$CONFIGURATION";
+EditFile("$PKGDIR\\$BASE.pkg", "$PKGDIR\\$BASE$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$UPGRADE.pkg", "$PKGDIR\\$UPGRADE$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SIFGETCOMAPPARCINFOTEST.pkg", "$PKGDIR\\$SIFGETCOMAPPARCINFOTEST$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTILANG.pkg", "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTILANG$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIFILES.pkg", "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIFILES$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCRSC.pkg", "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCRSC$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCPATH.pkg", "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCPATH$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPP.pkg", "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPP$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPPONEAPPWITHNONAPPARCRSC.pkg", "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPPONEAPPWITHNONAPPARCRSC$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTCORRUPTRSC.pkg", "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTCORRUPTRSC$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTEMBEDDED.pkg", "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTEMBEDDED$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNOLOCALE.pkg", "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNOLOCALE$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTLARGEANDSMALLEXTN.pkg", "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTLARGEANDSMALLEXTN$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE05.pkg", "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE05$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE05_SU.pkg", "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE05_SU$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_BASE.pkg", "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_BASE$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP3.pkg", "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP3$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP2.pkg", "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP2$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_PU.pkg", "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_PU$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP1.pkg", "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP1$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SA.pkg", "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SA$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA1.pkg", "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA1$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+EditFile("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA2.pkg", "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA2$suffix.pkg" , sub { s/<BUILDMIDPATH>/$BUILDMIDPATH/gm; s/<ZDRIVEMIDPATH>/$ZDRIVEMIDPATH/gm; });
+
+
+my $dir = getcwd;
+chdir $PKGDIR;
+
+# Generate SIS files for SIF integration tests
+my $CREATESISCMD = "createsis create -cert $CERTPATH -key $KEYPATH";
+`$CREATESISCMD $PKGDIR\\$BASE$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$UPGRADE$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTEST$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTILANG$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIFILES$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCRSC$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCPATH$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPP$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPPONEAPPWITHNONAPPARCRSC$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTESTCORRUPTRSC$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTESTNOLOCALE$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTESTLARGEANDSMALLEXTN$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SWIAPPREGINTEGRATION_CASE05$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SWIAPPREGINTEGRATION_CASE05_SU$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_BASE$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP3$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP2$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_PU$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP1$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SA$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA1$suffix.pkg`;
+`$CREATESISCMD $PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA2$suffix.pkg`;
+
+# Copy generated SIS files onto the Z drive
+if (lc($PLATFORM) ne "armv5")
+	{
+	unlink "$DATADIR\\$BASE.sis";
+	move("$PKGDIR\\$BASE$suffix.sis", "$DATADIR\\$BASE.sis");
+	unlink "$DATADIR\\$UPGRADE.sis";
+	move("$PKGDIR\\$UPGRADE$suffix.sis", "$DATADIR\\$UPGRADE.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTEST.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTEST$suffix.sis", "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTEST.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTILANG.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTILANG$suffix.sis", "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTILANG.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIFILES.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIFILES$suffix.sis", "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIFILES.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNONAPPARCRSC.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCRSC$suffix.sis", "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNONAPPARCRSC.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNONAPPARCPATH.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCPATH$suffix.sis", "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNONAPPARCPATH.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIAPP.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPP$suffix.sis", "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIAPP.sis");	
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIAPPONEAPPWITHNONAPPARCRSC.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPPONEAPPWITHNONAPPARCRSC$suffix.sis", "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIAPPONEAPPWITHNONAPPARCRSC.sis");	
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTCORRUPTRSC.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTCORRUPTRSC$suffix.sis", "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTCORRUPTRSC.sis");	
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNOLOCALE.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNOLOCALE$suffix.sis", "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNOLOCALE.sis");	
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTLARGEANDSMALLEXTN.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTLARGEANDSMALLEXTN$suffix.sis", "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTLARGEANDSMALLEXTN.sis");
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE05.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE05$suffix.sis", "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE05.sis");	
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE05_SU.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE05_SU$suffix.sis", "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE05_SU.sis");	
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_BASE.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_BASE$suffix.sis", "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_BASE.sis");	
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP3.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP3$suffix.sis", "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP3.sis");	
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP2.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP2$suffix.sis", "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP2.sis");	
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_PU.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_PU$suffix.sis", "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_PU.sis");	
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP1.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP1$suffix.sis", "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP1.sis");	
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SA.sis";	
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SA$suffix.sis", "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SA.sis");	
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE08_SA1.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA1$suffix.sis", "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE08_SA1.sis");	
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE08_SA2.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA2$suffix.sis", "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE08_SA2.sis");		
+
+	`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTESTEMBEDDED$suffix.pkg`;
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTEMBEDDED.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTEMBEDDED$suffix.sis", "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTEMBEDDED.sis");	
+
+	}
+else
+	{
+	mkdir "$ARMV5DATADIR" unless -d "$ARMV5DATADIR";
+	unlink "$DATADIR\\$BASE.sis";
+	move("$PKGDIR\\$BASE$suffix.sis", "$ARMV5DATADIR\\$BASE.sis");
+	unlink "$DATADIR\\$UPGRADE.sis";
+	move("$PKGDIR\\$UPGRADE$suffix.sis", "$ARMV5DATADIR\\$UPGRADE.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTEST.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTEST$suffix.sis", "$ARMV5DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTEST.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTILANG.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTILANG$suffix.sis", "$ARMV5DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTILANG.sis");	
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIFILES.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIFILES$suffix.sis", "$ARMV5DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIFILES.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNONAPPARCRSC.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCRSC$suffix.sis", "$ARMV5DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNONAPPARCRSC.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNONAPPARCPATH.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCPATH$suffix.sis", "$ARMV5DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNONAPPARCPATH.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIAPP.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPP$suffix.sis", "$ARMV5DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIAPP.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIAPPONEAPPWITHNONAPPARCRSC.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPPONEAPPWITHNONAPPARCRSC$suffix.sis", "$ARMV5DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTMULTIAPPONEAPPWITHNONAPPARCRSC.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTCORRUPTRSC.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTCORRUPTRSC$suffix.sis", "$ARMV5DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTCORRUPTRSC.sis");
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNOLOCAL.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNOLOCAL$suffix.sis", "$ARMV5DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTNOLOCAL.sis");	
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTLARGEANDSMALLEXTN.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTLARGEANDSMALLEXTN$suffix.sis", "$ARMV5DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTLARGEANDSMALLEXTN.sis");
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE05.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE05$suffix.sis", "$ARMV5DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE05.sis");
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE05_SU.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE05_SU$suffix.sis", "$ARMV5DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE05_SU.sis");
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_BASE.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_BASE$suffix.sis", "$ARMV5DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_BASE.sis");
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP3.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP3$suffix.sis", "$ARMV5DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP3.sis");
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP2.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP2$suffix.sis", "$ARMV5DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP2.sis");
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_PU.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_PU$suffix.sis", "$ARMV5DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_PU.sis");
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP1.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP1$suffix.sis", "$ARMV5DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SP1.sis");
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SA.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SA$suffix.sis", "$ARMV5DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE06_SA.sis");
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE08_SA1.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA1$suffix.sis", "$ARMV5DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE08_SA1.sis");
+	unlink "$DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE08_SA2.sis";
+	move("$PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA2$suffix.sis", "$ARMV5DATADIR_TSIF\\$SWIAPPREGINTEGRATION_CASE08_SA2.sis");
+				
+	`$CREATESISCMD $PKGDIR\\$SIFGETCOMAPPARCINFOTESTEMBEDDED$suffix.pkg`;
+	unlink "$DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTEMBEDDED.sis";
+	move("$PKGDIR\\$SIFGETCOMAPPARCINFOTESTEMBEDDED$suffix.sis", "$ARMV5DATADIR_TSIF\\$SIFGETCOMAPPARCINFOTESTEMBEDDED.sis");	
+		
+		}			
+			
+unlink "*.cer"; #delete all certificates to avoid failure on checklocationofcertificates test
+
+unlink "$PKGDIR\\$BASE$suffix.pkg";
+unlink "$PKGDIR\\$UPGRADE$suffix.pkg";
+unlink "$PKGDIR\\$SIFGETCOMAPPARCINFOTEST$suffix.pkg";
+unlink "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTILANG$suffix.pkg";
+unlink "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIFILES$suffix.pkg";
+unlink "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCRSC$suffix.pkg";
+unlink "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNONAPPARCPATH$suffix.pkg";
+unlink "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPP$suffix.pkg";
+unlink "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTMULTIAPPONEAPPWITHNONAPPARCRSC$suffix.pkg";
+unlink "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTCORRUPTRSC$suffix.pkg";
+unlink "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTNOLOCALE$suffix.pkg";
+unlink "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTEMBEDDED$suffix.pkg";
+unlink "$PKGDIR\\$SIFGETCOMAPPARCINFOTESTLARGEANDSMALLEXTN$suffix.pkg";
+unlink "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE05$suffix.pkg";
+unlink "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE05_SU$suffix.pkg";
+unlink "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_BASE$suffix.pkg";
+unlink "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP3$suffix.pkg";
+unlink "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP2$suffix.pkg";
+unlink "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_PU$suffix.pkg";
+unlink "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SP1$suffix.pkg";
+unlink "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE06_SA$suffix.pkg";
+unlink "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA1$suffix.pkg";
+unlink "$PKGDIR\\$SWIAPPREGINTEGRATION_CASE08_SA2$suffix.pkg";
+
+chdir $dir;
+
+
+# Read the contents of a file into a string and return it
+sub ReadFile ($) {
+	my ($file) = @_;
+	open FILE, "<$file" or die "Can't read from $file: $!";
+	local $/ = undef;
+	my $data = <FILE>;
+	close FILE;
+	return $data;
+}
+
+# Replace a file with a string
+sub WriteFile ($$) {
+	my ($file, $data) = @_;
+
+	# Ensure directory exists
+	if ($1 && $file =~ basename($1) && ! -e $1)
+		{
+		mkdir($1);
+		}
+	
+	if (-e $file)
+		{
+		system("attrib -r $file");
+		}
+	
+	open FILE, ">$file" or die "Can't write to $file: $!";
+	print FILE $data;
+	close FILE;
+}
+
+# Edit a file
+sub EditFile ($$$) {
+	my ($infile, $outfile, $coderef) = @_;
+	local $_ = ReadFile($infile);
+	&$coderef();
+	WriteFile($outfile, $_);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/createrefbinfiles.pl	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,160 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# This script creates reference binary packages that may consists of embedded packages
+#
+
+use File::Copy;
+
+sub MakeBinPkg ($);
+
+my $PLATFORM=@ARGV[0];
+my $CONFIGURATION=@ARGV[1];
+
+my $SecuritySourceDir = $ENV{SECURITYSOURCEDIR};
+my $RefSamplePath = "$SecuritySourceDir\\installationservices\\refswinstallationplugin\\sample";
+my $RefDataPath = "$SecuritySourceDir\\installationservices\\refswinstallationplugin\\test\\scripts\\data";
+my $IntegTestDataPath = "$SecuritySourceDir\\installationservices\\swinstallationfw\\test\\tusif\\scripts\\data";
+my $SifTestDataPath = "$SecuritySourceDir\\installationservices\\swinstallationfw\\test\\scripts\\data";
+my $BUILDDIR = "\\epoc32\\release\\$PLATFORM\\$CONFIGURATION";
+
+my $DATADIR = "$BUILDDIR\\z\\tusif\\tsifintegration\\data";
+my $ARMV5DATADIR = "\\epoc32\\data\\z\\tusif\\tsifintegration\\data";
+
+my $REFDATADIR = "$BUILDDIR\\z\\tusif\\tsifrefinstaller\\data";
+my $REFARMV5DATADIR = "\\epoc32\\data\\z\\tusif\\tsifrefinstaller\\data";
+
+my $BASE = 'base.sifrefpkg';
+my $BASE3 = 'base3.sifrefpkg';
+my $UPGRADE = 'upgrade.sifrefpkg';
+my $INVALID = 'invalid.sifrefpkg';
+my $INVALID2 = 'invalid2.sifrefpkg';
+my $INVALID3 = 'invalid3.sifrefpkg';
+my $INVALID4 = 'invalid4.sifrefpkg';
+my $INVALID5 = 'invalid5.sifrefpkg';
+my $INVALID6 = 'invalid6.sifrefpkg';
+my $INVALID7 = 'invalid7.sifrefpkg';
+my $INVALID8 = 'invalid8.sifrefpkg';
+my $INVALID9 = 'invalid9.sifrefpkg';
+my $INVALID10 = 'invalid10.sifrefpkg';
+my $INVALID11 = 'invalid11.sifrefpkg';
+my $INVALID12 = 'invalid12.sifrefpkg';
+my $BASE2 = 'base2.sifrefpkg';
+my $SISCHILD = 'sifintegrationtestbase.sis';
+my $FILEINUSETEST = 'fileinusetest.sifrefpkg';
+my $BINBASE = 'base.sifrefbinpkg';
+my $BINBASE3 = 'base3.sifrefbinpkg';
+my $BINUPGRADE = 'upgrade.sifrefbinpkg';
+my $BININVALID = 'invalid.sifrefbinpkg';
+my $BININVALID2 = 'invalid2.sifrefbinpkg';
+my $BININVALID3 = 'invalid3.sifrefbinpkg';
+my $BININVALID4 = 'invalid4.sifrefbinpkg';
+my $BININVALID5 = 'invalid5.sifrefbinpkg';
+my $BININVALID6 = 'invalid6.sifrefbinpkg';
+my $BININVALID7 = 'invalid7.sifrefbinpkg';
+my $BININVALID8 = 'invalid8.sifrefbinpkg';
+my $BININVALID9 = 'invalid9.sifrefbinpkg';
+my $BININVALID10 = 'invalid10.sifrefbinpkg';
+my $BININVALID11 = 'invalid11.sifrefbinpkg';
+my $BININVALID12 = 'invalid12.sifrefbinpkg';
+my $BINFILEINUSETEST = 'fileinusetest.sifrefbinpkg';
+my $BINCHILD = 'child.sifrefbinpkg';
+my $GRANDCHILD = 'test.nonnativepackage.txt';
+my $BINPARENT = 'compound.sifrefbinpkg';
+my $BINHOMOGENEOUSPARENT = 'homogeneouscompound.sifrefbinpkg';
+
+print "Generating simple packages...\n";
+
+# Create a simple base package
+MakeBinPkg("--pkg $RefSamplePath\\$BASE --binpkg $RefSamplePath\\$BINBASE");
+MakeBinPkg("--pkg $RefSamplePath\\$UPGRADE --binpkg $RefSamplePath\\$BINUPGRADE");
+MakeBinPkg("--pkg $RefSamplePath\\$INVALID --binpkg $RefSamplePath\\$BININVALID");
+MakeBinPkg("--pkg $RefDataPath\\$BASE3 --binpkg $RefDataPath\\$BINBASE3");
+MakeBinPkg("--pkg $RefDataPath\\$INVALID2 --binpkg $RefDataPath\\$BININVALID2");
+MakeBinPkg("--pkg $RefDataPath\\$INVALID3 --binpkg $RefDataPath\\$BININVALID3");
+MakeBinPkg("--pkg $RefDataPath\\$INVALID4 --binpkg $RefDataPath\\$BININVALID4");
+MakeBinPkg("--pkg $RefDataPath\\$INVALID5 --binpkg $RefDataPath\\$BININVALID5");
+MakeBinPkg("--pkg $RefDataPath\\$INVALID6 --binpkg $RefDataPath\\$BININVALID6");
+MakeBinPkg("--pkg $RefDataPath\\$INVALID7 --binpkg $RefDataPath\\$BININVALID7");
+MakeBinPkg("--pkg $RefDataPath\\$INVALID8 --binpkg $RefDataPath\\$BININVALID8");
+MakeBinPkg("--pkg $RefDataPath\\$INVALID9 --binpkg $RefDataPath\\$BININVALID9");
+MakeBinPkg("--pkg $RefDataPath\\$INVALID10 --binpkg $RefDataPath\\$BININVALID10");
+MakeBinPkg("--pkg $RefDataPath\\$INVALID11 --binpkg $RefDataPath\\$BININVALID11");
+MakeBinPkg("--pkg $RefDataPath\\$INVALID12 --binpkg $RefDataPath\\$BININVALID12");
+MakeBinPkg("--pkg $RefDataPath\\$FILEINUSETEST --binpkg $RefDataPath\\$BINFILEINUSETEST");
+print "Generating embedded packages...\n";
+
+# Create a compound package that consists of 3 embedded packages of the same type
+MakeBinPkg("perl $RefSamplePath\\makebinpkg.pl --pkg $RefDataPath\\$BASE2 --emb $RefSamplePath\\$BINBASE --emb $RefDataPath\\$BINBASE3 --binpkg $RefDataPath\\$BINHOMOGENEOUSPARENT");
+# Create a compound package that consists of 3 embedded packages of mixed types
+MakeBinPkg("perl $RefSamplePath\\makebinpkg.pl --pkg $RefSamplePath\\$BASE --emb $SifTestDataPath\\$GRANDCHILD --binpkg $IntegTestDataPath\\$BINCHILD");
+MakeBinPkg("perl $RefSamplePath\\makebinpkg.pl --pkg $RefDataPath\\$BASE2 --emb $IntegTestDataPath\\$BINCHILD --emb $BUILDDIR\\$SISCHILD --emb $RefDataPath\\$BINBASE3 --binpkg $IntegTestDataPath\\$BINPARENT");
+
+# Copy the generated package onto the Z drive
+# move reference packages
+my $CURREFDATADIR = '';
+if (lc($PLATFORM) ne "armv5")
+	{
+	$CURREFDATADIR = $REFDATADIR;
+	}
+else
+	{
+	$CURREFDATADIR = $REFARMV5DATADIR;
+	}
+unlink "$CURREFDATADIR\\$BINBASE";
+unlink "$CURREFDATADIR\\$BINUPGRADE";
+unlink "$CURREFDATADIR\\$BININVALID";
+unlink "$CURREFDATADIR\\$BININVALID2";
+mkdir "$CURREFDATADIR" unless -d "$CURREFDATADIR";
+move("$RefSamplePath\\$BINBASE", "$CURREFDATADIR\\$BINBASE");
+move("$RefSamplePath\\$BINUPGRADE", "$CURREFDATADIR\\$BINUPGRADE");
+move("$RefSamplePath\\$BININVALID", "$CURREFDATADIR\\$BININVALID");
+move("$RefDataPath\\$BINBASE3", "$CURREFDATADIR\\$BINBASE3");
+move("$RefDataPath\\$BININVALID2", "$CURREFDATADIR\\$BININVALID2");
+move("$RefDataPath\\$BININVALID3", "$CURREFDATADIR\\$BININVALID3");
+move("$RefDataPath\\$BININVALID4", "$CURREFDATADIR\\$BININVALID4");
+move("$RefDataPath\\$BININVALID5", "$CURREFDATADIR\\$BININVALID5");
+move("$RefDataPath\\$BININVALID6", "$CURREFDATADIR\\$BININVALID6");
+move("$RefDataPath\\$BININVALID7", "$CURREFDATADIR\\$BININVALID7");
+move("$RefDataPath\\$BININVALID8", "$CURREFDATADIR\\$BININVALID8");
+move("$RefDataPath\\$BININVALID9", "$CURREFDATADIR\\$BININVALID9");
+move("$RefDataPath\\$BININVALID10", "$CURREFDATADIR\\$BININVALID10");
+move("$RefDataPath\\$BININVALID11", "$CURREFDATADIR\\$BININVALID11");
+move("$RefDataPath\\$BININVALID12", "$CURREFDATADIR\\$BININVALID12");
+move("$RefDataPath\\$BINHOMOGENEOUSPARENT", "$CURREFDATADIR\\$BINHOMOGENEOUSPARENT");
+move("$RefDataPath\\$BINFILEINUSETEST", "$CURREFDATADIR\\$BINFILEINUSETEST");
+
+# move integration packages
+my $CURDATADIR = '';
+if (lc($PLATFORM) ne "armv5")
+	{
+	$CURDATADIR = $DATADIR;
+	}
+else
+	{
+	$CURDATADIR = $ARMV5DATADIR;
+	}
+
+unlink "$CURDATADIR\\$BINPARENT";
+mkdir "$CURDATADIR" unless -d "$CURDATADIR";
+move("$IntegTestDataPath\\$BINPARENT", "$CURDATADIR\\$BINPARENT");
+
+unlink "$IntegTestDataPath\\$BINCHILD";
+
+# Read the contents of a file into a string and return it
+sub MakeBinPkg ($) {
+	my ($args) = @_;
+	my $cmd = "perl $RefSamplePath\\makebinpkg.pl $args";
+	`$cmd`;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/createsisfiles.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,210 @@
+@rem
+@rem Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+@echo off
+
+echo This script creates SIS files for SIF integration tests
+
+set PLATFORM=%1
+set CFG=%2
+
+set BUILDDIR=\epoc32\release\%PLATFORM%\%CFG%
+set PKGDIR=%SECURITYSOURCEDIR%\installationservices\swinstallationfw\test\tusif\scripts\data
+set DATADIR=%BUILDDIR%\z\tusif\tsif\data
+set ARMV5DATADIR=\epoc32\data\z\tusif\tsif\data
+set CERTDIR=%SECURITYSOURCEDIR%\installationservices\switestfw\testcertificates\usif
+
+set BASE=sifintegrationtestbase
+set UPGRADE=sifintegrationtestupgrade
+set INVALIDUPGRADE=sifintegrationtestinvalidupgrade
+set NOCAPSBASE=sifintegrationtestnocaps
+set INVALIDINSTALL=sifselfsignedwithprotecteduid
+set USERCAPSBASE=sifintegusercapsbase
+set COMPONENTINFOINTEGRATION=sifcomponentinfointegration
+set COMPONENTINFOINTEGRATIONPU=sifcomponentinfointegpu
+set COMPONENTINFOINTEGRATIONSP=sifcomponentinfointegsp
+set EMBEDDINGOUTERBASE=embeddingouterbase
+set EMBEDDEDINNERBASE1=embeddedinnerbase1
+set EMBEDDEDINNERBASE11=embeddedinnerbase11
+set EMBEDDEDINNERBASE2=embeddedinnerbase2
+set EMPTYNAMEANDVENDOR=emptynameandvendor
+set EMBEDDINGBASEWITHEXE=embeddingbasewithexe
+set EMBEDDEDBASEWITHUSERCAPSEXE=embeddedbasewithusercapsexe
+set EMBEDDEDBASEWITHEXE=sifintegrationtestbase
+set EMBEDDINGBASEWITHTEXT=embeddingbasewithtextandinnerwithexe
+set COMPONENTINFOWITHMULTIPLEFILES=sifintegrationtestmultiplefiles
+set COMPONENTINFOWITHEXTENSIONINDIFFERENTCASE=sifintegrationtestextensionindifferentcase
+set COMPONENTINFOWITHONLYDLL=sifintegrationtestwithonlydll
+set SUFFICIENTUSERCAPS=sifintegsufficientusercaps
+set BASEWITHDRIVEDIALOG=sifintegrationtestbasewithdrivedialog
+set UPGRADEWITHDRIVEDIALOG=sifintegrationtestupgradewithdrivedialog
+set EMBEDDEDINNERWITHUPGRADE=embeddedinnerwithupgrade
+set EMBEDDEDINNERWITHUPGRADEOUTERASBASEWITHDRIVEDIALOG=embeddedinnerwithupgradeouterasbasewithdrivedialog
+set DUMMYTEXT=dummy
+
+set CREATESISCMD=createsis create -pass usif
+set CREATESISEXISTINGCERTCMD=createsis create -key %CERTDIR%\root5ca_key.pem -cert %CERTDIR%\root5ca.pem
+
+rem Check if SIS files already exist
+if not exist %DATADIR%\%BASE%.sis goto generate_sis_files
+if not exist %DATADIR%\%UPGRADE%.sis goto generate_sis_files
+if not exist %DATADIR%\%INVALIDUPGRADE%.sis goto generate_sis_files
+if not exist %DATADIR%\%NOCAPSBASE%.sis goto generate_sis_files
+if not exist %DATADIR%\%INVALIDINSTALL%.sis goto generate_sis_files
+if not exist %DATADIR%\%USERCAPSBASE%.sis goto generate_sis_files
+if not exist %DATADIR%\%COMPONENTINFOINTEGRATION%.sis goto generate_sis_files
+if not exist %DATADIR%\%COMPONENTINFOINTEGRATIONPU%.sis goto generate_sis_files
+if not exist %DATADIR%\%COMPONENTINFOINTEGRATIONSP%.sis goto generate_sis_files
+if not exist %DATADIR%\%EMBEDDINGOUTERBASE%.sis goto generate_sis_files
+if not exist %DATADIR%\%EMPTYNAMEANDVENDOR%.sis goto generate_sis_files
+if not exist %DATADIR%\%EMBEDDINGBASEWITHEXE%.sis goto generate_sis_files
+if not exist %DATADIR%\%EMBEDDEDBASEWITHUSERCAPSEXE%.sis goto generate_sis_files
+if not exist %DATADIR%\%EMBEDDEDBASEWITHEXE%.sis goto generate_sis_files
+if not exist %DATADIR%\%EMBEDDINGBASEWITHTEXT%.sis goto generate_sis_files
+if not exist %DATADIR%\%COMPONENTINFOWITHMULTIPLEFILES%.sis goto generate_sis_files
+if not exist %DATADIR%\%COMPONENTINFOWITHEXTENSIONINDIFFERENTCASE%.sis goto generate_sis_files
+if not exist %DATADIR%\%COMPONENTINFOWITHONLYDLL%.sis goto generate_sis_files
+if not exist %DATADIR%\%SUFFICIENTUSERCAPS%.sis goto generate_sis_files
+if not exist %DATADIR%\%BASEWITHDRIVEDIALOG%.sis goto generate_sis_files
+if not exist %DATADIR%\%UPGRADEWITHDRIVEDIALOG%.sis goto generate_sis_files
+if not exist %DATADIR%\%EMBEDDEDINNERWITHUPGRADE%.sis goto generate_sis_files
+if not exist %DATADIR%\%EMBEDDEDINNERWITHUPGRADEOUTERASBASEWITHDRIVEDIALOG%.sis goto generate_sis_files
+goto:eof
+
+:generate_sis_files
+
+rem Copy pkg files for createsis.exe
+copy /y %PKGDIR%\%BASE%.pkg %BUILDDIR%\%BASE%.pkg
+copy /y %PKGDIR%\%UPGRADE%.pkg %BUILDDIR%\%UPGRADE%.pkg
+copy /y %PKGDIR%\%INVALIDUPGRADE%.pkg %BUILDDIR%\%INVALIDUPGRADE%.pkg
+copy /y %PKGDIR%\%NOCAPSBASE%.pkg %BUILDDIR%\%NOCAPSBASE%.pkg
+copy /y %PKGDIR%\%INVALIDINSTALL%.pkg %BUILDDIR%\%INVALIDINSTALL%.pkg
+copy /y %PKGDIR%\%USERCAPSBASE%.pkg %BUILDDIR%\%USERCAPSBASE%.pkg
+copy /y %PKGDIR%\%EMBEDDINGBASEWITHEXE%.pkg %BUILDDIR%\%EMBEDDINGBASEWITHEXE%.pkg
+copy /y %PKGDIR%\%EMBEDDEDBASEWITHUSERCAPSEXE%.pkg %BUILDDIR%\%EMBEDDEDBASEWITHUSERCAPSEXE%.pkg
+copy /y %PKGDIR%\%EMBEDDEDBASEWITHEXE%.pkg %BUILDDIR%\%EMBEDDEDBASEWITHEXE%.pkg
+copy /y %PKGDIR%\%DUMMYTEXT%.txt %BUILDDIR%\%DUMMYTEXT%.txt
+copy /y %PKGDIR%\%EMBEDDINGBASEWITHTEXT%.pkg %BUILDDIR%\%EMBEDDINGBASEWITHTEXT%.pkg
+
+copy /y %PKGDIR%\%COMPONENTINFOWITHMULTIPLEFILES%.pkg %BUILDDIR%\%COMPONENTINFOWITHMULTIPLEFILES%.pkg
+copy /y %PKGDIR%\%COMPONENTINFOWITHEXTENSIONINDIFFERENTCASE%.pkg %BUILDDIR%\%COMPONENTINFOWITHEXTENSIONINDIFFERENTCASE%.pkg
+copy /y %PKGDIR%\%COMPONENTINFOWITHONLYDLL%.pkg %BUILDDIR%\%COMPONENTINFOWITHONLYDLL%.pkg
+copy /y %PKGDIR%\%SUFFICIENTUSERCAPS%.pkg %BUILDDIR%\%SUFFICIENTUSERCAPS%.pkg
+copy /y %PKGDIR%\%BASEWITHDRIVEDIALOG%.pkg %BUILDDIR%\%BASEWITHDRIVEDIALOG%.pkg
+copy /y %PKGDIR%\%UPGRADEWITHDRIVEDIALOG%.pkg %BUILDDIR%\%UPGRADEWITHDRIVEDIALOG%.pkg
+copy /y %PKGDIR%\%EMBEDDEDINNERWITHUPGRADE%.pkg %BUILDDIR%\%EMBEDDEDINNERWITHUPGRADE%.pkg
+copy /y %PKGDIR%\%EMBEDDEDINNERWITHUPGRADEOUTERASBASEWITHDRIVEDIALOG%.pkg %BUILDDIR%\%EMBEDDEDINNERWITHUPGRADEOUTERASBASEWITHDRIVEDIALOG%.pkg
+
+pushd %PKGDIR%
+rem These package uses local files in the package directory
+call %CREATESISEXISTINGCERTCMD% %COMPONENTINFOINTEGRATION%.pkg
+move %COMPONENTINFOINTEGRATION%.sis %BUILDDIR%
+call %CREATESISEXISTINGCERTCMD% %COMPONENTINFOINTEGRATIONPU%.pkg
+move %COMPONENTINFOINTEGRATIONPU%.sis %BUILDDIR%
+call %CREATESISEXISTINGCERTCMD% %COMPONENTINFOINTEGRATIONSP%.pkg
+move %COMPONENTINFOINTEGRATIONSP%.sis %BUILDDIR%
+call %CREATESISEXISTINGCERTCMD% %EMPTYNAMEANDVENDOR%.pkg
+move %EMPTYNAMEANDVENDOR%.sis %BUILDDIR%
+
+rem construct the embedded ackages inner to outer.
+call %CREATESISEXISTINGCERTCMD% %EMBEDDEDINNERBASE2%.pkg
+call %CREATESISEXISTINGCERTCMD% %EMBEDDEDINNERBASE1%.pkg
+call %CREATESISEXISTINGCERTCMD% %EMBEDDEDINNERBASE11%.pkg
+call %CREATESISEXISTINGCERTCMD% %EMBEDDINGOUTERBASE%.pkg
+move %EMBEDDINGOUTERBASE%.sis %BUILDDIR%
+
+rem Make sure that we leave no certificates after createsis, otherwise checklocationofcertificates test will return an error
+del /Q *.cer
+
+popd
+rem Go to build directory, as the packages below use dynamically built executables
+pushd %BUILDDIR%
+
+rem Generate SIS files for SIF integration tests 
+rem We avoid using temporary ceritificates for installed SIS files, as their FROM date may be later than the current date/time in the testing env.
+call %CREATESISEXISTINGCERTCMD% %BASE%.pkg
+call %CREATESISEXISTINGCERTCMD% %UPGRADE%.pkg
+call %CREATESISEXISTINGCERTCMD% %INVALIDUPGRADE%.pkg
+call %CREATESISCMD% %NOCAPSBASE%.pkg
+call %CREATESISCMD% %INVALIDINSTALL%.pkg
+call %CREATESISEXISTINGCERTCMD% %USERCAPSBASE%.pkg
+call %CREATESISEXISTINGCERTCMD% %EMBEDDEDBASEWITHUSERCAPSEXE%.pkg
+call %CREATESISEXISTINGCERTCMD% %EMBEDDINGBASEWITHEXE%.pkg
+call %CREATESISEXISTINGCERTCMD% %EMBEDDINGBASEWITHTEXT%.pkg
+call %CREATESISEXISTINGCERTCMD% %COMPONENTINFOWITHMULTIPLEFILES%.pkg
+call %CREATESISEXISTINGCERTCMD% %COMPONENTINFOWITHEXTENSIONINDIFFERENTCASE%.pkg
+call %CREATESISEXISTINGCERTCMD% %COMPONENTINFOWITHONLYDLL%.pkg
+call %CREATESISEXISTINGCERTCMD% %SUFFICIENTUSERCAPS%.pkg
+call %CREATESISEXISTINGCERTCMD% %BASEWITHDRIVEDIALOG%.pkg
+call %CREATESISEXISTINGCERTCMD% %UPGRADEWITHDRIVEDIALOG%.pkg
+call %CREATESISEXISTINGCERTCMD% %EMBEDDEDINNERWITHUPGRADE%.pkg
+call %CREATESISEXISTINGCERTCMD% %EMBEDDEDINNERWITHUPGRADEOUTERASBASEWITHDRIVEDIALOG%.pkg
+
+rem Dynamically built executables are removed
+del sifintegsufficientusercaps.exe
+del sifintegusercapsbasepackage.exe
+
+rem Copy generated SIS files onto the Z drive
+if /i %PLATFORM% neq ARMV5 (
+copy /y %BASE%.sis %DATADIR%\%BASE%.sis
+copy /y %UPGRADE%.sis %DATADIR%\%UPGRADE%.sis
+copy /y %INVALIDUPGRADE%.sis %DATADIR%\%INVALIDUPGRADE%.sis
+copy /y %NOCAPSBASE%.sis %DATADIR%\%NOCAPSBASE%.sis
+copy /y %INVALIDINSTALL%.sis %DATADIR%\%INVALIDINSTALL%.sis
+copy /y %USERCAPSBASE%.sis %DATADIR%\%USERCAPSBASE%.sis
+copy /y %COMPONENTINFOINTEGRATION%.sis %DATADIR%\%COMPONENTINFOINTEGRATION%.sis
+copy /y %COMPONENTINFOINTEGRATIONPU%.sis %DATADIR%\%COMPONENTINFOINTEGRATIONPU%.sis
+copy /y %COMPONENTINFOINTEGRATIONSP%.sis %DATADIR%\%COMPONENTINFOINTEGRATIONSP%.sis
+copy /y %EMBEDDINGOUTERBASE%.sis %DATADIR%\%EMBEDDINGOUTERBASE%.sis
+copy /y %EMBEDDEDBASEWITHUSERCAPSEXE%.sis %DATADIR%\%EMBEDDEDBASEWITHUSERCAPSEXE%.sis
+copy /y %EMPTYNAMEANDVENDOR%.sis %DATADIR%\%EMPTYNAMEANDVENDOR%.sis
+copy /y %EMBEDDINGBASEWITHEXE%.sis %DATADIR%\%EMBEDDINGBASEWITHEXE%.sis
+copy /y %EMBEDDINGBASEWITHTEXT%.sis %DATADIR%\%EMBEDDINGBASEWITHTEXT%.sis
+copy /y %COMPONENTINFOWITHMULTIPLEFILES%.sis %DATADIR%\%COMPONENTINFOWITHMULTIPLEFILES%.sis
+copy /y %COMPONENTINFOWITHEXTENSIONINDIFFERENTCASE%.sis %DATADIR%\%COMPONENTINFOWITHEXTENSIONINDIFFERENTCASE%.sis
+copy /y %COMPONENTINFOWITHONLYDLL%.sis %DATADIR%\%COMPONENTINFOWITHONLYDLL%.sis
+copy /y %SUFFICIENTUSERCAPS%.sis %DATADIR%\%SUFFICIENTUSERCAPS%.sis
+copy /y %BASEWITHDRIVEDIALOG%.sis %DATADIR%\%BASEWITHDRIVEDIALOG%.sis
+copy /y %UPGRADEWITHDRIVEDIALOG%.sis %DATADIR%\%UPGRADEWITHDRIVEDIALOG%.sis
+copy /y %EMBEDDEDINNERWITHUPGRADE%.sis %DATADIR%\%EMBEDDEDINNERWITHUPGRADE%.sis
+copy /y %EMBEDDEDINNERWITHUPGRADEOUTERASBASEWITHDRIVEDIALOG%.sis %DATADIR%\%EMBEDDEDINNERWITHUPGRADEOUTERASBASEWITHDRIVEDIALOG%.sis
+) else (
+mkdir %ARMV5DATADIR%
+copy /y %BASE%.sis %ARMV5DATADIR%\%BASE%.sis
+copy /y %UPGRADE%.sis %ARMV5DATADIR%\%UPGRADE%.sis
+copy /y %INVALIDUPGRADE%.sis %ARMV5DATADIR%\%INVALIDUPGRADE%.sis
+copy /y %NOCAPSBASE%.sis %ARMV5DATADIR%\%NOCAPSBASE%.sis
+copy /y %INVALIDINSTALL%.sis %ARMV5DATADIR%\%INVALIDINSTALL%.sis
+copy /y %USERCAPSBASE%.sis %ARMV5DATADIR%\%USERCAPSBASE%.sis
+copy /y %COMPONENTINFOINTEGRATION%.sis %DATADIR%\%COMPONENTINFOINTEGRATION%.sis
+copy /y %COMPONENTINFOINTEGRATIONPU%.sis %ARMV5DATADIR%\%COMPONENTINFOINTEGRATIONPU%.sis
+copy /y %COMPONENTINFOINTEGRATIONSP%.sis %ARMV5DATADIR%\%COMPONENTINFOINTEGRATIONSP%.sis
+copy /y %EMBEDDEDBASEWITHUSERCAPSEXE%.sis %DATADIR%\%EMBEDDEDBASEWITHUSERCAPSEXE%.sis
+copy /y %EMBEDDINGOUTERBASE%.sis %DATADIR%\%EMBEDDINGOUTERBASE%.sis
+copy /y %EMPTYNAMEANDVENDOR%.sis %DATADIR%\%EMPTYNAMEANDVENDOR%.sis
+copy /y %EMBEDDINGBASEWITHEXE%.sis %DATADIR%\%EMBEDDINGBASEWITHEXE%.sis
+copy /y %EMBEDDINGBASEWITHTEXT%.sis %DATADIR%\%EMBEDDINGBASEWITHTEXT%.sis
+copy /y %COMPONENTINFOWITHMULTIPLEFILES%.sis %DATADIR%\%COMPONENTINFOWITHMULTIPLEFILES%.sis
+copy /y %COMPONENTINFOWITHEXTENSIONINDIFFERENTCASE%.sis %DATADIR%\%COMPONENTINFOWITHEXTENSIONINDIFFERENTCASE%.sis
+copy /y %COMPONENTINFOWITHONLYDLL%.sis %DATADIR%\%COMPONENTINFOWITHONLYDLL%.sis
+copy /y %SUFFICIENTUSERCAPS%.sis %DATADIR%\%SUFFICIENTUSERCAPS%.sis
+copy /y %BASEWITHDRIVEDIALOG%.sis %DATADIR%\%BASEWITHDRIVEDIALOG%.sis
+copy /y %UPGRADEWITHDRIVEDIALOG%.sis %DATADIR%\%UPGRADEWITHDRIVEDIALOG%.sis
+copy /y %EMBEDDEDINNERWITHUPGRADE%.sis %DATADIR%\%EMBEDDEDINNERWITHUPGRADE%.sis
+copy /y %EMBEDDEDINNERWITHUPGRADEOUTERASBASEWITHDRIVEDIALOG%.sis %DATADIR%\%EMBEDDEDINNERWITHUPGRADEOUTERASBASEWITHDRIVEDIALOG%.sis
+)
+
+popd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/sifgetcompapparcinfotest.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* sifgetcompinfotest1.mmp for usif test 
+*
+*/
+ 
+
+TARGET			sifgetcompapparcinfotest.exe
+TARGETTYPE		exe
+CAPABILITY 		All -Tcb
+
+UID			0x10000007 0x80286FE1
+VENDORID		0x0
+
+SOURCEPATH		../source
+SOURCE			sifintegusercapsbasepackage.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+START RESOURCE	sifgetcompapparcinfotest_loc.rss
+HEADER
+TARGETPATH		tusif/tsif/data/sifgetcompapparcinfotest 
+END
+
+// Application exe registration resource file
+resource  	sifgetcompapparcinfotest_reg.rss
+start resource 	sifgetcompapparcinfotest_reg.rss
+targetpath 	tusif/tsif/data/sifgetcompapparcinfotest
+end
+
+
+// Icons for UK language version
+START BITMAP	sifgetcompapparcinfotest_01.mbm
+TARGETPATH		tusif/tsif/data/sifgetcompapparcinfotest
+SOURCEPATH		../source
+SOURCE			c8,1 icon3M.BMP
+END
+
+LIBRARY			euser.lib
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/sifgetcompapparcinfotestmultilang.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sifgetcompapparcinfotestmultilang.mmp for usif test 
+*
+*/
+
+TARGET			sifgetcompapparcinfotestmultilang.exe
+TARGETTYPE		exe
+CAPABILITY 		All -Tcb
+
+UID			0x10000007 0x80286FE2
+VENDORID		0x0
+
+SOURCEPATH		../source
+SOURCE			sifintegusercapsbasepackage.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+START RESOURCE	sifgetcompapparcinfotestmultilang_loc.rss
+HEADER
+TARGETPATH		tusif/tsif/data/sifgetcompapparcinfotestmultilang 
+LANG 01 03 04 24
+END
+
+// Application exe registration resource file
+resource  	sifgetcompapparcinfotestmultilang_reg.rss
+start resource 	sifgetcompapparcinfotestmultilang_reg.rss
+targetpath 	tusif/tsif/data/sifgetcompapparcinfotestmultilang
+end
+
+
+// Icons for UK language version
+START BITMAP	sifgetcompapparcinfotestmultilang_01.mbm
+TARGETPATH		tusif/tsif/data/sifgetcompapparcinfotestmultilang
+SOURCEPATH		../source
+SOURCE			c8,1 icon3M.BMP
+END
+
+// Icons for German language version
+START BITMAP	sifgetcompapparcinfotestmultilang_03.mbm
+TARGETPATH		tusif/tsif/data/sifgetcompapparcinfotestmultilang
+SOURCEPATH		../source
+SOURCE			c8,1 icon3M.BMP
+END
+
+// Icons for Spanish language version
+START BITMAP	sifgetcompapparcinfotestmultilang_04.mbm
+TARGETPATH		tusif/tsif/data/sifgetcompapparcinfotestmultilang
+SOURCEPATH		../source
+SOURCE			c8,1 icon3M.BMP 
+END
+
+// Icons for French International language version
+START BITMAP	sifgetcompapparcinfotestmultilang_24.mbm
+TARGETPATH		tusif/tsif/data/sifgetcompapparcinfotestmultilang
+SOURCEPATH		../source
+SOURCE			c8,1 icon3M.BMP
+END
+
+LIBRARY			euser.lib
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/sifgetcompinfotest1.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sifgetcompinfotest1.mmp for usif test
+*
+*/
+
+TARGET			sifgetcompinfotest1.exe
+TARGETTYPE		exe
+CAPABILITY 		All -Tcb
+
+UID			0x10000007 0x80286FE0
+VENDORID		0x0
+
+SOURCEPATH		../source
+SOURCE			sifintegusercapsbasepackage.cpp
+
+SYSTEMINCLUDE	/epoc32/include
+
+START RESOURCE	sifgetcompinfotest1_loc.rss
+HEADER
+TARGETPATH		tusif/tsif/data/sifgetcompinfotest1
+LANG 01 03 04 24	
+END
+
+// Application exe registration resource file
+resource  	sifgetcompinfotest1_reg.rss
+start resource 	sifgetcompinfotest1_reg.rss
+targetpath 	tusif/tsif/data/sifgetcompinfotest1
+end
+
+
+// Icons for UK language version
+START BITMAP	sifgetcompinfotest1_01.mbm
+TARGETPATH		tusif/tsif/data/sifgetcompinfotest1
+SOURCEPATH		../source
+SOURCE			c8,1 icon3M.BMP
+END
+
+// Icons for German language version
+START BITMAP	sifgetcompinfotest1_03.mbm
+TARGETPATH		tusif/tsif/data/sifgetcompinfotest1
+SOURCEPATH		../source
+SOURCE			c8,1 icon3M.BMP
+END
+
+// Icons for Spanish language version
+START BITMAP	sifgetcompinfotest1_04.mbm
+TARGETPATH		tusif/tsif/data/sifgetcompinfotest1
+SOURCEPATH		../source
+SOURCE			c8,1 icon3M.BMP 
+END
+
+// Icons for French International language version
+START BITMAP	sifgetcompinfotest1_24.mbm
+TARGETPATH		tusif/tsif/data/sifgetcompinfotest1
+SOURCEPATH		../source
+SOURCE			c8,1 icon3M.BMP
+END
+
+LIBRARY			euser.lib
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/sifintegrationtestbasepackage.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			sifIntegrationTestBase.exe
+TARGETTYPE		exe
+
+UID				0x10000007 0x80285DE0
+VENDORID		0x0
+
+SOURCEPATH		../source
+SOURCE			sifintegrationtestbasepackage.cpp
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/sifintegrationtestupgradepackage.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			sifIntegrationTestUpgrade.exe
+TARGETTYPE		exe
+
+UID				0x10000007 0x80285DE0
+VENDORID		0x0
+
+SOURCEPATH		../source
+SOURCE			sifintegrationtestupgradepackage.cpp
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/sifintegsufficientusercaps.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2008 - 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+TARGET			sifintegsufficientusercaps.exe
+TARGETTYPE		exe
+
+UID				0x10000007 0x80285DE0
+VENDORID		0x0
+
+SOURCEPATH		../source
+SOURCE			sifintegsufficientusercaps.cpp
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib
+SMPSAFE
+CAPABILITY ReadDeviceData WriteDeviceData
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/sifintegusercapsbasepackage.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			sifintegusercapsbasepackage.exe
+TARGETTYPE		exe
+CAPABILITY 		ReadUserData WriteUserData
+
+UID				0x10000007 0x80285DE0
+VENDORID		0x0
+
+SOURCEPATH		../source
+SOURCE			sifintegusercapsbasepackage.cpp
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/siftest.makefile	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,42 @@
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+# siftest.amkefile is an extended test makefile which generates
+# self-signed SIS files for the USIF integration tests
+
+
+do_nothing:
+	rem do nothing
+
+#
+# The targets invoked by abld...
+#
+
+MAKMAKE : do_nothing
+FREEZE : do_nothing
+LIB : do_nothing
+RESOURCE : do_nothing
+CLEANLIB : do_nothing
+BLD : do_nothing
+SAVESPACE : do_nothing
+CLEAN : do_nothing
+RELEASABLES : do_nothing
+
+FINAL : 
+	echo ***************************************************************
+	echo maketestsis - Running createsisfiles.bat for $(PLATFORM) $(CFG)
+	echo ***************************************************************
+	createsisfiles.bat $(PLATFORM) $(CFG)
+	perl createleesisfiles.pl $(PLATFORM) $(CFG)
+	perl createrefbinfiles.pl $(PLATFORM) $(CFG)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/siftestintegrationlockfile.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// siftestintegrationlockfile.mmp
+//
+
+TARGET        siftestintegrationlockfile.exe
+TARGETTYPE    exe
+UID           0x0 0x10285BBF
+VENDORID 0x0
+
+SOURCEPATH    ../source/testexes
+SOURCE        siftestintegrationlockfile.cpp
+
+USERINCLUDE   .
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY       euser.lib bafl.lib efsrv.lib
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/tsif.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			tusifsuite.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x10285BCC
+
+CAPABILITY		ReadUserData TrustedUI writeDeviceData
+
+//Please add any change under here
+SOURCEPATH		../source
+SOURCE			tsifsuiteserver.cpp
+SOURCE			tsifsuitestepbase.cpp
+SOURCE			tsifoperationstep.cpp
+SOURCE			tsifcommonverificationstep.cpp
+SOURCE			tsifgenericbrowserinstallstep.cpp
+SOURCE			tsifcommonunitteststep.cpp
+SOURCE			tsifnotifierteststep.cpp
+
+USERINCLUDE		../source
+USERINCLUDE		../../../../swcomponentregistry/inc_private
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+//Please add your system include under here. 
+LIBRARY			euser.lib
+LIBRARY			efsrv.lib
+LIBRARY			testexecuteutils.lib 
+LIBRARY			testexecutelogclient.lib
+LIBRARY			scsclient.lib
+
+//Please add your libraries under here. For example:
+LIBRARY			sif.lib estor.lib apgrfx.lib apparc.lib sifnotification.lib
+
+LIBRARY			scrclient.lib sisregistryclient.lib scrdatabase.lib oomtestbase.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/group/tsifpkgrec.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Mime type recogniser for SIF test package type
+*
+*/
+
+
+/**
+ @file
+*/
+TARGET			tsifpkgrec.dll
+
+CAPABILITY		TrustedUI ProtServ
+
+TARGETTYPE		PLUGIN
+UID				0x10009D8D 0x102866F0
+VENDORID 		0x70000001
+
+SOURCEPATH		../source
+SOURCE			tsifpkgrec.cpp
+
+START RESOURCE	102866F0.rss
+TARGET			tsifpkgrec.rsc
+END
+
+USERINCLUDE		../source
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib apmime.lib efsrv.lib
+
+START WINS
+BASEADDRESS		0x44700000
+END
+
+START MARM
+END
+SMPSAFE
Binary file installationservices/swinstallationfw/test/tusif/scripts/data/Corrupt_reg.rsc has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/dummy.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+Just a dummy test file. I'm used for component info tests - if you'll change a byte here you'll have to update quite a few tests, so do it only if you feel creative.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/dummyAugmentation.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+Just a dummy augmentation test file. I'm used for component info tests - if you'll change a byte here you'll have to update quite a few tests, so do it only if you feel creative.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/dummyUpgrade.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+Just a dummy upgrade test file. I'm used for component info tests - if you'll change a byte here you'll have to update quite a few tests, so do it only if you feel creative.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/embeddedbasewithusercapsexe.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Embedded Base With User Caps EXE"}, (0x80706056), 1, 0, 0, TYPE=SA
+
+%{"Security and Data Privacy"}
+:"Security and Data Privacy"
+
+;Executable file with ReadUserData and WriteUserData (User grantable) capbilities enabled to selected drive.
+"sifintegusercapsbasepackage.exe"-"c:\sys\bin\sifintegusercapsbasepackage.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/embeddedinnerbase1.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Embedded Inner Base-1"}, (0x80706051), 1, 0, 0, TYPE=SA
+
+%{"Security and Data Privacy"}
+:"Security and Data Privacy"
+
+;Use a text file - using an executable file can break tests, as we compare installed size and executable's size can change easily
+"dummyupgrade.txt"-"c:\embeddedinnerbase1\dummy.txt", FF
+
+;embedded
+@"embeddedinnerbase2.sis",(0x80706052)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/embeddedinnerbase11.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Embedded Inner Base-11"}, (0x80706053), 1, 0, 0, TYPE=SA
+
+%{"Security and Data Privacy"}
+:"Security and Data Privacy"
+
+;Use a text file - using an executable file can break tests, as we compare installed size and executable's size can change easily
+"dummy.txt"-"c:\embeddedinnerbase11\dummy.txt", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/embeddedinnerbase2.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Embedded Inner Base-2"}, (0x80706052), 1, 0, 0, TYPE=SA
+
+%{"Security and Data Privacy"}
+:"Security and Data Privacy"
+
+;Use a text file - using an executable file can break tests, as we compare installed size and executable's size can change easily
+"dummyaugmentation.txt"-"c:\embeddedinnerbase2\dummy.txt", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/embeddedinnerwithupgrade.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Embedding Base With EXE"}, (0x80534946), 1, 0, 0, TYPE=SA
+
+%{"Security and Data Privacy"}
+:"Security and Data Privacy"
+
+;Use a text file 
+"dummy.txt"-"c:\dummy.txt", FF
+
+;embedded
+@"sifintegrationtestupgradewithdrivedialog.sis",(0x80534946)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/embeddedinnerwithupgradeouterasbasewithdrivedialog.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Embedding Base With EXE"}, (0x80534946), 1, 0, 0, TYPE=SA
+
+%{"Security and Data Privacy"}
+:"Security and Data Privacy"
+
+;Use a text file 
+"dummy.txt"-"!:\dummy.txt", FF
+
+;embedded
+@"sifintegrationtestupgradewithdrivedialog.sis",(0x80534946)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/embeddingbasewithexe.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Embedding Base With EXE"}, (0x80706055), 1, 0, 0, TYPE=SA
+
+%{"Security and Data Privacy"}
+:"Security and Data Privacy"
+
+;Executable file with out any user grantable capability to selected drive.
+"sifIntegrationTestBase.exe"-"c:\sys\bin\sifIntegrationTest.exe", FF
+
+;embedded
+@"embeddedbasewithusercapsexe.sis",(0x80706056)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/embeddingbasewithtextandinnerwithexe.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Embedding Base With EXE"}, (0x80706055), 1, 0, 0, TYPE=SA
+
+%{"Security and Data Privacy"}
+:"Security and Data Privacy"
+
+;Use a text file 
+"dummy.txt"-"c:\dummy.txt", FF
+
+;embedded
+@"sifintegrationtestbase.sis",(0x80534946)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/embeddingouterbase.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Embedding Outer Base"}, (0x80706050), 1, 0, 0, TYPE=SA
+
+%{"Security and Data Privacy"}
+:"Security and Data Privacy"
+
+;Use a text file - using an executable file can break tests, as we compare installed size and executable's size can change easily
+"dummy.txt"-"c:\embeddingouterbase\dummy.txt", FF
+
+;embedded
+@"embeddedinnerbase1.sis",(0x80706051)
+
+@"embeddedinnerbase11.sis",(0x80706053)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/emptynameandvendor.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{""}, (0x80706054), 1, 0, 0, TYPE=SA
+
+%{""}
+:""
+
+;Use a text file - using an executable file can break tests, as we compare installed size and executable's size can change easily
+"dummy.txt"-"c:\dummy.txt", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifcomponentinfointegpu.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Component Info Integration Test"}, (0x80545946), 2, 0, 0, TYPE=PU
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Use a text file - using an executable file can break tests, as we compare installed size and executable's size can change easily
+"dummyUpgrade.txt"-"!:\dummyUpgrade.txt", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifcomponentinfointegration.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Component Info Integration Test"}, (0x80545946), 1, 0, 0, TYPE=SA
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Use a text file - using an executable file can break tests, as we compare installed size and executable's size can change easily
+"dummy.txt"-"c:\dummy.txt", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifcomponentinfointegsp.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Component Info Integration Test Patch"}, (0x80545946), 3, 0, 0, TYPE=SP
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Use a text file - using an executable file can break tests, as we compare installed size and executable's size can change easily
+"dummyAugmentation.txt"-"c:\dummyAugmentation.txt", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotest.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN
+
+; List of localised vendor names.
+%{"Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English
+#{"sifgetcompinfotest_EN"}, (0x88001102), 1,0,0
+
+
+; Language-neutral files to be installed
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotest.exe"-"!:\sys\bin\sifgetcompapparcinfotest.exe"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_reg.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotest_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_loc.rsc"		-"!:\resource\apps\sifgetcompapparcinfotest_loc.rsc"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotest_01.mbm"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotest_CorruptRsc.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN
+
+; List of localised vendor names.
+%{"Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English
+#{"sifgetcompinfotestCorruptRsc_EN"}, (0x88001109), 1,0,0
+
+
+; Language-neutral files to be installed
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotest.exe"-"!:\sys\bin\sifgetcompapparcinfotest.exe"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\corrupt_reg.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotest_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_loc.rsc"		-"!:\resource\apps\sifgetcompapparcinfotest_loc.rsc"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotest_01.mbm"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotest_nolocale.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,39 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN
+
+; List of localised vendor names.
+%{"Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English
+#{"sifgetcompinfotestnolocale_EN"}, (0x88001112), 1,0,0
+
+
+; Language-neutral files to be installed
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotest.exe"-"!:\sys\bin\sifgetcompapparcinfotest.exe"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_reg.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotest_reg.rsc"
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestembedded_innerwithdifficon.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN
+
+; List of localised vendor names.
+%{"Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English
+#{"sifgetcompinfotestembedded_innerwithdifficon_EN"}, (0x88001110), 1,0,0
+
+
+; Language-neutral files to be installed
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotest.exe"-"!:\sys\bin\sifgetcompapparcinfotest.exe"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_reg.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotest_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_loc.rsc"		-"!:\resource\apps\sifgetcompapparcinfotest_loc.rsc"
+
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotest_01.mbm"
+
+;An embedded sis file
+@"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang.sis",(0x88001103)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestmultiapp.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,59 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE,SP,FR
+
+; List of localised vendor names.
+%{"Symbian Software Ltd", "Symbian Software Ltd","Symbian Software Ltd","Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"sifgetcompapparcinfotestmultiapp_EN", "sifgetcompapparcinfotestmultiapp_GE", "sifgetcompapparcinfotestmultiapp_SP", "sifgetcompapparcinfotestmultiapp_FR"}, (0x88001108), 1,0,0
+
+
+; Language-neutral files to be installed for first app
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotestmultilang.exe"-"!:\sys\bin\sifgetcompapparcinfotestmultilang.exe"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_reg.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotestmultilang_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r01"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r01"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r03"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r03"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r04"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r04"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r24"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r24"
+
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_01.mbm"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_03.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_03.mbm"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_04.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_04.mbm"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_24.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_24.mbm"
+
+
+; Language-neutral files to be installed for second app
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotest.exe"-"!:\sys\bin\sifgetcompapparcinfotest.exe"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_reg.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotest_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_loc.rsc"		-"!:\resource\apps\sifgetcompapparcinfotest_loc.rsc"
+
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotest_01.mbm"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestmultiapp_OneAppWithNonApparcRsc.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,59 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE,SP,FR
+
+; List of localised vendor names.
+%{"Symbian Software Ltd", "Symbian Software Ltd","Symbian Software Ltd","Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"sifgetcompapparcinfotestmultiappOneAppCorrupt_EN", "sifgetcompapparcinfotestmultiappOneAppCorrupt_GE", "sifgetcompapparcinfotestmultiappOneAppCorrupt_SP", "sifgetcompapparcinfotestmultiappOneAppCorrupt_FR"}, (0x88001107), 1,0,0
+
+
+; Language-neutral files to be installed for first app
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotestmultilang.exe"-"!:\sys\bin\sifgetcompapparcinfotestmultilang.exe"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_reg.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotestmultilang_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r01"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r01"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r03"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r03"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r04"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r04"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r24"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r24"
+
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_01.mbm"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_03.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_03.mbm"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_04.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_04.mbm"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_24.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_24.mbm"
+
+
+; Language-neutral files to be installed for second app
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotest.exe"-"!:\sys\bin\sifgetcompapparcinfotest.exe"
+"\epoc32\<ZDRIVEMIDPATH>\z\resource\plugins\testnonnativeplugin2.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotest_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_loc.rsc"		-"!:\resource\apps\sifgetcompapparcinfotest_loc.rsc"
+
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotest_01.mbm"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestmultifiles.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN
+
+; List of localised vendor names.
+%{"Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English
+#{"sifgetcompinfotestmultifiles_EN"}, (0x88001104), 1,0,0
+
+
+; Language-neutral files to be installed
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotest.exe"-"!:\sys\bin\sifgetcompapparcinfotest.exe"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_reg.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotest_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_loc.rsc"		-"!:\resource\apps\sifgetcompapparcinfotest_loc.rsc"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotest_01.mbm"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tswtype\data\swtypereginfo.xml"-"c:\resource\usif\leestore\77534946.xml", FF
+
+"\epoc32\<BUILDMIDPATH>\testnonnativeplugin2.dll"-"c:\sys\bin\testnonnativeplugin2.dll", FF
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestmultifiles_largeandsmallextn.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN
+
+; List of localised vendor names.
+%{"Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English
+#{"sifgetcompinfotestmultifiles_EN"}, (0x88001104), 1,0,0
+
+
+; Language-neutral files to be installed
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotest.exe"-"!:\sys\bin\sifgetcompapparcinfotest.exe"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_reg.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotest_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_loc.rsc"		-"!:\resource\apps\sifgetcompapparcinfotest_loc.rsc"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotest_01.mbm"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tswtype\data\swtypereginfo.xml"-"c:\resource\usif\leestore\77534946.xmlxml", FF
+
+"\epoc32\<BUILDMIDPATH>\testnonnativeplugin2.dll"-"c:\sys\bin\testnonnativeplugin2.dl", FF
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestmultilang.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE,SP,FR
+
+; List of localised vendor names.
+%{"Symbian Software Ltd", "Symbian Software Ltd","Symbian Software Ltd","Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"sifgetcompapparcinfotestmultilang_EN", "sifgetcompapparcinfotestmultilang_GE", "sifgetcompapparcinfotestmultilang_SP", "sifgetcompapparcinfotestmultilang_FR"}, (0x88001103), 1,0,0
+
+
+; Language-neutral files to be installed
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotestmultilang.exe"-"!:\sys\bin\sifgetcompapparcinfotestmultilang.exe"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_reg.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotestmultilang_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r01"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r01"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r03"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r03"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r04"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r04"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_loc.r24"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_loc.r24"
+
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_01.mbm"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_03.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_03.mbm"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_04.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_04.mbm"
+"\epoc32\data\z\tusif\tsif\data\sifgetcompapparcinfotestmultilang\sifgetcompapparcinfotestmultilang_24.mbm"		-"!:\resource\apps\sifgetcompapparcinfotestmultilang_24.mbm"
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestnonapparcpath.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN
+
+; List of localised vendor names.
+%{"Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English
+#{"sifgetcompinfotestnnapparcpath_EN"}, (0x88001106), 1,0,0
+
+
+; Language-neutral files to be installed
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotest.exe"-"!:\sys\bin\sifgetcompapparcinfotest.exe"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_reg.rsc" - "!:\private\10000001\import\apps\sifgetcompapparcinfotest_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_loc.rsc"		-"!:\resource\apps\sifgetcompapparcinfotest_loc.rsc"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotest_01.mbm"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tswtype\data\swtypereginfo.xml"-"c:\resource\usif\leestore\77534946.xml", FF
+
+"\epoc32\<BUILDMIDPATH>\testnonnativeplugin2.dll"-"c:\sys\bin\testnonnativeplugin2.dll", FF
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompapparcinfotestnonapparcrsc.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN
+
+; List of localised vendor names.
+%{"Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"sifgetcompinfotestnonapparcrsc_EN"}, (0x88001105), 1,0,0
+
+
+; Language-neutral files to be installed
+"\epoc32\<BUILDMIDPATH>\sifgetcompapparcinfotest.exe"-"!:\sys\bin\sifgetcompapparcinfotest.exe"
+"\epoc32\<ZDRIVEMIDPATH>\z\resource\plugins\testnonnativeplugin2.rsc" - "!:\private\10003a3f\import\apps\sifgetcompapparcinfotest_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_loc.rsc"		-"!:\resource\apps\sifgetcompapparcinfotest_loc.rsc"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompapparcinfotest\sifgetcompapparcinfotest_01.mbm"		-"!:\resource\apps\sifgetcompapparcinfotest_01.mbm"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tswtype\data\swtypereginfo.xml"-"c:\resource\usif\leestore\77534946.xml", FF
+
+"\epoc32\<BUILDMIDPATH>\testnonnativeplugin2.dll"-"c:\sys\bin\testnonnativeplugin2.dll", FF
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifgetcompinfotest1.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Install file for multi-lingual application
+; supporting two language variants.
+;
+
+; Languages - 
+&EN,GE
+
+; List of localised vendor names.
+%{"Symbian Software Ltd", "Symbian Software Ltd"}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd"
+
+; Installation header.
+; Two component names as we support English and German
+#{"sifgetcompinfotest1_EN", "sifgetcompinfotest1_GE"}, (0x88001102), 1,0,0
+
+
+; Language-neutral files to be installed
+"\epoc32\<BUILDMIDPATH>\sifgetcompinfotest1.exe"-"!:\sys\bin\sifgetcompinfotest1.exe"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompinfotest1\sifgetcompinfotest1_reg.rsc" - "!:\private\10003a3f\import\apps\sifgetcompinfotest1_reg.rsc"
+
+; Lists of language-specific resource files, of which only those files will be installed
+; which are supported by the device.
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompinfotest1\sifgetcompinfotest1_loc.r01"		-"!:\resource\apps\sifgetcompinfotest1_loc.r01"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompinfotest1\sifgetcompinfotest1_loc.r03"		-"!:\resource\apps\sifgetcompinfotest1_loc.r03"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompinfotest1\sifgetcompinfotest1_loc.r04"		-"!:\resource\apps\sifgetcompinfotest1_loc.r04"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompinfotest1\sifgetcompinfotest1_loc.r24"		-"!:\resource\apps\sifgetcompinfotest1_loc.r24"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompinfotest1\sifgetcompinfotest1_01.mbm"		-"!:\resource\apps\sifgetcompinfotest1_01.mbm"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompinfotest1\sifgetcompinfotest1_03.mbm"		-"!:\resource\apps\sifgetcompinfotest1_03.mbm"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompinfotest1\sifgetcompinfotest1_04.mbm"		-"!:\resource\apps\sifgetcompinfotest1_04.mbm"
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tsif\data\sifgetcompinfotest1\sifgetcompinfotest1_24.mbm"		-"!:\resource\apps\sifgetcompinfotest1_24.mbm"
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestbase.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Integration Test"}, (0x80534946), 1, 0, 0, TYPE=SA
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Ordinary file to selected drive. 
+"sifIntegrationTestBase.exe"-"c:\sys\bin\sifIntegrationTest.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestbasewithdrivedialog.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Integration Test"}, (0x80534946), 1, 0, 0, TYPE=SA
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Ordinary file to selected drive. 
+"sifIntegrationTestBase.exe"-"!:\sys\bin\sifIntegrationTest.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestextensionindifferentcase.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,30 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Integration Test"}, (0x80534946), 1, 0, 0, TYPE=SA
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+ 
+;Only used for Get component Info
+"sifIntegrationTestBase.exe"-"c:\sys\bin\sifIntegrationTest.eXe", FF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestinvalidupgrade.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Integration Test"}, (0x88534946), 2, 0, 0, TYPE=PU
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Ordinary file to selected drive. 
+"sifIntegrationTestUpgrade.exe"-"c:\sys\bin\sifIntegrationTest.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestmultiplefiles.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,30 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Integration Test"}, (0x80534946), 1, 0, 0, TYPE=SA
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Ordinary file to selected drive.
+"dummy.txt"-"c:\dummy.txt",FF 
+"sifIntegrationTestBase.exe"-"c:\sys\bin\sifIntegrationTest.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestnocaps.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif No Capability Test"}, (0x88534946), 1, 1, 1, TYPE=SA
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Ordinary file to selected drive. 
+"sifIntegrationTestUpgrade.exe"-"c:\sys\bin\sifIntegrationTest.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestupgrade.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Integration Test"}, (0x80534946), 2, 0, 0, TYPE=PU
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Ordinary file to selected drive. 
+"sifIntegrationTestUpgrade.exe"-"c:\sys\bin\sifIntegrationTest.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestupgradewithdrivedialog.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Integration Test"}, (0x80534946), 2, 0, 0, TYPE=PU
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Ordinary file to selected drive. 
+"sifIntegrationTestUpgrade.exe"-"!:\sys\bin\sifIntegrationTest.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifintegrationtestwithonlydll.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Integration Test"}, (0x80534946), 1, 0, 0, TYPE=SA
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Used for testing GetcomponentInfo only
+"tsifpkgrec.dll"-"c:\sys\bin\tsifpkgrec.dll", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifintegsufficientusercaps.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif Sufficient Caps"}, (0x88534947), 1, 0, 0, TYPE=SA
+
+; Language-specific vendor names
+%{"Installation Team"}
+
+; Unique, global vendor name
+:"Installation Team"
+
+;Ordinary file to selected drive. 
+"sifintegsufficientusercaps.exe"-"c:\sys\bin\sifintegsufficientusercaps.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifintegusercapsbase.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif User Caps Base"}, (0x88534947), 1, 0, 0, TYPE=SA
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Ordinary file to selected drive. 
+"sifintegusercapsbasepackage.exe"-"c:\sys\bin\sifintegusercapsbasepackage.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifselfsignedwithprotecteduid.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Self Signed With Protected Uid"}, (0x10285DE0), 1, 0, 0, TYPE=SA
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;Ordinary file to selected drive. 
+"sifIntegrationTestBase.exe"-"c:\sys\bin\sifIntegrationTest.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifswtypebase.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Sif LEE Integration Test"}, (0x77534946), 1, 0, 0, TYPE=SA
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;LEE registration file
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tswtype\data\swtypereginfo.xml"-"c:\resource\usif\leestore\77534946.xml", FF
+;SIF plug-in
+"\epoc32\<BUILDMIDPATH>\testnonnativeplugin2.dll"-"c:\sys\bin\testnonnativeplugin2.dll", FF
+"\epoc32\<ZDRIVEMIDPATH>\z\resource\plugins\testnonnativeplugin2.rsc"-"c:\resource\plugins\testnonnativeplugin2.rsc", FF
+;test package recognizer
+"\epoc32\<BUILDMIDPATH>\tsifpkgrec.dll"-"c:\sys\bin\tsifpkgrec.dll", FF
+"\epoc32\<ZDRIVEMIDPATH>\z\resource\plugins\tsifpkgrec.rsc"-"c:\resource\plugins\tsifpkgrec.rsc", FF
+;example LEE executable
+"\epoc32\<BUILDMIDPATH>\sifIntegrationTestBase.exe"-"c:\sys\bin\sifIntegrationTest.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/sifswtypeupgrade.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Languages
+&EN
+
+;Header
+#{"Upgrade Sif LEE Integration Test"}, (0x77534946), 1, 0, 0, TYPE=PU
+
+; Language-specific vendor names
+%{"Security Team"}
+
+; Unique, global vendor name
+:"Security Team"
+
+;LEE registration file
+"\epoc32\<ZDRIVEMIDPATH>\z\tusif\tswtype\data\swtypereginfo.xml"-"c:\resource\usif\leestore\77534946.xml", FF
+;SIF plug-in
+"\epoc32\<BUILDMIDPATH>\testnonnativeplugin2.dll"-"c:\sys\bin\testnonnativeplugin2.dll", FF
+"\epoc32\<ZDRIVEMIDPATH>\z\resource\plugins\testnonnativeplugin2.rsc"-"c:\resource\plugins\testnonnativeplugin2.rsc", FF
+;test package recognizer
+"\epoc32\<BUILDMIDPATH>\tsifpkgrec.dll"-"c:\sys\bin\tsifpkgrec.dll", FF
+"\epoc32\<ZDRIVEMIDPATH>\z\resource\plugins\tsifpkgrec.rsc"-"c:\resource\plugins\tsifpkgrec.rsc", FF
+;example LEE executable
+"\epoc32\<BUILDMIDPATH>\sifIntegrationTestUpgrade.exe"-"c:\sys\bin\sifIntegrationTest.exe", FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case05.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; Base package containing complete resource files for English and French
+;
+
+;Languages
+&EN, FR
+
+#{"swiappregintegration_case5A_EN","swiappregintegration_case5A_FR"},(0x80010009),1,1,1
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_FR"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\<BUILDMIDPATH>\swiappregintegration_case05.exe" - "!:\sys\bin\swiappregintegration_case05.exe"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case05_reg.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_loc.rsc" - "!:\resource\apps\swiappregintegration_case05_loc.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration.mbm"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case05_SU.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; Base package containing complete resource files for English and French
+;
+
+;Languages
+&EN, FR
+
+#{"swiappregintegration_case5B_EN","swiappregintegration_case5B_FR"},(0x80010009),1,1,1,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_FR"}
+
+;Unique Vendor name
+:"Vendor"
+"\epoc32\<BUILDMIDPATH>\swiappregintegration_case05.exe" - "!:\sys\bin\swiappregintegration_case05.exe"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_su_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case05_reg.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_loc.rsc" - "!:\resource\apps\swiappregintegration_case05_loc.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration.mbm"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_base.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; 
+;
+
+;Languages
+&EN
+
+#{"swiappregintegration_case6_EN"},(0x80010099),1,1,1
+
+;Localised Vendor name
+%{"Vendor_EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+
+
+
+"\epoc32\<BUILDMIDPATH>\swiappregintegration_case05.exe" - "!:\sys\bin\swiappregintegration_case05.exe"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case05_reg.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_loc.rsc" - "!:\resource\apps\swiappregintegration_case05_loc.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration.mbm"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_pu.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,36 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; 
+;
+
+;Languages
+&GE
+
+#{"swiappregintegration_case6_GR_PU"},(0x80010099),1,1,1, TYPE=PU
+
+;Localised Vendor name
+%{"Vendor_GR"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_loc.r03" - "!:\resource\apps\swiappregintegration_case05_loc.r03"
+
+"\epoc32\<BUILDMIDPATH>\swiappregintegration03.exe" - "!:\sys\bin\swiappregintegration03.exe"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration03\swiappregintegration03_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration03_reg.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration03\swiappregintegration03_loc.rsc" -"!:\resource\apps\swiappregintegration03_loc.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration03_rsc.mbm"
+
+@"swiappregintegration_case06_sp2_edited.sis", (0x80010099)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_sa.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; 
+;
+
+;Languages
+&EN
+
+#{"swiappregintegration_case6_EN_SA"},(0x80010099),1,1,1, TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN"}
+
+;Unique Vendor name
+:"Vendor"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case05_reg.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_loc.r01" - "!:\resource\apps\swiappregintegration_case05_loc.r01"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration.mbm"
+
+@"swiappregintegration_case06_sp1_edited.sis", (0x80010099)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_sp1.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,36 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; 
+;
+
+;Languages
+&FR
+
+#{"swiappregintegration_case6_FR_SP1"},(0x80010099),1,1,1, TYPE=SP
+
+;Localised Vendor name
+%{"Vendor_FR"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_loc.r02" - "!:\resource\apps\swiappregintegration_case05_loc.r02"
+
+"\epoc32\<BUILDMIDPATH>\swiappregintegration02.exe" - "!:\sys\bin\swiappregintegration02.exe"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.rsc" -"!:\resource\apps\swiappregintegration02_loc.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_rsc.mbm"
+
+@"swiappregintegration_case06_pu_edited.sis", (0x80010099)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_sp2.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; 
+;
+
+;Languages
+&EN
+
+#{"swiappregintegration_case6_EN_SP2"},(0x80010099),1,1,1, TYPE=SP
+
+;Localised Vendor name
+%{"Vendor_EN"}
+
+;Unique Vendor name
+:"Vendor"
+"\epoc32\<BUILDMIDPATH>\swiappregintegration_case06.exe" - "!:\sys\bin\swiappregintegration_case06.exe"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case06\swiappregintegration_case06_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case06\swiappregintegration_case06_loc.rsc" - "!:\resource\apps\swiappregintegration_case06_loc.rsc"
+
+@"swiappregintegration_case06_sp3_edited.sis", (0x80010099)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case06_sp3.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; 
+;
+
+;Languages
+&FR
+
+#{"swiappregintegration_case6_FR_SP3"},(0x80010099),1,1,1,TYPE=SP
+
+;Localised Vendor name
+%{"Vendor_FR"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_loc.r04" - "!:\resource\apps\swiappregintegration_case05_loc.r04"
+
+"\epoc32\<BUILDMIDPATH>\swiappregintegration_case07.exe" - "!:\sys\bin\swiappregintegration_case07.exe"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case07\swiappregintegration_case07_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case07_reg.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case07\swiappregintegration_case07_loc.rsc" - "!:\resource\apps\swiappregintegration_case07_loc.rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case08_sa1.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; 
+;
+
+;Languages
+&EN
+
+#{"swiappregintegration_case8_EN_SA1"},(0x80010099),1,1,1, TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN"}
+
+;Unique Vendor name
+:"Vendor"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swiappregintegration_case08_sa2.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; 
+;
+
+;Languages
+&EN
+
+#{"swiappregintegration_case8_EN_SA2"},(0x80010099),1,1,1, TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN"}
+
+;Unique Vendor name
+:"Vendor"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case05_reg.rsc"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_loc.r01" - "!:\resource\apps\swiappregintegration_case05_loc.r01"
+"\epoc32\<ZDRIVEMIDPATH>\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration.mbm"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swtype.dtd	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+<!ELEMENT LayeredExecutionEnvironments (softwareType+)>
+
+<!ELEMENT softwareType (localizedName*,mimeType+,sifPluginUid,CustomAcess*,launcherExecutable)>
+<!ATTLIST softwareType name CDATA #REQUIRED>
+
+<!ELEMENT localizedName (#PCDATA)>
+<!ATTLIST localizedName language CDATA #REQUIRED>
+
+<!ELEMENT sifPluginUid (#PCDATA)>
+
+<!ELEMENT CustomAcess (#PCDATA)>
+<!ATTLIST CustomAcess SecureId CDATA #REQUIRED AccessMode CDATA #REQUIRED>
+
+<!ELEMENT launcherExecutable (#PCDATA)>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swtypereginfo.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE LayeredExecutionEnvironments SYSTEM "swtype.dtd">
+<LayeredExecutionEnvironments>
+	<softwareType name="testSoftwareType">
+		<localizedName language="15">testSwTypeLoc15</localizedName>
+		<localizedName language="31">testSwTypeLoc31</localizedName>
+		<mimeType>binary/sif-testpkg</mimeType>
+		<sifPluginUid>102866EF</sifPluginUid>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testLauncherExecutable</launcherExecutable>		
+	</softwareType>
+</LayeredExecutionEnvironments>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/test.siftestpkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+Æëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèêÆëí^ÃSV‹t$WVèê
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/tnotifier.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,307 @@
+[Key1]
+SubscriberNumber=1
+StartCount=0
+ProgressCount=0
+EndCount=0
+
+
+
+[Key3]
+delay = 1
+SubscriberNumber=2
+KeyNumber1 = 537062757
+SubscribeKey1 = 537062757
+SubscribeForProgress1= ETrue
+GlobalCompId1=abc
+ProgressData1=abc
+ProgressData2=abc
+EndData1=abc
+StartCount=1
+ProgressCount=2
+EndCount=1
+
+
+[Key4]
+delay = 1
+SubscriberNumber=1
+KeyNumber1 = 537062757
+SubscribeKey1 = 537062757
+SubscribeForProgress1= EFalse
+GlobalCompId1=abc
+EndData1=abc
+StartCount=1
+ProgressCount=0
+EndCount=1
+
+
+
+[Key5]
+delay = 1
+SubscriberNumber=1
+KeyNumber1 = 537062757
+SubscribeKey1 = 537062757
+SubscribeForProgress1= ETrue
+GlobalCompId1=abc
+ProgressData1=abc
+ProgressData2=abc
+EndData1=abc
+StartCount=1
+ProgressCount=2
+EndCount=1
+
+
+
+[publish_one]
+OperationCount=7
+configsection0=startabc
+configsection1=delaystep
+configsection2=progressabc1
+configsection3=delaystep
+configsection4=progressabc2
+configsection5=delaystep
+configsection6=endabc
+
+[delaystep]
+Operation=delay
+PublisherDelay=1
+
+[publish_one_large]
+OperationCount=7
+configsection0=startabclarge
+configsection1=delaystep
+configsection2=progressabc1
+configsection3=delaystep
+configsection4=progressabc2
+configsection5=delaystep
+configsection6=endabc
+
+[startabc]
+Operation=start
+GlobalCompId=abc
+ComponentName=compName
+ComponentIcon=iconName
+AppNameCount=2
+AppName0=firstApp
+AppName1=secondApp
+AppIconCount=2
+AppIcon0=firstAppIcon
+AppIcon1=secondAppIcon
+ComponentSize=40
+IconPath=iconPath
+SoftwareType=Native
+Phase=1
+
+[startabclarge]
+Operation=start
+GlobalCompId=abc
+ComponentName=ThisIsaVeryLargeComponentName
+ComponentIcon=ThisIsaVeryLargeComponentIcon
+AppNameCount=2
+AppName0=LargeNameforthefirstApp
+AppName1=LargeNameforthesecondApp
+AppIconCount=2
+AppIcon0=LargeNameforthefirstAppIcon
+AppIcon1=LargeNameforthesecondAppIcon
+ComponentSize=40
+IconPath=LargePathfortheicon
+SoftwareType=Native
+Phase=1
+
+[progressabc1]
+Operation=progress
+GlobalCompId=abc
+Phase=1
+SubPhase=1
+CurrentProgress=1
+Total=10
+
+[progressabc2]
+Operation=progress
+GlobalCompId=abc
+Phase=1
+SubPhase=1
+CurrentProgress=9
+Total=10
+
+[endabc]
+Operation=end
+GlobalCompId=abc
+ErrMsg=errMsg
+ErrMsgDetails=errMsgDetails
+ErrCategory=0
+ErrCode=0
+
+[Key6]
+SubscriberNumber=1
+KeyNumber1 = 537062757
+KeyNumber2 = 537062759
+SubscribeKey1 = 537062757
+SubscribeForProgress1= ETrue
+SubscribeKey2 = 537062759
+SubscribeForProgress2= ETrue
+GlobalCompId1=abc
+GlobalCompId2=xyz
+ProgressData1=abc
+ProgressData2=abc
+ProgressData3=xyz
+EndData1=xyz
+EndData2=abc
+StartCount=2
+ProgressCount=3
+EndCount=2
+SubscribeShutdownTimer=18
+
+[Key7]
+SubscriberNumber=1
+KeyNumber1 = 537062757
+KeyNumber2 = 537062757
+SubscribeKey1 = 537062757
+SubscribeForProgress1= ETrue
+SubscribeKey2 = 537062757
+SubscribeForProgress2= ETrue
+GlobalCompId1=abc
+GlobalCompId2=xyz
+ProgressData1=abc
+ProgressData2=abc
+ProgressData3=xyz
+EndData1=abc
+EndData2=xyz
+StartCount=2
+ProgressCount=3
+EndCount=2
+SubscribeShutdownTimer=15
+
+[publish_twoconcurrentinstall]
+delay =1
+OperationCount=13
+configsection0=startabc
+configsection1=delaystep
+configsection2=progressabc1
+configsection3=delaystep
+configsection4=startxyz
+configsection5=delaystep
+configsection6=progressabc2
+configsection7=delaystep
+configsection8=progressxyz1
+configsection9=delaystep
+configsection10=endxyz
+configsection11=delaystep
+configsection12=endabc
+
+
+[publish_twoconsecutiveinstall]
+delay =1
+OperationCount=13
+configsection0=startabc
+configsection1=delaystep
+configsection2=progressabc1
+configsection3=delaystep
+configsection4=progressabc2
+configsection5=delaystep
+configsection6=endabc
+configsection7=delaystep
+configsection8=startxyz
+configsection9=delaystep
+configsection10=progressxyz1
+configsection11=delaystep
+configsection12=endxyz
+
+[startxyz]
+Operation=start
+GlobalCompId=xyz
+ComponentName=xyzcompName
+ComponentIcon=xyziconName
+AppNameCount=2
+AppName0=firstxyzApp
+AppName1=secondxyzApp
+AppIconCount=2
+AppIcon0=firstxyzAppIcon
+AppIcon1=secondxyzAppIcon
+ComponentSize=40
+IconPath=xyziconPath
+SoftwareType=NonNative
+Phase=1
+
+[progressxyz1]
+Operation=progress
+GlobalCompId=xyz
+Phase=1
+SubPhase=1
+CurrentProgress=3
+Total=5
+
+[endxyz]
+Operation=end
+GlobalCompId=xyz
+ErrMsg=xyzerrMsg
+ErrMsgDetails=xyzerrMsgDetails
+ErrCategory=2
+ErrCode=0
+
+
+[Key8]
+SubscriberNumber=1
+KeyNumber1 = 537062757
+KeyNumber2 = 537062757
+SubscribeKey1 = 537062757
+SubscribeForProgress1= ETrue
+SubscribeKey2 = 537062757
+SubscribeForProgress2= EFalse
+GlobalCompId1=abc
+GlobalCompId2=xyz
+ProgressData1=abc
+ProgressData2=abc
+EndData1=abc
+EndData2=xyz
+StartCount=2
+ProgressCount=2
+EndCount=2
+SubscribeShutdownTimer=15
+
+
+
+
+[Key9]
+delay=2
+SubscriberNumber=2
+KeyNumber1 = 537062757
+KeyNumber2 = 537062757
+SubscribeKey1 = 537062757
+SubscribeForProgress1= ETrue
+SubscribeKey2 = 537062757
+SubscribeForProgress2= ETrue
+GlobalCompId1=abc
+GlobalCompId2=xyz
+ProgressData1=abc
+ProgressData2=abc
+ProgressData3=xyz
+EndData1=abc
+EndData2=xyz
+StartCount=2
+ProgressCount=3
+EndCount=2
+SubscribeShutdownTimer=15
+
+
+[publish_details]
+OperationCount=5
+configsection0=startabc
+configsection1=delaystep
+configsection2=progressabc1
+configsection3=delaystep
+configsection4=endabc
+
+[Key10]
+delay = 1
+SubscriberNumber=1
+KeyNumber1 = 537062757
+SubscribeKey1 = 537062757
+SubscribeForProgress1= ETrue
+GlobalCompId1=abc
+ProgressData1=abc
+EndData1=abc
+StartCount=1
+ProgressCount=1
+EndCount=1
+PrintDetails=ETrue
+SubscribeShutdownTimer=15
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/tnotifier.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,130 @@
+//
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+//
+// Sif Notifier test cases.
+
+LOAD_SUITE tUsifSuite 
+
+//! @SYMTestCaseID 		API-SEC-USIF-NOTIFIER-0001
+//! @SYMTestCaseDesc 		Start only one subscriber.  
+//!					
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-NOTIFIER-0001
+RUN_TEST_STEP 100 tUsifSuite SifSubscribeStep z:\tusif\tsif\tnotifier.ini Key1
+END_TESTCASE API-SEC-USIF-NOTIFIER-0001
+
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-NOTIFIER-0002
+//! @SYMTestCaseDesc 		Start one subscriber, publisher  
+//!					
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-NOTIFIER-0002
+CONCURRENT
+RUN_TEST_STEP 100 tUsifSuite SifSubscribeStep z:\tusif\tsif\tnotifier.ini Key3
+RUN_TEST_STEP 100 tUsifSuite SifPublishStep z:\tusif\tsif\tnotifier.ini publish_one
+END_TESTCASE API-SEC-USIF-NOTIFIER-0002
+
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-NOTIFIER-0003
+//! @SYMTestCaseDesc 		Start one subscriber subscribed to start/end notification and one publisher
+//!					
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-NOTIFIER-0003
+CONCURRENT
+RUN_TEST_STEP 100 tUsifSuite SifSubscribeStep z:\tusif\tsif\tnotifier.ini Key4
+RUN_TEST_STEP 100 tUsifSuite SifPublishStep z:\tusif\tsif\tnotifier.ini publish_one
+END_TESTCASE API-SEC-USIF-NOTIFIER-0003
+
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-NOTIFIER-0004
+//! @SYMTestCaseDesc 		One publisher, 2 subscribers .. 1st subscriber subscribes for progress, second does not
+//!					
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-NOTIFIER-0004
+CONCURRENT
+RUN_TEST_STEP 100 tUsifSuite SifSubscribeStep z:\tusif\tsif\tnotifier.ini Key5
+RUN_TEST_STEP 100 tUsifSuite SifSubscribeStep z:\tusif\tsif\tnotifier.ini Key4
+RUN_TEST_STEP 100 tUsifSuite SifPublishStep z:\tusif\tsif\tnotifier.ini publish_one
+END_TESTCASE API-SEC-USIF-NOTIFIER-0004
+
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-NOTIFIER-0005
+//! @SYMTestCaseDesc 	      One subscriber 2 publishers
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-NOTIFIER-0005
+CONCURRENT
+RUN_TEST_STEP 100 tUsifSuite SifSubscribeStep z:\tusif\tsif\tnotifier.ini Key6
+RUN_TEST_STEP 100 tUsifSuite SifPublishStep z:\tusif\tsif\tnotifier.ini publish_twoconcurrentinstall
+END_TESTCASE API-SEC-USIF-NOTIFIER-0005
+
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-NOTIFIER-0006
+//! @SYMTestCaseDesc 	      One subscriber, 2 publishers ... the second publisher starts after the first finishes.
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-NOTIFIER-0006
+CONCURRENT
+RUN_TEST_STEP 100 tUsifSuite SifSubscribeStep z:\tusif\tsif\tnotifier.ini Key7
+RUN_TEST_STEP 100 tUsifSuite SifPublishStep z:\tusif\tsif\tnotifier.ini publish_twoconsecutiveinstall
+END_TESTCASE API-SEC-USIF-NOTIFIER-0006
+
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-NOTIFIER-0007
+//! @SYMTestCaseDesc 	      2 publishers, 2 subscribers
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-NOTIFIER-0007
+CONCURRENT
+RUN_TEST_STEP 100 tUsifSuite SifSubscribeStep z:\tusif\tsif\tnotifier.ini Key8
+RUN_TEST_STEP 100 tUsifSuite SifSubscribeStep z:\tusif\tsif\tnotifier.ini Key9
+RUN_TEST_STEP 100 tUsifSuite SifPublishStep z:\tusif\tsif\tnotifier.ini publish_twoconsecutiveinstall
+END_TESTCASE API-SEC-USIF-NOTIFIER-0007
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-NOTIFIER-0008
+//! @SYMTestCaseDesc 		Start one subscriber, publisher with large start data.
+//!					
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-NOTIFIER-0008
+CONCURRENT
+RUN_TEST_STEP 100 tUsifSuite SifSubscribeStep z:\tusif\tsif\tnotifier.ini Key3
+RUN_TEST_STEP 100 tUsifSuite SifPublishStep z:\tusif\tsif\tnotifier.ini publish_one_large
+END_TESTCASE API-SEC-USIF-NOTIFIER-0008
+
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-NOTIFIER-0009
+//! @SYMTestCaseDesc 		Start one subscriber, publisher. Print details
+//!					
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-NOTIFIER-0009
+CONCURRENT
+RUN_TEST_STEP 100 tUsifSuite SifSubscribeStep z:\tusif\tsif\tnotifier.ini Key10
+RUN_TEST_STEP 100 tUsifSuite SifPublishStep z:\tusif\tsif\tnotifier.ini publish_details
+END_TESTCASE API-SEC-USIF-NOTIFIER-0009
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/tsif_appuidgen.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+[add_app_reg_info_newUid]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GenerateNewUid=ETrue
+
+[loop_count]
+repeatParam=302
+repeatParam2=8
+
+[deleteAppUid1]
+AppUid=3E8 
+
+[deleteAppUid2]
+AppUid=47E
+
+[deleteAppUid3]
+AppUid=44C
+
+[deleteAppUid4]
+AppUid=433
+
+[deleteAppUid5]
+AppUid=61A8
+
+[deleteAppUid6]
+AppUid=623E
+
+[deleteAppUid7]
+AppUid=620C
+
+[deleteAppUid8]
+AppUid=61F3
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/tsif_appuidgen.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,86 @@
+//
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This script tests SIF GenerateNewAppUid() API
+// 
+//
+
+PRINT Run SIF GenerateNewAppUid() API Tests
+//Load suite
+LOAD_SUITE tscr
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-APPUIDGEN-0001
+//! @SYMTestCaseDesc 		The test cenrep file of SCR specifies two Uid ranges with their total 
+//!					adding upto 302. SCRAddApplicationEntry is called 302 times in a loop to fill
+//!					both the ranges.
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-APPUIDGEN-0001
+// Delete the SCR Database file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr_appreginfo.ini db_file 
+START_REPEAT z:\tusif\tsif\tsif_appuidgen.ini loop_count repeatParam
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini add_app_reg_info_newUid
+END_REPEAT
+END_TESTCASE API-SEC-USIF-APPUIDGEN-0001
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-APPUIDGEN-0002
+//! @SYMTestCaseDesc 		SCRAddApplicationEntry fails as no unused UID is available.
+//! @SYMTestStatus 		3. Released
+
+
+START_TESTCASE API-SEC-USIF-APPUIDGEN-0002
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini add_app_reg_info_newUid
+END_TESTCASE API-SEC-USIF-APPUIDGEN-0002
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-APPUIDGEN-0003
+//! @SYMTestCaseDesc 		Delete 4 Uids from both the ranges
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-APPUIDGEN-0003
+//Third test case , delete 8 uids 
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini deleteAppUid1
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini deleteAppUid2
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini deleteAppUid3
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini deleteAppUid4
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini deleteAppUid5
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini deleteAppUid6
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini deleteAppUid7
+RUN_TEST_STEP 100 tscr SCRDeleteApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini deleteAppUid8
+END_TESTCASE API-SEC-USIF-APPUIDGEN-0003
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-APPUIDGEN-0004
+//! @SYMTestCaseDesc 		SCRAddApplicationEntry is called 8 times in a loop.
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-APPUIDGEN-0004
+START_REPEAT z:\tusif\tsif\tsif_appuidgen.ini loop_count repeatParam2
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini add_app_reg_info_newUid
+END_REPEAT
+END_TESTCASE API-SEC-USIF-APPUIDGEN-0004
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-APPUIDGEN-0005
+//! @SYMTestCaseDesc 		SCRAddApplicationEntry fails as no unused UID is available.
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-APPUIDGEN-0005
+RUN_TEST_STEP !Result=-6 100 tscr SCRAddApplicationEntry z:\tusif\tsif\tsif_appuidgen.ini add_app_reg_info_newUid
+END_TESTCASE API-SEC-USIF-APPUIDGEN-0005
+
+
+PRINT Completed SIF AppUid Generation tests.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/tsifintegration.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1539 @@
+
+[GetComponentInfoByFileName]
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=False
+root.softwareTypeName=plain
+root.componentName=Test Component
+root.componentVersion=1.0.0
+root.componentVendor=Symbian
+root.scomoState=0
+root.installStatus=0
+root.componentId=12345678
+root.globalComponentId=test.nonnativepackage.txt
+root.authenticity=1
+root.userGrantableCapsBitMask=49152 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=1234
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetComponentInfoByFileHandle]
+packageFile=z:\tusif\tsif\data\test.nonnativepackage.txt
+operationByFileHandle=True
+root.softwareTypeName=plain
+root.componentName=Test Component
+root.componentVersion=1.0.0
+root.componentVendor=Symbian
+root.scomoState=0
+root.installStatus=0
+root.componentId=12345678
+root.globalComponentId=test.nonnativepackage.txt
+root.authenticity=1
+root.userGrantableCapsBitMask=49152 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=1234
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetComponentInfoOverflowByFileName]
+packageFile=z:\tusif\tsif\data\test.overflow.txt
+operationByFileHandle=False
+root.softwareTypeName=plain
+root.componentName=Test Component
+root.componentVersion=1.0.0
+root.componentVendor=Symbian
+root.scomoState=0
+root.installStatus=0
+root.componentId=12345678
+root.globalComponentId=test.nonnativepackage.txt
+root.authenticity=1
+root.userGrantableCapsBitMask=49152 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=1234
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetComponentInfoByFileNameForUninstalledCompoundComponent]
+packageFile=z:\tusif\tsifintegration\data\compound.sifrefbinpkg
+operationByFileHandle=False
+compareMaxInstalledSize=False
+compareIconFileSize=False
+root.softwareTypeName=reference
+root.componentName=SIF Reference Component 2
+root.componentVersion=1.00(0)
+root.componentVendor=Symbian
+root.scomoState=0
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=SIF Reference Component 2
+root.authenticity=0
+root.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=3072
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+root.numChildren=3
+root.child0.softwareTypeName=reference
+root.child0.componentName=SIF Reference Component 3
+root.child0.componentVersion=1.00(0)
+root.child0.componentVendor=Symbian
+root.child0.scomoState=0
+root.child0.installStatus=0
+root.child0.componentId=0
+root.child0.globalComponentId=SIF Reference Component 3
+root.child0.authenticity=0
+root.child0.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.child0.maxInstalledSize=0
+root.child0.hasExecutable=False
+root.child0.driveSelectionRequired=False
+root.child0.noOfApps=0
+root.child1.softwareTypeName=native
+root.child1.componentName=Sif Integration Test
+root.child1.componentVersion=1.0.0
+root.child1.componentVendor=Security Team
+root.child1.scomoState=0
+root.child1.installStatus=0
+root.child1.componentId=0
+root.child1.globalComponentId=80534946
+root.child1.authenticity=1
+root.child1.userGrantableCapsBitMask=0
+root.child1.maxInstalledSize=125244
+root.child1.hasExecutable=True
+root.child1.driveSelectionRequired=False
+root.child1.noOfApps=0
+root.child2.softwareTypeName=reference
+root.child2.componentName=SIF Reference Component
+root.child2.componentVersion=1.00(0)
+root.child2.componentVendor=Symbian
+root.child2.scomoState=0
+root.child2.installStatus=0
+root.child2.componentId=0
+root.child2.globalComponentId=SIF Reference Component
+root.child2.authenticity=0
+root.child2.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.child2.maxInstalledSize=3072
+root.child2.hasExecutable=False
+root.child2.driveSelectionRequired=False
+root.child2.noOfApps=0
+root.child2.numChildren=1
+root.child2.child0.softwareTypeName=plain
+root.child2.child0.componentName=Test Component
+root.child2.child0.componentVersion=1.0.0
+root.child2.child0.componentVendor=Symbian
+root.child2.child0.scomoState=0
+root.child2.child0.installStatus=0
+root.child2.child0.componentId=12345678
+root.child2.child0.globalComponentId=test.nonnativepackage.txt
+root.child2.child0.authenticity=1
+root.child2.child0.userGrantableCapsBitMask=49152 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.child2.child0.maxInstalledSize=1234
+root.child2.child0.hasExecutable=False
+root.child2.child0.driveSelectionRequired=False
+root.child2.child0.noOfApps=0
+
+
+
+[GetComponentInfoByFileHandleForUninstalledCompoundComponent]
+packageFile=z:\tusif\tsifintegration\data\compound.sifrefbinpkg
+operationByFileHandle=True
+compareMaxInstalledSize=False
+compareIconFileSize=False
+root.softwareTypeName=reference
+root.componentName=SIF Reference Component 2
+root.componentVersion=1.00(0)
+root.componentVendor=Symbian
+root.scomoState=0
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=SIF Reference Component 2
+root.authenticity=0
+root.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.maxInstalledSize=3072
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+root.numChildren=3
+root.child0.softwareTypeName=reference
+root.child0.componentName=SIF Reference Component 3
+root.child0.componentVersion=1.00(0)
+root.child0.componentVendor=Symbian
+root.child0.scomoState=0
+root.child0.installStatus=0
+root.child0.componentId=0
+root.child0.globalComponentId=SIF Reference Component 3
+root.child0.authenticity=0
+root.child0.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.child0.maxInstalledSize=0
+root.child0.hasExecutable=False
+root.child0.driveSelectionRequired=False
+root.child0.noOfApps=0
+root.child1.softwareTypeName=native
+root.child1.componentName=Sif Integration Test
+root.child1.componentVersion=1.0.0
+root.child1.componentVendor=Security Team
+root.child1.scomoState=0
+root.child1.installStatus=0
+root.child1.componentId=0
+root.child1.globalComponentId=80534946
+root.child1.authenticity=1
+root.child1.userGrantableCapsBitMask=0
+root.child1.maxInstalledSize=125244
+root.child1.hasExecutable=True
+root.child1.driveSelectionRequired=False
+root.child1.noOfApps=0
+root.child2.softwareTypeName=reference
+root.child2.componentName=SIF Reference Component
+root.child2.componentVersion=1.00(0)
+root.child2.componentVendor=Symbian
+root.child2.scomoState=0
+root.child2.installStatus=0
+root.child2.componentId=0
+root.child2.globalComponentId=SIF Reference Component
+root.child2.authenticity=0
+root.child2.userGrantableCapsBitMask=98304 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.child2.maxInstalledSize=3072
+root.child2.hasExecutable=False
+root.child2.driveSelectionRequired=False
+root.child2.noOfApps=0
+root.child2.numChildren=1
+root.child2.child0.softwareTypeName=plain
+root.child2.child0.componentName=Test Component
+root.child2.child0.componentVersion=1.0.0
+root.child2.child0.componentVendor=Symbian
+root.child2.child0.scomoState=0
+root.child2.child0.installStatus=0
+root.child2.child0.componentId=12345678
+root.child2.child0.globalComponentId=test.nonnativepackage.txt
+root.child2.child0.authenticity=1
+root.child2.child0.userGrantableCapsBitMask=49152 // ECapabilityReadUserData, ECapabilityWriteUserData
+root.child2.child0.maxInstalledSize=1234
+root.child2.child0.hasExecutable=False
+root.child2.child0.driveSelectionRequired=False
+root.child2.child0.noOfApps=0
+
+[InstallByFileName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallHighVersionByFileName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestupgradehigh.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallByFileHandle]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=True
+useEnhancedApi=False
+
+[InstallInactiveByFileName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=False
+useEnhancedApi=True
+pluginOpaqueArgumentName0=InstallInactive
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+pluginRefOpaqueResultName0=ExtendedErrCode
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=0
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=String
+pluginRefOpaqueResultValue1=__ANY_VALUE_PERMITTED__
+
+[InstallCompoundComponentByFileName]
+packageFile=z:\tusif\tsifintegration\data\compound.sifrefbinpkg
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallCompoundComponentByFileHandle]
+packageFile=z:\tusif\tsifintegration\data\compound.sifrefbinpkg
+operationByFileHandle=True
+useEnhancedApi=False
+
+[UninstallByNameAndVendor]
+componentName=Sif Integration Test
+componentVendor=Security Team
+useEnhancedApi=False
+
+[AsynchronousCancelInstallByFileName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=False
+useEnhancedApi=False
+cancelAfter=100
+
+[AsynchronousCancelInstallByFileHandle]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=True
+useEnhancedApi=False
+cancelAfter=100
+
+[GenericBrowserInstallRefPkgByFileName]
+packageFile=z:\tusif\tsifrefinstaller\data\base.sifrefbinpkg
+operationByFileHandle=False
+
+[GenericBrowserInstallRefPkgByFileHandle]
+packageFile=z:\tusif\tsifrefinstaller\data\upgrade.sifrefbinpkg
+operationByFileHandle=True
+
+[UninstallRefPkgByNameAndVendor]
+componentName=SIF Reference Component
+componentVendor=Symbian
+useEnhancedApi=False
+
+[UninstallRootPkgByNameAndVendor]
+componentName=SIF Reference Component
+componentVendor=Symbian
+useEnhancedApi=False
+
+[UninstallRootChild0PkgByNameAndVendor]
+componentName=SIF Reference Component 2
+componentVendor=Symbian
+useEnhancedApi=False
+
+[UninstallRootChild1PkgByNameAndVendor]
+componentName=Sif Integration Test
+componentVendor=Security Team
+useEnhancedApi=False
+
+[UninstallRootChild2PkgByNameAndVendor]
+componentName=SIF Reference Component 3
+componentVendor=Symbian
+useEnhancedApi=False
+
+[UninstallRootChild0Child0PkgByNameAndVendor]
+componentName=test.nonnativepackage.txt
+componentVendor=Symbian
+useEnhancedApi=False
+
+[VerifyRefPackageNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file1.ref
+packageFile1=c:\RefComponent\file2.ref
+packageFile2=c:\RefComponent\file3.ref
+packageFile3=c:\RefComponent\file4.ref
+
+[VerifyRefBasePackageExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file1.ref
+packageFile1=c:\RefComponent\file2.ref
+packageFile2=c:\RefComponent\file3.ref
+scomoState=1
+
+[VerifyRefUpgradePackageExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file3.ref
+packageFile1=c:\RefComponent\file4.ref
+scomoState=1
+
+[VerifyRootPkgExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file1.ref
+packageFile1=c:\RefComponent\file2.ref
+packageFile2=c:\RefComponent\file3.ref
+scomoState=1
+
+[VerifyRootChild0PkgExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component 2
+componentVendor=Symbian
+packageFile0=c:\RefComponent2\file1.ref
+packageFile1=c:\RefComponent2\file2.ref
+packageFile2=c:\RefComponent2\file3.ref
+scomoState=1
+
+[VerifyRootChild1PkgExistence]
+verifyExistence=True
+componentName=Sif Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+executableReturnCode=1397310977
+scomoState=1
+
+[VerifyRootChild2PkgExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=SIF Reference Component 3
+componentVendor=Symbian
+scomoState=1
+
+[VerifyRootChild0Child0PkgExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=test.nonnativepackage.txt
+componentVendor=Symbian
+packageFile0=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file0
+packageFile1=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file1
+packageFile2=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file2
+scomoState=0
+
+[VerifyRootPkgNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=SIF Reference Component
+componentVendor=Symbian
+packageFile0=c:\RefComponent\file1.ref
+packageFile1=c:\RefComponent\file2.ref
+packageFile2=c:\RefComponent\file3.ref
+scomoState=1
+
+[VerifyRootChild0PkgNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=SIF Reference Component 2
+componentVendor=Symbian
+packageFile0=c:\RefComponent2\file1.ref
+packageFile1=c:\RefComponent2\file2.ref
+packageFile2=c:\RefComponent2\file3.ref
+scomoState=1
+
+[VerifyRootChild1PkgNonExistence]
+verifyExistence=False
+componentName=Sif Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+
+[VerifyRootChild2PkgNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=SIF Reference Component 3
+componentVendor=Symbian
+scomoState=1
+
+[VerifyRootChild0Child0PkgNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=test.nonnativepackage.txt
+componentVendor=Symbian
+packageFile0=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file0
+packageFile1=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file1
+packageFile2=c:\tusif\tsif\nonnativeplugin\test.nonnativepackage.txt\file2
+scomoState=0
+
+[UpgradeByFileName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestupgrade.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[UpgradeByFileHandle]
+packageFile=z:\tusif\tsif\data\sifintegrationtestupgrade.sis
+operationByFileHandle=True
+useEnhancedApi=False
+
+[InvalidUpgradeByFileName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestinvalidupgrade.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InvalidUpgradeByFileHandle]
+packageFile=z:\tusif\tsif\data\sifintegrationtestinvalidupgrade.sis
+operationByFileHandle=True
+useEnhancedApi=False
+
+[VerifyPackageExistence]
+verifyExistence=True
+componentName=Sif Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+executableReturnCode=1397310977
+scomoState=1
+
+[VerifyUpgradePackageExistence]
+verifyExistence=True
+componentName=Sif Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+executableReturnCode=1397310978
+scomoState=1
+
+[VerifyPackageNonExistence]
+verifyExistence=False
+componentName=Sif Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+
+[VerifyInactivePackageExistence]
+verifyExistence=True
+componentName=Sif Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+executableReturnCode=1397310977
+scomoState=1 // Currently, SWI does not support deactivation of packages - this should be returned to 0 once it does
+
+[InstallUpgradeByFileName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestupgradehigh.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[GetCompInfoForNewNativeBaseCompByFileName]
+packageFile=z:\tusif\tsif\data\sifcomponentinfointegration.sis
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Component Info Integration Test
+root.componentVersion=1.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80545946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=165
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetCompInfoForNewNativeBaseCompByFileHandle]
+packageFile=z:\tusif\tsif\data\sifcomponentinfointegration.sis
+operationByFileHandle=True
+root.softwareTypeName=native
+root.componentName=Sif Component Info Integration Test
+root.componentVersion=1.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80545946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=165
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[InstallComponentInfoIntegByFileName]
+packageFile=z:\tusif\tsif\data\sifcomponentinfointegration.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallComponentInfoIntegUpgradeByFileName]
+packageFile=z:\tusif\tsif\data\sifcomponentinfointegpu.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[UninstallComponentInfoInteg]
+componentName=Sif Component Info Integration Test
+componentVendor=Security Team
+useEnhancedApi=False
+
+[GetCompInfoForInstalledNativeBaseByFileName]
+packageFile=z:\tusif\tsif\data\sifcomponentinfointegration.sis
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Component Info Integration Test
+root.componentVersion=1.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=2
+root.componentId=1
+root.globalComponentId=80545946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=165
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetCompInfoForInstalledNativeBaseByFileHandle]
+packageFile=z:\tusif\tsif\data\sifcomponentinfointegration.sis
+operationByFileHandle=True
+root.softwareTypeName=native
+root.componentName=Sif Component Info Integration Test
+root.componentVersion=1.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=2
+root.componentId=1
+root.globalComponentId=80545946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=165
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetCompInfoForUpgradeByFNWhenBaseInstalled]
+packageFile=z:\tusif\tsif\data\sifcomponentinfointegpu.sis
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Component Info Integration Test
+root.componentVersion=2.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=1
+root.componentId=1
+root.globalComponentId=80545946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=173
+root.hasExecutable=False
+root.driveSelectionRequired=True
+root.noOfApps=0
+
+[GetCompInfoForUpgradeByFNWhenBaseMissing]
+packageFile=z:\tusif\tsif\data\sifcomponentinfointegpu.SIS
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Component Info Integration Test
+root.componentVersion=2.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=4
+root.componentId=0
+root.globalComponentId=80545946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=173
+root.hasExecutable=False
+root.driveSelectionRequired=True
+root.noOfApps=0
+
+[GetCompInfoForPatchByFNWhenBaseInstalled]
+packageFile=z:\tusif\tsif\data\sifcomponentinfointegsp.SIS
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Component Info Integration Test Patch
+root.componentVersion=3.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80545946_Sif Component Info Integration Test Patch
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=178
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetCompInfoForPatchByFNWhenBaseMissing]
+packageFile=z:\tusif\tsif\data\sifcomponentinfointegsp.SIS
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Component Info Integration Test Patch
+root.componentVersion=3.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=4
+root.componentId=0
+root.globalComponentId=80545946_Sif Component Info Integration Test Patch
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=178
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetCompInfoForUpgradeByFNWhenHigherInstalled]
+packageFile=z:\tusif\tsif\data\sifcomponentinfointegration.sis
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Component Info Integration Test
+root.componentVersion=1.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=3
+root.componentId=2
+root.globalComponentId=80545946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=165
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetCompInfoForNoCapabilityBaseByFileName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestnocaps.SIS
+// Since the SIS file contains an executable, the maxInstalledSize is unreliable - it might change when executable is rebuilt
+compareMaxInstalledSize=False 
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif No Capability Test
+root.componentVersion=1.1.1
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88534946
+root.authenticity=0
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=124988
+root.hasExecutable=True
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetCompInfoForBaseWithUserCapsByFileName]
+packageFile=z:\tusif\tsif\data\sifintegusercapsbase.SIS
+// Since the SIS file contains an executable, the maxInstalledSize is unreliable - it might change when executable is rebuilt
+compareMaxInstalledSize=False 
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif User Caps Base
+root.componentVersion=1.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88534947
+root.authenticity=1
+root.userGrantableCapsBitMask=98304	// ReadUserDara and WriteUserData
+root.maxInstalledSize=124972
+root.hasExecutable=True
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[CancelAsyncGetCompInfoRequestByFileName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbase.sis
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Integration Test
+root.componentVersion=1.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80534946
+root.authenticity=0
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=124972
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+cancelAfter=100
+
+[GetComponentInfoForEmptyNameAndVendor]
+packageFile=z:\tusif\tsif\data\emptynameandvendor.sis
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=
+root.componentVersion=1.0.0
+root.componentVendor=
+root.scomoState=0
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80706054
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=165
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetCompInfoForEmbeddedWithExes]
+packageFile=z:\tusif\tsif\data\embeddingbasewithexe.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Embedding Base With EXE
+root.componentVersion=1.0.0
+root.componentVendor=Security and Data Privacy
+root.scomoState=0
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80706055
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=124988
+root.hasExecutable=True
+root.driveSelectionRequired=False
+root.noOfApps=0
+root.numChildren=1
+root.child0.softwareTypeName=native
+root.child0.componentName=Embedded Base With User Caps EXE
+root.child0.componentVersion=1.0.0
+root.child0.componentVendor=Security and Data Privacy
+root.child0.scomoState=0
+root.child0.installStatus=0
+root.child0.componentId=0
+root.child0.globalComponentId=80706056
+root.child0.authenticity=1
+root.child0.userGrantableCapsBitMask=98304
+root.child0.maxInstalledSize=124972
+root.child0.hasExecutable=True
+root.child0.driveSelectionRequired=False
+root.child0.noOfApps=0
+
+[GetCompInfoForEmbededNativePackages]
+packageFile=z:\tusif\tsif\data\embeddingouterbase.sis
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Embedding Outer Base
+root.componentVersion=1.0.0
+root.componentVendor=Security and Data Privacy
+root.scomoState=0
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80706050
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=165
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+root.numChildren=2
+root.child0.softwareTypeName=native
+root.child0.componentName=Embedded Inner Base-1
+root.child0.componentVersion=1.0.0
+root.child0.componentVendor=Security and Data Privacy
+root.child0.scomoState=0
+root.child0.installStatus=0
+root.child0.componentId=0
+root.child0.globalComponentId=80706051
+root.child0.authenticity=1
+root.child0.userGrantableCapsBitMask=0
+root.child0.maxInstalledSize=173
+root.child0.hasExecutable=False
+root.child0.driveSelectionRequired=False
+root.child0.noOfApps=0
+root.child1.softwareTypeName=native
+root.child1.componentName=Embedded Inner Base-11
+root.child1.componentVersion=1.0.0
+root.child1.componentVendor=Security and Data Privacy
+root.child1.scomoState=0
+root.child1.installStatus=0
+root.child1.componentId=0
+root.child1.globalComponentId=80706053
+root.child1.authenticity=1
+root.child1.userGrantableCapsBitMask=0
+root.child1.maxInstalledSize=165
+root.child1.hasExecutable=False
+root.child1.driveSelectionRequired=False
+root.child1.noOfApps=0
+root.child0.numChildren=1
+root.child0.child0.softwareTypeName=native
+root.child0.child0.componentName=Embedded Inner Base-2
+root.child0.child0.componentVersion=1.0.0
+root.child0.child0.componentVendor=Security and Data Privacy
+root.child0.child0.scomoState=0
+root.child0.child0.installStatus=0
+root.child0.child0.componentId=0
+root.child0.child0.globalComponentId=80706052
+root.child0.child0.authenticity=1
+root.child0.child0.userGrantableCapsBitMask=0
+root.child0.child0.maxInstalledSize=178
+root.child0.child0.hasExecutable=False
+root.child0.child0.driveSelectionRequired=False
+root.child0.child0.noOfApps=0
+
+[GetCompInfoForEmbeddedWithTextAndInnerWithExe]
+packageFile=z:\tusif\tsif\data\embeddingbasewithtextandinnerwithexe.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Embedding Base With EXE
+root.componentVersion=1.0.0
+root.componentVendor=Security and Data Privacy
+root.scomoState=0
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80706055
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=124988
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+root.numChildren=1
+root.child0.softwareTypeName=native
+root.child0.componentName=Sif Integration Test
+root.child0.componentVersion=1.0.0
+root.child0.componentVendor=Security Team
+root.child0.scomoState=0
+root.child0.installStatus=0
+root.child0.componentId=0
+root.child0.globalComponentId=80534946
+root.child0.authenticity=1
+root.child0.userGrantableCapsBitMask=0
+root.child0.maxInstalledSize=124972
+root.child0.hasExecutable=True
+root.child0.driveSelectionRequired=False
+root.child0.noOfApps=0
+
+[GetComponentInfoWithMultipleFiles]
+packageFile=z:\tusif\tsif\data\sifintegrationtestmultiplefiles.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Integration Test
+root.componentVersion=1.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80534946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetComponentInfoWithExtensionInDifferentCase]
+packageFile=z:\tusif\tsif\data\sifintegrationtestextensionindifferentcase.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Integration Test
+root.componentVersion=1.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80534946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=125004
+root.hasExecutable=True
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetComponentInfoWithOnlyDll]
+packageFile=z:\tusif\tsif\data\sifintegrationtestwithonlydll.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Integration Test
+root.componentVersion=1.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80534946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=171496
+root.hasExecutable=True
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[SilentInstallSelfSignedByName]
+packageFile=z:\tusif\tsif\data\sifintegrationtestnocaps.sis
+operationByFileHandle=False
+useEnhancedApi=True
+pluginOpaqueArgumentName0=InstallSilently
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+pluginRefOpaqueResultName0=ExtendedErrCode
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=0
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=String
+pluginRefOpaqueResultValue1=__ANY_VALUE_PERMITTED__
+
+[SilentInstallSelfSignedByHandle]
+packageFile=z:\tusif\tsif\data\sifintegrationtestnocaps.sis
+operationByFileHandle=True
+useEnhancedApi=True
+pluginOpaqueArgumentName0=InstallSilently
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+pluginRefOpaqueResultName0=ExtendedErrCode
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=0
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=String
+pluginRefOpaqueResultValue1=__ANY_VALUE_PERMITTED__
+
+[SilentInstallSignedByName]
+packageFile=z:\tusif\tsif\data\sifintegsufficientusercaps.sis
+operationByFileHandle=False
+useEnhancedApi=True
+pluginOpaqueArgumentName0=InstallSilently
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+pluginRefOpaqueResultName0=ExtendedErrCode
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=0
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=String
+pluginRefOpaqueResultValue1=__ANY_VALUE_PERMITTED__
+
+[SilentInstallSignedByHandle]
+packageFile=z:\tusif\tsif\data\sifintegsufficientusercaps.sis
+operationByFileHandle=True
+useEnhancedApi=True
+pluginOpaqueArgumentName0=InstallSilently
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+pluginRefOpaqueResultName0=ExtendedErrCode
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=0
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=String
+pluginRefOpaqueResultValue1=__ANY_VALUE_PERMITTED__
+
+[SignedPkgExistence]
+verifyExistence=True
+componentName=Sif Sufficient Caps
+componentVendor=Installation Team
+executableName=sifintegsufficientusercaps.exe
+executableReturnCode=1397310980
+scomoState=1
+
+[SignedPkgNonExistence]
+verifyExistence=False
+componentName=Sif Sufficient Caps
+componentVendor=Installation Team
+executableName=sifintegsufficientusercaps.exe
+
+[UninstallSignedPkg]
+componentName=Sif Sufficient Caps
+componentVendor=Installation Team
+useEnhancedApi=False
+
+[SignedLessCapsPkg]
+packageFile=z:\tusif\tsif\data\sifintegusercapsbase.sis
+operationByFileHandle=False
+useEnhancedApi=True
+pluginOpaqueArgumentName0=InstallSilently
+pluginOpaqueArgumentType0=Int
+pluginOpaqueArgumentValue0=1
+pluginRefOpaqueResultName0=ExtendedErrCode
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=0
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=String
+pluginRefOpaqueResultValue1=__ANY_VALUE_PERMITTED__
+
+[SignedLessCapsNonExistence]
+verifyExistence=False
+componentName=Sif User Caps Base
+componentVendor=Security Team
+executableName=sifintegusercapsbasepackage.exe
+
+[GetComponentInfoForPuUpgradeWithDriveDialog]
+packageFile=z:\tusif\tsif\data\sifintegrationtestupgradewithdrivedialog.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Integration Test
+root.componentVersion=2.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=1
+root.componentId=3
+root.globalComponentId=80534946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=0
+
+[GetComponentInfoForPuUpgradeWithioutDriveDialog]
+packageFile=z:\tusif\tsif\data\sifintegrationtestupgrade.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Integration Test
+root.componentVersion=2.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=1
+root.componentId=4
+root.globalComponentId=80534946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=False
+root.noOfApps=0
+
+[GetComponentInfoForBaseWithDriveDialog]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbasewithdrivedialog.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Sif Integration Test
+root.componentVersion=1.0.0
+root.componentVendor=Security Team
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80534946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=0
+
+[GetComponentInfoForEmbeddedInnnerWithUpgrade]
+packageFile=z:\tusif\tsif\data\embeddedinnerwithupgrade.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Embedding Base With EXE
+root.componentVersion=1.0.0
+root.componentVendor=Security and Data Privacy
+root.scomoState=0
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80534946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=124988
+root.hasExecutable=False
+root.driveSelectionRequired=False
+root.noOfApps=0
+root.numChildren=1
+root.child0.softwareTypeName=native
+root.child0.componentName=Sif Integration Test
+root.child0.componentVersion=2.0.0
+root.child0.componentVendor=Security Team
+root.child0.scomoState=0
+root.child0.installStatus=4
+root.child0.componentId=0
+root.child0.globalComponentId=80534946
+root.child0.authenticity=1
+root.child0.userGrantableCapsBitMask=0
+root.child0.maxInstalledSize=124972
+root.child0.hasExecutable=True
+root.child0.driveSelectionRequired=True
+root.child0.noOfApps=0
+
+[GetComponentInfoForEmbeddedInnnerWithUpgradeOuterAsBaseWithDriveDialog]
+packageFile=z:\tusif\tsif\data\embeddedinnerwithupgradeouterasbasewithdrivedialog.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=Embedding Base With EXE
+root.componentVersion=1.0.0
+root.componentVendor=Security and Data Privacy
+root.scomoState=0
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=80534946
+root.authenticity=1
+root.userGrantableCapsBitMask=0
+root.maxInstalledSize=124988
+root.hasExecutable=False
+root.driveSelectionRequired=True
+root.noOfApps=0
+root.numChildren=1
+root.child0.softwareTypeName=native
+root.child0.componentName=Sif Integration Test
+root.child0.componentVersion=2.0.0
+root.child0.componentVendor=Security Team
+root.child0.scomoState=0
+root.child0.installStatus=4
+root.child0.componentId=0
+root.child0.globalComponentId=80534946
+root.child0.authenticity=1
+root.child0.userGrantableCapsBitMask=0
+root.child0.maxInstalledSize=124972
+root.child0.hasExecutable=True
+root.child0.driveSelectionRequired=False
+root.child0.noOfApps=0
+
+[InstallByFileWithDriveDialog]
+packageFile=z:\tusif\tsif\data\sifintegrationtestbasewithdrivedialog.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[GetComponentAppInfo]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotest.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompinfotest_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001102
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=1
+root.appUid0=80286FE1
+root.appName0=CompInfoFile.exe
+root.appGroupName0=CompInfo_Group
+root.appIconFileSize0=125576
+root.appIconFileName0=C:\resource\install\icon\0x80286fe1\sifgetcompapparcinfotest_01.mbm
+
+[GetComponentAppInfoMultipleLangs_German]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotestmultilang.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompapparcinfotestmultilang_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001103
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=1
+root.appUid0=80286FE2
+root.appName0=CompInfoMultipleFile.exe
+root.appGroupName0=CompInfo_Group
+root.appIconFileSize0=125584
+root.appIconFileName0=C:\resource\install\icon\0x80286fe2\sifgetcompapparcinfotestmultilang_03.mbm
+
+[GetComponentAppInfoMultipleLangs]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotestmultilang.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompapparcinfotestmultilang_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001103
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=1
+root.appUid0=80286FE2
+root.appName0=CompInfoMultipleFile.exe
+root.appGroupName0=CompInfo_Group
+root.appIconFileSize0=125584
+root.appIconFileName0=C:\resource\install\icon\0x80286fe2\sifgetcompapparcinfotestmultilang_01.mbm
+
+[GetComponentAppInfoMultiplefiles]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotestmultifiles.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompinfotestmultifiles_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001104
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=1
+root.appUid0=80286FE1
+root.appName0=CompInfoFile.exe
+root.appGroupName0=CompInfo_Group
+root.appIconFileSize0=125576
+root.appIconFileName0=C:\resource\install\icon\0x80286fe1\sifgetcompapparcinfotest_01.mbm
+
+[GetComponentAppInfo_NonApparcRegRsc]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotestnonapparcrsc.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompinfotestnonapparcrsc_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001105
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=0
+
+[GetComponentAppInfo_MultiApp]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotestmultiapp.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompapparcinfotestmultiapp_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001108
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=2
+root.appUid0=80286FE2
+root.appName0=CompInfoMultipleFile.exe
+root.appGroupName0=CompInfo_Group
+root.appIconFileSize0=125584
+root.appIconFileName0=C:\resource\install\icon\0x80286fe2\sifgetcompapparcinfotestmultilang_01.mbm
+root.appUid1=80286FE1
+root.appName1=CompInfoFile.exe
+root.appGroupName1=CompInfo_Group
+root.appIconFileSize1=461
+root.appIconFileName1=C:\resource\install\icon\0x80286fe1\sifgetcompapparcinfotest_01.mbm
+
+[GetComponentAppInfo_MultiApp_OneAppWithNonApparcRsc]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotestmultiapp_OneAppWithNonApparcRsc.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompapparcinfotestmultiappOneAppCorrupt_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001107
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=1
+root.appUid0=80286FE2
+root.appName0=CompInfoMultipleFile.exe
+root.appGroupName0=CompInfo_Group
+root.appIconFileSize0=125584
+root.appIconFileName0=C:\resource\install\icon\0x80286fe2\sifgetcompapparcinfotestmultilang_01.mbm
+
+[GetComponentAppInfo_NonApparcPath]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotestnonapparcpath.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompinfotestnnapparcpath_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001106
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=0
+
+[GetComponentAppInfoMultipleLangs_EquivalentMatch]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotestmultilang.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompapparcinfotestmultilang_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001103
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=1
+root.appUid0=80286FE2
+root.appName0=CompInfoMultipleFile.exe
+root.appGroupName0=CompInfo_Group
+root.appIconFileSize0=125584
+root.appIconFileName0=C:\resource\install\icon\0x80286fe2\sifgetcompapparcinfotestmultilang_24.mbm
+
+[GetComponentAppInfo_CorruptRsc]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotest_corruptrsc.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompinfotestCorruptRsc_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001109
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=0
+
+[GetComponentAppInfoEmbedded_InnerWithDiffIcon]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotestembedded_innerwithdifficon.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompinfotestembedded_innerwithdifficon_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001110
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=1
+root.appUid0=80286FE1
+root.appName0=CompInfoFile.exe
+root.appGroupName0=CompInfo_Group
+root.appIconFileSize0=125576
+root.appIconFileName0=C:\resource\install\icon\0x80286fe1\sifgetcompapparcinfotest_01.mbm
+root.numChildren=1
+root.child0.softwareTypeName=native
+root.child0.componentName=sifgetcompapparcinfotestmultilang_EN
+root.child0.componentVersion=1.0.0
+root.child0.componentVendor=Symbian Software Ltd
+root.child0.scomoState=0
+root.child0.installStatus=0
+root.child0.componentId=0
+root.child0.globalComponentId=88001103
+root.child0.authenticity=1
+root.child0.userGrantableCapsBitMask=1046414
+root.child0.maxInstalledSize=125169
+root.child0.hasExecutable=True
+root.child0.driveSelectionRequired=True
+root.child0.noOfApps=1
+root.child0.appUid0=80286FE2
+root.child0.appName0=CompInfoMultipleFile.exe
+root.child0.appGroupName0=CompInfo_Group
+root.child0.appIconFileSize0=125584
+root.child0.appIconFileName0=C:\resource\install\icon\0x80286fe2\sifgetcompapparcinfotestmultilang_01.mbm
+
+[GetComponentAppInfo_WithSameIcon]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotest.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompinfotest_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001102
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=1
+root.appUid0=80286FE1
+root.appName0=CompInfoFile.exe
+root.appGroupName0=CompInfo_Group
+root.appIconFileSize0=125576
+root.appIconFileName0=C:\resource\install\icon\0x80286fe1\sifgetcompapparcinfotest_011.mbm
+
+[GetComponentAppInfo_NoLocale]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotest_nolocale.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompinfotestnolocale_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001112
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=1
+root.appUid0=80286FE1
+root.appName0=CompInfoFile.exe
+root.appGroupName0=AppNameGroup
+root.appIconFileSize0=0
+root.appIconFileName0=
+
+[GetComponentAppInfo_largeandsmallextn]
+packageFile=z:\tusif\tsif\data\sifgetcompapparcinfotestmultifiles_largeandsmallextn.sis
+compareMaxInstalledSize=False
+compareIconFileSize=False
+operationByFileHandle=False
+root.softwareTypeName=native
+root.componentName=sifgetcompinfotestmultifiles_EN
+root.componentVersion=1.0.0
+root.componentVendor=Symbian Software Ltd
+root.scomoState=1
+root.installStatus=0
+root.componentId=0
+root.globalComponentId=88001104
+root.authenticity=1
+root.userGrantableCapsBitMask=778240
+root.maxInstalledSize=125169
+root.hasExecutable=True
+root.driveSelectionRequired=True
+root.noOfApps=1
+root.appUid0=80286FE1
+root.appName0=CompInfoFile.exe
+root.appGroupName0=CompInfo_Group
+root.appIconFileSize0=125576
+root.appIconFileName0=C:\resource\install\icon\0x80286fe1\sifgetcompapparcinfotest_01.mbm
+
+
+[delete_iconfile_multilang]
+DbFilePath=C:\resource\install\icon\0x80286fe2\sifgetcompapparcinfotestmultilang_01.mbm
+JournalFilePath=C:\resource\install\icon\0x80286fe1\fake.mbm
+
+[delete_iconfile]
+DbFilePath=C:\resource\install\icon\0x80286fe1\sifgetcompapparcinfotest_01.mbm
+JournalFilePath=C:\resource\install\icon\0x80286fe1\fake.mbm
+
+[delete_iconfile_fr]
+DbFilePath=C:\resource\install\icon\0x80286fe2\sifgetcompapparcinfotestmultilang_24.mbm
+JournalFilePath=C:\resource\install\icon\0x80286fe1\fake.mbm
+
+[delete_iconfile_ge]
+DbFilePath=C:\resource\install\icon\0x80286fe2\sifgetcompapparcinfotestmultilang_03.mbm
+JournalFilePath=C:\resource\install\icon\0x80286fe1\fake.mbm
+
+
+[delete_iconfile_edited]
+DbFilePath=C:\resource\install\icon\0x80286fe1\sifgetcompapparcinfotest_011.mbm
+JournalFilePath=C:\resource\install\icon\0x80286fe1\fake.mbm
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/tsifintegration.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,712 @@
+//
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Run all USIF integration tests
+
+// Delete the SCR Database file
+LOAD_SUITE tscr
+LOAD_SUITE tSisRegistryTest
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+
+LOAD_SUITE tUsifSuite
+
+// ************************ Integration test cases ************************
+
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0001
+//! @SYMTestCaseDesc 		Getting information about a component
+//! @SYMTestStatus 		3. Released
+ 
+START_TESTCASE API-SEC-USIF-tsifintegration-0001
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoByFileName
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoByFileHandle
+RUN_TEST_STEP !Result=-9 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoOverflowByFileName
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoByFileNameForUninstalledCompoundComponent
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoByFileHandleForUninstalledCompoundComponent
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0001
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0002
+//! @SYMTestCaseDesc 		Installation/uninstallation of a native component through SIF by file name/handle
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0002
+
+// by file name
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini InstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+// by file handle
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini InstallByFileHandle
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+// compound package by file name
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootPkgNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild0PkgNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild1PkgNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild2PkgNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild0Child0PkgNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini InstallCompoundComponentByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootPkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild0PkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild1PkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild2PkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild0Child0PkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRootPkgByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRootChild0PkgByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRootChild1PkgByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRootChild2PkgByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRootChild0Child0PkgByNameAndVendor
+// compound package by file handle
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootPkgNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild0PkgNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild1PkgNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild2PkgNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild0Child0PkgNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini InstallCompoundComponentByFileHandle
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootPkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild0PkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild1PkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild2PkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRootChild0Child0PkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRootPkgByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRootChild0PkgByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRootChild1PkgByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRootChild2PkgByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRootChild0Child0PkgByNameAndVendor
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0002
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0003
+//! @SYMTestCaseDesc 		Generic browser installation by file name/handle
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0003
+
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRefPackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifGenericBrowserInstallStep z:\tusif\tsifintegration\tsifintegration.ini GenericBrowserInstallRefPkgByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRefBasePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRefPkgByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRefPackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifGenericBrowserInstallStep z:\tusif\tsifintegration\tsifintegration.ini GenericBrowserInstallRefPkgByFileHandle
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRefUpgradePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallRefPkgByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyRefPackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0003
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0004
+//! @SYMTestCaseDesc 		SCOMO install inactivate
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0004
+
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini InstallInactiveByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyInactivePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0004
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0007
+//! @SYMTestCaseDesc 		Upgrade of a native component through SIF
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0007
+
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini InstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini UpgradeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyUpgradePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0007
+
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0008
+//! @SYMTestCaseDesc		Incorrect Upgrade of a native component through SIF
+//! @SYMTestStatus		3. Released
+START_TESTCASE API-SEC-USIF-tsifintegration-0008
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini InstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageExistence
+RUN_TEST_STEP !Result=-10301 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini InvalidUpgradeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+END_TESTCASE API-SEC-USIF-tsifintegration-0008
+
+
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0009
+//! @SYMTestCaseDesc 		Asynchronous cancellation of native installation
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0009
+
+RUN_TEST_STEP !Result=-3 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini AsynchronousCancelInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+RUN_TEST_STEP !Result=-3 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini AsynchronousCancelInstallByFileHandle
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0009
+
+
+// Ensure clean database before the following tests (0011 - 0020), as they rely on component ids starting from 1
+// Get the component information for a new base(SA type) component when it wasn't installed on the device and check that
+// the information retrieved is as expected.
+
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0010
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0010
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForNewNativeBaseCompByFileName
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForNewNativeBaseCompByFileHandle
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0010
+
+
+// Get the base(SA type) component information when the same component was already installed on the device and check that 
+// the information retrieved is as expected.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0011
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0011
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep            z:\tusif\tsifintegration\tsifintegration.ini InstallComponentInfoIntegByFileName
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForInstalledNativeBaseByFileName
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForInstalledNativeBaseByFileHandle
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep          z:\tusif\tsifintegration\tsifintegration.ini UninstallComponentInfoInteg
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0011
+
+
+// Get the Upgrading(PU type) component information when the base(SA type) component was already installed on the device
+// and check that the information retrieved is matching with the expected values.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0012
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0012
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep            z:\tusif\tsifintegration\tsifintegration.ini InstallComponentInfoIntegByFileName
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForUpgradeByFNWhenBaseInstalled
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep 	       z:\tusif\tsifintegration\tsifintegration.ini UninstallComponentInfoInteg
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0012
+
+
+// Get the Upgrading(PU type) component information when the base(SA type) component was not installed on the device and 
+// check that the install status in retrieved info results in base package missing.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0013
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0013
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForUpgradeByFNWhenBaseMissing
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0013
+
+
+// Get the Patch(SP type) component information when the base(SA type) component was already installed on the device
+// and check that the information retrieved is matching with the expected values.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0014
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0014
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep            z:\tusif\tsifintegration\tsifintegration.ini InstallComponentInfoIntegByFileName
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForPatchByFNWhenBaseInstalled
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep 	       z:\tusif\tsifintegration\tsifintegration.ini UninstallComponentInfoInteg
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0014
+
+
+// Get the Patch(SP type) component information when the base(SA type) component was not installed on the device and
+// check that the install status in retrieved info results in base package missing.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0015
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0015
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForPatchByFNWhenBaseMissing
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0015
+
+
+// Get component information when the base component has a higher version
+// and check that the install status in retrieved info results in ENewerVersionAlreadyInstalled.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0016
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0016
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep            z:\tusif\tsifintegration\tsifintegration.ini InstallComponentInfoIntegByFileName
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep            z:\tusif\tsifintegration\tsifintegration.ini InstallComponentInfoIntegUpgradeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForUpgradeByFNWhenHigherInstalled
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep 	       z:\tusif\tsifintegration\tsifintegration.ini UninstallComponentInfoInteg
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0016
+
+
+// Get the component information for the new base(SA type) package with User Grantable capabilities, signed by a trusted CA
+// and check that the authenticity and userGrantableCapsBitMask in the retrieved info is equal to  EValidatedToAnchor(50) 
+// and 98304 (ReadUserData & WriteUserData) respectively.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0017
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0017
+
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForBaseWithUserCapsByFileName
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0017
+
+
+// Get the component information for the base(SA) component with an exe which doesn't have any cpability and 
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0018
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0018
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForNoCapabilityBaseByFileName
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0018
+
+
+// Check whether the get component info request is cancelable.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0019
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0019
+
+RUN_TEST_STEP !Result=-3 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini CancelAsyncGetCompInfoRequestByFileName
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0019
+
+
+// Get the component information for the base (SA type) package with the package name and vendor name are empty and 
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0020
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0020
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoForEmptyNameAndVendor
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0020
+
+
+// Get the component information for the set of embedded components in the order of EmbeddingBaseWithEXE->EmbeddedBaseWithUserCapsEXE and 
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0021
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0021
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForEmbeddedWithExes
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0021
+
+
+// Get the component information for the set of embedded components in the order of EmbeddingBase->Embedded1->Embedded2 and 
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID 		API-SEC-USIF-tsifintegration-0022
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0022
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForEmbededNativePackages
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0022
+
+
+// Get the component information for the set of embedded components in the order of EmbeddingBaseWithText->EmbeddedWithExe and
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0023
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0023
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetCompInfoForEmbeddedWithTextAndInnerWithExe
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0023
+
+
+// Get the component information for multiple files in a sis file, first file is text file and second is executable 
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0024
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0024
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoWithMultipleFiles
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0024
+
+
+// Get the component information for multiple files with extension in different case
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0025
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0025
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoWithExtensionInDifferentCase
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0025
+
+
+// Get the component information for sis file containing only one dll
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0026
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0026
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoWithOnlyDll
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0026
+
+
+// Slient installation : Self-signed package
+START_TESTCASE API-SEC-USIF-tsifintegration-00027
+// by file name
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+RUN_TEST_STEP !Result=-5 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini SilentInstallSelfSignedByName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+// by file handle
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+RUN_TEST_STEP !Result=-5 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini SilentInstallSelfSignedByHandle
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini VerifyPackageNonExistence
+END_TESTCASE API-SEC-USIF-tsifintegration-00027
+
+// Slient installation : Signed package
+START_TESTCASE API-SEC-USIF-tsifintegration-00028
+// by file name
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini SignedPkgNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini SilentInstallSignedByName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini SignedPkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallSignedPkg
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini SignedPkgNonExistence
+// by file handle
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini SilentInstallSignedByHandle
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini SignedPkgExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallSignedPkg
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini SignedPkgNonExistence
+END_TESTCASE API-SEC-USIF-tsifintegration-00028
+
+// Slient installation : Signed package with less capabilities (Package needs some capabilities additional to the ones 
+// granted by the certificate used to sign it)
+START_TESTCASE API-SEC-USIF-tsifintegration-00029
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini SignedLessCapsNonExistence
+RUN_TEST_STEP !Result=-5 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini SignedLessCapsPkg
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tsifintegration\tsifintegration.ini SignedLessCapsNonExistence
+END_TESTCASE API-SEC-USIF-tsifintegration-00029
+
+
+// Get the component information for a PU Upgrade, first base SA package with drive hard coded is installed
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0030
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0030
+
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tsifintegration\tsifintegration.ini InstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoForPuUpgradeWithDriveDialog
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallByNameAndVendor
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0030
+
+
+// Get the component information for a sis file where drive is not hard coded
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0031
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0031
+
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoForBaseWithDriveDialog
+
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0031
+
+// Get the component information for a pu upgrade sis file without drive dialog,base package with drive dialog
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0032
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0032
+
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep  z:\tusif\tsifintegration\tsifintegration.ini InstallByFileWithDriveDialog
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoForPuUpgradeWithioutDriveDialog
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tsifintegration\tsifintegration.ini UninstallByNameAndVendor
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0032
+
+// Get the component information for a sis file(pu upgrade) embedded within another sis file, outer sis(with drive info) is the base package for this pu upgrade
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0033
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0033
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoForEmbeddedInnnerWithUpgrade
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0033
+
+// Get the component information for a sis file(pu upgrade) embedded within another sis file, outer sis(without drive info) is the base package for this pu upgrade
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0034
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0034
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentInfoForEmbeddedInnnerWithUpgradeOuterAsBaseWithDriveDialog
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0034
+
+// Get the component information inclusing application info for a sis file having onle locale
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0035
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0035
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfo
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0035
+
+
+// Get the component information inclusing application info for a sis file having multiple locales
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0036
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0036
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfoMultipleLangs
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile_multilang
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0036
+
+
+
+// Get the component information(for the current locale) including application info for a sis file having multiple locales
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0037
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0037
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfoMultipleLangs_German
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile_ge
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0037
+
+
+// Get the component information inclusing application info for a sis file having an app with non apparc files in addtion to appac files
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0038
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0038
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfoMultiplefiles
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0038
+
+
+// Get the component information inclusing application info for a sis file having one locale, it will give the default loacle info
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0039
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0039
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfo
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0039
+
+
+// Get the component information inclusing application info for a sis file having one locale
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0040
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0040
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfo_NonApparcRegRsc
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0040
+
+
+// Get the component information inclusing application info for a sis file having multiple application with one app with non apparc reg rsc
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0041
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0041
+
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfo_MultiApp_OneAppWithNonApparcRsc
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile_multilang
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0041
+
+
+// Get the component information including application info for a sis file having an application where target of reg rsc in not apparc's pvt folder
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0042
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0042
+
+RUN_TEST_STEP_Result 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfo_NonApparcPath
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0042
+
+// Get the component information including application info for a sis file having multiple applications
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0043
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0043
+
+RUN_TEST_STEP_Result 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfo_MultiApp
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile_multilang
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0043
+
+// Get the component information including application info for a sis file having multiple applications,where we have an equivalent match
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0044
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0044
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_french
+RUN_TEST_STEP_Result 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfoMultipleLangs_EquivalentMatch
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile_fr
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0044
+
+// Get the component information including application info for a sis file having an application with corrupt reg rsc
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0045
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0045
+
+RUN_TEST_STEP_Result 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfo_CorruptRsc
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0045
+
+
+// Get the component information including application info for an embedded sis file both ineer and ourt having different icon file
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0012
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0046
+
+RUN_TEST_STEP tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfoEmbedded_InnerWithDiffIcon
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile_multilang
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0046
+
+
+// Get the component information including application info for two sis file both having same icon file
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0047
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0047
+
+RUN_TEST_STEP tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfo
+RUN_TEST_STEP tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfo_WithSameIcon
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile_edited
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0047
+
+
+// Get the component information including application info for a sis file not having any locale
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0048
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0048
+
+RUN_TEST_STEP tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfo_NoLocale
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0048
+
+// Get the component information including application info for a sis file having lagre and small extns
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0049
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0049
+
+RUN_TEST_STEP tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfo_largeandsmallextn
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0049
+
+// Get the component information inclusing application info for a sis file having multiple locales, first check for german then for english
+// check that the retrieved info matches with the expected values.
+//! @SYMTestCaseID		API-SEC-USIF-tsifintegration-0050
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifintegration-0050
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_german
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfoMultipleLangs_German
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale z:\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini langauge_to_english
+RUN_TEST_STEP 100 tUsifSuite SifGetComponentInfoStep   z:\tusif\tsifintegration\tsifintegration.ini GetComponentAppInfoMultipleLangs
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile_ge
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tsifintegration\tsifintegration.ini delete_iconfile_multilang
+
+END_TESTCASE API-SEC-USIF-tsifintegration-0050
+
+// Wait 3 seconds in order to let the SIF server shutdown itself
+DELAY 3000
+
+PRINT Complate_te_Sif_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/tsifswtypeintegration.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,99 @@
+
+[InstallSwTypeByFileName]
+packageFile=z:\tusif\tswtype\data\sifswtypebase.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[InstallUpgradeSwTypeByFileName]
+packageFile=z:\tusif\tswtype\data\sifswtypeupgrade.sis
+operationByFileHandle=False
+useEnhancedApi=False
+
+[UninstallSwTypeByNameAndVendor]
+componentName=Sif LEE Integration Test
+componentVendor=Security Team
+useEnhancedApi=False
+
+[VerifySwTypePackageNonExistence]
+verifyExistence=False
+componentName=Sif LEE Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+
+[VerifySwTypePackageExistence]
+verifyExistence=True
+componentName=Sif LEE Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+executableReturnCode=1397310977
+scomoState=1
+
+[VerifyUpgradeSwTypePackageExistence]
+verifyExistence=True
+componentName=Sif LEE Integration Test
+componentVendor=Security Team
+executableName=sifIntegrationTest.exe
+executableReturnCode=1397310978
+scomoState=1
+
+[VerifyNonNativePackageNonExistence]
+verifyExistence=False
+checkSisRegistry=False
+componentName=test.siftestpkg
+componentVendor=Test Vendor
+packageFile0=c:\tusif\tsif\nonnativeplugin2\test.siftestpkg\file0
+packageFile1=c:\tusif\tsif\nonnativeplugin2\test.siftestpkg\file1
+packageFile2=c:\tusif\tsif\nonnativeplugin2\test.siftestpkg\file2
+
+[NonNativeInstallByFileName]
+packageFile=z:\tusif\tswtype\data\test.siftestpkg
+operationByFileHandle=False
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin2
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+pluginRefOpaqueResultName1=ComponentId
+pluginRefOpaqueResultType1=String
+pluginRefOpaqueResultValue1=__ANY_VALUE_PERMITTED__
+
+[VerifyNonNativePackageExistence]
+verifyExistence=True
+checkSisRegistry=False
+componentName=test.siftestpkg
+componentVendor=Test Vendor
+packageFile0=c:\tusif\tsif\nonnativeplugin2\test.siftestpkg\file0
+packageFile1=c:\tusif\tsif\nonnativeplugin2\test.siftestpkg\file1
+packageFile2=c:\tusif\tsif\nonnativeplugin2\test.siftestpkg\file2
+scomoState=0
+
+[NonNativeUninstallByNameAndVendor]
+componentName=test.siftestpkg
+componentVendor=Test Vendor
+useEnhancedApi=True
+pluginRefOpaqueResultName0=NonNativePlugin2
+pluginRefOpaqueResultType0=Int
+pluginRefOpaqueResultValue0=1
+
+[NonNativeUninstallByNameAndVendorNoOpaque]
+componentName=test.siftestpkg
+componentVendor=Test Vendor
+useEnhancedApi=True
+
+[BackupRestoreSoftwareType]
+SIS1=z:\tusif\tswtype\data\sifswtypebase.sis
+UID1=77534946
+FILE1.1=c:\resource\usif\leestore\77534946.xml
+FILE1.2=c:\sys\bin\testnonnativeplugin2.dll
+FILE1.3=c:\resource\plugins\testnonnativeplugin2.rsc
+FILE1.4=c:\sys\bin\tsifpkgrec.dll
+FILE1.5=c:\resource\plugins\tsifpkgrec.rsc
+FILE1.6=c:\sys\bin\sifIntegrationTest.exe
+INSTALLDRIVE1=C
+
+[GenericBrowserInstallByFileName]
+packageFile=z:\tusif\tswtype\data\test.siftestpkg
+operationByFileHandle=False
+
+[ActivateTestPackage]
+componentName=test.siftestpkg
+componentVendor=Test Vendor
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/scripts/tsifswtypeintegration.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,338 @@
+//
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+// Integration tests for Post manufacture installation of a Layered Execution
+// Environment run on hardware only. This is because a LEE must register a MIME
+// type recognizer in order to be invoked by the SIF. A MIME type recognizer is
+// an ECOM plug-in that cannot be uninstalled properly on the WINSCW Emulator.
+// This is because Windows locks dlls being loaded and therefore uninstallation
+// of an ECOM plug-in fails.
+// However, if you really want to launch the test below, please ensure that:
+// 1) folder \epoc32\release\winscw\udeb\z\resource\plugins doesn't contain
+// the following files: files testnonnativeplugin2.rsc, tsifpkgrec.rsc
+// 2) folder \epoc32\release\winscw\udeb doesn't contain the following files:
+// files testnonnativeplugin2.dll, tsifpkgrec.dll
+// 3) z:\resource\swicertstore.dat allows for installation of packages with
+// the TrustedUI and ProtServ capabilities. In order to do this, please overwrite
+// this file with security\swi\test\tsisfile\data\signedsis\swicertstore.dat
+
+PRINT Run integration tests for Post manufacture installation of a Layered Execution Environment
+
+// Delete the SCR Database file
+LOAD_SUITE tscr
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+
+LOAD_SUITE tUsifSuite
+
+//################################################################################
+// This test case installs a Layered Execution Environment and in turn uses
+// it to install a non-native package. Finally, the test uninstalls both packages.
+//################################################################################
+//! @SYMTestCaseID 		API-SEC-USIF-tsifswtypeintegration-0001
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifswtypeintegration-0001
+
+// Install the LEE
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini InstallSwTypeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageExistence
+
+// Wait 3 seconds in order to let AppArc discover the MIME type recognizer we have just installed as part of LEE
+DELAY 3000
+
+// Install and uninstall the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeUninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+
+// Uninstall the LEE
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini UninstallSwTypeByNameAndVendor
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifswtypeintegration-0001
+
+
+//####################################################################################
+// This test case installs a base package containing a Layered Execution Environment
+// and in turn uses it to install and uninstall a non-native package. Then, it
+// installs an upgrade package of the LEE and in turn uses it to install and uninstall
+// the non-native package again. Finally, the test uninstalls the LEE.
+//####################################################################################
+//! @SYMTestCaseID 		API-SEC-USIF-tsifswtypeintegration-0002
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifswtypeintegration-0002
+
+// Install the LEE
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini InstallSwTypeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageExistence
+
+// Wait 3 seconds in order to let AppArc discover the MIME type recognizer we have just installed
+DELAY 3000
+
+// Install and uninstall the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeUninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+
+// Upgrade the LEE
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini InstallUpgradeSwTypeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyUpgradeSwTypePackageExistence
+
+// Wait 3 seconds in order to let AppArc re-discover the MIME type recognizer we have just installed
+DELAY 3000
+
+// Install and uninstall the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeUninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+
+// Uninstall the LEE
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini UninstallSwTypeByNameAndVendor
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifswtypeintegration-0002
+
+//################################################################################
+// This test case installs a Layered Execution Environment. Then this LEE is
+// backuped and restored and in turn used to install and uninstall a non-native
+// package. Finally, the test uninstalls the LEE.
+//################################################################################
+//! @SYMTestCaseID 		API-SEC-USIF-tsifswtypeintegration-0003
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifswtypeintegration-0003
+
+LOAD_SUITE tbackuprestore
+
+// Make sure the test directory exists
+RUN_UTILS MkDir c:\tswi\
+RUN_UTILS MkDir c:\tswi\tbackuprestore\
+
+// Install the LEE
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini InstallSwTypeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageExistence
+
+// Wait 3 seconds in order to let AppArc discover the MIME type recognizer we have just installed as part of LEE
+DELAY 3000
+
+// Backup the LEE
+RUN_TEST_STEP 100 tbackuprestore BACKUP z:\tusif\tswtype\tsifswtypeintegration.ini BackupRestoreSoftwareType
+
+// Uninstall the LEE
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini UninstallSwTypeByNameAndVendor
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+
+// Restore the LEE
+RUN_TEST_STEP 100 tbackuprestore RESTORE z:\tusif\tswtype\tsifswtypeintegration.ini BackupRestoreSoftwareType
+
+// Wait 3 seconds in order to let AppArc discover the MIME type recognizer we have just restored as a part of the LEE
+DELAY 3000
+
+// Install and uninstall the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeUninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+
+// Uninstall the LEE
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini UninstallSwTypeByNameAndVendor
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifswtypeintegration-0003
+
+
+//##################################################################################
+// This test case installs a Layered Execution Environment and in turn uses it to
+// install a non-native package. Then, the test uninstalls the LEE so the non-native
+// package becomes orphaned. Finally, the test installs the LEE again in order to
+// uninstall the non-native plugin and the LEE.
+//##################################################################################
+//! @SYMTestCaseID 		API-SEC-USIF-tsifswtypeintegration-0004
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifswtypeintegration-0004
+
+// Install the LEE
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini InstallSwTypeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageExistence
+
+// Wait 3 seconds in order to let AppArc discover the MIME type recognizer we have just installed as part of LEE
+DELAY 3000
+
+// Install the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageExistence
+
+// Uninstall the LEE
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini UninstallSwTypeByNameAndVendor
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+
+// Install the LEE again
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini InstallSwTypeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageExistence
+
+// Wait 3 seconds in order to let AppArc discover the MIME type recognizer we have just installed as part of LEE
+DELAY 3000
+
+// Uninstall the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeUninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+
+// Uninstall the LEE
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini UninstallSwTypeByNameAndVendor
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifswtypeintegration-0004
+
+
+//##################################################################################
+// Tests the default uninstaller. The test case installs a Layered Execution 
+// Environment (LEE) and uses it to install a non-native package. The LEE is then 
+// uninstalled. It then tries to uninstall the non-native package using the default 
+// uninstaller provided in SIF Utils Library
+//##################################################################################
+//! @SYMTestCaseID 		API-SEC-USIF-tsifswtypeintegration-0005
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifswtypeintegration-0005
+
+// Install the LEE
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini InstallSwTypeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageExistence
+
+// Wait 3 seconds in order to let AppArc discover the MIME type recognizer we have just installed as part of LEE
+DELAY 3000
+
+// Install the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageExistence
+
+// Uninstall the LEE
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini UninstallSwTypeByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+
+// Uninstall the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeUninstallByNameAndVendorNoOpaque
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifswtypeintegration-0005
+
+
+//##################################################################################
+// This test case installs a Layered Execution Environment and in turn uses it to
+// install a non-native package through the RApaLsSession::StartDocument() API.
+// Then, the test uninstalls the LEE so the non-native package becomes orphaned.
+// Finally, the test installs the LEE again in order to uninstall the non-native
+// plugin and the LEE.
+//##################################################################################
+//! @SYMTestCaseID 		API-SEC-USIF-tsifswtypeintegration-0006
+//! @SYMTestStatus 		3. Released
+
+START_TESTCASE API-SEC-USIF-tsifswtypeintegration-0006
+
+// Install the LEE
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini InstallSwTypeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageExistence
+
+// Wait 3 seconds in order to let AppArc discover the MIME type recognizer we have just installed as part of LEE
+DELAY 3000
+
+// Install the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifGenericBrowserInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini GenericBrowserInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageExistence
+
+// Uninstall the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeUninstallByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+
+// Uninstall the LEE
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini UninstallSwTypeByNameAndVendor
+RUN_TEST_STEP !Result=-10303 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+
+END_TESTCASE API-SEC-USIF-tsifswtypeintegration-0006
+
+
+//##################################################################################
+// Tests the actvation of package  after uninstalling LEE . The test case installs a  
+// Layered Execution Environment (LEE) and uses it to install a non-native package.  
+// Then uninstall LEE and try to activat SCOMO state and then uninstall non-native 
+// package using the default uninstaller provided in SIF Utils Library
+//##################################################################################
+START_TESTCASE SEC-USIF-tsifswtypeintegration-0007
+
+// Install the LEE
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini InstallSwTypeByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageExistence
+
+// Wait 3 seconds in order to let AppArc discover the MIME type recognizer we have just installed as part of LEE
+DELAY 3000
+
+// Install the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+RUN_TEST_STEP 100 tUsifSuite SifInstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeInstallByFileName
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageExistence
+
+// Uninstall the LEE
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini UninstallSwTypeByNameAndVendor
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifySwTypePackageNonExistence
+
+//Activate SCOMO state
+RUN_TEST_STEP !Result=-1 100  tUsifSuite SifActivateStep z:\tusif\tswtype\tsifswtypeintegration.ini ActivateTestPackage
+
+// Uninstall the non-native package
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageExistence
+RUN_TEST_STEP 100 tUsifSuite SifUninstallStep z:\tusif\tswtype\tsifswtypeintegration.ini NonNativeUninstallByNameAndVendorNoOpaque
+RUN_TEST_STEP 100 tUsifSuite SifCommonVerificationStep z:\tusif\tswtype\tsifswtypeintegration.ini VerifyNonNativePackageNonExistence
+
+END_TESTCASE SEC-USIF-tsifswtypeintegration-0007
+
+// Wait 3 seconds in order to let the SIF server shutdown itself
+DELAY 3000
+
+PRINT Complate_te_Sif_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/01/01-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for UK
+//
+
+rls_string STRING_r_example_short_caption "HW"
+rls_string STRING_r_example_caption "helloworld"
+rls_string STRING_r_example_iconfile "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_01.mbm"
+rls_string STRING_r_example_iconfile1 "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_01.mbm"
+rls_string STRING_r_example_iconfile2 "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotest\\sifgetcompapparcinfotest_01.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123121_caption_eng"
+rls_string STRING_r_view_268123124_caption "view_268123122_caption_eng"
+rls_long Long_NumberOfIcon1 2
+rls_long Long_NumberOfIcon2 1
+rls_long Long_NumberOfIcon3 2
+rls_long Long_uid1 268123121
+rls_long Long_uid2 268123122
+rls_long Long_screenmode1 0x00
+rls_long Long_screenmode2 0x01
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/03/03-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise03strings
+// Strings localised for German
+//
+
+rls_string STRING_r_example_short_caption "Hallo"
+rls_string STRING_r_example_caption "Hallo_Welt"
+rls_string STRING_r_example_iconfile "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_03.mbm"
+rls_string STRING_r_example_iconfile1 "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_03.mbm"
+rls_string STRING_r_example_iconfile2 "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_03.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123123_caption_ger"
+rls_string STRING_r_view_268123124_caption "view_268123124_caption_ger"
+rls_long Long_NumberOfIcon1 0
+rls_long Long_NumberOfIcon2 3
+rls_long Long_NumberOfIcon3 4
+rls_long Long_uid1 268123123
+rls_long Long_uid2 268123124
+rls_long Long_screenmode1 0x03
+rls_long Long_screenmode2 0x04
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/04/04-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for Spanish
+//
+
+rls_string STRING_r_example_short_caption "HW_Spain"
+rls_string STRING_r_example_caption "hello_spain"
+rls_string STRING_r_example_iconfile "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_04.mbm"
+rls_string STRING_r_example_iconfile1 "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_04.mbm"
+rls_string STRING_r_example_iconfile2 "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_04.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123125_caption_spn"
+rls_string STRING_r_view_268123124_caption "view_268123126_caption_spn"
+rls_long Long_NumberOfIcon1 2
+rls_long Long_NumberOfIcon2 5
+rls_long Long_NumberOfIcon3 6
+rls_long Long_uid1 268123125
+rls_long Long_uid2 268123126
+rls_long Long_screenmode1 0x05
+rls_long Long_screenmode2 0x06
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/102866F0.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* UIDs quick-ref
+* ECOM DLL UID:			0x102866F0
+* ECOM interface UID:		0x101F7D87
+* ECOM Implementation:		0x102866F1
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+RESOURCE REGISTRY_INFO r_registry
+{
+	dll_uid = 0x102866F0;
+	interfaces =
+	{
+		INTERFACE_INFO
+		{
+		interface_uid = 0x101F7D87;	// Const for all data recognisers
+		implementations = 
+			{
+			IMPLEMENTATION_INFO
+				{
+				implementation_uid = 0x102866F1;
+				version_no = 1;
+				display_name = "tsifpkgrec";
+				default_data = "";
+				opaque_data = "";
+				}
+			};
+		}
+	};
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/24/24-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for French International
+//
+
+rls_string STRING_r_example_short_caption "HW_FR"
+rls_string STRING_r_example_caption "hello_French"
+rls_string STRING_r_example_iconfile "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_24.mbm"
+rls_string STRING_r_example_iconfile1 "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_24.mbm"
+rls_string STRING_r_example_iconfile2 "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_24.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123127_caption_fr"
+rls_string STRING_r_view_268123124_caption "view_268123128_caption_fr"
+rls_long Long_NumberOfIcon1 2
+rls_long Long_NumberOfIcon2 7
+rls_long Long_NumberOfIcon3 8
+rls_long Long_uid1 268123127
+rls_long Long_uid2 268123128
+rls_long Long_screenmode1 0x07
+rls_long Long_screenmode2 0x08
Binary file installationservices/swinstallationfw/test/tusif/source/icon3M.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/rsc/rsc-strings.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// localise01strings
+// Strings localised for UK
+//
+
+rls_string STRING_r_example_short_caption "HW"
+rls_string STRING_r_example_caption "helloworld"
+rls_string STRING_r_example_iconfile "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotest\\sifgetcompapparcinfotest_01.mbm"
+rls_string STRING_r_example_iconfile1 "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotest\\sifgetcompapparcinfotest_01.mbm"
+rls_string STRING_r_example_iconfile2 "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotest\\sifgetcompapparcinfotest_01.mbm"
+rls_string STRING_r_view_268123123_caption "view_268123121_caption_eng"
+rls_string STRING_r_view_268123124_caption "view_268123122_caption_eng"
+rls_long Long_NumberOfIcon1 2
+rls_long Long_NumberOfIcon2 1
+rls_long Long_NumberOfIcon3 2
+rls_long Long_uid1 268123121
+rls_long Long_uid2 268123122
+rls_long Long_screenmode1 0x00
+rls_long Long_screenmode2 0x01
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/sifgetcompapparcinfotest_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/**
+ @file sifgetcompinfotest1_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#elif defined LANGUAGE_04  // if language code is for Spanish
+ #include "04/04-strings.rls"
+#elif defined LANGUAGE_24  // if language code is for French International
+ #include "24/24-strings.rls"
+#else   // if nothing id defined take english
+ #include "rsc/rsc-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+	    caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+	            number_of_icons = Long_NumberOfIcon1;
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        };                          
+	    //
+	    view_list =
+	        {
+	        VIEW_DATA
+	            {
+				uid = Long_uid1;
+				screen_mode = Long_screenmode1;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123123_caption;
+						number_of_icons = Long_NumberOfIcon2;
+						icon_file = STRING_r_example_iconfile1;
+	                    }
+	                };                          
+	            },
+	        VIEW_DATA
+	            {
+				uid = Long_uid2;
+	            screen_mode = Long_screenmode2;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123124_caption;
+						number_of_icons = Long_NumberOfIcon3;
+	                    icon_file = STRING_r_example_iconfile2;
+	                    }
+	                };
+	            }
+	        };
+	    group_name = "CompInfo_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/sifgetcompapparcinfotest_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/**
+ @file testapplication_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <sifgetcompapparcinfotest_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x80286FE1
+	
+
+
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "CompInfoFile";
+	localisable_resource_file = "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotest\\sifgetcompapparcinfotest_loc";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="c:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="c:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/sifgetcompapparcinfotestmultilang_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/**
+ @file sifgetcompinfotest1_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#elif defined LANGUAGE_04  // if language code is for Spanish
+ #include "04/04-strings.rls"
+#elif defined LANGUAGE_24  // if language code is for French International
+ #include "24/24-strings.rls"
+#else   // if nothing id defined take english
+ #include "rsc/rsc-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+	    caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+	            number_of_icons = Long_NumberOfIcon1;
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        };                          
+	    //
+	    view_list =
+	        {
+	        VIEW_DATA
+	            {
+				uid = Long_uid1;
+				screen_mode = Long_screenmode1;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123123_caption;
+						number_of_icons = Long_NumberOfIcon2;
+						icon_file = STRING_r_example_iconfile1;
+	                    }
+	                };                          
+	            },
+	        VIEW_DATA
+	            {
+				uid = Long_uid2;
+	            screen_mode = Long_screenmode2;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123124_caption;
+						number_of_icons = Long_NumberOfIcon3;
+	                    icon_file = STRING_r_example_iconfile2;
+	                    }
+	                };
+	            }
+	        };
+	    group_name = "CompInfo_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/sifgetcompapparcinfotestmultilang_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/**
+ @file testapplication_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <sifgetcompapparcinfotestmultilang_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x80286FE2
+	
+
+
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "CompInfoMultipleFile";
+	localisable_resource_file = "z:\\tusif\\tsif\\data\\sifgetcompapparcinfotestmultilang\\sifgetcompapparcinfotestmultilang_loc";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="c:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="c:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/sifgetcompinfotest1_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/**
+ @file sifgetcompinfotest1_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <techview/eikon.rh>
+#include <uiklafgt/eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+// Conditional compile, depending on locale
+#ifdef LANGUAGE_01    // if language code is for UK
+ #include "01/01-strings.rls"
+#elif defined LANGUAGE_03  // if language code is for German
+ #include "03/03-strings.rls"
+#elif defined LANGUAGE_04  // if language code is for Spanish
+ #include "04/04-strings.rls"
+#elif defined LANGUAGE_24  // if language code is for French International
+ #include "24/24-strings.rls"
+#else   // if nothing id defined take english
+ #include "01/01-strings.rls"
+#endif      
+// end conditional compile
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+		short_caption = STRING_r_example_short_caption;
+	    caption_and_icon =
+	        {
+	        CAPTION_AND_ICON_INFO
+	            {
+	            caption = STRING_r_example_caption;
+	            number_of_icons = Long_NumberOfIcon1;
+	            icon_file = STRING_r_example_iconfile;
+	            }
+	        };                          
+	    //
+	    view_list =
+	        {
+	        VIEW_DATA
+	            {
+				uid = Long_uid1;
+				screen_mode = Long_screenmode1;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123123_caption;
+						number_of_icons = Long_NumberOfIcon2;
+						icon_file = STRING_r_example_iconfile1;
+	                    }
+	                };                          
+	            },
+	        VIEW_DATA
+	            {
+				uid = Long_uid2;
+	            screen_mode = Long_screenmode2;
+	            caption_and_icon =
+	                {
+	                CAPTION_AND_ICON_INFO
+	                    {
+	                    caption = STRING_r_view_268123124_caption;
+						number_of_icons = Long_NumberOfIcon3;
+	                    icon_file = STRING_r_example_iconfile2;
+	                    }
+	                };
+	            }
+	        };
+	    group_name = "CompInfo_Group";		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/sifgetcompinfotest1_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/**
+ @file testapplication_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <sifgetcompinfotest1_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x80286FE0
+	
+
+
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "CompInfoFile";
+	localisable_resource_file = "z:\\tusif\\tsif\\data\\sifgetcompinfotest1\\sifgetcompinfotest1_loc";
+	localisable_resource_id = R_LAI;	
+	    //
+    hidden = KAppNotHidden;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    launch = KAppLaunchInForeground;
+    group_name = "AppNameGroup";
+    //
+    default_screen_number = 2;
+    //
+    datatype_list = 
+        {
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg1"; },
+        DATATYPE { priority=EDataTypePriorityNormal; type="image/gif1"; }
+        };
+    //
+    file_ownership_list =
+        {
+        FILE_OWNERSHIP_INFO {file_name="c:\\temp\\AppNameTempFile.txt"; },
+        FILE_OWNERSHIP_INFO {file_name="c:\\temp\\AppName.txt"; }
+        };
+	
+   //
+    service_list =
+        {
+        SERVICE_INFO
+            {
+            uid = 268123123;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg2"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif2"; }
+                };   
+            opaque_data = r_first_service_specific_data;
+            },
+        SERVICE_INFO
+            {
+            uid = 268123124;
+            datatype_list = 
+                {
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/jpeg3"; },
+                DATATYPE { priority=EDataTypePriorityNormal; type="image/gif3"; }
+                };
+            opaque_data = r_second_service_specific_data;
+            }
+        };
+    
+    
+    opaque_data = r_third_service_specific_data;
+	}
+	
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_service_uid_01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_service_uid_02030405";
+	}
+
+RESOURCE SERVICE_NAME r_third_service_specific_data
+	{
+	name = "Non-localised_resource";
+	}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/sifintegrationtestbasepackage.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sifintegrationtest.cpp
+*
+*/
+
+
+#include <e32base.h>
+#include "sifintegrationtestpackage.h"
+
+GLDEF_C TInt E32Main() // main function called by E32
+	{
+	return sifBasePackageExitCode;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/sifintegrationtestpackage.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sifintegrationtest.h
+*
+*/
+
+
+#ifndef SIFINTEGRATIONTESTPACKAGE_H
+#define SIFINTEGRATIONTESTPACKAGE_H
+
+const TInt sifBasePackageExitCode = 0x53494601;
+const TInt sifUpgradePackageExitCode = 0x53494602;
+const TInt sifUserCapsPackageExitCode = 0x53494603;
+const TInt sifSufficientCapsPackageExitCode = 0x53494604;
+
+#endif // SIFINTEGRATIONTESTPACKAGE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/sifintegrationtestupgradepackage.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sifintegrationtest.cpp
+*
+*/
+
+
+#include <e32base.h>
+#include "sifintegrationtestpackage.h"
+
+GLDEF_C TInt E32Main() // main function called by E32
+	{
+	return sifUpgradePackageExitCode;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/sifintegsufficientusercaps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2008 - 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include <e32base.h>
+#include "sifintegrationtestpackage.h"
+
+GLDEF_C TInt E32Main() // main function called by E32
+	{
+	return sifSufficientCapsPackageExitCode;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/sifintegusercapsbasepackage.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <e32base.h>
+#include "sifintegrationtestpackage.h"
+
+GLDEF_C TInt E32Main() // main function called by E32
+	{
+	return sifUserCapsPackageExitCode;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/testexes/siftestintegrationlockfile.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sifintegrationlockfile.cpp
+* This executable is used to lock a file in order to simulate errors while deleting files
+*
+*/
+
+
+#include <e32base.h>
+#include <e32cons.h>
+#include <bacline.h>
+#include <f32file.h>
+
+LOCAL_C void mainL();
+
+TInt E32Main() // main function called by E32
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,mainL()); // Run main method
+	__ASSERT_ALWAYS(!error, User::Panic(_L("SifIntegrationTest"),error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+	}
+
+LOCAL_C void mainL()
+	{
+	CCommandLineArguments* cmdLine = CCommandLineArguments::NewLC();
+	CConsoleBase* console = Console::NewL(_L("Siftestintegrationlockfile"),TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TInt argTotal(cmdLine->Count());
+	if (argTotal < 2  || argTotal > 3)
+		{
+		console->Printf(_L("Incorrect arguments specified: expected 1, received %d"), argTotal - 1);
+		User::Leave(KErrArgument);
+		}
+		
+	TPtrC filename(cmdLine->Arg(1));
+	_LIT(KDoLockFileParam, " lockfile");
+	if (argTotal == 2)
+		{
+		RBuf params;
+		params.CreateL(filename.Length() + KDoLockFileParam().Length());
+		params.CleanupClosePushL();
+		params.Append(cmdLine->Arg(1));
+		params.Append(KDoLockFileParam());
+		// Since this executable is used by TEF, we wish to lock the file after the launched process has exited, so we spawn this process again with a different set of parameters
+		RProcess newInstance;
+		User::LeaveIfError(newInstance.Create(_L("Siftestintegrationlockfile"), params));
+		CleanupClosePushL(newInstance);
+		newInstance.Resume();
+		TRequestStatus status;		
+		newInstance.Rendezvous(status);
+		User::WaitForRequest(status);
+		User::LeaveIfError(status.Int());
+		CleanupStack::PopAndDestroy(2, &params); // newInstance
+		}
+	else
+		{
+		// This is the execution for locking the file, invoked using the branch above
+		console->Printf(_L("Locking file %S for read"), &filename);	
+		RFs fs;
+		User::LeaveIfError(fs.Connect());
+		CleanupClosePushL(fs);
+	
+		RFile file;
+		User::LeaveIfError(file.Open(fs, filename, EFileShareReadersOnly|EFileRead));
+		CleanupClosePushL(file);
+		// Signal the invoker only here, so that the file will definitely get locked before TEF proceeds to the next step
+		RProcess::Rendezvous(KErrNone);		
+		
+		User::After(10*1000*1000); // Wait for 10 seconds
+	
+		CleanupStack::PopAndDestroy(2 , &fs); // file
+		}
+	CleanupStack::PopAndDestroy(2, cmdLine); // console,
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifcommonunitteststep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,638 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#include "tsifcommonunitteststep.h"
+#include "tsifsuitedefs.h"
+#include <usif/sif/sifcommon.h>
+#include <ct/rcpointerarray.h>
+#include <scs/cleanuputils.h>
+#include <s32mem.h> 
+
+using namespace Usif;
+
+namespace
+	{
+	TInt PackCapabilitySet(const TCapabilitySet& aCapSet)
+		{
+		TInt caps=0;
+		for (TInt c=0; c<ECapability_Limit; ++c)
+			{
+			if (aCapSet.HasCapability(TCapability(c)))
+				{
+				caps += (1<<c);
+				}
+			}
+		return caps;
+		}
+	}
+
+CSifCommonUnitTestStep::~CSifCommonUnitTestStep()
+/**
+* Destructor
+*/
+	{
+	INFO_PRINTF1(_L("Cleanup in CSifCommonUnitTestStep::~CSifCommonUnitTestStep()"));
+	}
+
+CSifCommonUnitTestStep::CSifCommonUnitTestStep()
+/**
+* Constructor
+*/
+	{
+	}
+
+void CSifCommonUnitTestStep::ImplTestStepL()
+/**
+* @return - TVerdict code
+* Override of base class pure virtual
+* Our implementation only gets called if the base class doTestStepPreambleL() did
+* not leave. That being the case, the current test result value will be EPass.
+*/
+	{
+	INFO_PRINTF1(_L("I am in CSifCommonUnitTestStep::doTestStep()."));
+
+	SetTestStepResult(EFail);
+	TestComponentInfoL();
+
+	TestOpaqueNamedParamsL();
+
+	SetTestStepResult(EPass);
+	}
+
+
+
+void CSifCommonUnitTestStep::ImplTestStepPostambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{
+	}
+
+
+void CSifCommonUnitTestStep::ImplTestStepPreambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{
+	}
+
+void CSifCommonUnitTestStep::TestComponentInfoL()
+	{
+	TCapabilitySet capSet(ECapabilityReadDeviceData);
+	RPointerArray<Usif::CComponentInfo::CApplicationInfo>* applications = NULL;
+	CComponentInfo* compInfo = CComponentInfo::NewLC();
+	
+	/* Internalize from an empty descriptor and read invalid root node */
+	TIpcArgs ipcArgs;
+	compInfo->PrepareForIpcL(ipcArgs, 0);
+	TDes8* des = reinterpret_cast<TDes8*>(ipcArgs.iArgs[0]);
+	des->FillZ(1);
+	TRAPD(err, compInfo->RootNodeL());
+	if (err != KErrNotFound)
+		{
+		INFO_PRINTF1(_L("Internalize from an empty descriptor and read invalid root node"));
+		User::Leave(err);
+		}
+	CleanupStack::PopAndDestroy(compInfo);
+
+	/* Add invalid child */
+	CComponentInfo::CNode* node = CComponentInfo::CNode::NewLC(KNullDesC, KNullDesC, KNullDesC, KNullDesC, EDeactivated, ENewComponent, 12345678, KNullDesC, ENotAuthenticated, capSet, 1234, EFalse, EFalse, applications);
+	TRAP(err, node->AddChildL(NULL));
+	if (err != KErrArgument)
+		{
+		INFO_PRINTF1(_L("TestComponentInfoL: Add invalid child"));
+		User::Leave(err);
+		}
+	/* Get empty GlobalComponentId */
+	if (node->GlobalComponentId() != KNullDesC)
+		{
+		INFO_PRINTF1(_L("TestComponentInfoL: Get empty GlobalComponentId"));
+		User::Leave(KErrGeneral);
+		}
+	CleanupStack::PopAndDestroy(node);
+
+	/* Overflow detection */
+	const TInt maxDescriptorLength = 256;
+	const TInt tooBigLen = maxDescriptorLength + 1;
+	const TInt maxSize = 1234;
+	const TBool hasExe = EFalse;
+	const TBool driveSelectionRequired = EFalse;
+
+	HBufC* tooBigStr = HBufC::NewLC(tooBigLen);
+	TPtr tooBigStrPtr = tooBigStr->Des();
+	tooBigStrPtr.FillZ(tooBigLen);
+	
+	// for SoftwareTypeName
+	TRAP(err, CComponentInfo::CNode::NewLC(*tooBigStr, KNullDesC, KNullDesC, KNullDesC, EDeactivated, ENewComponent, 12345678, KNullDesC, ENotAuthenticated, capSet, maxSize, hasExe, driveSelectionRequired, applications));
+	if (err != KErrOverflow)
+		{
+		INFO_PRINTF1(_L("TestComponentInfoL: Overflow detection for SoftwareTypeName"));
+		User::Leave(err);
+		}
+
+	// for ComponentName
+	TRAP(err, CComponentInfo::CNode::NewLC(KNullDesC, *tooBigStr, KNullDesC, KNullDesC, EDeactivated, ENewComponent, 12345678, KNullDesC, ENotAuthenticated, capSet, maxSize, hasExe, driveSelectionRequired, applications));
+	if (err != KErrOverflow)
+		{
+		INFO_PRINTF1(_L("TestComponentInfoL: Overflow detection for ComponentName"));
+		User::Leave(err);
+		}
+
+	// for Version
+	TRAP(err, CComponentInfo::CNode::NewLC(KNullDesC, KNullDesC, *tooBigStr, KNullDesC, EDeactivated, ENewComponent, 12345678, KNullDesC, ENotAuthenticated, capSet, maxSize, hasExe, driveSelectionRequired, applications));
+	if (err != KErrOverflow)
+		{
+		INFO_PRINTF1(_L("TestComponentInfoL: Overflow detection for aVersion"));
+		User::Leave(err);
+		}
+
+	// for Vendor
+	TRAP(err, CComponentInfo::CNode::NewLC(KNullDesC, KNullDesC, KNullDesC, *tooBigStr, EDeactivated, ENewComponent, 12345678, KNullDesC, ENotAuthenticated, capSet, maxSize, hasExe, driveSelectionRequired, applications));
+	if (err != KErrOverflow)
+		{
+		INFO_PRINTF1(_L("TestComponentInfoL: Overflow detection for aVendor"));
+		User::Leave(err);
+		}
+
+	// for GlobalComponentId
+	TRAP(err, CComponentInfo::CNode::NewLC(KNullDesC, KNullDesC, KNullDesC, KNullDesC, EDeactivated, ENewComponent, 12345678, *tooBigStr, ENotAuthenticated, capSet, maxSize, hasExe, driveSelectionRequired, applications));
+	if (err != KErrOverflow)
+		{
+		INFO_PRINTF1(_L("TestComponentInfoL: Overflow detection for GlobalComponentId"));
+		User::Leave(err);
+		}
+
+	CleanupStack::PopAndDestroy(tooBigStr);
+	
+	/* Testing embedded nodes */
+	compInfo = CComponentInfo::NewLC();
+	
+	/* Set invalid root node */
+	TRAP(err, compInfo->SetRootNodeL(NULL));
+	if (err != KErrArgument)
+		{
+		INFO_PRINTF1(_L("TestComponentInfoL: Set invalid root node"));
+		User::Leave(err);
+		}
+
+	CComponentInfo::CNode* emptyNode = CComponentInfo::CNode::NewLC(KNullDesC, KNullDesC, KNullDesC, KNullDesC, EDeactivated, ENewComponent, 12345678, KNullDesC, ENotAuthenticated, capSet, 1234, EFalse, EFalse, applications);
+	const TDesC& globalComponentId(emptyNode->GlobalComponentId());
+	ASSERT(globalComponentId.Length() == 0);
+	TRAP(err, compInfo->SetRootNodeAsChildL(*emptyNode));
+	if (err != KErrNotFound)
+		{
+		INFO_PRINTF1(_L("TestComponentInfoL: Set root node as child without a root node"));
+		User::Leave(err);
+		}
+	CleanupStack::PopAndDestroy(emptyNode);
+	
+	// Create root node
+	_LIT(KTxtRootSoftwareTypeName, "Test Software Type");
+	_LIT(KTxtRootComponentName, "Root Component");
+	_LIT(KTxtRootVersion, "1.0.0");
+	_LIT(KTxtRootVendor, "Symbian");
+	_LIT(KTxtRootGlobalComponentId, "Root Component Global Id");
+	CComponentInfo::CNode* root = CComponentInfo::CNode::NewLC(KTxtRootSoftwareTypeName,
+				KTxtRootComponentName, KTxtRootVersion, KTxtRootVendor, EDeactivated,
+				ENewComponent, 12345678, KTxtRootGlobalComponentId, ENotAuthenticated, capSet, maxSize, hasExe, driveSelectionRequired, applications);
+	
+	// Create an array of nodes
+	RCPointerArray<CComponentInfo::CNode> children;
+	CleanupClosePushL(children);
+	
+	// Create second child node
+	_LIT(KTxtChild2SoftwareTypeName, "Test Software Type");
+	_LIT(KTxtChild2ComponentName, "Child2 Component");
+	_LIT(KTxtChild2Version, "1.2.0");
+	_LIT(KTxtChild2Vendor, "Symbian");
+	_LIT(KTxtChild2GlobalComponentId, "Child2 Component Global Id");
+	CComponentInfo::CNode* child2 = CComponentInfo::CNode::NewLC(KTxtChild2SoftwareTypeName,
+				KTxtChild2ComponentName, KTxtChild2Version, KTxtChild2Vendor, EDeactivated,
+				ENewComponent, 12345678, KTxtChild2GlobalComponentId, ENotAuthenticated, capSet, maxSize, hasExe, driveSelectionRequired, applications);
+	children.AppendL(child2);
+	CleanupStack::Pop(child2);
+	
+	// Create third child node
+	_LIT(KTxtChild3SoftwareTypeName, "Test Software Type");
+	_LIT(KTxtChild3ComponentName, "Child3 Component");
+	_LIT(KTxtChild3Version, "1.3.0");
+	_LIT(KTxtChild3Vendor, "Symbian");
+	_LIT(KTxtChild3GlobalComponentId, "Child3 Component Global Id");
+	CComponentInfo::CNode* child3 = CComponentInfo::CNode::NewLC(KTxtChild3SoftwareTypeName,
+				KTxtChild3ComponentName, KTxtChild3Version, KTxtChild3Vendor, EDeactivated,
+				ENewComponent, 12345678, KTxtChild3GlobalComponentId, ENotAuthenticated, capSet, maxSize, hasExe, driveSelectionRequired, applications);
+	children.AppendL(child3);
+	CleanupStack::Pop(child3);
+	
+	// Create first child node
+	_LIT(KTxtChild1SoftwareTypeName, "Test Software Type");
+	_LIT(KTxtChild1ComponentName, "Child1 Component");
+	_LIT(KTxtChild1Version, "1.1.0");
+	_LIT(KTxtChild1Vendor, "Symbian");
+	_LIT(KTxtChild1GlobalComponentId, "Child1 Component Global Id");
+	CComponentInfo::CNode* child1 = CComponentInfo::CNode::NewLC(KTxtChild1SoftwareTypeName,
+				KTxtChild1ComponentName, KTxtChild1Version, KTxtChild1Vendor, EDeactivated,
+				ENewComponent, 12345678, KTxtChild1GlobalComponentId, ENotAuthenticated, capSet,
+				maxSize, hasExe, driveSelectionRequired, applications, &children);
+	root->AddChildL(child1);
+	CleanupStack::Pop(child1);
+	CleanupStack::PopAndDestroy(&children);
+	
+	// Set the root node
+	compInfo->SetRootNodeL(root);
+	CleanupStack::Pop(root);
+	
+	// Check the content of the third node
+	const CComponentInfo::CNode& rootNode = compInfo->RootNodeL();
+	const CComponentInfo::CNode& child1Node = *rootNode.Children()[0];
+	const CComponentInfo::CNode& child3Node = *child1Node.Children()[1];
+	
+	if (child3Node.SoftwareTypeName() != KTxtChild3SoftwareTypeName ||
+		child3Node.ComponentName() != KTxtChild3ComponentName ||
+		child3Node.Version() != KTxtChild3Version ||
+		child3Node.Vendor() != KTxtChild3Vendor ||
+		child3Node.ScomoState() != EDeactivated ||
+		child3Node.InstallStatus() != ENewComponent ||
+		child3Node.ComponentId() != 12345678 ||
+		child3Node.GlobalComponentId() != KTxtChild3GlobalComponentId ||
+		child3Node.Authenticity() != ENotAuthenticated ||
+		PackCapabilitySet(child3Node.UserGrantableCaps()) != PackCapabilitySet(capSet) ||
+		child3Node.MaxInstalledSize() != maxSize ||
+		child3Node.Children().Count() != 0)
+		{
+		INFO_PRINTF1(_L("TestComponentInfoL: 'Testing embedded nodes' failed"));
+		User::Leave(KErrGeneral);
+		}
+	
+	CleanupStack::PopAndDestroy(compInfo);
+	}
+
+void CSifCommonUnitTestStep::TestOpaqueNamedParamsL()
+	{
+	_LIT(KParamName1, "param 1");
+	_LIT(KParamName2, "param 2");
+	_LIT(KParamName3, "param 3");
+	_LIT(KParamName4, "param 4");
+	_LIT(KParamName5, "param 5");
+	
+	_LIT(KStringValue1, "value 1");
+	_LIT(KStringValue2, "value 2");
+	_LIT(KStringValue3, "value 3");
+
+	const TInt KIntValue1 = 111;
+	const TInt KIntValue2 = 222;
+	const TInt KIntValue3 = 333;
+	
+	//String Array
+	RPointerArray<HBufC> stringArray;
+	CleanupResetAndDestroyPushL(stringArray);
+	
+	HBufC* stringPtr = KStringValue1().AllocLC();
+	stringArray.AppendL(stringPtr);
+	CleanupStack::Pop();
+	
+    stringPtr = KStringValue2().AllocLC();
+    stringArray.AppendL(stringPtr);
+    CleanupStack::Pop();
+    
+    stringPtr = KStringValue3().AllocLC();
+    stringArray.AppendL(stringPtr);
+    CleanupStack::Pop(); 
+    
+    //Int Array
+    RArray<TInt> intArray;
+    CleanupClosePushL(intArray);
+    intArray.AppendL(KIntValue1);
+    intArray.AppendL(KIntValue2);
+    intArray.AppendL(KIntValue3);
+    
+	/*  NewL */
+	COpaqueNamedParams* params1 = COpaqueNamedParams::NewL();
+	CleanupStack::PushL(params1);
+
+	/* String operations */
+
+	// AddStringL for a new param
+	params1->AddStringL(KParamName1, KStringValue2);
+	// AddStringL for an already existing param
+	params1->AddStringL(KParamName1, KStringValue1);
+	// StringByName for an existing param
+	if (params1->StringByNameL(KParamName1) != KStringValue1)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'StringByName for an existing param' failed"));
+		User::Leave(KErrGeneral);
+		}
+	// StringByName for a non-existing param
+	if (params1->StringByNameL(KParamName2) != KNullDesC)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'StringByName for a non-existing param' failed"));
+		User::Leave(KErrGeneral);
+		}
+	// StringByNameL for an existing param
+	if (params1->StringByNameL(KParamName1) != KStringValue1)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'StringByNameL for an existing param' failed"));
+		User::Leave(KErrGeneral);
+		}
+	//Added as string , trying to retrieve as int.
+    TRAPD(err, params1->IntByNameL(KParamName1));
+    if(err != KErrNotFound)
+        {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'IntByNameL for an existing param' failed"));
+        User::Leave(KErrGeneral);
+        }	
+	// StringByNameL for a non-existing param
+	if (params1->StringByNameL(KParamName2) != KNullDesC)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'StringByNameL for a non-existing param' failed"));
+		User::Leave(KErrGeneral);
+		}
+
+	CleanupStack::PopAndDestroy(params1);
+
+	/* NewLC */
+	COpaqueNamedParams* params2 = COpaqueNamedParams::NewLC();
+
+	/* Int operations */
+
+	// AddIntL for a new param
+	params2->AddIntL(KParamName1, KIntValue2);
+	// AddIntL for an already existing param
+	params2->AddIntL(KParamName1, KIntValue1);
+	// GetIntByName for an existing param
+	TInt intValue1 = 0;
+	if (!params2->GetIntByNameL(KParamName1, intValue1) || intValue1 != KIntValue1)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'GetIntByName for an existing param' failed"));
+		User::Leave(KErrGeneral);
+		}
+	// GetIntByName for a non-existing param
+	if (params2->GetIntByNameL(KParamName2, intValue1))
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'GetIntByName for a non-existing param' failed"));
+		User::Leave(KErrGeneral);
+		}
+	// IntByNameL for an existing param
+	if (params2->IntByNameL(KParamName1) != KIntValue1)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'IntByNameL for an existing param' failed"));
+		User::Leave(KErrGeneral);
+		}
+	// IntByNameL for a non-existing param
+	TRAP(err, params2->IntByNameL(KParamName2));
+	if (err != KErrNotFound)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'IntByNameL for a non-existing param' failed"));
+		User::Leave(err);
+		}
+
+	/* GetNamesL & Count*/
+	params2->AddStringL(KParamName2, KStringValue2);
+	params2->AddIntL(KParamName3, KIntValue3);
+	RCPointerArray<HBufC> names;
+	CleanupClosePushL(names);
+	params2->GetNamesL(names);
+	if (params2->CountL() != 3 || names.Count() != 3 ||
+		*names[0] != KParamName1 || *names[1] != KParamName2 || *names[2] != KParamName3)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'GetNamesL & Count' failed"));
+		User::Leave(KErrGeneral);
+		}
+
+	/* Overflow detection */
+
+	COpaqueNamedParams* params3 = COpaqueNamedParams::NewLC();
+
+	const TInt bigLen = 128;
+	HBufC* bigStr = HBufC::NewLC(bigLen);
+	TPtr bigStrPtr = bigStr->Des();
+	bigStrPtr.FillZ(bigLen);
+
+	// Max acceptable length of descriptor
+	const TInt maxGoodLen = 128/2; 
+	TRAP(err, params3->AddStringL(KParamName1, bigStr->Left(maxGoodLen)));
+	if (err != KErrNone)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'Overflow detection: Max acceptable length of descriptor'"));
+		User::Leave(err);
+		}
+		
+	// Too big descriptor - same param name
+	const TInt tooBigLen = 128/2+1;
+	TRAP(err, params3->AddStringL(KParamName1, bigStr->Left(tooBigLen)));
+	if (err != KErrOverflow)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'Overflow detection: Too big descriptor - updated param'"));
+		User::Leave(err);
+		}		
+
+	// Too big descriptor - different param name
+	TRAP(err, params3->AddStringL(KParamName2, bigStr->Left(tooBigLen)));
+	if (err != KErrOverflow)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'Overflow detection: Too big descriptor - new param'"));
+		User::Leave(err);
+		}
+
+	// Overflow in KMaxExternalizedSize
+	params3->AddStringL(KParamName3, bigStr->Left(maxGoodLen));
+	params3->AddStringL(KParamName4, bigStr->Left(maxGoodLen));
+	params3->AddStringL(KParamName4, bigStr->Left(maxGoodLen)); // Add the same param to check overwriting
+	TRAP(err, params3->AddStringL(KParamName5, bigStr->Left(maxGoodLen)));
+	if (err != KErrOverflow)
+		{
+		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'Overflow detection: Overflow in KMaxExternalizedSize'"));
+		User::Leave(err);
+		}
+
+	CleanupStack::PopAndDestroy(4, params2);
+
+	COpaqueNamedParams* params4 = COpaqueNamedParams::NewLC();
+	
+	params4->AddStringArrayL(KParamName1, stringArray);
+	
+	const RPointerArray<HBufC>& strArray = params4->StringArrayByNameL(KParamName1);
+	if(*strArray[0] != KStringValue1 || *strArray[1] != KStringValue2 || *strArray[2] != KStringValue3)
+	    {
+	    INFO_PRINTF1(_L("TestOpaqueNamedParamsL: StringArrayByNameL failed"));
+	    User::Leave(err);
+	    }
+
+	TRAP(err, const RArray<TInt>& intArray1 = params4->IntArrayByNameL(KParamName1));
+    if(err != KErrNotFound)
+        {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: IntArrayByNameL failed"));
+        User::Leave(err);  
+        }	
+	//Append a big string ( greater than 128 bytes)
+	HBufC* largeString = HBufC::NewLC(150);
+	largeString->Des().FillZ(150);
+	stringArray.AppendL(largeString);
+	CleanupStack::Pop();
+	
+	TRAP(err, params4->AddStringArrayL(KParamName1, stringArray));
+	  
+	if(err != KErrOverflow)
+	    {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: AddStringArrayL overflow check failed"));
+        User::Leave(err);	    
+	    }
+	
+	stringArray.ResetAndDestroy();
+	// Few large strings
+    HBufC* bigString2 = HBufC::NewLC(64);
+    bigString2->Des().FillZ(64);
+    stringArray.AppendL(bigString2);
+    CleanupStack::Pop();
+    
+    HBufC* bigString3 = HBufC::NewLC(64);
+    bigString3->Des().FillZ(64);
+    stringArray.AppendL(bigString3);
+    CleanupStack::Pop();
+
+    HBufC* bigString4 = HBufC::NewLC(64);
+    bigString4->Des().FillZ(64);
+    stringArray.AppendL(bigString4);
+    CleanupStack::Pop();
+    
+     HBufC* bigString5 = HBufC::NewLC(64);
+     bigString5->Des().FillZ(64);
+     stringArray.AppendL(bigString5);
+     CleanupStack::Pop();
+     
+     TRAP(err, params4->AddStringArrayL(KParamName1, stringArray));
+      
+      if(err != KErrOverflow)
+          {
+          INFO_PRINTF1(_L("TestOpaqueNamedParamsL: AddStringArrayL overflow check failed"));
+          User::Leave(err);       
+          }    
+	params4->AddIntArrayL(KParamName1, intArray);
+    const RArray<TInt>& RefIntArray = params4->IntArrayByNameL(KParamName1);
+    if(RefIntArray[0] != KIntValue1 || RefIntArray[1] != KIntValue2 || RefIntArray[2] != KIntValue3)
+        {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: IntArrayByNameL failed"));
+        User::Leave(err);
+        }	
+    
+    TRAP(err, const RPointerArray<HBufC>& strArray1 = params4->StringArrayByNameL(KParamName1));
+	if(err != KErrNotFound)
+	    {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: StringArrayByNameL failed"));
+        User::Leave(err);  
+	    }
+
+	CleanupStack::PopAndDestroy(3, &stringArray);
+	
+	//Externalize, internalize tests.
+	COpaqueNamedParams* params5 = COpaqueNamedParams::NewLC();
+	HBufC* testString = _L("TestString").AllocLC();
+	
+	params5->AddStringL(_L("key1"), *testString);
+	params5->AddIntL(_L("key2"), 23);
+	
+	RArray<TInt> intArray2;
+	CleanupClosePushL(intArray2);
+	intArray2.AppendL(100);
+	intArray2.AppendL(200);
+	
+	RPointerArray<HBufC> stringArray2;
+	CleanupResetAndDestroyPushL(stringArray2);
+	const HBufC16* testString1 = _L("TestString1").AllocLC();
+	
+	
+	TInt err1 = stringArray2.Append(testString1);
+	if (err1 != KErrNone)
+	    {
+	    CleanupStack::PopAndDestroy();
+	    }
+	else
+	    {
+	    CleanupStack::Pop();
+	    }
+	
+	const HBufC16* testString2 = _L("TestString2").AllocLC();
+	TInt err2 = stringArray2.Append(testString2);
+	if (err2 != KErrNone)
+	    {
+	    CleanupStack::PopAndDestroy();
+	    }
+	else
+	    {
+	    CleanupStack::Pop();
+	    }
+    params5->AddStringArrayL(_L("key3"), stringArray2);
+    params5->AddIntArrayL(_L("key4"), intArray2);
+    
+	CBufFlat* externalizedBuffer = CBufFlat::NewL(150);
+	CleanupStack::PushL(externalizedBuffer);
+	
+	RBufWriteStream writeStream(*externalizedBuffer);
+	CleanupClosePushL(writeStream);
+	
+	params5->ExternalizeL(writeStream);
+	
+	COpaqueNamedParams* params6 = COpaqueNamedParams::NewLC();
+	
+	RBufReadStream readStream(*externalizedBuffer);
+	CleanupClosePushL(readStream);
+	params6->InternalizeL(readStream);
+	
+    if(params6->IntByNameL(_L("key2"))!= 23 || (params6->StringByNameL(_L("key1")) != _L("TestString")))
+        {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: Internalize of int and string failed."));
+        User::Leave(err);
+        } 
+    
+    const RArray<TInt>& internalizedIntArray = params6->IntArrayByNameL(_L("key4"));
+    
+    if(internalizedIntArray[0] != 100 && internalizedIntArray[1] != 200)
+        {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: Internalize of int array failed."));
+        User::Leave(err);
+        }   
+	
+    const RPointerArray<HBufC>& internalizedStringArray = params6->StringArrayByNameL(_L("key3"));
+    
+    if (err1 == KErrNone)
+        {
+        if(*internalizedStringArray[0] != _L("TestString1") && *internalizedStringArray[1] != _L("TestString2"))
+            {
+            INFO_PRINTF1(_L("TestOpaqueNamedParamsL: Internalize of string array failed."));
+            User::Leave(err);
+            }
+        }
+    else if (err2 == KErrNone)
+        {
+        if(*internalizedStringArray[0] != _L("TestString2"))
+            {
+            INFO_PRINTF1(_L("TestOpaqueNamedParamsL: Internalize of string array failed."));
+            User::Leave(err);
+            }
+        }
+    
+    CleanupStack::PopAndDestroy(8, params5);
+	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifcommonunitteststep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#if (!defined TSIFCOMMONUNITTESTSTEP_H)
+#define TSIFCOMMONUNITTESTSTEP_H
+#include <test/testexecutestepbase.h>
+#include "tsifsuitestepbase.h"
+
+namespace Usif
+	{
+
+	class CSifCommonUnitTestStep : public CSifSuiteStepBase
+		{
+	public:
+		virtual ~CSifCommonUnitTestStep();
+		CSifCommonUnitTestStep();
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepL();
+		virtual void ImplTestStepPostambleL();
+
+	private:
+		void TestComponentInfoL();
+		void TestOpaqueNamedParamsL();
+		};
+
+	_LIT(KSifCommonUnitTestStep,"SifCommonUnitTestStep");
+
+	} // namespace Sif
+
+#endif // TSIFCOMMONUNITTESTSTEP_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifcommonverificationstep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,300 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#include "tsifcommonverificationstep.h"
+#include "tsifsuitedefs.h"
+#include <swi/sisregistrysession.h>
+#include <swi/sisregistrypackage.h>
+#include <ct/rcpointerarray.h>
+#include <usif/scr/scr.h>
+#include <apgcli.h>
+#include <apacmdln.h>
+
+using namespace Usif;
+
+namespace
+	{
+	TBool CheckPathExistenceL(const TDesC& filePath)
+		{
+		TBool exists = EFalse;
+
+		RFs fs;
+		User::LeaveIfError(fs.Connect());
+		CleanupClosePushL(fs);
+		TEntry entry;
+		TInt error = fs.Entry(filePath, entry);
+		if (error == KErrNone)
+			{
+			exists = ETrue;
+			}
+		else if (error != KErrPathNotFound && error != KErrNotFound)
+			{
+			User::Leave(error);
+			}
+		
+		CleanupStack::PopAndDestroy(&fs);
+		return exists;
+		}
+	}
+
+CSifCommonVerificationStep::~CSifCommonVerificationStep()
+/**
+* Destructor
+*/
+	{
+	INFO_PRINTF1(_L("Cleanup in CSifCommonVerificationStep::~CSifCommonVerificationStep()"));
+	}
+
+CSifCommonVerificationStep::CSifCommonVerificationStep()
+/**
+* Constructor
+*/
+	{
+	}
+
+void CSifCommonVerificationStep::ImplTestStepPreambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{
+	INFO_PRINTF1(_L("I am in CSifCommonVerificationStep::ImplTestStepPreambleL()."));
+	}
+
+TScomoState CSifCommonVerificationStep::GetScomoStateL(TComponentId aComponentId)
+	{
+	RSoftwareComponentRegistry scr;
+	User::LeaveIfError(scr.Connect());
+	CleanupClosePushL(scr);
+
+	CComponentEntry* entry = CComponentEntry::NewLC();
+	if (!scr.GetComponentL(aComponentId, *entry))
+		{
+		INFO_PRINTF1(_L("CSifCommonVerificationStep::GetScomoStateL() failed!"));
+		CleanupStack::PopAndDestroy(2, &scr);
+		User::Leave(KErrNotFound);
+		}
+
+	TScomoState scomoState = entry->ScomoState();
+	CleanupStack::PopAndDestroy(2, &scr);
+
+	return scomoState;
+	}
+
+void CSifCommonVerificationStep::ImplTestStepL()
+/**
+* @return - TVerdict code
+* Override of base class pure virtual
+* Our implementation only gets called if the base class doTestStepPreambleL() did
+* not leave. That being the case, the current test result value will be EPass.
+*/
+	{
+	INFO_PRINTF1(_L("I am in CSifCommonVerificationStep::ImplTestStepL()."));
+
+	// Read the configuration from the ini file
+	TBool verifyExistence = ETrue;
+	if (!GetBoolFromConfig(ConfigSection(), KTe_VerifyPackageExistence, verifyExistence))
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF2(_L("Failed to read %S from ini file."), &KTe_VerifyPackageExistence);
+		return;
+		}
+
+	TInt exeReturnCode = 0;
+	TInt refScomoState = 0;
+	TPtrC componentName, componentVendor, executableName;
+	if (!GetStringFromConfig(ConfigSection(), KTe_ComponentName, componentName) ||
+		!GetStringFromConfig(ConfigSection(), KTe_ComponentVendor, componentVendor) ||
+		(verifyExistence && !GetIntFromConfig(ConfigSection(), KTe_ScomoState, refScomoState)))
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF4(_L("Failed to read %S, %S or %S from ini file."), &KTe_ComponentName, &KTe_ComponentVendor, &KTe_ScomoState);
+		return;
+		}
+
+	TBool launchExecutable = GetStringFromConfig(ConfigSection(), KTe_ExecutableName, executableName);
+	if (launchExecutable && verifyExistence)
+		{
+		if (!GetIntFromConfig(ConfigSection(), KTe_ExecutableReturnCode, exeReturnCode))
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("Failed to read %S from ini file."), &KTe_ExecutableReturnCode);
+			return;
+			}
+		}
+
+	// Look for a component in the SCR
+	TScomoState scomoState = EDeactivated;
+	TBool foundInScr = EFalse;
+	TComponentId componentId = FindComponentInScrL(componentName, componentVendor);
+	if (componentId != 0)
+		{
+		foundInScr = ETrue;
+		scomoState = GetScomoStateL(componentId);
+		}
+
+	// Look for a component in the SIS Registry
+	TBool checkSisRegistry = ETrue;
+	GetBoolFromConfig(ConfigSection(), KTe_CheckSisRegistry, checkSisRegistry);
+	TBool foundInSisRegistry = EFalse;
+	if (checkSisRegistry)
+		{
+		Swi::RSisRegistrySession sisRegistry;
+		User::LeaveIfError(sisRegistry.Connect());
+		CleanupClosePushL(sisRegistry);
+
+		RCPointerArray<Swi::CSisRegistryPackage> installedPackages;
+		sisRegistry.InstalledPackagesL(installedPackages);
+		CleanupClosePushL(installedPackages);
+
+		const TInt numPackages = installedPackages.Count();
+		for (TInt i=0; i<numPackages; ++i)
+			{
+			const TDesC& name = installedPackages[i]->Name();
+			const TDesC& vendor = installedPackages[i]->Vendor();
+			if (name == componentName && vendor == componentVendor)
+				{
+				foundInSisRegistry = ETrue;
+				break;
+				}
+			}
+		CleanupStack::PopAndDestroy(2, &sisRegistry);
+		}
+
+	// Launch the executable
+	TInt apaErr = KErrNone;
+	TRequestStatus launchStatus;
+	if (launchExecutable)
+		{
+		RApaLsSession apa;
+		apaErr = apa.Connect();
+		if (apaErr != KErrNone)
+			{
+			INFO_PRINTF2(_L("Failed to connect to the application architecture server, error code: %d"), apaErr);
+			User::Leave(apaErr);
+			}
+		CleanupClosePushL(apa);
+
+		CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+		cmdLine->SetExecutableNameL(executableName);
+
+		TThreadId threadId;
+		apaErr = apa.StartApp(*cmdLine, threadId, &launchStatus);
+		if (apaErr == KErrNone)
+			{
+			INFO_PRINTF3(_L("Launched: %S with error code: %d"), &executableName, launchStatus.Int());
+			User::WaitForRequest(launchStatus);
+			}
+		else if (apaErr != KErrNotFound)
+			{
+			INFO_PRINTF2(_L("Failed to call RApaLsSession::StartApp(), error code: %d"), apaErr);
+			User::Leave(apaErr);
+			}
+		CleanupStack::PopAndDestroy(2, &apa);
+		}
+
+	// Look for the component's files
+	TInt numDefinedFiles = 0;
+	TInt numFoundFiles = 0;
+	const TInt maxComponentFiles = 16;
+	for (TInt i=0; i<maxComponentFiles; ++i)
+		{
+		// Read the name of a file
+		HBufC* filePattern = HBufC::NewLC(KTe_PackageFile.iTypeLength+KMaxIntDigits);
+		TPtr filePatternPtr(filePattern->Des());
+		filePatternPtr.Copy(KTe_PackageFile);
+		filePatternPtr.AppendNum(i);
+		TPtrC filePath;
+		if (!GetStringFromConfig(ConfigSection(), *filePattern, filePath))
+			{
+			CleanupStack::PopAndDestroy(filePattern);
+			break;
+			}
+		++numDefinedFiles;
+
+		// Verify file existence
+		if (CheckPathExistenceL(filePath))
+			{
+			++numFoundFiles;
+			}
+		
+		CleanupStack::PopAndDestroy(filePattern);
+		}
+
+	// Calculate the test step result
+	TVerdict verdict = EFail;
+	if (verifyExistence)
+		{
+		if (foundInScr && scomoState == refScomoState && checkSisRegistry == foundInSisRegistry && numDefinedFiles == numFoundFiles)
+			{
+			if (launchExecutable)
+				{
+				if (exeReturnCode == launchStatus.Int())
+					{
+					verdict = EPass;
+					}
+				}
+			else
+				{
+				verdict = EPass;
+				}
+			}
+		}
+	else // verify NonExistence
+		{
+		if (!foundInScr && numFoundFiles == 0)
+			{
+			verdict = EPass;
+
+			if (checkSisRegistry && foundInSisRegistry)
+				{
+				verdict = EFail;
+				}
+			if (launchExecutable && apaErr != KErrNotFound)
+				{
+				verdict = EFail;
+				}
+			}
+		}
+
+	SetTestStepResult(verdict);
+
+	INFO_PRINTF1(_L("================== Begin Of Common Verification Steps =================="));
+	INFO_PRINTF3(_L("Verification of existence/non-existence: (%d/%d)"), verifyExistence, !verifyExistence);
+	INFO_PRINTF3(_L("Component name: %S, vendor: %S"), &componentName, &componentVendor);
+	INFO_PRINTF2(_L("Found in Scr = %d"), foundInScr);
+	INFO_PRINTF2(_L("Found in Swi = %d"), foundInSisRegistry);
+	INFO_PRINTF2(_L("Scomo state = %d"), scomoState);
+	INFO_PRINTF2(_L("Exe return code = %d"), exeReturnCode);
+	INFO_PRINTF3(_L("Test executable: %S launched with error code = %d"), &executableName, apaErr);
+	INFO_PRINTF3(_L("Component files: defined = %d, found = %d"), numDefinedFiles, numFoundFiles);
+	INFO_PRINTF1(_L("=================== End Of Common Verification Steps ==================="));
+	}
+
+void CSifCommonVerificationStep::ImplTestStepPostambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifcommonverificationstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#if (!defined TSIFCOMMONVERIFICATIONSTEP_H)
+#define TSIFCOMMONVERIFICATIONSTEP_H
+#include <test/testexecutestepbase.h>
+#include "tsifsuitestepbase.h"
+
+namespace Usif
+	{
+	class CSifCommonVerificationStep : public CSifSuiteStepBase
+		{
+	public:
+		CSifCommonVerificationStep();
+		~CSifCommonVerificationStep();
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepL();
+		virtual void ImplTestStepPostambleL();
+
+	private:
+	TScomoState GetScomoStateL(TComponentId aComponentId);
+
+	private:
+		TInt iExpectedResult;
+		};
+
+	_LIT(KSifCommonVerificationStep,"SifCommonVerificationStep");
+
+	} // namespace Sif
+
+#endif // TSIFCOMMONVERIFICATIONSTEP_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifgenericbrowserinstallstep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#include "tsifgenericbrowserinstallstep.h"
+#include "tsifsuitedefs.h"
+#include <apgcli.h>
+
+using namespace Usif;
+
+CSifGenericBrowserInstallStep::~CSifGenericBrowserInstallStep()
+/**
+* Destructor
+*/
+	{
+	INFO_PRINTF1(_L("Cleanup in CSifGenericBrowserInstallStep::~CSifGenericBrowserInstallStep()"));
+	}
+
+CSifGenericBrowserInstallStep::CSifGenericBrowserInstallStep()
+/**
+* Constructor
+*/
+	{
+	}
+
+void CSifGenericBrowserInstallStep::ImplTestStepPreambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{
+	INFO_PRINTF1(_L("I am in CSifGenericBrowserInstallStep::ImplTestStepPreambleL()."));
+	}
+
+
+void CSifGenericBrowserInstallStep::ImplTestStepL()
+/**
+* @return - TVerdict code
+* Override of base class pure virtual
+* Our implementation only gets called if the base class doTestStepPreambleL() did
+* not leave. That being the case, the current test result value will be EPass.
+*/
+	{
+	INFO_PRINTF1(_L("I am in CSifGenericBrowserInstallStep::ImplTestStepL()."));
+
+	TPtrC fileName;
+	if(!GetStringFromConfig(ConfigSection(),KTe_PackageFile, fileName))
+		{
+		INFO_PRINTF1(_L("Failed to read package file name from ini file, error: KErrNotFound"));
+		User::Leave(KErrNotFound);
+		}
+		
+	TBool installByFileHandle = EFalse;
+	if(!GetBoolFromConfig(ConfigSection(),KTe_OperationByFileHandle, installByFileHandle))
+		{
+		INFO_PRINTF1(_L("Failed to read KTe_InstallByFileHandle from ini file, error: KErrNotFound"));
+		User::Leave(KErrNotFound);
+		}
+
+	RApaLsSession apa;
+	User::LeaveIfError(apa.Connect());
+	CleanupClosePushL(apa);
+
+	TRequestStatus status;
+	if (installByFileHandle)
+		{
+		RFs fs;
+		RFile file;
+		User::LeaveIfError(fs.Connect());
+		fs.ShareProtected();
+		CleanupClosePushL(fs);
+		User::LeaveIfError(file.Open(fs, fileName, EFileRead | EFileShareReadersOnly));
+		CleanupClosePushL(file);
+
+		TThreadId threadId;
+		TInt err = apa.StartDocument(file, threadId, &status);
+		if (err != KErrNone)
+			{
+			INFO_PRINTF2(_L("Failed to call RApaLsSession::StartDocument(), error code: %d"), err);
+			User::Leave(err);
+			}
+		User::WaitForRequest(status);
+		CleanupStack::PopAndDestroy(2, &fs);
+		}
+	else
+		{
+		TThreadId threadId;
+		TInt err = apa.StartDocument(fileName, threadId);
+		if (err != KErrNone)
+			{
+			INFO_PRINTF2(_L("Failed to call RApaLsSession::StartDocument(), error code: %d"), err);
+			User::Leave(err);
+			}
+
+		RThread thread;
+		err = thread.Open(threadId);
+		if (err != KErrNone)
+			{
+			INFO_PRINTF2(_L("Failed to call RThread::Open(), error code: %d"), err);
+			User::Leave(err);
+			}
+
+		thread.Rendezvous(status);
+		User::WaitForRequest(status);
+		}
+
+	CleanupStack::PopAndDestroy(&apa);
+
+	if (status != iExpectedResult)
+		{
+		INFO_PRINTF3(_L("Expected result doesn't match: current: %d expected: %d"), status.Int(), iExpectedResult);
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		SetTestStepResult(EPass);
+		}
+	}
+
+
+
+void CSifGenericBrowserInstallStep::ImplTestStepPostambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifgenericbrowserinstallstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#if (!defined TSIFGENERICBROWSERSTEPSTEP_H)
+#define TSIFGENERICBROWSERSTEPSTEP_H
+#include <test/testexecutestepbase.h>
+#include "tsifsuitestepbase.h"
+
+namespace Usif
+	{
+	class CSifGenericBrowserInstallStep : public CSifSuiteStepBase
+		{
+	public:
+		CSifGenericBrowserInstallStep();
+		~CSifGenericBrowserInstallStep();
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepL();
+		virtual void ImplTestStepPostambleL();
+
+	private:
+		TInt iExpectedResult;
+		};
+
+	_LIT(KSifGenericBrowserInstallStep,"SifGenericBrowserInstallStep");
+
+	} // namespace Sif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifnotifierteststep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,607 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#include "tsifnotifierteststep.h"
+#include "tsifsuitedefs.h"
+#include <usif/sif/sifcommon.h>
+#include <usif/sif/sif.h>
+#include <scs/cleanuputils.h>
+#include <ct/rcpointerarray.h>
+
+using namespace Usif;
+
+_LIT(KOperationCount, "OperationCount");
+_LIT(KOperation, "Operation");
+_LIT(KGlobalCompId, "GlobalCompId");
+_LIT(KComponentName, "ComponentName");
+_LIT(KComponentIcon, "ComponentIcon");
+_LIT(KAppNameCount, "AppNameCount");
+_LIT(KAppName, "AppName");
+_LIT(KAppIconCount, "AppIconCount");
+_LIT(KAppIcon, "AppIcon");
+_LIT(KComponentSize, "ComponentSize");
+_LIT(KIconPath, "IconPath");
+_LIT(KSoftwareType, "SoftwareType");
+_LIT(KErrMsg, "ErrMsg");
+_LIT(KErrMsgDetails, "ErrMsgDetails");
+_LIT(KErrCategory, "ErrCategory");
+_LIT(KErrCode, "ErrCode");
+_LIT(KPhase, "Phase");
+_LIT(KSubPhase, "SubPhase");
+_LIT(KCurrentProgress, "CurrentProgress");
+_LIT(KTotal, "Total");
+_LIT(KSubscriberNumber, "SubscriberNumber");
+_LIT(KKeyNumber, "KeyNumber");
+_LIT (KSubscribeKey, "SubscribeKey");
+_LIT (KSubscribeForProgress, "SubscribeForProgress");
+_LIT (KEndData, "EndData");
+_LIT (KProgressData, "ProgressData");
+_LIT (KDelay, "Delay");
+_LIT (KTotalStartCount, "StartCount");
+_LIT (KTotalProgressCount, "ProgressCount");
+_LIT (KTotalEndCount, "EndCount");
+_LIT (KSubscribeShutdownTimer, "SubscribeShutdownTimer");
+_LIT (KPublisherDelay, "PublisherDelay");
+_LIT (KPrintDetails, "PrintDetails");
+CSifSubscribeTestStep::~CSifSubscribeTestStep()
+/**
+* Destructor
+*/
+    {
+    INFO_PRINTF1(_L("Cleanup in CSifSubscribeTestStep::~CSifSubscribeTestStep()"));
+    }
+
+CSifSubscribeTestStep::CSifSubscribeTestStep()
+/**
+* Constructor
+*/
+    {
+    SetTestStepName(KSifSubscribeTestStep);
+    }
+
+void CSifSubscribeTestStep::ImplTestStepPreambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+    {
+    INFO_PRINTF1(_L("I am in CSifSubscribeTestStep::ImplTestStepPreambleL()."));
+    iSched=new(ELeave) CActiveScheduler;
+    CActiveScheduler::Install(iSched);
+    SetTestStepResult(EPass);
+    }
+
+
+void CSifSubscribeTestStep::ImplTestStepL()
+/**
+* @return - TVerdict code
+* Override of base class pure virtual
+* Our implementation only gets called if the base class doTestStepPreambleL() did
+* not leave. That being the case, the current test result value will be EPass.
+*/
+    {   
+    //Get the  Subscriber number
+    GetIntFromConfig(ConfigSection(),KSubscriberNumber, iSubscriberNum);
+    
+    // Delay the Startup ?
+    TInt delay(0);
+    //Get the  delay value if present
+    GetIntFromConfig(ConfigSection(),KDelay, delay);
+    if(delay !=0)
+        {
+        User::After(delay * 1000000);
+        }
+    
+    
+    iNotifier = CSifOperationsNotifier::NewL(*this);
+    TInt shutdownTimer(0);
+    GetIntFromConfig(ConfigSection(), KSubscribeShutdownTimer, shutdownTimer);
+    if(shutdownTimer ==0)
+        {
+        shutdownTimer = 10; //default value
+        }
+    iTimer = CStopTimer::NewL(iNotifier, shutdownTimer* 1000000);
+    CActiveScheduler::Start();
+
+    //Verify Counts
+    TInt startCount(0);
+    GetIntFromConfig(ConfigSection(), KTotalStartCount, startCount);
+    
+    if(startCount != iStartMessageCounter)
+        {
+        INFO_PRINTF1(_L("Total number of start handler notifications received does not match expected value"));
+        SetTestStepResult(EFail);
+        }
+
+    TInt progressCount(0);
+    GetIntFromConfig(ConfigSection(), KTotalProgressCount, progressCount);
+    
+    if(progressCount != iProgressMessageCounter)
+        {
+        INFO_PRINTF1(_L("Total number of progress handler notifications received does not match expected value"));
+        SetTestStepResult(EFail);
+        }
+    
+    TInt endCount(0);
+    GetIntFromConfig(ConfigSection(), KTotalEndCount, endCount);
+    
+    if(endCount != iEndMessageCounter)
+        {
+        INFO_PRINTF1(_L("Total number of end handler notifications received does not match expected value"));
+        SetTestStepResult(EFail);
+        }    
+    
+    }
+
+void CSifSubscribeTestStep::ImplTestStepPostambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+    {   
+    INFO_PRINTF1(_L("I am in CSifPublishTestStep::ImplTestStepPostambleL()."));
+    delete iNotifier;
+    delete iSched;
+    delete iTimer;
+    }
+
+void CSifSubscribeTestStep::StartOperationHandler(TUint aKey, const CSifOperationStartData& aStartData)
+    { 
+    TBuf<20> Key;
+    Key = KKeyNumber;
+    GenerateIndexedAttributeNameL(Key, ++iStartMessageCounter);
+    TPtrC keyFromIni;
+    GetStringFromConfig(ConfigSection(), Key, keyFromIni);
+    HBufC* retrievedKeyFromIni = keyFromIni.AllocLC();
+    
+    //Received Key
+    HBufC* receivedKey = HBufC::NewLC(20);
+    receivedKey->Des().Format(_L("%d"), aKey );
+    
+    if(*receivedKey != *retrievedKeyFromIni)
+        {
+        INFO_PRINTF1(_L("Key Mismatch !") );
+        SetTestStepResult(EFail);
+        }
+    else
+        {
+        INFO_PRINTF1(_L("Received Correct Key!") );
+        }
+    
+    
+    //Subscribe to key ?
+    TBuf<20> SubscribeKey;
+    SubscribeKey = KSubscribeKey;
+    GenerateIndexedAttributeNameL(SubscribeKey, ++iSubscribeCounter);
+    
+    TPtrC SubscribeKeyFromIni;
+    if(GetStringFromConfig(ConfigSection(),SubscribeKey, SubscribeKeyFromIni))
+        {
+        HBufC* retrievedSubscribeKeyFromIni = SubscribeKeyFromIni.AllocLC();
+        
+        
+        if(*retrievedSubscribeKeyFromIni == *receivedKey)
+            {
+            INFO_PRINTF3(_L("Subscribing to Key %d from Subscriber%d ."), aKey, iSubscriberNum);
+            
+            TBuf<35> progressNotifier;
+            progressNotifier = KSubscribeForProgress;
+            GenerateIndexedAttributeNameL(progressNotifier, iSubscribeCounter);
+            
+            TBool progressNotifierVal;
+            GetBoolFromConfig(ConfigSection(),progressNotifier, progressNotifierVal);
+            iNotifier->SubscribeL(aKey, progressNotifierVal);
+            }
+ 
+        CleanupStack::PopAndDestroy(retrievedSubscribeKeyFromIni);
+        }   
+    
+    CleanupStack::PopAndDestroy(2, retrievedKeyFromIni);
+    //Global Component Id check
+    TBuf<20> GlobalId;
+    GlobalId = KGlobalCompId;
+    GenerateIndexedAttributeNameL(GlobalId, iStartMessageCounter);
+    
+    TPtrC globalIdFromIni;
+    GetStringFromConfig(ConfigSection(),GlobalId, globalIdFromIni);
+    
+    HBufC* retrievedGlobalIdFromIni = globalIdFromIni.AllocLC();
+    
+    
+    if(*retrievedGlobalIdFromIni != aStartData.GlobalComponentId())
+        {       
+        INFO_PRINTF1(_L("Global Component Id mismatch !") );
+        SetTestStepResult(EFail); 
+        }
+    else
+        {
+        INFO_PRINTF1(_L("Received Correct Global Component Id !") );     
+        }   
+    CleanupStack::PopAndDestroy(retrievedGlobalIdFromIni);
+    
+    //Print received data ?
+    TBool print;
+    if(GetBoolFromConfig(ConfigSection(),KPrintDetails, print))
+        {
+        INFO_PRINTF2(_L("Global Component Id : %S"),  &aStartData.GlobalComponentId());
+        INFO_PRINTF2(_L("Component Name: %S"),  &aStartData.ComponentName());
+        
+        for(TInt i=0; i<aStartData.ApplicationNames().Count(); ++i)
+            {
+            INFO_PRINTF3(_L("Application name %d : %S"), i,  aStartData.ApplicationNames()[i]);
+            }
+        for(TInt i=0; i<aStartData.ApplicationIcons().Count(); ++i)
+            {
+            INFO_PRINTF3(_L("Application icons %d : %S"), i,  aStartData.ApplicationIcons()[i]);
+            }       
+        INFO_PRINTF2(_L("Component Size : %d"),  aStartData.ComponentSize());
+        INFO_PRINTF2(_L("Icon Path : %S"),  &aStartData.IconPath());
+        INFO_PRINTF2(_L("Component Icon : %S"),  &aStartData.ComponentIcon());
+        INFO_PRINTF2(_L("Software Type: %S"),  &aStartData.SoftwareType());
+        INFO_PRINTF2(_L("Operation Phase : %d"), (TInt)aStartData.OperationPhase());
+        
+        }
+    }
+
+
+void CSifSubscribeTestStep::EndOperationHandler(const CSifOperationEndData& aEndData)
+    {
+    TBuf<20> endData;
+    endData = KEndData;
+    GenerateIndexedAttributeNameL(endData, ++iEndMessageCounter);
+    
+    TPtrC endDataFromIni;
+    if(GetStringFromConfig(ConfigSection(),endData, endDataFromIni))
+        {
+        HBufC* retrievedEndDataFromIni = endDataFromIni.AllocLC();
+        
+        if(*retrievedEndDataFromIni != aEndData.GlobalComponentId())
+            {
+            SetTestStepResult(EFail);
+            INFO_PRINTF1(_L("End Data Mismatch !") );
+            }
+        else
+            {
+            INFO_PRINTF1(_L("Correct end data received !") );
+            }     
+        CleanupStack::PopAndDestroy(retrievedEndDataFromIni);
+        }
+    else
+        {
+        SetTestStepResult(EFail);
+        INFO_PRINTF1(_L("End Data Mismatch !") );
+        }
+    
+    //Print received data ?
+    TBool print;
+    if(GetBoolFromConfig(ConfigSection(),KPrintDetails, print))
+        {
+        INFO_PRINTF2(_L("Global Component Id : %S"),  &aEndData.GlobalComponentId());
+        INFO_PRINTF2(_L("Error Category : %d"),  (TInt)aEndData.ErrorCategory());
+        INFO_PRINTF2(_L("Error code : %d"),  aEndData.ErrorCode());
+        INFO_PRINTF2(_L("Error message : %S"),  &aEndData.ErrorMessage());
+        INFO_PRINTF2(_L("Error message details : %S"),  &aEndData.ErrorMessageDetails());
+        }
+    }
+
+void CSifSubscribeTestStep::ProgressOperationHandler(const CSifOperationProgressData& aProgressData)
+    {
+    TBuf<20> progressData;
+    progressData = KProgressData;
+    GenerateIndexedAttributeNameL(progressData, ++iProgressMessageCounter);
+    
+    TPtrC progressDataFromIni;
+    if(GetStringFromConfig(ConfigSection(),progressData, progressDataFromIni))
+        {
+        HBufC* retrievedprogressDataFromIni = progressDataFromIni.AllocLC();
+        
+        if(*retrievedprogressDataFromIni != aProgressData.GlobalComponentId())
+            {
+            SetTestStepResult(EFail);
+            INFO_PRINTF1(_L("Progress Data Mismatch !") );
+            }
+        else
+            {
+            INFO_PRINTF1(_L("Correct progress data received !") );
+            }
+        
+        CleanupStack::PopAndDestroy(retrievedprogressDataFromIni);       
+        }
+    else
+        {
+        SetTestStepResult(EFail);
+        INFO_PRINTF1(_L("Progress Data Mismatch !") );
+        }   
+    
+    //Print received data ?
+    TBool print;
+    if(GetBoolFromConfig(ConfigSection(),KPrintDetails, print))
+        {
+        INFO_PRINTF2(_L("Global Component Id : %S"),  &aProgressData.GlobalComponentId());
+        INFO_PRINTF2(_L("Phase : %d"),  (TInt)aProgressData.Phase());
+        INFO_PRINTF2(_L("Sub Phase : %d"),  (TInt)aProgressData.SubPhase());
+        INFO_PRINTF2(_L("Current Progress : %d"),  aProgressData.CurrentProgress());
+        INFO_PRINTF2(_L("Total Value : %d"),  aProgressData.Total());
+        
+        }
+    }
+
+void CSifSubscribeTestStep::GenerateIndexedAttributeNameL(TDes& aInitialAttributeName, TInt aIndex)
+    {
+    const TInt MAX_INT_STR_LEN = 8;
+    TBuf<MAX_INT_STR_LEN> integerAppendStr;
+    integerAppendStr.Format(_L("%d"), aIndex);
+    aInitialAttributeName.Append(integerAppendStr);
+    }
+
+CSifPublishTestStep::~CSifPublishTestStep()
+/**
+* Destructor
+*/
+    {
+    INFO_PRINTF1(_L("Cleanup in CSifPublishTestStep::~CSifPublishTestStep()"));
+    delete iTimer;
+    delete iPublisher;
+    delete iSched;
+    }
+
+CSifPublishTestStep::CSifPublishTestStep()
+/**
+* Constructor
+*/
+    {
+    SetTestStepName(KSifPublishTestStep);
+    }
+
+void CSifPublishTestStep::ImplTestStepPreambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+    {
+    INFO_PRINTF1(_L("I am in CSifPublishTestStep::ImplTestStepPreambleL()."));
+    
+    TInt delay(0);
+    //Get the  delay value if present
+    GetIntFromConfig(ConfigSection(),KDelay, delay);
+    if(delay !=0)
+        {
+        User::After(delay * 1000000);
+        }
+   
+    iSched=new(ELeave) CActiveScheduler;
+    CActiveScheduler::Install(iSched);
+    iPublisher = CPublishSifOperationInfo::NewL();
+    }
+
+void CSifPublishTestStep::GenerateIndexedAttributeNameL(TDes& aInitialAttributeName, TInt aIndex)
+    {
+    const TInt MAX_INT_STR_LEN = 8;
+    TBuf<MAX_INT_STR_LEN> integerAppendStr;
+    integerAppendStr.Format(_L("%d"), aIndex);
+    aInitialAttributeName.Append(integerAppendStr);
+    }
+
+void CSifPublishTestStep::PublishDataL(HBufC* aConfigSection)
+    {
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+       configsection = ConfigSection().AllocLC();
+    else
+       configsection = aConfigSection->AllocLC();
+        
+	TPtrC op;
+	GetStringFromConfig(*configsection,KOperation, op);
+    if(op.Compare(_L("start")) == 0)
+		{
+		TPtrC globalCompId, compName, compIcon, appName, appIcon, iconPath, softwareType;
+		TInt appNameCount =0;
+		TInt appIconCount =0;
+		TInt compSize = 0;
+		TInt phase = 0;
+		GetStringFromConfig(*configsection,KGlobalCompId, globalCompId);
+		GetStringFromConfig(*configsection,KComponentName, compName);
+		GetStringFromConfig(*configsection,KComponentIcon, compIcon);
+		GetIntFromConfig(*configsection, KAppNameCount, appNameCount);
+		RPointerArray<HBufC> appNameArray;
+		CleanupResetAndDestroyPushL(appNameArray);
+		for (TUint i = 0; i < appNameCount; ++i)
+			{
+			TPtrC tAppName;
+			TBuf<20> appName;
+			appName = KAppName;
+			GenerateIndexedAttributeNameL(appName, i);
+			GetStringFromConfig(*configsection, appName, tAppName);
+			HBufC* applicationName = tAppName.AllocLC();
+			appNameArray.AppendL(applicationName);
+			CleanupStack::Pop(applicationName);
+			}
+		GetIntFromConfig(*configsection, KAppIconCount, appIconCount);
+		RPointerArray<HBufC> appIconArray;
+		CleanupResetAndDestroyPushL(appIconArray);
+		for (TUint i = 0; i < appIconCount; ++i)
+			{
+			TPtrC tAppIcon;
+			TBuf<20> appIcon;
+			appIcon = KAppIcon;
+			GenerateIndexedAttributeNameL(appIcon, i);
+			GetStringFromConfig(*configsection, appIcon, tAppIcon);
+			HBufC* applicationIcon = tAppIcon.AllocLC();
+			appIconArray.AppendL(applicationIcon);
+			CleanupStack::Pop(applicationIcon);
+			}
+       
+		GetIntFromConfig(*configsection, KComponentSize, compSize);
+		GetStringFromConfig(*configsection, KIconPath, iconPath);
+		GetStringFromConfig(*configsection, KSoftwareType, softwareType);
+		GetIntFromConfig(*configsection, KPhase, phase);
+
+		TSifOperationPhase enumPhase = static_cast<TSifOperationPhase>(phase);
+        CSifOperationStartData* startdata = CSifOperationStartData::NewLC(globalCompId, compName, appNameArray, appIconArray, compSize, iconPath, compIcon, softwareType, enumPhase);
+        iPublisher->PublishStartL(*startdata);   
+        CleanupStack::PopAndDestroy(3, &appNameArray);
+        }
+    else if(op.Compare(_L("progress")) == 0)
+        {
+		TInt phase=0, subPhase=0, curProgress=0, total=0;
+		TPtrC globalCompIdProgress;
+		GetStringFromConfig(*configsection,KGlobalCompId, globalCompIdProgress);
+		GetIntFromConfig(*configsection, KPhase, phase);
+		GetIntFromConfig(*configsection, KSubPhase, subPhase);
+		GetIntFromConfig(*configsection, KCurrentProgress, curProgress);
+		GetIntFromConfig(*configsection, KTotal, total);
+
+		TSifOperationPhase enumPhase = static_cast<TSifOperationPhase>(phase);
+		TSifOperationSubPhase enumSubPhase = static_cast<TSifOperationSubPhase>(subPhase);
+        CSifOperationProgressData* progressdata = CSifOperationProgressData::NewLC(globalCompIdProgress, enumPhase, enumSubPhase, curProgress, total);
+        iPublisher->PublishProgressL(*progressdata);    
+        CleanupStack::PopAndDestroy(progressdata);
+        }
+    else if(op.Compare(_L("end")) == 0)
+        {
+		TPtrC errMsg, errMsgDetails;
+		TInt errCat, errCode;
+		TPtrC globalCompIdEnd;
+		GetStringFromConfig(*configsection,KGlobalCompId, globalCompIdEnd);
+		GetStringFromConfig(*configsection, KErrMsg, errMsg);
+		GetStringFromConfig(*configsection, KErrMsgDetails, errMsgDetails);
+		GetIntFromConfig(*configsection, KErrCategory, errCat);
+		GetIntFromConfig(*configsection, KErrCode, errCode);
+
+		TErrorCategory enumErrCat = static_cast<TErrorCategory>(errCat);
+		CSifOperationEndData* enddata = CSifOperationEndData::NewLC(globalCompIdEnd, enumErrCat, errCode, errMsg, errMsgDetails);
+        iPublisher->PublishCompletionL(*enddata);
+        CStopTimer* timer = CStopTimer::NewL(NULL, 5000000);
+        CleanupStack::PushL(timer);
+        CActiveScheduler::Start();    
+        CleanupStack::PopAndDestroy(2, enddata);
+        }   
+    else if (op.Compare(_L("delay")) == 0)
+        {
+        TInt delay(0);
+        GetIntFromConfig(*configsection, KPublisherDelay, delay);
+        User::After(delay*1000000);
+        }
+        
+        
+    CleanupStack::PopAndDestroy(configsection);
+    }
+
+void CSifPublishTestStep::ImplTestStepL()
+/**
+* @return - TVerdict code
+* Override of base class pure virtual
+* Our implementation only gets called if the base class doTestStepPreambleL() did
+* not leave. That being the case, the current test result value will be EPass.
+*/
+    {
+    RSoftwareInstall sif;
+    User::LeaveIfError(sif.Connect());
+    CleanupClosePushL(sif);
+    
+    TInt operationCount = 0;
+    TPtrC configSectionName(ConfigSection());
+    HBufC* cnfSecName = NULL;
+        
+    GetIntFromConfig(ConfigSection(), KOperationCount, operationCount);
+    for (TUint i = 0; i < operationCount; ++i)
+        {
+        TBuf<20> configSection = _L("configsection");
+        GenerateIndexedAttributeNameL(configSection, i);
+        GetStringFromConfig(ConfigSection(),configSection, configSectionName);
+        cnfSecName = configSectionName.AllocLC();
+        PublishDataL(cnfSecName);
+        CleanupStack::PopAndDestroy(cnfSecName);
+        }
+    CStopTimer* timer = CStopTimer::NewL(NULL, 5000000);
+    CleanupStack::PushL(timer);
+    CActiveScheduler::Start();
+    CleanupStack::PopAndDestroy(2, &sif);
+    }
+
+void CSifPublishTestStep::ImplTestStepPostambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+    {   
+    delete iPublisher;
+    iPublisher=0;
+    delete iSched;
+    iSched=0;
+    }
+
+
+
+
+CStopTimer::CStopTimer(CSifOperationsNotifier* aNotifier) : 
+    CTimer(-1),
+    iNotifier(aNotifier)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CStopTimer::~CStopTimer()
+    {
+    Cancel();
+    }
+
+void CStopTimer::ConstructL(TInt aSeconds)
+    {
+    CTimer::ConstructL();
+    iSeconds = aSeconds;
+    Start();
+    }
+
+void CStopTimer::Start()
+    {
+    After(iSeconds);
+    }
+CStopTimer* CStopTimer::NewL(CSifOperationsNotifier* aNotifier, TInt aSeconds)
+    {
+    CStopTimer* self = new(ELeave) CStopTimer(aNotifier);
+    CleanupStack::PushL(self);
+    self->ConstructL(aSeconds);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CStopTimer::RunL()
+    {
+    if(iNotifier)
+        {
+        //To improve coverage, call cancel subscribe on a non existent key.
+        iNotifier->CancelSubscribeL(123);
+        
+        //cancel all subscriptions.
+        iNotifier->CancelSubscribeL();           
+        }
+    CActiveScheduler::Stop();
+    }
+
+
+TInt CStopTimer::RunError(TInt aError)
+    {
+    (void)aError;
+    return KErrNone;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifnotifierteststep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#ifndef TSIFNOTIFIERTESTSTEP_H
+#define TSIFNOTIFIERTESTSTEP_H
+
+#include <test/testexecutestepbase.h>
+#include <usif/sif/sifnotification.h>
+#include "tsifsuitestepbase.h"
+
+namespace Usif
+	{
+	
+    class CStopTimer : public CTimer
+        {
+    public:
+        static CStopTimer* NewL(CSifOperationsNotifier* aNotifier, TInt aSeconds);
+        CStopTimer(CSifOperationsNotifier* aNotifier);
+        ~CStopTimer();
+        void ConstructL(TInt aSeconds);
+        void Start();
+    private:
+        void RunL();
+        TInt RunError(TInt aError);
+        TInt iSeconds;
+        CSifOperationsNotifier* iNotifier;
+        };  	
+
+	class CSifSubscribeTestStep : public CSifSuiteStepBase, public MSifOperationsHandler
+		{
+	public:
+		virtual ~CSifSubscribeTestStep();
+		CSifSubscribeTestStep();
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepL();
+		virtual void ImplTestStepPostambleL();
+		
+		//Implementing MSifOperationsHandler
+		void StartOperationHandler(TUint aKey, const CSifOperationStartData& aStartData);
+		void EndOperationHandler(const CSifOperationEndData& aEndData);
+		void ProgressOperationHandler(const CSifOperationProgressData& aProgressData);
+		
+	private:
+	    void GenerateIndexedAttributeNameL(TDes& aInitialAttributeName, TInt aIndex);
+	private:
+	    CActiveScheduler* iSched;
+	    CSifOperationsNotifier* iNotifier;
+	    TInt iKey;
+	    TInt iStartMessageCounter;
+	    TInt iProgressMessageCounter;
+	    TInt iEndMessageCounter;
+	    TInt iSubscribeCounter;
+	    TInt iSubscriberNum;
+	    CStopTimer * iTimer;
+		};
+	
+	_LIT(KSifSubscribeTestStep,"SifSubscribeStep");
+		
+
+	class CSifPublishTestStep : public CSifSuiteStepBase
+	    {
+	public:
+	    virtual ~CSifPublishTestStep();
+	    CSifPublishTestStep();
+	    virtual void ImplTestStepPreambleL();
+	    virtual void ImplTestStepL();
+	    virtual void ImplTestStepPostambleL();
+	    
+	    void GenerateIndexedAttributeNameL(TDes& aInitialAttributeName, TInt aIndex);
+	    void PublishDataL(HBufC* aConfigSection);    
+	private:
+	    CActiveScheduler* iSched;
+	    CPublishSifOperationInfo* iPublisher;
+	    CStopTimer* iTimer;
+	    };
+
+	_LIT(KSifPublishTestStep,"SifPublishStep");
+	
+	    
+	} // namespace Sif
+
+#endif // TSIFNOTIFIERTESTSTEP_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifoperationstep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1186 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#include "tsifoperationstep.h"
+#include "tsifsuitedefs.h"
+#include <ct/rcpointerarray.h>
+
+using namespace Usif;
+
+CSifOperationStep::~CSifOperationStep()
+/**
+* Destructor
+*/
+	{
+	}
+
+CSifOperationStep::CSifOperationStep() : iExclusiveOperation(ETrue)
+/**
+* Constructor
+*/
+	{
+	}
+
+void CSifOperationStep::ImplTestStepPreambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{
+	CSifSuiteStepBase::ImplTestStepPreambleL();
+	INFO_PRINTF1(_L("I am in CSifOperationStep::ImplTestStepPreambleL()."));
+	if (TestStepResult()!=EPass)
+		{
+		return;
+		}
+
+	if (!GetIntFromConfig(ConfigSection(),KTe_CancelAfter, iCancelAfter))
+		{
+		iCancelAfter = -1;
+		}
+
+	TInt err = iSif.Connect();
+	if (err != KErrNone)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF2(_L("Failed to connect to the SIF server, error code: %d"), err);
+		}
+	else
+		{
+		SetTestStepResult(EPass);
+		}
+
+	LoadExclusiveOperationFlagFromConfigL();
+	}
+
+void CSifOperationStep::ImplTestStepPostambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{	
+	INFO_PRINTF1(_L("Cleanup in CSifOperationStep::~CSifOperationStep()"));
+	
+	iSif.Close();
+	
+	delete iComponentInfo;
+	iComponentInfo = NULL;
+	ClearOpaqueParams();
+	}
+	
+void CSifOperationStep::ClearOpaqueParams()
+	{
+	delete iPluginOpaqueArguments;
+	iPluginOpaqueArguments = NULL;
+	delete iPluginOpaqueResults;
+	iPluginOpaqueResults = NULL;
+	delete iPluginRefOpaqueResults;
+	iPluginRefOpaqueResults = NULL;	
+	}	
+
+void CSifOperationStep::CancelableWait()
+	{
+	if (iCancelAfter >= 0)
+		{
+		User::After(iCancelAfter);
+		iSif.CancelOperation();
+		}
+	else
+		{
+		User::WaitForRequest(iStatus);
+		}
+	}
+
+
+void CSifOperationStep::LoadFileNameFromConfigL()
+	{
+	if(!GetStringFromConfig(ConfigSection(),KTe_PackageFile, iFileName))
+		{
+		INFO_PRINTF2(_L("Parameter %S not found in the ini file"), &KTe_PackageFile);
+		User::Leave(KErrNotFound);
+		}
+	}
+
+void CSifOperationStep::LoadComponentIdFromConfigL()
+	{
+	TPtrC componentName, componentVendor;
+	if (GetStringFromConfig(ConfigSection(), KTe_ComponentName, componentName) &&
+		GetStringFromConfig(ConfigSection(), KTe_ComponentVendor, componentVendor))
+		{
+		iComponentId = FindComponentInScrL(componentName, componentVendor);
+		if (iComponentId != 0)
+			{
+			return;
+			}
+		INFO_PRINTF3(_L("Component name = %S, vendor = %S not found in SCR"), &componentName, &componentVendor);
+		User::Leave(KErrNotFound);
+		}
+
+
+	if(!GetIntFromConfig(ConfigSection(), KTe_ComponentId, iComponentId))
+		{
+		User::Leave(KErrNotFound);
+		}
+	}
+
+void CSifOperationStep::LoadComponentInfoFromConfigL()
+	{
+	}
+
+void CSifOperationStep::LoadExclusiveOperationFlagFromConfigL()
+	{
+	GetBoolFromConfig(ConfigSection(),KTe_ExclusiveOperation, iExclusiveOperation);
+	}
+
+void CSifOperationStep::LoadPluginOpaqueParamsFromConfigL(const TDesC& aNamePattern, const TDesC& aTypePattern, const TDesC& aValuePattern, COpaqueNamedParams& aOpaqueParams)
+	{
+	// name pattern
+	HBufC* namePattern = HBufC::NewLC(aNamePattern.Length()+KMaxIntDigits);
+	TPtr bufNamePattern(namePattern->Des());
+	// value pattern
+	HBufC* valuePattern = HBufC::NewLC(aValuePattern.Length()+KMaxIntDigits);
+	TPtr bufValuePattern(valuePattern->Des());
+	// value type pattern
+	HBufC* typePattern = HBufC::NewLC(aTypePattern.Length()+KMaxIntDigits);
+	TPtr bufTypePattern(typePattern->Des());
+
+	const TInt maxNumParams = 16;
+	for (TInt i=0; i<maxNumParams; ++i)
+		{
+		// param name
+		bufNamePattern.Copy(aNamePattern);
+		bufNamePattern.AppendNum(i);
+		TPtrC name;
+		if (!GetStringFromConfig(ConfigSection(), *namePattern, name))
+			{
+			break;
+			}
+		
+		//param type
+		bufTypePattern.Copy(aTypePattern);
+		bufTypePattern.AppendNum(i);
+		TPtrC type;
+		if (!GetStringFromConfig(ConfigSection(), *typePattern, type))
+			{
+			INFO_PRINTF2(_L("Expected opaque param type: %S not found "), typePattern);
+			User::Leave(KErrNotFound);
+			}
+
+		//param value
+		bufValuePattern.Copy(aValuePattern);
+		bufValuePattern.AppendNum(i);
+		if (type.Compare(KTe_PluginOpaqueValueTypeString) == 0)
+			{
+			TPtrC value;
+			if (GetStringFromConfig(ConfigSection(), *valuePattern, value))
+				{
+				aOpaqueParams.AddStringL(name, value);
+				}
+			else
+				{
+				INFO_PRINTF2(_L("Expected opaque param value: %S not found "), valuePattern);
+				User::Leave(KErrNotFound);
+				}
+			}
+		else if (type.Compare(KTe_PluginOpaqueValueTypeInt) == 0)
+			{
+			TInt value = 0;
+			if(GetIntFromConfig(ConfigSection(), *valuePattern, value))
+				{
+				aOpaqueParams.AddIntL(name, value);
+				}
+			else
+				{
+				INFO_PRINTF2(_L("Expected opaque param value: %S not found "), valuePattern);
+				User::Leave(KErrNotFound);
+				}
+			}
+		else
+			{
+			INFO_PRINTF2(_L("Unknow type of opaque param value: %S "), &type);
+			User::Leave(KErrUnknown);
+			}
+		
+		}
+	CleanupStack::PopAndDestroy(3, namePattern);
+	}
+
+void ClearOpaqueParamsCleanup(TAny* aParam)
+	{
+	static_cast<CSifOperationStep*>(aParam)->ClearOpaqueParams();
+	}	
+	
+void CSifOperationStep::LoadOpaqueParamsL()
+	{
+	GetBoolFromConfig(ConfigSection(),KTe_UseEnhancedApi, iUseEnhancedApi);
+
+	CleanupStack::PushL(TCleanupItem(ClearOpaqueParamsCleanup, this));
+	if (iUseEnhancedApi)
+		{
+		delete iPluginOpaqueArguments;
+		iPluginOpaqueArguments = NULL;
+		iPluginOpaqueArguments = COpaqueNamedParams::NewL();
+		delete iPluginOpaqueResults;
+		iPluginOpaqueResults = NULL;
+		iPluginOpaqueResults = COpaqueNamedParams::NewL();
+		delete iPluginRefOpaqueResults;
+		iPluginRefOpaqueResults = NULL;
+		iPluginRefOpaqueResults = COpaqueNamedParams::NewL();
+
+		LoadPluginOpaqueParamsFromConfigL(KTe_PluginOpaqueArgumentName, KTe_PluginOpaqueArgumentType, KTe_PluginOpaqueArgumentValue, *iPluginOpaqueArguments);
+		LoadPluginOpaqueParamsFromConfigL(KTe_PluginRefOpaqueResultName, KTe_PluginRefOpaqueResultType, KTe_PluginRefOpaqueResultValue, *iPluginRefOpaqueResults);
+		}
+	CleanupStack::Pop(); // ClearOpaqueParams
+	}
+
+TBool CSifOperationStep::CompareOpaqueResultsL()
+	{
+	if (iPluginOpaqueResults == NULL && iPluginRefOpaqueResults == NULL)
+		{
+		return ETrue;
+		}
+	else if (iPluginOpaqueResults == NULL || iPluginRefOpaqueResults == NULL)
+		{
+		return EFalse;
+		}
+	
+	const TInt llen = iPluginOpaqueResults->CountL();
+	const TInt rlen = iPluginRefOpaqueResults->CountL();
+	if (llen != rlen)
+		{
+		INFO_PRINTF3(_L("The number of expected and returned opaque params differs. Expected: %d, returned: %d "), rlen, llen);
+		return EFalse;
+		}
+
+	RCPointerArray<HBufC> names;
+	CleanupClosePushL(names);
+	iPluginOpaqueResults->GetNamesL(names);
+
+	for (TInt i=0; i<llen; ++i)
+		{
+		const TDesC& lName = *names[i];
+		const TDesC& lValue = iPluginOpaqueResults->StringByNameL(lName);
+		const TDesC& rValue = iPluginRefOpaqueResults->StringByNameL(lName);
+		
+		if (rValue == KTe_AnyValuePermitted && rValue != KNullDesC)
+			{
+			continue;
+			}
+
+		if (lValue.Size() != rValue.Size())
+			{
+			INFO_PRINTF4(_L("Mismatch on param sizes for param %S. Expected size %d, returned size %d"), &lName, rValue.Size(), lValue.Size());
+			CleanupStack::PopAndDestroy(&names);
+			return EFalse;
+			}
+		if (lValue.Size() != sizeof(TInt) && lValue != rValue)
+			{
+			INFO_PRINTF4(_L("Mismatch for string param %S. Expected %S, returned %S"), &lName, &rValue, &lValue);
+			CleanupStack::PopAndDestroy(&names);
+			return EFalse;
+			}
+		if (lValue.Size() == sizeof(TInt))
+			{
+			TInt lIntValue = iPluginOpaqueResults->IntByNameL(lName);
+			TInt rIntValue = iPluginRefOpaqueResults->IntByNameL(lName);
+			if (lIntValue != rIntValue)
+				{
+				INFO_PRINTF4(_L("Mismatch for integer param %S. Expected %d, returned %d"), &lName, rIntValue, lIntValue);
+				CleanupStack::PopAndDestroy(&names);
+				return EFalse;
+				}
+			}
+		}
+
+	CleanupStack::PopAndDestroy(&names);
+	return ETrue;
+	}
+
+void CSifOperationStep::PrintOpaqueParamsL(const COpaqueNamedParams& aOpaqueParams)
+	{
+	RCPointerArray<HBufC> names;
+	CleanupClosePushL(names);
+	aOpaqueParams.GetNamesL(names);
+	for (TInt i=0; i<names.Count(); ++i)
+		{
+		const TDesC& name = *names[i];
+		const TDesC& value = aOpaqueParams.StringByNameL(name);
+		if (value.Size() == sizeof(TInt))
+			{
+			const TInt intValue = aOpaqueParams.IntByNameL(name);
+			INFO_PRINTF4(_L("Param: %d, Name: %S, IntValue: %d"), i, &name, intValue);
+			}
+		else
+			{
+			INFO_PRINTF4(_L("Param: %d, Name: %S, Value: %S"), i, &name, &value);
+			}
+		}
+	CleanupStack::PopAndDestroy(&names);
+	}
+
+TBool CSifOperationStep::CheckOpaqueResultsL()
+	{
+	if (CompareOpaqueResultsL())
+		{
+		return ETrue;
+		}
+
+	INFO_PRINTF1(_L("==================== Begin of opaque results ===================="));
+
+	if (iPluginOpaqueResults)
+		{
+		INFO_PRINTF1(_L("Expected opaque results:"));
+		PrintOpaqueParamsL(*iPluginOpaqueResults);
+		}
+
+	INFO_PRINTF1(_L("-----------------------------------------------------------------"));
+
+	if (iPluginRefOpaqueResults)
+		{
+		INFO_PRINTF1(_L("Returned opaque results:"));
+		PrintOpaqueParamsL(*iPluginRefOpaqueResults);
+		}
+
+	INFO_PRINTF1(_L("===================== End of opaque results ====================="));
+
+	return EFalse;
+	}
+
+
+// *****************************************************************************************************
+
+
+CSifGetComponentInfoStep::~CSifGetComponentInfoStep()
+/**
+* Destructor
+*/
+	{
+	delete iComponentInfo;
+	}
+
+CSifGetComponentInfoStep::CSifGetComponentInfoStep() : iCompareMaxInstalledSize(ETrue)
+/**
+* Constructor
+*/
+	{
+	SetTestStepName(KSifGetComponentInfoStep);
+	iconIndex = 0;
+	}
+
+namespace
+	{
+	TInt PackCapabilitySet(const TCapabilitySet& aCapSet)
+		{
+		TInt caps=0;
+		for (TInt c=0; c<ECapability_Limit; ++c)
+			{
+			if (aCapSet.HasCapability(TCapability(c)))
+				{
+				caps+=(1<<c);
+				}
+			}
+		return caps;
+		}
+
+	void UnpackCapabilitySet(TInt aPackedCapSet, TCapabilitySet& aCapSet)
+		{
+		for (TInt c=0; c<ECapability_Limit; ++c)
+			{
+			const TInt cap = 1<<c;
+			if (aPackedCapSet&cap)
+				{
+				aCapSet.AddCapability(TCapability(c));
+				}
+			}
+		}
+	}
+
+void CSifGetComponentInfoStep::LoadComponentInfoL()
+	{
+	ASSERT(iComponentInfo == NULL);
+
+	// Load the tree of CComponentInfo nodes
+	CComponentInfo::CNode* rootNode = LoadCompInfoNodeLC(KTe_CompInfoRootNodePrefix);
+	
+	// Create an instance of CComponentInfo
+	iComponentInfo = CComponentInfo::NewL();
+	iComponentInfo->SetRootNodeL(rootNode);
+	CleanupStack::Pop(rootNode);
+	}
+
+namespace
+	{
+	HBufC* CompInfoParamNameLC(const TDesC& aStr1, const TDesC& aStr2)
+		{
+		HBufC* conc = HBufC::NewLC(aStr1.Length()+aStr2.Length()+1);
+		TPtr bufConc(conc->Des());
+		bufConc.Copy(aStr1);
+		bufConc.Append(_L("."));
+		bufConc.Append(aStr2);
+		return conc;
+		}
+	}
+
+TPtrC CSifGetComponentInfoStep::LoadCompInfoNodeStringParamL(const TDesC& aNodePrefix, const TDesC& aParamName)
+	{
+	HBufC* name = CompInfoParamNameLC(aNodePrefix, aParamName);
+
+	TPtrC value;
+	if (!GetStringFromConfig(ConfigSection(), *name, value))
+		{
+		INFO_PRINTF2(_L("ComponentInfo param: %S not found in the ini file"), name);
+		User::Leave(KErrNotFound);
+		}
+
+	CleanupStack::PopAndDestroy(name);
+	return value;
+	}
+
+TInt CSifGetComponentInfoStep::LoadCompInfoNodeIntParamL(const TDesC& aNodePrefix, const TDesC& aParamName, TBool aMandatory)
+	{
+	HBufC* name = CompInfoParamNameLC(aNodePrefix, aParamName);
+
+	TInt value(0);
+	if (!GetIntFromConfig(ConfigSection(), *name, value) && aMandatory)
+		{
+		INFO_PRINTF2(_L("ComponentInfo param: %S not found in the ini file"), name);
+		User::Leave(KErrNotFound);
+		}
+
+	CleanupStack::PopAndDestroy(name);
+	return value;
+	}
+
+TBool CSifGetComponentInfoStep::LoadCompInfoNodeBoolParamL(const TDesC& aNodePrefix, const TDesC& aParamName, TBool aMandatory)
+	{
+	HBufC* name = CompInfoParamNameLC(aNodePrefix, aParamName);
+
+	TBool value(EFalse);
+	if (!GetBoolFromConfig(ConfigSection(), *name, value) && aMandatory)
+		{
+		INFO_PRINTF2(_L("ComponentInfo param: %S not found in the ini file"), name);
+		User::Leave(KErrNotFound);
+		}
+
+	CleanupStack::PopAndDestroy(name);
+	return value;
+	}
+
+CComponentInfo::CNode* CSifGetComponentInfoStep::LoadCompInfoNodeLC(const TDesC& aNodeName)
+	{
+	TPtrC swType(LoadCompInfoNodeStringParamL(aNodeName, KTe_SoftwareTypeName));
+	TPtrC name(LoadCompInfoNodeStringParamL(aNodeName, KTe_ComponentName));
+	TPtrC vendor(LoadCompInfoNodeStringParamL(aNodeName, KTe_ComponentVendor));
+	TPtrC version(LoadCompInfoNodeStringParamL(aNodeName, KTe_ComponentVersion));
+	TPtrC globalId(LoadCompInfoNodeStringParamL(aNodeName, KTe_GlobalComponentId));
+
+	TInt scomoState(LoadCompInfoNodeIntParamL(aNodeName, KTe_ScomoState));
+	TInt installStatus(LoadCompInfoNodeIntParamL(aNodeName, KTe_InstallStatus));
+	TInt componentId(LoadCompInfoNodeIntParamL(aNodeName, KTe_ComponentId));
+	TInt authenticity(LoadCompInfoNodeIntParamL(aNodeName, KTe_Authenticity));
+	TInt size(LoadCompInfoNodeIntParamL(aNodeName, KTe_MaxInstalledSize));
+	TBool hasexe(LoadCompInfoNodeBoolParamL(aNodeName, KTe_HasExecutable));
+	TBool driveSelectionRequired(LoadCompInfoNodeBoolParamL(aNodeName, KTe_DriveSelectionRequired));
+	TInt noOfApps(LoadCompInfoNodeIntParamL(aNodeName,KTe_NumberOfApplications));
+	
+	TBuf<20> appUidTxt;
+	TBuf<20> appFileNameTxt;
+	TBuf<20> appGroupNameTxt;
+	TBuf<20> appIconFileNameTxt;
+	TBuf<20> appIconFileSize;
+	const TInt MAX_INT_STR_LEN = 8;
+    TBuf<MAX_INT_STR_LEN> integerAppendStr;
+    RPointerArray<Usif::CComponentInfo::CApplicationInfo> applications;
+	
+	for(TInt index = 0; index < noOfApps ; index++)
+	   {
+	   integerAppendStr.Format(_L("%d"), index);
+	   appUidTxt = KTe_ApplicationUid; 
+	   appUidTxt.Append(integerAppendStr);
+	   TInt val = 0;
+	   HBufC* name = CompInfoParamNameLC(aNodeName, appUidTxt);	   
+	   GetHexFromConfig(ConfigSection(),*name, val);
+	   TUid appuid = TUid::Uid(val);
+	   CleanupStack::PopAndDestroy(name);
+	   
+	   appFileNameTxt=KTe_ApplicationName;
+	   appFileNameTxt.Append(integerAppendStr);
+	   TPtrC appFileName(LoadCompInfoNodeStringParamL(aNodeName,appFileNameTxt));
+	   
+	   appGroupNameTxt=KTe_ApplicationGroupName;
+	   appGroupNameTxt.Append(integerAppendStr);
+	   TPtrC appGroupName(LoadCompInfoNodeStringParamL(aNodeName,appGroupNameTxt));
+	   
+	   appIconFileNameTxt=KTe_ApplicationIconFileName;
+	   appIconFileNameTxt.Append(integerAppendStr);
+	   TPtrC appIconFileName(LoadCompInfoNodeStringParamL(aNodeName,appIconFileNameTxt));
+	   	   
+	   Usif::CComponentInfo::CApplicationInfo* app = NULL;
+	   app = Usif::CComponentInfo::CApplicationInfo::NewLC(appuid, appFileName, appGroupName, appIconFileName);
+	   
+	   appIconFileSize = KTe_ApplicationIconFileSize;
+	   appIconFileSize.Append(integerAppendStr);
+	   TInt fileSize(LoadCompInfoNodeIntParamL(aNodeName,appIconFileSize));
+	   iIconFileSizes.Append(fileSize);
+	   
+	   applications.AppendL(app);
+	   CleanupStack::Pop(app);
+	   }	
+	
+	
+	TInt packedCaps(LoadCompInfoNodeIntParamL(aNodeName, KTe_UserGrantableCaps));
+	TCapabilitySet capSet;
+	capSet.SetEmpty();
+	UnpackCapabilitySet(packedCaps, capSet);
+
+	CComponentInfo::CNode* node = CComponentInfo::CNode::NewLC(swType, name, version, vendor,
+					static_cast<TScomoState>(scomoState), static_cast<TInstallStatus>(installStatus),
+					static_cast<TComponentId>(componentId), globalId, static_cast<TAuthenticity>(authenticity),
+					capSet, size, hasexe, driveSelectionRequired, &applications);
+	
+	
+	// Load children
+	TInt numChildren(LoadCompInfoNodeIntParamL(aNodeName, KTe_CompInfoNumChildren, EFalse));
+	for (TInt i=0; i<numChildren; ++i)
+		{
+		HBufC* childNodeName = HBufC::NewLC(aNodeName.Length() + KTe_CompInfoChildNodePrefix.iTypeLength + KMaxIntDigits);
+		TPtr childNodeNamePtr(childNodeName->Des());
+		childNodeNamePtr.Copy(aNodeName);
+		childNodeNamePtr.Append(KTe_CompInfoChildNodePrefix);
+		childNodeNamePtr.AppendNum(i);
+		
+		CComponentInfo::CNode* childNode = LoadCompInfoNodeLC(*childNodeName);
+		node->AddChildL(childNode);
+		CleanupStack::Pop(childNode);
+		
+		CleanupStack::PopAndDestroy(childNodeName);
+		}
+	applications.Close();
+	return node;
+	}
+
+
+TBool CSifGetComponentInfoStep::CompareAppInfoL(const CComponentInfo::CNode& aExpectedNode, const CComponentInfo::CNode& aObtainedNode)
+    {
+    RPointerArray<Usif::CComponentInfo::CApplicationInfo> obtainedApplicationInfo; 
+    RPointerArray<Usif::CComponentInfo::CApplicationInfo> expectedApplicationInfo;
+    obtainedApplicationInfo = aObtainedNode.Applications();
+    expectedApplicationInfo = aExpectedNode.Applications();
+    TInt obtainedApplicationInfoCount = obtainedApplicationInfo.Count();
+    TInt expectedApplicationInfoCount = expectedApplicationInfo.Count();       
+    
+    if(obtainedApplicationInfoCount != expectedApplicationInfoCount)
+        {
+        INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained Application Info Count: %d/%d"), expectedApplicationInfoCount, obtainedApplicationInfoCount);
+        return EFalse;
+        }
+    if(0 != expectedApplicationInfoCount)
+        {                   
+        for(TInt i=0 ; i < expectedApplicationInfoCount ; i++)
+            {
+            
+            if(expectedApplicationInfo[i]->AppUid() != obtainedApplicationInfo[i]->AppUid())
+               {
+               INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained Application UID: 0x%08x/0x%08x"), expectedApplicationInfo[i]->AppUid(), obtainedApplicationInfo[i]->AppUid());
+               return EFalse;
+               }
+                
+            if(expectedApplicationInfo[i]->Name().Compare(obtainedApplicationInfo[i]->Name()))
+               {
+               INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained Application Name: %S/%S"), &expectedApplicationInfo[i]->Name(), &obtainedApplicationInfo[i]->Name());
+               return EFalse;
+               }
+    
+            if(expectedApplicationInfo[i]->GroupName().Compare(obtainedApplicationInfo[i]->GroupName()))
+               {
+               INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained Application Group Name: %S/%S"), &expectedApplicationInfo[i]->GroupName(), &obtainedApplicationInfo[i]->GroupName());
+               return EFalse;
+               }
+            
+            _LIT(emtyString,"");
+            if(obtainedApplicationInfo[i]->IconFileName().Compare(emtyString))
+                {
+                //Opening a file server session for icon file size comparison
+                RFs fs;            
+                User::LeaveIfError(fs.Connect());
+                CleanupClosePushL(fs);       
+                TEntry entry;
+                User::LeaveIfError(fs.Entry(obtainedApplicationInfo[i]->IconFileName(),entry));  
+                CleanupStack::Pop(&fs);
+                fs.Close();
+                
+                if(iCompareIconFileSize && iIconFileSizes[iconIndex++] != entry.iSize)
+                   {
+                   INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained Application Icon File Size: %d/%d"), iIconFileSizes[--iconIndex], entry.iSize);                                  
+                   return EFalse;
+                   }                 
+                }
+            if(expectedApplicationInfo[i]->IconFileName().Compare(obtainedApplicationInfo[i]->IconFileName()))
+               {
+               INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained Application Icon File Name: %S/%S"), &expectedApplicationInfo[i]->IconFileName(), &obtainedApplicationInfo[i]->IconFileName());
+               return EFalse;
+               }            
+            }
+        }
+    return ETrue;
+    }
+
+
+TBool CSifGetComponentInfoStep::CompareCompInfoNodeL(const CComponentInfo::CNode& aExpectedNode, const CComponentInfo::CNode& aObtainedNode)
+	{	
+	INFO_PRINTF2(_L("Checking CComponentInfo for component: '%S'"), &aExpectedNode.ComponentName());
+	if (aExpectedNode.SoftwareTypeName() != aObtainedNode.SoftwareTypeName())
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained SoftwareTypeName: '%S'/'%S'"), &aExpectedNode.SoftwareTypeName(), &aObtainedNode.SoftwareTypeName());
+		return EFalse;
+		}
+
+	if (aExpectedNode.ComponentName() != aObtainedNode.ComponentName())
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained ComponentName: '%S'/'%S'"), &aExpectedNode.ComponentName(), &aObtainedNode.ComponentName());
+		return EFalse;
+		}
+
+	if (aExpectedNode.Version() != aObtainedNode.Version())
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained Version: '%S'/'%S'"), &aExpectedNode.Version(), &aObtainedNode.Version());
+		return EFalse;
+		}
+
+	if (aExpectedNode.Vendor() != aObtainedNode.Vendor())
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained Vendor: '%S'/'%S'"), &aExpectedNode.Vendor(), &aObtainedNode.Vendor());
+		return EFalse;
+		}
+
+	if (aExpectedNode.ScomoState() != aObtainedNode.ScomoState() && aObtainedNode.InstallStatus() != EInvalid &&
+		aObtainedNode.InstallStatus() != ENewComponent) // SCOMO status is meaningless on non-existing components
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained ScomoState: %d/%d"), aExpectedNode.ScomoState(), aObtainedNode.ScomoState());
+		return EFalse;
+		}
+
+	if (aExpectedNode.InstallStatus() != aObtainedNode.InstallStatus())
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained InstallStatus: %d/%d"), aExpectedNode.InstallStatus(), aObtainedNode.InstallStatus());
+		return EFalse;
+		}
+
+	if (aExpectedNode.ComponentId() != aObtainedNode.ComponentId())
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained ComponentId: %d/%d"), aExpectedNode.ComponentId(), aObtainedNode.ComponentId());
+		return EFalse;
+		}
+
+	if (aExpectedNode.GlobalComponentId() != aObtainedNode.GlobalComponentId())
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained GlobalComponentId: '%S'/'%S'"), &aExpectedNode.GlobalComponentId(), &aObtainedNode.GlobalComponentId());
+		return EFalse;
+		}
+
+	if (aExpectedNode.Authenticity() != aObtainedNode.Authenticity())
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained Authenticity: %d/%d"), aExpectedNode.Authenticity(), aObtainedNode.Authenticity());
+		return EFalse;
+		}
+
+	if (PackCapabilitySet(aExpectedNode.UserGrantableCaps()) != PackCapabilitySet(aObtainedNode.UserGrantableCaps()))
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained UserGrantableCaps: %d/%d"), PackCapabilitySet(aExpectedNode.UserGrantableCaps()), PackCapabilitySet(aObtainedNode.UserGrantableCaps()));
+		return EFalse;
+		}
+
+	if (iCompareMaxInstalledSize && aExpectedNode.MaxInstalledSize() != aObtainedNode.MaxInstalledSize())
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained MaxInstalledSize: %d/%d"), aExpectedNode.MaxInstalledSize(), aObtainedNode.MaxInstalledSize());
+		return EFalse;
+		}
+	if (aExpectedNode.HasExecutable() != aObtainedNode.HasExecutable())
+		{
+		INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained Has Executable Flag: %d/%d"), aExpectedNode.HasExecutable(), aObtainedNode.HasExecutable());
+		return EFalse;
+		}
+	
+	if (aExpectedNode.DriveSeletionRequired() != aObtainedNode.DriveSeletionRequired())
+	    {
+	    INFO_PRINTF3(_L("CComponentInfo doesn't match: expected/obtained Drive selection required: %d/%d"), aExpectedNode.DriveSeletionRequired(), aObtainedNode.DriveSeletionRequired());
+	    return EFalse;
+	    }
+	
+	if(!CompareAppInfoL(aExpectedNode, aObtainedNode))
+	    {
+	    iIconFileSizes.Close();
+	    return EFalse;
+	    }
+	
+	const RPointerArray<CComponentInfo::CNode>& expectedChildren = aExpectedNode.Children();
+	const RPointerArray<CComponentInfo::CNode>& obtainedChildren = aObtainedNode.Children();
+	if (expectedChildren.Count() != obtainedChildren.Count())
+		{
+		INFO_PRINTF4(_L("CComponentInfo doesn't match: component %S has different number of embedded components, expected/obtained: %d/%d"), &aExpectedNode.ComponentName(), expectedChildren.Count(), obtainedChildren.Count());
+		return EFalse;
+		}
+	
+	for (TInt i=0; i<expectedChildren.Count(); ++i)
+		{
+		const CComponentInfo::CNode& expectedChild = *expectedChildren[i];
+		const CComponentInfo::CNode& obtainedChild = *obtainedChildren[i];
+		if (!CompareCompInfoNodeL(expectedChild, obtainedChild))
+			{
+			INFO_PRINTF3(_L("CComponentInfo tree comparison failed at component: %S, vendor: %S"), &aExpectedNode.ComponentName(), &aExpectedNode.Vendor());
+			return EFalse;
+			}
+		}		
+	return ETrue;
+	}
+
+void CSifGetComponentInfoStep::ImplTestStepPreambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{
+	CSifOperationStep::ImplTestStepPreambleL();
+	INFO_PRINTF1(_L("I am in Test Step Preamble in Class CSifGetComponentInfoStep"));
+
+	if (TestStepResult()==EPass)
+		{
+		LoadFileNameFromConfigL();
+
+		LoadComponentInfoL();
+
+		GetBoolFromConfig(ConfigSection(),KTe_OperationByFileHandle, iOperationByFileHandle);
+		
+		GetBoolFromConfig(ConfigSection(),KTe_CompareMaxInstalledSize, iCompareMaxInstalledSize);
+		
+		GetBoolFromConfig(ConfigSection(),KTe_CompareIconFileSize, iCompareIconFileSize);
+		}
+	}
+
+
+void CSifGetComponentInfoStep::ImplTestStepL()
+/**
+* @return - TVerdict code
+* Override of base class pure virtual
+* Our implementation only gets called if the base class ImplTestStepPreambleL() did
+* not leave. That being the case, the current test result value will be EPass.
+*/
+	{
+	if (TestStepResult()!=EPass)
+		{
+		INFO_PRINTF1(_L("CSifGetComponentInfoStep::ImplTestStepL() called with TestStepResult()!=EPass"));
+		return;
+		}
+
+	INFO_PRINTF1(_L("In the file CSifGetComponentInfoStep::ImplTestStepL()"));
+
+	CComponentInfo* compInfo = CComponentInfo::NewLC();
+
+	RFs fs;
+	RFile file;
+	if (iOperationByFileHandle)
+		{
+		User::LeaveIfError(fs.Connect());
+		fs.ShareProtected();
+		CleanupClosePushL(fs);
+		User::LeaveIfError(file.Open(fs, iFileName, EFileShareReadersOnly));
+		CleanupClosePushL(file);
+
+		iSif.GetComponentInfo(file, *compInfo, iStatus);
+		}
+	else
+		{
+		iSif.GetComponentInfo(iFileName, *compInfo, iStatus);
+		}
+
+	CancelableWait();
+
+	if (iOperationByFileHandle)
+		{
+		CleanupStack::PopAndDestroy(2, &fs);
+		}
+	
+	User::LeaveIfError(iStatus.Int());
+
+	TInt err = 0;
+	TRAP(err, SetTestStepResult(CompareCompInfoNodeL(iComponentInfo->RootNodeL(), compInfo->RootNodeL()) ? EPass : EFail););
+	iIconFileSizes.Close();
+	CleanupStack::PopAndDestroy(compInfo);
+	}
+
+// *****************************************************************************************************
+
+
+CSifInstallStep::~CSifInstallStep()
+/**
+* Destructor
+*/
+	{
+	}
+
+CSifInstallStep::CSifInstallStep()
+/**
+* Constructor
+*/
+	{
+	SetTestStepName(KSifInstallStep);
+	}
+
+void CSifInstallStep::ImplTestStepPreambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{
+	CSifOperationStep::ImplTestStepPreambleL();
+	INFO_PRINTF1(_L("I am in Test Step Preamble in Class CSifInstallStep"));
+	}
+
+
+void CSifInstallStep::ImplTestStepL()
+/**
+* @return - TVerdict code
+* Override of base class pure virtual
+* Our implementation only gets called if the base class ImplTestStepPreambleL() did
+* not leave. That being the case, the current test result value will be EPass.
+*/
+	{
+	if (TestStepResult()!=EPass)
+		{
+		INFO_PRINTF1(_L("CSifInstallStep::ImplTestStepL() called with TestStepResult()!=EPass"));
+		return;
+		}
+
+	INFO_PRINTF1(_L("In the file CSifInstallStep::ImplTestStepL()"));	
+	
+	LoadOpaqueParamsL();
+	CleanupStack::PushL(TCleanupItem(ClearOpaqueParamsCleanup, this));
+	
+	LoadFileNameFromConfigL();
+		
+	GetBoolFromConfig(ConfigSection(),KTe_OperationByFileHandle, iInstallByFileHandle);
+		
+	RFs fs;
+	RFile file;
+	if (iInstallByFileHandle)
+		{
+		User::LeaveIfError(fs.Connect());
+		fs.ShareProtected();
+		CleanupClosePushL(fs);
+		User::LeaveIfError(file.Open(fs, iFileName, EFileRead | EFileShareReadersOnly));
+		CleanupClosePushL(file);
+
+		if (iUseEnhancedApi)
+			{
+			iSif.Install(file, *iPluginOpaqueArguments, *iPluginOpaqueResults, iStatus, iExclusiveOperation);
+			}
+		else
+			{
+			iSif.Install(file, iStatus, iExclusiveOperation);
+			}
+		}
+	else
+		{
+		if (iUseEnhancedApi)
+			{
+			iSif.Install(iFileName, *iPluginOpaqueArguments, *iPluginOpaqueResults, iStatus, iExclusiveOperation);
+			}
+		else
+			{
+			iSif.Install(iFileName, iStatus, iExclusiveOperation);
+			}
+		}
+
+	CancelableWait();
+
+	if (iInstallByFileHandle)
+		{
+		CleanupStack::PopAndDestroy(2, &fs);
+		}
+
+	TInt err = iStatus.Int();
+	if (err != KErrNone)
+		{
+		INFO_PRINTF2(_L("CSifInstallStep::ImplTestStepL failed with error code = %d"), err);
+		User::LeaveIfError(err);
+		}
+	
+	TBool res = EFalse;
+	TRAP(err, res = CompareOpaqueResultsL());
+	if (err != KErrNoMemory)
+		User::Leave(err); // Do not treat OOM errors as fatal by this point - otherwise OOM tests will atempt to uninstall the component again after uninstall has completed	
+	
+	if (err == KErrNoMemory) // Handling KErrNoMemory as it is done purposefully as part of OOM Test
+	    SetTestStepResult(EPass);
+	else if (!res)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF1(_L("CSifInstallStep::ImplTestStepL failed because of CompareOpaqueResultsL"));
+		INFO_PRINTF1(_L("=================== Begin of Received Opaque Results ==================="));
+		PrintOpaqueParamsL(*iPluginOpaqueResults);
+		INFO_PRINTF1(_L("=================== End of Received Opaque Results ==================="));
+		INFO_PRINTF1(_L("=================== Begin of Expected Opaque Results ==================="));
+		PrintOpaqueParamsL(*iPluginRefOpaqueResults);
+		INFO_PRINTF1(_L("=================== End of Expected Opaque Results ==================="));
+		}
+	CleanupStack::PopAndDestroy(); //ClearOpaqueParamsCleanup
+	}
+
+// *****************************************************************************************************
+
+
+CSifUninstallStep::~CSifUninstallStep()
+/**
+* Destructor
+*/
+	{
+	}
+
+CSifUninstallStep::CSifUninstallStep()
+/**
+* Constructor
+*/
+	{
+	SetTestStepName(KSifUninstallStep);
+	}
+
+void CSifUninstallStep::ImplTestStepPreambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{
+	CSifOperationStep::ImplTestStepPreambleL();
+	INFO_PRINTF1(_L("I am in Test Step Preamble in Class CSifUninstallStep"));
+	
+	LoadComponentIdFromConfigL();
+	}
+
+void CSifUninstallStep::ImplTestStepL()
+/**
+* @return - TVerdict code
+* Override of base class pure virtual
+* Our implementation only gets called if the base class ImplTestStepPreambleL() did
+* not leave. That being the case, the current test result value will be EPass.
+*/
+	{
+	INFO_PRINTF1(_L("In the file CSifUninstallStep::ImplTestStepL()"));  //Block start	
+	LoadOpaqueParamsL();
+	CleanupStack::PushL(TCleanupItem(ClearOpaqueParamsCleanup, this));
+	
+	if (iUseEnhancedApi)
+		{
+		iSif.Uninstall(iComponentId, *iPluginOpaqueArguments, *iPluginOpaqueResults, iStatus, iExclusiveOperation);
+		}
+	else
+		{
+		iSif.Uninstall(iComponentId, iStatus, iExclusiveOperation);
+		}
+
+	CancelableWait();
+	
+	User::LeaveIfError(iStatus.Int());
+
+	TBool res = EFalse;
+	TRAPD(err, res = CompareOpaqueResultsL());
+	if (err != KErrNoMemory)
+		User::Leave(err); // Do not treat OOM errors as fatal by this point - otherwise OOM tests will atempt to uninstall the component again after uninstall has completed
+	
+	if (err == KErrNoMemory) // Handling KErrNoMemory as it is done purposefully as part of OOM Test
+	    SetTestStepResult(EPass);
+	else if (!res)
+		SetTestStepResult(EFail);
+		
+	CleanupStack::PopAndDestroy(); //ClearOpaqueParamsCleanup		
+	}
+	
+// *****************************************************************************************************
+
+	
+CSifActivateStep::CSifActivateStep(TBool aActivate): iActivate(aActivate)
+	{
+	SetTestStepName(KSifActivateStep);
+	}
+
+CSifActivateStep::~CSifActivateStep()
+	{
+	}
+
+void CSifActivateStep::ImplTestStepPreambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{
+	CSifOperationStep::ImplTestStepPreambleL();
+	INFO_PRINTF1(_L("I am in Test Step Preamble in Class CSifActivateStep"));
+
+	if (TestStepResult()==EPass)
+		{
+		LoadComponentIdFromConfigL();
+		}
+
+	}
+
+void CSifActivateStep::ImplTestStepL()
+/**
+* @return - TVerdict code
+* Override of base class pure virtual
+* Our implementation only gets called if the base class ImplTestStepPreambleL() did
+* not leave. That being the case, the current test result value will be EPass.
+*/
+	{
+	INFO_PRINTF1(_L("In the file CSifActivateStep::ImplTestStepL()"));
+
+	if (iActivate)
+		{
+		iSif.Activate(iComponentId, iStatus);
+		}
+	else
+		{
+		iSif.Deactivate(iComponentId, iStatus);
+		}
+
+	CancelableWait();
+	
+	User::LeaveIfError(iStatus.Int());
+	
+	if (!CompareOpaqueResultsL())
+		SetTestStepResult(EFail);
+	}
+
+/**
+* This test step implements verification of concurrent operations.
+*/
+
+CSifMultipleInstallStep::~CSifMultipleInstallStep()
+	/**
+	* Destructor
+	*/
+	{
+	}
+
+CSifMultipleInstallStep::CSifMultipleInstallStep()
+	/**
+	* Constructor
+	*/
+	{
+	SetTestStepName(KSifMultipleInstallStep);
+	}
+
+void CSifMultipleInstallStep::ImplTestStepPreambleL()
+/**
+* @return - TVerdict code
+* Override of base class virtual
+*/
+	{
+	INFO_PRINTF1(_L("This is TestStepPreamble method of class CSifMultipleInstallStep"));
+
+	LoadFileNameFromConfigL();
+	LoadExclusiveOperationFlagFromConfigL();
+	}
+
+void CSifMultipleInstallStep::ImplTestStepL()
+	{
+	INFO_PRINTF1(_L("In the file CSifMultipleInstallStep::ImplTestStepL()"));
+	LoadOpaqueParamsL();
+
+	if (TestStepResult()!=EPass)
+		{
+		INFO_PRINTF1(_L("CSifMultipleInstallStep::ImplTestStepL() called with TestStepResult()!=EPass"));
+		return;
+		}
+
+	TInt expectedConcurrentResult = 0;
+	TInt overlapRequest = EFalse;
+	if (!GetIntFromConfig(ConfigSection(), KTe_ExpectedConcurrentResult, expectedConcurrentResult) ||
+		!GetBoolFromConfig(ConfigSection(), KTe_OverlapRequest, overlapRequest))
+		{
+		INFO_PRINTF3(_L("Expected test parameters: %S or %S not found "), &KTe_ExpectedConcurrentResult, &KTe_OverlapRequest);
+		User::Leave(KErrNotFound);
+		}
+
+	/* First installation request */
+	RSoftwareInstall sif1;
+	TInt error = sif1.Connect();
+	if (error != KErrNone)
+		{
+		INFO_PRINTF2(_L("Failed to connect to the SIF server, error code: %d"), error);
+		User::Leave(error);
+		}
+	CleanupClosePushL(sif1);
+
+	TRequestStatus status1;
+	sif1.Install(iFileName, status1);
+
+	if (!overlapRequest)
+		{
+		User::WaitForRequest(status1);
+		}
+
+	/* Second installation request */
+	
+	// Use different file name if provided
+	TPtrC fileName2;
+	if (!GetStringFromConfig(ConfigSection(), _L("packageFile2"), fileName2))
+		{
+		fileName2.Set(iFileName);
+		}
+
+	RSoftwareInstall sif2;
+	error = sif2.Connect();
+	if (error != KErrNone)
+		{
+		INFO_PRINTF2(_L("Failed to connect to the SIF server, error code: %d"), error);
+		User::Leave(error);
+		}
+	CleanupClosePushL(sif2);
+
+	TRequestStatus status2;
+	
+	if (iUseEnhancedApi)
+		{
+		sif2.Install(fileName2, *iPluginOpaqueArguments, *iPluginOpaqueResults, status2, iExclusiveOperation);
+		}
+	else
+		{
+		sif2.Install(fileName2, status2, iExclusiveOperation);
+		}
+
+	if (overlapRequest)
+		{
+		User::WaitForRequest(status1);
+		}
+
+	User::WaitForRequest(status2);
+
+	//close both the sessions at the end.
+	CleanupStack::PopAndDestroy(2, &sif1);
+
+	if(status2 != expectedConcurrentResult) 
+		{
+		INFO_PRINTF3(_L("status2: %d expectedResult1: %d"), status2.Int(), expectedConcurrentResult);
+		SetTestStepResult(EFail);
+		}
+	User::LeaveIfError(status1.Int());
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifoperationstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,148 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#if (!defined TSIFOPERATIONSTEP_H)
+#define TSIFOPERATIONSTEP_H
+#include <test/testexecutestepbase.h>
+#include "tsifsuitestepbase.h"
+#include <usif/sif/sif.h>
+
+namespace Usif
+	{
+	class CSifOperationStep : public CSifSuiteStepBase
+		{
+	public:
+		CSifOperationStep();
+		~CSifOperationStep();
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+#ifdef _DEBUG
+		virtual RScsClientBase* ClientHandle() { return &(iSif.iTransport);}
+#endif
+		// Used by a non-member function
+		void ClearOpaqueParams();
+		
+	protected:
+		TBool CompareOpaqueResultsL();
+		TBool CheckOpaqueResultsL();
+		void PrintOpaqueParamsL(const COpaqueNamedParams& aOpaqueParams);
+		void CancelableWait();
+
+		void LoadExclusiveOperationFlagFromConfigL();
+		void LoadFileNameFromConfigL();
+		void LoadComponentIdFromConfigL();
+		void LoadComponentInfoFromConfigL();
+		void LoadPluginOpaqueParamsFromConfigL(const TDesC& aNamePattern, const TDesC& aTypePattern, const TDesC& aValuePattern, Usif::COpaqueNamedParams& aOpaqueParams);
+		void LoadOpaqueParamsL();
+
+		TBool iUseEnhancedApi;
+		TBool iExclusiveOperation;
+		TPtrC iFileName;
+		Usif::TComponentId iComponentId;
+		Usif::CComponentInfo* iComponentInfo;
+		Usif::COpaqueNamedParams* iPluginOpaqueArguments;
+		Usif::COpaqueNamedParams* iPluginOpaqueResults;
+		Usif::COpaqueNamedParams* iPluginRefOpaqueResults;
+
+		Usif::RSoftwareInstall iSif;
+		TRequestStatus iStatus;
+
+	private:
+		TInt iCancelAfter;
+		};
+
+	class CSifGetComponentInfoStep : public CSifOperationStep
+		{
+	public:
+		CSifGetComponentInfoStep();
+		~CSifGetComponentInfoStep();
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepL();
+
+	private:
+		void LoadComponentInfoL();
+		TPtrC LoadCompInfoNodeStringParamL(const TDesC& aNodePrefix, const TDesC& aParamName);
+		TInt LoadCompInfoNodeIntParamL(const TDesC& aNodePrefix, const TDesC& aParamName, TBool aMandatory = ETrue);
+		TBool LoadCompInfoNodeBoolParamL(const TDesC& aNodePrefix, const TDesC& aParamName, TBool aMandatory = ETrue);
+		CComponentInfo::CNode* LoadCompInfoNodeLC(const TDesC& aNodeName);
+		TBool CompareCompInfoNodeL(const CComponentInfo::CNode& aExpectedNode, const CComponentInfo::CNode& aObtainedNode);
+		TBool CompareAppInfoL(const CComponentInfo::CNode& aExpectedNode, const CComponentInfo::CNode& aObtainedNode);
+		TBool iOperationByFileHandle;
+		TBool iCompareMaxInstalledSize;
+		TBool iCompareIconFileSize;
+		RArray<TInt> iIconFileSizes;
+		TInt iconIndex;
+		};
+
+	class CSifInstallStep : public CSifOperationStep
+		{
+	public:
+		CSifInstallStep();
+		~CSifInstallStep();
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepL();
+
+	private:
+		TBool iInstallByFileHandle;
+		};
+
+	class CSifUninstallStep : public CSifOperationStep
+		{
+	public:
+		CSifUninstallStep();
+		~CSifUninstallStep();
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepL();
+		};
+
+	class CSifActivateStep : public CSifOperationStep
+		{
+	public:
+		CSifActivateStep(TBool aActivate);
+		~CSifActivateStep();
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepL();
+		
+	private:
+		TBool iActivate;
+		};
+		
+	class CSifMultipleInstallStep : public CSifOperationStep
+		{
+	public:
+		CSifMultipleInstallStep();
+		~CSifMultipleInstallStep();
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepL();
+		};
+
+	_LIT(KSifGetComponentInfoStep,"SifGetComponentInfoStep");
+	_LIT(KSifInstallStep,"SifInstallStep");
+	_LIT(KSifUninstallStep,"SifUninstallStep");
+	_LIT(KSifActivateStep,"SifActivateStep");
+	_LIT(KSifDeactivateStep,"SifDeactivateStep");
+	_LIT(KSifMultipleInstallStep,"SifMultipleInstallStep");
+
+	} // namespace Sif
+	
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifpkgrec.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file implements a package file recognizer for the Reference Installer.
+*
+*/
+
+
+#include <apmrec.h>
+#include <apmstd.h>
+#include <ecom/ecom.h>
+#include <ecom/implementationproxy.h>
+#include "tsifpkgrec.h"
+
+const TUid KUidTestPkgRecDll = {0x102866F0};
+const TInt KUidTestPkgRecImpl = 0x102866F1;
+const TInt KTestNumMimeTypes = 1;
+const TInt KMaxBufferLength = 0xf;
+
+/**
+A file extension and MIME type for reference package files.
+*/
+_LIT(KTestPkgFileExt, ".siftestpkg");
+_LIT8(KDataTestMimeType, "binary/sif-testpkg");
+
+CTestSifPkgRecognizer::CTestSifPkgRecognizer()
+	: CApaDataRecognizerType(KUidTestPkgRecDll, CApaDataRecognizerType::EHigh)
+	{
+	iCountDataTypes = KTestNumMimeTypes;
+	}
+
+TUint CTestSifPkgRecognizer::PreferredBufSize()
+	{
+	return KMaxBufferLength;
+	}
+
+TDataType CTestSifPkgRecognizer::SupportedDataTypeL(TInt /*aIndex*/) const
+	{
+	return TDataType(KDataTestMimeType);
+	}
+
+void CTestSifPkgRecognizer::DoRecognizeL(const TDesC& aName, const TDesC8& /*aBuffer*/)
+	{
+	
+	// This recognition is based only on the file extension
+	const TInt dotPos = aName.LocateReverse('.');
+	if (dotPos == KErrNotFound)
+		{
+		iConfidence = ENotRecognized;
+		return;
+		}
+	TInt extLen = aName.Length() - dotPos;
+	if (aName.Right(extLen).CompareF(KTestPkgFileExt) == 0)
+		{
+		iDataType = TDataType(KDataTestMimeType);
+		iConfidence = ECertain;
+		}
+	}
+
+CApaDataRecognizerType* CTestSifPkgRecognizer::CreateRecognizerL()
+	{
+	return new (ELeave) CTestSifPkgRecognizer();
+	}
+
+const TImplementationProxy ImplementationTable[] = 
+	{
+		IMPLEMENTATION_PROXY_ENTRY(KUidTestPkgRecImpl, CTestSifPkgRecognizer::CreateRecognizerL)
+	};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifpkgrec.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This file defines a package recognizer for the Reference Installer.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ exampleCode
+*/
+
+#ifndef TSIFPKGREC_H
+#define TSIFPKGREC_H
+
+/**
+A test package recognizer. This class implements the CApaDataRecognizerType interface.
+Please see the description of @see CApaDataRecognizerType for details. 
+
+The SIF Server uses this class through the AppArc APIs to recognize reference packages.
+*/
+class CTestSifPkgRecognizer : public CApaDataRecognizerType
+	{
+public:
+	/**
+	Gets the size of buffer preferred for the purpose of recognizing the data type.
+	*/
+	TUint PreferredBufSize();
+
+	/**
+	Gets one of the data (MIME) types that the recognizer can recognize.
+	
+	@param aIndex An index that identifies the data type.
+	@return The data (MIME) type.
+	*/
+	TDataType SupportedDataTypeL(TInt aIndex) const;
+
+	/**
+	Creates an instance of the recognizer.
+	*/
+	static CApaDataRecognizerType* CreateRecognizerL();
+
+private:
+	CTestSifPkgRecognizer();
+
+	/**
+	Implements the recognition algorithm for the Reference Installer.
+	*/
+	void DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer);
+	};
+
+#endif // TSIFPKGREC_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifsuitedefs.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#if (!defined TSIFSUITEDEFS_H)
+#define TSIFSUITEDEFS_H
+
+namespace Usif
+	{
+	_LIT(KTe_ExpectedResult,"expectedResult");
+	_LIT(KTe_UiScript,"uiScript");
+	_LIT(KTe_CancelAfter,"cancelAfter");
+	_LIT(KTe_OperationByFileHandle,"operationByFileHandle");
+	_LIT(KTe_CompareMaxInstalledSize,"compareMaxInstalledSize");
+	_LIT(KTe_CompareIconFileSize,"compareIconFileSize");	
+	_LIT(KTe_UseEnhancedApi,"useEnhancedApi");
+	_LIT(KTe_PackageFile,"packageFile");
+	_LIT(KTe_ComponentId,"componentId");
+	_LIT(KTe_PluginOpaqueArgumentName,"pluginOpaqueArgumentName");
+	_LIT(KTe_PluginOpaqueArgumentType,"pluginOpaqueArgumentType");
+	_LIT(KTe_PluginOpaqueArgumentValue,"pluginOpaqueArgumentValue");
+	_LIT(KTe_PluginRefOpaqueResultName,"pluginRefOpaqueResultName");
+	_LIT(KTe_PluginRefOpaqueResultType,"pluginRefOpaqueResultType");
+	_LIT(KTe_PluginRefOpaqueResultValue,"pluginRefOpaqueResultValue");
+	_LIT(KTe_PluginOpaqueValueTypeInt,"Int");
+	_LIT(KTe_PluginOpaqueValueTypeString,"String");
+	_LIT(KTe_SoftwareTypeName,"softwareTypeName");
+	_LIT(KTe_ComponentName,"componentName");
+	_LIT(KTe_ComponentVersion,"componentVersion");
+	_LIT(KTe_ComponentVendor,"componentVendor");
+	_LIT(KTe_GlobalComponentId,"globalComponentId");
+	_LIT(KTe_Authenticity,"authenticity");
+	_LIT(KTe_UserGrantableCaps,"userGrantableCapsBitMask");
+	_LIT(KTe_MaxInstalledSize,"maxInstalledSize");
+	_LIT(KTe_HasExecutable,"hasExecutable");
+	_LIT(KTe_DriveSelectionRequired,"driveSelectionRequired");
+	_LIT(KTe_NumberOfApplications,"noOfApps");
+	_LIT(KTe_ApplicationUid,"appUid");
+	_LIT(KTe_ApplicationName,"appName");
+	_LIT(KTe_ApplicationGroupName,"appGroupName");
+	_LIT(KTe_ApplicationIconFileName,"appIconFileName");
+	_LIT(KTe_ApplicationIconFileSize,"appIconFileSize");
+	_LIT(KTe_VerifyPackageExistence,"verifyExistence");
+	_LIT(KTe_CheckSisRegistry,"checkSisRegistry");
+	_LIT(KTe_ExecutableName,"executableName");
+	_LIT(KTe_ExecutableReturnCode,"executableReturnCode");
+	_LIT(KTe_AnyValuePermitted,"__ANY_VALUE_PERMITTED__");
+	_LIT(KTe_ScomoState,"scomoState");
+	_LIT(KTe_ExpectedConcurrentResult ,"expectedConcurrentResult");
+	_LIT(KTe_OverlapRequest,"overlapRequest");
+	_LIT(KTe_InstallStatus,"installStatus");
+	_LIT(KTe_ExclusiveOperation,"exclusiveOperation");
+	_LIT(KTe_CompInfoRootNodePrefix,"root");
+	_LIT(KTe_CompInfoChildNodePrefix,".child");
+	_LIT(KTe_CompInfoNumChildren,"numChildren");
+	_LIT(KTe_OperationType,"operation");
+	// For test step panics
+	_LIT(KTe_SifSuitePanic,"Te_SifSuite");
+
+	const TInt KMaxIntDigits = 10;
+
+	} // namespace Sif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifsuiteserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#include "tsifsuiteserver.h"
+#include "tsifoperationstep.h"
+#include "tsifgenericbrowserinstallstep.h"
+#include "tsifcommonverificationstep.h"
+#include "tsifcommonunitteststep.h"
+#include "tsifnotifierteststep.h"
+
+using namespace Usif;
+
+_LIT(KSifServerName,"tUsifSuite");
+CSifSuiteServer* CSifSuiteServer::NewL()
+/**
+ * @return - Instance of the test server
+ * Same code for Secure and non-secure variants
+ * Called inside the MainL() function to create and start the
+ * CTestServer derived server.
+ */
+	{
+	CSifSuiteServer * server = new (ELeave) CSifSuiteServer();
+	CleanupStack::PushL(server);
+
+	server->ConstructL(KSifServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+
+// Secure variants much simpler
+// For EKA2, just an E32Main and a MainL()
+LOCAL_C void MainL()
+/**
+ * Secure variant
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+	// Leave the hooks in for platform security
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().DataCaging(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CSifSuiteServer* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CSifSuiteServer::NewL());
+	if(!err)
+		{
+		// Sync with the client and enter the active scheduler
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	delete server;
+	delete sched;
+	}
+
+
+
+GLDEF_C TInt E32Main()
+/**
+ * @return - Standard Epoc error code on process exit
+ * Secure variant only
+ * Process entry point. Called by client using RProcess API
+ */
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAPD(err,MainL());
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return err;
+	}
+
+
+CTestStep* CSifSuiteServer::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ * Secure and non-secure variants
+ * Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep* testStep = NULL;
+	if(aStepName == KSifInstallStep)
+		testStep = new CSifInstallStep();
+	else if(aStepName == KSifGetComponentInfoStep)
+		testStep = new CSifGetComponentInfoStep();
+	else if(aStepName == KSifUninstallStep)
+		testStep = new CSifUninstallStep();
+	else if(aStepName == KSifActivateStep)
+		testStep = new CSifActivateStep(ETrue);
+	else if(aStepName == KSifDeactivateStep)
+		testStep = new CSifActivateStep(EFalse);
+	else if(aStepName == KSifGenericBrowserInstallStep)
+		testStep = new CSifGenericBrowserInstallStep();
+	else if(aStepName == KSifCommonVerificationStep)
+		testStep = new CSifCommonVerificationStep();
+	else if(aStepName == KSifMultipleInstallStep)
+		testStep = new CSifMultipleInstallStep();
+	else if(aStepName == KSifCommonUnitTestStep)
+		testStep = new CSifCommonUnitTestStep();
+    else if(aStepName == KSifSubscribeTestStep)
+        testStep = new CSifSubscribeTestStep();
+	else if(aStepName == KSifPublishTestStep)
+        testStep = new CSifPublishTestStep();
+
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifsuiteserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#if (!defined TSIFSUITESERVER_H)
+#define TSIFSUITESERVER_H
+#include <test/testexecuteserverbase.h>
+
+namespace Usif
+	{
+	class CSifSuiteServer : public CTestServer
+		{
+	public:
+		static CSifSuiteServer* NewL();
+		// Base class pure virtual override
+		virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+		};
+		
+	} // namespace Sif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifsuitestepbase.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#include "tsifsuitestepbase.h"
+#include "tsifsuitedefs.h"
+#include <usif/scr/scr.h>
+
+using namespace Usif;
+
+TComponentId Usif::FindComponentInScrL(const TDesC& aName, const TDesC& aVendor)
+	{
+	RSoftwareComponentRegistry scr;
+	User::LeaveIfError(scr.Connect());
+	CleanupClosePushL(scr);
+
+	RSoftwareComponentRegistryView scrView;
+	CComponentFilter* filter = CComponentFilter::NewLC();
+	filter->SetNameL(aName);
+	filter->SetVendorL(aVendor);
+
+	scrView.OpenViewL(scr, filter);
+	CleanupClosePushL(scrView);
+
+	CComponentEntry* component = scrView.NextComponentL();
+	TComponentId componentId = 0;
+	if (component != NULL)
+		{
+		componentId = component->ComponentId();
+		delete component;
+		}
+
+	CleanupStack::PopAndDestroy(3, &scr);
+	
+	return componentId;
+	}
+
+CSifSuiteStepBase::~CSifSuiteStepBase()
+	{
+	}
+
+CSifSuiteStepBase::CSifSuiteStepBase()
+	{
+	}
+
+void CSifSuiteStepBase::ImplTestStepPreambleL()
+/**
+ * Implementation of CTestStep base class virtual
+ * It is used for doing all initialisation common to derived classes in here.
+ * Make it being able to leave if there are any errors here as there's no point in
+ * trying to run a test step if anything fails.
+ * The leave will be picked up by the framework.
+ */
+	{
+	INFO_PRINTF1(_L("I am in doTestStepPreambleL() of the class CSifSuiteStepBase!"));
+
+	SetTestStepResult(EPass);
+	}
+
+void CSifSuiteStepBase::ImplTestStepPostambleL()
+/**
+ * Implementation of CTestStep base class virtual
+ * It is used for doing all after test treatment common to derived classes in here.
+ * Make it being able to leave
+ * The leave will be picked up by the framework.
+ */
+	{
+	INFO_PRINTF1(_L("I am in doTestStepPostambleL() of the class CSifSuiteStepBase!"));
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifsuitestepbase.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#if (!defined TSIFSUITESTEPBASE_H)
+#define TSIFSUITESTEPBASE_H
+#include <test/testexecutestepbase.h>
+#include <usif/usifcommon.h>
+#include <scs/oomteststep.h>
+
+namespace Usif
+	{
+
+	TComponentId FindComponentInScrL(const TDesC& aName, const TDesC& aVendor);
+
+	class CSifSuiteStepBase : public COomTestStep
+		{
+	public:
+		virtual ~CSifSuiteStepBase();
+		CSifSuiteStepBase();
+		virtual void ImplTestStepPreambleL(); 
+		virtual void ImplTestStepPostambleL();
+		};
+
+	} // namespace Sif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/inc_private/captestframeworkserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file 
+*/
+
+#ifndef __APRCAPTESTFRAMEWORK_SERVER_H__
+#define __APRCAPTESTFRAMEWORK_SERVER_H__
+#include <test/testexecuteserverbase.h>
+
+class CCapTestFrameworkServer : public CTestServer
+	{
+public:
+	static CCapTestFrameworkServer* NewL();
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+	RFs& Fs(){return iFs;};
+
+private:
+	RFs iFs;
+	};
+#endif	/* ndef __APRCAPTESTFRAMEWORK_SERVER_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/inc_private/captestframeworkstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file 
+*/
+#ifndef __APRCAPTESTFRAMEWORK_STEP_H__
+#define __APRCAPTESTFRAMEWORK_STEP_H__
+
+#include <test/testexecutestepbase.h>
+#include "captestframeworkserver.h"
+
+#include <captestframework/aprcaptestframework.h>
+
+
+struct TTestEnvironment
+	{
+	TTestEnvironment(const TCapabilitySet& aCaps, TUid aSid, TUid aVid, TBool aExpectPass);
+	
+	TCapabilitySet iCaps;
+	TUid iSid;
+	TUid iVid;
+	TBool iExpectPass;
+	};
+
+
+class CCapTestFrameworkStep : public CTestStep
+	{
+public:
+	enum TThoroughness 
+		{
+		EBasicChecks,			// Just test using no capabilities, and capabilities required
+		EThoroughChecks,		// Test every subset required
+		};
+	
+public:
+	CCapTestFrameworkStep(TThoroughness aThoroughness = EBasicChecks);
+	~CCapTestFrameworkStep();
+	
+	TVerdict doTestStepPreambleL();
+	TVerdict doTestStepPostambleL();
+	TVerdict doTestStepL();
+
+private:
+	void RunTestDllL(const TDesC& aDllName);
+	MCapabilityTestFactory* SetupFactoryL();
+	
+	void PrintCapabilitySet(const TCapabilitySet& aCapSet, const TDesC& aExtra=KNullDesC);
+
+	void RunTestStepL(MCapabilityTest* aTest);
+
+	void GenerateEnvironmentsL(const TCapabilitySet& aCapsNeeded, const TUid& aSidNeeded, const TUid& aVidNeeded, RArray<TTestEnvironment>& aEnvironments);
+
+	TCapabilitySet InvertCapSet(const TCapabilitySet& aCapSet);
+
+	
+	// Sets the helper up with capabilities
+	void SetupHelperL(const TTestEnvironment& aEnvironment);
+	
+	// Runs helper
+	void RunHelperL(TInt aTestNumber, TBool aShouldPass);
+
+private:
+	RFs iFs;
+	TThoroughness iThoroughness;
+	TInt iCurrentTest;
+	MCapabilityTestFactory* iFactory;
+	RLibrary iLibrary;
+	TPtrC iDllName;
+	TBool iOmitTCBCapInComplementSet; // This functionality is needed for testing components that don't have the TCB capability, for example the SIF API.
+	};
+
+_LIT(KRunBasicCapabilityChecks,"RunBasicCapabilityChecks");
+_LIT(KRunThoroughCapabilityChecks,"RunThoroughCapabilityChecks");
+
+#endif /* #ifndef __APRCAPTESTFRAMEWORK_STEP_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/inc_private/tsecurityutils.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the test step for tsecuritytests test harness
+*
+*/
+
+
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef TSECURITYUTILS_H
+#define TSECURITYUTILS_H
+
+#include <test/testexecutestepbase.h>
+
+_LIT(KSecurityUtilsStep, "SecurityUtils");
+
+class CSecurityUtilsStep : public CTestStep
+	{
+public:	
+	TVerdict doTestStepL();
+	};
+	
+#endif /* TSECURITYUTILS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/inc_private/tsecurityutilsserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines the test server of the Software Component Registry test harness
+*
+*/
+
+
+
+
+/**
+ @file 
+ @internalComponent
+ @test
+*/
+
+#ifndef TSECURITYUTILSSERVER_H
+#define TSECURITYUTILSSERVER_H
+
+#include <test/testexecuteserverbase.h>
+
+class CSecurityUtilsTestServer : public CTestServer
+
+	{
+public:
+	static CSecurityUtilsTestServer* NewL();
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+	};
+
+
+#endif /* TSECURITYUTILSSERVER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/scripts/tsecurityutils.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,106 @@
+[public_file_path]
+FileName=c:\a.txt
+
+[path_wildcards]
+FileName=c:\*.txt
+ExpectedTCB=True
+
+[path_relative1]
+FileName=c:\a\..\a.txt
+ExpectedTCB=True
+
+[path_relative2]
+FileName=c:\a\b\..\a.txt
+ExpectedTCB=True
+
+[private_path_no_subdir1]
+FileName=c:\private\
+ExpectedTCB=True
+
+[private_path_no_subdir2]
+FileName=c:\private\aaa
+ExpectedTCB=True
+
+[private_path_no_sid_subdir1]
+FileName=c:\private\aaa\a.txt
+ExpectedTCB=True
+
+[private_path_no_sid_subdir2]
+FileName=c:\private\aaa\
+ExpectedTCB=True
+
+[private_path_no_sid_subdir3]
+FileName=c:\private\qwertyui\
+ExpectedTCB=True
+
+[private_path_other_sid1]
+FileName=c:\private\12345679\
+ExpectedAllFiles=True
+ExpectedTCB=True
+ClientSid=12345678
+
+[private_path_other_sid2]
+FileName=c:\private\12345679\a.txt
+ExpectedAllFiles=True
+ExpectedTCB=True
+ClientSid=12345678
+
+[private_path_other_sid3]
+FileName=c:\privAte\12345679\a.txt
+ExpectedAllFiles=True
+ExpectedTCB=True
+ClientSid=12345678
+
+[private_path_other_sid_import1]
+FileName=c:\privAte\12345679\import\a.txt
+ClientSid=12345678
+
+[private_path_other_sid_import2]
+FileName=c:\privAte\12345679\iMporT\aaaaa.bbbbb
+ClientSid=12345678
+
+[private_path_my_sid1]
+FileName=c:\private\12345678\
+ClientSid=12345678
+
+[private_path_my_sid2]
+FileName=c:\private\12345678\a.txt
+ClientSid=12345678
+
+[sys_path1]
+FileName=c:\sys\
+ExpectedTCB=True
+
+[sys_path2]
+FileName=c:\sys\a.txt
+ExpectedTCB=True
+
+[sys_path3]
+FileName=c:\sYs\a.txt
+ExpectedTCB=True
+
+[resource_path1]
+FileName=c:\resource\
+ExpectedTCB=True
+
+[resource_path2]
+FileName=c:\resource\a.txt
+ExpectedTCB=True
+
+[resource_path3]
+FileName=c:\reSouRce\a.txt
+ExpectedTCB=True
+
+[empty_path1]
+FileName=c:\a.txt
+
+[empty_path2]
+FileName=c:\
+
+[malformed_path1]
+FileName=£`#/\$%
+ExpectedTCB=True
+
+[malformed_path2]
+FileName=c:::/\aqw
+ExpectedTCB=True
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/scripts/tsecurityutils.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,82 @@
+//
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+//
+//
+
+PRINT Test SecurityUtils helper library
+
+LOAD_SUITE tsecurityutils
+
+
+//! @SYMTestCaseID 		SEC-SECURITYUTILS-0001
+//! @SYMTestCaseDesc 		Check public file path
+START_TESTCASE SEC-SECURITYUTILS-0001
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini public_file_path
+END_TESTCASE SEC-SECURITYUTILS-0001
+
+//! @SYMTestCaseID 		SEC-SECURITYUTILS-0002
+//! @SYMTestCaseDesc 		Check path with wildcards
+START_TESTCASE SEC-SECURITYUTILS-0002
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini path_wildcards
+END_TESTCASE SEC-SECURITYUTILS-0002
+
+//! @SYMTestCaseID 		SEC-SECURITYUTILS-0003
+//! @SYMTestCaseDesc 		Check relative paths
+START_TESTCASE SEC-SECURITYUTILS-0003
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini path_relative1
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini path_relative2
+END_TESTCASE SEC-SECURITYUTILS-0003
+
+//! @SYMTestCaseID 		SEC-SECURITYUTILS-0004
+//! @SYMTestCaseDesc 		Check private paths
+START_TESTCASE SEC-SECURITYUTILS-0004
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_no_subdir1
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_no_subdir2
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_no_sid_subdir1
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_no_sid_subdir2
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_no_sid_subdir3
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_other_sid1
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_other_sid2
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_other_sid3
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_other_sid_import1
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_other_sid_import2
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_my_sid1
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini private_path_my_sid2
+END_TESTCASE SEC-SECURITYUTILS-0004
+
+//! @SYMTestCaseID 		SEC-SECURITYUTILS-0005
+//! @SYMTestCaseDesc 		Check \sys and \resource paths
+START_TESTCASE SEC-SECURITYUTILS-0005
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini sys_path1
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini sys_path2
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini sys_path3
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini resource_path1
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini resource_path2
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini resource_path3
+END_TESTCASE SEC-SECURITYUTILS-0005
+
+//! @SYMTestCaseID 		SEC-SECURITYUTILS-0006
+//! @SYMTestCaseDesc 		Check empty path
+START_TESTCASE SEC-SECURITYUTILS-0006
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini empty_path1
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini empty_path2
+END_TESTCASE SEC-SECURITYUTILS-0006
+
+//! @SYMTestCaseID 		SEC-SECURITYUTILS-0007
+//! @SYMTestCaseDesc 		Check malformed path
+START_TESTCASE SEC-SECURITYUTILS-0007
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini malformed_path1
+RUN_TEST_STEP 100 tsecurityutils SecurityUtils z:\tsecurityutils\tsecurityutils.ini malformed_path2
+END_TESTCASE SEC-SECURITYUTILS-0006
\ No newline at end of file
--- a/installationservices/switestfw/test/autotesting/apr_bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/switestfw/test/autotesting/apr_bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -30,7 +30,7 @@
 #ifndef TOOLS2
 // Disable everything except sistools and security_tools for TOOLS2 target
 
-
+#include "mw/appinstall/installationservices/swi/group/export/group/bld.inf"
 #include "mw/appinstall/installationservices/switestfw/group/bld.inf"
 
 #include "mw/appinstall/installationservices/swiconfig/group/bld.inf"
@@ -47,12 +47,9 @@
 
 #include "mw/appinstall/installationservices/swi/group/bld.inf"
 #include "mw/appinstall/installationservices/swidevicetools/group/bld.inf"
-#include "mw/appinstall/secureswitools/swianalysistoolkit/group/bld.inf"
-
-
 
 #endif //TOOLS2
 
-// Only the SISTOOLS (makesis/signsis) and certapp build with TOOLS2
 #include "mw/appinstall/secureswitools/swisistools/group/bld.inf"
-
+#include "mw/appinstall/secureswitools/swianalysistoolkit/group/bld.inf"
+#include "mw/appinstall/secureswitools/makekeys/group/bld.inf"
\ No newline at end of file
--- a/installationservices/switestfw/test/autotesting/hosts	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/switestfw/test/autotesting/hosts	Tue Aug 31 15:21:33 2010 +0300
@@ -1,2 +1,2 @@
-10.253.27.175  cam-ocsptest01.intra
-10.253.27.175  cam-OCSPTEST01.prod.ad.symbian.intra
+10.225.90.30  cam-ocsptest01.intra
+10.225.90.30  cam-OCSPTEST01.prod.ad.symbian.intra
--- a/installationservices/switestfw/test/autotesting/runswiromtests_9.5.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/switestfw/test/autotesting/runswiromtests_9.5.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -103,6 +103,9 @@
 testexecute z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.script
 move c:\logs\testexecute\tuiscriptadaptors.htm e:\testresults\tuiscriptadaptors.htm
 
+testexecute z:\tswi\tuiscriptadaptors\scripts\nonusiftuiscriptadaptors.script
+move c:\logs\testexecute\nonusiftuiscriptadaptors.htm e:\testresults\nonusiftuiscriptadaptors.htm
+
 testexecute z:\tswi\tuiscriptadaptors\scripts\tuninstallpkgs_h4.script
 move c:\logs\testexecute\tuninstallpkgs_h4.htm e:\testresults\tuninstallpkgs_h4.htm
 
--- a/installationservices/switestfw/test/autotesting/runswiromtests_9.6.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/switestfw/test/autotesting/runswiromtests_9.6.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -27,7 +27,7 @@
 testexecute z:\tswi\tuiscriptadaptors\scripts\tsilent_h2.script
 
 REM Run test
-testexecute z:\tswi\tuiscriptadaptors\scripts\tswidaemonstub_h2.script
+REM testexecute z:\tswi\tuiscriptadaptors\scripts\tswidaemonstub_h2.script
 
 REM Run test
 testexecute z:\tswi\tuiscriptadaptors\scripts\inc098114_h2.script
@@ -52,7 +52,7 @@
 
 # Save Silent Install, cleanupinfrastructure and tpropagation test results
 move c:\logs\testexecute\tsilent_h2.htm e:\testresults\tsilent_h2.htm
-move c:\logs\testexecute\tswidaemonstub_h2.htm e:\testresults\tswidaemonstub_h2.htm
+REM move c:\logs\testexecute\tswidaemonstub_h2.htm e:\testresults\tswidaemonstub_h2.htm
 move c:\logs\testexecute\inc098114_h2.htm e:\testresults\inc098114_h2.htm
 move c:\logs\testexecute\tcleanupinfrastructure.htm e:\testresults\tcleanupinfrastructure.htm
 move c:\logs\testexecute\tpropagation_arm.htm e:\testresults\tpropagation_arm.htm
@@ -62,6 +62,9 @@
 testexecute z:\tswi\tsisregistrytest\scripts\tsisregistry_performance.script
 move c:\logs\testexecute\tsisregistry_performance.htm e:\testresults\tsisregistry_performance.htm
 
+testexecute z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.script
+move c:\logs\testexecute\tuiscriptadaptors_app_performance.htm e:\testresults\tuiscriptadaptors_app_performance.htm
+
 REM Run recognizer tests
 md c:\trecog
 copy /s z:\trecog\* c:\trecog
@@ -140,8 +143,8 @@
 testexecute z:\tswi\trevocation\scripts\trevocation.script
 move c:\logs\testexecute\trevocation.htm e:\testresults\trevocation.htm
 
-testexecute z:\tswi\tdaemon\scripts\tdaemon.script
-move c:\logs\testexecute\tdaemon.htm e:\testresults\tdaemon.htm
+REM testexecute z:\tswi\tdaemon\scripts\tdaemon.script
+REM move c:\logs\testexecute\tdaemon.htm e:\testresults\tdaemon.htm
 
 testexecute z:\tswi\tuiscriptadaptors\scripts\testlocations.script
 move c:\logs\testexecute\testlocations.htm e:\testresults\testlocations.htm
@@ -325,6 +328,9 @@
 testexecute z:\tswi\tuiscriptadaptors\scripts\tswtype.script
 move c:\logs\testexecute\tswtype.htm e:\testresults\tswtype.htm
 
+testexecute z:\tswi\tuiscriptadaptors\scripts\tswiappregintegration.script
+move c:\logs\testexecute\tswiappregintegration.htm e:\testresults\tswiappregintegration.htm
+
 del c:\temp\*.*
 attrib c:\tswi\*.* -r
 del c:\tswi\*.*
--- a/installationservices/switestfw/test/autotesting/runusiftests.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/switestfw/test/autotesting/runusiftests.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -34,6 +34,11 @@
 testexecute z:\tusif\tswtype\tsifswtypeintegration.script
 move c:\logs\testexecute\tsifswtypeintegration.htm e:\testresults\tsifswtypeintegration.htm
 
+REM Sif notifier tests
+testexecute z:\tusif\tsif\tnotifier.script
+move c:\logs\testexecute\tnotifier.htm e:\testresults\tnotifier.htm
+
+
 REM run SCR tests
 testexecute z:\tusif\tscr\tscr.script
 move c:\logs\testexecute\tscr.htm e:\testresults\tscr.htm
--- a/installationservices/switestfw/test/autotesting/testMakesis.pl	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/switestfw/test/autotesting/testMakesis.pl	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -1779,6 +1779,39 @@
 }
 
 #
+# New test code for DEF145101 - MakeSIS cannot handle package files that contain large (>1000) language codes.
+# 
+sub TestDEF145101 {
+
+	my $path = "/epoc32/winscw/c/tswi";
+	my $pkgfile = "$path/largelanguagecodes";
+	my $expectedResult = 0;
+
+	WriteLog("Test for DEF145101 - MakeSIS cannot handle package files that contain large (>1000) language codes.\n");
+	
+	# Do MAKESIS test
+	@retval = system("$makesisExeLocation $pkgfile.pkg $pkgfile-tmp.sis > $pkgfile.log");
+	
+	$logMsg = sprintf "Expected code:%5d   result Code:%5d\n", $expectedResult, $?;
+	WriteLog( $logMsg);
+
+	$NumberOfTests++;
+	
+	if( $? == $expectedResult ) {
+		$NumberOfPassed++;
+		WriteLog("Passed\n\n");
+	}
+	else {
+		$NumberOfFailed++;
+		WriteLog("Failed\n\n");
+	}
+
+	unlink("$pkgfile-tmp.sis");
+	unlink("$pkgfile.sis");
+	unlink("$pkgfile.log");
+}
+
+#
 # Main
 #
 # Create environment and control test flow to testing MAKESIS.EXE 
@@ -2914,6 +2947,11 @@
 TestInterpretsisReport();
 
 #
+# Test for DEF145101 - MakeSIS cannot handle package files that contain large (>1000) language codes.
+#
+TestDEF145101();
+
+#
 # These tests are very specific to windows OS only
 #
 #
--- a/installationservices/switestfw/test/autotesting/test_spec_apr_9.5.txt	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/switestfw/test/autotesting/test_spec_apr_9.5.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -26,7 +26,7 @@
 {9.5}=Common,SWI,IntegrityServices,SisTools,SwiTools95Only,SwiTools,Misc,ToolsLegacy,UptoMCL
 {9.6}=Common,SWI,IntegrityServices,SisTools,SwiTools95Only,SwiTools,Misc,ToolsLegacy,UptoMCL
 {future}=Common,SWI,SisTools,SwiTools,USIF,Misc,ToolsNew,SwiDiran
-{tb92}=Common,SWI,IntegrityServices,SisTools,SwiTools95Only,SwiTools,Misc,ToolsLegacy,UptoMCL
+{tb92}=Common,SWI,IntegrityServices,SisTools,SwiTools95Only,SwiTools,Misc,ToolsLegacy,UptoMCL,NonUSIFMCL
 {tb101}=Common,SWI,SisTools,SwiTools,USIF,Misc,ToolsNew,SwiDiran
 
 
@@ -107,7 +107,7 @@
 
 TESTEXECUTE, \logs\testexecute\testwritableswicertstore.htm,, -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\testwritableswicertstore.script, 300, UDEB#UREL, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\copytuiscriptadaptors.bat, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\cleanswicertstore.bat
 TESTEXECUTE, \logs\testexecute\tsilent_winscw.htm,, \tswi\tuiscriptadaptors\scripts\tsilent_winscw.script, 300, UDEB#UREL, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\copytuiscriptadaptors.bat, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\cleanswicertstore.bat
-TESTEXECUTE, \logs\testexecute\tswidaemonstub.htm,, \tswi\tuiscriptadaptors\scripts\tswidaemonstub.script, 300, UDEB#UREL,,
+#TESTEXECUTE, \logs\testexecute\tswidaemonstub.htm,, \tswi\tuiscriptadaptors\scripts\tswidaemonstub.script, 300, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\inc098114_winscw.htm,, \tswi\tuiscriptadaptors\scripts\inc098114_winscw.script, 300, UDEB#UREL, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\copytuiscriptadaptors.bat
 TESTEXECUTE, \logs\testexecute\tcleanupinfrastructure.htm,, \tswi\tuiscriptadaptors\scripts\tcleanupinfrastructure.script, 300, UDEB#UREL,\epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\tcleanupinfrastructure_pre.bat, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\tcleanupinfrastructure_post.bat
 
@@ -122,6 +122,9 @@
 TESTEXECUTE, \logs\testexecute\tstartuprecovery.htm,, \tswi\tintegrityservices\scripts\tstartuprecovery.script, 300, UDEB#UREL, \epoc32\winscw\c\tswi\tintegrityservices\scripts\batchfiles\recoverystartup_pre.bat,
 TESTEXECUTE, \logs\testexecute\tintegrityservices.htm,, -Dstartupmode=1 -- \tswi\tintegrityservices\scripts\tintegrityservices.script, 300, UDEB#UREL,,
 
+[NonUSIFMCL]
+TESTEXECUTE, \logs\testexecute\nonusiftuiscriptadaptors.htm,, \tswi\tuiscriptadaptors\scripts\nonusiftuiscriptadaptors.script, 10000, UDEB#UREL, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\tuiscriptadaptors_pre.bat, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\tuiscriptadaptors_post.bat
+
 [SWI]
 TESTEXECUTE, \logs\testexecute\testfotaupdate1.htm,,    -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\testfotaupdate1.script, 300, UDEB#UREL, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\testfotaupdate1_pre.bat, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\testfotaupdate1_post.bat
 TESTEXECUTE, \logs\testexecute\testfotaupdate2.htm,,    -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\testfotaupdate2.script, 300, UDEB#UREL, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\testfotaupdate2_pre.bat, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\testfotaupdate2_post.bat
@@ -146,7 +149,7 @@
 
 TESTEXECUTE, \logs\testexecute\testnoaiacert_ocspmandatory.htm,, \tswi\tuiscriptadaptors\scripts\testnoaiacert_ocspmandatory.script, 100, UDEB#UREL, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\testnoaiacert_ocspmandatory_pre.bat, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\testnoaiacert_ocspmandatory_post.bat
 
-TESTEXECUTE, \logs\testexecute\tdaemon_winscw.htm,, \tswi\tdaemon\scripts\tdaemon_winscw.script, 300, UDEB#UREL, \epoc32\winscw\c\tswi\tdaemon\scripts\setupforemmcformat_pre.bat, \epoc32\winscw\c\tswi\tdaemon\scripts\setupforemmcformat_post.bat
+#TESTEXECUTE, \logs\testexecute\tdaemon_winscw.htm,, \tswi\tdaemon\scripts\tdaemon_winscw.script, 300, UDEB#UREL, \epoc32\winscw\c\tswi\tdaemon\scripts\setupforemmcformat_pre.bat, \epoc32\winscw\c\tswi\tdaemon\scripts\setupforemmcformat_post.bat
 
 TESTEXECUTE, \logs\testexecute\testrun.htm,, \tswi\tuiscriptadaptors\scripts\testrun.script, 300, UDEB#UREL, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiPolicy.bat swipolicy_shortrunwait.ini, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiPolicy.bat swipolicy.ini
 TESTEXECUTE, \logs\testexecute\testrunft.htm,, -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\testrunft.script, 300, UDEB#UREL, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiPolicy.bat swipolicy_shortrunwait.ini,
@@ -154,7 +157,7 @@
 TESTEXECUTE, \logs\testexecute\testrun2.htm,, -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\testrun2.script, 300, UDEB#UREL, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiPolicy.bat swipolicy_notallowrun.ini, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiPolicy.bat swipolicy.ini
 TESTEXECUTE, \logs\testexecute\testshutdown.htm,, \tswi\tuiscriptadaptors\scripts\testshutdown.script, 300, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\testasync.htm,, \tswi\tuiscriptadaptors\scripts\testasync.script, 300, UDEB#UREL, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\useautocfg.bat,
-TESTEXECUTE, \logs\testexecute\testasynccancel.htm,, \tswi\tuiscriptadaptors\scripts\testasynccancel.script, 5000, UDEB#UREL,,
+TESTEXECUTE, \logs\testexecute\testasynccancel.htm,, \tswi\tuiscriptadaptors\scripts\testasynccancel.script, 10000, UDEB#UREL,,
 
 TESTEXECUTE, \logs\testexecute\tsisstub.htm,, -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\tsisstub.script, 300, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\tsisstub_delete.htm,, -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\tsisstub_delete.script, 300, UDEB#UREL, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiPolicy.bat swipolicy_deletepreinstalledfiles.ini, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiPolicy.bat swipolicy.ini
@@ -170,11 +173,12 @@
 TESTEXECUTE, \logs\testexecute\devcerts_restore.htm,, -Dstartupmode=1 -- \tswi\tdevcerts\scripts\devcerts_restore.script, 300, UDEB#UREL, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\changedevid.bat, \epoc32\winscw\c\tswi\tdevcerts\scripts\batchfiles\devcerts_restore_post.bat
 
 TESTEXECUTE, \logs\testexecute\tsisregistrytest.htm,, -Dstartupmode=1 -- \tswi\tsisregistrytest\scripts\tsisregistrytest.script, 1500, UDEB#UREL, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\useautocfg.bat, \epoc32\winscw\c\tswi\tsisregistrytest\Scripts\batchfiles\tsisregistrytest_post.bat
+TESTEXECUTE, \logs\testexecute\tsisregistrytest_tcb.htm,, -Dstartupmode=1 -- \tswi\tsisregistrytest\scripts\tsisregistrytest_tcb.script, 1500, UDEB#UREL, \epoc32\winscw\c\tswi\tsisregistrytest\scripts\batchfiles\tsisregistrytest_tcb_pre.bat, \epoc32\winscw\c\tswi\tsisregistrytest\scripts\batchfiles\tsisregistrytest_tcb_post.bat
 
-TESTEXECUTE, \logs\testexecute\testdevicelanguages.htm,, \tswi\tuiscriptadaptors\scripts\testdevicelanguages.script, 300, UDEB,,
+TESTEXECUTE, \logs\testexecute\testdevicelanguages.htm,, \tswi\tuiscriptadaptors\scripts\testdevicelanguages.script, 300, UDEB#UREL,,
 
 TESTEXECUTE, \logs\testexecute\testVFPOnEmulator.htm,, -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\testVFPOnEmulator.script, 300, UDEB#UREL,,
-TESTEXECUTE, \logs\testexecute\tdaemon.htm,, -Dstartupmode=1 -- \tswi\tdaemon\scripts\tdaemon.script, 300, UDEB#UREL,, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\callcreateandsignunicode.bat
+#TESTEXECUTE, \logs\testexecute\tdaemon.htm,, -Dstartupmode=1 -- \tswi\tdaemon\scripts\tdaemon.script, 300, UDEB#UREL,, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\callcreateandsignunicode.bat
 
 # createandsignunicode.pl needs to be run as it builds some SIS files the following tests rely on, however it is a SisTools test so it is run through a batch file and the results not recorded here
 TESTEXECUTE, \logs\testexecute\tbackuprestore.htm,, -Dstartupmode=1 -- \tswi\tbackuprestore\scripts\tbackuprestore.script, 1500, UDEB#UREL,\epoc32\winscw\c\tswi\tbackuprestore\scripts\batchfiles\tbackuprestore_pre.bat, \epoc32\winscw\c\tswi\tbackuprestore\scripts\batchfiles\tbackuprestore_post.bat
@@ -193,6 +197,7 @@
 TESTEXECUTE, \logs\testexecute\tgenbackupmeta_mandatory_udeb.htm,, -Dstartupmode=1 -- \tswi\tgenbackupmeta\scripts\tgenbackupmeta_mandatory_udeb.script, 300,UDEB,%SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiCertstore.bat swicertstore_mandatory.dat,\epoc32\winscw\c\tswi\tgenbackupmeta\scripts\postmeta.bat
 TESTEXECUTE, \logs\testexecute\tgenbackupmeta_mandatory_urel.htm,, -Dstartupmode=1 -- \tswi\tgenbackupmeta\scripts\tgenbackupmeta_mandatory_urel.script, 300,UREL,%SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiCertstore.bat swicertstore_mandatory.dat,\epoc32\winscw\c\tswi\tgenbackupmeta\scripts\postmeta.bat
 TESTEXECUTE, \logs\testexecute\trevocation.htm,, -Dstartupmode=1 -- \tswi\trevocation\scripts\trevocation.script, 600, UDEB#UREL,,
+TESTEXECUTE, \logs\testexecute\trevocationocsp_emulator.htm,, -Dstartupmode=1 -- \tswi\trevocation\scripts\trevocationocsp_emulator.script, 600, UDEB#UREL, \epoc32\winscw\c\tswi\trevocation\scripts\trevocationocsp_emulator_pre.bat, \epoc32\winscw\c\tswi\trevocation\scripts\trevocationocsp_emulator_post.bat
 TESTEXECUTE, \logs\testexecute\trevocation_unsigned.htm,, -Dstartupmode=1 -- \tswi\trevocation\scripts\trevocation_unsigned.script, 600, UDEB#UREL, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiPolicy.bat swipolicy_allowunsigned.ini, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiPolicy.bat swipolicy.ini
 TESTEXECUTE, \logs\testexecute\tautosigning.htm,, -Dstartupmode=1 -- \tswi\tautosigning\scripts\tautosigning.script, 300, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\testdrm.htm,, -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\testdrm.script, 300, UDEB#UREL,,
@@ -260,7 +265,7 @@
 TESTEXECUTE, \logs\testexecute\testmulti.htm,, -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\testmulti.script, 300, UDEB#UREL,
 TESTEXECUTE, \logs\testexecute\generateregistrytestdata.htm,, -Dstartupmode=1 -- \tswi\tsisregistrytest\scripts\generateregistrytestdata.script, 300, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\runregistrytests.htm,, -Dstartupmode=1 -- \tswi\tsisregistrytest\scripts\runregistrytests.script, 300, UDEB#UREL,,
-TESTEXECUTE, \logs\testexecute\removeregistrytestdata.htm,, -Dstartupmode=1 -- \tswi\tsisregistrytest\scripts\removeregistrytestdata.script, 300, UDEB#UREL,,
+TESTEXECUTE, \logs\testexecute\removeregistrytestdata.htm,, -Dstartupmode=1 -- \tswi\tsisregistrytest\scripts\removeregistrytestdata.script, 750, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\truststatus.htm,, -Dstartupmode=1 -- \tswi\trevocation\scripts\truststatus.script, 600, UDEB#UREL,, 
 TESTEXECUTE, \logs\testexecute\testtruststatus.htm,, \tswi\tuiscriptadaptors\scripts\testtruststatus.script, 300, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\tresetdevice.htm,, -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\tresetdevice.script, 600, UDEB#UREL, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiPolicy.bat swipolicy_deletepreinstalledfiles.ini, %SECURITYSOURCEDIR%\installationservices\switestfw\test\autotesting\setupSwiPolicy.bat swipolicy.ini
@@ -293,6 +298,8 @@
 [SwiDiran]
 TESTEXECUTE, \logs\testexecute\tswiregcompfields.htm,, \tswi\tuiscriptadaptors\scripts\tswiregcompfields.script, 300, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\tswtype.htm,, \tswi\tuiscriptadaptors\scripts\tswtype.script, 300, UDEB#UREL,,
+TESTEXECUTE, \logs\testexecute\tswiappregintegration.htm,, \tswi\tuiscriptadaptors\scripts\tswiappregintegration.script, 3000, UDEB#UREL,,
+TESTEXECUTE, \logs\testexecute\tswiappregintegration_stub.htm,,    -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\tswiappregintegration_stub.script, 500, UDEB#UREL, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\tswiappregintegration_pre.bat, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\tswiappregintegration_post.bat
 
 [SISInstaller]
 tIntegritySupport, \tisrecovery.log,, -Dtextshell -- \tIntegritySupport\scripts\tisrecovery.txt \tisrecovery.log, 300, UDEB#UREL,, \epoc32\winscw\c\tIntegritySupport\scripts\batchfiles\tIntegritySupport_post.bat
@@ -345,10 +352,10 @@
 PERL, \dumpchainvalidity_test.txt,,\epoc32\winscw\c\tswi\tchainvalidity\testChainValidity.pl, 300, UDEB,,
 # DUMPINSTALLFILESTATUS test
 PERL, \dumpinstallstatus_test.txt,,\epoc32\winscw\c\tswi\tinstallfilestatus\testInstallStatus.pl, 300, UDEB,,
+# DUMPSWICERTSTORE test
+PERL, \dumpswicertstore_test.txt,,\epoc32\winscw\c\tswi\tdumpcertstore\testswiCertstore.pl, 600, UDEB,\epoc32\winscw\c\tswi\tdumpcertstore\predumpcertstoretest.bat, \epoc32\winscw\c\tswi\tdumpcertstore\postdumpcertstoretest.bat
 
 [SwiTools95Only]
-# DUMPSWICERTSTORE test
-PERL, \dumpswicertstore_test.txt,,\epoc32\winscw\c\tswi\tdumpcertstore\testswiCertstore.pl, 600, UDEB,\epoc32\winscw\c\tswi\tdumpcertstore\predumpcertstoretest.bat, \epoc32\winscw\c\tswi\tdumpcertstore\postdumpcertstoretest.bat
 # DUMPSWIREGISTRY test
 PERL, \dumpregistry_test.txt,,\epoc32\winscw\c\tswi\tdumpregistry\testregistry.pl, 300, UDEB,,
 
@@ -360,6 +367,7 @@
 TESTEXECUTE, \logs\testexecute\tsifintegration.htm,,z:\tusif\tsifintegration\tsifintegration.script, 500, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\tsif.htm,,z:\tusif\tsif\tsif.script, 300, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\tsifoom.htm,,z:\tusif\tsif\tsifoom.script, 300, UDEB,,
+TESTEXECUTE, \logs\testexecute\tnotifier.htm,,z:\tusif\tsif\tnotifier.script, 1000, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\tscr.htm,,z:\tusif\tscr\tscr.script, 100000, UDEB#UREL,,
 TESTEXECUTE, \logs\testexecute\tscr_oom.htm,,z:\tusif\tscr\tscr_oom.script, 100000, UDEB,,
 TESTEXECUTE, \logs\testexecute\tsts_bootuptimerecovery.htm,,z:\tusif\tsts\tsts_bootuptimerecovery.script, 300, UDEB#UREL, \epoc32\data\z\tusif\tsts\batchfiles\tsts_bootuptimerecovery.bat,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Generic technology part of test framework security subsystem
+*
+*/
+
+
+
+/**
+ @file
+ @internalComponent
+*/
+
+ 
+PRJ_TESTEXPORTS
+// Export certificates for security tests. 
+// Note that these certificates should not appear in a CBR and are not included in the source directives in the mrp file.
+
+
+// SWI Component
+../swi/test/trevocation/ocsp/expressandcertifiedsignedCert/CaCert/swicertstore.dat /epoc32/winscw/c/tswi/trevocation/swicertstore.dat
+../swi/pctools/test/tdumpcertstore/certificates/sucert.der /epoc32/winscw/c/tswi/tdumpcertstore/certificates/sucert.der
+../swi/pctools/test/tdumpcertstore/certificates/root5ca.der /epoc32/winscw/c/tswi/tdumpcertstore/certificates/root5ca.der
+../swi/pctools/test/tdumpcertstore/certificates/second.der /epoc32/winscw/c/tswi/tdumpcertstore/certificates/second.der
+../swi/pctools/test/tdumpcertstore/certificates/symbian-test-chain-rsa.der /epoc32/winscw/c/tswi/tdumpcertstore/certificates/symbian-test-chain-rsa.der
+../swi/pctools/test/tdumpcertstore/certificates/symbian-test-dsa.der /epoc32/winscw/c/tswi/tdumpcertstore/certificates/symbian-test-dsa.der
+../swi/pctools/test/tdumpcertstore/certificates/symbian-test-expired-rsa.der /epoc32/winscw/c/tswi/tdumpcertstore/certificates/symbian-test-expired-rsa.der
+../swi/pctools/test/tdumpcertstore/certificates/symbian-test-rsa.der /epoc32/winscw/c/tswi/tdumpcertstore/certificates/symbian-test-rsa.der
+../swi/pctools/test/tdumpcertstore/certificates/symbian-test-tcb-rsa.der /epoc32/winscw/c/tswi/tdumpcertstore/certificates/symbian-test-tcb-rsa.der
+../swi/pctools/test/tdumpcertstore/certificates/symbiantestrootcadiffserial.der /epoc32/winscw/c/tswi/tdumpcertstore/certificates/symbiantestrootcadiffserial.der
+../swi/pctools/test/tdumpcertstore/certificates/symbiantestrsaca.der /epoc32/winscw/c/tswi/tdumpcertstore/certificates/symbiantestrsaca.der
+../swi/sistools/test/tinterpretsis/certs/default.cer /epoc32/winscw/c/tswi/tinterpretsis/certs/default.cer
+../swi/sistools/test/tinterpretsis/certs/signing.cer /epoc32/winscw/c/tswi/tinterpretsis/certs/signing.cer
+../swi/sistools/test/tsignsis/kanji_cer.cer 		/epoc32/winscw/c/tswi/tsignsis/kanji_cer.cer
+../swi/sistools/test/tinterpretsisinteg/testdatah004/cert-gen.cer /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatah004/cert-gen.cer
+../swi/test/tsisfile/data/files/default.cer							/epoc32/winscw/c/tswi/tsignsis/default.cer
+../swi/sistools/test/tsignsis/signingdata/emptylinescert.key.pem /epoc32/winscw/c/tswi/tsignsis/signingdata/emptylinescert.key.pem
+../swi/sistools/test/tsignsis/signingdata/emptylinescert.pem /epoc32/winscw/c/tswi/tsignsis/signingdata/emptylinescert.pem
+../swi/sistools/test/tsignsis/signingdata/good-r5.key.pem /epoc32/winscw/c/tswi/tsignsis/signingdata/good-r5.key.pem
+../swi/sistools/test/tsignsis/signingdata/good-r5.pem /epoc32/winscw/c/tswi/tsignsis/signingdata/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdatah004/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatah004/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdatah004/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatah004/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdatai001/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatai001/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdatai001/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatai001/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdatai002/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatai002/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdatai002/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatai002/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdatai003/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatai003/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdatai003/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatai003/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj001/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj001/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj001/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj001/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj002/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj002/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj002/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj002/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj003/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj003/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj003/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj003/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj004/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj004/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj004/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj004/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj005/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj005/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj005/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj005/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj006/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj006/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj006/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj006/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj007/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj007/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj007/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj007/good-r5.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj008/good-r5.key.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj008/good-r5.key.pem
+../swi/sistools/test/tinterpretsisinteg/testdataj008/good-r5.pem /epoc32/winscw/c/tswi/tinterpretsisinteg/testdataj008/good-r5.pem
+ 
+
Binary file installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/first.der has changed
Binary file installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/root5ca.der has changed
Binary file installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/sucert.der has changed
Binary file installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbian-test-chain-rsa.der has changed
Binary file installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbian-test-dsa.der has changed
Binary file installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbian-test-expired-rsa.der has changed
Binary file installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbian-test-rsa.der has changed
Binary file installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbian-test-tcb-rsa.der has changed
Binary file installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbiantestrootcadiffserial.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/pctools/test/tdumpcertstore/certificates/symbiantestrsaca.der	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRDCCAa2gAwIBAgIBADANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA0MDQxODE0MzYxNFoXDTIwMDkyMTE0MzYxNFowPDEdMBsGA1UEChMUU3ltYmlh
+biBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5bWJpYW4gVGVzdCAtIFJTQTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAoVRBvn0k7DfHX9O1AwbMRlGTuQfXoFba
+E+g6N4g9VtC8ADrj7O+C6UETIERVqbqInDJRDKGkyGfxj4ush4QuwjyRC5bwVtU1
+4G78zHYVL2nA8lCh42DIJCBePrdTs4h+nCgDdiNB/51mtZueGJmMlNnDQCN2kpLi
+KgT7/tAf14ECAwEAAaNWMFQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwHQYDVR0OBBYEFOaTjrYQFlD8GQSM5KnKMYYmBZLWMA8GCSsGAQUFBzAB
+BQQCBQAwDQYJKoZIhvcNAQEEBQADgYEALXOi9zFgWw453UGQvw0HGNh6wemX2Ood
+pKceGDWyWFaQIxTA9dYVSqnhKWa728UklUi0CcRwp3leYHlvubkcSQANmRtM05PS
+kY2a2ENBf9afB/HNvOciFgGoHa494csZZ6ZS2GeKBxBOfajrjZrvQ3XDKptsRT1q
+50LsYyJhSg4=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsis/certs/default.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDBDCCAsSgAwIBAgIBADAJBgcqhkjOOAQDMGkxCzAJBgNVBAYTAkdCMRkwFwYD
+VQQKExBTeW1iaWFuIFNvZnR3YXJlMRkwFwYDVQQLExBDb3JlIERldmVsb3BtZW50
+MSQwIgYDVQQDExtEZWZhdWx0IFNpZ25pbmcgQ2VydGlmaWNhdGUwHhcNMDYwMjAy
+MTExNTI0WhcNMTYwMjAyMTExNTI0WjBpMQswCQYDVQQGEwJHQjEZMBcGA1UEChMQ
+U3ltYmlhbiBTb2Z0d2FyZTEZMBcGA1UECxMQQ29yZSBEZXZlbG9wbWVudDEkMCIG
+A1UEAxMbRGVmYXVsdCBTaWduaW5nIENlcnRpZmljYXRlMIIBtzCCASsGByqGSM44
+BAEwggEeAoGBALnfndoLyYr7KxvNenPJnEHXjw2/5A2sSgPqAS9Fa4za5O56V0Y8
+z5QcxL7PgzbhPPnPuzuxt2dZKKdWdCcls5YdB0acanKoMEgT6NmNxUxhSwvDlQBT
+dEujcdULpEZI+y/lTJLJZrh8Ak6e7FeXJEPMska56oeamvvyp2Dfz7y7AhUA7HTW
+0hQzOLdU0EoVF8LoFfp4CH0CgYBwo0ieIVUa35CUbpgkpG0EBJQbW3rSOvr1ATSZ
+qwzamHyqeVNqfv1ZMerpeikowFejifFFy7LJfgizgWlK2Z2Vw5Mp2900VJWIdvYZ
+g+QeLFqitMqjvhmhVgJYYWIjHj/w4QB6prEBW92ZfbRjW82g6WgfNQm7eY0XiJv0
+vBLf/AOBhQACgYEAg+0/wVe+LY9ZEB4HOL8y9Jl3vA7P8cqHPpr8ZuDgrAjVsXAk
+kjnvI/e86jUDUKnlWj/of+xCBwpTa/PYvdWHndBbRLm2XPgz3aFZLqgz7oMMUJwH
+f2qeqatOLfjY2SfgQwcqzY4T4Sbj/U7D89oLCCm3qizfn2MfIagivB5B9oYwCQYH
+KoZIzjgEAwMvADAsAhRCrW9kWjeAzf+NT2h2Ru+iMRqYkgIUVJghz8UIi17lFGod
+pBqu3ZY+1+I=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsis/certs/signing.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICaTCCAdICAQIwDQYJKoZIhvcNAQEEBQAwMzEdMBsGA1UEChMUU3ltYmlhbiBT
+b2Z0d2FyZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTAeFw0wNDA5MDEwOTM3MzZa
+Fw0xNDA4MzAwOTM3MzZaMHYxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24x
+GDAWBgNVBAMTD0pvaGFuIEdyb3RoIERTQTEUMBIGA1UEChMLU3ltYmlhbiBMdGQx
+JjAkBgkqhkiG9w0BCQEWF2pvaGFuLmdyb3RoQHN5bWJpYW4uY29tMIHwMIGoBgcq
+hkjOOAQBMIGcAkEAoZlsMI7fbUusygPAuy5rVKeYjHlFFBAI3Fm4/vRvz6AIXG/t
+i8PRr/di3HmpKzf4+nrpfrMDsHVEBZJvs12NKwIVALrQ4ij0GHpmhKPsUcL5Ur0M
+bUrlAkAwaCcVcQMsoYnZ7WGomaNH4XqkJ/Eo4ODM51syfG1u0ALTHqUvnX8EvhaK
+KAiRKTTvlWcEyUE1ViUpemt+Sv4MA0MAAkBuSEJNaOv4REzZSUPbUetl6e/886Dz
+l/PsC+2D9j583shY81TX1xtjQyuII/WTsZEc+HBvhHjnPDI5xzZNDbPsMA0GCSqG
+SIb3DQEBBAUAA4GBAHAPL48ztI+jfpNr+eQA/VOUg6ChgsoUQu2TVFo9tew/Cfrt
+ViqozDiVU4YGeGGNrTI19r9mTuI4xEbHwANxArNBtZvlN+Peu/ynqcYOcOV+RvV0
+cNeiKaguT71nzJJxlN/S+IX8+32LDvk/5FS2vJ5abaVc+WEV2/wZn4bPWqS/
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatah004/cert-gen.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDZzCCAyWgAwIBAgIBATAJBgcqhkjOOAQDMIGZMYGFMIGCBgNVBAMTe3RydXN0
+b2tmNDEwMzhiOTgyMDcxOGQzZTQzZTAzNTViOTRjNjhkODA2MjNlZjY3MWVmN2Rj
+ZmQzNDNiNTk0ZDM3OTA5MGZkMmY2YzBlMzliMzQ1M2RjZWFhZjA3NWE3ZmUzMDdi
+ZTg2OGViZTA3N2Y1MzcyMTM0ODM5NzEPMA0GA1UEChMGVmVuZG9yMB4XDTA2MTIy
+OTAyNTUwNFoXDTA3MTIyOTAyNTUwNFowgZkxgYUwgYIGA1UEAxN7dHJ1c3Rva2Y0
+MTAzOGI5ODIwNzE4ZDNlNDNlMDM1NWI5NGM2OGQ4MDYyM2VmNjcxZWY3ZGNmZDM0
+M2I1OTRkMzc5MDkwZmQyZjZjMGUzOWIzNDUzZGNlYWFmMDc1YTdmZTMwN2JlODY4
+ZWJlMDc3ZjUzNzIxMzQ4Mzk3MQ8wDQYDVQQKEwZWZW5kb3IwggG2MIIBKwYHKoZI
+zjgEATCCAR4CgYEAjw+6xCz30B2CUULQPgOWNuvJd5E+TxwOTFarxTZrQgXjxQxk
+C3tdWzU/27EnlhKhsmLYkoZYIYmu4acu0RP0MubccQatRvZyn94CXTFLhazgsY2N
+XZ/Y5EIl26e+cEn6V9sGM9QircagwoNKJEV9Uv/ZfWcLo2OKzGR3kFP7L00CFQD+
+WSqy+jMwt+L2AraJSmK3ISzm6QKBgGS5sl0THnVZnVYoY5XEls8aknQCytHZKO9K
+lcMH/G8n2mlvYL6RCXU6t23MN9Op0dw5W26KyZGr76ZYlzQsAMeP2NuaCz7tZC/s
+GKtn/+xwkeQpQ2xgz/eoKOMDvGxMtJL3DbOFC8s7ah18lwxDLrMHv+7B1ZWA/a1e
+O5cSnx8aA4GEAAKBgA5IWF+iYAX3CGoAGdGK3zcugzwBHxHWZCywjOwInSx7/rA6
+nWilAktG0oGbaGGULG3OVwLMPG5V9Dd1EZzmgVKET8+ZXo7NTyMtrZA2DXXxmGnz
+KV0V01g92ORVgilxb9Rokg0qfunsg1+nKvwTpW0jaagWN63FejBnziqLiIz1MAkG
+ByqGSM44BAMDMQAwLgIVAJmvnfkM1Pf6YLhnhkdgbJdbdG1TAhUAxTbK0anUyF2V
+oMzoo9HHaKYUj00=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatah004/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatah004/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai001/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai001/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai002/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai002/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai003/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdatai003/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj001/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj001/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj002/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj002/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj003/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj003/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj004/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj004/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj005/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj005/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj006/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj006/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj007/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj007/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj008/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tinterpretsisinteg/testdataj008/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tsignsis/kanji_cer.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIErzCCBG+gAwIBAgIBATAJBgcqhkjOOAQDMH0xGTAXBgNVBAMeEE5jTmhOaQBj
+AGgAcgBpAHMxGTAXBgNVBAseEE45TjtOPABkAGUAdgBlAGwxFzAVBgNVBAoeDp+d
+n56foABhAGMAbQBlMQswCQYDVQQGEwJKTjEfMB0GCSqGSIb3DQEJARYQdGVzdEBu
+b3doZXJlLmNvbTAeFw0wNjA5MTUxMjQyMTFaFw0wNzA5MTUxMjQyMTFaMH0xGTAX
+BgNVBAMeEE5jTmhOaQBjAGgAcgBpAHMxGTAXBgNVBAseEE45TjtOPABkAGUAdgBl
+AGwxFzAVBgNVBAoeDp+dn56foABhAGMAbQBlMQswCQYDVQQGEwJKTjEfMB0GCSqG
+SIb3DQEJARYQdGVzdEBub3doZXJlLmNvbTCCAzowggItBgcqhkjOOAQBMIICIAKC
+AQEAle4bh+IvenpdVaw7RGY4qkQRN41yZCGgaKcWeE7+cTF60xPOJgQ4cMB8O1iK
+BjCVzu0bPuOBdEE6KyKpw2uWKGHvHRxPt6xoBdyl0tArort4VV+/X5wQEpFSQpaK
+aQYYUJw70CA4IgAk3gsHCU6B2yZ3+GadgAG7eD8p4IXHde3H/Ik+RWOab8bnk0l6
+FQd3+8sFk3c0Oyc/44Q/nIJqTzvYXJf0OQL1yFQAJ1IERGbHYhOzQ3RC29TpwZt0
+EtkZFQuc1FTdMHWIaXyjIwLLq8sEVZDunvmCfnTlGOYWE+ODHKFJGEf4GymsSAfR
+/FqF+sMnSDQoCyrVv0movCkwtQIVAIyd/Xxd+n3saNrcdvT8uEOvklhxAoIBAGwU
+tZUUC2cnkYc8joCao/T7A64YEW7uGmGMhkwW1qC58MAcS5KvYHXnRRP4gHuTmWyZ
+D9mzsQWjYvRC45odu4v+wxrc6ZGZlVB2XjnVWD0NOageiTgKO9u9s2dkFYN0/LNV
+SkKwZbvjvV5SA9hJm0BCRUNNAa+KELUMscBfVjY7+GbuUBKNmreXsKzgEtke4ZoO
+u4uR/qcLm7jIU5vWBoaCiwHYPHgL5XDb74teZIXjSPX+d4TlCrGFSGiZBtlbosKz
+SqAIpx4ZZQWXrcxhTn63Swp6TtYcC7FfJ2hIYKyn9S5kK2UqptaL5To/iw7GuNOI
+43CyQm9z1TR/rz7RJA4DggEFAAKCAQBIsDXw1p1t51Vz1kR+HZyvmKL4gN/zhDRK
+vMenZJKyRkeGrxDUZuNG9mBfzR6U81wzwq5NsiGxy7KCEUrxr8LZNC38ccIIS6eo
+HB7P3Q5QySzMdFtCKSNhEDsB3XTzCxO1W5doVInhoCa9wrxYK5C+gazRKfwvdLgj
+l9zfattc3auSERwGFIAmKovqrU1A0O+n9YUXvGBQ38FGJbv5kjtuJI2LR80WWOJ3
+rTT5QXcwTgqv3/YfPn2dbrY3OTOrcrvU1m9FnRQMdHY/IXsJVZRBmUPpfsWKVPrB
+XNlU8DaVghclqSRaE4BY3FyUn+X3/JZOiuT1HPvOs0vfcStnDCPKMAkGByqGSM44
+BAMDLwAwLAIUSbN4XOW2SquJizOGzJWewunUsiECFDupQhdbq5lZwK1opVrwVvPm
+uM9Q
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tsignsis/signingdata/emptylinescert.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tsignsis/signingdata/emptylinescert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,36 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tsignsis/signingdata/good-r5.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDWXaGWWZ8cuD14xTTwwOJ0Mye03mjxqiyb5HERi/BhtSJFmsh9
+gC5rtf8vZM7m3mXsQ4scnGFjLReX7aZIXQJfrrhFKZmQCxTWTVURNllBxsCyOG8i
+uHEXppMoNJqWiNQ4+0cpGZQ4tRuvLmT8GKvT9M8NaCzHR6AaV6ClGCl8BQIDAQAB
+AoGBAKjKyTWuFA91M1IpVmpMNwPwU8+jYVcI/F80HaQHYJxPGFFec4f+qo69m9Yh
+tpkrfW3wMVWx/S0ukGldA5XvRrHHGKr3UF8vFayp7fK4pd3kljetKfrvp/EFU43t
+VMMtwt7EVIC7ZQM6CqgA8uhmBuPED1EwKxWR1RRU3BkIW62BAkEA+hbJqPc2KeRi
+pANroqNtJIPL4G/d9LMJHXCc8tAW9K/P4dTEkSnkg8lCveHgb0FKvQ30IsYMCr81
+YOPX8X+dXQJBANtusWChSXjJ7A2si9jXgxrTaSyrtRwmglr/AhM0hOyDwW0rfKSk
+1Ylq3EyAcT3odBb6PdhXKmBTVyxF3s81xskCQFtTDvkArWrG166FAT026Jg4+K5Q
+q4C8EEwL34RbsMZRnVweUlmgLq5hRFoKreZytVQsUEaSg7s478kd6rFppJECQAPY
+AItsx9ix0My8hQabX9SMd38s0tNXaVkmtmaXuOxbsnuzE0/fA06Q7KL6bQFknQP6
+BjNP85IUY6aG4sxGaOECQQCLCaGXZpbB1rjA+KDUqZaaeY3tZG7np4il48plEvPr
+q7yj4ZctfhpTXFtsg6kMJXSRCSeVsTC12UrgaYX7GEwv
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/sistools/test/tsignsis/signingdata/good-r5.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIICCTCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0NVoXDTE0MDMwMTE2MzQ0NVowMTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEDAOBgNVBAMTB0dvb2QtUjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBANZdoZZZnxy4PXjFNPDA4nQzJ7TeaPGqLJvkcRGL8GG1IkWayH2ALmu1/y9k
+zubeZexDixycYWMtF5ftpkhdAl+uuEUpmZALFNZNVRE2WUHGwLI4byK4cRemkyg0
+mpaI1Dj7RykZlDi1G68uZPwYq9P0zw1oLMdHoBpXoKUYKXwFAgMBAAGjLzAtMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMBYGA1UdIAQPMA0wCwYJKoY6AAHt02sBMA0GCSqG
+SIb3DQEBBAUAA4GBACfm9aZVS9CJKKcIxqmyhnOhNDHhkO/6c0pTM3IUK0QZSSoT
+9gD9+MVfx2IX43+k/ePu4xHeSY/7cJXuWgWW7nVKwk/da96hRcTPM1in6vb03a5O
+CsnC7W9cI65EC2WvxI7htnicYg3XZCE42JHx0OfKYrUfEmkAT7xqUNvW31b7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tautosigning/createsis/cert-gen.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDAzCCAsGgAwIBAgIBADALBgcqhkjOOAQDBQAwZzFSMFAGA1UEChNJVmVuZG9y
+LUVOZTg2NWMzOTk4NDJlNWJhZDlmMjJkODlkMjdjYjJiN2NiZjNkYTQzNDhlYzk3
+OTFjMmM1YTViNGYzM2Q0ZWM3NTERMA8GA1UEAxMIc2ltcGxlRU4wHhcNMDUwMjE1
+MTU0NTMzWhcNMDYwMjE1MTU0NTMzWjBnMVIwUAYDVQQKE0lWZW5kb3ItRU5lODY1
+YzM5OTg0MmU1YmFkOWYyMmQ4OWQyN2NiMmI3Y2JmM2RhNDM0OGVjOTc5MWMyYzVh
+NWI0ZjMzZDRlYzc1MREwDwYDVQQDEwhzaW1wbGVFTjCCAbYwggErBgcqhkjOOAQB
+MIIBHgKBgQC4JZyuDtfPWGmW8PItdLUkgDimI9hMyZm2Zdditjsm2NSH5B9Mkx3c
+EZUqMxufRAjZVIm8J6omP2HjLYmLK4tL6RtZLa2DDSAhqSP7RNQYJKcUxIuRpgUO
+5p+G6iYyOo6rBEF2OxyRj+f4y05BpjwGoLDDdkSGYWpSsgy5HtwPRwIVAMrGPoeN
+KiMX5yz6vBsVt/H7pGbbAoGAEb9dqTNQ4fHS/guj2xPpcdN/qLOsH/2k0oGPW57F
+plKrlnR7IW9VpV0iZgERdA6pc/m+POrrYoLsjczlYq/aeIhgdZEZkUX1ZJJVEiED
+ZAmVghWkbVnvGRP+VVWA7NfiyK878vGL6B3zSEPseVa18+s2DF7L18RL5bSCzurv
+Y9cDgYQAAoGAWHCRZ4BNZoG1x6RYgK3u8r0f9kJAeSivb/4C2m78b/xfVWadgMun
+qISEamg46Z4Q4tZGUIsUoleGLVJzyDTqGy+HmsWTeN3zPGlGTpwHujWFWoOTcgNm
+z2XR7IQAq3VEez8F1CzBBsZmhK5qGxRgGxgE/ZZPREil6cMMDq9I9FEwCwYHKoZI
+zjgEAwUAAy8AMCwCFB3eTiTlObBHf8CdyX2ibNZdCnZKAhQN6sPrulc03VQB1RB2
++nKHXhotyw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tautosigning/createsis/cert.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIICzTCCAomgAwIBAgIBADALBgcqhkjOOAQDBQAwSzELMAkGA1UEBhMCR0IxFDAS
+BgNVBAoTC1N5bWJpYW4gTHRkMRQwEgYDVQQLEwtEZXZlbG9wbWVudDEQMA4GA1UE
+AxMHU3ltYmlhbjAeFw0wNTAxMjQxNzE2MjhaFw0wNjAxMjQxNzE2MjhaMEsxCzAJ
+BgNVBAYTAkdCMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEUMBIGA1UECxMLRGV2ZWxv
+cG1lbnQxEDAOBgNVBAMTB1N5bWJpYW4wggG2MIIBKwYHKoZIzjgEATCCAR4CgYEA
+lx7iFRiDqWhhKK33b8z/VOrzxucRIBQwOZoB5RTmmSS8lZ9F483XnUS1LsDE5rdn
+O0PJRRnDbF4PtQk+BfaxHBk922QFtdfZnIiMXjNvEXV/En09QBgiXTyy3sf2f+CO
+/aV8jlxB+7BVH4NwcI70TutO+ebWw2ObEKljHCJk9AMCFQDdjgSR5mKnUyrBAnHX
+Arr5JRRcfQKBgDZRfgbKQtICE+vFPd0vB0gLJNRfl0+WAndjMFCMSR/XgdVRWg1Q
+XlTtW5bRjChQGHLUkHj3aUyNOYSP5EdJfeldvtA7BeiibaEPM8R2DmA37bpYuPdM
+rTEPnFmUYOqL7Ax/LX1q71/47o2ei/31l0wKtQaayjSCTaEwIJ5wohHTA4GEAAKB
+gCJfmKd19xyYhDFnURfkinVLVjhOgoSndNG43hYr7JGa0Wa/8KZi8gjt6U3sdybS
+ceYbRq18SWkuD12oYPc2QI22BAebtO5OmP6SxKqpwUek4L393ktaVCkNiYTmf6WG
+rHgkbz8DXArvxHL1ej7BLMXogNu3FMMFgkFpG+x+/aZGMAsGByqGSM44BAMFAAMx
+ADAuAhUAxpkT9rOlAMGVX76+aBJGc4zxWUoCFQC0b1DRA1eyjnK6Tfgc70Nr1vY/
+QA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tautosigning/data/Root5RSA.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tautosigning/data/TestCARSA.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRDCCAa2gAwIBAgIBADANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA0MDQxODE0MzYxNFoXDTIwMDkyMTE0MzYxNFowPDEdMBsGA1UEChMUU3ltYmlh
+biBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5bWJpYW4gVGVzdCAtIFJTQTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAoVRBvn0k7DfHX9O1AwbMRlGTuQfXoFba
+E+g6N4g9VtC8ADrj7O+C6UETIERVqbqInDJRDKGkyGfxj4ush4QuwjyRC5bwVtU1
+4G78zHYVL2nA8lCh42DIJCBePrdTs4h+nCgDdiNB/51mtZueGJmMlNnDQCN2kpLi
+KgT7/tAf14ECAwEAAaNWMFQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwHQYDVR0OBBYEFOaTjrYQFlD8GQSM5KnKMYYmBZLWMA8GCSsGAQUFBzAB
+BQQCBQAwDQYJKoZIhvcNAQEEBQADgYEALXOi9zFgWw453UGQvw0HGNh6wemX2Ood
+pKceGDWyWFaQIxTA9dYVSqnhKWa728UklUi0CcRwp3leYHlvubkcSQANmRtM05PS
+kY2a2ENBf9afB/HNvOciFgGoHa494csZZ6ZS2GeKBxBOfajrjZrvQ3XDKptsRT1q
+50LsYyJhSg4=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/certs/01.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: Mar 21 15:34:46 2005 GMT
+            Not After : Mar 19 15:34:46 2015 GMT
+        Subject: O=Symbian, CN=Test
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:d0:23:55:f9:ab:49:9f:ec:2d:36:61:5d:03:87:
+                    36:84:2d:60:55:99:b6:25:3d:9b:06:6f:a7:21:91:
+                    6b:93:52:74:21:fd:a4:db:85:b9:03:b3:f5:72:6b:
+                    92:e8:b1:05:b4:58:02:3e:80:9c:2f:c6:4d:7f:8d:
+                    8e:cf:70:f7:2d
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            1.2.826.0.1.1796587.1.1.1.6: 
+                ......
+    Signature Algorithm: md5WithRSAEncryption
+        60:2b:31:ff:00:c5:48:1a:60:b5:8b:0b:8b:ac:02:7c:4e:25:
+        10:e5:1e:6b:d7:47:67:df:18:42:18:af:41:d9:44:8a:d5:d5:
+        e1:a8:79:21:61:95:17:b2:0d:85:a3:9f:1b:d3:8f:37:21:69:
+        5f:b5:10:a9:6b:4e:fc:62:5e:50:0f:54:b2:58:ae:f1:28:d2:
+        b4:49:30:4b:0b:f9:4b:65:8c:92:70:fe:f2:4e:48:48:19:f5:
+        22:76:35:15:b6:8e:76:55:9f:68:00:c7:a4:6b:08:a3:ae:a9:
+        d6:fc:c1:fb:cf:bf:86:93:a7:a9:91:01:5e:2d:80:23:aa:1f:
+        00:21
+-----BEGIN CERTIFICATE-----
+MIIBqTCCARKgAwIBAgIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA1MDMyMTE1MzQ0NloXDTE1MDMxOTE1MzQ0NlowITEQMA4GA1UEChMHU3ltYmlh
+bjENMAsGA1UEAxMEVGVzdDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDQI1X5q0mf
+7C02YV0DhzaELWBVmbYlPZsGb6chkWuTUnQh/aTbhbkDs/Vya5LosQW0WAI+gJwv
+xk1/jY7PcPctAgMBAAGjGjAYMBYGDCqGOgAB7dNrAQEBBgQGAwQHAAOAMA0GCSqG
+SIb3DQEBBAUAA4GBAGArMf8AxUgaYLWLC4usAnxOJRDlHmvXR2ffGEIYr0HZRIrV
+1eGoeSFhlReyDYWjnxvTjzchaV+1EKlrTvxiXlAPVLJYrvEo0rRJMEsL+UtljJJw
+/vJOSEgZ9SJ2NRW2jnZVn2gAx6RrCKOuqdb8wfvPv4aTp6mRAV4tgCOqHwAh
+-----END CERTIFICATE-----
Binary file installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/certs/revoked_user_caps.cert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/certs/revoked_user_caps.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: Mar 21 15:34:46 2005 GMT
+            Not After : Mar 19 15:34:46 2015 GMT
+        Subject: O=Symbian, CN=Test
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:d0:23:55:f9:ab:49:9f:ec:2d:36:61:5d:03:87:
+                    36:84:2d:60:55:99:b6:25:3d:9b:06:6f:a7:21:91:
+                    6b:93:52:74:21:fd:a4:db:85:b9:03:b3:f5:72:6b:
+                    92:e8:b1:05:b4:58:02:3e:80:9c:2f:c6:4d:7f:8d:
+                    8e:cf:70:f7:2d
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            1.2.826.0.1.1796587.1.1.1.6: 
+                ......
+    Signature Algorithm: md5WithRSAEncryption
+        60:2b:31:ff:00:c5:48:1a:60:b5:8b:0b:8b:ac:02:7c:4e:25:
+        10:e5:1e:6b:d7:47:67:df:18:42:18:af:41:d9:44:8a:d5:d5:
+        e1:a8:79:21:61:95:17:b2:0d:85:a3:9f:1b:d3:8f:37:21:69:
+        5f:b5:10:a9:6b:4e:fc:62:5e:50:0f:54:b2:58:ae:f1:28:d2:
+        b4:49:30:4b:0b:f9:4b:65:8c:92:70:fe:f2:4e:48:48:19:f5:
+        22:76:35:15:b6:8e:76:55:9f:68:00:c7:a4:6b:08:a3:ae:a9:
+        d6:fc:c1:fb:cf:bf:86:93:a7:a9:91:01:5e:2d:80:23:aa:1f:
+        00:21
+-----BEGIN CERTIFICATE-----
+MIIBqTCCARKgAwIBAgIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA1MDMyMTE1MzQ0NloXDTE1MDMxOTE1MzQ0NlowITEQMA4GA1UEChMHU3ltYmlh
+bjENMAsGA1UEAxMEVGVzdDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDQI1X5q0mf
+7C02YV0DhzaELWBVmbYlPZsGb6chkWuTUnQh/aTbhbkDs/Vya5LosQW0WAI+gJwv
+xk1/jY7PcPctAgMBAAGjGjAYMBYGDCqGOgAB7dNrAQEBBgQGAwQHAAOAMA0GCSqG
+SIb3DQEBBAUAA4GBAGArMf8AxUgaYLWLC4usAnxOJRDlHmvXR2ffGEIYr0HZRIrV
+1eGoeSFhlReyDYWjnxvTjzchaV+1EKlrTvxiXlAPVLJYrvEo0rRJMEsL+UtljJJw
+/vJOSEgZ9SJ2NRW2jnZVn2gAx6RrCKOuqdb8wfvPv4aTp6mRAV4tgCOqHwAh
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/certs/revoked_user_caps.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBANAjVfmrSZ/sLTZhXQOHNoQtYFWZtiU9mwZvpyGRa5NSdCH9pNuF
+uQOz9XJrkuixBbRYAj6AnC/GTX+Njs9w9y0CAwEAAQJACU77Ql5BvbA/WWZDVawP
+aRvqagmk1seJjmEh9WNej0kVEEoODIIkddHEt2G0ADj/MGPG9PXsZLwkAP/TY1Ex
+YQIhAPRbGJ8kDKD1cIJY40P7DveGjWoNi/wWpr+5+yn1lbpFAiEA2g5q423qB7ne
+9ZNs79GvCI4h/meODgElFEQ7oRrJy8kCIQDoS0mG0CBpS6qfX5z9XUgHK5R4A1TW
+Wzo9/bG1W8/w+QIhAIuqumoLx9/E/Ps8v4ToQH1xVHK373Qm5ZISlkL9fo2JAiBm
++HD+I6C+h9GpPgAY03Hgos6mhZKeMIHe5s+GyS9wJw==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/certs/revoked_user_caps.req.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,8 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBAjCBrQIBADBIMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEYMBYG
+A1UECxMPU2VjdXJpdHkgLSBUZXN0MQ0wCwYDVQQDEwRUZXN0MFwwDQYJKoZIhvcN
+AQEBBQADSwAwSAJBANAjVfmrSZ/sLTZhXQOHNoQtYFWZtiU9mwZvpyGRa5NSdCH9
+pNuFuQOz9XJrkuixBbRYAj6AnC/GTX+Njs9w9y0CAwEAAaAAMA0GCSqGSIb3DQEB
+BAUAA0EAh7aqNfTKhrsBfoz765zZSsQAXkUMSWm0xbv2cLhVtjk7NSpo2g0JwdC9
+nn11reeaNC8TnEDk4xz0e5EU0ARyEg==
+-----END CERTIFICATE REQUEST-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/private/ca.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQChVEG+fSTsN8df07UDBsxGUZO5B9egVtoT6Do3iD1W0LwAOuPs
+74LpQRMgRFWpuoicMlEMoaTIZ/GPi6yHhC7CPJELlvBW1TXgbvzMdhUvacDyUKHj
+YMgkIF4+t1OziH6cKAN2I0H/nWa1m54YmYyU2cNAI3aSkuIqBPv+0B/XgQIDAQAB
+AoGACVCcGyuOnjT6RgYrRWl3EfhT1zMkuBVLsiqOcfZj1EdpE3pS/rM1k9I2EH7h
+k1M54ArnsxsCMLAPuoIODCUNrgHoTKJtL8cU8Pa7ZALewSLfRDUqOJLi+W3Ups46
+6jvdqQkFRF2k9evJOyI7wMs1rG0c/MzBGC+5lRbOOWbfcYECQQDPLUO58npxgrup
+usp2LUdE/Vz/fsJOVCoyzJq29LMvTqmAWqPvU1YkoB+U1ZOtvxd8r6/vlUZvDx64
+y2m4htLdAkEAx1kOCcpLl+ElEDGV3z7F77JTh128DvczyOU3j639LvqTfQR3FHOP
++89RmP1axo/Qhh0tClkdif8ZV99iac6S9QJAdrDt/hfGwkUtkj2rRC0IiaPFpbJP
+S2S4kEXb1Tk3dsDQJvLGvJO35F+/+Bqr8nxpzkswtkeFBJda+G/A77B+GQJAWAT5
+TtdUo14U6F6Mh0MHULvTZ9y6cX0zD0wuSTGQrhKT1sqG7a/M7mlu5PdRAoVzlBQD
+1CLfCRRrE0KeCIvelQJAaSdqX9/vuiJOnGfL8SSXxfB3hXcJU0e2Lo252eeeQtux
+oMTb0/jADuN0nxfsU1yvxgX+1nsso8uwpFPiFwdPHQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/SymbianTestRootCARSA_OCSP/SymbianTestRootCARSA/private/ca.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRDCCAa2gAwIBAgIBADANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA0MDQxODE0MzYxNFoXDTIwMDkyMTE0MzYxNFowPDEdMBsGA1UEChMUU3ltYmlh
+biBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5bWJpYW4gVGVzdCAtIFJTQTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAoVRBvn0k7DfHX9O1AwbMRlGTuQfXoFba
+E+g6N4g9VtC8ADrj7O+C6UETIERVqbqInDJRDKGkyGfxj4ush4QuwjyRC5bwVtU1
+4G78zHYVL2nA8lCh42DIJCBePrdTs4h+nCgDdiNB/51mtZueGJmMlNnDQCN2kpLi
+KgT7/tAf14ECAwEAAaNWMFQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwHQYDVR0OBBYEFOaTjrYQFlD8GQSM5KnKMYYmBZLWMA8GCSsGAQUFBzAB
+BQQCBQAwDQYJKoZIhvcNAQEEBQADgYEALXOi9zFgWw453UGQvw0HGNh6wemX2Ood
+pKceGDWyWFaQIxTA9dYVSqnhKWa728UklUi0CcRwp3leYHlvubkcSQANmRtM05PS
+kY2a2ENBf9afB/HNvOciFgGoHa494csZZ6ZS2GeKBxBOfajrjZrvQ3XDKptsRT1q
+50LsYyJhSg4=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/01_loader_capabilities_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB7TCCAVagAwIBAgIJANV8hSQH4qoOMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM0WhcNMTYwNjE4MTEzMjM0WjBaMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjE5MDcGA1UEAxQwRW50aXR5IENlcnQgMDFf
+bG9hZGVyX2NhcGFiaWxpdGllcyB1c2VyX2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEB
+BQADSwAwSAJBAK4+9en8OmevaVz3hy1jvf+1Ozq0TVK0JfEXsn3k0XluLKab3Fzr
+3RDaJw26PDp9AWfDeQX3Racrz7ws1HpAkdECAwEAAaMdMBswGQYMKoY6AAHt02sB
+AQEGAQH/BAYDBAcAA4AwDQYJKoZIhvcNAQEFBQADgYEASYYiL5392LhFv+KyyIWF
+zh4cdHc4xrFt9OAjpaEt8NZVFUWq5q9CZaUkuEvO0Syqlpn9hNq9GnENPSnWJCOA
+uh6Pux1qVokoUfZnj7SsYJ4g7p3ZzYeYJPKis8ksfj2qFMVUjEHwg4VCThe0RUdR
+BLsz6tBopaX/VsGM7lvxsYk=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/01_loader_capabilities_user_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB7TCCAVagAwIBAgIJANV8hSQH4qoOMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM0WhcNMTYwNjE4MTEzMjM0WjBaMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjE5MDcGA1UEAxQwRW50aXR5IENlcnQgMDFf
+bG9hZGVyX2NhcGFiaWxpdGllcyB1c2VyX2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEB
+BQADSwAwSAJBAK4+9en8OmevaVz3hy1jvf+1Ozq0TVK0JfEXsn3k0XluLKab3Fzr
+3RDaJw26PDp9AWfDeQX3Racrz7ws1HpAkdECAwEAAaMdMBswGQYMKoY6AAHt02sB
+AQEGAQH/BAYDBAcAA4AwDQYJKoZIhvcNAQEFBQADgYEASYYiL5392LhFv+KyyIWF
+zh4cdHc4xrFt9OAjpaEt8NZVFUWq5q9CZaUkuEvO0Syqlpn9hNq9GnENPSnWJCOA
+uh6Pux1qVokoUfZnj7SsYJ4g7p3ZzYeYJPKis8ksfj2qFMVUjEHwg4VCThe0RUdR
+BLsz6tBopaX/VsGM7lvxsYk=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/02_protected_vid_mismatch_bad_single_vid.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB9zCCAWCgAwIBAgIJANV8hSQH4qoPMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM1WhcNMTYwNjE4MTEzMjM1WjBiMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjFBMD8GA1UEAxQ4RW50aXR5IENlcnQgMDJf
+cHJvdGVjdGVkX3ZpZF9taXNtYXRjaCBiYWRfc2luZ2xlX3ZpZCAwIDAwXDANBgkq
+hkiG9w0BAQEFAANLADBIAkEAmj5oN9Tt4Hj+7tBZFj80xzxiqixOXqxlEucnMhIY
+ylnm751hQfwBKT0II+XYfYKEYFH1v8DK7jPR2/GRifgYoQIDAQABox8wHTAbBgwq
+hjoAAe3TawEBAQUBAf8ECDAGAgTAAcDeMA0GCSqGSIb3DQEBBQUAA4GBADY+8kJC
+9CXnEo4Ro7FQve1Cng+yBdDR3tIBRDFrD+GvRNYF15cW1VrHZsHAKOgLAF2di/iO
+braK7961pI1kb/PuPYQnaPGQVuHNSkG9UVB8TLvJ2cxjkE36h71CjhpsI1rIXocr
+dncOZvCULpLVTeOSyGypMcWW8tOLhLYrnpCO
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/02_protected_vid_mismatch_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB9zCCAWCgAwIBAgIJANV8hSQH4qoPMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM1WhcNMTYwNjE4MTEzMjM1WjBiMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjFBMD8GA1UEAxQ4RW50aXR5IENlcnQgMDJf
+cHJvdGVjdGVkX3ZpZF9taXNtYXRjaCBiYWRfc2luZ2xlX3ZpZCAwIDAwXDANBgkq
+hkiG9w0BAQEFAANLADBIAkEAmj5oN9Tt4Hj+7tBZFj80xzxiqixOXqxlEucnMhIY
+ylnm751hQfwBKT0II+XYfYKEYFH1v8DK7jPR2/GRifgYoQIDAQABox8wHTAbBgwq
+hjoAAe3TawEBAQUBAf8ECDAGAgTAAcDeMA0GCSqGSIb3DQEBBQUAA4GBADY+8kJC
+9CXnEo4Ro7FQve1Cng+yBdDR3tIBRDFrD+GvRNYF15cW1VrHZsHAKOgLAF2di/iO
+braK7961pI1kb/PuPYQnaPGQVuHNSkG9UVB8TLvJ2cxjkE36h71CjhpsI1rIXocr
+dncOZvCULpLVTeOSyGypMcWW8tOLhLYrnpCO
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/03_protected_vid_match_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8TCCAVqgAwIBAgIJANV8hSQH4qoQMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM1WhcNMTYwNjE4MTEzMjM1WjBcMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjE7MDkGA1UEAxQyRW50aXR5IENlcnQgMDNf
+cHJvdGVjdGVkX3ZpZF9tYXRjaCBzaW5nbGVfdmlkMSAwIDAwXDANBgkqhkiG9w0B
+AQEFAANLADBIAkEAyd1OHBbfgdxyguiWPpN951f+zbmLXprYMlTAqjX1A1t4ec1q
+T/yGI8BxFk3u2qUV2wmlKAkYro/at8lyYmtxiQIDAQABox8wHTAbBgwqhjoAAe3T
+awEBAQUBAf8ECDAGAgRwAAABMA0GCSqGSIb3DQEBBQUAA4GBABcJSPTv1vjkn8U6
+wX20kpkwkvR7GFTronC1tSAPFjvOJqIRZ984lnynuYf3kSUFFgX0JtQa+DosEmRT
+CXLNEk3mX0UQlAlgChaupudD0lqGqwQGhZ5cHC4v/9p78sSxoriJ4wyyI1hKY0Qj
+iHMGyyWJhZ5ODLR1BmSTXsPKrOGd
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/03_protected_vid_match_single_vid1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8TCCAVqgAwIBAgIJANV8hSQH4qoQMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM1WhcNMTYwNjE4MTEzMjM1WjBcMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjE7MDkGA1UEAxQyRW50aXR5IENlcnQgMDNf
+cHJvdGVjdGVkX3ZpZF9tYXRjaCBzaW5nbGVfdmlkMSAwIDAwXDANBgkqhkiG9w0B
+AQEFAANLADBIAkEAyd1OHBbfgdxyguiWPpN951f+zbmLXprYMlTAqjX1A1t4ec1q
+T/yGI8BxFk3u2qUV2wmlKAkYro/at8lyYmtxiQIDAQABox8wHTAbBgwqhjoAAe3T
+awEBAQUBAf8ECDAGAgRwAAABMA0GCSqGSIb3DQEBBQUAA4GBABcJSPTv1vjkn8U6
+wX20kpkwkvR7GFTronC1tSAPFjvOJqIRZ984lnynuYf3kSUFFgX0JtQa+DosEmRT
+CXLNEk3mX0UQlAlgChaupudD0lqGqwQGhZ5cHC4v/9p78sSxoriJ4wyyI1hKY0Qj
+iHMGyyWJhZ5ODLR1BmSTXsPKrOGd
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/04_protpuid_constr_sid_mismatch_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB+jCCAWOgAwIBAgIJANV8hSQH4qoRMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM2WhcNMTYwNjE4MTEzMjM2WjBlMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjFEMEIGA1UEAxQ7RW50aXR5IENlcnQgMDRf
+cHJvdHB1aWRfY29uc3RyX3NpZF9taXNtYXRjaCBzaW5nbGVfc2lkMSAwIDAwXDAN
+BgkqhkiG9w0BAQEFAANLADBIAkEA2jikKDgPMVtA9wUDtgFsMr0VOmSSBJCsmABl
+OoZk70N0sfaBIQHWnKq1NYOqCfh38xavY4o4b9Q7tlJUSzZfYwIDAQABox8wHTAb
+BgwqhjoAAe3TawEBAQQBAf8ECDAGAgQRAAAGMA0GCSqGSIb3DQEBBQUAA4GBAHFI
+JcxGIvFCJxaHJxl+GLwdgB9HS2EMH1vMpt3xc7LmO6nzjzq4bkcVSn8OPqcREcHE
+CrgJnAPw7DyxhsHg2DirmS7SH1pgRHXAduWsokeLH/J2FwBYSsEmGOuhpydn9pIE
+7p7OtCvhnFNdU9CvjgOsXyXeCcGgDAmvGOxUZ6ct
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/04_protpuid_constr_sid_mismatch_single_sid1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB+jCCAWOgAwIBAgIJANV8hSQH4qoRMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM2WhcNMTYwNjE4MTEzMjM2WjBlMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjFEMEIGA1UEAxQ7RW50aXR5IENlcnQgMDRf
+cHJvdHB1aWRfY29uc3RyX3NpZF9taXNtYXRjaCBzaW5nbGVfc2lkMSAwIDAwXDAN
+BgkqhkiG9w0BAQEFAANLADBIAkEA2jikKDgPMVtA9wUDtgFsMr0VOmSSBJCsmABl
+OoZk70N0sfaBIQHWnKq1NYOqCfh38xavY4o4b9Q7tlJUSzZfYwIDAQABox8wHTAb
+BgwqhjoAAe3TawEBAQQBAf8ECDAGAgQRAAAGMA0GCSqGSIb3DQEBBQUAA4GBAHFI
+JcxGIvFCJxaHJxl+GLwdgB9HS2EMH1vMpt3xc7LmO6nzjzq4bkcVSn8OPqcREcHE
+CrgJnAPw7DyxhsHg2DirmS7SH1pgRHXAduWsokeLH/J2FwBYSsEmGOuhpydn9pIE
+7p7OtCvhnFNdU9CvjgOsXyXeCcGgDAmvGOxUZ6ct
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/05_protpuid_nonconstr_sid_match_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB2zCCAUSgAwIBAgIJANV8hSQH4qoSMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM2WhcNMTYwNjE4MTEzMjM2WjBnMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjFGMEQGA1UEAxQ9RW50aXR5IENlcnQgMDVf
+cHJvdHB1aWRfbm9uY29uc3RyX3NpZF9tYXRjaCB1bmNvbnN0cmFpbmVkIDAgMDBc
+MA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDKxvo0UiugCu23sg3WNiyxVvfa0fCS0OjM
+ToVAyUgLDDGHPsmvvvNShyWeYZx7vru3pJ9qvq+TLl5xbFjXTB51AgMBAAEwDQYJ
+KoZIhvcNAQEFBQADgYEAJzVBPz5nQIHqpWMudLCUb2EcGzoZyIKbpZJE27KVjK6B
+wUxf4DjvYs9JZJLDV76LA5UttBJAogl7Al5nIhZUXPrHpSY33+7x9wgfSorl57mO
+vqZ9Em2Q2Bysl+ZAsVTA79cyBQQBu6AgC5Mn8QJnKfD4xD+s1NKYKlIHeuv9pTo=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/05_protpuid_nonconstr_sid_match_unconstrained.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB2zCCAUSgAwIBAgIJANV8hSQH4qoSMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM2WhcNMTYwNjE4MTEzMjM2WjBnMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjFGMEQGA1UEAxQ9RW50aXR5IENlcnQgMDVf
+cHJvdHB1aWRfbm9uY29uc3RyX3NpZF9tYXRjaCB1bmNvbnN0cmFpbmVkIDAgMDBc
+MA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDKxvo0UiugCu23sg3WNiyxVvfa0fCS0OjM
+ToVAyUgLDDGHPsmvvvNShyWeYZx7vru3pJ9qvq+TLl5xbFjXTB51AgMBAAEwDQYJ
+KoZIhvcNAQEFBQADgYEAJzVBPz5nQIHqpWMudLCUb2EcGzoZyIKbpZJE27KVjK6B
+wUxf4DjvYs9JZJLDV76LA5UttBJAogl7Al5nIhZUXPrHpSY33+7x9wgfSorl57mO
+vqZ9Em2Q2Bysl+ZAsVTA79cyBQQBu6AgC5Mn8QJnKfD4xD+s1NKYKlIHeuv9pTo=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/06_nonprotpuid_constr_sid_match_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB+jCCAWOgAwIBAgIJANV8hSQH4qoTMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM3WhcNMTYwNjE4MTEzMjM3WjBlMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjFEMEIGA1UEAxQ7RW50aXR5IENlcnQgMDZf
+bm9ucHJvdHB1aWRfY29uc3RyX3NpZF9tYXRjaCBzaW5nbGVfc2lkMSAwIDAwXDAN
+BgkqhkiG9w0BAQEFAANLADBIAkEAxwLkiGdyqICb1CJCasEyeBvBrDNff9rpXxlf
+le+aFdZ+OHoYNefwEJJOGArQi2fD4VNZj5gFtI8BhqA/7lBzMQIDAQABox8wHTAb
+BgwqhjoAAe3TawEBAQQBAf8ECDAGAgQRAAAGMA0GCSqGSIb3DQEBBQUAA4GBAB4J
+12vgbt1ZnkNr/vTDK8J8P1nSkn+EccNgMUGdOiAwBSo7b+NSE244BonOzyfvTtJn
+7Wa35mamp3P6ZFWq13BUp2Z05zlKYXco6zdd0ovIT26HUZALZ5JHvSVoX3H+7x83
+K+Eh/yfwiGMkB7APSnQsiyFOzUhjTZGAc6hrkvzU
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/06_nonprotpuid_constr_sid_match_single_sid1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB+jCCAWOgAwIBAgIJANV8hSQH4qoTMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjM3WhcNMTYwNjE4MTEzMjM3WjBlMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjFEMEIGA1UEAxQ7RW50aXR5IENlcnQgMDZf
+bm9ucHJvdHB1aWRfY29uc3RyX3NpZF9tYXRjaCBzaW5nbGVfc2lkMSAwIDAwXDAN
+BgkqhkiG9w0BAQEFAANLADBIAkEAxwLkiGdyqICb1CJCasEyeBvBrDNff9rpXxlf
+le+aFdZ+OHoYNefwEJJOGArQi2fD4VNZj5gFtI8BhqA/7lBzMQIDAQABox8wHTAb
+BgwqhjoAAe3TawEBAQQBAf8ECDAGAgQRAAAGMA0GCSqGSIb3DQEBBQUAA4GBAB4J
+12vgbt1ZnkNr/vTDK8J8P1nSkn+EccNgMUGdOiAwBSo7b+NSE244BonOzyfvTtJn
+7Wa35mamp3P6ZFWq13BUp2Z05zlKYXco6zdd0ovIT26HUZALZ5JHvSVoX3H+7x83
+K+Eh/yfwiGMkB7APSnQsiyFOzUhjTZGAc6hrkvzU
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_01_bad_single_dev.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB0DCCAXqgAwIBAgIJANfobSsbdLRrMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTEwLwYDVQQDFChFbnRpdHkgQ2VydCBh
+Z2dyZWdhdGVfMDEgc2luZ2xlX2RldjEgMCAwMB4XDTA2MDYyMTEzNDEwN1oXDTE2
+MDYxODEzNDEwN1owVTELMAkGA1UEBhMCVUsxEDAOBgNVBAoTB1N5bWJpYW4xNDAy
+BgNVBAMUK0VudGl0eSBDZXJ0IGFnZ3JlZ2F0ZV8wMSBiYWRfc2luZ2xlX2RldiAw
+IDEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAxFiIFAlht/O7pZzn/3ykIVKGkONC
+2Jmw+tno6lqhVY2gZxN2GE0ziBAoY3qEUzegPaYRM+0f/cx/qUv36ZbTBQIDAQAB
+ozAwLjAsBgwqhjoAAe3TawEBAQEBAf8EGTAXDBVUSElTIFNIT1VMRCBOT1QgTUFU
+Q0gwDQYJKoZIhvcNAQEFBQADQQBYHtXOqsq9o6v2ZK2r0MCdrfSKqb1XB8GOWama
+ea+SEWoEW2n9mz5X5Lw4SSETF855xpxdz6URlQg2fm8DymD2
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_01_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIB0DCCAXqgAwIBAgIJANfobSsbdLRrMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTEwLwYDVQQDFChFbnRpdHkgQ2VydCBh
+Z2dyZWdhdGVfMDEgc2luZ2xlX2RldjEgMCAwMB4XDTA2MDYyMTEzNDEwN1oXDTE2
+MDYxODEzNDEwN1owVTELMAkGA1UEBhMCVUsxEDAOBgNVBAoTB1N5bWJpYW4xNDAy
+BgNVBAMUK0VudGl0eSBDZXJ0IGFnZ3JlZ2F0ZV8wMSBiYWRfc2luZ2xlX2RldiAw
+IDEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAxFiIFAlht/O7pZzn/3ykIVKGkONC
+2Jmw+tno6lqhVY2gZxN2GE0ziBAoY3qEUzegPaYRM+0f/cx/qUv36ZbTBQIDAQAB
+ozAwLjAsBgwqhjoAAe3TawEBAQEBAf8EGTAXDBVUSElTIFNIT1VMRCBOT1QgTUFU
+Q0gwDQYJKoZIhvcNAQEFBQADQQBYHtXOqsq9o6v2ZK2r0MCdrfSKqb1XB8GOWama
+ea+SEWoEW2n9mz5X5Lw4SSETF855xpxdz6URlQg2fm8DymD2
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICOjCCAaOgAwIBAgIJANV8hSQH4qocMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTM0MTA3WhcNMTYwNjE4MTM0MTA3WjBSMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjExMC8GA1UEAxQoRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzAxIHNpbmdsZV9kZXYxIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC
+QQCdZ75JbU5ZfbwO7ihm1yrbaDx3SiLl83UHtpL+hdtkMK1pnRFmAwSuKRyuju4+
+WnmwCZoxHVy6lJK89F9xSKbhAgMBAAGjcjBwMCsGDCqGOgAB7dNrAQEBAQEB/wQY
+MBYMFDExMTExMTExLTIyMjIyMi0zLTAxMB0GA1UdDgQWBBSfwKfSvQkzPaiX0JfF
+TAX8TOyzzDASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDANBgkq
+hkiG9w0BAQUFAAOBgQB5rZ+k4/xrz7dG0/iY4719Bs3Sx2BFOrPLVyWTs+K8em46
+vGQPJ6pRJO74rKTaw18CCdlbDcu5RrKeGmf2Das3LNNwijoX99uVpA38Sl9kIvx1
+cQ8B+yH0Ff/OqHTE1k6ZvXiUm5EdEzbUqxaUQXKLVyXw57ShPjjrsvUDL72RGQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_01_single_dev1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICOjCCAaOgAwIBAgIJANV8hSQH4qocMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTM0MTA3WhcNMTYwNjE4MTM0MTA3WjBSMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjExMC8GA1UEAxQoRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzAxIHNpbmdsZV9kZXYxIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC
+QQCdZ75JbU5ZfbwO7ihm1yrbaDx3SiLl83UHtpL+hdtkMK1pnRFmAwSuKRyuju4+
+WnmwCZoxHVy6lJK89F9xSKbhAgMBAAGjcjBwMCsGDCqGOgAB7dNrAQEBAQEB/wQY
+MBYMFDExMTExMTExLTIyMjIyMi0zLTAxMB0GA1UdDgQWBBSfwKfSvQkzPaiX0JfF
+TAX8TOyzzDASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDANBgkq
+hkiG9w0BAQUFAAOBgQB5rZ+k4/xrz7dG0/iY4719Bs3Sx2BFOrPLVyWTs+K8em46
+vGQPJ6pRJO74rKTaw18CCdlbDcu5RrKeGmf2Das3LNNwijoX99uVpA38Sl9kIvx1
+cQ8B+yH0Ff/OqHTE1k6ZvXiUm5EdEzbUqxaUQXKLVyXw57ShPjjrsvUDL72RGQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_02_bad_single_sid.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBvTCCAWegAwIBAgIJAI17gxS+td6TMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTEwLwYDVQQDFChFbnRpdHkgQ2VydCBh
+Z2dyZWdhdGVfMDIgc2luZ2xlX3NpZDEgMCAwMB4XDTA2MDYyMTExMzIwN1oXDTE2
+MDYxODExMzIwN1owVTELMAkGA1UEBhMCVUsxEDAOBgNVBAoTB1N5bWJpYW4xNDAy
+BgNVBAMUK0VudGl0eSBDZXJ0IGFnZ3JlZ2F0ZV8wMiBiYWRfc2luZ2xlX3NpZCAw
+IDEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAz+B/32vEKFQJQLJTgWXcMAuXyNt9
+FFJR+TIe8W0HUGPYuFljJmOwY3ujv2N8jH9SgznRm2H04klFK5gw0uHTvQIDAQAB
+ox0wGzAZBgwqhjoAAe3TawEBAQQBAf8EBjAEAgLA3jANBgkqhkiG9w0BAQUFAANB
+ACSiaXI4dqPvGtB4nKEyyjIUyIdzDeKgJrKg2Pj5SNUP1B87CTAyprKeN/dXReTw
+fYTFHA+dwQvnvf1brLOw7yU=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_02_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIBvTCCAWegAwIBAgIJAI17gxS+td6TMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTEwLwYDVQQDFChFbnRpdHkgQ2VydCBh
+Z2dyZWdhdGVfMDIgc2luZ2xlX3NpZDEgMCAwMB4XDTA2MDYyMTExMzIwN1oXDTE2
+MDYxODExMzIwN1owVTELMAkGA1UEBhMCVUsxEDAOBgNVBAoTB1N5bWJpYW4xNDAy
+BgNVBAMUK0VudGl0eSBDZXJ0IGFnZ3JlZ2F0ZV8wMiBiYWRfc2luZ2xlX3NpZCAw
+IDEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAz+B/32vEKFQJQLJTgWXcMAuXyNt9
+FFJR+TIe8W0HUGPYuFljJmOwY3ujv2N8jH9SgznRm2H04klFK5gw0uHTvQIDAQAB
+ox0wGzAZBgwqhjoAAe3TawEBAQQBAf8EBjAEAgLA3jANBgkqhkiG9w0BAQUFAANB
+ACSiaXI4dqPvGtB4nKEyyjIUyIdzDeKgJrKg2Pj5SNUP1B87CTAyprKeN/dXReTw
+fYTFHA+dwQvnvf1brLOw7yU=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICKjCCAZOgAwIBAgIJANV8hSQH4qnlMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjA2WhcNMTYwNjE4MTEzMjA2WjBSMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjExMC8GA1UEAxQoRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzAyIHNpbmdsZV9zaWQxIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC
+QQDIGWIRGZYlM9x94YE5ZD8F2jcwcNtf9Q8ONcQNdan4rr/1KofPBqA9iTVz57Ei
+lfrK4TzjFjBEZgJOvEKGUccTAgMBAAGjYjBgMBsGDCqGOgAB7dNrAQEBBAEB/wQI
+MAYCBBEAAAYwHQYDVR0OBBYEFD2OXFGPUO2BFyrICAJjwbTF8xEOMBIGA1UdEwEB
+/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBABg3
+T/7YcfOb8FHpX36j0itg86t6RTDa9yZt/XLFWF9HbcEEAqdGHoPjUpkKCfKvwzKv
+VuzOILikQlzsgXKvLHKw9PYaD7pccK5mWLOvEmxmDte/LZk680QmLW4ePeficxY3
+XpuBA6FUog54KSNGODjP0bTl/rn4iY/0EBowYoS5
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_02_single_sid1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICKjCCAZOgAwIBAgIJANV8hSQH4qnlMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjA2WhcNMTYwNjE4MTEzMjA2WjBSMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjExMC8GA1UEAxQoRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzAyIHNpbmdsZV9zaWQxIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC
+QQDIGWIRGZYlM9x94YE5ZD8F2jcwcNtf9Q8ONcQNdan4rr/1KofPBqA9iTVz57Ei
+lfrK4TzjFjBEZgJOvEKGUccTAgMBAAGjYjBgMBsGDCqGOgAB7dNrAQEBBAEB/wQI
+MAYCBBEAAAYwHQYDVR0OBBYEFD2OXFGPUO2BFyrICAJjwbTF8xEOMBIGA1UdEwEB
+/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBABg3
+T/7YcfOb8FHpX36j0itg86t6RTDa9yZt/XLFWF9HbcEEAqdGHoPjUpkKCfKvwzKv
+VuzOILikQlzsgXKvLHKw9PYaD7pccK5mWLOvEmxmDte/LZk680QmLW4ePeficxY3
+XpuBA6FUog54KSNGODjP0bTl/rn4iY/0EBowYoS5
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_03_bad_single_vid.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBvzCCAWmgAwIBAgIJALtz4cu15GDPMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTEwLwYDVQQDFChFbnRpdHkgQ2VydCBh
+Z2dyZWdhdGVfMDMgc2luZ2xlX3ZpZDEgMCAwMB4XDTA2MDYyMTExMzIwOFoXDTE2
+MDYxODExMzIwOFowVTELMAkGA1UEBhMCVUsxEDAOBgNVBAoTB1N5bWJpYW4xNDAy
+BgNVBAMUK0VudGl0eSBDZXJ0IGFnZ3JlZ2F0ZV8wMyBiYWRfc2luZ2xlX3ZpZCAw
+IDEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAry0DToyeQPVsGZoJlw0G3VJ0coVx
+aLxKmPxRtAfptL/PxDKYrPCaEQD5sL1JO/fUIUmC2odwY3oCdqxEH47cVQIDAQAB
+ox8wHTAbBgwqhjoAAe3TawEBAQUBAf8ECDAGAgTAAcDeMA0GCSqGSIb3DQEBBQUA
+A0EAw/XgIyP/n7PtJcGSRnezGRcBagtoag7ZaZyZ6FnZSK09SgWrow1s36rtF3Bf
+3iauz7ZcwX6RK2/N/S8HWvKXkw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_03_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIBvzCCAWmgAwIBAgIJALtz4cu15GDPMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTEwLwYDVQQDFChFbnRpdHkgQ2VydCBh
+Z2dyZWdhdGVfMDMgc2luZ2xlX3ZpZDEgMCAwMB4XDTA2MDYyMTExMzIwOFoXDTE2
+MDYxODExMzIwOFowVTELMAkGA1UEBhMCVUsxEDAOBgNVBAoTB1N5bWJpYW4xNDAy
+BgNVBAMUK0VudGl0eSBDZXJ0IGFnZ3JlZ2F0ZV8wMyBiYWRfc2luZ2xlX3ZpZCAw
+IDEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAry0DToyeQPVsGZoJlw0G3VJ0coVx
+aLxKmPxRtAfptL/PxDKYrPCaEQD5sL1JO/fUIUmC2odwY3oCdqxEH47cVQIDAQAB
+ox8wHTAbBgwqhjoAAe3TawEBAQUBAf8ECDAGAgTAAcDeMA0GCSqGSIb3DQEBBQUA
+A0EAw/XgIyP/n7PtJcGSRnezGRcBagtoag7ZaZyZ6FnZSK09SgWrow1s36rtF3Bf
+3iauz7ZcwX6RK2/N/S8HWvKXkw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICKjCCAZOgAwIBAgIJANV8hSQH4qnmMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjA3WhcNMTYwNjE4MTEzMjA3WjBSMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjExMC8GA1UEAxQoRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzAzIHNpbmdsZV92aWQxIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC
+QQDUui5MSZ0zdguKeBiYStLBhv8yjB8rjnWP4Gy36vYqgGS+xGMw4F8f65C5jFrT
+rIanflAS7IbQRWlrsHPOJJEBAgMBAAGjYjBgMBsGDCqGOgAB7dNrAQEBBQEB/wQI
+MAYCBHAAAAEwHQYDVR0OBBYEFAvBCLk4/+Bzc27JZ61zX610FkeyMBIGA1UdEwEB
+/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBAIYW
+RCzMUxS3TVTVG2SGQX9AcSXJiaZvCzV6G6gkSIJueNvV4X8vvVcdG/QipjTH955A
+eXwumhz3IBE1FxNzIps0R9b6thBdY9oxHOCEYa0gyfdADwg8u58waF+Vy1KSNF35
+0Pe1CAV3NIyK4T5SGBEKCNJcdVK3JoQfad0PXhTW
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_03_single_vid1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICKjCCAZOgAwIBAgIJANV8hSQH4qnmMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjA3WhcNMTYwNjE4MTEzMjA3WjBSMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjExMC8GA1UEAxQoRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzAzIHNpbmdsZV92aWQxIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC
+QQDUui5MSZ0zdguKeBiYStLBhv8yjB8rjnWP4Gy36vYqgGS+xGMw4F8f65C5jFrT
+rIanflAS7IbQRWlrsHPOJJEBAgMBAAGjYjBgMBsGDCqGOgAB7dNrAQEBBQEB/wQI
+MAYCBHAAAAEwHQYDVR0OBBYEFAvBCLk4/+Bzc27JZ61zX610FkeyMBIGA1UdEwEB
+/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBAIYW
+RCzMUxS3TVTVG2SGQX9AcSXJiaZvCzV6G6gkSIJueNvV4X8vvVcdG/QipjTH955A
+eXwumhz3IBE1FxNzIps0R9b6thBdY9oxHOCEYa0gyfdADwg8u58waF+Vy1KSNF35
+0Pe1CAV3NIyK4T5SGBEKCNJcdVK3JoQfad0PXhTW
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_04_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIBszCCAV2gAwIBAgIJAIyumWEA0fDYMA0GCSqGSIb3DQEBBQUAMFAxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS8wLQYDVQQDFCZFbnRpdHkgQ2VydCBh
+Z2dyZWdhdGVfMDQgdXNlcl9jYXBzIDAgMDAeFw0wNjA2MjExMTMyMDlaFw0xNjA2
+MTgxMTMyMDlaMFExCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTAwLgYD
+VQQDFCdFbnRpdHkgQ2VydCBhZ2dyZWdhdGVfMDQgZW1wdHlfY2FwcyAwIDEwXDAN
+BgkqhkiG9w0BAQEFAANLADBIAkEAr5Jmz6iuvU+9PWn0VZjALTEgXrm78/CacmnK
+MOWoAXBzzVsP/mVuuKknGCx2anctPSAlyPrxWblJShaby5OEVwIDAQABoxkwFzAV
+BgwqhjoAAe3TawEBAQYBAf8EAgMAMA0GCSqGSIb3DQEBBQUAA0EARvAUlT/OQgUy
+tMYG00GAWiS9z4+42R2YLDNtWSRs5eqosTKOPnnOE4o3n6LT1U5ghY3IS16Q5hRE
+2E2hzGibLA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICJjCCAY+gAwIBAgIJANV8hSQH4qnnMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjA4WhcNMTYwNjE4MTEzMjA4WjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA0IHVzZXJfY2FwcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+rHSljz/n6OWivQ2wjM3Q7fFdL6+DpCTERQ9AprpCIW3NegSJMWpm4Otdl+IcpOAY
+5TStCg+m53lxOI+5OODcUQIDAQABo2AwXjAZBgwqhjoAAe3TawEBAQYBAf8EBgME
+BwADgDAdBgNVHQ4EFgQU4FV9sc7+/eg/4xdvadGutoARYL4wEgYDVR0TAQH/BAgw
+BgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQEFBQADgYEATQmQLXSV
+ytWtW1ZlohG8A1qC9zzXjfP5fyvJWhvpqaVRphMzyAXDfwPRHbadXevNiNFI40dE
+PLAFGt3mfEcZW2c31kh0vvYSw+UC7x6uhJYSuzvnZ0/u34OLv14fw5VXsMF8o5oc
+rVfUmjQvsIohmv0u9sJ+IWHk75zH5GZ+cRE=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_04_empty_caps.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBszCCAV2gAwIBAgIJAIyumWEA0fDYMA0GCSqGSIb3DQEBBQUAMFAxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS8wLQYDVQQDFCZFbnRpdHkgQ2VydCBh
+Z2dyZWdhdGVfMDQgdXNlcl9jYXBzIDAgMDAeFw0wNjA2MjExMTMyMDlaFw0xNjA2
+MTgxMTMyMDlaMFExCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTAwLgYD
+VQQDFCdFbnRpdHkgQ2VydCBhZ2dyZWdhdGVfMDQgZW1wdHlfY2FwcyAwIDEwXDAN
+BgkqhkiG9w0BAQEFAANLADBIAkEAr5Jmz6iuvU+9PWn0VZjALTEgXrm78/CacmnK
+MOWoAXBzzVsP/mVuuKknGCx2anctPSAlyPrxWblJShaby5OEVwIDAQABoxkwFzAV
+BgwqhjoAAe3TawEBAQYBAf8EAgMAMA0GCSqGSIb3DQEBBQUAA0EARvAUlT/OQgUy
+tMYG00GAWiS9z4+42R2YLDNtWSRs5eqosTKOPnnOE4o3n6LT1U5ghY3IS16Q5hRE
+2E2hzGibLA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_04_user_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICJjCCAY+gAwIBAgIJANV8hSQH4qnnMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjA4WhcNMTYwNjE4MTEzMjA4WjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA0IHVzZXJfY2FwcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+rHSljz/n6OWivQ2wjM3Q7fFdL6+DpCTERQ9AprpCIW3NegSJMWpm4Otdl+IcpOAY
+5TStCg+m53lxOI+5OODcUQIDAQABo2AwXjAZBgwqhjoAAe3TawEBAQYBAf8EBgME
+BwADgDAdBgNVHQ4EFgQU4FV9sc7+/eg/4xdvadGutoARYL4wEgYDVR0TAQH/BAgw
+BgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQEFBQADgYEATQmQLXSV
+ytWtW1ZlohG8A1qC9zzXjfP5fyvJWhvpqaVRphMzyAXDfwPRHbadXevNiNFI40dE
+PLAFGt3mfEcZW2c31kh0vvYSw+UC7x6uhJYSuzvnZ0/u34OLv14fw5VXsMF8o5oc
+rVfUmjQvsIohmv0u9sJ+IWHk75zH5GZ+cRE=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_05_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICqjCCAhOgAwIBAgIJANV8hSQH4qotMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTYxMTEzWhcNMTYwNjE4MTYxMTEzWjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA1IG11bHRpX2RldiAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+y07XoQAL516+GeqWvU5wC46ON3MxxnJFkd6z0lUGI9jtt1PrfEpvqdK19RYJalQR
+Rit5vc4IT7vHC1DbUQSAuQIDAQABo4HjMIHgMIHdBgwqhjoAAe3TawEBAQEBAf8E
+gckwgcYMFDExMTExMTExLTIyMjIyMi0zLTAxDBQxMTExMTExMS0yMjIyMjItMy0w
+MgwUMTExMTExMTEtMjIyMjIyLTMtMDMMFDExMTExMTExLTIyMjIyMi0zLTA0DBQx
+MTExMTExMS0yMjIyMjItMy0wNQwUMTExMTExMTEtMjIyMjIyLTMtMDYMFDExMTEx
+MTExLTIyMjIyMi0zLTA3DBQxMTExMTExMS0yMjIyMjItMy0wOAwUMTExMTExMTEt
+MjIyMjIyLTMtMDkwDQYJKoZIhvcNAQEFBQADgYEAlgDT/CNAyEXgYA8AY3SDkc8M
+AMkiu4Uu+I29X+p9jVpXjRg7r+atBHbitshtfLlLO0nbBI+TrgwIxb/czMls7JmB
+viNg/pj/XxcorXk7P8ypolp9WEM2DOt8TeJZzDwQAzkAZwBfYN0TeOErSXjdrIBy
+08mujTz3IX1daUVdFFM=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_05_chain_1.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4DCCAUmgAwIBAgIJANV8hSQH4qouMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTYxMTEzWhcNMTYwNjE4MTYxMTEzWjBRMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEwMC4GA1UEAxQnRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA1IGVtcHR5X2RldnMgMSAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB
+AKQJPojzdKUv0VqrnmMFmYGUA8JCsGBam+QYWwkFJaGjjSA4fGq6GasXKMDsGq/g
+fQQSnPSsDykWDtSkat6OJLMCAwEAAaMZMBcwFQYMKoY6AAHt02sBAQEBAQH/BAIw
+ADANBgkqhkiG9w0BAQUFAAOBgQB55EGEYRQjqy7fYlyY/0V7g+2GmBkW6VG9WMiH
+AshLniV91Ydumund2NHDXpkXF1PvSyJOYrc5wSkJunLWjrnO1ThVWlcFFr6gtz3Q
+MXjTZk0a6iyE+GwTxbafcqAI9s1Z91sNAmvei/D7OgdWc6xERqezgqUjsJn8ColB
+QNTQ0w==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_05_empty_devs.1.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4DCCAUmgAwIBAgIJANV8hSQH4qouMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTYxMTEzWhcNMTYwNjE4MTYxMTEzWjBRMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEwMC4GA1UEAxQnRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA1IGVtcHR5X2RldnMgMSAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB
+AKQJPojzdKUv0VqrnmMFmYGUA8JCsGBam+QYWwkFJaGjjSA4fGq6GasXKMDsGq/g
+fQQSnPSsDykWDtSkat6OJLMCAwEAAaMZMBcwFQYMKoY6AAHt02sBAQEBAQH/BAIw
+ADANBgkqhkiG9w0BAQUFAAOBgQB55EGEYRQjqy7fYlyY/0V7g+2GmBkW6VG9WMiH
+AshLniV91Ydumund2NHDXpkXF1PvSyJOYrc5wSkJunLWjrnO1ThVWlcFFr6gtz3Q
+MXjTZk0a6iyE+GwTxbafcqAI9s1Z91sNAmvei/D7OgdWc6xERqezgqUjsJn8ColB
+QNTQ0w==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_05_multi_dev.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICqjCCAhOgAwIBAgIJANV8hSQH4qotMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTYxMTEzWhcNMTYwNjE4MTYxMTEzWjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA1IG11bHRpX2RldiAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+y07XoQAL516+GeqWvU5wC46ON3MxxnJFkd6z0lUGI9jtt1PrfEpvqdK19RYJalQR
+Rit5vc4IT7vHC1DbUQSAuQIDAQABo4HjMIHgMIHdBgwqhjoAAe3TawEBAQEBAf8E
+gckwgcYMFDExMTExMTExLTIyMjIyMi0zLTAxDBQxMTExMTExMS0yMjIyMjItMy0w
+MgwUMTExMTExMTEtMjIyMjIyLTMtMDMMFDExMTExMTExLTIyMjIyMi0zLTA0DBQx
+MTExMTExMS0yMjIyMjItMy0wNQwUMTExMTExMTEtMjIyMjIyLTMtMDYMFDExMTEx
+MTExLTIyMjIyMi0zLTA3DBQxMTExMTExMS0yMjIyMjItMy0wOAwUMTExMTExMTEt
+MjIyMjIyLTMtMDkwDQYJKoZIhvcNAQEFBQADgYEAlgDT/CNAyEXgYA8AY3SDkc8M
+AMkiu4Uu+I29X+p9jVpXjRg7r+atBHbitshtfLlLO0nbBI+TrgwIxb/czMls7JmB
+viNg/pj/XxcorXk7P8ypolp9WEM2DOt8TeJZzDwQAzkAZwBfYN0TeOErSXjdrIBy
+08mujTz3IX1daUVdFFM=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_06_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICFTCCAX6gAwIBAgIJANV8hSQH4qnqMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjEwWhcNMTYwNjE4MTEzMjEwWjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA2IG11bHRpX3NpZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+1mCG/O/PA3s9vuOx5VlrSTk4tMqDWULafBoz7suY55Z/RgqzVdjha7DBK9/PBbMX
+5WEGXEL7ifhwZnZNWFS11QIDAQABo08wTTBLBgwqhjoAAe3TawEBAQQBAf8EODA2
+AgQRAAABAgQRAAACAgQRAAADAgQRAAAEAgQRAAAFAgQRAAAGAgQRAAAHAgQRAAAI
+AgQRAAAJMA0GCSqGSIb3DQEBBQUAA4GBAFbv1mH6WGasb76hq4gldaoanALKo7Fi
+my4ksVJnbCeyP3nt7ZaEOy0GyulL9P7YOpjuAdCyhcFiRKV7L2mdZaK4tN0rzNve
+0QsGo+Rl7ou0A55FjW2833Q0FeHMh6ALxUWCnHddu0tsBGoo8MQ4dA0QaoCmSR7Q
+HuTSL7tHcxDx
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_06_chain_1.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4DCCAUmgAwIBAgIJANV8hSQH4qnrMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjExWhcNMTYwNjE4MTEzMjExWjBRMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEwMC4GA1UEAxQnRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA2IGVtcHR5X3NpZHMgMSAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB
+AMWbzWc7xK0JVNaaqUFrVEeNqv26zftxKdO5Tmww2m5fObWWcgIE21pSQt20czxB
+Jz33HEYY8IERW2QaRUQPz28CAwEAAaMZMBcwFQYMKoY6AAHt02sBAQEEAQH/BAIw
+ADANBgkqhkiG9w0BAQUFAAOBgQBgDdvj8nfW2uXvZSRX3AmNhvPPfaqUBVUncn9v
+uXfodiNObFmKb7VusbP6SHWYI9CE3497+BVkv4MoyyexI0Z5v++mAPYxJvnlqm68
+dNgRkinQPREWvVmrcc74wt26pfSebsjcDCw9yds5UJSVFhGZes6ViX1duPD13GA3
+A026fw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_06_empty_sids.1.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4DCCAUmgAwIBAgIJANV8hSQH4qnrMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjExWhcNMTYwNjE4MTEzMjExWjBRMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEwMC4GA1UEAxQnRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA2IGVtcHR5X3NpZHMgMSAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB
+AMWbzWc7xK0JVNaaqUFrVEeNqv26zftxKdO5Tmww2m5fObWWcgIE21pSQt20czxB
+Jz33HEYY8IERW2QaRUQPz28CAwEAAaMZMBcwFQYMKoY6AAHt02sBAQEEAQH/BAIw
+ADANBgkqhkiG9w0BAQUFAAOBgQBgDdvj8nfW2uXvZSRX3AmNhvPPfaqUBVUncn9v
+uXfodiNObFmKb7VusbP6SHWYI9CE3497+BVkv4MoyyexI0Z5v++mAPYxJvnlqm68
+dNgRkinQPREWvVmrcc74wt26pfSebsjcDCw9yds5UJSVFhGZes6ViX1duPD13GA3
+A026fw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_06_multi_sid.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICFTCCAX6gAwIBAgIJANV8hSQH4qnqMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjEwWhcNMTYwNjE4MTEzMjEwWjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA2IG11bHRpX3NpZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+1mCG/O/PA3s9vuOx5VlrSTk4tMqDWULafBoz7suY55Z/RgqzVdjha7DBK9/PBbMX
+5WEGXEL7ifhwZnZNWFS11QIDAQABo08wTTBLBgwqhjoAAe3TawEBAQQBAf8EODA2
+AgQRAAABAgQRAAACAgQRAAADAgQRAAAEAgQRAAAFAgQRAAAGAgQRAAAHAgQRAAAI
+AgQRAAAJMA0GCSqGSIb3DQEBBQUAA4GBAFbv1mH6WGasb76hq4gldaoanALKo7Fi
+my4ksVJnbCeyP3nt7ZaEOy0GyulL9P7YOpjuAdCyhcFiRKV7L2mdZaK4tN0rzNve
+0QsGo+Rl7ou0A55FjW2833Q0FeHMh6ALxUWCnHddu0tsBGoo8MQ4dA0QaoCmSR7Q
+HuTSL7tHcxDx
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_07_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICFTCCAX6gAwIBAgIJANV8hSQH4qnsMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjExWhcNMTYwNjE4MTEzMjExWjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA3IG11bHRpX3ZpZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+1GK6Hg5qVN9vtQeYDug0CBrc5HAsmrQwBdeMCUqJqaYg9wKjrYdCGm8XE7kWHF7j
+fNLEYu/5pO69f4GN0u6LPQIDAQABo08wTTBLBgwqhjoAAe3TawEBAQUBAf8EODA2
+AgRwAAABAgRwAAACAgRwAAADAgRwAAAEAgRwAAAFAgRwAAAGAgRwAAAHAgRwAAAI
+AgRwAAAJMA0GCSqGSIb3DQEBBQUAA4GBAGCvBueVTjDtH5vs/20opddTwTZVEiC+
+nVa81CAB7ZKFj3jrSG2Gx+A/aOejHxmRe7ZsHYujPpSQMjEizz659bfUM9PZM/zg
+Xor5fW7/GWnQaCtyF/6v5EY+EMYa/ChwXZfIn/6so0ROxRhuvOYIYHsQIVc7z54F
+QyTu7Q5zXfmF
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_07_chain_1.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4DCCAUmgAwIBAgIJANV8hSQH4qntMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjEyWhcNMTYwNjE4MTEzMjEyWjBRMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEwMC4GA1UEAxQnRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA3IGVtcHR5X3ZpZHMgMSAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB
+AM+1W2jZKKDWmZ3NYuK4xn3nqIJ9sc4MvO/vMY7nJeKgxD4hlF3xCnD4Zrzf1NWZ
+V7SN+WehTk0HcFMqgRwxNL0CAwEAAaMZMBcwFQYMKoY6AAHt02sBAQEFAQH/BAIw
+ADANBgkqhkiG9w0BAQUFAAOBgQBNi0ua3i/WjYZ05torzPHLF9v02trkdvvpBAZD
+WTIXN5zcozlva3eCoXCQjRlN0mnxj7R9vsKZ2bzzlRc4SDmlYGo8DT835hLN+PDD
+AGnQU5WrODLTJzntyJ4faYjpcnHqtTS/34OLUHvF2pdIzkmSc57SEMZLFTl8eDyb
+fpnVaQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_07_empty_vids.1.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4DCCAUmgAwIBAgIJANV8hSQH4qntMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjEyWhcNMTYwNjE4MTEzMjEyWjBRMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEwMC4GA1UEAxQnRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA3IGVtcHR5X3ZpZHMgMSAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB
+AM+1W2jZKKDWmZ3NYuK4xn3nqIJ9sc4MvO/vMY7nJeKgxD4hlF3xCnD4Zrzf1NWZ
+V7SN+WehTk0HcFMqgRwxNL0CAwEAAaMZMBcwFQYMKoY6AAHt02sBAQEFAQH/BAIw
+ADANBgkqhkiG9w0BAQUFAAOBgQBNi0ua3i/WjYZ05torzPHLF9v02trkdvvpBAZD
+WTIXN5zcozlva3eCoXCQjRlN0mnxj7R9vsKZ2bzzlRc4SDmlYGo8DT835hLN+PDD
+AGnQU5WrODLTJzntyJ4faYjpcnHqtTS/34OLUHvF2pdIzkmSc57SEMZLFTl8eDyb
+fpnVaQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_07_multi_vid.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICFTCCAX6gAwIBAgIJANV8hSQH4qnsMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjExWhcNMTYwNjE4MTEzMjExWjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA3IG11bHRpX3ZpZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+1GK6Hg5qVN9vtQeYDug0CBrc5HAsmrQwBdeMCUqJqaYg9wKjrYdCGm8XE7kWHF7j
+fNLEYu/5pO69f4GN0u6LPQIDAQABo08wTTBLBgwqhjoAAe3TawEBAQUBAf8EODA2
+AgRwAAABAgRwAAACAgRwAAADAgRwAAAEAgRwAAAFAgRwAAAGAgRwAAAHAgRwAAAI
+AgRwAAAJMA0GCSqGSIb3DQEBBQUAA4GBAGCvBueVTjDtH5vs/20opddTwTZVEiC+
+nVa81CAB7ZKFj3jrSG2Gx+A/aOejHxmRe7ZsHYujPpSQMjEizz659bfUM9PZM/zg
+Xor5fW7/GWnQaCtyF/6v5EY+EMYa/ChwXZfIn/6so0ROxRhuvOYIYHsQIVc7z54F
+QyTu7Q5zXfmF
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_08_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qnuMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjEyWhcNMTYwNjE4MTEzMjEyWjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA4IHVzZXJfY2FwcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+2l+XJvCJCPBm5ltZXGaJ6w7evHSqORF83ZoBK3XE46Wp7ct+2Oc5Vsi+pIS1yT4u
+MVjZO5BRKq9gfe7PH0+3swIDAQABox0wGzAZBgwqhjoAAe3TawEBAQYBAf8EBgME
+BwADgDANBgkqhkiG9w0BAQUFAAOBgQAxYpLamPPrH69W8HV69iorzIN2qoDf/dFg
+OC9Nr2PZqq79YsZPwZgYz4KIPfqfZHgMSJUAVEzqHOgqalWKmtdCRdzISYS1BylB
+3pne0iV5cep/hpaP7njJdg5BL1NVlyEmXIREEIP9lo9uXjpIVBGnn/BpBHDnuURN
+zueyDiEOAw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_08_chain_1.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qnvMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjEzWhcNMTYwNjE4MTEzMjEzWjBSMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjExMC8GA1UEAxQoRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA4IHN5c3RlbV9jYXBzIDEgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC
+QQCV9OlM2eCbE8DJA/wioIqup7C6rPAnoqRyTy5MVtfRVdQfjBQmqMM+6K54eLbz
+zSRBb4dMyehLe74IbrLgJUr5AgMBAAGjGzAZMBcGDCqGOgAB7dNrAQEBBgEB/wQE
+AwICDDANBgkqhkiG9w0BAQUFAAOBgQAyMMq1/tEaTbBIwHXJfWO96df+aTcxE/P9
+QZGVQyh0ai6MOxXOhK4d6nNai+hbdekqzMpGnhHWhugHC7AaUI9o0B8oiGpqSnaN
+9nrfFNeXi6ss6EKemiNkGNCdm9Xh7EwpFbZ0iOJZMVl5wFvYABQBTRXK0L0jC+WJ
+sGr+yi9/wQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_08_system_caps.1.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qnvMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjEzWhcNMTYwNjE4MTEzMjEzWjBSMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjExMC8GA1UEAxQoRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA4IHN5c3RlbV9jYXBzIDEgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC
+QQCV9OlM2eCbE8DJA/wioIqup7C6rPAnoqRyTy5MVtfRVdQfjBQmqMM+6K54eLbz
+zSRBb4dMyehLe74IbrLgJUr5AgMBAAGjGzAZMBcGDCqGOgAB7dNrAQEBBgEB/wQE
+AwICDDANBgkqhkiG9w0BAQUFAAOBgQAyMMq1/tEaTbBIwHXJfWO96df+aTcxE/P9
+QZGVQyh0ai6MOxXOhK4d6nNai+hbdekqzMpGnhHWhugHC7AaUI9o0B8oiGpqSnaN
+9nrfFNeXi6ss6EKemiNkGNCdm9Xh7EwpFbZ0iOJZMVl5wFvYABQBTRXK0L0jC+WJ
+sGr+yi9/wQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/aggregate_08_user_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qnuMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjEyWhcNMTYwNjE4MTEzMjEyWjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgYWdn
+cmVnYXRlXzA4IHVzZXJfY2FwcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+2l+XJvCJCPBm5ltZXGaJ6w7evHSqORF83ZoBK3XE46Wp7ct+2Oc5Vsi+pIS1yT4u
+MVjZO5BRKq9gfe7PH0+3swIDAQABox0wGzAZBgwqhjoAAe3TawEBAQYBAf8EBgME
+BwADgDANBgkqhkiG9w0BAQUFAAOBgQAxYpLamPPrH69W8HV69iorzIN2qoDf/dFg
+OC9Nr2PZqq79YsZPwZgYz4KIPfqfZHgMSJUAVEzqHOgqalWKmtdCRdzISYS1BylB
+3pne0iV5cep/hpaP7njJdg5BL1NVlyEmXIREEIP9lo9uXjpIVBGnn/BpBHDnuURN
+zueyDiEOAw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_01_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3jCCAUegAwIBAgIJANV8hSQH4qoXMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjQyWhcNMTYwNjE4MTEzMjQyWjBWMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjE1MDMGA1UEAxQsRW50aXR5IENlcnQgYmFja3VwcmVzdG9y
+ZV8wMSBzeXN0ZW1fY2FwcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAx694
+VsiPNdQLODoTjPJ7mqeh2guwO6FbvUZfMQbh9kJuahAReMZrLVDZFOeXmy7qMnHV
+KpTln9OTp+ats562AQIDAQABoxswGTAXBgwqhjoAAe3TawEBAQYBAf8EBAMCAgww
+DQYJKoZIhvcNAQEFBQADgYEAX9Wlk7pQvSNCIndvCUZBnS7fO08PyxVB8JzJDdEk
+n9DqtOYPvhYTv4Z8CEoq4sqqHs5K5DCBUYaTpe5y2QVrVtwFLSUFcCu/S/4cJK+X
+j0KK3MlC3C4Bomuesz1MO6b9Ut8occJ5UuTxkKcrniVj74HlH7QOEoNesex073Bg
+usM=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_01_system_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3jCCAUegAwIBAgIJANV8hSQH4qoXMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjQyWhcNMTYwNjE4MTEzMjQyWjBWMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjE1MDMGA1UEAxQsRW50aXR5IENlcnQgYmFja3VwcmVzdG9y
+ZV8wMSBzeXN0ZW1fY2FwcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAx694
+VsiPNdQLODoTjPJ7mqeh2guwO6FbvUZfMQbh9kJuahAReMZrLVDZFOeXmy7qMnHV
+KpTln9OTp+ats562AQIDAQABoxswGTAXBgwqhjoAAe3TawEBAQYBAf8EBAMCAgww
+DQYJKoZIhvcNAQEFBQADgYEAX9Wlk7pQvSNCIndvCUZBnS7fO08PyxVB8JzJDdEk
+n9DqtOYPvhYTv4Z8CEoq4sqqHs5K5DCBUYaTpe5y2QVrVtwFLSUFcCu/S/4cJK+X
+j0KK3MlC3C4Bomuesz1MO6b9Ut8occJ5UuTxkKcrniVj74HlH7QOEoNesex073Bg
+usM=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_02_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+-----BEGIN CERTIFICATE-----
+MIIB1DCCAX6gAwIBAgIJAPEQXdSr1TcJMA0GCSqGSIb3DQEBBQUAMFYxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTUwMwYDVQQDFCxFbnRpdHkgQ2VydCBi
+YWNrdXByZXN0b3JlXzAyIHNpbmdsZV9zaWQxIDAgMjAeFw0wNjA2MjExMTMyNDNa
+Fw0xNjA2MTgxMTMyNDNaMFYxCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFu
+MTUwMwYDVQQDFCxFbnRpdHkgQ2VydCBiYWNrdXByZXN0b3JlXzAyIHNpbmdsZV9k
+ZXYxIDAgMzBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDFjbnm8mS/EI4K7ET/A4ov
+3YkGKvFR6Li/cZ0QzWT3febA+schVjLkGBMaKYlzmvFRReZzMz5YWiAW2slGJIdN
+AgMBAAGjLzAtMCsGDCqGOgAB7dNrAQEBAQEB/wQYMBYMFDExMTExMTExLTIyMjIy
+Mi0zLTAxMA0GCSqGSIb3DQEBBQUAA0EAG6f3w/Unt9TetOKN+Hd2RcGD7Zg0nAsS
+P4cMt7t36dNFdAkyVGMQIK0zNjTKLm9taNNfbLu5e/Olz3fi33O9ow==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICBzCCAbGgAwIBAgIJAJakqNPipDeKMA0GCSqGSIb3DQEBBQUAMFYxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTUwMwYDVQQDFCxFbnRpdHkgQ2VydCBi
+YWNrdXByZXN0b3JlXzAyIHNpbmdsZV92aWQxIDAgMTAeFw0wNjA2MjExMTMyNDNa
+Fw0xNjA2MTgxMTMyNDNaMFYxCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFu
+MTUwMwYDVQQDFCxFbnRpdHkgQ2VydCBiYWNrdXByZXN0b3JlXzAyIHNpbmdsZV9z
+aWQxIDAgMjBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDhYebVoxFWqEGIEnWFx7iL
+jzZafe60b0D1nVKJRvWnvBY2wEFHyOZm3EFjkucd5Jb8UjWOYnDbW+eV8q44ITEX
+AgMBAAGjYjBgMBsGDCqGOgAB7dNrAQEBBAEB/wQIMAYCBBEAAAYwHQYDVR0OBBYE
+FCRnthsiHtJ8+Dy3iyIQ1zSv6zQbMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0P
+AQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA0EAOvRuEC/NaDlVZVqMAtxKiAhcZM5G
+LUnNnB4uLky0c/7yE3NUgz5pGwAm1aRxzf2Ae0Fwkdp1+U+GdfAtaAFf7g==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICBTCCAa+gAwIBAgIJAI0Tnk0aLxyLMA0GCSqGSIb3DQEBBQUAMFQxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTMwMQYDVQQDFCpFbnRpdHkgQ2VydCBi
+YWNrdXByZXN0b3JlXzAyIHVzZXJfY2FwcyAwIDAwHhcNMDYwNjIxMTEzMjQzWhcN
+MTYwNjE4MTEzMjQzWjBWMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjE1
+MDMGA1UEAxQsRW50aXR5IENlcnQgYmFja3VwcmVzdG9yZV8wMiBzaW5nbGVfdmlk
+MSAwIDEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA2eM7sCgMvhPMTmL/If3OoDkk
+w/TjD+9LSQKa7N5XtG+dXSOFV52h044Yv8NDbDGnycis4uX6vXiOxlllide68QID
+AQABo2IwYDAbBgwqhjoAAe3TawEBAQUBAf8ECDAGAgRwAAABMB0GA1UdDgQWBBS0
+IvIg2XlvtIugoL+HZ7odgbzhWjASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB
+/wQEAwICBDANBgkqhkiG9w0BAQUFAANBAA+w6DnrgUvAdubyN5uE66yn7b2/1GsZ
+CeZdLJagrRQDnnvdmE+Ca1KCl4oN0d2z/y5bEOPi1BkGN7Ou38k9zRg=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICKjCCAZOgAwIBAgIJANV8hSQH4qoYMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjQyWhcNMTYwNjE4MTEzMjQyWjBUMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEzMDEGA1UEAxQqRW50aXR5IENlcnQgYmFj
+a3VwcmVzdG9yZV8wMiB1c2VyX2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAw
+SAJBAMXOCwbaV5+w2qWu/1uBloK/aBbhekGu/pXurSapWY1deSKxsDEtm5WxRd2H
+IXwJGQdYOiY1K806thKLfIeE1gECAwEAAaNgMF4wGQYMKoY6AAHt02sBAQEGAQH/
+BAYDBAcAA4AwHQYDVR0OBBYEFCLOcaeEU272Me7oU2Bt4V06pfgwMBIGA1UdEwEB
+/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBAE7y
+7gksD35uE+zr6ea2hKgF7nH2ZaIbP6oH1vmvqzwA8JKfKyUIoZ4FkIITMtG914lH
+3NeWK7bojJT1Lvswt6n+lmTEVTyDQCGg02/z2SET20Axdh1pwq4ECrgi2+bxfo/P
+91BQxqyPD3rb1k4KRGneM0zFk2sFN5dXKeghzqPC
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_02_single_dev1.0.3.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1DCCAX6gAwIBAgIJAPEQXdSr1TcJMA0GCSqGSIb3DQEBBQUAMFYxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTUwMwYDVQQDFCxFbnRpdHkgQ2VydCBi
+YWNrdXByZXN0b3JlXzAyIHNpbmdsZV9zaWQxIDAgMjAeFw0wNjA2MjExMTMyNDNa
+Fw0xNjA2MTgxMTMyNDNaMFYxCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFu
+MTUwMwYDVQQDFCxFbnRpdHkgQ2VydCBiYWNrdXByZXN0b3JlXzAyIHNpbmdsZV9k
+ZXYxIDAgMzBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDFjbnm8mS/EI4K7ET/A4ov
+3YkGKvFR6Li/cZ0QzWT3febA+schVjLkGBMaKYlzmvFRReZzMz5YWiAW2slGJIdN
+AgMBAAGjLzAtMCsGDCqGOgAB7dNrAQEBAQEB/wQYMBYMFDExMTExMTExLTIyMjIy
+Mi0zLTAxMA0GCSqGSIb3DQEBBQUAA0EAG6f3w/Unt9TetOKN+Hd2RcGD7Zg0nAsS
+P4cMt7t36dNFdAkyVGMQIK0zNjTKLm9taNNfbLu5e/Olz3fi33O9ow==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_02_single_sid1.0.2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIICBzCCAbGgAwIBAgIJAJakqNPipDeKMA0GCSqGSIb3DQEBBQUAMFYxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTUwMwYDVQQDFCxFbnRpdHkgQ2VydCBi
+YWNrdXByZXN0b3JlXzAyIHNpbmdsZV92aWQxIDAgMTAeFw0wNjA2MjExMTMyNDNa
+Fw0xNjA2MTgxMTMyNDNaMFYxCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFu
+MTUwMwYDVQQDFCxFbnRpdHkgQ2VydCBiYWNrdXByZXN0b3JlXzAyIHNpbmdsZV9z
+aWQxIDAgMjBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDhYebVoxFWqEGIEnWFx7iL
+jzZafe60b0D1nVKJRvWnvBY2wEFHyOZm3EFjkucd5Jb8UjWOYnDbW+eV8q44ITEX
+AgMBAAGjYjBgMBsGDCqGOgAB7dNrAQEBBAEB/wQIMAYCBBEAAAYwHQYDVR0OBBYE
+FCRnthsiHtJ8+Dy3iyIQ1zSv6zQbMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0P
+AQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA0EAOvRuEC/NaDlVZVqMAtxKiAhcZM5G
+LUnNnB4uLky0c/7yE3NUgz5pGwAm1aRxzf2Ae0Fwkdp1+U+GdfAtaAFf7g==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_02_single_vid1.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIICBTCCAa+gAwIBAgIJAI0Tnk0aLxyLMA0GCSqGSIb3DQEBBQUAMFQxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTMwMQYDVQQDFCpFbnRpdHkgQ2VydCBi
+YWNrdXByZXN0b3JlXzAyIHVzZXJfY2FwcyAwIDAwHhcNMDYwNjIxMTEzMjQzWhcN
+MTYwNjE4MTEzMjQzWjBWMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjE1
+MDMGA1UEAxQsRW50aXR5IENlcnQgYmFja3VwcmVzdG9yZV8wMiBzaW5nbGVfdmlk
+MSAwIDEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA2eM7sCgMvhPMTmL/If3OoDkk
+w/TjD+9LSQKa7N5XtG+dXSOFV52h044Yv8NDbDGnycis4uX6vXiOxlllide68QID
+AQABo2IwYDAbBgwqhjoAAe3TawEBAQUBAf8ECDAGAgRwAAABMB0GA1UdDgQWBBS0
+IvIg2XlvtIugoL+HZ7odgbzhWjASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB
+/wQEAwICBDANBgkqhkiG9w0BAQUFAANBAA+w6DnrgUvAdubyN5uE66yn7b2/1GsZ
+CeZdLJagrRQDnnvdmE+Ca1KCl4oN0d2z/y5bEOPi1BkGN7Ou38k9zRg=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_02_user_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICKjCCAZOgAwIBAgIJANV8hSQH4qoYMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjQyWhcNMTYwNjE4MTEzMjQyWjBUMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEzMDEGA1UEAxQqRW50aXR5IENlcnQgYmFj
+a3VwcmVzdG9yZV8wMiB1c2VyX2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAw
+SAJBAMXOCwbaV5+w2qWu/1uBloK/aBbhekGu/pXurSapWY1deSKxsDEtm5WxRd2H
+IXwJGQdYOiY1K806thKLfIeE1gECAwEAAaNgMF4wGQYMKoY6AAHt02sBAQEGAQH/
+BAYDBAcAA4AwHQYDVR0OBBYEFCLOcaeEU272Me7oU2Bt4V06pfgwMBIGA1UdEwEB
+/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBAE7y
+7gksD35uE+zr6ea2hKgF7nH2ZaIbP6oH1vmvqzwA8JKfKyUIoZ4FkIITMtG914lH
+3NeWK7bojJT1Lvswt6n+lmTEVTyDQCGg02/z2SET20Axdh1pwq4ECrgi2+bxfo/P
+91BQxqyPD3rb1k4KRGneM0zFk2sFN5dXKeghzqPC
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_03_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+-----BEGIN CERTIFICATE-----
+MIIBwjCCAWygAwIBAgIJAJPAbFgN+T3MMA0GCSqGSIb3DQEBBQUAMFQxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTMwMQYDVQQDFCpFbnRpdHkgQ2VydCBi
+YWNrdXByZXN0b3JlXzAzIG11bHRpX3ZpZCAwIDEwHhcNMDYwNjIxMTEzMjQ1WhcN
+MTYwNjE4MTEzMjQ1WjBWMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjE1
+MDMGA1UEAxQsRW50aXR5IENlcnQgYmFja3VwcmVzdG9yZV8wMyBzaW5nbGVfc2lk
+MSAwIDIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAl/4Rb5EHjNZ6eHWMYLK50zyY
+TrzuQT6ME4j6VdFtnn08Xl7NP9D4J0fcyx3Qv3g1m7R6gfo1J7Ts2ZHMQ0RqmQID
+AQABox8wHTAbBgwqhjoAAe3TawEBAQQBAf8ECDAGAgQRAAAGMA0GCSqGSIb3DQEB
+BQUAA0EAKuauCDCaJAjKME4QwfmbLeZ0cCzx1CqJFCAXSwMUD2v2Bmti0aifNRGA
+PizyBIIzK1K0r02JTYE7qpNmh5wUnA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICNTCCAd+gAwIBAgIJANNlOZS0RkT/MA0GCSqGSIb3DQEBBQUAMFQxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTMwMQYDVQQDFCpFbnRpdHkgQ2VydCBi
+YWNrdXByZXN0b3JlXzAzIHVzZXJfY2FwcyAwIDAwHhcNMDYwNjIxMTEzMjQ0WhcN
+MTYwNjE4MTEzMjQ0WjBUMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEz
+MDEGA1UEAxQqRW50aXR5IENlcnQgYmFja3VwcmVzdG9yZV8wMyBtdWx0aV92aWQg
+MCAxMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMAGcZq6MjGXiQZmQG/0MMDB9cJ6
+4GItO70QtovgSSUfR3HNijGs/rrior/bSqJcO56qB48HG6AfvpXbArVsoeUCAwEA
+AaOBkzCBkDBLBgwqhjoAAe3TawEBAQUBAf8EODA2AgRwAAABAgRwAAACAgRwAAAD
+AgRwAAAEAgRwAAAFAgRwAAAGAgRwAAAHAgRwAAAIAgRwAAAJMB0GA1UdDgQWBBSv
+JlR6LyrDnW9E1j3TI4qUhcRrYDASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB
+/wQEAwICBDANBgkqhkiG9w0BAQUFAANBAFJbb4tdBfl9/uh+rvSSJc2QlNIcN9Cd
+W4Aw0BdIJrKoG5jomPMZuArTF31Q9V8A5wrfuA1GC8YBkUudp2OuyDA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICKjCCAZOgAwIBAgIJANV8hSQH4qoZMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjQ0WhcNMTYwNjE4MTEzMjQ0WjBUMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEzMDEGA1UEAxQqRW50aXR5IENlcnQgYmFj
+a3VwcmVzdG9yZV8wMyB1c2VyX2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAw
+SAJBAMGLC9i1Cw6GuajVy3afjF8h81KcC7gerURc5oL8t1Jvna4pP9aPyR11ZMG4
+LPElh7+VSPzQmtqY94yPHkmwZyMCAwEAAaNgMF4wGQYMKoY6AAHt02sBAQEGAQH/
+BAYDBAcAA4AwHQYDVR0OBBYEFA8FEEZjYwOnrQOK4eJSJeJXufvMMBIGA1UdEwEB
+/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBABLR
+Jax5aBMkb9CAKPOHSlUEmOXY+rKn5nvQFvq/JuE1iIfrfgR6G0l08H4n9T+G01Iy
+P5DbI37oLO/zR8q922hIAu9Oq+7TMlpg9TuDAdTrWPOl0B+mVVPJJx+TP4IJTvem
+1CDcz4JgyWSb3Pv1lJPPi23CQ7EkZ/pCwhWQNJEI
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_03_multi_vid.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICNTCCAd+gAwIBAgIJANNlOZS0RkT/MA0GCSqGSIb3DQEBBQUAMFQxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTMwMQYDVQQDFCpFbnRpdHkgQ2VydCBi
+YWNrdXByZXN0b3JlXzAzIHVzZXJfY2FwcyAwIDAwHhcNMDYwNjIxMTEzMjQ0WhcN
+MTYwNjE4MTEzMjQ0WjBUMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEz
+MDEGA1UEAxQqRW50aXR5IENlcnQgYmFja3VwcmVzdG9yZV8wMyBtdWx0aV92aWQg
+MCAxMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMAGcZq6MjGXiQZmQG/0MMDB9cJ6
+4GItO70QtovgSSUfR3HNijGs/rrior/bSqJcO56qB48HG6AfvpXbArVsoeUCAwEA
+AaOBkzCBkDBLBgwqhjoAAe3TawEBAQUBAf8EODA2AgRwAAABAgRwAAACAgRwAAAD
+AgRwAAAEAgRwAAAFAgRwAAAGAgRwAAAHAgRwAAAIAgRwAAAJMB0GA1UdDgQWBBSv
+JlR6LyrDnW9E1j3TI4qUhcRrYDASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB
+/wQEAwICBDANBgkqhkiG9w0BAQUFAANBAFJbb4tdBfl9/uh+rvSSJc2QlNIcN9Cd
+W4Aw0BdIJrKoG5jomPMZuArTF31Q9V8A5wrfuA1GC8YBkUudp2OuyDA=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_03_single_sid1.0.2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBwjCCAWygAwIBAgIJAJPAbFgN+T3MMA0GCSqGSIb3DQEBBQUAMFQxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTMwMQYDVQQDFCpFbnRpdHkgQ2VydCBi
+YWNrdXByZXN0b3JlXzAzIG11bHRpX3ZpZCAwIDEwHhcNMDYwNjIxMTEzMjQ1WhcN
+MTYwNjE4MTEzMjQ1WjBWMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjE1
+MDMGA1UEAxQsRW50aXR5IENlcnQgYmFja3VwcmVzdG9yZV8wMyBzaW5nbGVfc2lk
+MSAwIDIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAl/4Rb5EHjNZ6eHWMYLK50zyY
+TrzuQT6ME4j6VdFtnn08Xl7NP9D4J0fcyx3Qv3g1m7R6gfo1J7Ts2ZHMQ0RqmQID
+AQABox8wHTAbBgwqhjoAAe3TawEBAQQBAf8ECDAGAgQRAAAGMA0GCSqGSIb3DQEB
+BQUAA0EAKuauCDCaJAjKME4QwfmbLeZ0cCzx1CqJFCAXSwMUD2v2Bmti0aifNRGA
+PizyBIIzK1K0r02JTYE7qpNmh5wUnA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/backuprestore_03_user_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICKjCCAZOgAwIBAgIJANV8hSQH4qoZMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjQ0WhcNMTYwNjE4MTEzMjQ0WjBUMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEzMDEGA1UEAxQqRW50aXR5IENlcnQgYmFj
+a3VwcmVzdG9yZV8wMyB1c2VyX2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAw
+SAJBAMGLC9i1Cw6GuajVy3afjF8h81KcC7gerURc5oL8t1Jvna4pP9aPyR11ZMG4
+LPElh7+VSPzQmtqY94yPHkmwZyMCAwEAAaNgMF4wGQYMKoY6AAHt02sBAQEGAQH/
+BAYDBAcAA4AwHQYDVR0OBBYEFA8FEEZjYwOnrQOK4eJSJeJXufvMMBIGA1UdEwEB
+/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBABLR
+Jax5aBMkb9CAKPOHSlUEmOXY+rKn5nvQFvq/JuE1iIfrfgR6G0l08H4n9T+G01Iy
+P5DbI37oLO/zR8q922hIAu9Oq+7TMlpg9TuDAdTrWPOl0B+mVVPJJx+TP4IJTvem
+1CDcz4JgyWSb3Pv1lJPPi23CQ7EkZ/pCwhWQNJEI
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_01_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4jCCAUugAwIBAgIJANV8hSQH4qnwMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjEzWhcNMTYwNjE4MTEzMjEzWjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgY29y
+cnVwdF8wMSBjb3JydXB0X2RldiAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+y+Hi9lZU/kw+KuhH2hzGRyVN1G9y/Dkes2c+uldpdR2oBsUDe7mh/snx+nWqRk3s
+2OYeYUGvspviF5v4aYwWJQIDAQABoxwwGjAYBgwqhjoAAe3TawEBAQEECDAGAgQR
+AAAGMA0GCSqGSIb3DQEBBQUAA4GBACMBYpgmlZUmTQ2gtdqR9Jqn2Tj6WPXwiIMH
+xKcc4oIHnv7nKOBCqLlzemRaPEPMy6fMXe7p+dRuV6OQtYE70NFHokk/zMKFYttn
+0uh3drNpY7j67fwJVU9iBgo7SSE6dlaMY+5wobVM0s+u4QtSKjV6c7TtNH2F7+b0
+FL2AvmVy
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_01_corrupt_dev.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4jCCAUugAwIBAgIJANV8hSQH4qnwMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjEzWhcNMTYwNjE4MTEzMjEzWjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgY29y
+cnVwdF8wMSBjb3JydXB0X2RldiAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+y+Hi9lZU/kw+KuhH2hzGRyVN1G9y/Dkes2c+uldpdR2oBsUDe7mh/snx+nWqRk3s
+2OYeYUGvspviF5v4aYwWJQIDAQABoxwwGjAYBgwqhjoAAe3TawEBAQEECDAGAgQR
+AAAGMA0GCSqGSIb3DQEBBQUAA4GBACMBYpgmlZUmTQ2gtdqR9Jqn2Tj6WPXwiIMH
+xKcc4oIHnv7nKOBCqLlzemRaPEPMy6fMXe7p+dRuV6OQtYE70NFHokk/zMKFYttn
+0uh3drNpY7j67fwJVU9iBgo7SSE6dlaMY+5wobVM0s+u4QtSKjV6c7TtNH2F7+b0
+FL2AvmVy
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_02_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8jCCAVugAwIBAgIJANV8hSQH4qnxMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE0WhcNMTYwNjE4MTEzMjE0WjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgY29y
+cnVwdF8wMiBjb3JydXB0X3NpZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+2EXhiHKTOa6ZfDfAYia3tjA8z8qChkU3pSKc0VLGnbKLckemklQpfKdf+IYOSkqD
+lpJnTmlRM83utwRcfAf0ywIDAQABoywwKjAoBgwqhjoAAe3TawEBAQQEGDAWDBQx
+MTExMTExMS0yMjIyMjItMy0wMTANBgkqhkiG9w0BAQUFAAOBgQB3OcH8dAaGOrj7
+ueLHceOAPKhUKgbdb/zwX6oiBZ1NOmelWWuws7jMI2q4yXftMgPVGeFIZGrtY8zu
+2jcreYsh32Q16MCIsEh7T81F/fm5UMsTezDv6wQR0+02+PnDcIrSf5G6gEl+1ru6
+fWLJa9jJ/HuucwWjorPzdxH4cmGvvg==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_02_corrupt_sid.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8jCCAVugAwIBAgIJANV8hSQH4qnxMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE0WhcNMTYwNjE4MTEzMjE0WjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgY29y
+cnVwdF8wMiBjb3JydXB0X3NpZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+2EXhiHKTOa6ZfDfAYia3tjA8z8qChkU3pSKc0VLGnbKLckemklQpfKdf+IYOSkqD
+lpJnTmlRM83utwRcfAf0ywIDAQABoywwKjAoBgwqhjoAAe3TawEBAQQEGDAWDBQx
+MTExMTExMS0yMjIyMjItMy0wMTANBgkqhkiG9w0BAQUFAAOBgQB3OcH8dAaGOrj7
+ueLHceOAPKhUKgbdb/zwX6oiBZ1NOmelWWuws7jMI2q4yXftMgPVGeFIZGrtY8zu
+2jcreYsh32Q16MCIsEh7T81F/fm5UMsTezDv6wQR0+02+PnDcIrSf5G6gEl+1ru6
+fWLJa9jJ/HuucwWjorPzdxH4cmGvvg==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_03_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8jCCAVugAwIBAgIJANV8hSQH4qnyMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE1WhcNMTYwNjE4MTEzMjE1WjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgY29y
+cnVwdF8wMyBjb3JydXB0X3ZpZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+yLAbxdkYED9iBkHeQs5ygKc5f7WqXTauu0mNF19bokm7p0Cip1yL7M9kyJlYfqvh
+uOC4Cx2dqovnbCv0ej3ffwIDAQABoywwKjAoBgwqhjoAAe3TawEBAQUEGDAWDBQx
+MTExMTExMS0yMjIyMjItMy0wMTANBgkqhkiG9w0BAQUFAAOBgQCCk015L7biBbys
+yxvYKP/Vmt2wgfQHW8O7mA/aBfMDw10wPO0dozmgkRo9BOpAmJDZXKI9ifX5SdFw
+KTLdVzhNJ4ffCMcP/3V+o2ARsNWiir3q9QJSXpnOdzLkOk0fC6KfVdoy4g0hLSA2
+RgrrH1M6DWQ87pceN/u05v+WsUAwdg==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_03_corrupt_vid.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8jCCAVugAwIBAgIJANV8hSQH4qnyMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE1WhcNMTYwNjE4MTEzMjE1WjBQMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgY29y
+cnVwdF8wMyBjb3JydXB0X3ZpZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+yLAbxdkYED9iBkHeQs5ygKc5f7WqXTauu0mNF19bokm7p0Cip1yL7M9kyJlYfqvh
+uOC4Cx2dqovnbCv0ej3ffwIDAQABoywwKjAoBgwqhjoAAe3TawEBAQUEGDAWDBQx
+MTExMTExMS0yMjIyMjItMy0wMTANBgkqhkiG9w0BAQUFAAOBgQCCk015L7biBbys
+yxvYKP/Vmt2wgfQHW8O7mA/aBfMDw10wPO0dozmgkRo9BOpAmJDZXKI9ifX5SdFw
+KTLdVzhNJ4ffCMcP/3V+o2ARsNWiir3q9QJSXpnOdzLkOk0fC6KfVdoy4g0hLSA2
+RgrrH1M6DWQ87pceN/u05v+WsUAwdg==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_04_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8zCCAVygAwIBAgIJANV8hSQH4qnzMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE1WhcNMTYwNjE4MTEzMjE1WjBRMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEwMC4GA1UEAxQnRW50aXR5IENlcnQgY29y
+cnVwdF8wNCBjb3JydXB0X2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB
+AMFaWLe5X4KwlFjtFQV8a5dZQTbID+Oj847AEtmI+lnXf28bdIOWmvFJfFV0T5k8
+zOgC7/kF8Ea/f1Zx3h9kyXsCAwEAAaMsMCowKAYMKoY6AAHt02sBAQEGBBgwFgwU
+MTExMTExMTEtMjIyMjIyLTMtMDEwDQYJKoZIhvcNAQEFBQADgYEAN7N6XK6BE1nA
+nWiHloGEtO1gHiD/AQSo318A+3LxTmMFWZv+7ZW9mnT3QoLiFl3G3jlhHU3e7MF7
+5FWYaoO59U1zmwH3pBezhX96W+ANYzQkNMSr8gpPdTq2RRVoxj0fP2T8LMbjL8Ez
+c9YLeWrKe76H2DT8gqTlb1be5Z+8v3c=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/corrupt_04_corrupt_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8zCCAVygAwIBAgIJANV8hSQH4qnzMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE1WhcNMTYwNjE4MTEzMjE1WjBRMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEwMC4GA1UEAxQnRW50aXR5IENlcnQgY29y
+cnVwdF8wNCBjb3JydXB0X2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB
+AMFaWLe5X4KwlFjtFQV8a5dZQTbID+Oj847AEtmI+lnXf28bdIOWmvFJfFV0T5k8
+zOgC7/kF8Ea/f1Zx3h9kyXsCAwEAAaMsMCowKAYMKoY6AAHt02sBAQEGBBgwFgwU
+MTExMTExMTEtMjIyMjIyLTMtMDEwDQYJKoZIhvcNAQEFBQADgYEAN7N6XK6BE1nA
+nWiHloGEtO1gHiD/AQSo318A+3LxTmMFWZv+7ZW9mnT3QoLiFl3G3jlhHU3e7MF7
+5FWYaoO59U1zmwH3pBezhX96W+ANYzQkNMSr8gpPdTq2RRVoxj0fP2T8LMbjL8Ez
+c9YLeWrKe76H2DT8gqTlb1be5Z+8v3c=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/devcertwarn_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+-----BEGIN CERTIFICATE-----
+MIIBmzCCAUWgAwIBAgIJANrXmkHskQdDMA0GCSqGSIb3DQEBBQUAMFExCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTAwLgYDVQQDFCdFbnRpdHkgQ2VydCBk
+ZXZjZXJ0d2FybiBzeXN0ZW1fY2FwcyAwIDEwHhcNMDYwNzExMDkxNDA4WhcNMTYw
+NzA4MDkxNDA4WjBTMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEyMDAG
+A1UEAxMpRW50aXR5IENlcnQgZGV2Y2VydHdhcm4gdW5jb25zdHJhaW5lZCAwIDIw
+XDANBgkqhkiG9w0BAQEFAANLADBIAkEAw8iZIpHVJ2rNTlmQbiIlo8OUeNFeH0zj
+tR9zo2F3JStg4InhwJVGEUjO3ZUs3Cak1WmU5Wy2keOvrnmaZhoucQIDAQABMA0G
+CSqGSIb3DQEBBQUAA0EAfDe2nIX70gEyZeSSJmbk3ZWJpxBOXoDwFstjy8gKzN3k
+nywEu1RwowmuJHzjtxPh6BQgsOXYh2BD5ONRxAB+Ug==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIB+zCCAaWgAwIBAgIJAOvQjIAoM2ZLMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTIwMAYDVQQDEylFbnRpdHkgQ2VydCBk
+ZXZjZXJ0d2FybiB1bmNvbnN0cmFpbmVkIDAgMDAeFw0wNjA3MTEwOTE0MDdaFw0x
+NjA3MDgwOTE0MDdaMFExCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTAw
+LgYDVQQDFCdFbnRpdHkgQ2VydCBkZXZjZXJ0d2FybiBzeXN0ZW1fY2FwcyAwIDEw
+XDANBgkqhkiG9w0BAQEFAANLADBIAkEAuAmBmZUg75yoWfrk5y+eEVW+h6KwlS8i
+ECb9EIlOSxkTI+UPS/ME5jEUQy8jF+TTDCLM0Jqflwc8oYKSEyFEVwIDAQABo14w
+XDAXBgwqhjoAAe3TawEBAQYBAf8EBAMCAgwwHQYDVR0OBBYEFP37oraauBUBboO3
+6q89BG9/KOqXMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0G
+CSqGSIb3DQEBBQUAA0EAJhdba2nEz1UHFEC8OtUgtf88rLdcAU3qBbOCL1VvWbu9
+UO2hu8x6ifCohLY6RwVSf4ZgEFqnNyn7N673IMZH8w==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICBTCCAW6gAwIBAgIJANV8hSQH4rD9MA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNzExMDkxNDA3WhcNMTYwNzA4MDkxNDA3WjBTMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEyMDAGA1UEAxMpRW50aXR5IENlcnQgZGV2Y2VydHdhcm4g
+dW5jb25zdHJhaW5lZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA7JQh0Aro
+FOFqlZtru+ud0IEmWLl4yurbbS/iIwGdg3svUnCGwmKjgFnAyCHFxBHVWwN6KgUc
+hycShS0JC4vwFQIDAQABo0UwQzAdBgNVHQ4EFgQUmpvOlCvhGKm0e/oLohHeblA/
+CzIwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcN
+AQEFBQADgYEAgBywVgQK9z8gk+HuZzqjBZnt151IL6XngEo+Rf7GVhT08qaHmE6j
+pJaoBb9E9VXIZDrM5v1kPUisjyhVDfNmNT698iM0bcNT3mFJeeCspNxbGUkp1s9+
+gI26DvzSeV5LaqIf7xlrv8F/LTcfgely9ZhUbwu5BGe/t7UksZUm564=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/devcertwarn_system_caps.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB+zCCAaWgAwIBAgIJAOvQjIAoM2ZLMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTIwMAYDVQQDEylFbnRpdHkgQ2VydCBk
+ZXZjZXJ0d2FybiB1bmNvbnN0cmFpbmVkIDAgMDAeFw0wNjA3MTEwOTE0MDdaFw0x
+NjA3MDgwOTE0MDdaMFExCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTAw
+LgYDVQQDFCdFbnRpdHkgQ2VydCBkZXZjZXJ0d2FybiBzeXN0ZW1fY2FwcyAwIDEw
+XDANBgkqhkiG9w0BAQEFAANLADBIAkEAuAmBmZUg75yoWfrk5y+eEVW+h6KwlS8i
+ECb9EIlOSxkTI+UPS/ME5jEUQy8jF+TTDCLM0Jqflwc8oYKSEyFEVwIDAQABo14w
+XDAXBgwqhjoAAe3TawEBAQYBAf8EBAMCAgwwHQYDVR0OBBYEFP37oraauBUBboO3
+6q89BG9/KOqXMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0G
+CSqGSIb3DQEBBQUAA0EAJhdba2nEz1UHFEC8OtUgtf88rLdcAU3qBbOCL1VvWbu9
+UO2hu8x6ifCohLY6RwVSf4ZgEFqnNyn7N673IMZH8w==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/devcertwarn_unconstrained.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIICBTCCAW6gAwIBAgIJANV8hSQH4rD9MA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNzExMDkxNDA3WhcNMTYwNzA4MDkxNDA3WjBTMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEyMDAGA1UEAxMpRW50aXR5IENlcnQgZGV2Y2VydHdhcm4g
+dW5jb25zdHJhaW5lZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA7JQh0Aro
+FOFqlZtru+ud0IEmWLl4yurbbS/iIwGdg3svUnCGwmKjgFnAyCHFxBHVWwN6KgUc
+hycShS0JC4vwFQIDAQABo0UwQzAdBgNVHQ4EFgQUmpvOlCvhGKm0e/oLohHeblA/
+CzIwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcN
+AQEFBQADgYEAgBywVgQK9z8gk+HuZzqjBZnt151IL6XngEo+Rf7GVhT08qaHmE6j
+pJaoBb9E9VXIZDrM5v1kPUisjyhVDfNmNT698iM0bcNT3mFJeeCspNxbGUkp1s9+
+gI26DvzSeV5LaqIf7xlrv8F/LTcfgely9ZhUbwu5BGe/t7UksZUm564=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/devcertwarn_unconstrained.0.2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBmzCCAUWgAwIBAgIJANrXmkHskQdDMA0GCSqGSIb3DQEBBQUAMFExCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTAwLgYDVQQDFCdFbnRpdHkgQ2VydCBk
+ZXZjZXJ0d2FybiBzeXN0ZW1fY2FwcyAwIDEwHhcNMDYwNzExMDkxNDA4WhcNMTYw
+NzA4MDkxNDA4WjBTMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEyMDAG
+A1UEAxMpRW50aXR5IENlcnQgZGV2Y2VydHdhcm4gdW5jb25zdHJhaW5lZCAwIDIw
+XDANBgkqhkiG9w0BAQEFAANLADBIAkEAw8iZIpHVJ2rNTlmQbiIlo8OUeNFeH0zj
+tR9zo2F3JStg4InhwJVGEUjO3ZUs3Cak1WmU5Wy2keOvrnmaZhoucQIDAQABMA0G
+CSqGSIb3DQEBBQUAA0EAfDe2nIX70gEyZeSSJmbk3ZWJpxBOXoDwFstjy8gKzN3k
+nywEu1RwowmuJHzjtxPh6BQgsOXYh2BD5ONRxAB+Ug==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_01_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8zCCAVygAwIBAgIJANV8hSQH4qn0MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE2WhcNMTYwNjE4MTEzMjE2WjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMDEgc2luZ2xlX2RldjEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM9Z
+OBY4HUaweyyGcRtqMzqdvcVXIj8KnxHtOyvHx5WIYi73b2BEioCNC/YLvAKBPXjO
+8iNhNQcKnTRdnB7MUNUCAwEAAaMvMC0wKwYMKoY6AAHt02sBAQEBAQH/BBgwFgwU
+MTExMTExMTEtMjIyMjIyLTMtMDEwDQYJKoZIhvcNAQEFBQADgYEAeGlaqy+KRZCU
+hqSv8qo2umsG7OUk3EaqxZODb0otAzknWRIWcUZooPh4P10VGv6QLYWQ1aOhsZri
+TMYJSz5tjh2njzdU5zXarjTraONG2poUeF6SdrDCbblB3yQszlTxmYopDHgaTwUY
+KCZNqjwGeGOxHpB2yKYtKc6TESt2JTE=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_01_single_dev1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8zCCAVygAwIBAgIJANV8hSQH4qn0MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE2WhcNMTYwNjE4MTEzMjE2WjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMDEgc2luZ2xlX2RldjEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM9Z
+OBY4HUaweyyGcRtqMzqdvcVXIj8KnxHtOyvHx5WIYi73b2BEioCNC/YLvAKBPXjO
+8iNhNQcKnTRdnB7MUNUCAwEAAaMvMC0wKwYMKoY6AAHt02sBAQEBAQH/BBgwFgwU
+MTExMTExMTEtMjIyMjIyLTMtMDEwDQYJKoZIhvcNAQEFBQADgYEAeGlaqy+KRZCU
+hqSv8qo2umsG7OUk3EaqxZODb0otAzknWRIWcUZooPh4P10VGv6QLYWQ1aOhsZri
+TMYJSz5tjh2njzdU5zXarjTraONG2poUeF6SdrDCbblB3yQszlTxmYopDHgaTwUY
+KCZNqjwGeGOxHpB2yKYtKc6TESt2JTE=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_02_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qn1MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE2WhcNMTYwNjE4MTEzMjE2WjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMDIgc2luZ2xlX3NpZDEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALn1
+ywNvOm0K7rQsSXMC5tcnV0vjhgqJ6Sc0FpoxeWJ2GOb5yNbYSPU+5Sn0i5QtyN7k
+pXOISiAYkgRL3O6g6QsCAwEAAaMfMB0wGwYMKoY6AAHt02sBAQEEAQH/BAgwBgIE
+EQAABjANBgkqhkiG9w0BAQUFAAOBgQB2v2tNSSXmareXYMnBQOUZThsNMmUzx3/Y
+qxoU0A0gWTDaNrt3n6CtltK49bBRtatN9In3tfefahXxjhfstdBX7KH7eHDjCgvk
+K4Clzh7sAjdQCXWHb4zBHpwTo1WAvrZI+3+RmnlDOagv1vF684FqxTJdq/l6HDxq
+jvek/tcH3Q==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_02_single_sid1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qn1MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE2WhcNMTYwNjE4MTEzMjE2WjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMDIgc2luZ2xlX3NpZDEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALn1
+ywNvOm0K7rQsSXMC5tcnV0vjhgqJ6Sc0FpoxeWJ2GOb5yNbYSPU+5Sn0i5QtyN7k
+pXOISiAYkgRL3O6g6QsCAwEAAaMfMB0wGwYMKoY6AAHt02sBAQEEAQH/BAgwBgIE
+EQAABjANBgkqhkiG9w0BAQUFAAOBgQB2v2tNSSXmareXYMnBQOUZThsNMmUzx3/Y
+qxoU0A0gWTDaNrt3n6CtltK49bBRtatN9In3tfefahXxjhfstdBX7KH7eHDjCgvk
+K4Clzh7sAjdQCXWHb4zBHpwTo1WAvrZI+3+RmnlDOagv1vF684FqxTJdq/l6HDxq
+jvek/tcH3Q==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_03_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qn2MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE3WhcNMTYwNjE4MTEzMjE3WjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMDMgc2luZ2xlX3ZpZDEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANuG
+KSduLQ7DMdTz+HnQRt/CY7Nt0IerjCOu/GP8Z64pQGSfB1Z3ailLrnR2Xf24IqoB
+n01dZURv70ua3HYUptkCAwEAAaMfMB0wGwYMKoY6AAHt02sBAQEFAQH/BAgwBgIE
+cAAAATANBgkqhkiG9w0BAQUFAAOBgQCSoeiIHZ7GAhCmU+ERA0GU97USQU6d31tg
+wIR/MLYFyXpeemk06aXKv6VfMhiS2tBXWDmDXhG0A7zpvl78OYBWsNEfUgjtTTso
+3ut1LiV31AFazeAo/c40ofwZNnriV+8Hp3J9xwQMqUJ78vHACIvOLAoL/RmZlFCx
+meCYafG+Sg==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_03_single_vid1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qn2MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE3WhcNMTYwNjE4MTEzMjE3WjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMDMgc2luZ2xlX3ZpZDEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANuG
+KSduLQ7DMdTz+HnQRt/CY7Nt0IerjCOu/GP8Z64pQGSfB1Z3ailLrnR2Xf24IqoB
+n01dZURv70ua3HYUptkCAwEAAaMfMB0wGwYMKoY6AAHt02sBAQEFAQH/BAgwBgIE
+cAAAATANBgkqhkiG9w0BAQUFAAOBgQCSoeiIHZ7GAhCmU+ERA0GU97USQU6d31tg
+wIR/MLYFyXpeemk06aXKv6VfMhiS2tBXWDmDXhG0A7zpvl78OYBWsNEfUgjtTTso
+3ut1LiV31AFazeAo/c40ofwZNnriV+8Hp3J9xwQMqUJ78vHACIvOLAoL/RmZlFCx
+meCYafG+Sg==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_04_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3zCCAUigAwIBAgIJANV8hSQH4qn3MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE3WhcNMTYwNjE4MTEzMjE3WjBMMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjErMCkGA1UEAxQiRW50aXR5IENlcnQgbWF0
+Y2hfMDQgdXNlcl9jYXBzIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDEWUks
+jy99mprzGqooiKLcobP7qzbOFL0elr0Fopb/TqvIGBswq0KCVHnkG47L9zByJ5Hl
+8RWzmEFX/J6EfM7/AgMBAAGjHTAbMBkGDCqGOgAB7dNrAQEBBgEB/wQGAwQHAAOA
+MA0GCSqGSIb3DQEBBQUAA4GBAA8uFgUzlbkQmVlKyXZZNH1SfML1W42PfluOPwU8
+MWdOWJrkuBig4DPQNSbtXjHZFRSpVbb/8mJqokNXz5MIwAWDaFQpH0jY7PzntLvW
+8+hGtxzXhsfdkuhl9KZHMuPiBDR8PJiElbHOphhsgyB2Fr+MJVzQV0zQZX+SAm5P
+YtQD
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_04_user_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3zCCAUigAwIBAgIJANV8hSQH4qn3MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE3WhcNMTYwNjE4MTEzMjE3WjBMMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjErMCkGA1UEAxQiRW50aXR5IENlcnQgbWF0
+Y2hfMDQgdXNlcl9jYXBzIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDEWUks
+jy99mprzGqooiKLcobP7qzbOFL0elr0Fopb/TqvIGBswq0KCVHnkG47L9zByJ5Hl
+8RWzmEFX/J6EfM7/AgMBAAGjHTAbMBkGDCqGOgAB7dNrAQEBBgEB/wQGAwQHAAOA
+MA0GCSqGSIb3DQEBBQUAA4GBAA8uFgUzlbkQmVlKyXZZNH1SfML1W42PfluOPwU8
+MWdOWJrkuBig4DPQNSbtXjHZFRSpVbb/8mJqokNXz5MIwAWDaFQpH0jY7PzntLvW
+8+hGtxzXhsfdkuhl9KZHMuPiBDR8PJiElbHOphhsgyB2Fr+MJVzQV0zQZX+SAm5P
+YtQD
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_05_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCCAT+gAwIBAgIJANV8hSQH4qn4MA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjE4WhcNMTYwNjE4MTEzMjE4WjBOMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0Y2hfMDUgc3lz
+dGVtX2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOaOPQKZSGL2ekni
+HP6np5v/iM5XPR3ug/Z23QIyJfl/2AjOLevKHHmKndUhIavuo+ie5EvSws9DsqYZ
+nqPVyYkCAwEAAaMbMBkwFwYMKoY6AAHt02sBAQEGAQH/BAQDAgIMMA0GCSqGSIb3
+DQEBBQUAA4GBAHumktTRl6ZjTvnFLz9Lq9YNrew2mrkXZX6LdHU25H0QTVBx77Md
+K0XGMmSgj7T8ZBrr+53xTeLCp55fNY9uiaDgraIv4uTWWan4xfxaCCilq6bfBVuZ
+EiQMGFagWEWiEKJ6Nhpd0ToJl1tUU3kXW5IOdlmMz3TVnj3ZeIgbc6Ek
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_05_system_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCCAT+gAwIBAgIJANV8hSQH4qn4MA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjE4WhcNMTYwNjE4MTEzMjE4WjBOMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0Y2hfMDUgc3lz
+dGVtX2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOaOPQKZSGL2ekni
+HP6np5v/iM5XPR3ug/Z23QIyJfl/2AjOLevKHHmKndUhIavuo+ie5EvSws9DsqYZ
+nqPVyYkCAwEAAaMbMBkwFwYMKoY6AAHt02sBAQEGAQH/BAQDAgIMMA0GCSqGSIb3
+DQEBBQUAA4GBAHumktTRl6ZjTvnFLz9Lq9YNrew2mrkXZX6LdHU25H0QTVBx77Md
+K0XGMmSgj7T8ZBrr+53xTeLCp55fNY9uiaDgraIv4uTWWan4xfxaCCilq6bfBVuZ
+EiQMGFagWEWiEKJ6Nhpd0ToJl1tUU3kXW5IOdlmMz3TVnj3ZeIgbc6Ek
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_06_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8zCCAVygAwIBAgIJANV8hSQH4qn5MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE5WhcNMTYwNjE4MTEzMjE5WjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMDYgc2luZ2xlX2RldjEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMW+
++pTpw8wmMcfBMSkImI2qpB6k2cwvPJTFu9KDchuuhjlV6NZiQ0EvSnyWjsw0H6ph
+Tf2q6xzgAWv7KS+/8hcCAwEAAaMvMC0wKwYMKoY6AAHt02sBAQEBAQH/BBgwFgwU
+MTExMTExMTEtMjIyMjIyLTMtMDEwDQYJKoZIhvcNAQEFBQADgYEAJz/ttTdkEc0d
+FO/Fb5XRcQ6VJO87d1oyai4+nXEXo6iMdky8CIdArfX0hOtlPDqASbtd23gL/6fQ
+rzG0iMAQGGvibGObCts2A8o0DfTQt54OhCdrjMDGKoGj+uE/bpw9d1hRF5BrSF0S
+I0Gq9e0T7s2Izqb9HAw3gBeEmwAQzH4=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_06_chain_1.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3zCCAUigAwIBAgIJANV8hSQH4qn6MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE5WhcNMTYwNjE4MTEzMjE5WjBMMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjErMCkGA1UEAxQiRW50aXR5IENlcnQgbWF0
+Y2hfMDYgdXNlcl9jYXBzIDEgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC2xeEi
+ImjbwACcofe40VCe25GRVqdT2AzLSqjMPrGuo1XFXnUDxZY/qYH0wqQ6MtJ46Wq4
+XbZSUhTJ8pW57zcnAgMBAAGjHTAbMBkGDCqGOgAB7dNrAQEBBgEB/wQGAwQHAAOA
+MA0GCSqGSIb3DQEBBQUAA4GBABSRGBX79EQTsVIQ9xY1Xo60brSPSWtWS3MiUFW9
+pG2cnCflqijH+pTYbaGV+pC9s7vkm1rUxE5sjBBIqHdFJtQCzqmwhbyyt70XazRN
+2+rJ+/w5/hGfR6WEdWGyTLUbOltkWeWMtzYmeEu+4nXloUXHxYkqlxH7JkMKeq18
+nz7p
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_06_single_dev1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8zCCAVygAwIBAgIJANV8hSQH4qn5MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE5WhcNMTYwNjE4MTEzMjE5WjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMDYgc2luZ2xlX2RldjEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMW+
++pTpw8wmMcfBMSkImI2qpB6k2cwvPJTFu9KDchuuhjlV6NZiQ0EvSnyWjsw0H6ph
+Tf2q6xzgAWv7KS+/8hcCAwEAAaMvMC0wKwYMKoY6AAHt02sBAQEBAQH/BBgwFgwU
+MTExMTExMTEtMjIyMjIyLTMtMDEwDQYJKoZIhvcNAQEFBQADgYEAJz/ttTdkEc0d
+FO/Fb5XRcQ6VJO87d1oyai4+nXEXo6iMdky8CIdArfX0hOtlPDqASbtd23gL/6fQ
+rzG0iMAQGGvibGObCts2A8o0DfTQt54OhCdrjMDGKoGj+uE/bpw9d1hRF5BrSF0S
+I0Gq9e0T7s2Izqb9HAw3gBeEmwAQzH4=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_06_user_caps.1.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3zCCAUigAwIBAgIJANV8hSQH4qn6MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjE5WhcNMTYwNjE4MTEzMjE5WjBMMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjErMCkGA1UEAxQiRW50aXR5IENlcnQgbWF0
+Y2hfMDYgdXNlcl9jYXBzIDEgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC2xeEi
+ImjbwACcofe40VCe25GRVqdT2AzLSqjMPrGuo1XFXnUDxZY/qYH0wqQ6MtJ46Wq4
+XbZSUhTJ8pW57zcnAgMBAAGjHTAbMBkGDCqGOgAB7dNrAQEBBgEB/wQGAwQHAAOA
+MA0GCSqGSIb3DQEBBQUAA4GBABSRGBX79EQTsVIQ9xY1Xo60brSPSWtWS3MiUFW9
+pG2cnCflqijH+pTYbaGV+pC9s7vkm1rUxE5sjBBIqHdFJtQCzqmwhbyyt70XazRN
+2+rJ+/w5/hGfR6WEdWGyTLUbOltkWeWMtzYmeEu+4nXloUXHxYkqlxH7JkMKeq18
+nz7p
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_07_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRDCCAa2gAwIBAgIJANV8hSQH4qn7MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjIwWhcNMTYwNjE4MTEzMjIwWjBIMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEnMCUGA1UEAxQeRW50aXR5IENlcnQgbWF0
+Y2hfMDcgY29tYjEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMfip/GsTQms
+OemRWcUSIfibcdsv+n4MWXeGratPvB22uHlWzHxtF9zd6iRhgimC72EWkOzDPg0p
+TrSRFnflbc8CAwEAAaOBhTCBgjArBgwqhjoAAe3TawEBAQEBAf8EGDAWDBQxMTEx
+MTExMS0yMjIyMjItMy0wMTAbBgwqhjoAAe3TawEBAQQBAf8ECDAGAgQRAAAGMBsG
+DCqGOgAB7dNrAQEBBQEB/wQIMAYCBHAAAAEwGQYMKoY6AAHt02sBAQEGAQH/BAYD
+BAcAA4AwDQYJKoZIhvcNAQEFBQADgYEAgcrSH3Gd+wFzGKjDHEAl50Cz0DFiPjd1
+K23+tu/Y0u0YKDA+EUXVmTsDzTcqBfkfEJOx981+DP8vKZ/SeoyzmTlDFtorHMXg
+dreHhRzPYGHGQWWZIZ8nWMxLSgClb1e1ulJ+gueGtcb9IqJ87nYBliNQYsweB0jA
+AM8y1B2tbLQ=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_07_comb1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRDCCAa2gAwIBAgIJANV8hSQH4qn7MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjIwWhcNMTYwNjE4MTEzMjIwWjBIMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEnMCUGA1UEAxQeRW50aXR5IENlcnQgbWF0
+Y2hfMDcgY29tYjEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMfip/GsTQms
+OemRWcUSIfibcdsv+n4MWXeGratPvB22uHlWzHxtF9zd6iRhgimC72EWkOzDPg0p
+TrSRFnflbc8CAwEAAaOBhTCBgjArBgwqhjoAAe3TawEBAQEBAf8EGDAWDBQxMTEx
+MTExMS0yMjIyMjItMy0wMTAbBgwqhjoAAe3TawEBAQQBAf8ECDAGAgQRAAAGMBsG
+DCqGOgAB7dNrAQEBBQEB/wQIMAYCBHAAAAEwGQYMKoY6AAHt02sBAQEGAQH/BAYD
+BAcAA4AwDQYJKoZIhvcNAQEFBQADgYEAgcrSH3Gd+wFzGKjDHEAl50Cz0DFiPjd1
+K23+tu/Y0u0YKDA+EUXVmTsDzTcqBfkfEJOx981+DP8vKZ/SeoyzmTlDFtorHMXg
+dreHhRzPYGHGQWWZIZ8nWMxLSgClb1e1ulJ+gueGtcb9IqJ87nYBliNQYsweB0jA
+AM8y1B2tbLQ=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_08_all_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICGDCCAYGgAwIBAgIJANV8hSQH4qn8MA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjIwWhcNMTYwNjE4MTEzMjIwWjBLMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEqMCgGA1UEAxQhRW50aXR5IENlcnQgbWF0Y2hfMDggYWxs
+X2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL4MEW4R5XMuBtvPXvxd
+wJfqJJtipmcVUXWlor7SPg2aoGbC8H11ATUJbhSLkCLa5+5vqBUWmFZxD4z981rC
+fy8CAwEAAaNgMF4wGQYMKoY6AAHt02sBAQEGAQH/BAYDBAcMA4AwHQYDVR0OBBYE
+FHYva7l5mxnQyWvXveTddkcE+3qeMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0P
+AQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBAC44k7/QzrTAOYfLj9KDa5gr0H0v
+9jaRSKrFrv4FTrOrHLFyZrWVqyVlE/hfpOJ8bReLNjetNyI1HWkorWmlThehUnpR
+ozBLZbAYUaxYYxKMiMpr3EE8KuuI5/pVT+RLNCQdVlRk5kTRr3mGdeJwzugO43EU
+t2W0wqcII8P1jVq2
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_08_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIBrTCCAVegAwIBAgIJAO36oeKkdl2yMA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMSowKAYDVQQDFCFFbnRpdHkgQ2VydCBt
+YXRjaF8wOCBhbGxfY2FwcyAwIDAwHhcNMDYwNjIxMTEzMjIxWhcNMTYwNjE4MTEz
+MjIxWjBOMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQk
+RW50aXR5IENlcnQgbWF0Y2hfMDggc3lzdGVtX2NhcHMgMCAxMFwwDQYJKoZIhvcN
+AQEBBQADSwAwSAJBALhRVdfRwi2Jmajija9wjpyRKsq9jCYjZrPFGsy2y/EvAyZf
+8CRSB+kN7onhN4cYpIt4cIbpWO9ChLFnSP2qAHMCAwEAAaMbMBkwFwYMKoY6AAHt
+02sBAQEGAQH/BAQDAgIMMA0GCSqGSIb3DQEBBQUAA0EANcATz4mowtajpGltTBPy
++HTkN6gYUZTj2BHZ92bwbWDkcdVyQPLloc3ZIxdek5z/dsMRZDieSXR3zElR2Fmz
+Gw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICGDCCAYGgAwIBAgIJANV8hSQH4qn8MA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjIwWhcNMTYwNjE4MTEzMjIwWjBLMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEqMCgGA1UEAxQhRW50aXR5IENlcnQgbWF0Y2hfMDggYWxs
+X2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL4MEW4R5XMuBtvPXvxd
+wJfqJJtipmcVUXWlor7SPg2aoGbC8H11ATUJbhSLkCLa5+5vqBUWmFZxD4z981rC
+fy8CAwEAAaNgMF4wGQYMKoY6AAHt02sBAQEGAQH/BAYDBAcMA4AwHQYDVR0OBBYE
+FHYva7l5mxnQyWvXveTddkcE+3qeMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0P
+AQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBAC44k7/QzrTAOYfLj9KDa5gr0H0v
+9jaRSKrFrv4FTrOrHLFyZrWVqyVlE/hfpOJ8bReLNjetNyI1HWkorWmlThehUnpR
+ozBLZbAYUaxYYxKMiMpr3EE8KuuI5/pVT+RLNCQdVlRk5kTRr3mGdeJwzugO43EU
+t2W0wqcII8P1jVq2
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_08_system_caps.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBrTCCAVegAwIBAgIJAO36oeKkdl2yMA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMSowKAYDVQQDFCFFbnRpdHkgQ2VydCBt
+YXRjaF8wOCBhbGxfY2FwcyAwIDAwHhcNMDYwNjIxMTEzMjIxWhcNMTYwNjE4MTEz
+MjIxWjBOMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQk
+RW50aXR5IENlcnQgbWF0Y2hfMDggc3lzdGVtX2NhcHMgMCAxMFwwDQYJKoZIhvcN
+AQEBBQADSwAwSAJBALhRVdfRwi2Jmajija9wjpyRKsq9jCYjZrPFGsy2y/EvAyZf
+8CRSB+kN7onhN4cYpIt4cIbpWO9ChLFnSP2qAHMCAwEAAaMbMBkwFwYMKoY6AAHt
+02sBAQEGAQH/BAQDAgIMMA0GCSqGSIb3DQEBBQUAA0EANcATz4mowtajpGltTBPy
++HTkN6gYUZTj2BHZ92bwbWDkcdVyQPLloc3ZIxdek5z/dsMRZDieSXR3zElR2Fmz
+Gw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_09_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qn9MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjIxWhcNMTYwNjE4MTEzMjIxWjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMDkgc2luZ2xlX3NpZDEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMob
+G9nFLiw0NPthp6KuhEO7K+bevml+/D2tmFS7wCbzSseqNAI/C2cepLuqu61t6bUq
+Vvam5TMduog1j467mJ0CAwEAAaMfMB0wGwYMKoY6AAHt02sBAQEEAQH/BAgwBgIE
+EQAABjANBgkqhkiG9w0BAQUFAAOBgQArkmk9lehByOSezih9iNjndvhultP8s7ki
+scfGy+FmQ1ll/SKxxsAmQWye8zaKpeg8hIlNHMYbQoLoLUOfwhhK8LKeagq9lB1d
+tf6/M4sdp3BC52xRXgAy536cBpMEo4ewNnnj+SgXGxZtHHXRtGy+MM7jpbY5WQDz
++eKLb7ETkQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_09_single_sid1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qn9MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjIxWhcNMTYwNjE4MTEzMjIxWjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMDkgc2luZ2xlX3NpZDEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMob
+G9nFLiw0NPthp6KuhEO7K+bevml+/D2tmFS7wCbzSseqNAI/C2cepLuqu61t6bUq
+Vvam5TMduog1j467mJ0CAwEAAaMfMB0wGwYMKoY6AAHt02sBAQEEAQH/BAgwBgIE
+EQAABjANBgkqhkiG9w0BAQUFAAOBgQArkmk9lehByOSezih9iNjndvhultP8s7ki
+scfGy+FmQ1ll/SKxxsAmQWye8zaKpeg8hIlNHMYbQoLoLUOfwhhK8LKeagq9lB1d
+tf6/M4sdp3BC52xRXgAy536cBpMEo4ewNnnj+SgXGxZtHHXRtGy+MM7jpbY5WQDz
++eKLb7ETkQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_10_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qn+MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjIyWhcNMTYwNjE4MTEzMjIyWjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMTAgc2luZ2xlX3ZpZDEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOpX
+tLPD/WLNoTZLJvH5aAcu9HxDvxWl4R/Fc/gc6Or3iAO896PG5nI8NTOBxEJyCJvw
+1Edx6qZzbWi7xGU/5eMCAwEAAaMfMB0wGwYMKoY6AAHt02sBAQEFAQH/BAgwBgIE
+cAAAATANBgkqhkiG9w0BAQUFAAOBgQAUrn1fGP2Wm5+gAxA94I+MI7crXaNPHp+7
+S0HrfuVf4Y5t6EF1U4Vp09n2o7nndkSStH0iy7eMfL+DfjsGw8ND66n2ZOBcp3c9
+W/I8GNcLmjPjPcyzg8vFVqZ4oODfv/6Qeqtp0jJxwDJKb6fpejbCMnavo6DsVG6E
+7E6NYX5n2w==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_10_single_vid1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4zCCAUygAwIBAgIJANV8hSQH4qn+MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjIyWhcNMTYwNjE4MTEzMjIyWjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMTAgc2luZ2xlX3ZpZDEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOpX
+tLPD/WLNoTZLJvH5aAcu9HxDvxWl4R/Fc/gc6Or3iAO896PG5nI8NTOBxEJyCJvw
+1Edx6qZzbWi7xGU/5eMCAwEAAaMfMB0wGwYMKoY6AAHt02sBAQEFAQH/BAgwBgIE
+cAAAATANBgkqhkiG9w0BAQUFAAOBgQAUrn1fGP2Wm5+gAxA94I+MI7crXaNPHp+7
+S0HrfuVf4Y5t6EF1U4Vp09n2o7nndkSStH0iy7eMfL+DfjsGw8ND66n2ZOBcp3c9
+W/I8GNcLmjPjPcyzg8vFVqZ4oODfv/6Qeqtp0jJxwDJKb6fpejbCMnavo6DsVG6E
+7E6NYX5n2w==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_11_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIBtDCCAV6gAwIBAgIJALo3qc1CAOvlMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS0wKwYDVQQDFCRFbnRpdHkgQ2VydCBt
+YXRjaF8xMSBzaW5nbGVfc2lkMSAwIDAwHhcNMDYwNjIxMTEzMjIzWhcNMTYwNjE4
+MTEzMjIzWjBOMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UE
+AxQkRW50aXR5IENlcnQgbWF0Y2hfMTEgc2luZ2xlX3ZpZDEgMCAxMFwwDQYJKoZI
+hvcNAQEBBQADSwAwSAJBALUbArEyGePxa3+UY2m5dzxs3PZY8iq9oVMAuHkRF9ny
+cHiLwx+eVuvzLHzpm1qTCrztMeen2u+tjzCTrwLGgNECAwEAAaMfMB0wGwYMKoY6
+AAHt02sBAQEFAQH/BAgwBgIEcAAAATANBgkqhkiG9w0BAQUFAANBAG9CdFzX9Vxy
+UA3bkQXVBNiyQq9wDjAHHdu4CLKAsgI9mbG7kqJYLHNVKwS/2W0wD1owseR5mdnb
+eVBjQYJz5Gw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICJjCCAY+gAwIBAgIJANV8hSQH4qn/MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjIzWhcNMTYwNjE4MTEzMjIzWjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMTEgc2luZ2xlX3NpZDEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALng
+1q7JJnZqpBGLi558+81qgZRkLyQPIKicp7ZHxMb8AIMUEcYvdDc1p8F5DBR2KwYT
+/wnQmbPA/pLjuRUWd/UCAwEAAaNiMGAwGwYMKoY6AAHt02sBAQEEAQH/BAgwBgIE
+EQAABjAdBgNVHQ4EFgQU6rd7zR1wi3sRUpivsTx5NkNYf80wEgYDVR0TAQH/BAgw
+BgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQEFBQADgYEAKTh7NVoc
+6VGpDx75giiw/UQDPaiByoNw/3JE0Q66bEJvjrtMByWYiDkamdWsF4/JdPja3EG7
+1GlbKhuWrw6BGr7KHumlQYDZVwv0ac8fE5EFE3O6U6qmmgkz36RmacLX9Fw05dU6
+6kNKyTf9uRort2iS6sleYGY9JkCuBrXEKEo=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_11_single_sid1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICJjCCAY+gAwIBAgIJANV8hSQH4qn/MA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjIzWhcNMTYwNjE4MTEzMjIzWjBOMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWF0
+Y2hfMTEgc2luZ2xlX3NpZDEgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALng
+1q7JJnZqpBGLi558+81qgZRkLyQPIKicp7ZHxMb8AIMUEcYvdDc1p8F5DBR2KwYT
+/wnQmbPA/pLjuRUWd/UCAwEAAaNiMGAwGwYMKoY6AAHt02sBAQEEAQH/BAgwBgIE
+EQAABjAdBgNVHQ4EFgQU6rd7zR1wi3sRUpivsTx5NkNYf80wEgYDVR0TAQH/BAgw
+BgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQEFBQADgYEAKTh7NVoc
+6VGpDx75giiw/UQDPaiByoNw/3JE0Q66bEJvjrtMByWYiDkamdWsF4/JdPja3EG7
+1GlbKhuWrw6BGr7KHumlQYDZVwv0ac8fE5EFE3O6U6qmmgkz36RmacLX9Fw05dU6
+6kNKyTf9uRort2iS6sleYGY9JkCuBrXEKEo=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_11_single_vid1.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBtDCCAV6gAwIBAgIJALo3qc1CAOvlMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS0wKwYDVQQDFCRFbnRpdHkgQ2VydCBt
+YXRjaF8xMSBzaW5nbGVfc2lkMSAwIDAwHhcNMDYwNjIxMTEzMjIzWhcNMTYwNjE4
+MTEzMjIzWjBOMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEtMCsGA1UE
+AxQkRW50aXR5IENlcnQgbWF0Y2hfMTEgc2luZ2xlX3ZpZDEgMCAxMFwwDQYJKoZI
+hvcNAQEBBQADSwAwSAJBALUbArEyGePxa3+UY2m5dzxs3PZY8iq9oVMAuHkRF9ny
+cHiLwx+eVuvzLHzpm1qTCrztMeen2u+tjzCTrwLGgNECAwEAAaMfMB0wGwYMKoY6
+AAHt02sBAQEFAQH/BAgwBgIEcAAAATANBgkqhkiG9w0BAQUFAANBAG9CdFzX9Vxy
+UA3bkQXVBNiyQq9wDjAHHdu4CLKAsgI9mbG7kqJYLHNVKwS/2W0wD1owseR5mdnb
+eVBjQYJz5Gw=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_12_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3zCCAUigAwIBAgIJANV8hSQH4qoAMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjI0WhcNMTYwNjE4MTEzMjI0WjBMMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjErMCkGA1UEAxQiRW50aXR5IENlcnQgbWF0
+Y2hfMTIgdXNlcl9jYXBzIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDnmeyF
+lwG2orJxkutgS1SY1mjjxn4vzcxQpEcJjeJP4VEd89N/FMOkO5x5k9k6eDvWDL7S
+oujbBSJGYbj/KNYxAgMBAAGjHTAbMBkGDCqGOgAB7dNrAQEBBgEB/wQGAwQHAAOA
+MA0GCSqGSIb3DQEBBQUAA4GBACgwJBijeCzkEnNz022fCtUuRMarNJxDcQtTxQBz
+aMGpCDAO4GpVLrbXaiknw5L88gGbRaiWjOiESd2mOMhZref7ctTfsQTTO5VY/UTv
+713i+g060ooF3uA45WA17Dm6Z1jf9WDfsZFESWUrgTxiOqH55ofTXnjbP8/yHBk+
+OQYv
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_12_user_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3zCCAUigAwIBAgIJANV8hSQH4qoAMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjI0WhcNMTYwNjE4MTEzMjI0WjBMMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjErMCkGA1UEAxQiRW50aXR5IENlcnQgbWF0
+Y2hfMTIgdXNlcl9jYXBzIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDnmeyF
+lwG2orJxkutgS1SY1mjjxn4vzcxQpEcJjeJP4VEd89N/FMOkO5x5k9k6eDvWDL7S
+oujbBSJGYbj/KNYxAgMBAAGjHTAbMBkGDCqGOgAB7dNrAQEBBgEB/wQGAwQHAAOA
+MA0GCSqGSIb3DQEBBQUAA4GBACgwJBijeCzkEnNz022fCtUuRMarNJxDcQtTxQBz
+aMGpCDAO4GpVLrbXaiknw5L88gGbRaiWjOiESd2mOMhZref7ctTfsQTTO5VY/UTv
+713i+g060ooF3uA45WA17Dm6Z1jf9WDfsZFESWUrgTxiOqH55ofTXnjbP8/yHBk+
+OQYv
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_13_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+-----BEGIN CERTIFICATE-----
+MIIBlTCCAT+gAwIBAgIJANfE4i8EoH0sMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS0wKwYDVQQDFCRFbnRpdHkgQ2VydCBt
+YXRjaF8xMyBzeXN0ZW1fY2FwcyAwIDEwHhcNMDYwNjIxMTEzMjI1WhcNMTYwNjE4
+MTEzMjI1WjBQMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UE
+AxQmRW50aXR5IENlcnQgbWF0Y2hfMTMgdW5jb25zdHJhaW5lZCAwIDIwXDANBgkq
+hkiG9w0BAQEFAANLADBIAkEAu3TF2vf8/ic1nTH1+lrW6KEwcggOxuIMX2JNRteU
+7W5f4SiKkdqM9U7b6JKeNPRuC8k5JekK9CqpO1VNRHmoyQIDAQABMA0GCSqGSIb3
+DQEBBQUAA0EAsSgMx81vZGuo1AgPwrk4VMiBOGqZcwPi6tC3F4UX1TVOUQxPoKs7
+qpTJgPYT0rMecfXlqS7ixq4tDwyJr3uzRg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIB9TCCAZ+gAwIBAgIJAOOp4xD7pqkLMA0GCSqGSIb3DQEBBQUAMFAxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS8wLQYDVQQDFCZFbnRpdHkgQ2VydCBt
+YXRjaF8xMyB1bmNvbnN0cmFpbmVkIDAgMDAeFw0wNjA2MjExMTMyMjVaFw0xNjA2
+MTgxMTMyMjVaME4xCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS0wKwYD
+VQQDFCRFbnRpdHkgQ2VydCBtYXRjaF8xMyBzeXN0ZW1fY2FwcyAwIDEwXDANBgkq
+hkiG9w0BAQEFAANLADBIAkEAx2w9tyZStpNvHnJxtGVaT0jWRRYkhHDZbiFPeA4G
+rXspZ2iwy+JRw0gdS0aLmDCx8elKtzfw7N6DsNzWUrtygQIDAQABo14wXDAXBgwq
+hjoAAe3TawEBAQYBAf8EBAMCAgwwHQYDVR0OBBYEFPYdnDo1YDK7LD/8a1DjLI3H
+falcMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3
+DQEBBQUAA0EAnsNcfi+Yc53Zai0NSRvEAfcqCfmey/s6x2S67V/QDGo4+C3iWgKy
+KpxwJLSx4A73WMNfzfU3UYbFvI86U9uMKA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICAjCCAWugAwIBAgIJANV8hSQH4qoBMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI0WhcNMTYwNjE4MTEzMjI0WjBQMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgbWF0Y2hfMTMgdW5j
+b25zdHJhaW5lZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAzsDUcciCvn3N
+XqE/n5xDAy9yJSN32wnJHsuTzanxqjTEAhJvrt1Z0WkAygr8oICOyWfbGlbVVGU+
+cL0nuh5XQwIDAQABo0UwQzAdBgNVHQ4EFgQU+qv+2NDJDCUSWX0oyTTpManMsEMw
+EgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQEF
+BQADgYEAhYGpSQeh2ES98s48Hr5obC1safmv7DzOW5GR9szjx2Dsh09NZytaHc4u
+P80skIyCY1QGm+brvGYsTsyobKgfnTNNwC0ucV6eJ6HRDo0eZWqPrjYq18fPrZYY
+AtzH5SSpBzCPnC66wgMS3VDalepbvqKmiLKoOn5lo2LebREu/vE=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_13_system_caps.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB9TCCAZ+gAwIBAgIJAOOp4xD7pqkLMA0GCSqGSIb3DQEBBQUAMFAxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS8wLQYDVQQDFCZFbnRpdHkgQ2VydCBt
+YXRjaF8xMyB1bmNvbnN0cmFpbmVkIDAgMDAeFw0wNjA2MjExMTMyMjVaFw0xNjA2
+MTgxMTMyMjVaME4xCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS0wKwYD
+VQQDFCRFbnRpdHkgQ2VydCBtYXRjaF8xMyBzeXN0ZW1fY2FwcyAwIDEwXDANBgkq
+hkiG9w0BAQEFAANLADBIAkEAx2w9tyZStpNvHnJxtGVaT0jWRRYkhHDZbiFPeA4G
+rXspZ2iwy+JRw0gdS0aLmDCx8elKtzfw7N6DsNzWUrtygQIDAQABo14wXDAXBgwq
+hjoAAe3TawEBAQYBAf8EBAMCAgwwHQYDVR0OBBYEFPYdnDo1YDK7LD/8a1DjLI3H
+falcMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3
+DQEBBQUAA0EAnsNcfi+Yc53Zai0NSRvEAfcqCfmey/s6x2S67V/QDGo4+C3iWgKy
+KpxwJLSx4A73WMNfzfU3UYbFvI86U9uMKA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_13_unconstrained.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIICAjCCAWugAwIBAgIJANV8hSQH4qoBMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI0WhcNMTYwNjE4MTEzMjI0WjBQMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgbWF0Y2hfMTMgdW5j
+b25zdHJhaW5lZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAzsDUcciCvn3N
+XqE/n5xDAy9yJSN32wnJHsuTzanxqjTEAhJvrt1Z0WkAygr8oICOyWfbGlbVVGU+
+cL0nuh5XQwIDAQABo0UwQzAdBgNVHQ4EFgQU+qv+2NDJDCUSWX0oyTTpManMsEMw
+EgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQEF
+BQADgYEAhYGpSQeh2ES98s48Hr5obC1safmv7DzOW5GR9szjx2Dsh09NZytaHc4u
+P80skIyCY1QGm+brvGYsTsyobKgfnTNNwC0ucV6eJ6HRDo0eZWqPrjYq18fPrZYY
+AtzH5SSpBzCPnC66wgMS3VDalepbvqKmiLKoOn5lo2LebREu/vE=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/match_13_unconstrained.0.2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBlTCCAT+gAwIBAgIJANfE4i8EoH0sMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS0wKwYDVQQDFCRFbnRpdHkgQ2VydCBt
+YXRjaF8xMyBzeXN0ZW1fY2FwcyAwIDEwHhcNMDYwNjIxMTEzMjI1WhcNMTYwNjE4
+MTEzMjI1WjBQMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEvMC0GA1UE
+AxQmRW50aXR5IENlcnQgbWF0Y2hfMTMgdW5jb25zdHJhaW5lZCAwIDIwXDANBgkq
+hkiG9w0BAQEFAANLADBIAkEAu3TF2vf8/ic1nTH1+lrW6KEwcggOxuIMX2JNRteU
+7W5f4SiKkdqM9U7b6JKeNPRuC8k5JekK9CqpO1VNRHmoyQIDAQABMA0GCSqGSIb3
+DQEBBQUAA0EAsSgMx81vZGuo1AgPwrk4VMiBOGqZcwPi6tC3F4UX1TVOUQxPoKs7
+qpTJgPYT0rMecfXlqS7ixq4tDwyJr3uzRg==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_01_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCCAT+gAwIBAgIJANV8hSQH4qoCMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI2WhcNMTYwNjE4MTEzMjI2WjBQMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgbWlzbWF0Y2hfMDEg
+ZW1wdHlfZGV2cyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAxz+u1Kz4EWRG
+nV1BH4dJISDz4chqAU/K/qjY9iIMFxNjIiQy5K3j+xS6JnNxrfkwH8i3oXH9k0hJ
+RSxFnnnPgQIDAQABoxkwFzAVBgwqhjoAAe3TawEBAQEBAf8EAjAAMA0GCSqGSIb3
+DQEBBQUAA4GBAKY5iQtNh0aVhCVhprBFAOJwfjOL1JA+GB+Qlu0WGeTc7zXmvtzl
+QFG8XWjiW871tYWPvPVLIDJm1yXNoh+dG6thtWpox/qHgk7bfPjAHRpMevjj906K
+7sWXldYDIPTxE1hqPZgDM+M6Wrl5tVpxcKBi8m2fyZen34lqaK/jaOKU
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_01_empty_devs.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCCAT+gAwIBAgIJANV8hSQH4qoCMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI2WhcNMTYwNjE4MTEzMjI2WjBQMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgbWlzbWF0Y2hfMDEg
+ZW1wdHlfZGV2cyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAxz+u1Kz4EWRG
+nV1BH4dJISDz4chqAU/K/qjY9iIMFxNjIiQy5K3j+xS6JnNxrfkwH8i3oXH9k0hJ
+RSxFnnnPgQIDAQABoxkwFzAVBgwqhjoAAe3TawEBAQEBAf8EAjAAMA0GCSqGSIb3
+DQEBBQUAA4GBAKY5iQtNh0aVhCVhprBFAOJwfjOL1JA+GB+Qlu0WGeTc7zXmvtzl
+QFG8XWjiW871tYWPvPVLIDJm1yXNoh+dG6thtWpox/qHgk7bfPjAHRpMevjj906K
+7sWXldYDIPTxE1hqPZgDM+M6Wrl5tVpxcKBi8m2fyZen34lqaK/jaOKU
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_02_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCCAT+gAwIBAgIJANV8hSQH4qoDMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI2WhcNMTYwNjE4MTEzMjI2WjBQMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgbWlzbWF0Y2hfMDIg
+ZW1wdHlfc2lkcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAsTXLRMQSq2z5
+BJD2ULTZO6wHT3qQTSTwdT06TER824cMDvV5AM5FrKRBc3GOZgSjGLn9dACal5wH
+Jp3DQgyopQIDAQABoxkwFzAVBgwqhjoAAe3TawEBAQQBAf8EAjAAMA0GCSqGSIb3
+DQEBBQUAA4GBAFAWhfow2/xVmxXiXKa3sM+d6jaBFPbez7yjpieYNLZw9YM/1HVS
+6mWpFjlMBu7x2052+gLiooyeC6FNFe9tIsRnZY6SJXrE0aagcSMD30i4HbMl36pO
+aUG/IYOfg80HJ+3dcPStr4juEp+FH018STmWmL1eAHoeuBbRodMJVpcp
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_02_empty_sids.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCCAT+gAwIBAgIJANV8hSQH4qoDMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI2WhcNMTYwNjE4MTEzMjI2WjBQMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgbWlzbWF0Y2hfMDIg
+ZW1wdHlfc2lkcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAsTXLRMQSq2z5
+BJD2ULTZO6wHT3qQTSTwdT06TER824cMDvV5AM5FrKRBc3GOZgSjGLn9dACal5wH
+Jp3DQgyopQIDAQABoxkwFzAVBgwqhjoAAe3TawEBAQQBAf8EAjAAMA0GCSqGSIb3
+DQEBBQUAA4GBAFAWhfow2/xVmxXiXKa3sM+d6jaBFPbez7yjpieYNLZw9YM/1HVS
+6mWpFjlMBu7x2052+gLiooyeC6FNFe9tIsRnZY6SJXrE0aagcSMD30i4HbMl36pO
+aUG/IYOfg80HJ+3dcPStr4juEp+FH018STmWmL1eAHoeuBbRodMJVpcp
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_03_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCCAT+gAwIBAgIJANV8hSQH4qoEMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI3WhcNMTYwNjE4MTEzMjI3WjBQMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgbWlzbWF0Y2hfMDMg
+ZW1wdHlfc2lkcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAoS9TuzwZX2Fl
+OZ3I83mKuG7dq6Tsy5TgVFNcFN64JFFykpLU5Qlc22duYrGnB/QP5hYlhUIeA52h
+cjcFG5LgWQIDAQABoxkwFzAVBgwqhjoAAe3TawEBAQQBAf8EAjAAMA0GCSqGSIb3
+DQEBBQUAA4GBADOqB9qxjYfaD/B/894nxjPNj6348LaV2xO+2d0MAyDLQcXt/HF6
+pg4t7FER/yCFgjK5gbZ4trTLhLzG+AQppSapa5f234iFay5Ta0qUcfe9Mq6xr9tG
+gGlPPFnuqUH7MoUm28zJARaT3ATJP9KlVpghCsb/pLcWaz/DXbcy7ByO
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_03_empty_sids.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCCAT+gAwIBAgIJANV8hSQH4qoEMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI3WhcNMTYwNjE4MTEzMjI3WjBQMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgbWlzbWF0Y2hfMDMg
+ZW1wdHlfc2lkcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAoS9TuzwZX2Fl
+OZ3I83mKuG7dq6Tsy5TgVFNcFN64JFFykpLU5Qlc22duYrGnB/QP5hYlhUIeA52h
+cjcFG5LgWQIDAQABoxkwFzAVBgwqhjoAAe3TawEBAQQBAf8EAjAAMA0GCSqGSIb3
+DQEBBQUAA4GBADOqB9qxjYfaD/B/894nxjPNj6348LaV2xO+2d0MAyDLQcXt/HF6
+pg4t7FER/yCFgjK5gbZ4trTLhLzG+AQppSapa5f234iFay5Ta0qUcfe9Mq6xr9tG
+gGlPPFnuqUH7MoUm28zJARaT3ATJP9KlVpghCsb/pLcWaz/DXbcy7ByO
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_04_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCCAT+gAwIBAgIJANV8hSQH4qoFMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI3WhcNMTYwNjE4MTEzMjI3WjBQMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgbWlzbWF0Y2hfMDQg
+ZW1wdHlfY2FwcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAvS4tyuyqzSec
+NU6ph8wFUhxJQZmXu1938jyMpVeo/uEmiMtAnyFvSP+Qba6J7NHSPrCgEJ8B2ash
+AYwSSn4NywIDAQABoxkwFzAVBgwqhjoAAe3TawEBAQYBAf8EAgMAMA0GCSqGSIb3
+DQEBBQUAA4GBADYwmSxNHOvUjs2RutIqxdjfpQfscP2+nSdMPsmg6M1Nvy15iI91
+LVfcN3C2Z2qQ5GwWwm58j/rRffyS4ArsSiR0koY/SsXH+pfsO0x+lvtggB2+frLA
+lO94dwxstAtRgOZBW+PtlVMiZhVs9qRLxoaq7idyVSAmRqhsnM3+Oepq
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_04_empty_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCCAT+gAwIBAgIJANV8hSQH4qoFMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI3WhcNMTYwNjE4MTEzMjI3WjBQMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEvMC0GA1UEAxQmRW50aXR5IENlcnQgbWlzbWF0Y2hfMDQg
+ZW1wdHlfY2FwcyAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAvS4tyuyqzSec
+NU6ph8wFUhxJQZmXu1938jyMpVeo/uEmiMtAnyFvSP+Qba6J7NHSPrCgEJ8B2ash
+AYwSSn4NywIDAQABoxkwFzAVBgwqhjoAAe3TawEBAQYBAf8EAgMAMA0GCSqGSIb3
+DQEBBQUAA4GBADYwmSxNHOvUjs2RutIqxdjfpQfscP2+nSdMPsmg6M1Nvy15iI91
+LVfcN3C2Z2qQ5GwWwm58j/rRffyS4ArsSiR0koY/SsXH+pfsO0x+lvtggB2+frLA
+lO94dwxstAtRgOZBW+PtlVMiZhVs9qRLxoaq7idyVSAmRqhsnM3+Oepq
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_05_bad_single_dev.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8TCCAVqgAwIBAgIJANV8hSQH4qoGMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI4WhcNMTYwNjE4MTEzMjI4WjBUMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEzMDEGA1UEAxQqRW50aXR5IENlcnQgbWlzbWF0Y2hfMDUg
+YmFkX3NpbmdsZV9kZXYgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKX3k0Ty
+5Bg39SLzIXXBb8Pfc17FNpchl9R4d7001kM2lOiEUSux7BP1lr247xhm6VeQDwKH
+pZNYTBBclTl3j2UCAwEAAaMwMC4wLAYMKoY6AAHt02sBAQEBAQH/BBkwFwwVVEhJ
+UyBTSE9VTEQgTk9UIE1BVENIMA0GCSqGSIb3DQEBBQUAA4GBAJ3zSMPs9Lsnev3/
+U6ud+zfTQ0OsAbfogM36P19IMm9CFYbN1+l4rruMQv9hWB0qGuAe8PPGQUSxRkn5
+uh2IgnVAzPO1dPWb0ocsQ5x30SggX/rL1Rgw1t84udGSn66/RNTUpXc/T9813qUh
+os5lCjKpeoErnRJW7tZ95QULE78Z
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_05_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8TCCAVqgAwIBAgIJANV8hSQH4qoGMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI4WhcNMTYwNjE4MTEzMjI4WjBUMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEzMDEGA1UEAxQqRW50aXR5IENlcnQgbWlzbWF0Y2hfMDUg
+YmFkX3NpbmdsZV9kZXYgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKX3k0Ty
+5Bg39SLzIXXBb8Pfc17FNpchl9R4d7001kM2lOiEUSux7BP1lr247xhm6VeQDwKH
+pZNYTBBclTl3j2UCAwEAAaMwMC4wLAYMKoY6AAHt02sBAQEBAQH/BBkwFwwVVEhJ
+UyBTSE9VTEQgTk9UIE1BVENIMA0GCSqGSIb3DQEBBQUAA4GBAJ3zSMPs9Lsnev3/
+U6ud+zfTQ0OsAbfogM36P19IMm9CFYbN1+l4rruMQv9hWB0qGuAe8PPGQUSxRkn5
+uh2IgnVAzPO1dPWb0ocsQ5x30SggX/rL1Rgw1t84udGSn66/RNTUpXc/T9813qUh
+os5lCjKpeoErnRJW7tZ95QULE78Z
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_06_bad_single_sid.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3jCCAUegAwIBAgIJANV8hSQH4qoHMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI5WhcNMTYwNjE4MTEzMjI5WjBUMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEzMDEGA1UEAxQqRW50aXR5IENlcnQgbWlzbWF0Y2hfMDYg
+YmFkX3NpbmdsZV9zaWQgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK1W7Tts
+qCljPy8H1pJtpyY/Qadq+7jInJQCPIRCkR8nC+4lHQ/yaXG/wTAZUpy7IPloyJrN
+5+JzemZT8tyA5uMCAwEAAaMdMBswGQYMKoY6AAHt02sBAQEEAQH/BAYwBAICwN4w
+DQYJKoZIhvcNAQEFBQADgYEAOgEHyPZOTM87uDCs8M8qKO5apQqYmHwT0ErvkdFf
+iIPlAZJvbVqPyE5WRNGRdn0fHBs2WK0WhPJ+pjF30JJW99sC82R5Yqp8zW+zXWuv
+Zv31sd55cmHRs5XcwAaKgSZxlQp2zq7leUYK9PYkUKUQOF5BA1vP7AlbgnY6OM9e
+//Y=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_06_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3jCCAUegAwIBAgIJANV8hSQH4qoHMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI5WhcNMTYwNjE4MTEzMjI5WjBUMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEzMDEGA1UEAxQqRW50aXR5IENlcnQgbWlzbWF0Y2hfMDYg
+YmFkX3NpbmdsZV9zaWQgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK1W7Tts
+qCljPy8H1pJtpyY/Qadq+7jInJQCPIRCkR8nC+4lHQ/yaXG/wTAZUpy7IPloyJrN
+5+JzemZT8tyA5uMCAwEAAaMdMBswGQYMKoY6AAHt02sBAQEEAQH/BAYwBAICwN4w
+DQYJKoZIhvcNAQEFBQADgYEAOgEHyPZOTM87uDCs8M8qKO5apQqYmHwT0ErvkdFf
+iIPlAZJvbVqPyE5WRNGRdn0fHBs2WK0WhPJ+pjF30JJW99sC82R5Yqp8zW+zXWuv
+Zv31sd55cmHRs5XcwAaKgSZxlQp2zq7leUYK9PYkUKUQOF5BA1vP7AlbgnY6OM9e
+//Y=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_07_bad_single_vid.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4DCCAUmgAwIBAgIJANV8hSQH4qoIMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI5WhcNMTYwNjE4MTEzMjI5WjBUMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEzMDEGA1UEAxQqRW50aXR5IENlcnQgbWlzbWF0Y2hfMDcg
+YmFkX3NpbmdsZV92aWQgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANepZM8Y
+LIKMlE24OCE4/Hr8DCKPPCacBpcfWdB6Q1mZ+klq8pzl7zed2hbN32PVJ3Fjd5jK
+A6IgYkYG7iHmsfMCAwEAAaMfMB0wGwYMKoY6AAHt02sBAQEFAQH/BAgwBgIEwAHA
+3jANBgkqhkiG9w0BAQUFAAOBgQCY9wthVIvCxDbP2uKpe9UYwOxVQpUlKP3fKJdV
+60NK2HYu+yPSt93N0B3mz6MLOMu/dXqYsJPaqFNYHj09mas0Am42QUOMm+rY7YBE
+4jNNGtpJ0AMPebPSiNtHszXgMTJLtlvSqIigtrgLdKrES/ppvk9fvvpAJ7cNIRU9
+2Un7AQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_07_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4DCCAUmgAwIBAgIJANV8hSQH4qoIMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjI5WhcNMTYwNjE4MTEzMjI5WjBUMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEzMDEGA1UEAxQqRW50aXR5IENlcnQgbWlzbWF0Y2hfMDcg
+YmFkX3NpbmdsZV92aWQgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANepZM8Y
+LIKMlE24OCE4/Hr8DCKPPCacBpcfWdB6Q1mZ+klq8pzl7zed2hbN32PVJ3Fjd5jK
+A6IgYkYG7iHmsfMCAwEAAaMfMB0wGwYMKoY6AAHt02sBAQEFAQH/BAgwBgIEwAHA
+3jANBgkqhkiG9w0BAQUFAAOBgQCY9wthVIvCxDbP2uKpe9UYwOxVQpUlKP3fKJdV
+60NK2HYu+yPSt93N0B3mz6MLOMu/dXqYsJPaqFNYHj09mas0Am42QUOMm+rY7YBE
+4jNNGtpJ0AMPebPSiNtHszXgMTJLtlvSqIigtrgLdKrES/ppvk9fvvpAJ7cNIRU9
+2Un7AQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_08_all_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICGzCCAYSgAwIBAgIJANV8hSQH4qoJMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjMwWhcNMTYwNjE4MTEzMjMwWjBOMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWlzbWF0Y2hfMDgg
+YWxsX2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOofeVWNb7btsemQ
+yMi2get/N+UxwccavDP/4J0vhF3Hmoj8/2ouLW7OrV8+l+vI0gaeGa+r1sHhjDmN
+zOwJgzECAwEAAaNgMF4wGQYMKoY6AAHt02sBAQEGAQH/BAYDBAcMA4AwHQYDVR0O
+BBYEFFdO67zwGpOX59yH93XjEAXcnf5wMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYD
+VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBAGPThRRcz2QRlE697o/DVNvi
+nYB9+0iPydAy/35JR3u/T8nj9a+UEUxdo34GPBiD9oz5cNUBOUzky1tX64pCB0c/
+2gEwJNXJDQ6+ZhaMprvaCTD0WTRlUvIZC6GXW7RyrwFYNtUeHfuWQnaikWxTD+Xy
+J6mwZhpC08sEeoMogI6o
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_08_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIBszCCAV2gAwIBAgIJALljq8GXwbxsMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS0wKwYDVQQDFCRFbnRpdHkgQ2VydCBt
+aXNtYXRjaF8wOCBhbGxfY2FwcyAwIDAwHhcNMDYwNjIxMTEzMjMwWhcNMTYwNjE4
+MTEzMjMwWjBRMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEwMC4GA1UE
+AxQnRW50aXR5IENlcnQgbWlzbWF0Y2hfMDggc3lzdGVtX2NhcHMgMCAxMFwwDQYJ
+KoZIhvcNAQEBBQADSwAwSAJBAO0NCbbrEm0bHRLzx9bPlwRqn+gMHdCrcZyeBGNU
+Eqn0vAXxcXZUh3SxoHXP3ETs1qcMOzrQH3U/Ta5LBNaDgWUCAwEAAaMbMBkwFwYM
+KoY6AAHt02sBAQEGAQH/BAQDAgIMMA0GCSqGSIb3DQEBBQUAA0EAZk4vDBH3gEqy
+YizhVrfp864Rv/AwBg6/CV5iAXm7zvnIy+ERisDGuEjgxxD0N1sKeKJyEzyFUpk5
+hemw0Cc7NA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICGzCCAYSgAwIBAgIJANV8hSQH4qoJMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjMwWhcNMTYwNjE4MTEzMjMwWjBOMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEtMCsGA1UEAxQkRW50aXR5IENlcnQgbWlzbWF0Y2hfMDgg
+YWxsX2NhcHMgMCAwMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOofeVWNb7btsemQ
+yMi2get/N+UxwccavDP/4J0vhF3Hmoj8/2ouLW7OrV8+l+vI0gaeGa+r1sHhjDmN
+zOwJgzECAwEAAaNgMF4wGQYMKoY6AAHt02sBAQEGAQH/BAYDBAcMA4AwHQYDVR0O
+BBYEFFdO67zwGpOX59yH93XjEAXcnf5wMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYD
+VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBQUAA4GBAGPThRRcz2QRlE697o/DVNvi
+nYB9+0iPydAy/35JR3u/T8nj9a+UEUxdo34GPBiD9oz5cNUBOUzky1tX64pCB0c/
+2gEwJNXJDQ6+ZhaMprvaCTD0WTRlUvIZC6GXW7RyrwFYNtUeHfuWQnaikWxTD+Xy
+J6mwZhpC08sEeoMogI6o
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_08_system_caps.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBszCCAV2gAwIBAgIJALljq8GXwbxsMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS0wKwYDVQQDFCRFbnRpdHkgQ2VydCBt
+aXNtYXRjaF8wOCBhbGxfY2FwcyAwIDAwHhcNMDYwNjIxMTEzMjMwWhcNMTYwNjE4
+MTEzMjMwWjBRMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjEwMC4GA1UE
+AxQnRW50aXR5IENlcnQgbWlzbWF0Y2hfMDggc3lzdGVtX2NhcHMgMCAxMFwwDQYJ
+KoZIhvcNAQEBBQADSwAwSAJBAO0NCbbrEm0bHRLzx9bPlwRqn+gMHdCrcZyeBGNU
+Eqn0vAXxcXZUh3SxoHXP3ETs1qcMOzrQH3U/Ta5LBNaDgWUCAwEAAaMbMBkwFwYM
+KoY6AAHt02sBAQEGAQH/BAQDAgIMMA0GCSqGSIb3DQEBBQUAA0EAZk4vDBH3gEqy
+YizhVrfp864Rv/AwBg6/CV5iAXm7zvnIy+ERisDGuEjgxxD0N1sKeKJyEzyFUpk5
+hemw0Cc7NA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_09_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4jCCAUugAwIBAgIJANV8hSQH4qoKMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjMxWhcNMTYwNjE4MTEzMjMxWjBPMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEuMCwGA1UEAxQlRW50aXR5IENlcnQgbWlz
+bWF0Y2hfMDkgdXNlcl9jYXBzIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQCs
+voTPyTI66oA6pdj2hAmrZX6vngxH78CKRiYKrJhy+8BdZ9eXnOz7W1Tp3GQrEb0X
+RATMIJl4/0um0uHtOJePAgMBAAGjHTAbMBkGDCqGOgAB7dNrAQEBBgEB/wQGAwQH
+AAOAMA0GCSqGSIb3DQEBBQUAA4GBAJgy7RLCNG8O3VUVSWpooDUqtO+iRmebFdG/
+KW+Xr5p0JZN22p2jQ0aCPCP2TlmkzfcQulvdQY8KE8Vfd56PIaaiDM+wfP8kz0YS
+JfoQljXzivAttmXDvpAI1z9VhGZRiyzOls/HZ8Bp6aVq5ggscFDkHSZ0IoJf2lOX
+yS+1fZgt
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_09_user_caps.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4jCCAUugAwIBAgIJANV8hSQH4qoKMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjMxWhcNMTYwNjE4MTEzMjMxWjBPMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEuMCwGA1UEAxQlRW50aXR5IENlcnQgbWlz
+bWF0Y2hfMDkgdXNlcl9jYXBzIDAgMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQCs
+voTPyTI66oA6pdj2hAmrZX6vngxH78CKRiYKrJhy+8BdZ9eXnOz7W1Tp3GQrEb0X
+RATMIJl4/0um0uHtOJePAgMBAAGjHTAbMBkGDCqGOgAB7dNrAQEBBgEB/wQGAwQH
+AAOAMA0GCSqGSIb3DQEBBQUAA4GBAJgy7RLCNG8O3VUVSWpooDUqtO+iRmebFdG/
+KW+Xr5p0JZN22p2jQ0aCPCP2TlmkzfcQulvdQY8KE8Vfd56PIaaiDM+wfP8kz0YS
+JfoQljXzivAttmXDvpAI1z9VhGZRiyzOls/HZ8Bp6aVq5ggscFDkHSZ0IoJf2lOX
+yS+1fZgt
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_10_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,38 @@
+-----BEGIN CERTIFICATE-----
+MIIBmTCCAUOgAwIBAgIJAOef9imgr4IrMA0GCSqGSIb3DQEBBQUAME8xCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS4wLAYDVQQDFCVFbnRpdHkgQ2VydCBt
+aXNtYXRjaF8xMCB1c2VyX2NhcHMgMCAxMB4XDTA2MDYyMTExMzIzMloXDTE2MDYx
+ODExMzIzMlowUzELMAkGA1UEBhMCVUsxEDAOBgNVBAoTB1N5bWJpYW4xMjAwBgNV
+BAMUKUVudGl0eSBDZXJ0IG1pc21hdGNoXzEwIHVuY29uc3RyYWluZWQgMCAyMFww
+DQYJKoZIhvcNAQEBBQADSwAwSAJBALWL+caaw0RbaZD7k+KWoyFTs7oZ8+fjYytR
+XVU3lKlxuio4aEPE7E4RZ9IhD3VI8JumclKt2DVfQgHsfvn+950CAwEAATANBgkq
+hkiG9w0BAQUFAANBAA05uQJk6Pc/GtMaRRCC9PmGYkHcqsCPGIJaGCuqZQ7S20At
+s+z2rqNgoQgF8sVMIJUEj2OysXboqO1U4zdxahg=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIB+zCCAaWgAwIBAgIJANuY0w9+ls4bMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTIwMAYDVQQDFClFbnRpdHkgQ2VydCBt
+aXNtYXRjaF8xMCB1bmNvbnN0cmFpbmVkIDAgMDAeFw0wNjA2MjExMTMyMzJaFw0x
+NjA2MTgxMTMyMzJaME8xCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS4w
+LAYDVQQDFCVFbnRpdHkgQ2VydCBtaXNtYXRjaF8xMCB1c2VyX2NhcHMgMCAxMFww
+DQYJKoZIhvcNAQEBBQADSwAwSAJBANjmt2PHYaDOkGVqnjnNqsBNd4P0gkj8hcvD
+oApuNqMnJu3YEwAdOJxY0/Pbo+BF6vnSTIGKkASHvEKsIXPrAYsCAwEAAaNgMF4w
+GQYMKoY6AAHt02sBAQEGAQH/BAYDBAcAA4AwHQYDVR0OBBYEFEzqr580o8nzZCLm
++4A/Uc6M0c6CMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0G
+CSqGSIb3DQEBBQUAA0EArkMawU9vsjW4isTUUu13WivHOBzNB9m5ofBxFit8/IPi
+cr0dMxoLByeHsxJtrFDquT2ReVMxqzfsMMSmfEicxw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICDjCCAXegAwIBAgIJANV8hSQH4qoLMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjMxWhcNMTYwNjE4MTEzMjMxWjBTMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEyMDAGA1UEAxQpRW50aXR5IENlcnQgbWlz
+bWF0Y2hfMTAgdW5jb25zdHJhaW5lZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBI
+AkEAutmrA0F+N8GeFooqJ7qtZC/dg9udirPy+nw02IbgO2NwE3h/jbSdPQSo3x6V
+lDM6V8T5/UUILTI4NOe/Kzz3aQIDAQABo0UwQzAdBgNVHQ4EFgQUvC7j5fFNOiZ0
+zmWOGLU82a5dg3EwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQw
+DQYJKoZIhvcNAQEFBQADgYEAP/vhsja3YjxcCASMHoiRwX8Ice4tIo8Gt5SZ64a2
+XE6h9vr97IjWnuNb5f7cX35nRrM6lrlo6MTM6KKxRpw7hdcC7HQZFQfPoBfNBFL2
+akcX9d8ajXLoZAoxbBNc+50bloinScrL0lSSrkiHQmcDkYuBDn0QrelbaNlxjLHq
+vTc=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_10_unconstrained.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICDjCCAXegAwIBAgIJANV8hSQH4qoLMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDYwNjIxMTEzMjMxWhcNMTYwNjE4MTEzMjMxWjBTMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEyMDAGA1UEAxQpRW50aXR5IENlcnQgbWlz
+bWF0Y2hfMTAgdW5jb25zdHJhaW5lZCAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBI
+AkEAutmrA0F+N8GeFooqJ7qtZC/dg9udirPy+nw02IbgO2NwE3h/jbSdPQSo3x6V
+lDM6V8T5/UUILTI4NOe/Kzz3aQIDAQABo0UwQzAdBgNVHQ4EFgQUvC7j5fFNOiZ0
+zmWOGLU82a5dg3EwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQw
+DQYJKoZIhvcNAQEFBQADgYEAP/vhsja3YjxcCASMHoiRwX8Ice4tIo8Gt5SZ64a2
+XE6h9vr97IjWnuNb5f7cX35nRrM6lrlo6MTM6KKxRpw7hdcC7HQZFQfPoBfNBFL2
+akcX9d8ajXLoZAoxbBNc+50bloinScrL0lSSrkiHQmcDkYuBDn0QrelbaNlxjLHq
+vTc=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_10_unconstrained.0.2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBmTCCAUOgAwIBAgIJAOef9imgr4IrMA0GCSqGSIb3DQEBBQUAME8xCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS4wLAYDVQQDFCVFbnRpdHkgQ2VydCBt
+aXNtYXRjaF8xMCB1c2VyX2NhcHMgMCAxMB4XDTA2MDYyMTExMzIzMloXDTE2MDYx
+ODExMzIzMlowUzELMAkGA1UEBhMCVUsxEDAOBgNVBAoTB1N5bWJpYW4xMjAwBgNV
+BAMUKUVudGl0eSBDZXJ0IG1pc21hdGNoXzEwIHVuY29uc3RyYWluZWQgMCAyMFww
+DQYJKoZIhvcNAQEBBQADSwAwSAJBALWL+caaw0RbaZD7k+KWoyFTs7oZ8+fjYytR
+XVU3lKlxuio4aEPE7E4RZ9IhD3VI8JumclKt2DVfQgHsfvn+950CAwEAATANBgkq
+hkiG9w0BAQUFAANBAA05uQJk6Pc/GtMaRRCC9PmGYkHcqsCPGIJaGCuqZQ7S20At
+s+z2rqNgoQgF8sVMIJUEj2OysXboqO1U4zdxahg=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/mismatch_10_user_caps.0.1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB+zCCAaWgAwIBAgIJANuY0w9+ls4bMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
+BAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMTIwMAYDVQQDFClFbnRpdHkgQ2VydCBt
+aXNtYXRjaF8xMCB1bmNvbnN0cmFpbmVkIDAgMDAeFw0wNjA2MjExMTMyMzJaFw0x
+NjA2MTgxMTMyMzJaME8xCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMS4w
+LAYDVQQDFCVFbnRpdHkgQ2VydCBtaXNtYXRjaF8xMCB1c2VyX2NhcHMgMCAxMFww
+DQYJKoZIhvcNAQEBBQADSwAwSAJBANjmt2PHYaDOkGVqnjnNqsBNd4P0gkj8hcvD
+oApuNqMnJu3YEwAdOJxY0/Pbo+BF6vnSTIGKkASHvEKsIXPrAYsCAwEAAaNgMF4w
+GQYMKoY6AAHt02sBAQEGAQH/BAYDBAcAA4AwHQYDVR0OBBYEFEzqr580o8nzZCLm
++4A/Uc6M0c6CMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0G
+CSqGSIb3DQEBBQUAA0EArkMawU9vsjW4isTUUu13WivHOBzNB9m5ofBxFit8/IPi
+cr0dMxoLByeHsxJtrFDquT2ReVMxqzfsMMSmfEicxw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/ocsp_02_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB2TCCAUKgAwIBAgIJANV8hSQH4qoMMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjMzWhcNMTYwNjE4MTEzMjMzWjBNMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEsMCoGA1UEAxQjRW50aXR5IENlcnQgb2NzcF8wMiBzaW5n
+bGVfc2lkMSAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAsbynYDY23FC3gyVB
+5joRqX2qypvhizJMp8VXnJi/BpwLNJN/af9dYkv6642mtN2Ax650MMA3QlOIwGck
+PWXtDwIDAQABox8wHTAbBgwqhjoAAe3TawEBAQQBAf8ECDAGAgQRAAAGMA0GCSqG
+SIb3DQEBBQUAA4GBAGt4x/Z0Cb5pm9vpzrhLrul1VAKhw+1Prq5Jb0CcBb/Z035R
+CVklRcLMDCyhbK7lURctIxKD6ZTHkHnLAzG/QL0tqpCbgl4bxWe4j/vfhbjSPEvE
+P2GaOcyG0nnL6ggCt/qJ+yDdVY3MkIXJy6C6Q7zrkm9OL6J5zyhKY+ii956+
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/ocsp_02_single_sid1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB2TCCAUKgAwIBAgIJANV8hSQH4qoMMA0GCSqGSIb3DQEBBQUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYwNjIxMTEzMjMzWhcNMTYwNjE4MTEzMjMzWjBNMQswCQYDVQQGEwJVSzEQMA4G
+A1UEChMHU3ltYmlhbjEsMCoGA1UEAxQjRW50aXR5IENlcnQgb2NzcF8wMiBzaW5n
+bGVfc2lkMSAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAsbynYDY23FC3gyVB
+5joRqX2qypvhizJMp8VXnJi/BpwLNJN/af9dYkv6642mtN2Ax650MMA3QlOIwGck
+PWXtDwIDAQABox8wHTAbBgwqhjoAAe3TawEBAQQBAf8ECDAGAgQRAAAGMA0GCSqG
+SIb3DQEBBQUAA4GBAGt4x/Z0Cb5pm9vpzrhLrul1VAKhw+1Prq5Jb0CcBb/Z035R
+CVklRcLMDCyhbK7lURctIxKD6ZTHkHnLAzG/QL0tqpCbgl4bxWe4j/vfhbjSPEvE
+P2GaOcyG0nnL6ggCt/qJ+yDdVY3MkIXJy6C6Q7zrkm9OL6J5zyhKY+ii956+
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/ocsp_03_chain_0.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICQzCCAaygAwIBAgIJANV8hSQH4qoNMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDEwMzAxMTIzMjMzWhcNMDEwMzMxMTIzMjMzWjBHMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEmMCQGA1UEAxQdRW50aXR5IENlcnQgb2Nz
+cF8wMyBjb21iMSAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAx79+RcpCvhsG
+FZX5y580RVMJyOpDv0ANkVWxiNDU+L8C+y8OkyXy7dvfL/XhtitEq6J+mjVHIHh0
+JgPNZrvLWQIDAQABo4GFMIGCMCsGDCqGOgAB7dNrAQEBAQEB/wQYMBYMFDExMTEx
+MTExLTIyMjIyMi0zLTAxMBsGDCqGOgAB7dNrAQEBBAEB/wQIMAYCBBEAAAYwGwYM
+KoY6AAHt02sBAQEFAQH/BAgwBgIEcAAAATAZBgwqhjoAAe3TawEBAQYBAf8EBgME
+BwADgDANBgkqhkiG9w0BAQUFAAOBgQASa6WFa+YW5Xdye7/XxGdowwGt1hRPFiel
+J6BTza/W7JLPzVG46nMw3jmMFDiy+qUUlcFr0aM3RDt0psBwJbZbbpBkiTWm6UWi
+sQs7UdvlI/KsLAmlKjN5iL10QRdddrvlMHLaCB4mK7dY7doD7RR4warqnaJg4FOc
+Y+SDClqHVA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/certs/ocsp_03_comb1.0.0.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICQzCCAaygAwIBAgIJANV8hSQH4qoNMA0GCSqGSIb3DQEBBQUAMDwxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3Qg
+LSBSU0EwHhcNMDEwMzAxMTIzMjMzWhcNMDEwMzMxMTIzMjMzWjBHMQswCQYDVQQG
+EwJVSzEQMA4GA1UEChMHU3ltYmlhbjEmMCQGA1UEAxQdRW50aXR5IENlcnQgb2Nz
+cF8wMyBjb21iMSAwIDAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAx79+RcpCvhsG
+FZX5y580RVMJyOpDv0ANkVWxiNDU+L8C+y8OkyXy7dvfL/XhtitEq6J+mjVHIHh0
+JgPNZrvLWQIDAQABo4GFMIGCMCsGDCqGOgAB7dNrAQEBAQEB/wQYMBYMFDExMTEx
+MTExLTIyMjIyMi0zLTAxMBsGDCqGOgAB7dNrAQEBBAEB/wQIMAYCBBEAAAYwGwYM
+KoY6AAHt02sBAQEFAQH/BAgwBgIEcAAAATAZBgwqhjoAAe3TawEBAQYBAf8EBgME
+BwADgDANBgkqhkiG9w0BAQUFAAOBgQASa6WFa+YW5Xdye7/XxGdowwGt1hRPFiel
+J6BTza/W7JLPzVG46nMw3jmMFDiy+qUUlcFr0aM3RDt0psBwJbZbbpBkiTWm6UWi
+sQs7UdvlI/KsLAmlKjN5iL10QRdddrvlMHLaCB4mK7dY7doD7RR4warqnaJg4FOc
+Y+SDClqHVA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/01_loader_capabilities_user_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAK4+9en8OmevaVz3hy1jvf+1Ozq0TVK0JfEXsn3k0XluLKab3Fzr
+3RDaJw26PDp9AWfDeQX3Racrz7ws1HpAkdECAwEAAQJBAIy3b+VcutYNROu9Qr+X
+M1OUSpboESHfNlzzpEQjTD/hMnnl2nv7pUhHG+bPK0LSOxf96+e6fUbUPYZegKoi
+FiECIQDa0GaAzhsrPdPlTG1qdORoZGU+v4v6lAsrY7BUcTDtLQIhAMvbmtgybdJH
+0zT3cwVwq+g9vrwcJunTkopjPlmggwW1AiBWi3DPZzWlv7mMitMH9R3WEEdfLyGt
+RVq5mZ9HdtGULQIgOVGO8TkErfpqBVuKKL5sZ4ls5sFXo6lMa8LJ1jOOg30CIGVu
+BuuJS/NItpjOTezyJzr67oGs1UYJu5kvqmbLy0Jr
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/02_protected_vid_mismatch_bad_single_vid.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAJo+aDfU7eB4/u7QWRY/NMc8YqosTl6sZRLnJzISGMpZ5u+dYUH8
+ASk9CCPl2H2ChGBR9b/Ayu4z0dvxkYn4GKECAwEAAQJAe4VMqqF/WgsrhQ4eub0m
+RANstADFRfXi/29TqTpq1ehIslMuCwdUmy9wDl2c37YgEcWGag72Lqd92q13p3jI
+vQIhAMwIgR27L6t4ddBi5qvp9GMumHXXkZ7IvP4hNFpsDUaTAiEAwYeAeIwBfVRk
+nMxAXAaXr7Bke+yCTtgC+4CAecbaEHsCIAwjeWMGbuiZqxCxwZ16tsJr1EA2igBT
+WwMXgKDcitGnAiEAsc4ApsBbDf7fgX/XEbWs32m8qG6fOjkUZGWnpDqiVskCIQCD
+sGus/x8ZPrF3RcOQdtzJkZO4mB1vHGeZbVVyBJORhw==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/03_protected_vid_match_single_vid1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBPAIBAAJBAMndThwW34HccoLolj6TfedX/s25i16a2DJUwKo19QNbeHnNak/8
+hiPAcRZN7tqlFdsJpSgJGK6P2rfJcmJrcYkCAwEAAQJALaK6Zd9F6DXOLYonbT4q
+2IIsOJYZy+l1tusyI0jPe1JrnX8F8t3NWOfQ7H5Ki6ODNe8LGjVNc2VveWatH7OF
+gQIhAO916I+oX4viUyES0x/VwdYBTpyaPA9Wl1Q/NqbFKMEfAiEA186hVsBt+dz7
+y4QL09Lh4xLrHoK8URKHrk0QMcskMFcCIQDqLVnYm6WM7DG1p242tNmSCscxGRhh
+O6JUbllo8GjxqwIhAJ0J5enE+cJbBnegTSMFUA73U1TOec7dFxLFTUWOt3TdAiEA
+incn9jCqDX4igC5tcdsev18l2QSji8FRfzTYJKnxdFM=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/04_protpuid_constr_sid_mismatch_single_sid1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBPQIBAAJBANo4pCg4DzFbQPcFA7YBbDK9FTpkkgSQrJgAZTqGZO9DdLH2gSEB
+1pyqtTWDqgn4d/MWr2OKOG/UO7ZSVEs2X2MCAwEAAQJBAMw3Y5Br3fPvlR1WaQGj
+1TCqeLo7sdZp2csp25HogX7SJBHJE+qLMRHyj0nlITifdjn1zT+6QT/2i/lzbyEw
+dIkCIQD2tlvzxekITI7e8E0ufGNOV7TndIVYeeS2DOJVvLex5wIhAOJvtHUsQDcF
+6ok6RVVftO6Yqh3lfvIXiaqrUGkxde8lAiEA3Y/X9I0AQpu+kyhrqBu9c1YA+PwD
+5PlTFMttWGIq9nECIQDDujzpX7OuHB4MOmM+Fblm2G2L5BkkGDZ2YRjjpM5FRQIh
+AMuwfchfKLLRgEv0RZCNAzDnR4DC71kVRTaaIpxTVRNy
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/05_protpuid_nonconstr_sid_match_unconstrained.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMrG+jRSK6AK7beyDdY2LLFW99rR8JLQ6MxOhUDJSAsMMYc+ya++
+81KHJZ5hnHu+u7ekn2q+r5MuXnFsWNdMHnUCAwEAAQJBAI+CjyVkWjekRGVTgHNw
+V+USdcvJ9QcTDw85KxmU2oXl0f6wKiQv/RE+sn++Wa1jzTqMTA93mXLaP8GavrRv
+awECIQD0pNSzuH/j7V2Nx2lJnwQVF0j/W2HUk2o5XtjzSGe3IQIhANQwoltagZV3
+FzndQeZ2hih8CC4KunK2oAAjPdViqMDVAiBu2zYrDiKdpNSsxzy1iKHv8LI6TC1j
+hz0uLAWBEEE3IQIgFndryVZk4Aly+Rp3Lsqf28t+JjnWkezKNhmFI4HFsl0CIAqv
+YgHTX3rqKB09MzmcXD+n/N+wOQDf9rX19L1wy0rw
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/06_nonprotpuid_constr_sid_match_single_sid1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMcC5IhncqiAm9QiQmrBMngbwawzX3/a6V8ZX5XvmhXWfjh6GDXn
+8BCSThgK0Itnw+FTWY+YBbSPAYagP+5QczECAwEAAQJAY8iThcE4wDwb5fV3j8dm
+4sooBYuMqrK8qK40Ox10CNYs5dK5KpXZ1WqohGbzlaI/6IxT6yepARsLNxfQAiIH
+AQIhAOjo/ds1wtaffU7GIYNT1I6izR8zr7z8m1ogJQwUqwvZAiEA2r2V3JrP5dei
+TeNR2hklaROsjeDph4FK2Bc2H0yGwxkCIQCyTSOBvF9jJIeuVXl0aymu5Cz5tPzV
+ReC8Fx2laPEkyQIgTk03bDTu3vQF4aPSFSSTQ74LMu6kKiGaTShh82pNg2ECIAg4
+NvR1bDCdklMapWqlai7J6YB3q/SWSvvxnmj0lXeu
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_01_bad_single_dev.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAMRYiBQJYbfzu6Wc5/98pCFShpDjQtiZsPrZ6OpaoVWNoGcTdhhN
+M4gQKGN6hFM3oD2mETPtH/3Mf6lL9+mW0wUCAwEAAQJBAKWmN3AIFjw20lo/zW87
+vdErKcJ1KYFJ8QlB7QJC4hglP2V+rWzffKdyspzRKGzOD9US8Om8y1HQmMFP45R8
+EcECIQD2tKVrZewfVdfpyNQF6hS4m677ZGfpneqg/JbfxHf6NQIhAMu+MJjGyyMQ
+RUOTC1SbLPez9Dbx2oCT11HnL8I5NQ+RAiEAjYhpdknMwtVevzKF4LbAGIDITFT4
+AGCmYKFIdSujoRkCIHIPQkN1Hum9RRlka3Zs/MqbGr/bu7g5i9RVOX5g6lyRAiBN
+QGFgY3qto4RScE6SclKX1fcoOZg/wDNI14ETsVaB6Q==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_01_single_dev1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAJ1nvkltTll9vA7uKGbXKttoPHdKIuXzdQe2kv6F22QwrWmdEWYD
+BK4pHK6O7j5aebAJmjEdXLqUkrz0X3FIpuECAwEAAQJAVsiNBGTMjtCg78Zk5hZ5
+nZCBze9FAG1TN9Z0gvoANOM4SeGKvZytDgBxkGRQ8abGBmqXUwYW+73rocLGH6HR
+8QIhAMtrkVGxppdvP01iPcaSIwgUNaejiD8zdh1FnHTA3ng9AiEAxhdXHv7vIwpY
+vd7OVhm8zkrgzvfYtKEisziC5uGyr3UCICYedS/i433zOeCNbVgdoHTuHJPagDif
+sx2PIt96GPZdAiBebn3/rrQ9Vg9b5D0k2nwhM5zbzVcnNLGgEk6E1g8iiQIhALmU
+y2Ug2J0lXJbGZYpMQ916Nblx/T2R3R6Hrd/e0Io2
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_02_bad_single_sid.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBPAIBAAJBAM/gf99rxChUCUCyU4Fl3DALl8jbfRRSUfkyHvFtB1Bj2LhZYyZj
+sGN7o79jfIx/UoM50Zth9OJJRSuYMNLh070CAwEAAQJBALp543viynZ63EoDLlG3
+tEwNOj3eV1fxeMOYqJVeft8m9It6rLTf9HjtTlw2WU1v/QK7/nEmB0oamljBi4an
+hOkCIQDpYy5aA/X2vgj5ox2BkQSgmWQja+MgFN+usaxDmxyLMwIhAOQEke5onHyI
+GYOREPHmWrsq+2lGdXwQ8TXlieorOaVPAiEAy4JjubR4dybwdpYotYF58nyvGEAM
+dj4dapydZPpNoocCIQCNnkkEyfRnZCB0lqTvmSLBHPEJcbmGVP97ehUuW6pyAQIg
+Ynl6q1KabLq5vJzvYSFduXipmiRjP1u10HVNWJX6ymo=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_02_single_sid1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMgZYhEZliUz3H3hgTlkPwXaNzBw21/1Dw41xA11qfiuv/Uqh88G
+oD2JNXPnsSKV+srhPOMWMERmAk68QoZRxxMCAwEAAQJARskz9/ilNOPzzFRJ8pOT
+9+4KOAi0km2OtegvQtOtHVuTuly4850jTKhL6TkEV14hdMrncDQufuU/JsQTa8ex
+gQIhAPYfu0UkO9EyQNzH8XFnveHLWnPcnoVE2sSv0i1rHh53AiEA0CDehzZ5STGr
+XZoQPzISTXAblgVHc0/jmVu+J6iYN0UCIQDdgquBy92GJstXqR+06CBuIh3zXuDQ
+oqqeEHuB4wFFewIgJUrudK3nF51lxlTXumsfam6/EqeJgPj8oDsXHIYSGD0CIAZa
+L/xLshD0vwRFAwT04xg2VBYymq/sWHVuRqhs2tiN
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_03_bad_single_vid.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOQIBAAJBAK8tA06MnkD1bBmaCZcNBt1SdHKFcWi8Spj8UbQH6bS/z8QymKzw
+mhEA+bC9STv31CFJgtqHcGN6AnasRB+O3FUCAwEAAQJAB+SmVn69jr3APjMTpYu/
+uG9DsflTT93UGqqb39nPbQZ4YOZTNqrd3P1iZ0SuLZ9unBi+9Hv73hPYH6GHXDev
+gQIhAOk0CjFf+gJ7Nc+98GF3deMwicCmA3DFvnQhj42QJiJhAiEAwEzTAKiW1rWA
+UKSY8DyyHxnljTd36vpuS+K1oz/+5nUCIG/aYBEyoa3S/wp3Zfa537dqrofSmM/c
+aO82sa4Kt9/BAiB3LSV3uwQAfOvRDrFZ8cPSUpJZOo8vKZVBonc/fWHUIQIgIeW7
+oXHRFZdFPfGB+Ri9j1arm5Fj+etXijhcSHZ+wNs=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_03_single_vid1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBANS6LkxJnTN2C4p4GJhK0sGG/zKMHyuOdY/gbLfq9iqAZL7EYzDg
+Xx/rkLmMWtOshqd+UBLshtBFaWuwc84kkQECAwEAAQJBALx9dASYvbgZgsRhAbn/
+optkWL+bNQtNIZIo02xrv0+L8ssedOkwC9xFMiKvvISmvIOnOVGbSzX7siNcyMS2
+CSECIQDze+4UMMmAu9MwcXJ5i9RgSTZ4gBSj5ds+W0svQZCNHQIhAN+pg4ay1L7u
+RQy92hoK3F44z00k1yRkvK05VB5Ep6I1AiAI9Rc2IPFYzhAf6RyIAi/m9uqNFlEs
+Emm1apBihav2tQIhANJoMPCFybg4hMLg044OS5NkFDi5gJ+fGRRIy0aSRbVFAiAD
+Rce/uOq5yoFDC4bWb9DTPgmXJQOoERxKaATm/S9jJw==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_04_empty_caps.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAK+SZs+orr1PvT1p9FWYwC0xIF65u/PwmnJpyjDlqAFwc81bD/5l
+bripJxgsdmp3LT0gJcj68Vm5SUoWm8uThFcCAwEAAQJAaNKnv2OesDhja79Ouawx
+UMn74ZJSvRnxnE29AeSbof9bcf9i9vUR+O3kMJ1FlPzAQcEQE/lNs57b5qyRYK6D
+gQIhAOgis4Q0qAq2MusvvSmez5sk8EPUGjf3xseMoVCxHazvAiEAwZ8Rjnfg0cgn
+ovorN1In4GgNAvNnOsouSIwmXN1ubxkCIGPyNOqSJVvfUJMUTdSyrN42jEAX/WXl
+h695LCdq6sT/AiA60NtAb+H3V9nShDQEhgxe+ryZHN9K2IfeudQdeZZGYQIhAIh9
+J9ha14TY0ScrK+RJaeStT6dmpn2tU43dyk8UWCBW
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_04_user_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAKx0pY8/5+jlor0NsIzN0O3xXS+vg6QkxEUPQKa6QiFtzXoEiTFq
+ZuDrXZfiHKTgGOU0rQoPpud5cTiPuTjg3FECAwEAAQJAK6Jf+XzL6suff4IlN5sj
+z/CQCW65OiDrYCXZz9W0wcwiK1XkTjkjPJFfbmfTXhGU/TOVxJDO26T72yhxO/ii
+2QIhANK5xIhxpvou8BY2X6dd87aE4U9VQDIpHmD+B+oxg/GPAiEA0YH4b5hfg/M3
+Bor9Gr9ry/aIXdu8uQFcZhhQeKjppB8CIQCRaxUPO68JM18HVRqJezJ2IBkEEEau
+1uVZ9bQsj2MITQIgTN6xNtDjith8QgxRHbVKagXEtxtevUrAij01mW/weeUCIFSu
+N3euSEzz46QedIooRVk1amFi5KK2B5QRnpfKRV60
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_05_empty_devs.1.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAKQJPojzdKUv0VqrnmMFmYGUA8JCsGBam+QYWwkFJaGjjSA4fGq6
+GasXKMDsGq/gfQQSnPSsDykWDtSkat6OJLMCAwEAAQJAKxSyc81cyTVxylpgUqlZ
+04pIInDZWbTyVEmBPzE23OhntODESRi8Ae+EscITjEURAJrzwwN0Pqi57b7v+hdz
+YQIhANA88Wk2YqthpDgUlCCMzLSXufGuK3l3iTEVXUOH05gfAiEAyajoWCErY6hJ
+2b/Q95p4qiz8kV3V2YtIFUb4LipLsO0CIQC1hOpLdIT+L9ceq5GT7ihjI/+KlPCA
+qZqFlsH9o+DmsQIgdnNXXoTFNrlf/54zAW1jmRnplP1YIns0cQMJvhwr75UCIEUh
+2el55kUF95pchZN5pg6otpM3ym8nWniooDODEMDE
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_05_multi_dev.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMtO16EAC+devhnqlr1OcAuOjjdzMcZyRZHes9JVBiPY7bdT63xK
+b6nStfUWCWpUEUYreb3OCE+7xwtQ21EEgLkCAwEAAQJAJt7SFzQdEoVoryfM3jDK
+90qwIiXiFGDwsCz2EHa1D9EokmOxs5LVo2ond7OCDjQZe0Q0h0D6Zd/SNosGdFQw
+CQIhAOfnUvAgpJkw1LQUyy1+uwfmZSr0Oen9jNdjXz/3T1zTAiEA4G7enXjk3Ox4
+5ukEVhp2mLCbHvL7V8FnsQxQ9Uz8hMMCIQCYm+pAi7rF9RSEzYpHjjaWpE+/TKkw
+CuM8evCbr6xScQIgCAtRRVmo8lYzeytM8X0fVRe3Z6OT6LBQ9CKZ4EDzKBsCIBpO
+6nZiCwcZjQ6qRNetKRff1ajHdWKQrGW8VFh9WOZF
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_06_empty_sids.1.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMWbzWc7xK0JVNaaqUFrVEeNqv26zftxKdO5Tmww2m5fObWWcgIE
+21pSQt20czxBJz33HEYY8IERW2QaRUQPz28CAwEAAQJATw/oHa6nIQhDvl1A7OCx
+ZrOCv2O3OCvtrT1N6DGfo1qX6g5EivHZZv7sD5gVas63lfJfqxsyHGDa8QO1LZ5T
+sQIhAO4WIgLZlyKqrXzoPUY/5OzP0YVjFb+olzCg51bKloqpAiEA1HoC5HrV7hoW
+mfsCdPr9+wWS7k0tsBBXprAJiykPMFcCID5JCgLG29QU5KgNtaIAKyqMv5purozi
+VRNCtOKuwy1pAiBvQjhzhXKyDA0bshlWQftuTzvh9p3e3J/ZE8LbkLN4XwIhAOMj
+cR5FtqGtkFCdSI7DZZ9FgzJ+zwyF5eqJp5/FojYR
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_06_multi_sid.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBANZghvzvzwN7Pb7jseVZa0k5OLTKg1lC2nwaM+7LmOeWf0YKs1XY
+4WuwwSvfzwWzF+VhBlxC+4n4cGZ2TVhUtdUCAwEAAQJADZaMt9eTbYsQPNs92WWz
+kS6ZU4xKiwvbwWX/yLEK/hLEQ8Yw0uaT3BIXvLU4ds8erKYnSjrS+XfteD0oAnNh
+wQIhAPH/9RvmzfUDeVyBBS5QSeav1vwA3WyHLQQpBO/5pJrJAiEA4sd5RIoShLW/
+G8ZH4eiWVdR8nAU8EiLJBe2okUjJPK0CIQDwHOkUsCN2keXe1N1RILTSwXHsROdu
+gYk28YRGn0qlkQIhAJ4E5KkvlIvIoKvX1ArEKM0RzOpic2Mnve9VlNn3X9HZAiBu
+luKPzxkYZ/5J28zp7oIwoIuZkBiqlBvVtoHTbMSfSw==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_07_empty_vids.1.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBPAIBAAJBAM+1W2jZKKDWmZ3NYuK4xn3nqIJ9sc4MvO/vMY7nJeKgxD4hlF3x
+CnD4Zrzf1NWZV7SN+WehTk0HcFMqgRwxNL0CAwEAAQJBALLGjh74ipelHiNMnEg4
+cd/8fHWUam3HWPfLEQTGvz0HQ+kjXxwlmywnPRnl0uYl1JZqBW6SHfZWh3OPvpy9
+8AECIQD/DR46cKHqQeW5RYQtgfwxXSb5JwlhyjtY4hA696U5PQIhANB7J7GAXfEo
+kCYJTGtUX3z8mucELklYerOWnH87sKGBAiEA5CXX5G7cZ7CKzjBhDFQ6Q+4P7s/8
+lH1SmS+fVSAxrAECIEvfdjuwNwAsPgHJwokRJMtM92b564p/6+/t8TiQ1aCBAiEA
+6u0Xf3KmWaKtOs+BGWjnd9oWSSw+ARzXMptF2NaLAwM=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_07_multi_vid.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBANRiuh4OalTfb7UHmA7oNAga3ORwLJq0MAXXjAlKiammIPcCo62H
+QhpvFxO5Fhxe43zSxGLv+aTuvX+BjdLuiz0CAwEAAQJBAMPZLqucu2z8hbQ4Bn5o
+neKDcwKsdlVKp6YbeCTxOTTYL+0nWPQbrc6tB18a8axdNppIaMYbn0EGTHOktju2
+H0ECIQD7rdDQPRi+XjPX8VaofmNINUf6qPMd+dpRcOAUHL2cFQIhANgINWaTW/pk
+sdRpS1JU4djw8ewamfDsAvAg0uS4avSJAiAMheiXBANALbXMr/CM78UG6cfMHC4E
+ttL7LG+p8IgqxQIgeD5pasTOx1pQ2QgakqMIanYCUgakdMMJB5tdh01WyvECIAcZ
+OvxfQLc1Z/Ow8KjouB+rhNH0MUE5WGB7dUt/pFc5
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_08_system_caps.1.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAJX06UzZ4JsTwMkD/CKgiq6nsLqs8CeipHJPLkxW19FV1B+MFCao
+wz7ornh4tvPNJEFvh0zJ6Et7vghusuAlSvkCAwEAAQJBAII4vKDQVAxXiwMFQt+P
+Kt+hIAf8RlElHEloGXyRrblKyylIVzdexzjQ2Qngk9Hij3dK9/w4OAjPFAT/GXco
+SQECIQDGNHcVHfbtgNuSSevScZbcMI/jeokhAOg5jq+RBettrQIhAMGu06T/9ZDV
+C6mOX0YEmCfZxN67pz7m78xbJR8pUGP9AiAtnBsfD+MnqjRcyIfsyFjH2KDz3tm5
+b4UA4bXC8JLJjQIgERu9TDzj1yhKgG64EbpEKnj8/+O5kT/a/MUsUUVX+Y0CIDId
+UIE3uhiN9/Xq2rdu7hpPHhW8NDxESTZNmzkn+zo2
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/aggregate_08_user_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBPAIBAAJBANpflybwiQjwZuZbWVxmiesO3rx0qjkRfN2aASt1xOOlqe3Lftjn
+OVbIvqSEtck+LjFY2TuQUSqvYH3uzx9Pt7MCAwEAAQJBAIF4e12S7yxlnBynvGuU
+P+Elh9mkMehz/dxFGrxxrrJoxavE42jcadwM1Sn4MaYujn0PvelkKrT+NooVxuF+
+94ECIQD1u37BXXNzI1ObjxJI7UrRqUpdj2/jYGcNv3WMhiABWQIhAON/clNzICmN
+LJqG1oumqXzROeT5b04Neno4Tgif//PrAiEAoNu09TWMfsGQWJOGn7CeOrM8WBSu
+ZMTVkR1VAMFIMDkCIQDRiK76IY07+CVe5lZxJb3xkpuqQ/u6fjuSmo108DlEpQIg
+JUVcTiFpmm/56anvLYkIVSMyyCQYq57wWkOoG9iCCNY=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_01_system_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMeveFbIjzXUCzg6E4zye5qnodoLsDuhW71GXzEG4fZCbmoQEXjG
+ay1Q2RTnl5su6jJx1SqU5Z/Tk6fmrbOetgECAwEAAQJBAJiClgCCMY7FIsSQ5rmx
+wWG/QkiMwM7qUGzhQHbrcM1pWV/AtCZLj3DULhVJaW47GnemJmHSXHg7VHIIjov+
+ESECIQDxNyAGFWJWWTS6kkfwniUxRFmew+HGuPneBEuDnfrFrQIhANPstI2rV8b7
+9rpKKZNpe4vt1fBfuEEQPOAx3YGkPTQlAiAo2ObpYNGoQa72MTNRgdZWg3aRtiYT
+mttlR2DqRuRieQIgE9hRnAaUhKypkQ5K0GQLTrIp24WLIoSbvr7MqEwx8wUCICVZ
+mv6gmqF0tV7NBx4DnwH/Q4OR3RCgZupjFUu/lKaX
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_02_single_dev1.0.3.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMWNuebyZL8QjgrsRP8Dii/diQYq8VHouL9xnRDNZPd95sD6xyFW
+MuQYExopiXOa8VFF5nMzPlhaIBbayUYkh00CAwEAAQJASk32YGFHd334jy8y/GAO
+d9ZxlXpNbiuEYa2QECPRGCz/Kv8QW44ygpRdgipRo42VQAV3pnmCnzaGr1B0lddh
+QQIhAPEYqUvBNeuhjnHRPlOx2pUH629ruQdzwK/DV/45pR1JAiEA0cQA2z89ez27
+AFOTdJb+D+qcP9zSqnRCTm4Qnf5vreUCIF6Xr2yifLZbZ5juYMbTpBAO0Geh2zG6
+T6JmQTLkiQzJAiEAgup3Nl6junTubue6Ubui2MAtwFXLTQK+F0DuMg0IGlkCIFad
+o/nkRzIhfVt8jbtNFHIv5njR+URS7ZxNJ89kqaYs
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_02_single_sid1.0.2.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAOFh5tWjEVaoQYgSdYXHuIuPNlp97rRvQPWdUolG9ae8FjbAQUfI
+5mbcQWOS5x3klvxSNY5icNtb55XyrjghMRcCAwEAAQJATolj+6vwHcdR1o3AIBcB
+arhD03KwnHVsKGpi2W09qu3LNRHtWlhxc2c/VvsA8xBCQYYn2ZbyZWTurzc0A0jj
+8QIhAPmEy6siiGaVPIsoEZYlTt4V0C/YUWE91urHZ3cf0A//AiEA5zyb4MRBUeTI
+8dUzLylKGMrK3wGfnf/WcAgQHfIdXukCIQCAqetj6cCwNRAtKZI3/DD48AKUSVVd
+cUfbdMtzb+IX/QIgWVOzj8egyCcObUWECVL0+dDVQALbi2i6iPrEZx0RtYkCIAEB
+RZsl16WH16cV08FsIRK8JA/0QrPRSAIBOjNrq+sD
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_02_single_vid1.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBANnjO7AoDL4TzE5i/yH9zqA5JMP04w/vS0kCmuzeV7RvnV0jhVed
+odOOGL/DQ2wxp8nIrOLl+r14jsZZZYnXuvECAwEAAQJBAIXe0Wt4D+wxKdP3ix4N
+XQigU3B6Y5AEzFK9YQarzWM0Fk+Zdz/Etd6MmtE2iXLC0xg2huLqbxOdSt7ZXzyJ
+9IECIQDwFuLYfKKwp2Yvbz3QB3UOwvEOqDMkC+8uNFERRphjKQIhAOhTsbxL+44C
+a7oT7HEO7mEvxpKI3V8xhyYhHix6BJqJAiEAjD1CCiRbP4a4iJKY74+7j4DNH7ue
+C7sw3bNPeyDaWGkCIFrRlNIp1b1OvvPvo+cSUidVuMdBj2AOCWnjWltCm5gZAiBa
+x9UKeEHfO+fgz172xAfB1eRB4ta77K49HZsxXML6+A==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_02_user_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOQIBAAJBAMXOCwbaV5+w2qWu/1uBloK/aBbhekGu/pXurSapWY1deSKxsDEt
+m5WxRd2HIXwJGQdYOiY1K806thKLfIeE1gECAwEAAQJAUXiBACyUJJjiJZXDZXwl
+curFQ49RHJaoEzcAKEleMiPRVS/7ogKMFnMhC7hy8cAmsb2BexdY0qPV/QBUGpMk
+FQIhAOiYTdRNLmbAJGus5KUdBoEK29g973DzJBvbpOKhXcfDAiEA2bWJ/HCHOWCE
+LeWLsIpXYqi7NiId11xae4Q4aJymUusCIBc0Kn+Fe52QiZGcW+sE7EMvXCNEeoCg
+IPgOf3KEeqCVAiABjSSdkuOzyfdHKHKVYHb88fzbhuS1iyft52RLgopA3wIgLFQk
+TRhcRlX+t/5lkcpm3r3QoqpSU3L9CjbvN6032DE=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_03_multi_vid.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAMAGcZq6MjGXiQZmQG/0MMDB9cJ64GItO70QtovgSSUfR3HNijGs
+/rrior/bSqJcO56qB48HG6AfvpXbArVsoeUCAwEAAQJAZ+eUtUqnOlpq1MGjgHC7
+qLHLT665l6YuOwG+JTX5nlG8hE9LUVN9DGmOcGYvSMq6mMxbTdKuMrFML4Tgd4Ae
+AQIhAORZe6/ecvxbSkn/XFz/CMoQM+XP7va7sMcwwxg42R2lAiEA10b0r+qPTmPg
++mKzvqZUNpSptB4U+2bteutJcDkWv0ECIQDahhvMwQevIrnkOKEuSc4ieQEBU0zv
+B8zzwmFhg72bFQIgRdDHLf3998hAgDNeY6gBi6nu13EiEN4yijigGnsJO4ECIQCm
+8oH4KJYhCunF/AMwr502wVTHGI/lWa2LupGEmGnW7A==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_03_single_sid1.0.2.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAJf+EW+RB4zWenh1jGCyudM8mE687kE+jBOI+lXRbZ59PF5ezT/Q
++CdH3Msd0L94NZu0eoH6NSe07NmRzENEapkCAwEAAQJAL4D97BO0+2SxZGLA3Bwg
+DhBbPgi4onWtDBH8w8Ov8h+Q51UEqNXxPHkp6dcLVtNkVYEa1RdTCGC9EWcL4dlZ
+nQIhAMaJZNiKge7rzxcX3o9EqzyH68Iv3dTd0dYVG8yD3FAnAiEAw/v4vmFp2zJE
+oze6bEmcemJ3kK/FKZAXlpJqtajrZz8CIQDCvnCyS6LKVnprn5lLFUOWe4kRkNxa
++j7jbQ84nDtWTwIgfM8SceuHhlhU7byntB6M0EO08Sd+4CErZHCKFHYms/ECIBPf
+GojlahmivRdzp9+uUD6OGYrFdjoiUtvO/aSiDo/u
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/backuprestore_03_user_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBPAIBAAJBAMGLC9i1Cw6GuajVy3afjF8h81KcC7gerURc5oL8t1Jvna4pP9aP
+yR11ZMG4LPElh7+VSPzQmtqY94yPHkmwZyMCAwEAAQJAUvO+kxYddA9oWaWwe9os
+NsX9XQXGvBZh2vAaWD/qbqjrUTxEBfVc4pcHHdvhtCFTtqdJIw7xzf2m6+RlfUqL
+wQIhAOEs3sscZ8pTcKCXLjpCb0P2eFDVlnz4sk1MUwoTAvCDAiEA3AmlxAHAXNhK
+sNGDsNNNz9tsR8KJOf2Auhz9Bo4BrOECIQCRTVUPF+tZwfIhjqzD527JGliVQN51
+Ej5sZt4G2DHDZQIhANaBLTFch7u7O20OgrQR+kxE21VFh2OaBzDoa55FN8rhAiEA
+wCMAR1qhx8vdl+tPmsLnvxq2F6ltlkansl4B3+0nI1A=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/corrupt_01_corrupt_dev.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMvh4vZWVP5MPiroR9ocxkclTdRvcvw5HrNnPrpXaXUdqAbFA3u5
+of7J8fp1qkZN7NjmHmFBr7Kb4heb+GmMFiUCAwEAAQJAT0nuqRxT+32NI8SnxNQx
+7BM+3GHnVt2j6eM6Ct/ZvFh1YQ+0UYDl9m6P4qUDw/VxsLy6m/6I+6wVgF32Z8PE
+FQIhAO0lk/3hb+6dipghoUI6UHvd08VP/m6MtkUCfsZUTy1zAiEA3BdPPdGZkY6p
+paEihvQaO19PV/xEwuiixt9XkMigyAcCIBKcK1P2GAmatWCg6v2+g8hkrRTD5UyZ
+oEgkHPzFav0/AiEAoSWMBpZeG75aJoSp1CgMwOYTITf7XL6a2IQVCFRtrKcCIG1o
+NDAOHYXbcw20juVVE8gr2BaPmHJmoUreRLNtdqoS
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/corrupt_02_corrupt_sid.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBANhF4YhykzmumXw3wGImt7YwPM/KgoZFN6UinNFSxp2yi3JHppJU
+KXynX/iGDkpKg5aSZ05pUTPN7rcEXHwH9MsCAwEAAQJAUppGLL5OGv7j4nzMvvA4
+xJ4h699WAQCY4zqYGJ77+yiNdgi1L7fgAJVJJvMakGJU9ehPAnH2k3nZ5ZH3n35a
+sQIhAPh2VMbh1amCGr0hhZJeFBiCVkDj5u+ZyIjbtX/FcJtTAiEA3tWNu8wjUOXO
+L4jfbzHnD50aumCO805F8EywgrfmiakCIQDXqD3lcle2DYuP5ey+IpJmw5qCME5e
+YajBwZJEGOeoqQIgZiSr4G61rYp5le5+xQCx8sVIEDDctgimJH1y16imo2kCIQC5
+DX8gwiv/0epODUq/okYN0legtuRlufnmgr0M1wRahA==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/corrupt_03_corrupt_vid.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAMiwG8XZGBA/YgZB3kLOcoCnOX+1ql02rrtJjRdfW6JJu6dAoqdc
+i+zPZMiZWH6r4bjguAsdnaqL52wr9Ho9338CAwEAAQJBALHU4/dQZPNYxurWiTXX
+rDz2cYwKFVmd7/2DsmOImzFU5HYGHTm1MASfAeSkqDHVZJ1YrUPtQ611JqeEbO6P
+C3kCIQDwHII+HbG5z7QRohKmJIcB17EXYdClI2T7bN6oMsyzTQIhANX3xBHHNX37
+slBRScIA7op618uGQdd8JlpLA2Dnwt/7AiEAt13+NPO2Y2F0cbblKQ5iMA0JiALC
+NSr3lm8JB0hsPU0CIH/e6GAvizpVN0Vkrw2v/N7pdxl8jNC4szr25Xf+SaoNAiBx
+hcB3Fnv+/8HwNseIhJpEeduW/9AzCYGSRx8uJWwVXw==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/corrupt_04_corrupt_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAMFaWLe5X4KwlFjtFQV8a5dZQTbID+Oj847AEtmI+lnXf28bdIOW
+mvFJfFV0T5k8zOgC7/kF8Ea/f1Zx3h9kyXsCAwEAAQJAIE18xu0EZOwlTJoHSgxY
+WUfDGmjgJrLsbOvv+kHlOX751Iaor8ZJxa+cuQ2iCv8WT8RY3h5qf8CQELIpK9B7
+UQIhAOic0MEuqKRC692+ygo3Z3wD72LTmzz2Zn0757C4ssgJAiEA1MsIPxIVXxQW
+iAKbg+l201xtUe8qez3x/scKWxalfmMCIQCRjt+Ko1ngQAg8oFDph7X4ArZfzy6L
+PVzw7PWUvl8RkQIhAM85gahaJfHXkDGXyHbnzs36foOCE669HoNstksKfNPdAiAh
+hvgjdyEgztW21Gj73/mdv6v418EXDCVPczNeEdz+8w==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/devcertwarn_system_caps.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOQIBAAJBALgJgZmVIO+cqFn65OcvnhFVvoeisJUvIhAm/RCJTksZEyPlD0vz
+BOYxFEMvIxfk0wwizNCan5cHPKGCkhMhRFcCAwEAAQJAF+q8Wf5Ecn9UbaUqfFT2
+4N/Yy/27nxeqAJlgh/agIygdnM7GFxxqPunnLaGumIF7dFERETX4B1NM03+P83Ot
+yQIhAOFW4ya21dZ2lvG3/nnbQFahkMPOILDPhkkp4h8rNDXFAiEA0RP2MGxmoZtF
+bhefgaU9ikdjMatO8XnD2sQcivtLT2sCICtCB8c10CUkjOOIQ8TWzyoSR/0ew+3N
+WOUQskTzgUlVAiB9zN3/6umh6XRQNsSR1GP/9M45j5LzdsmiswddlLCOuwIgctZD
+ovoDCtZAJi3nWLRjzsL4yQWX0wHkQDnzWMZ04sw=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/devcertwarn_unconstrained.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOQIBAAJBAOyUIdAK6BThapWba7vrndCBJli5eMrq220v4iMBnYN7L1JwhsJi
+o4BZwMghxcQR1VsDeioFHIcnEoUtCQuL8BUCAwEAAQJAUGql97bNXtOkzEfxXgZg
+NZDA/SXGhotAnSPKpYWWCiu9AY4yPjyq43tW5hgiFILg10IKh7HDVx/8ppK3cQA7
+fQIhAPfMP+sDvRoQs2Lb8HG0iXFueRyrFGvqkmM/5LwPZSHzAiEA9GjQmQcXVmNu
+fXB2I3R54kAZCWoRZRERcNpZIseAH9cCIBLHySRfsSpTj7TzZGLJwwz0yXsRwEd5
+jMS25/gU1p5fAiAy9hvwnILoN2lVbHqln+a+H0FZLi2cVje9wTluwAxeFwIgQRTa
+XoZlONIS37zpbWSAYrsImo3zJY/xscz0SRWB+rY=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/devcertwarn_unconstrained.0.2.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOQIBAAJBAMPImSKR1SdqzU5ZkG4iJaPDlHjRXh9M47Ufc6NhdyUrYOCJ4cCV
+RhFIzt2VLNwmpNVplOVstpHjr655mmYaLnECAwEAAQJAKgFnAajCT+O1SuMifs6q
+vrkeqNFa3WJU1K571Aj8VCfa1iyoBwxYOWoXCZQTpRYPlJ5N73VvajhXWQtQMUFh
+QQIhAPjGCg1NYtb6eZ33jo3zLYIvzcq3oEFgfQ2QenlItIg5AiEAyXiCFXPBL2z+
+HmzS6RkdwSOr8mtZA21zNBtviAHJJ/kCIFRUjcPEn+TQM7ng2Wo1LRActF4rsR94
+XevjNiE3DDvBAiB179FWdXh1JrxrWxDr2wQL97HEKwrkcsGpkxXq7ACxIQIgdhpj
+MqRXU0Nl1KU/UscKKeWLqvjeGxZPg7/4hZ63k4E=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_01_single_dev1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAM9ZOBY4HUaweyyGcRtqMzqdvcVXIj8KnxHtOyvHx5WIYi73b2BE
+ioCNC/YLvAKBPXjO8iNhNQcKnTRdnB7MUNUCAwEAAQJBALRojnJWtLJSz3k4KKWP
+y68OnJVdcQCk/y6b2MYI91DUXMxfevdMl/pMag8EVxC5YVa+7OMGEaT1nXvXeg6G
+30ECIQD9XsYh1EcUFFyCJ3jhDCMq0Wl+U1A62l+e+q1rA0oSLQIhANGAKV5TN8jN
+BGxEwycnP0G2U8Gm4BoCZe8Eco98UOpJAiAQ9d4nd5FGe9Jxd/j0f55/CEOajDMr
+rWCHQNqI9lBoBQIgOQaIvCsswRTFQm9JK6wsNMfbbpfs4keK1Y/BWzs8jzkCIE9x
+O4ITE/Z+6GFOew5MOsJeeUYT1i8H+k7WQTB1mca4
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_02_single_sid1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBPAIBAAJBALn1ywNvOm0K7rQsSXMC5tcnV0vjhgqJ6Sc0FpoxeWJ2GOb5yNbY
+SPU+5Sn0i5QtyN7kpXOISiAYkgRL3O6g6QsCAwEAAQJAEQWlyq+wynB4vzdaldOL
+K+CnBgRSrb5IAFWtR/oFYXTD44jLtD27ez1UIhQausFHTWypBvfpZLq6XGkOVE/3
+cQIhAO40J3v9Ngs5uBD1DwkcTyQdlRXHOA5Jqq8t07a3PLtzAiEAx9pvq8FKhAR2
+2mB/vamrbr4njn58AGiKARZrZqNX5gkCIQDLtRJnOH41T2EYL1pyYiFUM3BBtaM8
+pMcxFLHPuhhX/QIhAIfSCNCGNVkRG6D/sfC4rXw+mO17QlSYtylUDjubyPHZAiEA
+tZsNw05InmeFV3lg9/zbDESCIL2/IRXyNIbFhWWPfXA=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_03_single_vid1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBANuGKSduLQ7DMdTz+HnQRt/CY7Nt0IerjCOu/GP8Z64pQGSfB1Z3
+ailLrnR2Xf24IqoBn01dZURv70ua3HYUptkCAwEAAQJBAIl0fBhgeH4h4vYAvbko
+nPhG877KKCSLWfiN/SNuTE1UBeENZ96A4OgYhajLdl8v1umXkjqXtQuO/IfcRRQH
+pLECIQD50p0eFJ8sgkxa/gw+IyZpEI74LA8tBEl3B2VoShS2ywIhAODzwWzQTPpY
+m9/kzX7JPNHFRqkc5tBZFC2ctu7EfMBrAiB4Q0Bpo6nApnUVdKj2HLu35kW9CJDB
+rgejqkbR/p+cIwIhAMXEZ2wT4WlDF58KV8O8hhTiPFIXT7Eib4P+QDHAWvELAiAu
+d8G0ZkLanLTQLqM6drmYFsFfAcOuVHDCsYCZZNNqJg==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_04_user_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAMRZSSyPL32amvMaqiiIotyhs/urNs4UvR6WvQWilv9Oq8gYGzCr
+QoJUeeQbjsv3MHInkeXxFbOYQVf8noR8zv8CAwEAAQJAVi4ORQWPxaR/UCaq+uGG
+AirjUZoDkw5dN7jXvEpx1hqPwNlF+sC9FqXQG8UnvBRoM3FcJI03/pKggqaitmHT
+aQIhAOYaRxfUtKkXs5ZKx4lf+JMXoU3cJdRBN8YuKtTYxm/TAiEA2nJ9pGh2AkT3
+PrxRyrDMBHCyknslcwUeWwYoNaaU1KUCIQDDu66l8uYKwIKfYdUCYoTMetlXpeD4
+ANI03qjIje2eyQIhAImKbPGHlEX5hnNJv3YPu2VQUB9KylmRb3uAdPDS4gLBAiAh
+aQJ5fXJkJ7voHDhjvMC5pDkkYIf2iDldp74o2Jdahw==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_05_system_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAOaOPQKZSGL2ekniHP6np5v/iM5XPR3ug/Z23QIyJfl/2AjOLevK
+HHmKndUhIavuo+ie5EvSws9DsqYZnqPVyYkCAwEAAQJBAONgGelLNGls/XOKDOBU
+hedCXzBoNv0i8oAJ/7KftHXWcQt4ffWVclQ1AcK7HiA3cGY8ztpWIIU1jdeZyOvX
+tiUCIQD0UrXtTfgEjIKZ3dRH0CG0f+Ba34ZhYPCNNIjqDVMHWwIhAPGTFTd6gySG
+0ymRMc+fXC0NgYAJCkhsyKLRpwK+kWvrAiAt9nVlLDrRWEGlgpbR37THiRsC3XQh
+U6RNXCm5pkINawIgH4briO8DOHwkCNO7JXaNyA9wLC6B2gvgb2dfHXuTbPsCIQC/
+BCZ4QChZ++++KxfkxDnkXHsU1+135cjBZMxnKyN4Qg==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_06_single_dev1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMW++pTpw8wmMcfBMSkImI2qpB6k2cwvPJTFu9KDchuuhjlV6NZi
+Q0EvSnyWjsw0H6phTf2q6xzgAWv7KS+/8hcCAwEAAQJAYbvlT4pGGnVaLzc92+EC
+vSn0mayydKd4ErO0A/SxhhoaUHrmu9+FCMnIY6gCT0R8Cn7Y/QFYteR+h2wApIAo
+cQIhAOx0Fi1A4+Seny62IrRzUcep/2taqXSyQZvKibs9wjlPAiEA1hfAS9DAZUmK
+RjyjJbZN6DEbnrdAbGy2JsBplLMg+LkCIQCpO+TrerghVw5jZmSsdqUfnKJ8+aSz
+KyoeEPZHF0q9rQIgPHYArGiLrQ8Tqbo+KMxPPB+COVRvMS+SUWdNad0clqECIFD9
+T0M9RbEAB+91xf9cidmr/rliXtp+c2WLveBgTj5g
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_06_user_caps.1.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBALbF4SIiaNvAAJyh97jRUJ7bkZFWp1PYDMtKqMw+sa6jVcVedQPF
+lj+pgfTCpDoy0njparhdtlJSFMnylbnvNycCAwEAAQJAQxpBPqP9dXh3gQoiBdOr
+UrdwKTj0M98lS1m8wUffOisUdPFcv9nLc3XQXXv++AK44/Dg6zycBiKou+ISPxQd
+EQIhAOD21AmCaqovUMZEBz4P6FkIFI6SNK+G9Xd36SSyBlv/AiEAz/z2m17l9SBI
+LgVFSKabieoauKH9PeDg40Jzr/vkxNkCIFrlYGc3OsHovEpf0k1RQCA5E5VHneIO
+NcA/wwQAqnEhAiA3ZSmNYi4fJnTzBOZaHj3I8rghOsvHIlDjVnyXf6CDqQIhAJjc
+hNoIa56jH3WOCAlSc0qSe9Wf6dO4NKyVev/p27m0
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_07_comb1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAMfip/GsTQmsOemRWcUSIfibcdsv+n4MWXeGratPvB22uHlWzHxt
+F9zd6iRhgimC72EWkOzDPg0pTrSRFnflbc8CAwEAAQJAZhUNbFFwrqX0laKT1B+k
+ldDdXvGr3j/0WSTBASKhkhJd+vRMamesUJV3I+vIi0NfiFwz/VWH4znN9cvIhyup
+cQIhAOtoy7L/B8jS+iFqXZ4sQiDX4by6EOfK+pkve688pN3lAiEA2V5rcGNnrKAc
+WwTrPjw3pyXCwSA4n1fYg94xNhLxQaMCIQDTXjjn8w0uSCDGuBZu2xZVHwFUz0w2
+k44G1Rec9Dqj8QIgVYdUaQ2EDqWVYq8FzSAumcM+5XTDMteC5yg3XtqHOVcCIQDG
+WJOFBudiu40taRbc39NkWEIU1oL5GqNRZoUCQRRm8w==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_08_all_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAL4MEW4R5XMuBtvPXvxdwJfqJJtipmcVUXWlor7SPg2aoGbC8H11
+ATUJbhSLkCLa5+5vqBUWmFZxD4z981rCfy8CAwEAAQJAB/o7tRIdPpN9CDcRNqi8
+z+OtO7SNZaBYdgbI6ResMSfs0xgpFrO6Acx0NRuGrtnM3X5rcyNLJ2vxd0RetoV3
+YQIhAPiood7C0MbPShbHgpQ1Rp6/l03Im2VZNyJLGISUjrnfAiEAw6hywZ6mBfUb
+AG0qIcRnLfujIRwdjn2i0ASWPjVjhLECIB7054oTGOjXX7LsTa5j35Hd6llNs0Lv
+03RagwfmcspjAiAMD65DUUxawalQdWpLepgBtalwuRL5XbVTrXS1kQT5gQIhAMTC
+0D4khRYwMCfJ2Iq+l339O4vSCIPNje0U8KFgQDei
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_08_system_caps.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBALhRVdfRwi2Jmajija9wjpyRKsq9jCYjZrPFGsy2y/EvAyZf8CRS
+B+kN7onhN4cYpIt4cIbpWO9ChLFnSP2qAHMCAwEAAQJAHBIfDcBfX0oOgd8HDwoI
+XiXpq3jUqFZJ5OUG4NiSFMf+wq6PY3aiJvFhmcaX/majq+Qoy1QiC6SAWHPTynhl
+2QIhAOvGTArHsS/AyrkoZA/KJfwIiPQfPX+u/4By1ssot9b1AiEAyCEGYJPml9dT
+vO4qzZU6N2MO9wtwt/2JEEZbcZb5SMcCIQC8F580fmi5eul/W1ywSAmTjk+LyZxr
+T3WfyH3Y52v6PQIhAJDpkPOXxO6IBeOVVbsdZlU6zlhGmW0xEfGN8KMUnhd7AiAV
+WnlKBDJb/VVVECA/IKrgHh6Sznqxz/fY2qnDFyf/QQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_09_single_sid1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAMobG9nFLiw0NPthp6KuhEO7K+bevml+/D2tmFS7wCbzSseqNAI/
+C2cepLuqu61t6bUqVvam5TMduog1j467mJ0CAwEAAQJBAMCtt4+V/L8HxrsiDr95
+wX8RInmoQcAx4CitJ10g4cA+3+Tbg7LmT/wj2uWYcseQx4llRlbFQvkmtHwEaVVz
+NgECIQDwDdmvscUXENWDefy+It1mwx2pbOj4NZjsqY46N82MGQIhANeH8cjkuan8
+QpxmPyovfcQRRIiUguJxL+rme+mnlEElAiBvRGw3RLXvCA1/gIaG9xAadqwEAQhH
+LEiywbC8CWuL2QIhAMWjI1PUaWw2pd5E5CcK5YilTPLxPBPpNsdwErBvusMBAiB2
+wXbR6rUHhHObQIX5comVR6KVLGfKRUI+uN7pDp7BWw==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_10_single_vid1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBPAIBAAJBAOpXtLPD/WLNoTZLJvH5aAcu9HxDvxWl4R/Fc/gc6Or3iAO896PG
+5nI8NTOBxEJyCJvw1Edx6qZzbWi7xGU/5eMCAwEAAQJAcEu5Fw/LI4agQzE+J2Q5
+un+Avu+D6O7Fc4EeMn5ACx/KLtcApcuAnmpp35h5Ywkd5dDe8y+9ttr7EV4ejwus
+oQIhAPnLOcgjdjpQ7OiWL+EfCCkE71pPcUE1vMFpQTqwr96zAiEA8Co0dj4AOrW5
+oD/iPleSQ9SLOTqBbtmgcXNX8XkzdBECIQDiL3pH1oyEq6iJxwzdzSqncfeGEC9e
+O9mKTNOq4Div7wIhAM1TZ/LHYy7Oetr0gxrFh7kSF81fpZT93lvgPwmlk0XhAiEA
+6gyu6FK7QpZp5+yZD7oWW8lGRGjAKkk/bjCM18WT6hw=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_11_single_sid1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBALng1q7JJnZqpBGLi558+81qgZRkLyQPIKicp7ZHxMb8AIMUEcYv
+dDc1p8F5DBR2KwYT/wnQmbPA/pLjuRUWd/UCAwEAAQJATv6qviVmXzT6/Snc8EIV
+kTsOTs406pIzQvUwoVrm2dlNmELT32+69hhtrHFbCFI+p41ZsC5erRXNs8KZWQh7
+AQIhAOPGj4MiN35SfpcIBKh9TK+SNKyHg2VvxiFQtFAMuscRAiEA0Ok4mQ+ovrpd
+1kJE2xBUi1sOL+9ik1jI8pF8dg0ViqUCIF03lOIg7b8X+dDLqkReSzULS91T9FVe
+IiLeSXz9SK9RAiEAoD3T0OvG9o0C/x6TrChpgP7V8gS/auAWOqFHg1Fj7ZUCIQDR
+HSJ3G6xKul7ApS0DSDBXerN2NG2p2zbijLW5xAs67Q==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_11_single_vid1.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOQIBAAJBALUbArEyGePxa3+UY2m5dzxs3PZY8iq9oVMAuHkRF9nycHiLwx+e
+VuvzLHzpm1qTCrztMeen2u+tjzCTrwLGgNECAwEAAQJAALrDIAObpxdp33GxlNNy
+b4Pgv/1LvHBXHgZ6t8Ih3nbh0N8FhTLJlJ1iICxgp8RzEUrf/i7Kk9ex5b+cmscv
+gQIhANyplEfH2HQX/fYIaCxK/gmtDaDRBhAsvsyzJ3AqrvPNAiEA0hu6+yEr6ypL
+xHX0/m96+355eMo8NNA+huiQwGfPhRUCIHdiJABF5hzBUjxHRh0YoaKYhvQHwpED
+tGLJVr//x9HNAiBAUVjV03u8S4BSLcHHuZyuLDNHNLFlgXICnmLhY2X1WQIgR/OX
+nVBNDZJ0Pv0lI8bQXIGSY5EcIr5b1T0s6prDb40=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_12_user_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAOeZ7IWXAbaisnGS62BLVJjWaOPGfi/NzFCkRwmN4k/hUR3z038U
+w6Q7nHmT2Tp4O9YMvtKi6NsFIkZhuP8o1jECAwEAAQJBAKzRf9ujdcTZnLwA/KBL
+NeIiQ/yLVgfH0kjufI+VjyU4uhA6pq/kFwfb3Xou9AaRmbif63wIkAfKTVhM0oTe
+UP0CIQD0sR4D9YuIhPe7lAqliiPXytO+8N5GkJzBekSS7/FzxwIhAPJN73ORipOj
+diBHq+W9NZe3RJlyUV4NcN5LZf9xjHZHAiB9TCD5mAfeXXBZzkHxaJ5YBtWM5dx8
+N9r9O/XXZCS4ywIgLb/VVEbImXOlnBasOCZvdgPeafKRtmZnRzGJQp/X24UCIHwH
+cgG6+WBZ95G7fH9bHWzgr53XufDHatkGI/EqbahY
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_13_system_caps.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMdsPbcmUraTbx5ycbRlWk9I1kUWJIRw2W4hT3gOBq17KWdosMvi
+UcNIHUtGi5gwsfHpSrc38Ozeg7Dc1lK7coECAwEAAQJBAJf0GT6CHAp0YvovOAa+
+J8c799Dio2arWnH5PcV74oiyc5kA9TIe6VB50NGFXeBeiLUkyav//QF2Xtp3+DSA
+cZUCIQD0o2HoU6y+wEOmvqgG6la5MYSkBCv4BEbW7bJU5sKqqwIhANCvRZDY2kzw
+/Kyq58dJ3jX7zmk1Z3Q1NeqyKZg/WleDAiBVxOZxrsx0wDG3x0Zfzk8DdNH9Mx07
+QjyX5BRO4ezEKwIgCQVam31USnksYwZsSIgf6/N7o76kPzjBoOictbEfZaMCIFEK
+EYqTfkbb13BKPYyfq8NYSOTW9k2a2kLlS5bkmKwl
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_13_unconstrained.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAM7A1HHIgr59zV6hP5+cQwMvciUjd9sJyR7Lk82p8ao0xAISb67d
+WdFpAMoK/KCAjsln2xpW1VRlPnC9J7oeV0MCAwEAAQJBAKaTA1Z85qGU955TKdBt
+dCwf0MYNMmZ+FtTBzd44GmU21IANx4iyXZ1pTqXwiipVPObqpaAWgjzCvwq4fl5b
+T3ECIQD0lmJDjnMUxZ2Kd+K/v8g0nYH8zYhQyv+15eXb2RRtGQIhANhmg3oe00jN
+/iCrA0SvMRwqJR4sjfbyoY12EWE1Npa7AiA+mfcQn3cpC+Nku4aX2XherynEEL8h
+HrQQVIVendMykQIgSqW6LtMZUSD1y7ESNIw2ZZ/IJAt8gTYbMmALCLxBc2cCIQDA
+n1aZ1vhvKQkzdrArT6JbHh6gwFHkePfNvQNNRaMa3g==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/match_13_unconstrained.0.2.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBALt0xdr3/P4nNZ0x9fpa1uihMHIIDsbiDF9iTUbXlO1uX+EoipHa
+jPVO2+iSnjT0bgvJOSXpCvQqqTtVTUR5qMkCAwEAAQJAJ7N7k/yhoFI9kKVcK0HB
+8lLxJ7V9K7IEXM88/pv59q7k43efnQ27PuMAukavTANjVSfrjiaONqSjaoPfH+zl
+gQIhAN14npYENQ9j84ESzO7MsMREXcsx41PUpPczmefxmA9VAiEA2K6KyKUCJYrl
+nd+FeMOMaumXYuwpyOF/m54/IMpSq6UCIQCML0xacsFPQ5ofilHzmdcN9KRV+PcG
+2iOtYZk6yp7QnQIgUsTJir9NRJ37/ARH7ct0tdoo08a2Z1+L6RvXrWTbk2kCIDdV
+ZKRtud1Ke6HKMMLwqJNmgDj70B3t09znoW10D1rm
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_01_empty_devs.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMc/rtSs+BFkRp1dQR+HSSEg8+HIagFPyv6o2PYiDBcTYyIkMuSt
+4/sUuiZzca35MB/It6Fx/ZNISUUsRZ55z4ECAwEAAQJBAIESGdkfa1so0C2keUlJ
+Q/A3/oRmZXUQEXnCOznGeHqBKTmEzutI6gjEXvr2KtPHDlbS12Sxl3AUwm0x7Pa7
+biECIQDyxBF57pJasiM54H9FgffID5B/juwN84TWKGpH7be5BQIhANIcTyQaUzjP
+SmK3y1mv5UUBXdI3J+cNIqxZkyYHDtVNAiBvvDae/GN4Qw1bkiyB/XPiLOfBDjMv
+qKm3OBrSyGMLUQIgMKg/p6O1DB3tIwlfPUjftmhHmuwNAJPpKLKhwhe2Vq0CIEgD
+jc6/fRqVyHRssDKW/h/X9lmfZnEH8ZQvtYhagKaN
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_02_empty_sids.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOQIBAAJBALE1y0TEEqts+QSQ9lC02TusB096kE0k8HU9OkxEfNuHDA71eQDO
+RaykQXNxjmYEoxi5/XQAmpecByadw0IMqKUCAwEAAQJAAOaCEuZgJejW1xQZfE1+
+8ROtsdSwmQPACQh3nF2YuNDTrkfrfdmjuo8jW7SyHwzE3VyvGEDIpYC23f/xaHlZ
+IQIhAOUM2G9wiFgDz2hyP7y5UgxlOxw2IO022t1PL7OE9qN5AiEAxg99Tu32TNWF
+ul+2Lh9UGIW3auZT1qvRBe3ewcW6140CIHJ97EYwEwcjyG4mBbQZUmj9xQFCEU1h
+yR8ssORkR0DJAiAfYO7aZWsDK0T/jRBg6Ee7htvTTOB1f00jYldLXddHNQIgWjAw
+CartQgZDwNOCe7bi24H5oOq/dWkCsOAZB9gIt2Y=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_03_empty_sids.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBPAIBAAJBAKEvU7s8GV9hZTmdyPN5irhu3auk7MuU4FRTXBTeuCRRcpKS1OUJ
+XNtnbmKxpwf0D+YWJYVCHgOdoXI3BRuS4FkCAwEAAQJBAJGXiz1bmtuBwQpbEJGE
+Hp5bXhVVoqJ9NmhU557eUlxSWh40xnuR4COcefVqNJeKCWkkc16NfyGndnGQyOdL
+lIECIQDUmLdiNlyxmKbFxO8wNWYmsM5/Kxc0uyWoeh6mY2090QIhAMIXmPoNUMlj
+Qwc4bje6foLwx5tEtbaSpRyYNvoiaXQJAiBY5J5RT5/ElqqtKSJGSx2ycd12KQNk
+BhjB8IYeVpaX8QIhAIAERHgZNEHAYMNwavIC5dLDsUQuC5SCILk9hHVzIQ7RAiEA
+nxtor6t1in8hC5wz8hiiMZdniOUMoZDEpufuYqW+cjk=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_04_empty_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAL0uLcrsqs0nnDVOqYfMBVIcSUGZl7tfd/I8jKVXqP7hJojLQJ8h
+b0j/kG2uiezR0j6woBCfAdmrIQGMEkp+DcsCAwEAAQJAI7gSYVwqK64s6ku96qv0
+3ToGAuLTKUevSAdyrs1MVUMubp8WLHEJ3lMpM5fq6HwI5p+gqktC8fCgnol8YZCp
+QQIhAOTd8vUDMHDWBiEzpbjn88z5+I/yAS71mPYGPC5PS3A7AiEA05vAkeCPlfwz
+ad+aNIXHW9DPlHHzkqYY0WrnZPkmD7ECIQCGzhyvKIO90rKll9BDS4yU7Z/02WzN
+BihksWN9O4OJxQIhANBfhC5h+iKQmbQ86qWjwp+ILJCZ8WdMRg4Z/kgxC6jRAiBS
+MrfIpAntgWHygC3u2UOEG8lmbMEwZVwV7sA6TGDRCw==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_05_bad_single_dev.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOQIBAAJBAKX3k0Ty5Bg39SLzIXXBb8Pfc17FNpchl9R4d7001kM2lOiEUSux
+7BP1lr247xhm6VeQDwKHpZNYTBBclTl3j2UCAwEAAQJAYhp1B/WXVKWHFpCm/6dG
+/H5SAPwMJ8uopuRKyyG3YWSnGMyU9eFRfQDWmlYEfLZYFO/whF3CVwRH0blUDxei
+ZQIhANmIVIeRgVVliDczHEQm6Kye64+ZwLhaFBM7v8yRQtxrAiEAw1DiR6+m3Ky0
++G45oUHfDqIHWvL5pcNB6rGRR7gdN28CIE0PLmKX+Oj3frmPMYQzBFmiMnA8Vzj3
+MAVgNSGSk8zhAiAm7ANrzbEu4KvfpfeODxZoUBmvIiRlyBdmsaQF6sbHuQIgUcib
+1V7PJ3Vh1S84y/JVIEdDkKcmPBzce/JcBiG5qLE=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_06_bad_single_sid.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAK1W7TtsqCljPy8H1pJtpyY/Qadq+7jInJQCPIRCkR8nC+4lHQ/y
+aXG/wTAZUpy7IPloyJrN5+JzemZT8tyA5uMCAwEAAQJAMA+JCU/wNEGDVEvtD359
+uNoTHxNHpg1hdJxGITm/uQ4KcTRSDKeIHgmtkAZhZGqveBbM48CgfZYSdM3C0iDj
++QIhAOBtEYbG+0cLcBeUK8jukuDaSr3ZZVI6+PuK8SfBt23PAiEAxbntLbUSSTDn
+rotRiAGzQxyJDsNNnbIX3Lcs+yXHrq0CIQCkh5Fny40AIqSExL3syuqnKaHN2Qjs
+5gsO7mepi90cBQIgQb/298kLoJ0LncYkQYbXNozpoqgdSkAroTCkW4uPoC0CIESQ
+SRz7yI0mJG1BoiUO14l4XBCwtNPaxNn0SdYexG8z
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_07_bad_single_vid.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBANepZM8YLIKMlE24OCE4/Hr8DCKPPCacBpcfWdB6Q1mZ+klq8pzl
+7zed2hbN32PVJ3Fjd5jKA6IgYkYG7iHmsfMCAwEAAQJAVsq2Zl39M8DtwmV8OWqc
+ucYMADCS7ZrnUBRu6eb6iekf3OUev64JvSZhJjdQSRFGfKiisTB9pSQbSYHkfQTo
+gQIhAO2/vvFWe5fKXtx27QES9oMCcbkvgdO8GmeLaqs9XW/BAiEA6DeWSTqQ9VCm
+ivg1rQ2tnu49Swunkjc/NmV+zZq1DrMCIQCu5EjAHBBa/uF9aHa8PYjdouSph4sH
+iO4bkXFsen3LgQIhANoHnw6gc4wxLj2a8OLLzfFEJL56cdqCDtLnFti64jarAiAb
++y50VMDNXqDUMd5Cx+zNKYEGWyPhs+u/blqQRiqaOA==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_08_all_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAOofeVWNb7btsemQyMi2get/N+UxwccavDP/4J0vhF3Hmoj8/2ou
+LW7OrV8+l+vI0gaeGa+r1sHhjDmNzOwJgzECAwEAAQJBAJq4PgkJtSAgqQh/hBEQ
+e39TzW6LmVGpG2MJ4DhAZKtLr8wqMNJzkPRyjS4WQHfYwqI55ntPQRF1PMyS8TWH
+rNkCIQD91J1xNxJwBfLQoiy5eYvdTLJtk2/Fy+rkCshhl6Dv4wIhAOwfvQxATJQ7
+/4rhiAw1KOE58m4fJ/qW/2FA2SCdDETbAiAjw5tTYmEUq6Hkx5TppTiRu8bALa/n
+/K1h6CsHpSel5QIgSKgDfe+TINHNciivukHpUFSKWoRPwvYPoxdXOIfarJ0CIGu2
+BrbiqyyJK6GeYHmzNJrKd8C1rtIzwquaqqLVoXPk
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_08_system_caps.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAO0NCbbrEm0bHRLzx9bPlwRqn+gMHdCrcZyeBGNUEqn0vAXxcXZU
+h3SxoHXP3ETs1qcMOzrQH3U/Ta5LBNaDgWUCAwEAAQJBAMaO6Dc2mh2X23eXiSmu
+gpGpej3VgFfcc3K7jXNh5axC/TyUYsNdqnXcE8iAwu34HhMIVDtf4/80i4vW5r5e
+5WECIQD76EQiJ0HNSZoev+qJhlHShpyeRPTEnvqu0QOAg7CuuQIhAPDm+y2vw1n6
+Q1StdQLpiEhogMcuEcoe0vk2VJq+frINAiB8q/hEeu9bHWk0fMEj7SFDszGCNxh4
+00G4EWPNT9+6qQIgelH+hkMx4TUnDQ8KVBE6ZvHROdHVrJicLXh92xkRAd0CIQDK
+idIQKCBbDoqsaKJ86Hd9/wKHp7lD0Arei7Auzo2xqQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_09_user_caps.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOQIBAAJBAKy+hM/JMjrqgDql2PaECatlfq+eDEfvwIpGJgqsmHL7wF1n15ec
+7PtbVOncZCsRvRdEBMwgmXj/S6bS4e04l48CAwEAAQJAcHkv4laexOuQiB8Z8BAy
+d42C+fePCXuaQq2/8S1FqX8dU/8C2XP7vOA+vvgNIYkm9i6Y9pk3NR5fuWUrJjXW
+EQIhANmrAcM9twxDVxfsKNngHhmaN8MziycM/QYV2O5Hjvi3AiEAyyo9lBr7vQqR
+emlX9wQmtV1ZiJRjnf/dylcYSxwmj+kCIGnDcePQRPUsc1EoauESyQ1fpeCvVtnu
+sbMXQoTlOE8ZAiA85+HkB57WUlfAidosHFt6XYzczBd9I1qbMTcANWU+GQIgKVFQ
+8iuZx7qYg+Qn7y4izyaI0J+bUuFsxzLdjSC1UY4=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_10_unconstrained.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBALrZqwNBfjfBnhaKKie6rWQv3YPbnYqz8vp8NNiG4DtjcBN4f420
+nT0EqN8elZQzOlfE+f1FCC0yODTnvys892kCAwEAAQJAcybUOsRxCeGcEN4DTsrA
+Mx9AkBOXirSNyQsk8lBk/pOjEvUMxz/V4zRcZZ7Tx8N/9dGxUamq9yt3AZy+FfS7
+JQIhAN3rjPfdSguGCNS8wd7dvL1m6D76ZD4p62VfrXcGhhu/AiEA14tmWaBZ2qTI
+4ilAI0qbh/ry4dgYIBa4Us3M+o0W1tcCIQCNyUF329rDIg/iW/dB/UnpeSZJlpEV
+ZpMPYeHiejiU4QIgGU7d2qIwSrLUf3GWfU5SSroVcJ0d4A6q39YYPkb4qosCIDUR
+j28lCKZgId9h373OGo4GX4rESeor86o/qLarJTKM
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_10_unconstrained.0.2.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBALWL+caaw0RbaZD7k+KWoyFTs7oZ8+fjYytRXVU3lKlxuio4aEPE
+7E4RZ9IhD3VI8JumclKt2DVfQgHsfvn+950CAwEAAQJBAJ7Ogv+oAYeaLw4UA5kC
+DFDq1xzD9wexcN5DnlEc/X359IOQlQPjwHpN3sXuPscKPNcXp+sFXhBSGOiR8V+X
+2kECIQDdWLGH95j4Iqh6joyvkMzHWTzwsHjOA4pR166qnJtbewIhANH4KGIHL0rY
+ZOKZ5xdG+OSXanCLpD6cyhuzchXgUCHHAiEAxlG0Zs2J6jErYPudw6PqRmaHOmPz
+KSp04RVtMwI0FEcCIAv51YPR2RaxxP9Pu+iN+cBACqgkrteLZdOypn0s8CUdAiB8
+RGbMfR6O8G5tW0rlHuPQlePyyosIKLwD86v+Q/iavA==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/mismatch_10_user_caps.0.1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBANjmt2PHYaDOkGVqnjnNqsBNd4P0gkj8hcvDoApuNqMnJu3YEwAd
+OJxY0/Pbo+BF6vnSTIGKkASHvEKsIXPrAYsCAwEAAQJAAaAA4bt9rMG/bTMWSmKT
+E+vAqHltfHR/4B3wFgPrXt+Jrgt86U3mhbHB82atv5zhG7Xc1u8ivHmtUl0qVc+e
+4QIhAPyTSwAKFq/ZBCCniOGFoZIbK+GTzDC6vlg3taY7q/WRAiEA29eYkT6YnMlx
+CkljXZMlRlBTwIqxgmyBBiwT1fP3x1sCIBpkSbH3W+eEBapj1ym5jOh3bl5j0zJE
+UR9mstRr58wBAiEAxp8sNZXTdlw9qCiUAPgvxi5O7Peh1w9HJxdtuHEanV8CICa8
+AOa24j1W86uKM4v6/rbtYQQysyRC6HSFtOgEnCGk
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/ocsp_02_single_sid1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBALG8p2A2NtxQt4MlQeY6Eal9qsqb4YsyTKfFV5yYvwacCzSTf2n/
+XWJL+uuNprTdgMeudDDAN0JTiMBnJD1l7Q8CAwEAAQJAdmXutYfH6eGXLbS+/mfG
+ZjrBcDCBAaHjMIukPjv+XJ6v09BLr4yPyqK7Hkx1sPKHq6zCGjohxMqlmpfabx88
+iQIhAN99kd/pRw0f7EF1i2x521DjoWR7CrO+fJlNlRuhMJRlAiEAy5dLLsO2qGv4
+JWXBp4H0Wbv/hF8+mxCZlEB4amQIwmMCIQDNRuVKKVbds0iqB3F8vaC4d5yyUmHO
+H1UK6rvemPuqEQIgKtUdwCz01OJCRrvtziwNGIPw8gyHw1/ur74Ql3GMVjkCIH9o
++nq04hSD2yO2XOLY68ytDafz0FV4hvTkyV0oFbM8
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/keys/ocsp_03_comb1.0.0.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOQIBAAJBAMe/fkXKQr4bBhWV+cufNEVTCcjqQ79ADZFVsYjQ1Pi/AvsvDpMl
+8u3b3y/14bYrRKuifpo1RyB4dCYDzWa7y1kCAwEAAQJAPsI0u1q8M5ysAbY4YLip
+pKpdZantFTbbzHD/MbxjXa+fS2/M1+7eQXPkcuG4qI1j1eOv74/pVBBiUeXvIncn
+AQIhAPlB4mHwZgSUgVSpHTeUwAVV9n4gZ6bmRFnc5cCf+RF5AiEAzSbBTR6ITiA8
+hH/ug698X+3z1vXO26sCGzobqZWC8OECIF64q9f+LDanXLKYhbLeg05DyaVKmTky
+nlzr9h+Ka3M5AiA1pbbS5fMbCw8ITzQeN5u8sksboXgQta19VTq6pCBzwQIgMDgi
+bI7mehP7TBY+fdFCy04J1RYJJfOY5UUq7TdDKxs=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/ocsp/revoked_user_caps.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: Mar 21 15:34:46 2005 GMT
+            Not After : Mar 19 15:34:46 2015 GMT
+        Subject: O=Symbian, CN=Test
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:d0:23:55:f9:ab:49:9f:ec:2d:36:61:5d:03:87:
+                    36:84:2d:60:55:99:b6:25:3d:9b:06:6f:a7:21:91:
+                    6b:93:52:74:21:fd:a4:db:85:b9:03:b3:f5:72:6b:
+                    92:e8:b1:05:b4:58:02:3e:80:9c:2f:c6:4d:7f:8d:
+                    8e:cf:70:f7:2d
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            1.2.826.0.1.1796587.1.1.1.6: 
+                ......
+    Signature Algorithm: md5WithRSAEncryption
+        60:2b:31:ff:00:c5:48:1a:60:b5:8b:0b:8b:ac:02:7c:4e:25:
+        10:e5:1e:6b:d7:47:67:df:18:42:18:af:41:d9:44:8a:d5:d5:
+        e1:a8:79:21:61:95:17:b2:0d:85:a3:9f:1b:d3:8f:37:21:69:
+        5f:b5:10:a9:6b:4e:fc:62:5e:50:0f:54:b2:58:ae:f1:28:d2:
+        b4:49:30:4b:0b:f9:4b:65:8c:92:70:fe:f2:4e:48:48:19:f5:
+        22:76:35:15:b6:8e:76:55:9f:68:00:c7:a4:6b:08:a3:ae:a9:
+        d6:fc:c1:fb:cf:bf:86:93:a7:a9:91:01:5e:2d:80:23:aa:1f:
+        00:21
+-----BEGIN CERTIFICATE-----
+MIIBqTCCARKgAwIBAgIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA1MDMyMTE1MzQ0NloXDTE1MDMxOTE1MzQ0NlowITEQMA4GA1UEChMHU3ltYmlh
+bjENMAsGA1UEAxMEVGVzdDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDQI1X5q0mf
+7C02YV0DhzaELWBVmbYlPZsGb6chkWuTUnQh/aTbhbkDs/Vya5LosQW0WAI+gJwv
+xk1/jY7PcPctAgMBAAGjGjAYMBYGDCqGOgAB7dNrAQEBBgQGAwQHAAOAMA0GCSqG
+SIb3DQEBBAUAA4GBAGArMf8AxUgaYLWLC4usAnxOJRDlHmvXR2ffGEIYr0HZRIrV
+1eGoeSFhlReyDYWjnxvTjzchaV+1EKlrTvxiXlAPVLJYrvEo0rRJMEsL+UtljJJw
+/vJOSEgZ9SJ2NRW2jnZVn2gAx6RrCKOuqdb8wfvPv4aTp6mRAV4tgCOqHwAh
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tdevcerts/ocsp/revoked_user_caps.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBANAjVfmrSZ/sLTZhXQOHNoQtYFWZtiU9mwZvpyGRa5NSdCH9pNuF
+uQOz9XJrkuixBbRYAj6AnC/GTX+Njs9w9y0CAwEAAQJACU77Ql5BvbA/WWZDVawP
+aRvqagmk1seJjmEh9WNej0kVEEoODIIkddHEt2G0ADj/MGPG9PXsZLwkAP/TY1Ex
+YQIhAPRbGJ8kDKD1cIJY40P7DveGjWoNi/wWpr+5+yn1lbpFAiEA2g5q423qB7ne
+9ZNs79GvCI4h/meODgElFEQ7oRrJy8kCIQDoS0mG0CBpS6qfX5z9XUgHK5R4A1TW
+Wzo9/bG1W8/w+QIhAIuqumoLx9/E/Ps8v4ToQH1xVHK373Qm5ZISlkL9fo2JAiBm
++HD+I6C+h9GpPgAY03Hgos6mhZKeMIHe5s+GyS9wJw==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/testexes/certs/default.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDBDCCAsSgAwIBAgIBADAJBgcqhkjOOAQDMGkxCzAJBgNVBAYTAkdCMRkwFwYD
+VQQKExBTeW1iaWFuIFNvZnR3YXJlMRkwFwYDVQQLExBDb3JlIERldmVsb3BtZW50
+MSQwIgYDVQQDExtEZWZhdWx0IFNpZ25pbmcgQ2VydGlmaWNhdGUwHhcNMDYwMjAy
+MTExNTI0WhcNMTYwMjAyMTExNTI0WjBpMQswCQYDVQQGEwJHQjEZMBcGA1UEChMQ
+U3ltYmlhbiBTb2Z0d2FyZTEZMBcGA1UECxMQQ29yZSBEZXZlbG9wbWVudDEkMCIG
+A1UEAxMbRGVmYXVsdCBTaWduaW5nIENlcnRpZmljYXRlMIIBtzCCASsGByqGSM44
+BAEwggEeAoGBALnfndoLyYr7KxvNenPJnEHXjw2/5A2sSgPqAS9Fa4za5O56V0Y8
+z5QcxL7PgzbhPPnPuzuxt2dZKKdWdCcls5YdB0acanKoMEgT6NmNxUxhSwvDlQBT
+dEujcdULpEZI+y/lTJLJZrh8Ak6e7FeXJEPMska56oeamvvyp2Dfz7y7AhUA7HTW
+0hQzOLdU0EoVF8LoFfp4CH0CgYBwo0ieIVUa35CUbpgkpG0EBJQbW3rSOvr1ATSZ
+qwzamHyqeVNqfv1ZMerpeikowFejifFFy7LJfgizgWlK2Z2Vw5Mp2900VJWIdvYZ
+g+QeLFqitMqjvhmhVgJYYWIjHj/w4QB6prEBW92ZfbRjW82g6WgfNQm7eY0XiJv0
+vBLf/AOBhQACgYEAg+0/wVe+LY9ZEB4HOL8y9Jl3vA7P8cqHPpr8ZuDgrAjVsXAk
+kjnvI/e86jUDUKnlWj/of+xCBwpTa/PYvdWHndBbRLm2XPgz3aFZLqgz7oMMUJwH
+f2qeqatOLfjY2SfgQwcqzY4T4Sbj/U7D89oLCCm3qizfn2MfIagivB5B9oYwCQYH
+KoZIzjgEAwMvADAsAhRCrW9kWjeAzf+NT2h2Ru+iMRqYkgIUVJghz8UIi17lFGod
+pBqu3ZY+1+I=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/testexes/certs/signing.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICaTCCAdICAQIwDQYJKoZIhvcNAQEEBQAwMzEdMBsGA1UEChMUU3ltYmlhbiBT
+b2Z0d2FyZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTAeFw0wNDA5MDEwOTM3MzZa
+Fw0xNDA4MzAwOTM3MzZaMHYxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24x
+GDAWBgNVBAMTD0pvaGFuIEdyb3RoIERTQTEUMBIGA1UEChMLU3ltYmlhbiBMdGQx
+JjAkBgkqhkiG9w0BCQEWF2pvaGFuLmdyb3RoQHN5bWJpYW4uY29tMIHwMIGoBgcq
+hkjOOAQBMIGcAkEAoZlsMI7fbUusygPAuy5rVKeYjHlFFBAI3Fm4/vRvz6AIXG/t
+i8PRr/di3HmpKzf4+nrpfrMDsHVEBZJvs12NKwIVALrQ4ij0GHpmhKPsUcL5Ur0M
+bUrlAkAwaCcVcQMsoYnZ7WGomaNH4XqkJ/Eo4ODM51syfG1u0ALTHqUvnX8EvhaK
+KAiRKTTvlWcEyUE1ViUpemt+Sv4MA0MAAkBuSEJNaOv4REzZSUPbUetl6e/886Dz
+l/PsC+2D9j583shY81TX1xtjQyuII/WTsZEc+HBvhHjnPDI5xzZNDbPsMA0GCSqG
+SIb3DQEBBAUAA4GBAHAPL48ztI+jfpNr+eQA/VOUg6ChgsoUQu2TVFo9tew/Cfrt
+ViqozDiVU4YGeGGNrTI19r9mTuI4xEbHwANxArNBtZvlN+Peu/ynqcYOcOV+RvV0
+cNeiKaguT71nzJJxlN/S+IX8+32LDvk/5FS2vJ5abaVc+WEV2/wZn4bPWqS/
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/01.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c4:40:88:bb:5e:38:6e:36:4e:21:a6:07:a3:d7:
+                    db:68:6a:f1:43:36:35:eb:c7:44:2e:b0:d9:f6:f0:
+                    47:b6:c9:20:5b:39:11:49:dd:79:25:ee:39:74:8d:
+                    50:30:3d:82:89:11:f1:3e:13:83:7b:47:dc:4c:ff:
+                    63:14:5f:1d:c3
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        9b:f1:63:21:ec:54:72:6f:6c:d0:4f:6a:6b:ef:b3:e4:ec:b4:
+        d9:be:30:10:b5:7e:89:5c:1a:28:0a:ba:49:eb:3b:81:f3:ed:
+        52:4d:89:6b:e3:16:67:22:f9:78:4c:9c:99:d4:83:4b:ef:2b:
+        8b:73:b9:85:d1:27:fa:15:2e:5e:ce:f2:7e:6d:ec:68:1d:e5:
+        99:fc:6d:17:12:03:c9:e2:61:a2:02:75:05:f7:8a:77:05:ec:
+        c8:42:7e:60:6f:23:ea:25:ff:99:bc:7c:39:3b:42:46:a2:21:
+        77:2f:10:66:d1:df:b4:f1:9d:5d:60:e9:12:5a:64:60:ba:1f:
+        50:b0
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYxMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMRAiLteOG42
+TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUndeSXuOXSNUDA9gokR8T4Tg3tH
+3Ez/YxRfHcMCAwEAATANBgkqhkiG9w0BAQQFAAOBgQCb8WMh7FRyb2zQT2pr77Pk
+7LTZvjAQtX6JXBooCrpJ6zuB8+1STYlr4xZnIvl4TJyZ1INL7yuLc7mF0Sf6FS5e
+zvJ+bexoHeWZ/G0XEgPJ4mGiAnUF94p3BezIQn5gbyPqJf+ZvHw5O0JGoiF3LxBm
+0d+08Z1dYOkSWmRguh9QsA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/02.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 2 (0x2)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev2
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c7:7d:76:75:e8:6e:87:97:a3:1c:16:4e:55:c2:
+                    19:77:e0:73:8c:af:2b:07:a1:69:b9:c2:f4:a1:34:
+                    54:93:5e:5a:5a:e9:cd:66:ef:1d:ee:48:5e:74:cb:
+                    a3:1b:5e:74:4d:05:8f:8b:f6:5e:1c:95:72:2b:c6:
+                    7f:58:25:dd:f9
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        70:81:71:f5:6a:55:62:cb:e4:62:2f:65:a6:6a:3d:a9:ad:20:
+        55:14:27:ea:10:ae:42:b3:d7:7a:ed:33:24:b8:6f:ae:64:09:
+        c3:a3:8b:b5:80:89:39:b8:1f:c2:b5:d6:e9:fc:dd:60:df:a4:
+        dc:2d:2e:e2:04:ec:15:0f:4c:6f:e1:fd:82:8f:4b:71:10:32:
+        63:56:f1:7b:d2:53:98:71:fb:99:79:5b:69:c0:40:07:65:d7:
+        81:67:d6:ba:b3:5f:19:74:1a:54:2e:6d:5c:c8:82:f4:aa:a0:
+        a0:be:e8:bb:fd:15:85:8c:1c:bc:54:aa:c4:d8:fe:73:77:67:
+        b9:69
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBAjANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYyMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMd9dnXoboeX
+oxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbvHe5IXnTLoxtedE0Fj4v2XhyV
+civGf1gl3fkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwgXH1alViy+RiL2Wmaj2p
+rSBVFCfqEK5Cs9d67TMkuG+uZAnDo4u1gIk5uB/Ctdbp/N1g36TcLS7iBOwVD0xv
+4f2Cj0txEDJjVvF70lOYcfuZeVtpwEAHZdeBZ9a6s18ZdBpULm1cyIL0qqCgvui7
+/RWFjBy8VKrE2P5zd2e5aQ==
+-----END CERTIFICATE-----
Binary file installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev1.cert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c4:40:88:bb:5e:38:6e:36:4e:21:a6:07:a3:d7:
+                    db:68:6a:f1:43:36:35:eb:c7:44:2e:b0:d9:f6:f0:
+                    47:b6:c9:20:5b:39:11:49:dd:79:25:ee:39:74:8d:
+                    50:30:3d:82:89:11:f1:3e:13:83:7b:47:dc:4c:ff:
+                    63:14:5f:1d:c3
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        9b:f1:63:21:ec:54:72:6f:6c:d0:4f:6a:6b:ef:b3:e4:ec:b4:
+        d9:be:30:10:b5:7e:89:5c:1a:28:0a:ba:49:eb:3b:81:f3:ed:
+        52:4d:89:6b:e3:16:67:22:f9:78:4c:9c:99:d4:83:4b:ef:2b:
+        8b:73:b9:85:d1:27:fa:15:2e:5e:ce:f2:7e:6d:ec:68:1d:e5:
+        99:fc:6d:17:12:03:c9:e2:61:a2:02:75:05:f7:8a:77:05:ec:
+        c8:42:7e:60:6f:23:ea:25:ff:99:bc:7c:39:3b:42:46:a2:21:
+        77:2f:10:66:d1:df:b4:f1:9d:5d:60:e9:12:5a:64:60:ba:1f:
+        50:b0
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYxMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMRAiLteOG42
+TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUndeSXuOXSNUDA9gokR8T4Tg3tH
+3Ez/YxRfHcMCAwEAATANBgkqhkiG9w0BAQQFAAOBgQCb8WMh7FRyb2zQT2pr77Pk
+7LTZvjAQtX6JXBooCrpJ6zuB8+1STYlr4xZnIvl4TJyZ1INL7yuLc7mF0Sf6FS5e
+zvJ+bexoHeWZ/G0XEgPJ4mGiAnUF94p3BezIQn5gbyPqJf+ZvHw5O0JGoiF3LxBm
+0d+08Z1dYOkSWmRguh9QsA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAMRAiLteOG42TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUnd
+eSXuOXSNUDA9gokR8T4Tg3tH3Ez/YxRfHcMCAwEAAQJBAKonoeWCfb7hCsEV6Q3f
+u/Y+sswplnrFHJK292SpVCRfm1doGBrt2QYEGyxLHnhSZA2w1WIsBser2g80RCWk
+jAECIQD20d4gbZEoleFaX6RvlgotLcfngGgG8WV4k4fXyvlSwwIhAMuNLaNGU3OI
+jrDRyddnsTf/7UKX3TPg5+MhKM/74FkBAiB97XOUPfKqr1Wrw1JlMDr+8/WjMotg
+x3bK/xJ20fNE+wIhAI/pdc3NR+0ULEZJXJol3r8H+7gsZKFsLqZ/6Dn8C6cBAiAI
+8WY2otPZNIbXQ7qDcj/UCFz02Cbx2guigKZWmmD3kQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev1.req.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,8 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBADCBqwIBADBGMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjERMA8G
+A1UECxMIU2VjdXJpdHkxEjAQBgNVBAMTCWNlcnRUcmV2MTBcMA0GCSqGSIb3DQEB
+AQUAA0sAMEgCQQDEQIi7XjhuNk4hpgej19toavFDNjXrx0QusNn28Ee2ySBbORFJ
+3Xkl7jl0jVAwPYKJEfE+E4N7R9xM/2MUXx3DAgMBAAGgADANBgkqhkiG9w0BAQQF
+AANBAAk3QvPIa2h0lEARrVaLYOa3Bv5OnsgXxM3kbiqSlGYA79TYi4ZJzA3GarfD
+tklnj/sVlrPmeOt5UHGss8Gr/Og=
+-----END CERTIFICATE REQUEST-----
Binary file installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev2.cert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 2 (0x2)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev2
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c7:7d:76:75:e8:6e:87:97:a3:1c:16:4e:55:c2:
+                    19:77:e0:73:8c:af:2b:07:a1:69:b9:c2:f4:a1:34:
+                    54:93:5e:5a:5a:e9:cd:66:ef:1d:ee:48:5e:74:cb:
+                    a3:1b:5e:74:4d:05:8f:8b:f6:5e:1c:95:72:2b:c6:
+                    7f:58:25:dd:f9
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        70:81:71:f5:6a:55:62:cb:e4:62:2f:65:a6:6a:3d:a9:ad:20:
+        55:14:27:ea:10:ae:42:b3:d7:7a:ed:33:24:b8:6f:ae:64:09:
+        c3:a3:8b:b5:80:89:39:b8:1f:c2:b5:d6:e9:fc:dd:60:df:a4:
+        dc:2d:2e:e2:04:ec:15:0f:4c:6f:e1:fd:82:8f:4b:71:10:32:
+        63:56:f1:7b:d2:53:98:71:fb:99:79:5b:69:c0:40:07:65:d7:
+        81:67:d6:ba:b3:5f:19:74:1a:54:2e:6d:5c:c8:82:f4:aa:a0:
+        a0:be:e8:bb:fd:15:85:8c:1c:bc:54:aa:c4:d8:fe:73:77:67:
+        b9:69
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBAjANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYyMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMd9dnXoboeX
+oxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbvHe5IXnTLoxtedE0Fj4v2XhyV
+civGf1gl3fkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwgXH1alViy+RiL2Wmaj2p
+rSBVFCfqEK5Cs9d67TMkuG+uZAnDo4u1gIk5uB/Ctdbp/N1g36TcLS7iBOwVD0xv
+4f2Cj0txEDJjVvF70lOYcfuZeVtpwEAHZdeBZ9a6s18ZdBpULm1cyIL0qqCgvui7
+/RWFjBy8VKrE2P5zd2e5aQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev2.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMd9dnXoboeXoxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbv
+He5IXnTLoxtedE0Fj4v2XhyVcivGf1gl3fkCAwEAAQJAJs6cVdGSduQjwdoBASPS
+KoTKVarZ1xEqbQ2k4xs3/La8nol/+A6zZ1NFNzoSWWNFKqcmadM84xfmWzp0y3vz
+AQIhAP3Q4pHukB2OGZ6dbjvuCmaEZ1g9bZILDK0Snt0wgs+hAiEAyTToHkM+/BP8
+TCuihuTtbxKliz3f/YTWgrs0SIn5T1kCIAQsyW1JFUnHKpi3UjbeJYGmL+T9ra23
+TNAT/FT7FUvBAiEAql+YZXe/r6gkrUMNnnfe7Xy2nM9KCdwf4Bcw0HO0nhECIGYT
+amV/8ie79ccsjNYsB5/TXIwmHp95BfgT+0W8ikBI
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/certs/certTrev2.req.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIHtMIGYAgEAMDMxCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMRIwEAYD
+VQQDEwljZXJ0VHJldjIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAx312dehuh5ej
+HBZOVcIZd+BzjK8rB6FpucL0oTRUk15aWunNZu8d7khedMujG150TQWPi/ZeHJVy
+K8Z/WCXd+QIDAQABoAAwDQYJKoZIhvcNAQEEBQADQQBcWWJNdWAiwqWcdh1GnwEq
+knJImcEm4V88Ag8vf2Knru6o8wTOmsiETr4JgN26hQVr/bl8MvYAUhxrQWXcw7Ib
+-----END CERTIFICATE REQUEST-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/private/ca.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQChVEG+fSTsN8df07UDBsxGUZO5B9egVtoT6Do3iD1W0LwAOuPs
+74LpQRMgRFWpuoicMlEMoaTIZ/GPi6yHhC7CPJELlvBW1TXgbvzMdhUvacDyUKHj
+YMgkIF4+t1OziH6cKAN2I0H/nWa1m54YmYyU2cNAI3aSkuIqBPv+0B/XgQIDAQAB
+AoGACVCcGyuOnjT6RgYrRWl3EfhT1zMkuBVLsiqOcfZj1EdpE3pS/rM1k9I2EH7h
+k1M54ArnsxsCMLAPuoIODCUNrgHoTKJtL8cU8Pa7ZALewSLfRDUqOJLi+W3Ups46
+6jvdqQkFRF2k9evJOyI7wMs1rG0c/MzBGC+5lRbOOWbfcYECQQDPLUO58npxgrup
+usp2LUdE/Vz/fsJOVCoyzJq29LMvTqmAWqPvU1YkoB+U1ZOtvxd8r6/vlUZvDx64
+y2m4htLdAkEAx1kOCcpLl+ElEDGV3z7F77JTh128DvczyOU3j639LvqTfQR3FHOP
++89RmP1axo/Qhh0tClkdif8ZV99iac6S9QJAdrDt/hfGwkUtkj2rRC0IiaPFpbJP
+S2S4kEXb1Tk3dsDQJvLGvJO35F+/+Bqr8nxpzkswtkeFBJda+G/A77B+GQJAWAT5
+TtdUo14U6F6Mh0MHULvTZ9y6cX0zD0wuSTGQrhKT1sqG7a/M7mlu5PdRAoVzlBQD
+1CLfCRRrE0KeCIvelQJAaSdqX9/vuiJOnGfL8SSXxfB3hXcJU0e2Lo252eeeQtux
+oMTb0/jADuN0nxfsU1yvxgX+1nsso8uwpFPiFwdPHQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev1/SymbianTestRootCARSATRev/private/ca.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRDCCAa2gAwIBAgIBADANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA0MDQxODE0MzYxNFoXDTIwMDkyMTE0MzYxNFowPDEdMBsGA1UEChMUU3ltYmlh
+biBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5bWJpYW4gVGVzdCAtIFJTQTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAoVRBvn0k7DfHX9O1AwbMRlGTuQfXoFba
+E+g6N4g9VtC8ADrj7O+C6UETIERVqbqInDJRDKGkyGfxj4ush4QuwjyRC5bwVtU1
+4G78zHYVL2nA8lCh42DIJCBePrdTs4h+nCgDdiNB/51mtZueGJmMlNnDQCN2kpLi
+KgT7/tAf14ECAwEAAaNWMFQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwHQYDVR0OBBYEFOaTjrYQFlD8GQSM5KnKMYYmBZLWMA8GCSsGAQUFBzAB
+BQQCBQAwDQYJKoZIhvcNAQEEBQADgYEALXOi9zFgWw453UGQvw0HGNh6wemX2Ood
+pKceGDWyWFaQIxTA9dYVSqnhKWa728UklUi0CcRwp3leYHlvubkcSQANmRtM05PS
+kY2a2ENBf9afB/HNvOciFgGoHa494csZZ6ZS2GeKBxBOfajrjZrvQ3XDKptsRT1q
+50LsYyJhSg4=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/01.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c4:40:88:bb:5e:38:6e:36:4e:21:a6:07:a3:d7:
+                    db:68:6a:f1:43:36:35:eb:c7:44:2e:b0:d9:f6:f0:
+                    47:b6:c9:20:5b:39:11:49:dd:79:25:ee:39:74:8d:
+                    50:30:3d:82:89:11:f1:3e:13:83:7b:47:dc:4c:ff:
+                    63:14:5f:1d:c3
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        9b:f1:63:21:ec:54:72:6f:6c:d0:4f:6a:6b:ef:b3:e4:ec:b4:
+        d9:be:30:10:b5:7e:89:5c:1a:28:0a:ba:49:eb:3b:81:f3:ed:
+        52:4d:89:6b:e3:16:67:22:f9:78:4c:9c:99:d4:83:4b:ef:2b:
+        8b:73:b9:85:d1:27:fa:15:2e:5e:ce:f2:7e:6d:ec:68:1d:e5:
+        99:fc:6d:17:12:03:c9:e2:61:a2:02:75:05:f7:8a:77:05:ec:
+        c8:42:7e:60:6f:23:ea:25:ff:99:bc:7c:39:3b:42:46:a2:21:
+        77:2f:10:66:d1:df:b4:f1:9d:5d:60:e9:12:5a:64:60:ba:1f:
+        50:b0
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYxMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMRAiLteOG42
+TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUndeSXuOXSNUDA9gokR8T4Tg3tH
+3Ez/YxRfHcMCAwEAATANBgkqhkiG9w0BAQQFAAOBgQCb8WMh7FRyb2zQT2pr77Pk
+7LTZvjAQtX6JXBooCrpJ6zuB8+1STYlr4xZnIvl4TJyZ1INL7yuLc7mF0Sf6FS5e
+zvJ+bexoHeWZ/G0XEgPJ4mGiAnUF94p3BezIQn5gbyPqJf+ZvHw5O0JGoiF3LxBm
+0d+08Z1dYOkSWmRguh9QsA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/02.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 2 (0x2)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev2
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c7:7d:76:75:e8:6e:87:97:a3:1c:16:4e:55:c2:
+                    19:77:e0:73:8c:af:2b:07:a1:69:b9:c2:f4:a1:34:
+                    54:93:5e:5a:5a:e9:cd:66:ef:1d:ee:48:5e:74:cb:
+                    a3:1b:5e:74:4d:05:8f:8b:f6:5e:1c:95:72:2b:c6:
+                    7f:58:25:dd:f9
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        70:81:71:f5:6a:55:62:cb:e4:62:2f:65:a6:6a:3d:a9:ad:20:
+        55:14:27:ea:10:ae:42:b3:d7:7a:ed:33:24:b8:6f:ae:64:09:
+        c3:a3:8b:b5:80:89:39:b8:1f:c2:b5:d6:e9:fc:dd:60:df:a4:
+        dc:2d:2e:e2:04:ec:15:0f:4c:6f:e1:fd:82:8f:4b:71:10:32:
+        63:56:f1:7b:d2:53:98:71:fb:99:79:5b:69:c0:40:07:65:d7:
+        81:67:d6:ba:b3:5f:19:74:1a:54:2e:6d:5c:c8:82:f4:aa:a0:
+        a0:be:e8:bb:fd:15:85:8c:1c:bc:54:aa:c4:d8:fe:73:77:67:
+        b9:69
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBAjANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYyMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMd9dnXoboeX
+oxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbvHe5IXnTLoxtedE0Fj4v2XhyV
+civGf1gl3fkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwgXH1alViy+RiL2Wmaj2p
+rSBVFCfqEK5Cs9d67TMkuG+uZAnDo4u1gIk5uB/Ctdbp/N1g36TcLS7iBOwVD0xv
+4f2Cj0txEDJjVvF70lOYcfuZeVtpwEAHZdeBZ9a6s18ZdBpULm1cyIL0qqCgvui7
+/RWFjBy8VKrE2P5zd2e5aQ==
+-----END CERTIFICATE-----
Binary file installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev1.cert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c4:40:88:bb:5e:38:6e:36:4e:21:a6:07:a3:d7:
+                    db:68:6a:f1:43:36:35:eb:c7:44:2e:b0:d9:f6:f0:
+                    47:b6:c9:20:5b:39:11:49:dd:79:25:ee:39:74:8d:
+                    50:30:3d:82:89:11:f1:3e:13:83:7b:47:dc:4c:ff:
+                    63:14:5f:1d:c3
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        9b:f1:63:21:ec:54:72:6f:6c:d0:4f:6a:6b:ef:b3:e4:ec:b4:
+        d9:be:30:10:b5:7e:89:5c:1a:28:0a:ba:49:eb:3b:81:f3:ed:
+        52:4d:89:6b:e3:16:67:22:f9:78:4c:9c:99:d4:83:4b:ef:2b:
+        8b:73:b9:85:d1:27:fa:15:2e:5e:ce:f2:7e:6d:ec:68:1d:e5:
+        99:fc:6d:17:12:03:c9:e2:61:a2:02:75:05:f7:8a:77:05:ec:
+        c8:42:7e:60:6f:23:ea:25:ff:99:bc:7c:39:3b:42:46:a2:21:
+        77:2f:10:66:d1:df:b4:f1:9d:5d:60:e9:12:5a:64:60:ba:1f:
+        50:b0
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYxMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMRAiLteOG42
+TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUndeSXuOXSNUDA9gokR8T4Tg3tH
+3Ez/YxRfHcMCAwEAATANBgkqhkiG9w0BAQQFAAOBgQCb8WMh7FRyb2zQT2pr77Pk
+7LTZvjAQtX6JXBooCrpJ6zuB8+1STYlr4xZnIvl4TJyZ1INL7yuLc7mF0Sf6FS5e
+zvJ+bexoHeWZ/G0XEgPJ4mGiAnUF94p3BezIQn5gbyPqJf+ZvHw5O0JGoiF3LxBm
+0d+08Z1dYOkSWmRguh9QsA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAMRAiLteOG42TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUnd
+eSXuOXSNUDA9gokR8T4Tg3tH3Ez/YxRfHcMCAwEAAQJBAKonoeWCfb7hCsEV6Q3f
+u/Y+sswplnrFHJK292SpVCRfm1doGBrt2QYEGyxLHnhSZA2w1WIsBser2g80RCWk
+jAECIQD20d4gbZEoleFaX6RvlgotLcfngGgG8WV4k4fXyvlSwwIhAMuNLaNGU3OI
+jrDRyddnsTf/7UKX3TPg5+MhKM/74FkBAiB97XOUPfKqr1Wrw1JlMDr+8/WjMotg
+x3bK/xJ20fNE+wIhAI/pdc3NR+0ULEZJXJol3r8H+7gsZKFsLqZ/6Dn8C6cBAiAI
+8WY2otPZNIbXQ7qDcj/UCFz02Cbx2guigKZWmmD3kQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev1.req.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,8 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBADCBqwIBADBGMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjERMA8G
+A1UECxMIU2VjdXJpdHkxEjAQBgNVBAMTCWNlcnRUcmV2MTBcMA0GCSqGSIb3DQEB
+AQUAA0sAMEgCQQDEQIi7XjhuNk4hpgej19toavFDNjXrx0QusNn28Ee2ySBbORFJ
+3Xkl7jl0jVAwPYKJEfE+E4N7R9xM/2MUXx3DAgMBAAGgADANBgkqhkiG9w0BAQQF
+AANBAAk3QvPIa2h0lEARrVaLYOa3Bv5OnsgXxM3kbiqSlGYA79TYi4ZJzA3GarfD
+tklnj/sVlrPmeOt5UHGss8Gr/Og=
+-----END CERTIFICATE REQUEST-----
Binary file installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev2.cert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 2 (0x2)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev2
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c7:7d:76:75:e8:6e:87:97:a3:1c:16:4e:55:c2:
+                    19:77:e0:73:8c:af:2b:07:a1:69:b9:c2:f4:a1:34:
+                    54:93:5e:5a:5a:e9:cd:66:ef:1d:ee:48:5e:74:cb:
+                    a3:1b:5e:74:4d:05:8f:8b:f6:5e:1c:95:72:2b:c6:
+                    7f:58:25:dd:f9
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        70:81:71:f5:6a:55:62:cb:e4:62:2f:65:a6:6a:3d:a9:ad:20:
+        55:14:27:ea:10:ae:42:b3:d7:7a:ed:33:24:b8:6f:ae:64:09:
+        c3:a3:8b:b5:80:89:39:b8:1f:c2:b5:d6:e9:fc:dd:60:df:a4:
+        dc:2d:2e:e2:04:ec:15:0f:4c:6f:e1:fd:82:8f:4b:71:10:32:
+        63:56:f1:7b:d2:53:98:71:fb:99:79:5b:69:c0:40:07:65:d7:
+        81:67:d6:ba:b3:5f:19:74:1a:54:2e:6d:5c:c8:82:f4:aa:a0:
+        a0:be:e8:bb:fd:15:85:8c:1c:bc:54:aa:c4:d8:fe:73:77:67:
+        b9:69
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBAjANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYyMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMd9dnXoboeX
+oxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbvHe5IXnTLoxtedE0Fj4v2XhyV
+civGf1gl3fkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwgXH1alViy+RiL2Wmaj2p
+rSBVFCfqEK5Cs9d67TMkuG+uZAnDo4u1gIk5uB/Ctdbp/N1g36TcLS7iBOwVD0xv
+4f2Cj0txEDJjVvF70lOYcfuZeVtpwEAHZdeBZ9a6s18ZdBpULm1cyIL0qqCgvui7
+/RWFjBy8VKrE2P5zd2e5aQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev2.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMd9dnXoboeXoxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbv
+He5IXnTLoxtedE0Fj4v2XhyVcivGf1gl3fkCAwEAAQJAJs6cVdGSduQjwdoBASPS
+KoTKVarZ1xEqbQ2k4xs3/La8nol/+A6zZ1NFNzoSWWNFKqcmadM84xfmWzp0y3vz
+AQIhAP3Q4pHukB2OGZ6dbjvuCmaEZ1g9bZILDK0Snt0wgs+hAiEAyTToHkM+/BP8
+TCuihuTtbxKliz3f/YTWgrs0SIn5T1kCIAQsyW1JFUnHKpi3UjbeJYGmL+T9ra23
+TNAT/FT7FUvBAiEAql+YZXe/r6gkrUMNnnfe7Xy2nM9KCdwf4Bcw0HO0nhECIGYT
+amV/8ie79ccsjNYsB5/TXIwmHp95BfgT+0W8ikBI
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/certs/certTrev2.req.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIHtMIGYAgEAMDMxCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMRIwEAYD
+VQQDEwljZXJ0VHJldjIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAx312dehuh5ej
+HBZOVcIZd+BzjK8rB6FpucL0oTRUk15aWunNZu8d7khedMujG150TQWPi/ZeHJVy
+K8Z/WCXd+QIDAQABoAAwDQYJKoZIhvcNAQEEBQADQQBcWWJNdWAiwqWcdh1GnwEq
+knJImcEm4V88Ag8vf2Knru6o8wTOmsiETr4JgN26hQVr/bl8MvYAUhxrQWXcw7Ib
+-----END CERTIFICATE REQUEST-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/private/ca.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQChVEG+fSTsN8df07UDBsxGUZO5B9egVtoT6Do3iD1W0LwAOuPs
+74LpQRMgRFWpuoicMlEMoaTIZ/GPi6yHhC7CPJELlvBW1TXgbvzMdhUvacDyUKHj
+YMgkIF4+t1OziH6cKAN2I0H/nWa1m54YmYyU2cNAI3aSkuIqBPv+0B/XgQIDAQAB
+AoGACVCcGyuOnjT6RgYrRWl3EfhT1zMkuBVLsiqOcfZj1EdpE3pS/rM1k9I2EH7h
+k1M54ArnsxsCMLAPuoIODCUNrgHoTKJtL8cU8Pa7ZALewSLfRDUqOJLi+W3Ups46
+6jvdqQkFRF2k9evJOyI7wMs1rG0c/MzBGC+5lRbOOWbfcYECQQDPLUO58npxgrup
+usp2LUdE/Vz/fsJOVCoyzJq29LMvTqmAWqPvU1YkoB+U1ZOtvxd8r6/vlUZvDx64
+y2m4htLdAkEAx1kOCcpLl+ElEDGV3z7F77JTh128DvczyOU3j639LvqTfQR3FHOP
++89RmP1axo/Qhh0tClkdif8ZV99iac6S9QJAdrDt/hfGwkUtkj2rRC0IiaPFpbJP
+S2S4kEXb1Tk3dsDQJvLGvJO35F+/+Bqr8nxpzkswtkeFBJda+G/A77B+GQJAWAT5
+TtdUo14U6F6Mh0MHULvTZ9y6cX0zD0wuSTGQrhKT1sqG7a/M7mlu5PdRAoVzlBQD
+1CLfCRRrE0KeCIvelQJAaSdqX9/vuiJOnGfL8SSXxfB3hXcJU0e2Lo252eeeQtux
+oMTb0/jADuN0nxfsU1yvxgX+1nsso8uwpFPiFwdPHQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev2/SymbianTestRootCARSATRev/private/ca.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRDCCAa2gAwIBAgIBADANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA0MDQxODE0MzYxNFoXDTIwMDkyMTE0MzYxNFowPDEdMBsGA1UEChMUU3ltYmlh
+biBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5bWJpYW4gVGVzdCAtIFJTQTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAoVRBvn0k7DfHX9O1AwbMRlGTuQfXoFba
+E+g6N4g9VtC8ADrj7O+C6UETIERVqbqInDJRDKGkyGfxj4ush4QuwjyRC5bwVtU1
+4G78zHYVL2nA8lCh42DIJCBePrdTs4h+nCgDdiNB/51mtZueGJmMlNnDQCN2kpLi
+KgT7/tAf14ECAwEAAaNWMFQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwHQYDVR0OBBYEFOaTjrYQFlD8GQSM5KnKMYYmBZLWMA8GCSsGAQUFBzAB
+BQQCBQAwDQYJKoZIhvcNAQEEBQADgYEALXOi9zFgWw453UGQvw0HGNh6wemX2Ood
+pKceGDWyWFaQIxTA9dYVSqnhKWa728UklUi0CcRwp3leYHlvubkcSQANmRtM05PS
+kY2a2ENBf9afB/HNvOciFgGoHa494csZZ6ZS2GeKBxBOfajrjZrvQ3XDKptsRT1q
+50LsYyJhSg4=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev3/SymbianTestRootCARSATRev/private/ca.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQChVEG+fSTsN8df07UDBsxGUZO5B9egVtoT6Do3iD1W0LwAOuPs
+74LpQRMgRFWpuoicMlEMoaTIZ/GPi6yHhC7CPJELlvBW1TXgbvzMdhUvacDyUKHj
+YMgkIF4+t1OziH6cKAN2I0H/nWa1m54YmYyU2cNAI3aSkuIqBPv+0B/XgQIDAQAB
+AoGACVCcGyuOnjT6RgYrRWl3EfhT1zMkuBVLsiqOcfZj1EdpE3pS/rM1k9I2EH7h
+k1M54ArnsxsCMLAPuoIODCUNrgHoTKJtL8cU8Pa7ZALewSLfRDUqOJLi+W3Ups46
+6jvdqQkFRF2k9evJOyI7wMs1rG0c/MzBGC+5lRbOOWbfcYECQQDPLUO58npxgrup
+usp2LUdE/Vz/fsJOVCoyzJq29LMvTqmAWqPvU1YkoB+U1ZOtvxd8r6/vlUZvDx64
+y2m4htLdAkEAx1kOCcpLl+ElEDGV3z7F77JTh128DvczyOU3j639LvqTfQR3FHOP
++89RmP1axo/Qhh0tClkdif8ZV99iac6S9QJAdrDt/hfGwkUtkj2rRC0IiaPFpbJP
+S2S4kEXb1Tk3dsDQJvLGvJO35F+/+Bqr8nxpzkswtkeFBJda+G/A77B+GQJAWAT5
+TtdUo14U6F6Mh0MHULvTZ9y6cX0zD0wuSTGQrhKT1sqG7a/M7mlu5PdRAoVzlBQD
+1CLfCRRrE0KeCIvelQJAaSdqX9/vuiJOnGfL8SSXxfB3hXcJU0e2Lo252eeeQtux
+oMTb0/jADuN0nxfsU1yvxgX+1nsso8uwpFPiFwdPHQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/SymbianTestRootCARSA_OCSP_TRev3/SymbianTestRootCARSATRev/private/ca.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRDCCAa2gAwIBAgIBADANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA0MDQxODE0MzYxNFoXDTIwMDkyMTE0MzYxNFowPDEdMBsGA1UEChMUU3ltYmlh
+biBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5bWJpYW4gVGVzdCAtIFJTQTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAoVRBvn0k7DfHX9O1AwbMRlGTuQfXoFba
+E+g6N4g9VtC8ADrj7O+C6UETIERVqbqInDJRDKGkyGfxj4ush4QuwjyRC5bwVtU1
+4G78zHYVL2nA8lCh42DIJCBePrdTs4h+nCgDdiNB/51mtZueGJmMlNnDQCN2kpLi
+KgT7/tAf14ECAwEAAaNWMFQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwHQYDVR0OBBYEFOaTjrYQFlD8GQSM5KnKMYYmBZLWMA8GCSsGAQUFBzAB
+BQQCBQAwDQYJKoZIhvcNAQEEBQADgYEALXOi9zFgWw453UGQvw0HGNh6wemX2Ood
+pKceGDWyWFaQIxTA9dYVSqnhKWa728UklUi0CcRwp3leYHlvubkcSQANmRtM05PS
+kY2a2ENBf9afB/HNvOciFgGoHa494csZZ6ZS2GeKBxBOfajrjZrvQ3XDKptsRT1q
+50LsYyJhSg4=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/01.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c4:40:88:bb:5e:38:6e:36:4e:21:a6:07:a3:d7:
+                    db:68:6a:f1:43:36:35:eb:c7:44:2e:b0:d9:f6:f0:
+                    47:b6:c9:20:5b:39:11:49:dd:79:25:ee:39:74:8d:
+                    50:30:3d:82:89:11:f1:3e:13:83:7b:47:dc:4c:ff:
+                    63:14:5f:1d:c3
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        9b:f1:63:21:ec:54:72:6f:6c:d0:4f:6a:6b:ef:b3:e4:ec:b4:
+        d9:be:30:10:b5:7e:89:5c:1a:28:0a:ba:49:eb:3b:81:f3:ed:
+        52:4d:89:6b:e3:16:67:22:f9:78:4c:9c:99:d4:83:4b:ef:2b:
+        8b:73:b9:85:d1:27:fa:15:2e:5e:ce:f2:7e:6d:ec:68:1d:e5:
+        99:fc:6d:17:12:03:c9:e2:61:a2:02:75:05:f7:8a:77:05:ec:
+        c8:42:7e:60:6f:23:ea:25:ff:99:bc:7c:39:3b:42:46:a2:21:
+        77:2f:10:66:d1:df:b4:f1:9d:5d:60:e9:12:5a:64:60:ba:1f:
+        50:b0
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYxMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMRAiLteOG42
+TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUndeSXuOXSNUDA9gokR8T4Tg3tH
+3Ez/YxRfHcMCAwEAATANBgkqhkiG9w0BAQQFAAOBgQCb8WMh7FRyb2zQT2pr77Pk
+7LTZvjAQtX6JXBooCrpJ6zuB8+1STYlr4xZnIvl4TJyZ1INL7yuLc7mF0Sf6FS5e
+zvJ+bexoHeWZ/G0XEgPJ4mGiAnUF94p3BezIQn5gbyPqJf+ZvHw5O0JGoiF3LxBm
+0d+08Z1dYOkSWmRguh9QsA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/02.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 2 (0x2)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev2
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c7:7d:76:75:e8:6e:87:97:a3:1c:16:4e:55:c2:
+                    19:77:e0:73:8c:af:2b:07:a1:69:b9:c2:f4:a1:34:
+                    54:93:5e:5a:5a:e9:cd:66:ef:1d:ee:48:5e:74:cb:
+                    a3:1b:5e:74:4d:05:8f:8b:f6:5e:1c:95:72:2b:c6:
+                    7f:58:25:dd:f9
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        70:81:71:f5:6a:55:62:cb:e4:62:2f:65:a6:6a:3d:a9:ad:20:
+        55:14:27:ea:10:ae:42:b3:d7:7a:ed:33:24:b8:6f:ae:64:09:
+        c3:a3:8b:b5:80:89:39:b8:1f:c2:b5:d6:e9:fc:dd:60:df:a4:
+        dc:2d:2e:e2:04:ec:15:0f:4c:6f:e1:fd:82:8f:4b:71:10:32:
+        63:56:f1:7b:d2:53:98:71:fb:99:79:5b:69:c0:40:07:65:d7:
+        81:67:d6:ba:b3:5f:19:74:1a:54:2e:6d:5c:c8:82:f4:aa:a0:
+        a0:be:e8:bb:fd:15:85:8c:1c:bc:54:aa:c4:d8:fe:73:77:67:
+        b9:69
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBAjANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYyMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMd9dnXoboeX
+oxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbvHe5IXnTLoxtedE0Fj4v2XhyV
+civGf1gl3fkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwgXH1alViy+RiL2Wmaj2p
+rSBVFCfqEK5Cs9d67TMkuG+uZAnDo4u1gIk5uB/Ctdbp/N1g36TcLS7iBOwVD0xv
+4f2Cj0txEDJjVvF70lOYcfuZeVtpwEAHZdeBZ9a6s18ZdBpULm1cyIL0qqCgvui7
+/RWFjBy8VKrE2P5zd2e5aQ==
+-----END CERTIFICATE-----
Binary file installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev1.cert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c4:40:88:bb:5e:38:6e:36:4e:21:a6:07:a3:d7:
+                    db:68:6a:f1:43:36:35:eb:c7:44:2e:b0:d9:f6:f0:
+                    47:b6:c9:20:5b:39:11:49:dd:79:25:ee:39:74:8d:
+                    50:30:3d:82:89:11:f1:3e:13:83:7b:47:dc:4c:ff:
+                    63:14:5f:1d:c3
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        9b:f1:63:21:ec:54:72:6f:6c:d0:4f:6a:6b:ef:b3:e4:ec:b4:
+        d9:be:30:10:b5:7e:89:5c:1a:28:0a:ba:49:eb:3b:81:f3:ed:
+        52:4d:89:6b:e3:16:67:22:f9:78:4c:9c:99:d4:83:4b:ef:2b:
+        8b:73:b9:85:d1:27:fa:15:2e:5e:ce:f2:7e:6d:ec:68:1d:e5:
+        99:fc:6d:17:12:03:c9:e2:61:a2:02:75:05:f7:8a:77:05:ec:
+        c8:42:7e:60:6f:23:ea:25:ff:99:bc:7c:39:3b:42:46:a2:21:
+        77:2f:10:66:d1:df:b4:f1:9d:5d:60:e9:12:5a:64:60:ba:1f:
+        50:b0
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYxMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMRAiLteOG42
+TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUndeSXuOXSNUDA9gokR8T4Tg3tH
+3Ez/YxRfHcMCAwEAATANBgkqhkiG9w0BAQQFAAOBgQCb8WMh7FRyb2zQT2pr77Pk
+7LTZvjAQtX6JXBooCrpJ6zuB8+1STYlr4xZnIvl4TJyZ1INL7yuLc7mF0Sf6FS5e
+zvJ+bexoHeWZ/G0XEgPJ4mGiAnUF94p3BezIQn5gbyPqJf+ZvHw5O0JGoiF3LxBm
+0d+08Z1dYOkSWmRguh9QsA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAMRAiLteOG42TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUnd
+eSXuOXSNUDA9gokR8T4Tg3tH3Ez/YxRfHcMCAwEAAQJBAKonoeWCfb7hCsEV6Q3f
+u/Y+sswplnrFHJK292SpVCRfm1doGBrt2QYEGyxLHnhSZA2w1WIsBser2g80RCWk
+jAECIQD20d4gbZEoleFaX6RvlgotLcfngGgG8WV4k4fXyvlSwwIhAMuNLaNGU3OI
+jrDRyddnsTf/7UKX3TPg5+MhKM/74FkBAiB97XOUPfKqr1Wrw1JlMDr+8/WjMotg
+x3bK/xJ20fNE+wIhAI/pdc3NR+0ULEZJXJol3r8H+7gsZKFsLqZ/6Dn8C6cBAiAI
+8WY2otPZNIbXQ7qDcj/UCFz02Cbx2guigKZWmmD3kQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev1.req.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,8 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBADCBqwIBADBGMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjERMA8G
+A1UECxMIU2VjdXJpdHkxEjAQBgNVBAMTCWNlcnRUcmV2MTBcMA0GCSqGSIb3DQEB
+AQUAA0sAMEgCQQDEQIi7XjhuNk4hpgej19toavFDNjXrx0QusNn28Ee2ySBbORFJ
+3Xkl7jl0jVAwPYKJEfE+E4N7R9xM/2MUXx3DAgMBAAGgADANBgkqhkiG9w0BAQQF
+AANBAAk3QvPIa2h0lEARrVaLYOa3Bv5OnsgXxM3kbiqSlGYA79TYi4ZJzA3GarfD
+tklnj/sVlrPmeOt5UHGss8Gr/Og=
+-----END CERTIFICATE REQUEST-----
Binary file installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev2.cert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 2 (0x2)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev2
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c7:7d:76:75:e8:6e:87:97:a3:1c:16:4e:55:c2:
+                    19:77:e0:73:8c:af:2b:07:a1:69:b9:c2:f4:a1:34:
+                    54:93:5e:5a:5a:e9:cd:66:ef:1d:ee:48:5e:74:cb:
+                    a3:1b:5e:74:4d:05:8f:8b:f6:5e:1c:95:72:2b:c6:
+                    7f:58:25:dd:f9
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        70:81:71:f5:6a:55:62:cb:e4:62:2f:65:a6:6a:3d:a9:ad:20:
+        55:14:27:ea:10:ae:42:b3:d7:7a:ed:33:24:b8:6f:ae:64:09:
+        c3:a3:8b:b5:80:89:39:b8:1f:c2:b5:d6:e9:fc:dd:60:df:a4:
+        dc:2d:2e:e2:04:ec:15:0f:4c:6f:e1:fd:82:8f:4b:71:10:32:
+        63:56:f1:7b:d2:53:98:71:fb:99:79:5b:69:c0:40:07:65:d7:
+        81:67:d6:ba:b3:5f:19:74:1a:54:2e:6d:5c:c8:82:f4:aa:a0:
+        a0:be:e8:bb:fd:15:85:8c:1c:bc:54:aa:c4:d8:fe:73:77:67:
+        b9:69
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBAjANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYyMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMd9dnXoboeX
+oxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbvHe5IXnTLoxtedE0Fj4v2XhyV
+civGf1gl3fkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwgXH1alViy+RiL2Wmaj2p
+rSBVFCfqEK5Cs9d67TMkuG+uZAnDo4u1gIk5uB/Ctdbp/N1g36TcLS7iBOwVD0xv
+4f2Cj0txEDJjVvF70lOYcfuZeVtpwEAHZdeBZ9a6s18ZdBpULm1cyIL0qqCgvui7
+/RWFjBy8VKrE2P5zd2e5aQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev2.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMd9dnXoboeXoxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbv
+He5IXnTLoxtedE0Fj4v2XhyVcivGf1gl3fkCAwEAAQJAJs6cVdGSduQjwdoBASPS
+KoTKVarZ1xEqbQ2k4xs3/La8nol/+A6zZ1NFNzoSWWNFKqcmadM84xfmWzp0y3vz
+AQIhAP3Q4pHukB2OGZ6dbjvuCmaEZ1g9bZILDK0Snt0wgs+hAiEAyTToHkM+/BP8
+TCuihuTtbxKliz3f/YTWgrs0SIn5T1kCIAQsyW1JFUnHKpi3UjbeJYGmL+T9ra23
+TNAT/FT7FUvBAiEAql+YZXe/r6gkrUMNnnfe7Xy2nM9KCdwf4Bcw0HO0nhECIGYT
+amV/8ie79ccsjNYsB5/TXIwmHp95BfgT+0W8ikBI
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder1/certTrev2.req.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIHtMIGYAgEAMDMxCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMRIwEAYD
+VQQDEwljZXJ0VHJldjIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAx312dehuh5ej
+HBZOVcIZd+BzjK8rB6FpucL0oTRUk15aWunNZu8d7khedMujG150TQWPi/ZeHJVy
+K8Z/WCXd+QIDAQABoAAwDQYJKoZIhvcNAQEEBQADQQBcWWJNdWAiwqWcdh1GnwEq
+knJImcEm4V88Ag8vf2Knru6o8wTOmsiETr4JgN26hQVr/bl8MvYAUhxrQWXcw7Ib
+-----END CERTIFICATE REQUEST-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/01.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c4:40:88:bb:5e:38:6e:36:4e:21:a6:07:a3:d7:
+                    db:68:6a:f1:43:36:35:eb:c7:44:2e:b0:d9:f6:f0:
+                    47:b6:c9:20:5b:39:11:49:dd:79:25:ee:39:74:8d:
+                    50:30:3d:82:89:11:f1:3e:13:83:7b:47:dc:4c:ff:
+                    63:14:5f:1d:c3
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        9b:f1:63:21:ec:54:72:6f:6c:d0:4f:6a:6b:ef:b3:e4:ec:b4:
+        d9:be:30:10:b5:7e:89:5c:1a:28:0a:ba:49:eb:3b:81:f3:ed:
+        52:4d:89:6b:e3:16:67:22:f9:78:4c:9c:99:d4:83:4b:ef:2b:
+        8b:73:b9:85:d1:27:fa:15:2e:5e:ce:f2:7e:6d:ec:68:1d:e5:
+        99:fc:6d:17:12:03:c9:e2:61:a2:02:75:05:f7:8a:77:05:ec:
+        c8:42:7e:60:6f:23:ea:25:ff:99:bc:7c:39:3b:42:46:a2:21:
+        77:2f:10:66:d1:df:b4:f1:9d:5d:60:e9:12:5a:64:60:ba:1f:
+        50:b0
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYxMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMRAiLteOG42
+TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUndeSXuOXSNUDA9gokR8T4Tg3tH
+3Ez/YxRfHcMCAwEAATANBgkqhkiG9w0BAQQFAAOBgQCb8WMh7FRyb2zQT2pr77Pk
+7LTZvjAQtX6JXBooCrpJ6zuB8+1STYlr4xZnIvl4TJyZ1INL7yuLc7mF0Sf6FS5e
+zvJ+bexoHeWZ/G0XEgPJ4mGiAnUF94p3BezIQn5gbyPqJf+ZvHw5O0JGoiF3LxBm
+0d+08Z1dYOkSWmRguh9QsA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/02.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 2 (0x2)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev2
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c7:7d:76:75:e8:6e:87:97:a3:1c:16:4e:55:c2:
+                    19:77:e0:73:8c:af:2b:07:a1:69:b9:c2:f4:a1:34:
+                    54:93:5e:5a:5a:e9:cd:66:ef:1d:ee:48:5e:74:cb:
+                    a3:1b:5e:74:4d:05:8f:8b:f6:5e:1c:95:72:2b:c6:
+                    7f:58:25:dd:f9
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        70:81:71:f5:6a:55:62:cb:e4:62:2f:65:a6:6a:3d:a9:ad:20:
+        55:14:27:ea:10:ae:42:b3:d7:7a:ed:33:24:b8:6f:ae:64:09:
+        c3:a3:8b:b5:80:89:39:b8:1f:c2:b5:d6:e9:fc:dd:60:df:a4:
+        dc:2d:2e:e2:04:ec:15:0f:4c:6f:e1:fd:82:8f:4b:71:10:32:
+        63:56:f1:7b:d2:53:98:71:fb:99:79:5b:69:c0:40:07:65:d7:
+        81:67:d6:ba:b3:5f:19:74:1a:54:2e:6d:5c:c8:82:f4:aa:a0:
+        a0:be:e8:bb:fd:15:85:8c:1c:bc:54:aa:c4:d8:fe:73:77:67:
+        b9:69
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBAjANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYyMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMd9dnXoboeX
+oxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbvHe5IXnTLoxtedE0Fj4v2XhyV
+civGf1gl3fkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwgXH1alViy+RiL2Wmaj2p
+rSBVFCfqEK5Cs9d67TMkuG+uZAnDo4u1gIk5uB/Ctdbp/N1g36TcLS7iBOwVD0xv
+4f2Cj0txEDJjVvF70lOYcfuZeVtpwEAHZdeBZ9a6s18ZdBpULm1cyIL0qqCgvui7
+/RWFjBy8VKrE2P5zd2e5aQ==
+-----END CERTIFICATE-----
Binary file installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev1.cert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c4:40:88:bb:5e:38:6e:36:4e:21:a6:07:a3:d7:
+                    db:68:6a:f1:43:36:35:eb:c7:44:2e:b0:d9:f6:f0:
+                    47:b6:c9:20:5b:39:11:49:dd:79:25:ee:39:74:8d:
+                    50:30:3d:82:89:11:f1:3e:13:83:7b:47:dc:4c:ff:
+                    63:14:5f:1d:c3
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        9b:f1:63:21:ec:54:72:6f:6c:d0:4f:6a:6b:ef:b3:e4:ec:b4:
+        d9:be:30:10:b5:7e:89:5c:1a:28:0a:ba:49:eb:3b:81:f3:ed:
+        52:4d:89:6b:e3:16:67:22:f9:78:4c:9c:99:d4:83:4b:ef:2b:
+        8b:73:b9:85:d1:27:fa:15:2e:5e:ce:f2:7e:6d:ec:68:1d:e5:
+        99:fc:6d:17:12:03:c9:e2:61:a2:02:75:05:f7:8a:77:05:ec:
+        c8:42:7e:60:6f:23:ea:25:ff:99:bc:7c:39:3b:42:46:a2:21:
+        77:2f:10:66:d1:df:b4:f1:9d:5d:60:e9:12:5a:64:60:ba:1f:
+        50:b0
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYxMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMRAiLteOG42
+TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUndeSXuOXSNUDA9gokR8T4Tg3tH
+3Ez/YxRfHcMCAwEAATANBgkqhkiG9w0BAQQFAAOBgQCb8WMh7FRyb2zQT2pr77Pk
+7LTZvjAQtX6JXBooCrpJ6zuB8+1STYlr4xZnIvl4TJyZ1INL7yuLc7mF0Sf6FS5e
+zvJ+bexoHeWZ/G0XEgPJ4mGiAnUF94p3BezIQn5gbyPqJf+ZvHw5O0JGoiF3LxBm
+0d+08Z1dYOkSWmRguh9QsA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev1.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAMRAiLteOG42TiGmB6PX22hq8UM2NevHRC6w2fbwR7bJIFs5EUnd
+eSXuOXSNUDA9gokR8T4Tg3tH3Ez/YxRfHcMCAwEAAQJBAKonoeWCfb7hCsEV6Q3f
+u/Y+sswplnrFHJK292SpVCRfm1doGBrt2QYEGyxLHnhSZA2w1WIsBser2g80RCWk
+jAECIQD20d4gbZEoleFaX6RvlgotLcfngGgG8WV4k4fXyvlSwwIhAMuNLaNGU3OI
+jrDRyddnsTf/7UKX3TPg5+MhKM/74FkBAiB97XOUPfKqr1Wrw1JlMDr+8/WjMotg
+x3bK/xJ20fNE+wIhAI/pdc3NR+0ULEZJXJol3r8H+7gsZKFsLqZ/6Dn8C6cBAiAI
+8WY2otPZNIbXQ7qDcj/UCFz02Cbx2guigKZWmmD3kQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev1.req.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,8 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBADCBqwIBADBGMQswCQYDVQQGEwJVSzEQMA4GA1UEChMHU3ltYmlhbjERMA8G
+A1UECxMIU2VjdXJpdHkxEjAQBgNVBAMTCWNlcnRUcmV2MTBcMA0GCSqGSIb3DQEB
+AQUAA0sAMEgCQQDEQIi7XjhuNk4hpgej19toavFDNjXrx0QusNn28Ee2ySBbORFJ
+3Xkl7jl0jVAwPYKJEfE+E4N7R9xM/2MUXx3DAgMBAAGgADANBgkqhkiG9w0BAQQF
+AANBAAk3QvPIa2h0lEARrVaLYOa3Bv5OnsgXxM3kbiqSlGYA79TYi4ZJzA3GarfD
+tklnj/sVlrPmeOt5UHGss8Gr/Og=
+-----END CERTIFICATE REQUEST-----
Binary file installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev2.cert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 2 (0x2)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: O=Symbian Software Ltd, CN=Symbian Test - RSA
+        Validity
+            Not Before: May 12 10:18:43 2005 GMT
+            Not After : May 10 10:18:43 2015 GMT
+        Subject: O=Symbian, CN=certTrev2
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:c7:7d:76:75:e8:6e:87:97:a3:1c:16:4e:55:c2:
+                    19:77:e0:73:8c:af:2b:07:a1:69:b9:c2:f4:a1:34:
+                    54:93:5e:5a:5a:e9:cd:66:ef:1d:ee:48:5e:74:cb:
+                    a3:1b:5e:74:4d:05:8f:8b:f6:5e:1c:95:72:2b:c6:
+                    7f:58:25:dd:f9
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        70:81:71:f5:6a:55:62:cb:e4:62:2f:65:a6:6a:3d:a9:ad:20:
+        55:14:27:ea:10:ae:42:b3:d7:7a:ed:33:24:b8:6f:ae:64:09:
+        c3:a3:8b:b5:80:89:39:b8:1f:c2:b5:d6:e9:fc:dd:60:df:a4:
+        dc:2d:2e:e2:04:ec:15:0f:4c:6f:e1:fd:82:8f:4b:71:10:32:
+        63:56:f1:7b:d2:53:98:71:fb:99:79:5b:69:c0:40:07:65:d7:
+        81:67:d6:ba:b3:5f:19:74:1a:54:2e:6d:5c:c8:82:f4:aa:a0:
+        a0:be:e8:bb:fd:15:85:8c:1c:bc:54:aa:c4:d8:fe:73:77:67:
+        b9:69
+-----BEGIN CERTIFICATE-----
+MIIBjDCB9gIBAjANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4XDTA1MDUx
+MjEwMTg0M1oXDTE1MDUxMDEwMTg0M1owJjEQMA4GA1UEChMHU3ltYmlhbjESMBAG
+A1UEAxMJY2VydFRyZXYyMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMd9dnXoboeX
+oxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbvHe5IXnTLoxtedE0Fj4v2XhyV
+civGf1gl3fkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwgXH1alViy+RiL2Wmaj2p
+rSBVFCfqEK5Cs9d67TMkuG+uZAnDo4u1gIk5uB/Ctdbp/N1g36TcLS7iBOwVD0xv
+4f2Cj0txEDJjVvF70lOYcfuZeVtpwEAHZdeBZ9a6s18ZdBpULm1cyIL0qqCgvui7
+/RWFjBy8VKrE2P5zd2e5aQ==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev2.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBAMd9dnXoboeXoxwWTlXCGXfgc4yvKwehabnC9KE0VJNeWlrpzWbv
+He5IXnTLoxtedE0Fj4v2XhyVcivGf1gl3fkCAwEAAQJAJs6cVdGSduQjwdoBASPS
+KoTKVarZ1xEqbQ2k4xs3/La8nol/+A6zZ1NFNzoSWWNFKqcmadM84xfmWzp0y3vz
+AQIhAP3Q4pHukB2OGZ6dbjvuCmaEZ1g9bZILDK0Snt0wgs+hAiEAyTToHkM+/BP8
+TCuihuTtbxKliz3f/YTWgrs0SIn5T1kCIAQsyW1JFUnHKpi3UjbeJYGmL+T9ra23
+TNAT/FT7FUvBAiEAql+YZXe/r6gkrUMNnnfe7Xy2nM9KCdwf4Bcw0HO0nhECIGYT
+amV/8ie79ccsjNYsB5/TXIwmHp95BfgT+0W8ikBI
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/trevocation/ocsp/responder2/certTrev2.req.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,7 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIHtMIGYAgEAMDMxCzAJBgNVBAYTAlVLMRAwDgYDVQQKEwdTeW1iaWFuMRIwEAYD
+VQQDEwljZXJ0VHJldjIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAx312dehuh5ej
+HBZOVcIZd+BzjK8rB6FpucL0oTRUk15aWunNZu8d7khedMujG150TQWPi/ZeHJVy
+K8Z/WCXd+QIDAQABoAAwDQYJKoZIhvcNAQEEBQADQQBcWWJNdWAiwqWcdh1GnwEq
+knJImcEm4V88Ag8vf2Knru6o8wTOmsiETr4JgN26hQVr/bl8MvYAUhxrQWXcw7Ib
+-----END CERTIFICATE REQUEST-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/badcert.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN CERTIFICATE-----
+XXXBLDCB16ADAgECAgEAMA0GCSqGSIb3DQEBBQUAMB8xCzAJBgNVBAYTAlVLMRAw
+DgYDVQQDEwdTeW1iaWFuMB4XDTAwMDMxNTE0MjQ1NVoXDTAxMDMxNTE0MjQ1NVow
+HzELMAkGA1UEBhMCVUsxEDAOBgNVBAMTB1N5bWJpYW4wXDANBgkqhkiG9w0BAQEF
+AANLADBIAkEAyBm22QuixqJ0m9pjomO2JfA+GeFf+T76XcPe8ursa5qFrEABj4RJ
+Pv5WHzeU/e0ydSuCXwUhB3CrCZDgFVOXGwIDAQABMA0GCSqGSIb3DQEBBQUAA0EA
+sG1UUdvyzOycEuNL5TidMmDMJUHvpoWGE8In6Nmtesn1RsMdgeKKtCsQrp2XbERG
+3YA1ExdAjHqW8T3siFdeLA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/default.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDBDCCAsSgAwIBAgIBADAJBgcqhkjOOAQDMGkxCzAJBgNVBAYTAkdCMRkwFwYD
+VQQKExBTeW1iaWFuIFNvZnR3YXJlMRkwFwYDVQQLExBDb3JlIERldmVsb3BtZW50
+MSQwIgYDVQQDExtEZWZhdWx0IFNpZ25pbmcgQ2VydGlmaWNhdGUwHhcNMDYwMjAy
+MTExNTI0WhcNMTYwMjAyMTExNTI0WjBpMQswCQYDVQQGEwJHQjEZMBcGA1UEChMQ
+U3ltYmlhbiBTb2Z0d2FyZTEZMBcGA1UECxMQQ29yZSBEZXZlbG9wbWVudDEkMCIG
+A1UEAxMbRGVmYXVsdCBTaWduaW5nIENlcnRpZmljYXRlMIIBtzCCASsGByqGSM44
+BAEwggEeAoGBALnfndoLyYr7KxvNenPJnEHXjw2/5A2sSgPqAS9Fa4za5O56V0Y8
+z5QcxL7PgzbhPPnPuzuxt2dZKKdWdCcls5YdB0acanKoMEgT6NmNxUxhSwvDlQBT
+dEujcdULpEZI+y/lTJLJZrh8Ak6e7FeXJEPMska56oeamvvyp2Dfz7y7AhUA7HTW
+0hQzOLdU0EoVF8LoFfp4CH0CgYBwo0ieIVUa35CUbpgkpG0EBJQbW3rSOvr1ATSZ
+qwzamHyqeVNqfv1ZMerpeikowFejifFFy7LJfgizgWlK2Z2Vw5Mp2900VJWIdvYZ
+g+QeLFqitMqjvhmhVgJYYWIjHj/w4QB6prEBW92ZfbRjW82g6WgfNQm7eY0XiJv0
+vBLf/AOBhQACgYEAg+0/wVe+LY9ZEB4HOL8y9Jl3vA7P8cqHPpr8ZuDgrAjVsXAk
+kjnvI/e86jUDUKnlWj/of+xCBwpTa/PYvdWHndBbRLm2XPgz3aFZLqgz7oMMUJwH
+f2qeqatOLfjY2SfgQwcqzY4T4Sbj/U7D89oLCCm3qizfn2MfIagivB5B9oYwCQYH
+KoZIzjgEAwMvADAsAhRCrW9kWjeAzf+NT2h2Ru+iMRqYkgIUVJghz8UIi17lFGod
+pBqu3ZY+1+I=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/dsacert1.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB2jCCAUOgAwIBAgIBATANBgkqhkiG9w0BAQUFADAzMRIwEAYDVQQDEwlEZXZl
+bG9wZXIxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMB4XDTA5MDcyMDEx
+NDAyOFoXDTEwMDcyMDExNDAyOFowMzESMBAGA1UEAxMJRGV2ZWxvcGVyMR0wGwYD
+VQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEApiLz7EZcCh7pctJqvN4bDTqArwVGu9A1HsoonbYJXV2PkD0r7kMsteqW
+iC++9p9kQDL9a18eulwmwyzBOHgAC+DyNv8WHUlB9MPBb9kjX8ItsH43CbWnEEpP
+6L5GApr5+0qaSJgRZDXacyzKecJOKZYwlC+DuGq8vI4NtpQg4ckCAwEAATANBgkq
+hkiG9w0BAQUFAAOBgQANDmAdxaMsd6KCb+Bi34Q7Se28lBCrS6VsiGRexZT4JBi0
+kvyYMXmJHXOwUFJYW0IYhL31wafsqATqEw8nU0Yt2Y2GYJ9ML4xjFMkbStPVmpUL
++9TOfGKt9gs8Wr0pVnRNoHPs+ayEm/WJM/MA+SrFGWMLJgI15suSNh0DDIGTkg==
+-----END CERTIFICATE-----
Binary file installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/dsacert1.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/dsacert2.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB2jCCAUOgAwIBAgIBATANBgkqhkiG9w0BAQUFADAzMRIwEAYDVQQDEwlEZXZl
+bG9wZXIxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMB4XDTA5MDcyMDEx
+NDM0OVoXDTEwMDcyMDExNDM0OVowMzESMBAGA1UEAxMJRGV2ZWxvcGVyMR0wGwYD
+VQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAwbWsUb5fSCwjGzKrOJTzLIE7XAYNB9U7y9paKgA4z6ndf1npZe0BCeNY
+2gIQjHC19TF8T/3jfnl2/Ujvo/joHj+8VIaoEeCzVGci1PeNkNAxNB38tslkvdqh
+ZV7+F9+s+M/O3KOZVhRnqzTot08pmfY4MXHHWawIbzRhguP9YfECAwEAATANBgkq
+hkiG9w0BAQUFAAOBgQCud47eLOE1lpumwi4RmtXAzUC703t4dQ+V0/KKtuFMWt09
+NYiNuHbzexOhpaDxe2gTEG8AqVKw1dfjZ1H3traCXGOn3+sHnBrvEn5LcycdCa6c
+OK6p8okWHrLpRz5ZVvAPTyxoCQwZat1nd+elCxPjV+pMuskyvbU3YcRx7bZIZQ==
+-----END CERTIFICATE-----
Binary file installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/dsacert2.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/mycert.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC6TCCAqegAwIBAgIBADALBgcqhkjOOAQDBQAwWTELMAkGA1UEBhMCR0IxFDAS
+BgNVBAsTC1N5bWJpYW4gTHRkMRAwDgYDVQQDEwdTeW1iaWFuMSIwIAYJKoZIhvcN
+AQkBFhNzdXBwb3J0QHN5bWJpYW4uY29tMB4XDTAxMDMwNjE1MDEzM1oXDTAyMDMw
+NjE1MDEzM1owWTELMAkGA1UEBhMCR0IxFDASBgNVBAsTC1N5bWJpYW4gTHRkMRAw
+DgYDVQQDEwdTeW1iaWFuMSIwIAYJKoZIhvcNAQkBFhNzdXBwb3J0QHN5bWJpYW4u
+Y29tMIIBuDCCASwGByqGSM44BAEwggEfAoGBAO1p9xNHYlAfKQRAu1S1dJToKfkj
+ni8Sp5x9DCsr3zYAckqcbSvYcFQ2mJlqDeJkp9w3qXF4wGSgCqgNBAfzW5XXYZ0Y
+yGLkc4K8lyY//rmYHMf9oTfHjFf7QCowyrJBNZ7ZsnvySKcMf0hdYxFPdYzRh17E
+uY/en+yZpJILx8ZXAhUAilBnTLHUpWZ7H2xhWdNWSGjP/akCgYEAg7hWymSW7YR1
+4V4gwGLZ05BLYXfFfGQP2Ec1x9WzlmZfin+E5UmEfPsqgfhfV0e8as9Jk4KSBfW/
+VKxxjBXQc+kK34eE5c7XL/eL4l8+9pJIJzVqgIrSdlNHXmhcD4tujED6CyLuSUXP
+LqjpXhesLU6PI9iYi0DJNnh9Dc/CyRADgYUAAoGBAJYSEzhGGYn8E2CUzCjJWdIu
+n71nRHFFQH0a11BdL6m9uWeo+LOCcam/uJfpR9b4uBQmTPOchqxgbTv7AfTc7Rw3
+59zj/WuCJUT4FaSLbMzYqXz1AmUx6SH8ZUTujUOiPbOtIolByoajjNYDnqMw4tFE
+dyYw56+zYO2bC1cukrBiMAsGByqGSM44BAMFAAMvADAsAhRtB2BBnm30m2eYe/NW
+9v6Jn+4DUAIUOpzNOAAdvMD/RnB4C9lIDAJw9Wo=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/rsacert1.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB2jCCAUOgAwIBAgIBATANBgkqhkiG9w0BAQUFADAzMRIwEAYDVQQDEwlEZXZl
+bG9wZXIxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMB4XDTA5MDcyMDEx
+NDgwM1oXDTEwMDcyMDExNDgwM1owMzESMBAGA1UEAxMJRGV2ZWxvcGVyMR0wGwYD
+VQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAp2efFB0IVjthkpeRvTJmiaBrte503aZx+BMkyoM28HLGo392ASVETyRZ
+UbtLHI4dUA4CK9A6KDkvkdOIybrFSjUyYC4h+2OELO9MQ0qhCQLXQ0kX0o91geRD
+A4hKh4YvGG90nXpvQ0TMzU2aUmj6Y0HDubMJbp+RAU69T+phQfkCAwEAATANBgkq
+hkiG9w0BAQUFAAOBgQCWATYdAjBaHdDr6RdgVuqI+CqKZnZURrb+pErMChjfMciM
+Nw4IvvVspkENcGStd6fl8EE6UYG7HaK4HAgeJjgFIPOJmPpEe1ggrTI+NK7gNyxu
+b8uSG24d5S7IWCa2xvk8+ZXfP+YDHbwGZuROclXVD0tITZBkjV0KdwUB+kYgbQ==
+-----END CERTIFICATE-----
Binary file installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/rsacert1.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/rsacert2.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB2jCCAUOgAwIBAgIBATANBgkqhkiG9w0BAQUFADAzMRIwEAYDVQQDEwlEZXZl
+bG9wZXIxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMB4XDTA5MDcyMDEx
+NDg0OVoXDTEwMDcyMDExNDg0OVowMzESMBAGA1UEAxMJRGV2ZWxvcGVyMR0wGwYD
+VQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAwfshkU0PmDjZ3I7QztavmUsJc6xT/Xmz+p6GX+Re7KWtKLR5T6MKqIJd
+480bIbumHpP7IDAr9WD4GcBcpYjRZk189mqsSLX9X7dLzxOnLa9EH7JLE8yMYIWj
++aOMRLRu/IMWCL4v0igdpj4wL+dkd+LsXACeFHGyq+1XuiCdJkkCAwEAATANBgkq
+hkiG9w0BAQUFAAOBgQAAddfbZu4Rf6y7lp19D0j34fRX61nayhbT1EE0Ghulzdjb
+zHbNgSw/j0U+KN9ps3PBKnENxEMdAHBHjMBX5Y8Sokwoa3GtlctkxbSFwWWoSVR2
+aEesuBuvPbnhTHgEFFcbFIMmVHvfeN+byHgtFlaYJbVEs2FIKrQYqMBJra+DQA==
+-----END CERTIFICATE-----
Binary file installationservices/switestfw/testcertificates/swi/test/tsisfile/data/files/rsacert2.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/CertificatesNotInStore/ebook_key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXgIBAAKBgQC5hX3rlH5bWLL42sOxRbDLFyDH1AyJDbd8QqX0I8hFsX+ZDAJ5
+59TdDUzKYh3bFoqcd9rrWI4BnVFbmsOEaXKFLxjlWReIAxy28TYFys+ChZcdDefp
+HnWAPVw5aFvw9CetwYPYG4fmc414r88DVSDGcKSn4ZxiVE6EUPNCkeHw4wIDAQAB
+AoGAAptuppXipLP9Z+PjJiWdk20Sx9wiBPcNYhCptmGeWeRhr6vsiPwKEMU0FBAG
+7WJGtmY0zGPlMv6b+xaUstKsik57QfZPtj92tVzZCYbZV99GsiNgkvj4Ht6bTwPG
+mcx+XLWHShljgS8u1kvvNsllUK9NrQFVkL4ynUEkR+Weq0ECQQDhAe4wcD4eR7ZR
+1sv0T+Ny1LtpPIT1DPSfJWaLsZfa/M9tq5HKheZsl1UkT9GeDrRUOixTkRINUbMJ
+vB/wTvahAkEA0xM6i2tfP3Vu0Usb2ZeadCo5Cnt8MXF8IM4jclBoXBxbt6Hl9Eeb
+xVt14lsjF35zx9D2sBMTMTUeEAffHWLtAwJBAKiJaqFLoavKqUzZqEFiiYqcv5gO
+5cQrpRuDxzDBoG4+SRzrkzNwYm1aWULuqqNKflZMkKEzm6LwXDvhdsboTqECQQCj
+8K1qGC1UhotZ97Jb4MpQK3M+VwbxCCnW+QTDBvznfgcmq5KFlxC/yvfWpd6tosOe
+kQjpXQdtEsqUvOhoVKutAkEAlOmVvA1ZajLUuatXbXEFbQIz9of9uBkc2Ur+criB
+6Ox7VUckfn3NtPGyZVnQ5VXhTnyz+ObOqiL7sCeHn4pMsQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/CertificatesNotInStore/pool_key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQDjXW454gO+HfnWgzSlwnE6z18N/IgK3CMvyO620ACKeZoh5C34
+BQY0zF12ZlQhI9/zwkTdMKo/QRGsQXRX5xpBY1OZqvm2gYHmvU0hbWbL3NhZhJWU
+Q1Qf2jdHUMVLk14VOaEE74T/ae71JhoKjEsAn6b3hwPn49kGQE+jeLTzXwIDAQAB
+AoGBAJcf3gk5UnWG5S6RTWg0QyDs/2iDh0V4pya27vyyavmf9DQ8v9VQOZzUjfcJ
+8zeH6e7THQTMuQyMSpvtcdCPuuGkzKJncX6MMK8sz/PxaTWykC+j+TvQlKJ27ZiX
+IJNdnq73OyWrbnt7ILO300f05NYnXhuF6ZSvZsm68xLV9T1JAkEA9HYQvboTls0p
++3yN4C0VurpeH3VtEqg6vWZpmkknHkykm5I4322i4hTZmMMhxXynIF8A+xEdPEvE
++RAFSHmXpQJBAO4YyKMJZ7o1ixJSDMnKf3lt/mEnUvSzqHFghZRwhuSQE3PnGY0Y
+m5vciSDM8kjEZl3AmN095lKZgGKWrykUT7MCQARKJhUONNXKl9f/4YVzhRQXvRsU
+NmvDY/R63ZOFgRg5BBJuyGyzQc5xyzexBOCwRUZ+JEhDjp3GPpiYPV9+MrkCQF2m
+3fRTFLvHp8YzA9izj+SBgVdRkm2x5QWDg8dZY5WvnhcuxXwcO8jYvA9szbgVmHYz
+9WzAlkHTIw6kWo178cUCQADUWOUcbyzT4xvKEmWSTYKw5azf8PQKdD73JbrMWgD4
+5xxs2ufRBHnEUaVImfRf5GKorrfSRXHu1BFQVo/6L1M=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/CertificatesNotInStore/selfsigned_cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDrTCCAxagAwIBAgIBADANBgkqhkiG9w0BAQQFADCBnDELMAkGA1UEBhMCSU4x
+EjAQBgNVBAgTCUthcm5hdGFrYTESMBAGA1UEBxMJQmFuZ2Fsb3JlMRAwDgYDVQQK
+EwdTeW1iaWFuMQ8wDQYDVQQLEwZDcnlwdG8xGDAWBgNVBAMTD3d3dy5zeW1iaWFu
+LmNvbTEoMCYGCSqGSIb3DQEJARYZcmFqZXNoLmpvc2VwaEBzeW1iaWFuLmNvbTAe
+Fw0wNjExMTYwNTU2MTlaFw0wNjEyMTYwNTU2MTlaMIGcMQswCQYDVQQGEwJJTjES
+MBAGA1UECBMJS2FybmF0YWthMRIwEAYDVQQHEwlCYW5nYWxvcmUxEDAOBgNVBAoT
+B1N5bWJpYW4xDzANBgNVBAsTBkNyeXB0bzEYMBYGA1UEAxMPd3d3LnN5bWJpYW4u
+Y29tMSgwJgYJKoZIhvcNAQkBFhlyYWplc2guam9zZXBoQHN5bWJpYW4uY29tMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDu3LQX/3Qdk0QDxN2ioeLI+woi9qAv
+QYLqyUA0sUrgMQN2WVe0qEJSNbYxCe4QwD7eb6jjTcF9BIaHUYAI/nX7p2M7yEol
+VZQ37Nc4RA2Ui2rDa+BhF1t7qSyr2DWQEOe+bp+E1SIDnnWEwRPIflOOUAdlk6jx
+ikUo4dDFZkDlMQIDAQABo4H8MIH5MB0GA1UdDgQWBBTTQKKFUc0LoAjUvoNDYnQq
+AniKNjCByQYDVR0jBIHBMIG+gBTTQKKFUc0LoAjUvoNDYnQqAniKNqGBoqSBnzCB
+nDELMAkGA1UEBhMCSU4xEjAQBgNVBAgTCUthcm5hdGFrYTESMBAGA1UEBxMJQmFu
+Z2Fsb3JlMRAwDgYDVQQKEwdTeW1iaWFuMQ8wDQYDVQQLEwZDcnlwdG8xGDAWBgNV
+BAMTD3d3dy5zeW1iaWFuLmNvbTEoMCYGCSqGSIb3DQEJARYZcmFqZXNoLmpvc2Vw
+aEBzeW1iaWFuLmNvbYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GB
+AL6wmIOwcnQUjyV/TlftR3RG48Z5YYElIont8oU1QnjQlJ78QgX9jrGaooJ21Dw/
+m3oosYDPwUw9oY5QhB3Iu8iViI7JbermkMR0vdUG5TuuCCjZbzlSver9J4jTUud7
+W8Z4cvt2wYqIK79gKU04A3G7jw5EDEarjbdi5KGrkXnm
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/CertificatesNotInStore/selfsigned_key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXgIBAAKBgQDu3LQX/3Qdk0QDxN2ioeLI+woi9qAvQYLqyUA0sUrgMQN2WVe0
+qEJSNbYxCe4QwD7eb6jjTcF9BIaHUYAI/nX7p2M7yEolVZQ37Nc4RA2Ui2rDa+Bh
+F1t7qSyr2DWQEOe+bp+E1SIDnnWEwRPIflOOUAdlk6jxikUo4dDFZkDlMQIDAQAB
+AoGBAMYTCtzjnxxvZHVjqQ8WA4P6ePtpXIgTYUblQHLxmk+zFVXs3IgZB3Y4yC5+
+N4Z4hSnbmkdz0UGkoRJRiUTsDlTY5mQ68wwBJdWKlZIs2JoPV9kqg923UG9H8N5C
+fbxa3sv9wg4M7Xc7/0qTwAa2QMf/8BbOU5PWhto9q84OP9FhAkEA+QDySMsI41Yh
+XVW6JkF9rkjhJIfNBVk4QGfFDxWjFN58y32MOlzBGZP+j+o2916dlHr+CCMjLvyT
+6D/n4w61RQJBAPWSz1jRG6dqg85NP7y6URr7f/e2wDPlWNv/hMy0atkIAj1sD0bN
+avKWXoY0Nk+EEv5rS4/1TeFckeavjRf0wP0CQQCuZeBL5ZBjETcrFNjc5G+vOrId
+kNOilFuWmFdnekMPYcjMCTHGyqIgVQwtJeC7ntQFY6M6dcm1pge92cyCthF1AkAo
+zk5aCdU4ioCAZWGz8JnNjAEFnn5toSyU0e61PT2L9sK4hh47u6KL0OTAFCj6KY4m
+bJnPwAlC62jrFjyxwF/ZAkEAqu9ZmG293n73kis+r0FBHsJA25rtbTUcCBtSdv79
+w0gSxwmA+xT+JZXZHgptiLUZCYqTyGEpxU15QfphiC4vYA==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/ca.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC59XnNG+BH+iHN9vwCLNst4/ErtB8E65O3DLvT+J9kI/lpkyuL
+oOA5tgwnCHiUKFD5SdCAxf2xE/WRZnpQRuuGbuhTPuR4jrC7ibibJiYyNjedz7tP
++y136j9XO39tLIs1ikCpRbnSDjpIvWWh/x9coaSoVEfjZzN4xTCqcR99GwIDAQAB
+AoGAMMPAtxrSS826Q6q7F07wAy69Nbq8T6v/RodeUg3mrnoIk7j2OF1tr3Sf5zR/
+ekrAQT8sIDjLeD5FrWV0Ocz/QgUrcUG62yD3JgYT+YBZVKGLYIWzRp6BSqGLC/qU
++Q8W+s8AAsnRip5vsBDYLRWIhC5WAlNHE+7urTfIsAC0UxECQQDeSk4wxwlifiUW
+rGt759zFzUoWyAb/tRcnti88RKJkG+/15sccEFlD+qCeee/aD8FlbnE390XhaLCX
+lPsHriftAkEA1ii5N8MX03lMZhaW+k+obP06l46N+64a8g7tlL1vHOxeXdHydhpB
+tJ2F2jeqbtxmEvos19UrmVsuFrMiargIJwJAO1D4rGtwRagDnZlE1Tt53g55xrp5
+o6JfG2myERL/glcyIRwD5ak3KLyoP6GqLzYlFTvzWkvRieS1ur02f0YpwQJBAJz3
+fkIrwXPjzSZqWkCfUCCKPn7FIrYct21BmctSSXWWndgAQMlll1Etv+Tgtg/JhRtV
+uLZ9bRZbKV3D8G7t8jMCQQDC0Qrv26meE2ePUPGZdKfjZPY2/+M2z/j8kDsr+4fM
+0RxsJLH7p2bvxN80g/sSAdinbwLsqYiLrs7cz8Opv7Vb
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/ca.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len1/chain_dsa_len1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIBATANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA1MDQwMTEw
+NDcyNFoXDTE1MDMzMDEwNDcyNFowgYExCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZM
+b25kb24xIzAhBgNVBAMTGkRTQSBSb290NUNBIENoYWluIENlcnQgT25lMRQwEgYD
+VQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3lt
+Ymlhbi5jb20wgfAwgagGByqGSM44BAEwgZwCQQC0TNK7G4u54wgQuZ6KX94Nxo3E
+8/qJUP1M/6maesHtUkaQ/wA0D5MiLZJUqFdZQM5uNcH9c1alEGfhkAZcTCpDAhUA
+wYZNUYZFMR8teLd7YtI1DcLvKGkCQBxdHSK4yFoxwK0qMhap/+01viQO+oAVzd8+
+tVCjt3UYTnGhQQYGDlps+eikZyAIUvPPt5gLweCvdXcmUVrjIxYDQwACQANsU7Eo
+05tTNkGfNjjBCMLSNHlGKCLOfxdsoZaP7pF/FniYAQEob/GKacicty95hbLijOTq
+wpPehWMrLHdIwjujgaMwgaAwHQYDVR0OBBYEFG+BQGrj2Evz6dt7hupZ30tgmSNO
+MFsGA1UdIwRUMFKAFHzjBilRFiByFNQlr/0YW21eSK9voTekNTAzMR0wGwYDVQQK
+ExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBggEAMBIG
+A1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUA
+A4GBACSQmnUyCHJp4iN23mDk6I9jF0+qmbX9X75iAOF7V35b3GnoUvUU8F3yUcz7
+xb44ycHwr7QejhZ1gwD/I5PC5pLPjNwTqgWeJAQMIxkZSbKEYi/koJLNAknBpHh7
+QTKDe1buHqfUzrs3nhb1ekOTIKwcM/5FFcAh/adag6otIraJ
+-----END CERTIFICATE-----
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len1/dsaparam.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+-----BEGIN DSA PARAMETERS-----
+MIGcAkEA6HtPLZcp9izRg4jrqkPnRaoVp3veb9w3S7zbvH8/ymTVFJbzIjaeXrjH
+SPv0kTEcdUiT5HWLGCEqTWbRLn1wGQIVAKLLEThTI2Az9k52euMyQKVvf25bAkBk
+D9d7jlj60dsxzkyRtg5voil08t7VvfAGQFXUM68S4IrUWWaeX1dOrw+5dC4nQI6j
+6EXvzB1B8TGQMZg6Ci5R
+-----END DSA PARAMETERS-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len1/first.dsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIBATANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA1MDQwMTEw
+NDcyNFoXDTE1MDMzMDEwNDcyNFowgYExCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZM
+b25kb24xIzAhBgNVBAMTGkRTQSBSb290NUNBIENoYWluIENlcnQgT25lMRQwEgYD
+VQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3lt
+Ymlhbi5jb20wgfAwgagGByqGSM44BAEwgZwCQQC0TNK7G4u54wgQuZ6KX94Nxo3E
+8/qJUP1M/6maesHtUkaQ/wA0D5MiLZJUqFdZQM5uNcH9c1alEGfhkAZcTCpDAhUA
+wYZNUYZFMR8teLd7YtI1DcLvKGkCQBxdHSK4yFoxwK0qMhap/+01viQO+oAVzd8+
+tVCjt3UYTnGhQQYGDlps+eikZyAIUvPPt5gLweCvdXcmUVrjIxYDQwACQANsU7Eo
+05tTNkGfNjjBCMLSNHlGKCLOfxdsoZaP7pF/FniYAQEob/GKacicty95hbLijOTq
+wpPehWMrLHdIwjujgaMwgaAwHQYDVR0OBBYEFG+BQGrj2Evz6dt7hupZ30tgmSNO
+MFsGA1UdIwRUMFKAFHzjBilRFiByFNQlr/0YW21eSK9voTekNTAzMR0wGwYDVQQK
+ExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBggEAMBIG
+A1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUA
+A4GBACSQmnUyCHJp4iN23mDk6I9jF0+qmbX9X75iAOF7V35b3GnoUvUU8F3yUcz7
+xb44ycHwr7QejhZ1gwD/I5PC5pLPjNwTqgWeJAQMIxkZSbKEYi/koJLNAknBpHh7
+QTKDe1buHqfUzrs3nhb1ekOTIKwcM/5FFcAh/adag6otIraJ
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len2/chain_dsa_len2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,38 @@
+-----BEGIN CERTIFICATE-----
+MIIDETCCAs+gAwIBAgIBATAJBgcqhkjOOAQDMIGBMQswCQYDVQQGEwJVSzEPMA0G
+A1UEBxMGTG9uZG9uMSMwIQYDVQQDExpEU0EgUm9vdDVDQSBDaGFpbiBDZXJ0IE9u
+ZTEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pvaGFuLmdy
+b3RoQHN5bWJpYW4uY29tMB4XDTA1MDQwMTEwNTM1OFoXDTE1MDMzMDEwNTM1OFow
+fDELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEjMCEGA1UEAxMaRFNBIFJv
+b3Q1Q0EgQ2hhaW4gQ2VydCBUd28xFTATBgNVBAoTDFN5bWJpYW4gTHRkLjEgMB4G
+CSqGSIb3DQEJARYRUGVsbGVQb3BAYWNtZS5jb20wgfEwgakGByqGSM44BAEwgZ0C
+QQCwh0TaWtGSF7mmpHHO2xSa/RFTW+glK/Vr3XFbUOgvs85Q+BfhkII88jnaT9R1
+fByWjSjE6jq4VUlEeMb5VNpxAhUA26YeSjCVaaNjGjTXlQeDMC7tO8MCQQCSES9C
+SiBdyIPw+KhyzOAP9wlT2lfLt5CHxwbPrRXEfHPIBqpx6TLqonArBPbIBOGhSdLI
+/81/xIYqcLfcJBtUA0MAAkAY2Q3tLu23siwubFPb4jaQYgto8R9iUKdsYoqnxaIe
+mVLoYNNp+dAMFxDsgXRgPNiwOrt3gZYjku/mSLbfCycko4GjMIGgMB0GA1UdDgQW
+BBSnbhE1ZPfMSqPd9ipohA5hhrxQYTBbBgNVHSMEVDBSgBRvgUBq49hL8+nbe4bq
+Wd9LYJkjTqE3pDUwMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxEjAQ
+BgNVBAMTCVJvb3Q1LVJTQYIBATASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB
+/wQEAwICBDAJBgcqhkjOOAQDAzEAMC4CFQCJmyYk42NLyqnoh7ctbhBaNRo5QQIV
+AIZIY3awiP94RtG2cDjmLga1ogYl
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIBATANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA1MDQwMTEw
+NDcyNFoXDTE1MDMzMDEwNDcyNFowgYExCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZM
+b25kb24xIzAhBgNVBAMTGkRTQSBSb290NUNBIENoYWluIENlcnQgT25lMRQwEgYD
+VQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3lt
+Ymlhbi5jb20wgfAwgagGByqGSM44BAEwgZwCQQC0TNK7G4u54wgQuZ6KX94Nxo3E
+8/qJUP1M/6maesHtUkaQ/wA0D5MiLZJUqFdZQM5uNcH9c1alEGfhkAZcTCpDAhUA
+wYZNUYZFMR8teLd7YtI1DcLvKGkCQBxdHSK4yFoxwK0qMhap/+01viQO+oAVzd8+
+tVCjt3UYTnGhQQYGDlps+eikZyAIUvPPt5gLweCvdXcmUVrjIxYDQwACQANsU7Eo
+05tTNkGfNjjBCMLSNHlGKCLOfxdsoZaP7pF/FniYAQEob/GKacicty95hbLijOTq
+wpPehWMrLHdIwjujgaMwgaAwHQYDVR0OBBYEFG+BQGrj2Evz6dt7hupZ30tgmSNO
+MFsGA1UdIwRUMFKAFHzjBilRFiByFNQlr/0YW21eSK9voTekNTAzMR0wGwYDVQQK
+ExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBggEAMBIG
+A1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUA
+A4GBACSQmnUyCHJp4iN23mDk6I9jF0+qmbX9X75iAOF7V35b3GnoUvUU8F3yUcz7
+xb44ycHwr7QejhZ1gwD/I5PC5pLPjNwTqgWeJAQMIxkZSbKEYi/koJLNAknBpHh7
+QTKDe1buHqfUzrs3nhb1ekOTIKwcM/5FFcAh/adag6otIraJ
+-----END CERTIFICATE-----
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len2/dsaparam.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+-----BEGIN DSA PARAMETERS-----
+MIGdAkEAsIdE2lrRkhe5pqRxztsUmv0RU1voJSv1a91xW1DoL7POUPgX4ZCCPPI5
+2k/UdXwclo0oxOo6uFVJRHjG+VTacQIVANumHkowlWmjYxo015UHgzAu7TvDAkEA
+khEvQkogXciD8PiocszgD/cJU9pXy7eQh8cGz60VxHxzyAaqceky6qJwKwT2yATh
+oUnSyP/Nf8SGKnC33CQbVA==
+-----END DSA PARAMETERS-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len2/second.dsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDETCCAs+gAwIBAgIBATAJBgcqhkjOOAQDMIGBMQswCQYDVQQGEwJVSzEPMA0G
+A1UEBxMGTG9uZG9uMSMwIQYDVQQDExpEU0EgUm9vdDVDQSBDaGFpbiBDZXJ0IE9u
+ZTEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pvaGFuLmdy
+b3RoQHN5bWJpYW4uY29tMB4XDTA1MDQwMTEwNTM1OFoXDTE1MDMzMDEwNTM1OFow
+fDELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEjMCEGA1UEAxMaRFNBIFJv
+b3Q1Q0EgQ2hhaW4gQ2VydCBUd28xFTATBgNVBAoTDFN5bWJpYW4gTHRkLjEgMB4G
+CSqGSIb3DQEJARYRUGVsbGVQb3BAYWNtZS5jb20wgfEwgakGByqGSM44BAEwgZ0C
+QQCwh0TaWtGSF7mmpHHO2xSa/RFTW+glK/Vr3XFbUOgvs85Q+BfhkII88jnaT9R1
+fByWjSjE6jq4VUlEeMb5VNpxAhUA26YeSjCVaaNjGjTXlQeDMC7tO8MCQQCSES9C
+SiBdyIPw+KhyzOAP9wlT2lfLt5CHxwbPrRXEfHPIBqpx6TLqonArBPbIBOGhSdLI
+/81/xIYqcLfcJBtUA0MAAkAY2Q3tLu23siwubFPb4jaQYgto8R9iUKdsYoqnxaIe
+mVLoYNNp+dAMFxDsgXRgPNiwOrt3gZYjku/mSLbfCycko4GjMIGgMB0GA1UdDgQW
+BBSnbhE1ZPfMSqPd9ipohA5hhrxQYTBbBgNVHSMEVDBSgBRvgUBq49hL8+nbe4bq
+Wd9LYJkjTqE3pDUwMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxEjAQ
+BgNVBAMTCVJvb3Q1LVJTQYIBATASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB
+/wQEAwICBDAJBgcqhkjOOAQDAzEAMC4CFQCJmyYk42NLyqnoh7ctbhBaNRo5QQIV
+AIZIY3awiP94RtG2cDjmLga1ogYl
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len3/chain_dsa_len3.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,58 @@
+-----BEGIN CERTIFICATE-----
+MIIDXDCCAxygAwIBAgIBATAJBgcqhkjOOAQDMHwxCzAJBgNVBAYTAlVLMQ8wDQYD
+VQQHEwZMb25kb24xIzAhBgNVBAMTGkRTQSBSb290NUNBIENoYWluIENlcnQgVHdv
+MRUwEwYDVQQKEwxTeW1iaWFuIEx0ZC4xIDAeBgkqhkiG9w0BCQEWEVBlbGxlUG9w
+QGFjbWUuY29tMB4XDTA1MDQwMTEwNTg1OVoXDTE1MDMzMDEwNTg1OVowezELMAkG
+A1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjElMCMGA1UEAxMcRFNBIFJvb3Q1Q0Eg
+Q2hhaW4gQ2VydCBUaHJlZTEVMBMGA1UEChMMU3ltYmlhbiBMdGQuMR0wGwYJKoZI
+hvcNAQkBFg5vd25AZmx5aW5nLmNvbTCB8TCBqAYHKoZIzjgEATCBnAJBAMYtsTDH
+7MSf0CYAE6cUW/35ewW87MHU/0+H5K89Iyj7/r1kRVCkhbxLp7pNAriiWUScZ5Xl
+gH4GM+voU3XIBS8CFQD5nMAcjAHjY8nVuiEpuN8UFxWy/QJARBnxgeDvJSP/Qv2p
+gqmI9Tksx77mPoJYhEYjj+Ylpl8N9+7j6xNBLR6lpWPUet0635M87MZhojK3oMiV
+3HqN8QNEAAJBAKcSdoNWY3Yed8A2Pv4QcfNFjWEucQWjSWUS3ET3Rwu9vntUO8LH
+GfHbhe8aXu3MZBPudnU4LiAcy0+SwnUVGb2jgfcwgfQwHQYDVR0OBBYEFOVWYzZp
+iZk40FFAJAQqgWpSHNgaMIGuBgNVHSMEgaYwgaOAFKduETVk98xKo932KmiEDmGG
+vFBhoYGHpIGEMIGBMQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMSMwIQYD
+VQQDExpEU0EgUm9vdDVDQSBDaGFpbiBDZXJ0IE9uZTEUMBIGA1UEChMLU3ltYmlh
+biBMdGQxJjAkBgkqhkiG9w0BCQEWF2pvaGFuLmdyb3RoQHN5bWJpYW4uY29tggEB
+MBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMAkGByqGSM44BAMD
+LwAwLAIUQM6gNn6F6hoQ1Lntet4ja7k48jgCFCA3JRiZ1AI3gXd/bwlnhB6YsWzs
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDETCCAs+gAwIBAgIBATAJBgcqhkjOOAQDMIGBMQswCQYDVQQGEwJVSzEPMA0G
+A1UEBxMGTG9uZG9uMSMwIQYDVQQDExpEU0EgUm9vdDVDQSBDaGFpbiBDZXJ0IE9u
+ZTEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pvaGFuLmdy
+b3RoQHN5bWJpYW4uY29tMB4XDTA1MDQwMTEwNTM1OFoXDTE1MDMzMDEwNTM1OFow
+fDELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEjMCEGA1UEAxMaRFNBIFJv
+b3Q1Q0EgQ2hhaW4gQ2VydCBUd28xFTATBgNVBAoTDFN5bWJpYW4gTHRkLjEgMB4G
+CSqGSIb3DQEJARYRUGVsbGVQb3BAYWNtZS5jb20wgfEwgakGByqGSM44BAEwgZ0C
+QQCwh0TaWtGSF7mmpHHO2xSa/RFTW+glK/Vr3XFbUOgvs85Q+BfhkII88jnaT9R1
+fByWjSjE6jq4VUlEeMb5VNpxAhUA26YeSjCVaaNjGjTXlQeDMC7tO8MCQQCSES9C
+SiBdyIPw+KhyzOAP9wlT2lfLt5CHxwbPrRXEfHPIBqpx6TLqonArBPbIBOGhSdLI
+/81/xIYqcLfcJBtUA0MAAkAY2Q3tLu23siwubFPb4jaQYgto8R9iUKdsYoqnxaIe
+mVLoYNNp+dAMFxDsgXRgPNiwOrt3gZYjku/mSLbfCycko4GjMIGgMB0GA1UdDgQW
+BBSnbhE1ZPfMSqPd9ipohA5hhrxQYTBbBgNVHSMEVDBSgBRvgUBq49hL8+nbe4bq
+Wd9LYJkjTqE3pDUwMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxEjAQ
+BgNVBAMTCVJvb3Q1LVJTQYIBATASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB
+/wQEAwICBDAJBgcqhkjOOAQDAzEAMC4CFQCJmyYk42NLyqnoh7ctbhBaNRo5QQIV
+AIZIY3awiP94RtG2cDjmLga1ogYl
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIBATANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA1MDQwMTEw
+NDcyNFoXDTE1MDMzMDEwNDcyNFowgYExCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZM
+b25kb24xIzAhBgNVBAMTGkRTQSBSb290NUNBIENoYWluIENlcnQgT25lMRQwEgYD
+VQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3lt
+Ymlhbi5jb20wgfAwgagGByqGSM44BAEwgZwCQQC0TNK7G4u54wgQuZ6KX94Nxo3E
+8/qJUP1M/6maesHtUkaQ/wA0D5MiLZJUqFdZQM5uNcH9c1alEGfhkAZcTCpDAhUA
+wYZNUYZFMR8teLd7YtI1DcLvKGkCQBxdHSK4yFoxwK0qMhap/+01viQO+oAVzd8+
+tVCjt3UYTnGhQQYGDlps+eikZyAIUvPPt5gLweCvdXcmUVrjIxYDQwACQANsU7Eo
+05tTNkGfNjjBCMLSNHlGKCLOfxdsoZaP7pF/FniYAQEob/GKacicty95hbLijOTq
+wpPehWMrLHdIwjujgaMwgaAwHQYDVR0OBBYEFG+BQGrj2Evz6dt7hupZ30tgmSNO
+MFsGA1UdIwRUMFKAFHzjBilRFiByFNQlr/0YW21eSK9voTekNTAzMR0wGwYDVQQK
+ExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBggEAMBIG
+A1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUA
+A4GBACSQmnUyCHJp4iN23mDk6I9jF0+qmbX9X75iAOF7V35b3GnoUvUU8F3yUcz7
+xb44ycHwr7QejhZ1gwD/I5PC5pLPjNwTqgWeJAQMIxkZSbKEYi/koJLNAknBpHh7
+QTKDe1buHqfUzrs3nhb1ekOTIKwcM/5FFcAh/adag6otIraJ
+-----END CERTIFICATE-----
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len3/dsaparam.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+-----BEGIN DSA PARAMETERS-----
+MIGcAkEAxi2xMMfsxJ/QJgATpxRb/fl7BbzswdT/T4fkrz0jKPv+vWRFUKSFvEun
+uk0CuKJZRJxnleWAfgYz6+hTdcgFLwIVAPmcwByMAeNjydW6ISm43xQXFbL9AkBE
+GfGB4O8lI/9C/amCqYj1OSzHvuY+gliERiOP5iWmXw337uPrE0EtHqWlY9R63Trf
+kzzsxmGiMregyJXceo3x
+-----END DSA PARAMETERS-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_dsa_len3/third.dsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDXDCCAxygAwIBAgIBATAJBgcqhkjOOAQDMHwxCzAJBgNVBAYTAlVLMQ8wDQYD
+VQQHEwZMb25kb24xIzAhBgNVBAMTGkRTQSBSb290NUNBIENoYWluIENlcnQgVHdv
+MRUwEwYDVQQKEwxTeW1iaWFuIEx0ZC4xIDAeBgkqhkiG9w0BCQEWEVBlbGxlUG9w
+QGFjbWUuY29tMB4XDTA1MDQwMTEwNTg1OVoXDTE1MDMzMDEwNTg1OVowezELMAkG
+A1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjElMCMGA1UEAxMcRFNBIFJvb3Q1Q0Eg
+Q2hhaW4gQ2VydCBUaHJlZTEVMBMGA1UEChMMU3ltYmlhbiBMdGQuMR0wGwYJKoZI
+hvcNAQkBFg5vd25AZmx5aW5nLmNvbTCB8TCBqAYHKoZIzjgEATCBnAJBAMYtsTDH
+7MSf0CYAE6cUW/35ewW87MHU/0+H5K89Iyj7/r1kRVCkhbxLp7pNAriiWUScZ5Xl
+gH4GM+voU3XIBS8CFQD5nMAcjAHjY8nVuiEpuN8UFxWy/QJARBnxgeDvJSP/Qv2p
+gqmI9Tksx77mPoJYhEYjj+Ylpl8N9+7j6xNBLR6lpWPUet0635M87MZhojK3oMiV
+3HqN8QNEAAJBAKcSdoNWY3Yed8A2Pv4QcfNFjWEucQWjSWUS3ET3Rwu9vntUO8LH
+GfHbhe8aXu3MZBPudnU4LiAcy0+SwnUVGb2jgfcwgfQwHQYDVR0OBBYEFOVWYzZp
+iZk40FFAJAQqgWpSHNgaMIGuBgNVHSMEgaYwgaOAFKduETVk98xKo932KmiEDmGG
+vFBhoYGHpIGEMIGBMQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMSMwIQYD
+VQQDExpEU0EgUm9vdDVDQSBDaGFpbiBDZXJ0IE9uZTEUMBIGA1UEChMLU3ltYmlh
+biBMdGQxJjAkBgkqhkiG9w0BCQEWF2pvaGFuLmdyb3RoQHN5bWJpYW4uY29tggEB
+MBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMAkGByqGSM44BAMD
+LwAwLAIUQM6gNn6F6hoQ1Lntet4ja7k48jgCFCA3JRiZ1AI3gXd/bwlnhB6YsWzs
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len1/chain_rsa_len1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICizCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA1MDQyNzA4
+MTQwMloXDTE1MDQyNTA4MTQwMlowgYExCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZM
+b25kb24xIzAhBgNVBAMTGlJTQSBSb290NUNBIENoYWluIENlcnQgT25lMRQwEgYD
+VQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3lt
+Ymlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEA3KWObEO7WijQsHEPhPrD
+Fy9/6BS+rfmFqHShh3WRBR0cC9hLqP4fmR43DlTgDL1fVT38/LbM+rqtA4cIlOn0
++QIDAQABo4GjMIGgMB0GA1UdDgQWBBQctHMm+ZPXgGnsuDXkwxg3TH4oszBbBgNV
+HSMEVDBSgBR84wYpURYgchTUJa/9GFttXkivb6E3pDUwMzEdMBsGA1UEChMUU3lt
+YmlhbiBTb2Z0d2FyZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQYIBADASBgNVHRMB
+Af8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDANBgkqhkiG9w0BAQQFAAOBgQAs
+WVPNFvQURXpokkYvBaLNUipeOAE+rM1mUJEwuyKLt8IR6ffgH+NpRbNZid50nXGj
+zVcggQkDuephJcZ2rmtw8yiLdKgmHrUtWajRvUeBpVkG6kZIZW3JV82QZX+j9Op0
+QK2ZvawGDvWUeuG52PdqVfuqqoeTXticFeScENjHAw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len1/first.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICizCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA1MDQyNzA4
+MTQwMloXDTE1MDQyNTA4MTQwMlowgYExCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZM
+b25kb24xIzAhBgNVBAMTGlJTQSBSb290NUNBIENoYWluIENlcnQgT25lMRQwEgYD
+VQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3lt
+Ymlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEA3KWObEO7WijQsHEPhPrD
+Fy9/6BS+rfmFqHShh3WRBR0cC9hLqP4fmR43DlTgDL1fVT38/LbM+rqtA4cIlOn0
++QIDAQABo4GjMIGgMB0GA1UdDgQWBBQctHMm+ZPXgGnsuDXkwxg3TH4oszBbBgNV
+HSMEVDBSgBR84wYpURYgchTUJa/9GFttXkivb6E3pDUwMzEdMBsGA1UEChMUU3lt
+YmlhbiBTb2Z0d2FyZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQYIBADASBgNVHRMB
+Af8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDANBgkqhkiG9w0BAQQFAAOBgQAs
+WVPNFvQURXpokkYvBaLNUipeOAE+rM1mUJEwuyKLt8IR6ffgH+NpRbNZid50nXGj
+zVcggQkDuephJcZ2rmtw8yiLdKgmHrUtWajRvUeBpVkG6kZIZW3JV82QZX+j9Op0
+QK2ZvawGDvWUeuG52PdqVfuqqoeTXticFeScENjHAw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len2/chain_rsa_len2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIICkzCCAj2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBgTELMAkGA1UEBhMCVUsx
+DzANBgNVBAcTBkxvbmRvbjEjMCEGA1UEAxMaUlNBIFJvb3Q1Q0EgQ2hhaW4gQ2Vy
+dCBPbmUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hh
+bi5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA0MjcwODE3MzNaFw0xNTA0MjUwODE3
+MzNaMHwxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xIzAhBgNVBAMTGlJT
+QSBSb290NUNBIENoYWluIENlcnQgVHdvMRUwEwYDVQQKEwxTeW1iaWFuIEx0ZC4x
+IDAeBgkqhkiG9w0BCQEWEVBlbGxlUG9wQGFjbWUuY29tMFwwDQYJKoZIhvcNAQEB
+BQADSwAwSAJBAPnR4oIbMichqgTb/Wt7ZAtt2pNrjENPNrK7n5xt+0OBLZ77goOG
+wBVvv6ICkq57Z00U7rmoru099eC/F8oZViUCAwEAAaOBozCBoDAdBgNVHQ4EFgQU
+HjE++/bA8Fxyf2DKekjcRPxaPPEwWwYDVR0jBFQwUoAUHLRzJvmT14Bp7Lg15MMY
+N0x+KLOhN6Q1MDMxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYD
+VQQDEwlSb290NS1SU0GCAQEwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8E
+BAMCAgQwDQYJKoZIhvcNAQEEBQADQQAAfRCcrifgzk0kVjdgbw4jX0iwtYxIUg+l
+3TfIdt06F3ySh2E8kmxg+CJYtwpwo+ZU5QGbAKfbF9AAd+nQlKnd
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICizCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA1MDQyNzA4
+MTQwMloXDTE1MDQyNTA4MTQwMlowgYExCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZM
+b25kb24xIzAhBgNVBAMTGlJTQSBSb290NUNBIENoYWluIENlcnQgT25lMRQwEgYD
+VQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3lt
+Ymlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEA3KWObEO7WijQsHEPhPrD
+Fy9/6BS+rfmFqHShh3WRBR0cC9hLqP4fmR43DlTgDL1fVT38/LbM+rqtA4cIlOn0
++QIDAQABo4GjMIGgMB0GA1UdDgQWBBQctHMm+ZPXgGnsuDXkwxg3TH4oszBbBgNV
+HSMEVDBSgBR84wYpURYgchTUJa/9GFttXkivb6E3pDUwMzEdMBsGA1UEChMUU3lt
+YmlhbiBTb2Z0d2FyZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQYIBADASBgNVHRMB
+Af8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDANBgkqhkiG9w0BAQQFAAOBgQAs
+WVPNFvQURXpokkYvBaLNUipeOAE+rM1mUJEwuyKLt8IR6ffgH+NpRbNZid50nXGj
+zVcggQkDuephJcZ2rmtw8yiLdKgmHrUtWajRvUeBpVkG6kZIZW3JV82QZX+j9Op0
+QK2ZvawGDvWUeuG52PdqVfuqqoeTXticFeScENjHAw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len2/second.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICkzCCAj2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBgTELMAkGA1UEBhMCVUsx
+DzANBgNVBAcTBkxvbmRvbjEjMCEGA1UEAxMaUlNBIFJvb3Q1Q0EgQ2hhaW4gQ2Vy
+dCBPbmUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hh
+bi5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA0MjcwODE3MzNaFw0xNTA0MjUwODE3
+MzNaMHwxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xIzAhBgNVBAMTGlJT
+QSBSb290NUNBIENoYWluIENlcnQgVHdvMRUwEwYDVQQKEwxTeW1iaWFuIEx0ZC4x
+IDAeBgkqhkiG9w0BCQEWEVBlbGxlUG9wQGFjbWUuY29tMFwwDQYJKoZIhvcNAQEB
+BQADSwAwSAJBAPnR4oIbMichqgTb/Wt7ZAtt2pNrjENPNrK7n5xt+0OBLZ77goOG
+wBVvv6ICkq57Z00U7rmoru099eC/F8oZViUCAwEAAaOBozCBoDAdBgNVHQ4EFgQU
+HjE++/bA8Fxyf2DKekjcRPxaPPEwWwYDVR0jBFQwUoAUHLRzJvmT14Bp7Lg15MMY
+N0x+KLOhN6Q1MDMxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYD
+VQQDEwlSb290NS1SU0GCAQEwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8E
+BAMCAgQwDQYJKoZIhvcNAQEEBQADQQAAfRCcrifgzk0kVjdgbw4jX0iwtYxIUg+l
+3TfIdt06F3ySh2E8kmxg+CJYtwpwo+ZU5QGbAKfbF9AAd+nQlKnd
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len3/chain_rsa_len3.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+-----BEGIN CERTIFICATE-----
+MIIC4DCCAoqgAwIBAgIBATANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJVSzEP
+MA0GA1UEBxMGTG9uZG9uMSMwIQYDVQQDExpSU0EgUm9vdDVDQSBDaGFpbiBDZXJ0
+IFR3bzEVMBMGA1UEChMMU3ltYmlhbiBMdGQuMSAwHgYJKoZIhvcNAQkBFhFQZWxs
+ZVBvcEBhY21lLmNvbTAeFw0wNTA0MjcwODE4NTJaFw0xNTA0MjUwODE4NTJaMHsx
+CzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xJTAjBgNVBAMTHFJTQSBSb290
+NUNBIENoYWluIENlcnQgVGhyZWUxFTATBgNVBAoTDFN5bWJpYW4gTHRkLjEdMBsG
+CSqGSIb3DQEJARYOb3duQGZseWluZy5jb20wXDANBgkqhkiG9w0BAQEFAANLADBI
+AkEApNFkova4yh+aGk9vGC+yFpIkFaCYoEyEdSyn2RZZDbnDbxTUo5i6D+5T/69E
+wffhCFuJ6lH7sunnViB5veDC4wIDAQABo4H3MIH0MB0GA1UdDgQWBBQuSi6wWPLv
+XjHcvEb+OWkYX6zkODCBrgYDVR0jBIGmMIGjgBQeMT779sDwXHJ/YMp6SNxE/Fo8
+8aGBh6SBhDCBgTELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEjMCEGA1UE
+AxMaUlNBIFJvb3Q1Q0EgQ2hhaW4gQ2VydCBPbmUxFDASBgNVBAoTC1N5bWJpYW4g
+THRkMSYwJAYJKoZIhvcNAQkBFhdqb2hhbi5ncm90aEBzeW1iaWFuLmNvbYIBATAS
+BgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDANBgkqhkiG9w0BAQQF
+AANBAPJZl5Qnwj5nt1YBfjlpCWo7KXVnpsuwSo4vHOmBF65yX56tzJmJBWgcMH8c
+41gI7aK/ZY66hd1gS/hb33KqI34=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICkzCCAj2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBgTELMAkGA1UEBhMCVUsx
+DzANBgNVBAcTBkxvbmRvbjEjMCEGA1UEAxMaUlNBIFJvb3Q1Q0EgQ2hhaW4gQ2Vy
+dCBPbmUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hh
+bi5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA0MjcwODE3MzNaFw0xNTA0MjUwODE3
+MzNaMHwxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xIzAhBgNVBAMTGlJT
+QSBSb290NUNBIENoYWluIENlcnQgVHdvMRUwEwYDVQQKEwxTeW1iaWFuIEx0ZC4x
+IDAeBgkqhkiG9w0BCQEWEVBlbGxlUG9wQGFjbWUuY29tMFwwDQYJKoZIhvcNAQEB
+BQADSwAwSAJBAPnR4oIbMichqgTb/Wt7ZAtt2pNrjENPNrK7n5xt+0OBLZ77goOG
+wBVvv6ICkq57Z00U7rmoru099eC/F8oZViUCAwEAAaOBozCBoDAdBgNVHQ4EFgQU
+HjE++/bA8Fxyf2DKekjcRPxaPPEwWwYDVR0jBFQwUoAUHLRzJvmT14Bp7Lg15MMY
+N0x+KLOhN6Q1MDMxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYD
+VQQDEwlSb290NS1SU0GCAQEwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8E
+BAMCAgQwDQYJKoZIhvcNAQEEBQADQQAAfRCcrifgzk0kVjdgbw4jX0iwtYxIUg+l
+3TfIdt06F3ySh2E8kmxg+CJYtwpwo+ZU5QGbAKfbF9AAd+nQlKnd
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICizCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA1MDQyNzA4
+MTQwMloXDTE1MDQyNTA4MTQwMlowgYExCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZM
+b25kb24xIzAhBgNVBAMTGlJTQSBSb290NUNBIENoYWluIENlcnQgT25lMRQwEgYD
+VQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3lt
+Ymlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEA3KWObEO7WijQsHEPhPrD
+Fy9/6BS+rfmFqHShh3WRBR0cC9hLqP4fmR43DlTgDL1fVT38/LbM+rqtA4cIlOn0
++QIDAQABo4GjMIGgMB0GA1UdDgQWBBQctHMm+ZPXgGnsuDXkwxg3TH4oszBbBgNV
+HSMEVDBSgBR84wYpURYgchTUJa/9GFttXkivb6E3pDUwMzEdMBsGA1UEChMUU3lt
+YmlhbiBTb2Z0d2FyZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQYIBADASBgNVHRMB
+Af8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDANBgkqhkiG9w0BAQQFAAOBgQAs
+WVPNFvQURXpokkYvBaLNUipeOAE+rM1mUJEwuyKLt8IR6ffgH+NpRbNZid50nXGj
+zVcggQkDuephJcZ2rmtw8yiLdKgmHrUtWajRvUeBpVkG6kZIZW3JV82QZX+j9Op0
+QK2ZvawGDvWUeuG52PdqVfuqqoeTXticFeScENjHAw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/Root5CA/cert_chain_rsa_len3/third.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC4DCCAoqgAwIBAgIBATANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJVSzEP
+MA0GA1UEBxMGTG9uZG9uMSMwIQYDVQQDExpSU0EgUm9vdDVDQSBDaGFpbiBDZXJ0
+IFR3bzEVMBMGA1UEChMMU3ltYmlhbiBMdGQuMSAwHgYJKoZIhvcNAQkBFhFQZWxs
+ZVBvcEBhY21lLmNvbTAeFw0wNTA0MjcwODE4NTJaFw0xNTA0MjUwODE4NTJaMHsx
+CzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xJTAjBgNVBAMTHFJTQSBSb290
+NUNBIENoYWluIENlcnQgVGhyZWUxFTATBgNVBAoTDFN5bWJpYW4gTHRkLjEdMBsG
+CSqGSIb3DQEJARYOb3duQGZseWluZy5jb20wXDANBgkqhkiG9w0BAQEFAANLADBI
+AkEApNFkova4yh+aGk9vGC+yFpIkFaCYoEyEdSyn2RZZDbnDbxTUo5i6D+5T/69E
+wffhCFuJ6lH7sunnViB5veDC4wIDAQABo4H3MIH0MB0GA1UdDgQWBBQuSi6wWPLv
+XjHcvEb+OWkYX6zkODCBrgYDVR0jBIGmMIGjgBQeMT779sDwXHJ/YMp6SNxE/Fo8
+8aGBh6SBhDCBgTELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEjMCEGA1UE
+AxMaUlNBIFJvb3Q1Q0EgQ2hhaW4gQ2VydCBPbmUxFDASBgNVBAoTC1N5bWJpYW4g
+THRkMSYwJAYJKoZIhvcNAQkBFhdqb2hhbi5ncm90aEBzeW1iaWFuLmNvbYIBATAS
+BgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDANBgkqhkiG9w0BAQQF
+AANBAPJZl5Qnwj5nt1YBfjlpCWo7KXVnpsuwSo4vHOmBF65yX56tzJmJBWgcMH8c
+41gI7aK/ZY66hd1gS/hb33KqI34=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/ca.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN DSA PRIVATE KEY-----
+MIIBvAIBAAKBgQDJpkRzuJS1xfiNZE38jJbXniA9kJr/uBMRNDjhT8mlJreLTFP+
+W98z5dBwEhkopLl1CkphQscCbyHggYYLGRUYJ3pjFjluc6r8Q4hSPbIDVnNq7BA6
+0k0MMCg1ZmfBj3A1c/5ojBwBOFgJZPIzbcy9xZEAmbcelFlG9ZbsNCu0qQIVANP3
+TmZgoi++E0Yht39NP/8wynN3AoGBAIXrdUgOLObzdo+JFS05HgaxzetS/AMuXTxj
+NP6v/Ya0xrdkmhDsWLNNZWbGl1P4ZBmFrvLPWok/2yxZ/PWq6jsRl7gxEjdoBB0O
+a2nlRLIj14E2Sax0ic85CUe0lA+BTX8MSV72xsQb3eKUo+4b5p6IDS3sWsGDj1VZ
+ILD2mc9rAoGBAIe/QDKH4qDO89XWfp0vlYxwjMVYm1TVeUsdaKTDtHLX3ygysHrI
+WG2EbY69Ns153OQeWfOANdYnWoU33JFDcjfJ6auhfcIK3ApJZH9uI7Bu1pagNW1J
+Qfey4Ecc2dCTOqC6lU1EOoCN8sjUPUkkM8p+Ugo4KRRDJHjVoBB8ZT/RAhRh1haP
+k0eQ3sDh8ImiQ1yn/yKjng==
+-----END DSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/ca.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDBDCCAsOgAwIBAgIBADAJBgcqhkjOOAQDMDwxHTAbBgNVBAoTFFN5bWJpYW4g
+U29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0EwHhcNMDQw
+NDE4MTQzNzExWhcNMjAwOTIxMTQzNzExWjA8MR0wGwYDVQQKExRTeW1iaWFuIFNv
+ZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gRFNBMIIBuDCCASwG
+ByqGSM44BAEwggEfAoGBAMmmRHO4lLXF+I1kTfyMlteeID2Qmv+4ExE0OOFPyaUm
+t4tMU/5b3zPl0HASGSikuXUKSmFCxwJvIeCBhgsZFRgnemMWOW5zqvxDiFI9sgNW
+c2rsEDrSTQwwKDVmZ8GPcDVz/miMHAE4WAlk8jNtzL3FkQCZtx6UWUb1luw0K7Sp
+AhUA0/dOZmCiL74TRiG3f00//zDKc3cCgYEAhet1SA4s5vN2j4kVLTkeBrHN61L8
+Ay5dPGM0/q/9hrTGt2SaEOxYs01lZsaXU/hkGYWu8s9aiT/bLFn89arqOxGXuDES
+N2gEHQ5raeVEsiPXgTZJrHSJzzkJR7SUD4FNfwxJXvbGxBvd4pSj7hvmnogNLexa
+wYOPVVkgsPaZz2sDgYUAAoGBAIe/QDKH4qDO89XWfp0vlYxwjMVYm1TVeUsdaKTD
+tHLX3ygysHrIWG2EbY69Ns153OQeWfOANdYnWoU33JFDcjfJ6auhfcIK3ApJZH9u
+I7Bu1pagNW1JQfey4Ecc2dCTOqC6lU1EOoCN8sjUPUkkM8p+Ugo4KRRDJHjVoBB8
+ZT/Ro1YwVDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBBTAdBgNV
+HQ4EFgQU7LnBlP0mtZjkLbCsPS/klsNUcgowDwYJKwYBBQUHMAEFBAIFADAJBgcq
+hkjOOAQDAzAAMC0CFQDPtqfyYoCWxlHgV2w+X9toNYz4TQIUcGPvtY7Vv51IEdOO
+8kSAW+XYz5E=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len1/chain_dsa_len1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC3DCCApugAwIBAgIBATAJBgcqhkjOOAQDMDwxHTAbBgNVBAoTFFN5bWJpYW4g
+U29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0EwHhcNMDUw
+NDA0MDcwMzUzWhcNMTUwNDAyMDcwMzUzWjCBhTELMAkGA1UEBhMCVUsxDzANBgNV
+BAcTBkxvbmRvbjEnMCUGA1UEAxMeRFNBIFRlc3RSb290RFNBIENoYWluIENlcnQg
+T25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4u
+Z3JvdGhAc3ltYmlhbi5jb20wgfAwgagGByqGSM44BAEwgZwCQQDDKAmjz+eiYAXC
+XoTTjMy444vEPxsBT5OD75xLYW18O/8g8HUMMIeri0g5eQzbLahJnaUGpix6/i68
+l/Pn50FzAhUA0G7ltSREbVJCWQ6XqPk5hmohCMkCQAZJzyAeIWwKDPtKq2R8wSDj
+srB8c7BildSzmgvWftWVBG2uQqeJWPGp3nv9yTGt/9T/sJUlTW/Q7rdFn6N5LhcD
+QwACQB2dQiuuQo69I8gO2H6oivU/NtR8HOMs1yGhZX37/mEN5Rwfyjn2ySqgfiEi
+1sMwvoIzbPwPo+WTY80Am8tqIqejgawwgakwHQYDVR0OBBYEFM8odsd4tED4MwNG
+lFTQNOwyBxPBMGQGA1UdIwRdMFuAFOy5wZT9JrWY5C2wrD0v5JbDVHIKoUCkPjA8
+MR0wGwYDVQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlh
+biBUZXN0IC0gRFNBggEAMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQD
+AgIEMAkGByqGSM44BAMDMAAwLQIVAJPLhrhgAOUOtMcVyP0ERETyn46iAhR/B51Z
+LsRuoLWsvQaRN4h9+TMg1Q==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len1/dsaparam.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+-----BEGIN DSA PARAMETERS-----
+MIGcAkEAwygJo8/nomAFwl6E04zMuOOLxD8bAU+Tg++cS2FtfDv/IPB1DDCHq4tI
+OXkM2y2oSZ2lBqYsev4uvJfz5+dBcwIVANBu5bUkRG1SQlkOl6j5OYZqIQjJAkAG
+Sc8gHiFsCgz7SqtkfMEg47KwfHOwYpXUs5oL1n7VlQRtrkKniVjxqd57/ckxrf/U
+/7CVJU1v0O63RZ+jeS4X
+-----END DSA PARAMETERS-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len1/first.dsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC3DCCApugAwIBAgIBATAJBgcqhkjOOAQDMDwxHTAbBgNVBAoTFFN5bWJpYW4g
+U29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0EwHhcNMDUw
+NDA0MDcwMzUzWhcNMTUwNDAyMDcwMzUzWjCBhTELMAkGA1UEBhMCVUsxDzANBgNV
+BAcTBkxvbmRvbjEnMCUGA1UEAxMeRFNBIFRlc3RSb290RFNBIENoYWluIENlcnQg
+T25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4u
+Z3JvdGhAc3ltYmlhbi5jb20wgfAwgagGByqGSM44BAEwgZwCQQDDKAmjz+eiYAXC
+XoTTjMy444vEPxsBT5OD75xLYW18O/8g8HUMMIeri0g5eQzbLahJnaUGpix6/i68
+l/Pn50FzAhUA0G7ltSREbVJCWQ6XqPk5hmohCMkCQAZJzyAeIWwKDPtKq2R8wSDj
+srB8c7BildSzmgvWftWVBG2uQqeJWPGp3nv9yTGt/9T/sJUlTW/Q7rdFn6N5LhcD
+QwACQB2dQiuuQo69I8gO2H6oivU/NtR8HOMs1yGhZX37/mEN5Rwfyjn2ySqgfiEi
+1sMwvoIzbPwPo+WTY80Am8tqIqejgawwgakwHQYDVR0OBBYEFM8odsd4tED4MwNG
+lFTQNOwyBxPBMGQGA1UdIwRdMFuAFOy5wZT9JrWY5C2wrD0v5JbDVHIKoUCkPjA8
+MR0wGwYDVQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlh
+biBUZXN0IC0gRFNBggEAMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQD
+AgIEMAkGByqGSM44BAMDMAAwLQIVAJPLhrhgAOUOtMcVyP0ERETyn46iAhR/B51Z
+LsRuoLWsvQaRN4h9+TMg1Q==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len2/chain_dsa_len2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+-----BEGIN CERTIFICATE-----
+MIIDHzCCAt+gAwIBAgIBATAJBgcqhkjOOAQDMIGFMQswCQYDVQQGEwJVSzEPMA0G
+A1UEBxMGTG9uZG9uMScwJQYDVQQDEx5EU0EgVGVzdFJvb3REU0EgQ2hhaW4gQ2Vy
+dCBPbmUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hh
+bi5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA0MDQwNzEwNDJaFw0xNTA0MDIwNzEw
+NDJaMH8xCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHkRT
+QSBUZXN0Um9vdERTQSBDaGFpbiBDZXJ0IFR3bzEUMBIGA1UEChMLU3ltYmlhbiBM
+dGQxIDAeBgkqhkiG9w0BCQEWEVBlbGxlUG9wQGFjbWUuY29tMIHxMIGoBgcqhkjO
+OAQBMIGcAkEAv57nQTdfF1sD7/SG8vqiOl9S5YEE2Q/AAK9ncqoWjK4Xyf6TxqPn
+KfzxqNRmwBR6SrVnyDVM+Gb370CJuM0/qwIVAOAXE1GSQXjVlEnAZHGZT0FRyS2T
+AkApImPqui/fbvNd45+yUZFpGLQf3vVgIuX6rWpNySGXGlFcsZsTwFLPU0Wk1uQS
+WmVJo9pETkfjietzrQbko0bBA0QAAkEAqH2BZSHi7mJFCEmKsCoEeqzbnCyNWW7v
+q3177gPr9FwrW8xtqw2hjto3jKsfOfd98ZFGV3fNRfLFRfPFn+0bAqOBrDCBqTAd
+BgNVHQ4EFgQUPLgBHBBO/ff1oA3t4LEKB4igCR8wZAYDVR0jBF0wW4AUzyh2x3i0
+QPgzA0aUVNA07DIHE8GhQKQ+MDwxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUg
+THRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0GCAQEwEgYDVR0TAQH/BAgw
+BgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwCQYHKoZIzjgEAwMvADAsAhQZj1jLewqv
+1zYOVIwOCnZi7nKyeQIUaD8Y1HhVp6suIyyu/48jG6F208o=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC3DCCApugAwIBAgIBATAJBgcqhkjOOAQDMDwxHTAbBgNVBAoTFFN5bWJpYW4g
+U29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0EwHhcNMDUw
+NDA0MDcwMzUzWhcNMTUwNDAyMDcwMzUzWjCBhTELMAkGA1UEBhMCVUsxDzANBgNV
+BAcTBkxvbmRvbjEnMCUGA1UEAxMeRFNBIFRlc3RSb290RFNBIENoYWluIENlcnQg
+T25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4u
+Z3JvdGhAc3ltYmlhbi5jb20wgfAwgagGByqGSM44BAEwgZwCQQDDKAmjz+eiYAXC
+XoTTjMy444vEPxsBT5OD75xLYW18O/8g8HUMMIeri0g5eQzbLahJnaUGpix6/i68
+l/Pn50FzAhUA0G7ltSREbVJCWQ6XqPk5hmohCMkCQAZJzyAeIWwKDPtKq2R8wSDj
+srB8c7BildSzmgvWftWVBG2uQqeJWPGp3nv9yTGt/9T/sJUlTW/Q7rdFn6N5LhcD
+QwACQB2dQiuuQo69I8gO2H6oivU/NtR8HOMs1yGhZX37/mEN5Rwfyjn2ySqgfiEi
+1sMwvoIzbPwPo+WTY80Am8tqIqejgawwgakwHQYDVR0OBBYEFM8odsd4tED4MwNG
+lFTQNOwyBxPBMGQGA1UdIwRdMFuAFOy5wZT9JrWY5C2wrD0v5JbDVHIKoUCkPjA8
+MR0wGwYDVQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlh
+biBUZXN0IC0gRFNBggEAMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQD
+AgIEMAkGByqGSM44BAMDMAAwLQIVAJPLhrhgAOUOtMcVyP0ERETyn46iAhR/B51Z
+LsRuoLWsvQaRN4h9+TMg1Q==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len2/dsaparam.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+-----BEGIN DSA PARAMETERS-----
+MIGcAkEAv57nQTdfF1sD7/SG8vqiOl9S5YEE2Q/AAK9ncqoWjK4Xyf6TxqPnKfzx
+qNRmwBR6SrVnyDVM+Gb370CJuM0/qwIVAOAXE1GSQXjVlEnAZHGZT0FRyS2TAkAp
+ImPqui/fbvNd45+yUZFpGLQf3vVgIuX6rWpNySGXGlFcsZsTwFLPU0Wk1uQSWmVJ
+o9pETkfjietzrQbko0bB
+-----END DSA PARAMETERS-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len2/second.dsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDHzCCAt+gAwIBAgIBATAJBgcqhkjOOAQDMIGFMQswCQYDVQQGEwJVSzEPMA0G
+A1UEBxMGTG9uZG9uMScwJQYDVQQDEx5EU0EgVGVzdFJvb3REU0EgQ2hhaW4gQ2Vy
+dCBPbmUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hh
+bi5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA0MDQwNzEwNDJaFw0xNTA0MDIwNzEw
+NDJaMH8xCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHkRT
+QSBUZXN0Um9vdERTQSBDaGFpbiBDZXJ0IFR3bzEUMBIGA1UEChMLU3ltYmlhbiBM
+dGQxIDAeBgkqhkiG9w0BCQEWEVBlbGxlUG9wQGFjbWUuY29tMIHxMIGoBgcqhkjO
+OAQBMIGcAkEAv57nQTdfF1sD7/SG8vqiOl9S5YEE2Q/AAK9ncqoWjK4Xyf6TxqPn
+KfzxqNRmwBR6SrVnyDVM+Gb370CJuM0/qwIVAOAXE1GSQXjVlEnAZHGZT0FRyS2T
+AkApImPqui/fbvNd45+yUZFpGLQf3vVgIuX6rWpNySGXGlFcsZsTwFLPU0Wk1uQS
+WmVJo9pETkfjietzrQbko0bBA0QAAkEAqH2BZSHi7mJFCEmKsCoEeqzbnCyNWW7v
+q3177gPr9FwrW8xtqw2hjto3jKsfOfd98ZFGV3fNRfLFRfPFn+0bAqOBrDCBqTAd
+BgNVHQ4EFgQUPLgBHBBO/ff1oA3t4LEKB4igCR8wZAYDVR0jBF0wW4AUzyh2x3i0
+QPgzA0aUVNA07DIHE8GhQKQ+MDwxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUg
+THRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0GCAQEwEgYDVR0TAQH/BAgw
+BgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwCQYHKoZIzjgEAwMvADAsAhQZj1jLewqv
+1zYOVIwOCnZi7nKyeQIUaD8Y1HhVp6suIyyu/48jG6F208o=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len3/chain_dsa_len3.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,58 @@
+-----BEGIN CERTIFICATE-----
+MIIDajCCAymgAwIBAgIBATAJBgcqhkjOOAQDMH8xCzAJBgNVBAYTAlVLMQ8wDQYD
+VQQHEwZMb25kb24xJzAlBgNVBAMTHkRTQSBUZXN0Um9vdERTQSBDaGFpbiBDZXJ0
+IFR3bzEUMBIGA1UEChMLU3ltYmlhbiBMdGQxIDAeBgkqhkiG9w0BCQEWEVBlbGxl
+UG9wQGFjbWUuY29tMB4XDTA1MDQwNDA3MTIzNloXDTE1MDQwMjA3MTIzNlowgYAx
+CzAJBgNVBAYTAlVLMREwDwYDVQQHEwhCcmlnaHRvbjEpMCcGA1UEAxMgRFNBIFRl
+c3RSb290RFNBIENoYWluIENlcnQgVGhyZWUxFDASBgNVBAoTC1N5bWJpYW4gTHRk
+MR0wGwYJKoZIhvcNAQkBFg5vd25AZmx5aW5nLmNvbTCB8TCBqQYHKoZIzjgEATCB
+nQJBAM1RYOpHMsK3wTLTm7aFzEfKGXlmM1Mg54zh3M2Q+zQjfQMl963fpN2Gn1mW
+KSKSvfg5XeAdtxlr3ejag5jPXk8CFQDbNfbH5oMovIjzwhjDdGIfPL9AHQJBALvJ
+m/7UKaKvr/6WAz5sw9xecqGkmvKDcOYX1Wr9pS5/Rh5igkeN/ga5kau23KEcHM/u
+16WRJ/EO9xWzfrfFMcEDQwACQCc1iUEnXofPFizcDvmoRRMg2NLLD/7lKaH28SuZ
+fWi7LdaTJOmrla4sGL7IpOfpnzmpNTzBxSANF/E7aB9o9rejgfswgfgwHQYDVR0O
+BBYEFLEJIQHt3+SXIpXuKpRyF3GkhX0JMIGyBgNVHSMEgaowgaeAFDy4ARwQTv33
+9aAN7eCxCgeIoAkfoYGLpIGIMIGFMQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9u
+ZG9uMScwJQYDVQQDEx5EU0EgVGVzdFJvb3REU0EgQ2hhaW4gQ2VydCBPbmUxFDAS
+BgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hhbi5ncm90aEBz
+eW1iaWFuLmNvbYIBATASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIC
+BDAJBgcqhkjOOAQDAzAAMC0CFCowiYb/7VyUxR4xPEf5rA4hosnjAhUAl23ugj5B
+7B2qwcf+6NEjaaUzzas=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDHzCCAt+gAwIBAgIBATAJBgcqhkjOOAQDMIGFMQswCQYDVQQGEwJVSzEPMA0G
+A1UEBxMGTG9uZG9uMScwJQYDVQQDEx5EU0EgVGVzdFJvb3REU0EgQ2hhaW4gQ2Vy
+dCBPbmUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hh
+bi5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA0MDQwNzEwNDJaFw0xNTA0MDIwNzEw
+NDJaMH8xCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHkRT
+QSBUZXN0Um9vdERTQSBDaGFpbiBDZXJ0IFR3bzEUMBIGA1UEChMLU3ltYmlhbiBM
+dGQxIDAeBgkqhkiG9w0BCQEWEVBlbGxlUG9wQGFjbWUuY29tMIHxMIGoBgcqhkjO
+OAQBMIGcAkEAv57nQTdfF1sD7/SG8vqiOl9S5YEE2Q/AAK9ncqoWjK4Xyf6TxqPn
+KfzxqNRmwBR6SrVnyDVM+Gb370CJuM0/qwIVAOAXE1GSQXjVlEnAZHGZT0FRyS2T
+AkApImPqui/fbvNd45+yUZFpGLQf3vVgIuX6rWpNySGXGlFcsZsTwFLPU0Wk1uQS
+WmVJo9pETkfjietzrQbko0bBA0QAAkEAqH2BZSHi7mJFCEmKsCoEeqzbnCyNWW7v
+q3177gPr9FwrW8xtqw2hjto3jKsfOfd98ZFGV3fNRfLFRfPFn+0bAqOBrDCBqTAd
+BgNVHQ4EFgQUPLgBHBBO/ff1oA3t4LEKB4igCR8wZAYDVR0jBF0wW4AUzyh2x3i0
+QPgzA0aUVNA07DIHE8GhQKQ+MDwxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUg
+THRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0GCAQEwEgYDVR0TAQH/BAgw
+BgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwCQYHKoZIzjgEAwMvADAsAhQZj1jLewqv
+1zYOVIwOCnZi7nKyeQIUaD8Y1HhVp6suIyyu/48jG6F208o=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC3DCCApugAwIBAgIBATAJBgcqhkjOOAQDMDwxHTAbBgNVBAoTFFN5bWJpYW4g
+U29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0EwHhcNMDUw
+NDA0MDcwMzUzWhcNMTUwNDAyMDcwMzUzWjCBhTELMAkGA1UEBhMCVUsxDzANBgNV
+BAcTBkxvbmRvbjEnMCUGA1UEAxMeRFNBIFRlc3RSb290RFNBIENoYWluIENlcnQg
+T25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4u
+Z3JvdGhAc3ltYmlhbi5jb20wgfAwgagGByqGSM44BAEwgZwCQQDDKAmjz+eiYAXC
+XoTTjMy444vEPxsBT5OD75xLYW18O/8g8HUMMIeri0g5eQzbLahJnaUGpix6/i68
+l/Pn50FzAhUA0G7ltSREbVJCWQ6XqPk5hmohCMkCQAZJzyAeIWwKDPtKq2R8wSDj
+srB8c7BildSzmgvWftWVBG2uQqeJWPGp3nv9yTGt/9T/sJUlTW/Q7rdFn6N5LhcD
+QwACQB2dQiuuQo69I8gO2H6oivU/NtR8HOMs1yGhZX37/mEN5Rwfyjn2ySqgfiEi
+1sMwvoIzbPwPo+WTY80Am8tqIqejgawwgakwHQYDVR0OBBYEFM8odsd4tED4MwNG
+lFTQNOwyBxPBMGQGA1UdIwRdMFuAFOy5wZT9JrWY5C2wrD0v5JbDVHIKoUCkPjA8
+MR0wGwYDVQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlh
+biBUZXN0IC0gRFNBggEAMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQD
+AgIEMAkGByqGSM44BAMDMAAwLQIVAJPLhrhgAOUOtMcVyP0ERETyn46iAhR/B51Z
+LsRuoLWsvQaRN4h9+TMg1Q==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len3/dsaparam.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+-----BEGIN DSA PARAMETERS-----
+MIGdAkEAzVFg6kcywrfBMtObtoXMR8oZeWYzUyDnjOHczZD7NCN9AyX3rd+k3Yaf
+WZYpIpK9+Dld4B23GWvd6NqDmM9eTwIVANs19sfmgyi8iPPCGMN0Yh88v0AdAkEA
+u8mb/tQpoq+v/pYDPmzD3F5yoaSa8oNw5hfVav2lLn9GHmKCR43+BrmRq7bcoRwc
+z+7XpZEn8Q73FbN+t8UxwQ==
+-----END DSA PARAMETERS-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_dsa_len3/third.dsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDajCCAymgAwIBAgIBATAJBgcqhkjOOAQDMH8xCzAJBgNVBAYTAlVLMQ8wDQYD
+VQQHEwZMb25kb24xJzAlBgNVBAMTHkRTQSBUZXN0Um9vdERTQSBDaGFpbiBDZXJ0
+IFR3bzEUMBIGA1UEChMLU3ltYmlhbiBMdGQxIDAeBgkqhkiG9w0BCQEWEVBlbGxl
+UG9wQGFjbWUuY29tMB4XDTA1MDQwNDA3MTIzNloXDTE1MDQwMjA3MTIzNlowgYAx
+CzAJBgNVBAYTAlVLMREwDwYDVQQHEwhCcmlnaHRvbjEpMCcGA1UEAxMgRFNBIFRl
+c3RSb290RFNBIENoYWluIENlcnQgVGhyZWUxFDASBgNVBAoTC1N5bWJpYW4gTHRk
+MR0wGwYJKoZIhvcNAQkBFg5vd25AZmx5aW5nLmNvbTCB8TCBqQYHKoZIzjgEATCB
+nQJBAM1RYOpHMsK3wTLTm7aFzEfKGXlmM1Mg54zh3M2Q+zQjfQMl963fpN2Gn1mW
+KSKSvfg5XeAdtxlr3ejag5jPXk8CFQDbNfbH5oMovIjzwhjDdGIfPL9AHQJBALvJ
+m/7UKaKvr/6WAz5sw9xecqGkmvKDcOYX1Wr9pS5/Rh5igkeN/ga5kau23KEcHM/u
+16WRJ/EO9xWzfrfFMcEDQwACQCc1iUEnXofPFizcDvmoRRMg2NLLD/7lKaH28SuZ
+fWi7LdaTJOmrla4sGL7IpOfpnzmpNTzBxSANF/E7aB9o9rejgfswgfgwHQYDVR0O
+BBYEFLEJIQHt3+SXIpXuKpRyF3GkhX0JMIGyBgNVHSMEgaowgaeAFDy4ARwQTv33
+9aAN7eCxCgeIoAkfoYGLpIGIMIGFMQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9u
+ZG9uMScwJQYDVQQDEx5EU0EgVGVzdFJvb3REU0EgQ2hhaW4gQ2VydCBPbmUxFDAS
+BgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hhbi5ncm90aEBz
+eW1iaWFuLmNvbYIBATASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIC
+BDAJBgcqhkjOOAQDAzAAMC0CFCowiYb/7VyUxR4xPEf5rA4hosnjAhUAl23ugj5B
+7B2qwcf+6NEjaaUzzas=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len1/chain_rsa_len1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRjCCAgagAwIBAgIBATAJBgcqhkjOOAQDMDwxHTAbBgNVBAoTFFN5bWJpYW4g
+U29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0EwHhcNMDUw
+NDA0MDcyOTIzWhcNMTUwNDAyMDcyOTIzWjCBhTELMAkGA1UEBhMCVUsxDzANBgNV
+BAcTBkxvbmRvbjEnMCUGA1UEAxMeUlNBIFRlc3RSb290RFNBIENoYWluIENlcnQg
+T25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4u
+Z3JvdGhAc3ltYmlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAvIITzaF3
+fFDhYtpSSsJxLPaNeofj5OaGIPUywG7dM7Gxw4UrpClPEEfhEnGNN20jwMAGmK28
+Xco31Z+h/46QyQIDAQABo4GsMIGpMB0GA1UdDgQWBBRVWWTNl4sDpfgw/+ZMnmQx
+kpNL4jBkBgNVHSMEXTBbgBTsucGU/Sa1mOQtsKw9L+SWw1RyCqFApD4wPDEdMBsG
+A1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5bWJpYW4gVGVz
+dCAtIERTQYIBADASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDAJ
+BgcqhkjOOAQDAy8AMCwCFHODdtgWyCJerNlbWbmSTCITOJFXAhRRAQ5iDyZnZ8o/
+jaOQnrA+U6f92A==
+-----END CERTIFICATE-----
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len1/first.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRjCCAgagAwIBAgIBATAJBgcqhkjOOAQDMDwxHTAbBgNVBAoTFFN5bWJpYW4g
+U29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0EwHhcNMDUw
+NDA0MDcyOTIzWhcNMTUwNDAyMDcyOTIzWjCBhTELMAkGA1UEBhMCVUsxDzANBgNV
+BAcTBkxvbmRvbjEnMCUGA1UEAxMeUlNBIFRlc3RSb290RFNBIENoYWluIENlcnQg
+T25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4u
+Z3JvdGhAc3ltYmlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAvIITzaF3
+fFDhYtpSSsJxLPaNeofj5OaGIPUywG7dM7Gxw4UrpClPEEfhEnGNN20jwMAGmK28
+Xco31Z+h/46QyQIDAQABo4GsMIGpMB0GA1UdDgQWBBRVWWTNl4sDpfgw/+ZMnmQx
+kpNL4jBkBgNVHSMEXTBbgBTsucGU/Sa1mOQtsKw9L+SWw1RyCqFApD4wPDEdMBsG
+A1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5bWJpYW4gVGVz
+dCAtIERTQYIBADASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDAJ
+BgcqhkjOOAQDAy8AMCwCFHODdtgWyCJerNlbWbmSTCITOJFXAhRRAQ5iDyZnZ8o/
+jaOQnrA+U6f92A==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len2/chain_rsa_len2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIICozCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCVUsx
+DzANBgNVBAcTBkxvbmRvbjEnMCUGA1UEAxMeUlNBIFRlc3RSb290RFNBIENoYWlu
+IENlcnQgT25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYX
+am9oYW4uZ3JvdGhAc3ltYmlhbi5jb20wHhcNMDUwNDA0MDczMzI4WhcNMTUwNDAy
+MDczMzI4WjB/MQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMScwJQYDVQQD
+Ex5SU0EgVGVzdFJvb3REU0EgQ2hhaW4gQ2VydCBUd28xFDASBgNVBAoTC1N5bWJp
+YW4gTHRkMSAwHgYJKoZIhvcNAQkBFhFQZWxsZVBvcEBhY21lLmNvbTBcMA0GCSqG
+SIb3DQEBAQUAA0sAMEgCQQDcN4VArzemI+NxX9PdcRyra/cVcMoGYTdogd5mO+C6
+9/3tTMfq0K4IOwFhsk//YvhCW/LU2UFUfeCGgORcihu7AgMBAAGjgawwgakwHQYD
+VR0OBBYEFOGGVwMGClg90bUqbmQ+TD7AubhZMGQGA1UdIwRdMFuAFFVZZM2XiwOl
++DD/5kyeZDGSk0vioUCkPjA8MR0wGwYDVQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0
+ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gRFNBggEBMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUAA0EAFT+M3Btz+3zB
+aifDBKpK7/ju8UFRycLUlijxJJnq4x5mM5sOYqx2fIbvr6jZ/C1gL3bIPs5haP3T
+WkkRzHfZBg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICRjCCAgagAwIBAgIBATAJBgcqhkjOOAQDMDwxHTAbBgNVBAoTFFN5bWJpYW4g
+U29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0EwHhcNMDUw
+NDA0MDcyOTIzWhcNMTUwNDAyMDcyOTIzWjCBhTELMAkGA1UEBhMCVUsxDzANBgNV
+BAcTBkxvbmRvbjEnMCUGA1UEAxMeUlNBIFRlc3RSb290RFNBIENoYWluIENlcnQg
+T25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4u
+Z3JvdGhAc3ltYmlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAvIITzaF3
+fFDhYtpSSsJxLPaNeofj5OaGIPUywG7dM7Gxw4UrpClPEEfhEnGNN20jwMAGmK28
+Xco31Z+h/46QyQIDAQABo4GsMIGpMB0GA1UdDgQWBBRVWWTNl4sDpfgw/+ZMnmQx
+kpNL4jBkBgNVHSMEXTBbgBTsucGU/Sa1mOQtsKw9L+SWw1RyCqFApD4wPDEdMBsG
+A1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5bWJpYW4gVGVz
+dCAtIERTQYIBADASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDAJ
+BgcqhkjOOAQDAy8AMCwCFHODdtgWyCJerNlbWbmSTCITOJFXAhRRAQ5iDyZnZ8o/
+jaOQnrA+U6f92A==
+-----END CERTIFICATE-----
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len2/second.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICozCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCVUsx
+DzANBgNVBAcTBkxvbmRvbjEnMCUGA1UEAxMeUlNBIFRlc3RSb290RFNBIENoYWlu
+IENlcnQgT25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYX
+am9oYW4uZ3JvdGhAc3ltYmlhbi5jb20wHhcNMDUwNDA0MDczMzI4WhcNMTUwNDAy
+MDczMzI4WjB/MQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMScwJQYDVQQD
+Ex5SU0EgVGVzdFJvb3REU0EgQ2hhaW4gQ2VydCBUd28xFDASBgNVBAoTC1N5bWJp
+YW4gTHRkMSAwHgYJKoZIhvcNAQkBFhFQZWxsZVBvcEBhY21lLmNvbTBcMA0GCSqG
+SIb3DQEBAQUAA0sAMEgCQQDcN4VArzemI+NxX9PdcRyra/cVcMoGYTdogd5mO+C6
+9/3tTMfq0K4IOwFhsk//YvhCW/LU2UFUfeCGgORcihu7AgMBAAGjgawwgakwHQYD
+VR0OBBYEFOGGVwMGClg90bUqbmQ+TD7AubhZMGQGA1UdIwRdMFuAFFVZZM2XiwOl
++DD/5kyeZDGSk0vioUCkPjA8MR0wGwYDVQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0
+ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gRFNBggEBMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUAA0EAFT+M3Btz+3zB
+aifDBKpK7/ju8UFRycLUlijxJJnq4x5mM5sOYqx2fIbvr6jZ/C1gL3bIPs5haP3T
+WkkRzHfZBg==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len3/chain_rsa_len3.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+-----BEGIN CERTIFICATE-----
+MIIC6jCCApSgAwIBAgIBATANBgkqhkiG9w0BAQQFADB/MQswCQYDVQQGEwJVSzEP
+MA0GA1UEBxMGTG9uZG9uMScwJQYDVQQDEx5SU0EgVGVzdFJvb3REU0EgQ2hhaW4g
+Q2VydCBUd28xFDASBgNVBAoTC1N5bWJpYW4gTHRkMSAwHgYJKoZIhvcNAQkBFhFQ
+ZWxsZVBvcEBhY21lLmNvbTAeFw0wNTA0MDQwNzM5MjNaFw0xNTA0MDIwNzM5MjNa
+MH4xCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xKTAnBgNVBAMTIFJTQSBU
+ZXN0Um9vdERTQSBDaGFpbiBDZXJ0IFRocmVlMRQwEgYDVQQKEwtTeW1iaWFuIEx0
+ZDEdMBsGCSqGSIb3DQEJARYOb3duQGZseWluZy5jb20wXDANBgkqhkiG9w0BAQEF
+AANLADBIAkEAtb0tvEDJBxf+rN1Er9b2IVApQVxea0MIkNrqZqtahGvvckMdkFHt
+UZJrWH17GFkg/99wRSKbf5cUiqYOIqwUZwIDAQABo4H7MIH4MB0GA1UdDgQWBBS4
+V9PlBFJoXA3VWBReWi+zQcXWFDCBsgYDVR0jBIGqMIGngBThhlcDBgpYPdG1Km5k
+Pkw+wLm4WaGBi6SBiDCBhTELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEn
+MCUGA1UEAxMeUlNBIFRlc3RSb290RFNBIENoYWluIENlcnQgT25lMRQwEgYDVQQK
+EwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3ltYmlh
+bi5jb22CAQEwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJ
+KoZIhvcNAQEEBQADQQAvyHyqBBwrwHDqZT/+T4fgYVqwRs7lSiUA/BJ25AlOfO79
+SVYqrNrBCOEIft1soexuQEJybGD75lh2ccwdEo4c
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICozCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCVUsx
+DzANBgNVBAcTBkxvbmRvbjEnMCUGA1UEAxMeUlNBIFRlc3RSb290RFNBIENoYWlu
+IENlcnQgT25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYX
+am9oYW4uZ3JvdGhAc3ltYmlhbi5jb20wHhcNMDUwNDA0MDczMzI4WhcNMTUwNDAy
+MDczMzI4WjB/MQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMScwJQYDVQQD
+Ex5SU0EgVGVzdFJvb3REU0EgQ2hhaW4gQ2VydCBUd28xFDASBgNVBAoTC1N5bWJp
+YW4gTHRkMSAwHgYJKoZIhvcNAQkBFhFQZWxsZVBvcEBhY21lLmNvbTBcMA0GCSqG
+SIb3DQEBAQUAA0sAMEgCQQDcN4VArzemI+NxX9PdcRyra/cVcMoGYTdogd5mO+C6
+9/3tTMfq0K4IOwFhsk//YvhCW/LU2UFUfeCGgORcihu7AgMBAAGjgawwgakwHQYD
+VR0OBBYEFOGGVwMGClg90bUqbmQ+TD7AubhZMGQGA1UdIwRdMFuAFFVZZM2XiwOl
++DD/5kyeZDGSk0vioUCkPjA8MR0wGwYDVQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0
+ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gRFNBggEBMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUAA0EAFT+M3Btz+3zB
+aifDBKpK7/ju8UFRycLUlijxJJnq4x5mM5sOYqx2fIbvr6jZ/C1gL3bIPs5haP3T
+WkkRzHfZBg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICRjCCAgagAwIBAgIBATAJBgcqhkjOOAQDMDwxHTAbBgNVBAoTFFN5bWJpYW4g
+U29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFuIFRlc3QgLSBEU0EwHhcNMDUw
+NDA0MDcyOTIzWhcNMTUwNDAyMDcyOTIzWjCBhTELMAkGA1UEBhMCVUsxDzANBgNV
+BAcTBkxvbmRvbjEnMCUGA1UEAxMeUlNBIFRlc3RSb290RFNBIENoYWluIENlcnQg
+T25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4u
+Z3JvdGhAc3ltYmlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAvIITzaF3
+fFDhYtpSSsJxLPaNeofj5OaGIPUywG7dM7Gxw4UrpClPEEfhEnGNN20jwMAGmK28
+Xco31Z+h/46QyQIDAQABo4GsMIGpMB0GA1UdDgQWBBRVWWTNl4sDpfgw/+ZMnmQx
+kpNL4jBkBgNVHSMEXTBbgBTsucGU/Sa1mOQtsKw9L+SWw1RyCqFApD4wPDEdMBsG
+A1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5bWJpYW4gVGVz
+dCAtIERTQYIBADASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwICBDAJ
+BgcqhkjOOAQDAy8AMCwCFHODdtgWyCJerNlbWbmSTCITOJFXAhRRAQ5iDyZnZ8o/
+jaOQnrA+U6f92A==
+-----END CERTIFICATE-----
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/cert_chain_rsa_len3/third.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC6jCCApSgAwIBAgIBATANBgkqhkiG9w0BAQQFADB/MQswCQYDVQQGEwJVSzEP
+MA0GA1UEBxMGTG9uZG9uMScwJQYDVQQDEx5SU0EgVGVzdFJvb3REU0EgQ2hhaW4g
+Q2VydCBUd28xFDASBgNVBAoTC1N5bWJpYW4gTHRkMSAwHgYJKoZIhvcNAQkBFhFQ
+ZWxsZVBvcEBhY21lLmNvbTAeFw0wNTA0MDQwNzM5MjNaFw0xNTA0MDIwNzM5MjNa
+MH4xCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xKTAnBgNVBAMTIFJTQSBU
+ZXN0Um9vdERTQSBDaGFpbiBDZXJ0IFRocmVlMRQwEgYDVQQKEwtTeW1iaWFuIEx0
+ZDEdMBsGCSqGSIb3DQEJARYOb3duQGZseWluZy5jb20wXDANBgkqhkiG9w0BAQEF
+AANLADBIAkEAtb0tvEDJBxf+rN1Er9b2IVApQVxea0MIkNrqZqtahGvvckMdkFHt
+UZJrWH17GFkg/99wRSKbf5cUiqYOIqwUZwIDAQABo4H7MIH4MB0GA1UdDgQWBBS4
+V9PlBFJoXA3VWBReWi+zQcXWFDCBsgYDVR0jBIGqMIGngBThhlcDBgpYPdG1Km5k
+Pkw+wLm4WaGBi6SBiDCBhTELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEn
+MCUGA1UEAxMeUlNBIFRlc3RSb290RFNBIENoYWluIENlcnQgT25lMRQwEgYDVQQK
+EwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3ltYmlh
+bi5jb22CAQEwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJ
+KoZIhvcNAQEEBQADQQAvyHyqBBwrwHDqZT/+T4fgYVqwRs7lSiUA/BJ25AlOfO79
+SVYqrNrBCOEIft1soexuQEJybGD75lh2ccwdEo4c
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADSA/dsaparam.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+-----BEGIN DSA PARAMETERS-----
+MIGdAkEAuge0Mq1oh1FS1UPU915suBNyGT6VBHZzqqDnbnLjvnE8FvZmGWKhwxvC
+cgbRMQpolX1dTZDk1f/MSZaUN50mMwIVAI8Zf1qgjHYqo5z+Y5SQCKviKkZRAkEA
+sumNlsR/gZc5EWxoDZM+XMC00bWn6jD4BgNEN7afWx+C0tnoAoST7WZBfZ8kEyXv
++QSFeXu3vwenpGLJLffd0A==
+-----END DSA PARAMETERS-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cacert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC2zCCAkSgAwIBAgIJANZj6mZ2eYydMA0GCSqGSIb3DQEBBAUAMIGLMQswCQYD
+VQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMS4wLAYDVQQDEyVUZXN0IHJvb3QgZm9y
+IGRpZmZlcmVudCBzZXJpYWwgbnVtYmVyMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEl
+MCMGCSqGSIb3DQEJARYWbWFyay5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA2MjIx
+NDUwMzBaFw0xNTA2MjAxNDUwMzBaMIGLMQswCQYDVQQGEwJVSzEPMA0GA1UEBxMG
+TG9uZG9uMS4wLAYDVQQDEyVUZXN0IHJvb3QgZm9yIGRpZmZlcmVudCBzZXJpYWwg
+bnVtYmVyMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDElMCMGCSqGSIb3DQEJARYWbWFy
+ay5ncm90aEBzeW1iaWFuLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+vaGClR38AGz13wpANspCdLXWQqZSrdC047PFw7C78oHYan1YCHvwSliYNB1b6Uu0
+u58gIj+WXAvMYyaWFtVGM77aFk8HY9d1ORWdUKUiaa6KmbnsjCztFpUJpeNjishB
+72uTrDXjW5Wzvod8VjxENLqDyKuPBgiOSGRJOiXXe6UCAwEAAaNFMEMwHQYDVR0O
+BBYEFHeY7egkRG79l5Ehv4rgpqVQtmBOMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYD
+VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUAA4GBAJnho5KznW1kyyNBDrDMptUT
+/C/vkxq7Yd0NBOOPn1eKHLKEQ1ruc5xyp0hc/RTetg/x/TYXkaj/RjGc07/2kuYM
+id1EihBac3RDyjTMxDCAynohVlJTNcl2WSgacJ+vH9+pvumv+/PoHdmSe3ik/SZ2
+TeXA+U4ui5Hexmmg0vIR
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cakey.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQC9oYKVHfwAbPXfCkA2ykJ0tdZCplKt0LTjs8XDsLvygdhqfVgI
+e/BKWJg0HVvpS7S7nyAiP5ZcC8xjJpYW1UYzvtoWTwdj13U5FZ1QpSJproqZueyM
+LO0WlQml42OKyEHva5OsNeNblbO+h3xWPEQ0uoPIq48GCI5IZEk6Jdd7pQIDAQAB
+AoGAHjAU+qogUO0Hoy8dk9tVAwFjj46swNDlyw32YLXE5dE345P6rLcWRK+f40P9
+OsF7jxbA5dLbm+Gg8vPUluPy3cmpnfyeADMwl8Tgyaf+bnJKjPrbhZOujQVaeR/h
+hdjsY3xeGcStkn4iA2OHDOXLIjONwndi9BD5BDrXN7XIY80CQQDrUWak27D4vqhk
+B2aEGEFgx8vK+KB2+imU0YDLX1ryOE+0nagllrpynFJm7rvtUwSvwcs4WbQBMRAk
+DZuw+fzfAkEAzkwpJO6nYbldDiCi+cDBQMGSJmUzKLUyWKPzeGJFOMubhlZ4NIhs
+Vu1HVQczR3UZ/Y67DENYQ1s6KxhYVAgT+wJAI2DYmr6Ay9T2QhuuuPtgkOlY5Uod
+7eVMbRhWUb0jUjlPGmt9hTE1FNgVt237CQIrOTVclTs/SdKTh6gYGTJsZwJAMnTE
+N2k7fRZWISdwVP+FBK6TbVqhGZq/tpha6x216n86CbBKdCbNwLEGGlDJhPeqJK7t
+JsGt68N7RaENsXfMUwJBAOXcz66OriPP+w0Ku2SyombkDbJMZi3Srt7sBDrK2j1S
+A5F+1sBp3Z/npPRiGb8I2YN2reEIB++J+N+UlZJ83hs=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/careq.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBzDCCATUCAQAwgYsxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xLjAs
+BgNVBAMTJVRlc3Qgcm9vdCBmb3IgZGlmZmVyZW50IHNlcmlhbCBudW1iZXIxFDAS
+BgNVBAoTC1N5bWJpYW4gTHRkMSUwIwYJKoZIhvcNAQkBFhZtYXJrLmdyb3RoQHN5
+bWJpYW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9oYKVHfwAbPXf
+CkA2ykJ0tdZCplKt0LTjs8XDsLvygdhqfVgIe/BKWJg0HVvpS7S7nyAiP5ZcC8xj
+JpYW1UYzvtoWTwdj13U5FZ1QpSJproqZueyMLO0WlQml42OKyEHva5OsNeNblbO+
+h3xWPEQ0uoPIq48GCI5IZEk6Jdd7pQIDAQABoAAwDQYJKoZIhvcNAQEEBQADgYEA
+MdECBK763i3BlJnA2p4lwOjuTeuuvj9tddxTyg2Lec3QW9cQD4vRQu4+9J2p/Bzj
+HN3xYkIW1oVlny0smClsh/4qo/akVszJsErHxhB0mdgWEJ3Xq3reWDLE4Ft6gx1x
++kF8fyLeUhdy9g0TJCk9vejjpTHZdta1yV65DuKc89k=
+-----END CERTIFICATE REQUEST-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cert_chain_rsa_len1/chain_rsa_len1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICmzCCAgSgAwIBAgIJALiEmA11bk9gMA0GCSqGSIb3DQEBBAUAMIGLMQswCQYD
+VQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMS4wLAYDVQQDEyVUZXN0IHJvb3QgZm9y
+IGRpZmZlcmVudCBzZXJpYWwgbnVtYmVyMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEl
+MCMGCSqGSIb3DQEJARYWbWFyay5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA2MjIx
+NDU0MTFaFw0xNTA2MjAxNDU0MTFaMIGPMQswCQYDVQQGEwJVSzEPMA0GA1UEBxMG
+TG9uZG9uMTMwMQYDVQQDEypjaGFpbjEgZm9yIHRlc3RpbmcgZGlmZmVyZW50IHNl
+cmlhbCBudW1iZXIxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSQwIgYJKoZIhvcNAQkB
+FhV0b20uZ3JvdGhAc3ltYmlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+4RUhCumO+lKF1i1b9vkuWjpAEcxSGkk/pBvslhUVFuHt+cnk2TIdCaBM+x4jFZ7F
+apE0dmXKLt0jIB3lF7I6FwIDAQABo0UwQzAdBgNVHQ4EFgQUc2/SxDKcn4X9PJcF
+6QT78I3gZegwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJ
+KoZIhvcNAQEEBQADgYEAU6IFCnXdVWCnFrcTySAk33RoWqWm3yMmtt3m0a5n2glz
+QQBj+sQSnauq1eByhnhdEp7fKuth/pmErKs5obs2gacs9Lrzthh8h0eb2iGj2O+9
+qbZsy+GfBDRfDcvSJAXsKYnIWuBoOZ9UjGPYxTEezK/N2ziJDJrty8gcSxa48Q8=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cert_chain_rsa_len1/first.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICmzCCAgSgAwIBAgIJALiEmA11bk9gMA0GCSqGSIb3DQEBBAUAMIGLMQswCQYD
+VQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMS4wLAYDVQQDEyVUZXN0IHJvb3QgZm9y
+IGRpZmZlcmVudCBzZXJpYWwgbnVtYmVyMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEl
+MCMGCSqGSIb3DQEJARYWbWFyay5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA2MjIx
+NDU0MTFaFw0xNTA2MjAxNDU0MTFaMIGPMQswCQYDVQQGEwJVSzEPMA0GA1UEBxMG
+TG9uZG9uMTMwMQYDVQQDEypjaGFpbjEgZm9yIHRlc3RpbmcgZGlmZmVyZW50IHNl
+cmlhbCBudW1iZXIxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSQwIgYJKoZIhvcNAQkB
+FhV0b20uZ3JvdGhAc3ltYmlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+4RUhCumO+lKF1i1b9vkuWjpAEcxSGkk/pBvslhUVFuHt+cnk2TIdCaBM+x4jFZ7F
+apE0dmXKLt0jIB3lF7I6FwIDAQABo0UwQzAdBgNVHQ4EFgQUc2/SxDKcn4X9PJcF
+6QT78I3gZegwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJ
+KoZIhvcNAQEEBQADgYEAU6IFCnXdVWCnFrcTySAk33RoWqWm3yMmtt3m0a5n2glz
+QQBj+sQSnauq1eByhnhdEp7fKuth/pmErKs5obs2gacs9Lrzthh8h0eb2iGj2O+9
+qbZsy+GfBDRfDcvSJAXsKYnIWuBoOZ9UjGPYxTEezK/N2ziJDJrty8gcSxa48Q8=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cert_chain_rsa_len2/chain_rsa_len2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIDJzCCAtGgAwIBAgIJANSuPLtWCR89MA0GCSqGSIb3DQEBBAUAMIGPMQswCQYD
+VQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMTMwMQYDVQQDEypjaGFpbjEgZm9yIHRl
+c3RpbmcgZGlmZmVyZW50IHNlcmlhbCBudW1iZXIxFDASBgNVBAoTC1N5bWJpYW4g
+THRkMSQwIgYJKoZIhvcNAQkBFhV0b20uZ3JvdGhAc3ltYmlhbi5jb20wHhcNMDUw
+NjIyMTcxMzM1WhcNMTUwNjIwMTcxMzM1WjCBkTELMAkGA1UEBhMCVUsxDzANBgNV
+BAcTBkxvbmRvbjE4MDYGA1UEAxMvUlNBIFRlc3QgUm9vdENBIERpZmZlcmVudCBT
+ZXJpYWwgQ2hhaW4gQ2VydCBUd28xFTATBgNVBAoTDFN5bWJpYW4gTHRkLjEgMB4G
+CSqGSIb3DQEJARYRUGVsbGVQb3BAYWNtZS5jb20wXDANBgkqhkiG9w0BAQEFAANL
+ADBIAkEAx0lJfNQCcpbfChLYgtqHf6QZvqhixG79tFFg0/nQ/N0R6ahvYxeeD7RM
+Tb+7w5w7VqeoWaNtLtz//AWfpqNw1wIDAQABo4IBCjCCAQYwHQYDVR0OBBYEFORN
+cWqD0kAFkLk02iAO3qyikS7oMIHABgNVHSMEgbgwgbWAFHNv0sQynJ+F/TyXBekE
++/CN4GXooYGRpIGOMIGLMQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMS4w
+LAYDVQQDEyVUZXN0IHJvb3QgZm9yIGRpZmZlcmVudCBzZXJpYWwgbnVtYmVyMRQw
+EgYDVQQKEwtTeW1iaWFuIEx0ZDElMCMGCSqGSIb3DQEJARYWbWFyay5ncm90aEBz
+eW1iaWFuLmNvbYIJALiEmA11bk9gMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0P
+AQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUAA0EAt8wSWA9C/cuK27CvK+kJKxG81mBL
+qdksVfXroKf2sjgUvMzxtTEnr1CyHnzBw5ne6s8H7uxuh5RZDG05wehsUw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICmzCCAgSgAwIBAgIJALiEmA11bk9gMA0GCSqGSIb3DQEBBAUAMIGLMQswCQYD
+VQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMS4wLAYDVQQDEyVUZXN0IHJvb3QgZm9y
+IGRpZmZlcmVudCBzZXJpYWwgbnVtYmVyMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEl
+MCMGCSqGSIb3DQEJARYWbWFyay5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA2MjIx
+NDU0MTFaFw0xNTA2MjAxNDU0MTFaMIGPMQswCQYDVQQGEwJVSzEPMA0GA1UEBxMG
+TG9uZG9uMTMwMQYDVQQDEypjaGFpbjEgZm9yIHRlc3RpbmcgZGlmZmVyZW50IHNl
+cmlhbCBudW1iZXIxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSQwIgYJKoZIhvcNAQkB
+FhV0b20uZ3JvdGhAc3ltYmlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+4RUhCumO+lKF1i1b9vkuWjpAEcxSGkk/pBvslhUVFuHt+cnk2TIdCaBM+x4jFZ7F
+apE0dmXKLt0jIB3lF7I6FwIDAQABo0UwQzAdBgNVHQ4EFgQUc2/SxDKcn4X9PJcF
+6QT78I3gZegwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJ
+KoZIhvcNAQEEBQADgYEAU6IFCnXdVWCnFrcTySAk33RoWqWm3yMmtt3m0a5n2glz
+QQBj+sQSnauq1eByhnhdEp7fKuth/pmErKs5obs2gacs9Lrzthh8h0eb2iGj2O+9
+qbZsy+GfBDRfDcvSJAXsKYnIWuBoOZ9UjGPYxTEezK/N2ziJDJrty8gcSxa48Q8=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCADiffSerial/cert_chain_rsa_len2/second.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDJzCCAtGgAwIBAgIJANSuPLtWCR89MA0GCSqGSIb3DQEBBAUAMIGPMQswCQYD
+VQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMTMwMQYDVQQDEypjaGFpbjEgZm9yIHRl
+c3RpbmcgZGlmZmVyZW50IHNlcmlhbCBudW1iZXIxFDASBgNVBAoTC1N5bWJpYW4g
+THRkMSQwIgYJKoZIhvcNAQkBFhV0b20uZ3JvdGhAc3ltYmlhbi5jb20wHhcNMDUw
+NjIyMTcxMzM1WhcNMTUwNjIwMTcxMzM1WjCBkTELMAkGA1UEBhMCVUsxDzANBgNV
+BAcTBkxvbmRvbjE4MDYGA1UEAxMvUlNBIFRlc3QgUm9vdENBIERpZmZlcmVudCBT
+ZXJpYWwgQ2hhaW4gQ2VydCBUd28xFTATBgNVBAoTDFN5bWJpYW4gTHRkLjEgMB4G
+CSqGSIb3DQEJARYRUGVsbGVQb3BAYWNtZS5jb20wXDANBgkqhkiG9w0BAQEFAANL
+ADBIAkEAx0lJfNQCcpbfChLYgtqHf6QZvqhixG79tFFg0/nQ/N0R6ahvYxeeD7RM
+Tb+7w5w7VqeoWaNtLtz//AWfpqNw1wIDAQABo4IBCjCCAQYwHQYDVR0OBBYEFORN
+cWqD0kAFkLk02iAO3qyikS7oMIHABgNVHSMEgbgwgbWAFHNv0sQynJ+F/TyXBekE
++/CN4GXooYGRpIGOMIGLMQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMS4w
+LAYDVQQDEyVUZXN0IHJvb3QgZm9yIGRpZmZlcmVudCBzZXJpYWwgbnVtYmVyMRQw
+EgYDVQQKEwtTeW1iaWFuIEx0ZDElMCMGCSqGSIb3DQEJARYWbWFyay5ncm90aEBz
+eW1iaWFuLmNvbYIJALiEmA11bk9gMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0P
+AQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUAA0EAt8wSWA9C/cuK27CvK+kJKxG81mBL
+qdksVfXroKf2sjgUvMzxtTEnr1CyHnzBw5ne6s8H7uxuh5RZDG05wehsUw==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/ca.key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQChVEG+fSTsN8df07UDBsxGUZO5B9egVtoT6Do3iD1W0LwAOuPs
+74LpQRMgRFWpuoicMlEMoaTIZ/GPi6yHhC7CPJELlvBW1TXgbvzMdhUvacDyUKHj
+YMgkIF4+t1OziH6cKAN2I0H/nWa1m54YmYyU2cNAI3aSkuIqBPv+0B/XgQIDAQAB
+AoGACVCcGyuOnjT6RgYrRWl3EfhT1zMkuBVLsiqOcfZj1EdpE3pS/rM1k9I2EH7h
+k1M54ArnsxsCMLAPuoIODCUNrgHoTKJtL8cU8Pa7ZALewSLfRDUqOJLi+W3Ups46
+6jvdqQkFRF2k9evJOyI7wMs1rG0c/MzBGC+5lRbOOWbfcYECQQDPLUO58npxgrup
+usp2LUdE/Vz/fsJOVCoyzJq29LMvTqmAWqPvU1YkoB+U1ZOtvxd8r6/vlUZvDx64
+y2m4htLdAkEAx1kOCcpLl+ElEDGV3z7F77JTh128DvczyOU3j639LvqTfQR3FHOP
++89RmP1axo/Qhh0tClkdif8ZV99iac6S9QJAdrDt/hfGwkUtkj2rRC0IiaPFpbJP
+S2S4kEXb1Tk3dsDQJvLGvJO35F+/+Bqr8nxpzkswtkeFBJda+G/A77B+GQJAWAT5
+TtdUo14U6F6Mh0MHULvTZ9y6cX0zD0wuSTGQrhKT1sqG7a/M7mlu5PdRAoVzlBQD
+1CLfCRRrE0KeCIvelQJAaSdqX9/vuiJOnGfL8SSXxfB3hXcJU0e2Lo252eeeQtux
+oMTb0/jADuN0nxfsU1yvxgX+1nsso8uwpFPiFwdPHQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/ca.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRDCCAa2gAwIBAgIBADANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA0MDQxODE0MzYxNFoXDTIwMDkyMTE0MzYxNFowPDEdMBsGA1UEChMUU3ltYmlh
+biBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5bWJpYW4gVGVzdCAtIFJTQTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAoVRBvn0k7DfHX9O1AwbMRlGTuQfXoFba
+E+g6N4g9VtC8ADrj7O+C6UETIERVqbqInDJRDKGkyGfxj4ush4QuwjyRC5bwVtU1
+4G78zHYVL2nA8lCh42DIJCBePrdTs4h+nCgDdiNB/51mtZueGJmMlNnDQCN2kpLi
+KgT7/tAf14ECAwEAAaNWMFQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwHQYDVR0OBBYEFOaTjrYQFlD8GQSM5KnKMYYmBZLWMA8GCSsGAQUFBzAB
+BQQCBQAwDQYJKoZIhvcNAQEEBQADgYEALXOi9zFgWw453UGQvw0HGNh6wemX2Ood
+pKceGDWyWFaQIxTA9dYVSqnhKWa728UklUi0CcRwp3leYHlvubkcSQANmRtM05PS
+kY2a2ENBf9afB/HNvOciFgGoHa494csZZ6ZS2GeKBxBOfajrjZrvQ3XDKptsRT1q
+50LsYyJhSg4=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len1/chain_dsa_len1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDNjCCAp+gAwIBAgIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA1MDQwNDA3NTcwNloXDTE1MDQwMjA3NTcwNlowgYUxCzAJBgNVBAYTAlVLMQ8w
+DQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHkRTQSBUZXN0Um9vdFJTQSBDaGFpbiBD
+ZXJ0IE9uZTEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pv
+aGFuLmdyb3RoQHN5bWJpYW4uY29tMIHwMIGoBgcqhkjOOAQBMIGcAkEAvgn7NXs3
+6y7tJWaPmLhtsBke8WVQEBpF8nrYK/rZIQpGAQALTLEU8DnDxmMONIm8gslI4n/O
+Gaw90FIvtXL+OwIVAIrHw8so1HlxzFcXCdkAsCYbHniLAkAZz5BrUd/uFDVBS2r1
+yhnMw3MO6lXfaAgCVSiUxkAwk1GPlbzfOouA33NUPRvJhoYPeOqCkaomMH6OjDcv
+t0nlA0MAAkAUGTtFucMXU1BHwYw2n6hJaAyLHWeY2vdXaHP2bppnAi/hDNI3fxQj
+4O5cZxCMcyQn25ztnuY7r8zjgjvWJesLo4GsMIGpMB0GA1UdDgQWBBQkvXK99MGe
+GFqdOcSfqVSerLS+MzBkBgNVHSMEXTBbgBTmk462EBZQ/BkEjOSpyjGGJgWS1qFA
+pD4wPDEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5
+bWJpYW4gVGVzdCAtIFJTQYIBADASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB
+/wQEAwICBDANBgkqhkiG9w0BAQQFAAOBgQBCtLrgl1uQyABPkDsFuhZJ5Gtmjb45
++IYR4yQrUVXqBmf8B4rQTm5+z+iTNJN6Ba9Hw8ImtK9Ui0wE4mdKrTZ/T2uFUAa3
+mbWePjNd/hAKLb3PpmwNuNWGqIHxNliuguRR1RIZuDtv54ZMTNGT+OFgEAeAq8+4
+V1rqzyXU8AxI7w==
+-----END CERTIFICATE-----
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len1/dsaparam.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+-----BEGIN DSA PARAMETERS-----
+MIGcAkEAvgn7NXs36y7tJWaPmLhtsBke8WVQEBpF8nrYK/rZIQpGAQALTLEU8DnD
+xmMONIm8gslI4n/OGaw90FIvtXL+OwIVAIrHw8so1HlxzFcXCdkAsCYbHniLAkAZ
+z5BrUd/uFDVBS2r1yhnMw3MO6lXfaAgCVSiUxkAwk1GPlbzfOouA33NUPRvJhoYP
+eOqCkaomMH6OjDcvt0nl
+-----END DSA PARAMETERS-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len1/first.dsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDNjCCAp+gAwIBAgIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA1MDQwNDA3NTcwNloXDTE1MDQwMjA3NTcwNlowgYUxCzAJBgNVBAYTAlVLMQ8w
+DQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHkRTQSBUZXN0Um9vdFJTQSBDaGFpbiBD
+ZXJ0IE9uZTEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pv
+aGFuLmdyb3RoQHN5bWJpYW4uY29tMIHwMIGoBgcqhkjOOAQBMIGcAkEAvgn7NXs3
+6y7tJWaPmLhtsBke8WVQEBpF8nrYK/rZIQpGAQALTLEU8DnDxmMONIm8gslI4n/O
+Gaw90FIvtXL+OwIVAIrHw8so1HlxzFcXCdkAsCYbHniLAkAZz5BrUd/uFDVBS2r1
+yhnMw3MO6lXfaAgCVSiUxkAwk1GPlbzfOouA33NUPRvJhoYPeOqCkaomMH6OjDcv
+t0nlA0MAAkAUGTtFucMXU1BHwYw2n6hJaAyLHWeY2vdXaHP2bppnAi/hDNI3fxQj
+4O5cZxCMcyQn25ztnuY7r8zjgjvWJesLo4GsMIGpMB0GA1UdDgQWBBQkvXK99MGe
+GFqdOcSfqVSerLS+MzBkBgNVHSMEXTBbgBTmk462EBZQ/BkEjOSpyjGGJgWS1qFA
+pD4wPDEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5
+bWJpYW4gVGVzdCAtIFJTQYIBADASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB
+/wQEAwICBDANBgkqhkiG9w0BAQQFAAOBgQBCtLrgl1uQyABPkDsFuhZJ5Gtmjb45
++IYR4yQrUVXqBmf8B4rQTm5+z+iTNJN6Ba9Hw8ImtK9Ui0wE4mdKrTZ/T2uFUAa3
+mbWePjNd/hAKLb3PpmwNuNWGqIHxNliuguRR1RIZuDtv54ZMTNGT+OFgEAeAq8+4
+V1rqzyXU8AxI7w==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len2/chain_dsa_len2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,39 @@
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAt6gAwIBAgIBATAJBgcqhkjOOAQDMIGFMQswCQYDVQQGEwJVSzEPMA0G
+A1UEBxMGTG9uZG9uMScwJQYDVQQDEx5EU0EgVGVzdFJvb3RSU0EgQ2hhaW4gQ2Vy
+dCBPbmUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hh
+bi5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA0MDQwODA4MTNaFw0xNTA0MDIwODA4
+MTNaMH8xCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHkRT
+QSBUZXN0Um9vdFJTQSBDaGFpbiBDZXJ0IFR3bzEUMBIGA1UEChMLU3ltYmlhbiBM
+dGQxIDAeBgkqhkiG9w0BCQEWEVBlbGxlUG9wQGFjbWUuY29tMIHwMIGoBgcqhkjO
+OAQBMIGcAkEAnPrAhiOL1/zqgRin638D8Wv/shyD6aIUz0MJjlJ+DHbgHWlkzs/r
+s/HBQhTkg/nzgLbsmza+aocqzhyt7VYinwIVAKXX3yjRm6IjsJOrsTXglhvXZNF5
+AkB9NXiDLVrD/QlpqFY/IOfJFc+9Jh/L6L42tvq6eKb8ZVpPwogkh4/lILywIyJZ
+OxxDhHSI+tRSgAjrEHkCuzA7A0MAAkApf8BfsPKHeflqu0XYMOVj2bhlmOMVZimD
+crEKx8v0ZzF1YO8Eq3pIgBIw5pMaNkBj3IEdMhrrA0Kv86SsJJ80o4GsMIGpMB0G
+A1UdDgQWBBTzEIL1CO9fKN9Z5VSZ4MDO76ubcTBkBgNVHSMEXTBbgBQkvXK99MGe
+GFqdOcSfqVSerLS+M6FApD4wPDEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBM
+dGQxGzAZBgNVBAMTElN5bWJpYW4gVGVzdCAtIFJTQYIBATASBgNVHRMBAf8ECDAG
+AQH/AgEFMA4GA1UdDwEB/wQEAwICBDAJBgcqhkjOOAQDAy8AMCwCFDGKLLMXC4DD
+wEUSXONBa0aXg45rAhQxZLz5IAiciZa8p5lNXCgAXhu62w==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDNjCCAp+gAwIBAgIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA1MDQwNDA3NTcwNloXDTE1MDQwMjA3NTcwNlowgYUxCzAJBgNVBAYTAlVLMQ8w
+DQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHkRTQSBUZXN0Um9vdFJTQSBDaGFpbiBD
+ZXJ0IE9uZTEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pv
+aGFuLmdyb3RoQHN5bWJpYW4uY29tMIHwMIGoBgcqhkjOOAQBMIGcAkEAvgn7NXs3
+6y7tJWaPmLhtsBke8WVQEBpF8nrYK/rZIQpGAQALTLEU8DnDxmMONIm8gslI4n/O
+Gaw90FIvtXL+OwIVAIrHw8so1HlxzFcXCdkAsCYbHniLAkAZz5BrUd/uFDVBS2r1
+yhnMw3MO6lXfaAgCVSiUxkAwk1GPlbzfOouA33NUPRvJhoYPeOqCkaomMH6OjDcv
+t0nlA0MAAkAUGTtFucMXU1BHwYw2n6hJaAyLHWeY2vdXaHP2bppnAi/hDNI3fxQj
+4O5cZxCMcyQn25ztnuY7r8zjgjvWJesLo4GsMIGpMB0GA1UdDgQWBBQkvXK99MGe
+GFqdOcSfqVSerLS+MzBkBgNVHSMEXTBbgBTmk462EBZQ/BkEjOSpyjGGJgWS1qFA
+pD4wPDEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5
+bWJpYW4gVGVzdCAtIFJTQYIBADASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB
+/wQEAwICBDANBgkqhkiG9w0BAQQFAAOBgQBCtLrgl1uQyABPkDsFuhZJ5Gtmjb45
++IYR4yQrUVXqBmf8B4rQTm5+z+iTNJN6Ba9Hw8ImtK9Ui0wE4mdKrTZ/T2uFUAa3
+mbWePjNd/hAKLb3PpmwNuNWGqIHxNliuguRR1RIZuDtv54ZMTNGT+OFgEAeAq8+4
+V1rqzyXU8AxI7w==
+-----END CERTIFICATE-----
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len2/dsaparam.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+-----BEGIN DSA PARAMETERS-----
+MIGcAkEAnPrAhiOL1/zqgRin638D8Wv/shyD6aIUz0MJjlJ+DHbgHWlkzs/rs/HB
+QhTkg/nzgLbsmza+aocqzhyt7VYinwIVAKXX3yjRm6IjsJOrsTXglhvXZNF5AkB9
+NXiDLVrD/QlpqFY/IOfJFc+9Jh/L6L42tvq6eKb8ZVpPwogkh4/lILywIyJZOxxD
+hHSI+tRSgAjrEHkCuzA7
+-----END DSA PARAMETERS-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len2/second.dsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAt6gAwIBAgIBATAJBgcqhkjOOAQDMIGFMQswCQYDVQQGEwJVSzEPMA0G
+A1UEBxMGTG9uZG9uMScwJQYDVQQDEx5EU0EgVGVzdFJvb3RSU0EgQ2hhaW4gQ2Vy
+dCBPbmUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hh
+bi5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA0MDQwODA4MTNaFw0xNTA0MDIwODA4
+MTNaMH8xCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHkRT
+QSBUZXN0Um9vdFJTQSBDaGFpbiBDZXJ0IFR3bzEUMBIGA1UEChMLU3ltYmlhbiBM
+dGQxIDAeBgkqhkiG9w0BCQEWEVBlbGxlUG9wQGFjbWUuY29tMIHwMIGoBgcqhkjO
+OAQBMIGcAkEAnPrAhiOL1/zqgRin638D8Wv/shyD6aIUz0MJjlJ+DHbgHWlkzs/r
+s/HBQhTkg/nzgLbsmza+aocqzhyt7VYinwIVAKXX3yjRm6IjsJOrsTXglhvXZNF5
+AkB9NXiDLVrD/QlpqFY/IOfJFc+9Jh/L6L42tvq6eKb8ZVpPwogkh4/lILywIyJZ
+OxxDhHSI+tRSgAjrEHkCuzA7A0MAAkApf8BfsPKHeflqu0XYMOVj2bhlmOMVZimD
+crEKx8v0ZzF1YO8Eq3pIgBIw5pMaNkBj3IEdMhrrA0Kv86SsJJ80o4GsMIGpMB0G
+A1UdDgQWBBTzEIL1CO9fKN9Z5VSZ4MDO76ubcTBkBgNVHSMEXTBbgBQkvXK99MGe
+GFqdOcSfqVSerLS+M6FApD4wPDEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBM
+dGQxGzAZBgNVBAMTElN5bWJpYW4gVGVzdCAtIFJTQYIBATASBgNVHRMBAf8ECDAG
+AQH/AgEFMA4GA1UdDwEB/wQEAwICBDAJBgcqhkjOOAQDAy8AMCwCFDGKLLMXC4DD
+wEUSXONBa0aXg45rAhQxZLz5IAiciZa8p5lNXCgAXhu62w==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len3/chain_dsa_len3.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+-----BEGIN CERTIFICATE-----
+MIIDZTCCAyWgAwIBAgIBATAJBgcqhkjOOAQDMH8xCzAJBgNVBAYTAlVLMQ8wDQYD
+VQQHEwZMb25kb24xJzAlBgNVBAMTHkRTQSBUZXN0Um9vdFJTQSBDaGFpbiBDZXJ0
+IFR3bzEUMBIGA1UEChMLU3ltYmlhbiBMdGQxIDAeBgkqhkiG9w0BCQEWEVBlbGxl
+UG9wQGFjbWUuY29tMB4XDTA1MDQwNDA4MjAxOFoXDTE1MDQwMjA4MjAxOFowfjEL
+MAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEpMCcGA1UEAxMgRFNBIFRlc3RS
+b290UlNBIENoYWluIENlcnQgVGhyZWUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMR0w
+GwYJKoZIhvcNAQkBFg5vd25AZmx5aW5nLmNvbTCB8DCBqAYHKoZIzjgEATCBnAJB
+AKu5bF0xeRiF3MXlfOf4FOG9sJ/PAbOldxJ0oJ8MiwNplSuPrV9+XuiXPEul6KSg
+Rm/0NYIpfNUdGprJ9xepnQUCFQCutZcORf2TWYbXlGVvl8WcE+w9iwJABE6k2Vyn
+4nYkCTMM3q6O4uKgwZs74MzNzC1ajx1mffNCXblcLuk9lDoGuQ9EK/c//A6V93SK
+Hed/wtDLLPbpagNDAAJABNcjDoZPuSTtNsjpHDroeLGPBis/oDXtWegvRvlA58fz
+sxeqUZlZQxGvmVE7TR0dSm2eKDYJ0n6LEX64q7W8g6OB+zCB+DAdBgNVHQ4EFgQU
+KdzSbNkZBCyT2z2misybL+88XtowgbIGA1UdIwSBqjCBp4AU8xCC9QjvXyjfWeVU
+meDAzu+rm3GhgYukgYgwgYUxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24x
+JzAlBgNVBAMTHkRTQSBUZXN0Um9vdFJTQSBDaGFpbiBDZXJ0IE9uZTEUMBIGA1UE
+ChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pvaGFuLmdyb3RoQHN5bWJp
+YW4uY29tggEBMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMAkG
+ByqGSM44BAMDLwAwLAIUcBEHRlrtpkKeCh37GPWWUu+lY8QCFD+d+/KSJ/fT2pu7
+hxGcr0Nk0pHZ
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAt6gAwIBAgIBATAJBgcqhkjOOAQDMIGFMQswCQYDVQQGEwJVSzEPMA0G
+A1UEBxMGTG9uZG9uMScwJQYDVQQDEx5EU0EgVGVzdFJvb3RSU0EgQ2hhaW4gQ2Vy
+dCBPbmUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hh
+bi5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA0MDQwODA4MTNaFw0xNTA0MDIwODA4
+MTNaMH8xCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHkRT
+QSBUZXN0Um9vdFJTQSBDaGFpbiBDZXJ0IFR3bzEUMBIGA1UEChMLU3ltYmlhbiBM
+dGQxIDAeBgkqhkiG9w0BCQEWEVBlbGxlUG9wQGFjbWUuY29tMIHwMIGoBgcqhkjO
+OAQBMIGcAkEAnPrAhiOL1/zqgRin638D8Wv/shyD6aIUz0MJjlJ+DHbgHWlkzs/r
+s/HBQhTkg/nzgLbsmza+aocqzhyt7VYinwIVAKXX3yjRm6IjsJOrsTXglhvXZNF5
+AkB9NXiDLVrD/QlpqFY/IOfJFc+9Jh/L6L42tvq6eKb8ZVpPwogkh4/lILywIyJZ
+OxxDhHSI+tRSgAjrEHkCuzA7A0MAAkApf8BfsPKHeflqu0XYMOVj2bhlmOMVZimD
+crEKx8v0ZzF1YO8Eq3pIgBIw5pMaNkBj3IEdMhrrA0Kv86SsJJ80o4GsMIGpMB0G
+A1UdDgQWBBTzEIL1CO9fKN9Z5VSZ4MDO76ubcTBkBgNVHSMEXTBbgBQkvXK99MGe
+GFqdOcSfqVSerLS+M6FApD4wPDEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBM
+dGQxGzAZBgNVBAMTElN5bWJpYW4gVGVzdCAtIFJTQYIBATASBgNVHRMBAf8ECDAG
+AQH/AgEFMA4GA1UdDwEB/wQEAwICBDAJBgcqhkjOOAQDAy8AMCwCFDGKLLMXC4DD
+wEUSXONBa0aXg45rAhQxZLz5IAiciZa8p5lNXCgAXhu62w==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDNjCCAp+gAwIBAgIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA1MDQwNDA3NTcwNloXDTE1MDQwMjA3NTcwNlowgYUxCzAJBgNVBAYTAlVLMQ8w
+DQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHkRTQSBUZXN0Um9vdFJTQSBDaGFpbiBD
+ZXJ0IE9uZTEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pv
+aGFuLmdyb3RoQHN5bWJpYW4uY29tMIHwMIGoBgcqhkjOOAQBMIGcAkEAvgn7NXs3
+6y7tJWaPmLhtsBke8WVQEBpF8nrYK/rZIQpGAQALTLEU8DnDxmMONIm8gslI4n/O
+Gaw90FIvtXL+OwIVAIrHw8so1HlxzFcXCdkAsCYbHniLAkAZz5BrUd/uFDVBS2r1
+yhnMw3MO6lXfaAgCVSiUxkAwk1GPlbzfOouA33NUPRvJhoYPeOqCkaomMH6OjDcv
+t0nlA0MAAkAUGTtFucMXU1BHwYw2n6hJaAyLHWeY2vdXaHP2bppnAi/hDNI3fxQj
+4O5cZxCMcyQn25ztnuY7r8zjgjvWJesLo4GsMIGpMB0GA1UdDgQWBBQkvXK99MGe
+GFqdOcSfqVSerLS+MzBkBgNVHSMEXTBbgBTmk462EBZQ/BkEjOSpyjGGJgWS1qFA
+pD4wPDEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxGzAZBgNVBAMTElN5
+bWJpYW4gVGVzdCAtIFJTQYIBADASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB
+/wQEAwICBDANBgkqhkiG9w0BAQQFAAOBgQBCtLrgl1uQyABPkDsFuhZJ5Gtmjb45
++IYR4yQrUVXqBmf8B4rQTm5+z+iTNJN6Ba9Hw8ImtK9Ui0wE4mdKrTZ/T2uFUAa3
+mbWePjNd/hAKLb3PpmwNuNWGqIHxNliuguRR1RIZuDtv54ZMTNGT+OFgEAeAq8+4
+V1rqzyXU8AxI7w==
+-----END CERTIFICATE-----
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len3/dsaparam.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+-----BEGIN DSA PARAMETERS-----
+MIGcAkEAq7lsXTF5GIXcxeV85/gU4b2wn88Bs6V3EnSgnwyLA2mVK4+tX35e6Jc8
+S6XopKBGb/Q1gil81R0amsn3F6mdBQIVAK61lw5F/ZNZhteUZW+XxZwT7D2LAkAE
+TqTZXKfidiQJMwzero7i4qDBmzvgzM3MLVqPHWZ980JduVwu6T2UOga5D0Qr9z/8
+DpX3dIod53/C0Mss9ulq
+-----END DSA PARAMETERS-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_dsa_len3/third.dsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDZTCCAyWgAwIBAgIBATAJBgcqhkjOOAQDMH8xCzAJBgNVBAYTAlVLMQ8wDQYD
+VQQHEwZMb25kb24xJzAlBgNVBAMTHkRTQSBUZXN0Um9vdFJTQSBDaGFpbiBDZXJ0
+IFR3bzEUMBIGA1UEChMLU3ltYmlhbiBMdGQxIDAeBgkqhkiG9w0BCQEWEVBlbGxl
+UG9wQGFjbWUuY29tMB4XDTA1MDQwNDA4MjAxOFoXDTE1MDQwMjA4MjAxOFowfjEL
+MAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEpMCcGA1UEAxMgRFNBIFRlc3RS
+b290UlNBIENoYWluIENlcnQgVGhyZWUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMR0w
+GwYJKoZIhvcNAQkBFg5vd25AZmx5aW5nLmNvbTCB8DCBqAYHKoZIzjgEATCBnAJB
+AKu5bF0xeRiF3MXlfOf4FOG9sJ/PAbOldxJ0oJ8MiwNplSuPrV9+XuiXPEul6KSg
+Rm/0NYIpfNUdGprJ9xepnQUCFQCutZcORf2TWYbXlGVvl8WcE+w9iwJABE6k2Vyn
+4nYkCTMM3q6O4uKgwZs74MzNzC1ajx1mffNCXblcLuk9lDoGuQ9EK/c//A6V93SK
+Hed/wtDLLPbpagNDAAJABNcjDoZPuSTtNsjpHDroeLGPBis/oDXtWegvRvlA58fz
+sxeqUZlZQxGvmVE7TR0dSm2eKDYJ0n6LEX64q7W8g6OB+zCB+DAdBgNVHQ4EFgQU
+KdzSbNkZBCyT2z2misybL+88XtowgbIGA1UdIwSBqjCBp4AU8xCC9QjvXyjfWeVU
+meDAzu+rm3GhgYukgYgwgYUxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24x
+JzAlBgNVBAMTHkRTQSBUZXN0Um9vdFJTQSBDaGFpbiBDZXJ0IE9uZTEUMBIGA1UE
+ChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pvaGFuLmdyb3RoQHN5bWJp
+YW4uY29tggEBMBIGA1UdEwEB/wQIMAYBAf8CAQUwDgYDVR0PAQH/BAQDAgIEMAkG
+ByqGSM44BAMDLwAwLAIUcBEHRlrtpkKeCh37GPWWUu+lY8QCFD+d+/KSJ/fT2pu7
+hxGcr0Nk0pHZ
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len1/chain_rsa_len1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICoTCCAgqgAwIBAgIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA1MDQwNDA4MjY0N1oXDTE1MDQwMjA4MjY0N1owgYUxCzAJBgNVBAYTAlVLMQ8w
+DQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHlJTQSBUZXN0Um9vdFJTQSBDaGFpbiBD
+ZXJ0IE9uZTEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pv
+aGFuLmdyb3RoQHN5bWJpYW4uY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALBx
+IBv9gEhppyryXVmN4qZzgeu59MDEiTd5/WDfdG3a+aF4c1ERciD6H5Hwmvhx/TJ5
+mpuKeKn6aJBz6QTZ5ksCAwEAAaOBrDCBqTAdBgNVHQ4EFgQUDVOCfuKBurGrAz5u
+FlGhEzwvUYMwZAYDVR0jBF0wW4AU5pOOthAWUPwZBIzkqcoxhiYFktahQKQ+MDwx
+HTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFu
+IFRlc3QgLSBSU0GCAQAwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC
+AgQwDQYJKoZIhvcNAQEEBQADgYEAUoUlBiVPcS9trOjMYD/6K/WqsKZWWJ2ZMu+e
+v/39gb4hkEvxa5I7LpsLM5HkCwTYH2nXkuL3Fc7AT/RfpjEjLmR962XbO92cFm0N
+q+PPxW9OSvLEDhlaqKzB5iAXr8Pae3+nvAuuKCfF82fh3Ndxs3sFLQ2DKeUgobQH
+Ae2SR+c=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len1/first.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICoTCCAgqgAwIBAgIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA1MDQwNDA4MjY0N1oXDTE1MDQwMjA4MjY0N1owgYUxCzAJBgNVBAYTAlVLMQ8w
+DQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHlJTQSBUZXN0Um9vdFJTQSBDaGFpbiBD
+ZXJ0IE9uZTEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pv
+aGFuLmdyb3RoQHN5bWJpYW4uY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALBx
+IBv9gEhppyryXVmN4qZzgeu59MDEiTd5/WDfdG3a+aF4c1ERciD6H5Hwmvhx/TJ5
+mpuKeKn6aJBz6QTZ5ksCAwEAAaOBrDCBqTAdBgNVHQ4EFgQUDVOCfuKBurGrAz5u
+FlGhEzwvUYMwZAYDVR0jBF0wW4AU5pOOthAWUPwZBIzkqcoxhiYFktahQKQ+MDwx
+HTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFu
+IFRlc3QgLSBSU0GCAQAwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC
+AgQwDQYJKoZIhvcNAQEEBQADgYEAUoUlBiVPcS9trOjMYD/6K/WqsKZWWJ2ZMu+e
+v/39gb4hkEvxa5I7LpsLM5HkCwTYH2nXkuL3Fc7AT/RfpjEjLmR962XbO92cFm0N
+q+PPxW9OSvLEDhlaqKzB5iAXr8Pae3+nvAuuKCfF82fh3Ndxs3sFLQ2DKeUgobQH
+Ae2SR+c=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len2/chain_rsa_len2.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIICozCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCVUsx
+DzANBgNVBAcTBkxvbmRvbjEnMCUGA1UEAxMeUlNBIFRlc3RSb290UlNBIENoYWlu
+IENlcnQgT25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYX
+am9oYW4uZ3JvdGhAc3ltYmlhbi5jb20wHhcNMDUwNDA0MDgzMjA5WhcNMTUwNDAy
+MDgzMjA5WjB/MQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMScwJQYDVQQD
+Ex5SU0EgVGVzdFJvb3RSU0EgQ2hhaW4gQ2VydCBUd28xFDASBgNVBAoTC1N5bWJp
+YW4gTHRkMSAwHgYJKoZIhvcNAQkBFhFQZWxsZVBvcEBhY21lLmNvbTBcMA0GCSqG
+SIb3DQEBAQUAA0sAMEgCQQC55HtHlQWXsJl9PHJzfvpHr7m3r+8wlcL4smELDWdz
+KvTwq+5Tq6vBs4bgaNogywlctXsRW639V+wNRqQVoABfAgMBAAGjgawwgakwHQYD
+VR0OBBYEFDcgyQstC1Fb+joBdNtcjt+5k0YAMGQGA1UdIwRdMFuAFA1Tgn7igbqx
+qwM+bhZRoRM8L1GDoUCkPjA8MR0wGwYDVQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0
+ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBggEBMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUAA0EAhDPzFc1Dlna+
+LPWwBv0ZbFAZVRKS1CzhnaTRaR0srblIgTpZlci1MhfsXDkMHXQS454gwBQoPZRU
+tmSR0l2IFg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICoTCCAgqgAwIBAgIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA1MDQwNDA4MjY0N1oXDTE1MDQwMjA4MjY0N1owgYUxCzAJBgNVBAYTAlVLMQ8w
+DQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHlJTQSBUZXN0Um9vdFJTQSBDaGFpbiBD
+ZXJ0IE9uZTEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pv
+aGFuLmdyb3RoQHN5bWJpYW4uY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALBx
+IBv9gEhppyryXVmN4qZzgeu59MDEiTd5/WDfdG3a+aF4c1ERciD6H5Hwmvhx/TJ5
+mpuKeKn6aJBz6QTZ5ksCAwEAAaOBrDCBqTAdBgNVHQ4EFgQUDVOCfuKBurGrAz5u
+FlGhEzwvUYMwZAYDVR0jBF0wW4AU5pOOthAWUPwZBIzkqcoxhiYFktahQKQ+MDwx
+HTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFu
+IFRlc3QgLSBSU0GCAQAwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC
+AgQwDQYJKoZIhvcNAQEEBQADgYEAUoUlBiVPcS9trOjMYD/6K/WqsKZWWJ2ZMu+e
+v/39gb4hkEvxa5I7LpsLM5HkCwTYH2nXkuL3Fc7AT/RfpjEjLmR962XbO92cFm0N
+q+PPxW9OSvLEDhlaqKzB5iAXr8Pae3+nvAuuKCfF82fh3Ndxs3sFLQ2DKeUgobQH
+Ae2SR+c=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len2/second.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICozCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCVUsx
+DzANBgNVBAcTBkxvbmRvbjEnMCUGA1UEAxMeUlNBIFRlc3RSb290UlNBIENoYWlu
+IENlcnQgT25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYX
+am9oYW4uZ3JvdGhAc3ltYmlhbi5jb20wHhcNMDUwNDA0MDgzMjA5WhcNMTUwNDAy
+MDgzMjA5WjB/MQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMScwJQYDVQQD
+Ex5SU0EgVGVzdFJvb3RSU0EgQ2hhaW4gQ2VydCBUd28xFDASBgNVBAoTC1N5bWJp
+YW4gTHRkMSAwHgYJKoZIhvcNAQkBFhFQZWxsZVBvcEBhY21lLmNvbTBcMA0GCSqG
+SIb3DQEBAQUAA0sAMEgCQQC55HtHlQWXsJl9PHJzfvpHr7m3r+8wlcL4smELDWdz
+KvTwq+5Tq6vBs4bgaNogywlctXsRW639V+wNRqQVoABfAgMBAAGjgawwgakwHQYD
+VR0OBBYEFDcgyQstC1Fb+joBdNtcjt+5k0YAMGQGA1UdIwRdMFuAFA1Tgn7igbqx
+qwM+bhZRoRM8L1GDoUCkPjA8MR0wGwYDVQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0
+ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBggEBMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUAA0EAhDPzFc1Dlna+
+LPWwBv0ZbFAZVRKS1CzhnaTRaR0srblIgTpZlci1MhfsXDkMHXQS454gwBQoPZRU
+tmSR0l2IFg==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len3/chain_rsa_len3.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+-----BEGIN CERTIFICATE-----
+MIIC6jCCApSgAwIBAgIBATANBgkqhkiG9w0BAQQFADB/MQswCQYDVQQGEwJVSzEP
+MA0GA1UEBxMGTG9uZG9uMScwJQYDVQQDEx5SU0EgVGVzdFJvb3RSU0EgQ2hhaW4g
+Q2VydCBUd28xFDASBgNVBAoTC1N5bWJpYW4gTHRkMSAwHgYJKoZIhvcNAQkBFhFQ
+ZWxsZVBvcEBhY21lLmNvbTAeFw0wNTA0MDQwODQ0MzdaFw0xNTA0MDIwODQ0Mzda
+MH4xCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xKTAnBgNVBAMTIFJTQSBU
+ZXN0Um9vdFJTQSBDaGFpbiBDZXJ0IFRocmVlMRQwEgYDVQQKEwtTeW1iaWFuIEx0
+ZDEdMBsGCSqGSIb3DQEJARYOb3duQGZseWluZy5jb20wXDANBgkqhkiG9w0BAQEF
+AANLADBIAkEAxxvc2GJoyYL4Z8HmYx+eZGs67jxurA+YyHvUWW620ORtHmJ3mCC7
+W8aTPWADXP8Xmph/ZjDnNqnKradfDIUA6wIDAQABo4H7MIH4MB0GA1UdDgQWBBS4
+AWrr6wPqBmncj8glQ+33aguenjCBsgYDVR0jBIGqMIGngBQ3IMkLLQtRW/o6AXTb
+XI7fuZNGAKGBi6SBiDCBhTELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEn
+MCUGA1UEAxMeUlNBIFRlc3RSb290UlNBIENoYWluIENlcnQgT25lMRQwEgYDVQQK
+EwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3ltYmlh
+bi5jb22CAQEwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJ
+KoZIhvcNAQEEBQADQQAVUKfJjmSqbwmAGhlEXmUkoSpvBW5RDxpez3K/Nd08UVV/
+0nm1Ri+msm8eaQrD8jSxZRslN9uyNepTMFHYFG/v
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICozCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCVUsx
+DzANBgNVBAcTBkxvbmRvbjEnMCUGA1UEAxMeUlNBIFRlc3RSb290UlNBIENoYWlu
+IENlcnQgT25lMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYX
+am9oYW4uZ3JvdGhAc3ltYmlhbi5jb20wHhcNMDUwNDA0MDgzMjA5WhcNMTUwNDAy
+MDgzMjA5WjB/MQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMScwJQYDVQQD
+Ex5SU0EgVGVzdFJvb3RSU0EgQ2hhaW4gQ2VydCBUd28xFDASBgNVBAoTC1N5bWJp
+YW4gTHRkMSAwHgYJKoZIhvcNAQkBFhFQZWxsZVBvcEBhY21lLmNvbTBcMA0GCSqG
+SIb3DQEBAQUAA0sAMEgCQQC55HtHlQWXsJl9PHJzfvpHr7m3r+8wlcL4smELDWdz
+KvTwq+5Tq6vBs4bgaNogywlctXsRW639V+wNRqQVoABfAgMBAAGjgawwgakwHQYD
+VR0OBBYEFDcgyQstC1Fb+joBdNtcjt+5k0YAMGQGA1UdIwRdMFuAFA1Tgn7igbqx
+qwM+bhZRoRM8L1GDoUCkPjA8MR0wGwYDVQQKExRTeW1iaWFuIFNvZnR3YXJlIEx0
+ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBggEBMBIGA1UdEwEB/wQIMAYB
+Af8CAQUwDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBBAUAA0EAhDPzFc1Dlna+
+LPWwBv0ZbFAZVRKS1CzhnaTRaR0srblIgTpZlci1MhfsXDkMHXQS454gwBQoPZRU
+tmSR0l2IFg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICoTCCAgqgAwIBAgIBATANBgkqhkiG9w0BAQQFADA8MR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDEbMBkGA1UEAxMSU3ltYmlhbiBUZXN0IC0gUlNBMB4X
+DTA1MDQwNDA4MjY0N1oXDTE1MDQwMjA4MjY0N1owgYUxCzAJBgNVBAYTAlVLMQ8w
+DQYDVQQHEwZMb25kb24xJzAlBgNVBAMTHlJTQSBUZXN0Um9vdFJTQSBDaGFpbiBD
+ZXJ0IE9uZTEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pv
+aGFuLmdyb3RoQHN5bWJpYW4uY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALBx
+IBv9gEhppyryXVmN4qZzgeu59MDEiTd5/WDfdG3a+aF4c1ERciD6H5Hwmvhx/TJ5
+mpuKeKn6aJBz6QTZ5ksCAwEAAaOBrDCBqTAdBgNVHQ4EFgQUDVOCfuKBurGrAz5u
+FlGhEzwvUYMwZAYDVR0jBF0wW4AU5pOOthAWUPwZBIzkqcoxhiYFktahQKQ+MDwx
+HTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRswGQYDVQQDExJTeW1iaWFu
+IFRlc3QgLSBSU0GCAQAwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC
+AgQwDQYJKoZIhvcNAQEEBQADgYEAUoUlBiVPcS9trOjMYD/6K/WqsKZWWJ2ZMu+e
+v/39gb4hkEvxa5I7LpsLM5HkCwTYH2nXkuL3Fc7AT/RfpjEjLmR962XbO92cFm0N
+q+PPxW9OSvLEDhlaqKzB5iAXr8Pae3+nvAuuKCfF82fh3Ndxs3sFLQ2DKeUgobQH
+Ae2SR+c=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/cert_chain_rsa_len3/third.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC6jCCApSgAwIBAgIBATANBgkqhkiG9w0BAQQFADB/MQswCQYDVQQGEwJVSzEP
+MA0GA1UEBxMGTG9uZG9uMScwJQYDVQQDEx5SU0EgVGVzdFJvb3RSU0EgQ2hhaW4g
+Q2VydCBUd28xFDASBgNVBAoTC1N5bWJpYW4gTHRkMSAwHgYJKoZIhvcNAQkBFhFQ
+ZWxsZVBvcEBhY21lLmNvbTAeFw0wNTA0MDQwODQ0MzdaFw0xNTA0MDIwODQ0Mzda
+MH4xCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xKTAnBgNVBAMTIFJTQSBU
+ZXN0Um9vdFJTQSBDaGFpbiBDZXJ0IFRocmVlMRQwEgYDVQQKEwtTeW1iaWFuIEx0
+ZDEdMBsGCSqGSIb3DQEJARYOb3duQGZseWluZy5jb20wXDANBgkqhkiG9w0BAQEF
+AANLADBIAkEAxxvc2GJoyYL4Z8HmYx+eZGs67jxurA+YyHvUWW620ORtHmJ3mCC7
+W8aTPWADXP8Xmph/ZjDnNqnKradfDIUA6wIDAQABo4H7MIH4MB0GA1UdDgQWBBS4
+AWrr6wPqBmncj8glQ+33aguenjCBsgYDVR0jBIGqMIGngBQ3IMkLLQtRW/o6AXTb
+XI7fuZNGAKGBi6SBiDCBhTELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEn
+MCUGA1UEAxMeUlNBIFRlc3RSb290UlNBIENoYWluIENlcnQgT25lMRQwEgYDVQQK
+EwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3ltYmlh
+bi5jb22CAQEwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJ
+KoZIhvcNAQEEBQADQQAVUKfJjmSqbwmAGhlEXmUkoSpvBW5RDxpez3K/Nd08UVV/
+0nm1Ri+msm8eaQrD8jSxZRslN9uyNepTMFHYFG/v
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootCARSA/dsaparam.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,6 @@
+-----BEGIN DSA PARAMETERS-----
+MIGdAkEAkb+To8XWy2E5EyC/Jv1GsXhWhC8C4P4wUFVPsFHOL/aDE98KLaLpBmiJ
+CdO1AXQCZ0xBPOauM3qLZLT9V6vucwIVAI4fMB7r+NWkvV2s+0wqgkiaJYM9AkEA
+ibtHMJ4oynBVUocRX8HWCbDc1j4Td3qFIl9RlHmThggXrJ/fmlqIlvmJYYsv1+MH
+/KRiN+99ZQzj7uiS62yZ/Q==
+-----END DSA PARAMETERS-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootExpiredCARSA/cacert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICyzCCAjSgAwIBAgIJALQ+epw2GV/eMA0GCSqGSIb3DQEBBAUAMIGDMQswCQYD
+VQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMRgwFgYDVQQDEw9KYXNvbiBTaWJ0aG9y
+cGUxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMSowKAYJKoZIhvcNAQkB
+FhtqYXNvbi5zaWJ0aG9ycGVAc3ltYmlhbi5jb20wHhcNMDEwMTAxMDAzNTQ2WhcN
+MDEwMTAyMDAzNTQ2WjCBgzELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEY
+MBYGA1UEAxMPSmFzb24gU2lidGhvcnBlMR0wGwYDVQQKExRTeW1iaWFuIFNvZnR3
+YXJlIEx0ZDEqMCgGCSqGSIb3DQEJARYbamFzb24uc2lidGhvcnBlQHN5bWJpYW4u
+Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvBnN904rHGZ8d8YEnM4ZV
+Q+jcI3bBGIakkoA7fQRmMGJ5vgZUmMjn5PlFhC/3os57oIr9qGQLaZ15W6oDU0z9
+pMBThiIjmmJMdFnsD/V/W19Q0p9HrRPLGZH6YfbL8gW+ila14vpE8yQxYz2fJphA
+kNP8kH6SvyDua2k7b8PBAQIDAQABo0UwQzAdBgNVHQ4EFgQUiQZfK0vk6S0JbcMo
+x7JrmXAFWVowEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJ
+KoZIhvcNAQEEBQADgYEAh4NcCnX2kP5mHeAmFWn4y4mVynNZynnWEnlDrRFvPmyk
+hldC0fOIvxy/jcjmwvSIThGQRcLWVtmnkiiZ6p7zgcXq99WVCZkdjsy2zkV7XAd6
+VKtVwaj76gO0nMg1higq0Mtm8cugusccGw5mqzyaNgfK1HTuSBOgC7OTfXqTZrI=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootExpiredCARSA/cakey.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQCvBnN904rHGZ8d8YEnM4ZVQ+jcI3bBGIakkoA7fQRmMGJ5vgZU
+mMjn5PlFhC/3os57oIr9qGQLaZ15W6oDU0z9pMBThiIjmmJMdFnsD/V/W19Q0p9H
+rRPLGZH6YfbL8gW+ila14vpE8yQxYz2fJphAkNP8kH6SvyDua2k7b8PBAQIDAQAB
+AoGAeC+64N2Bv6Slcf9jy9KC3Uwru/cSVhiMZLhBHBiGC9IP3T+Sw0bDNxIx5f2W
+nrsKhTRCHVsjj/6vZyV9wpjSFXvtRMOmD8rvb0NNdyD7sU8MwZ0lwZhOtXzjUXCl
+tzg4rSUAOay1/nKeDcJjYf+b4atFHRT5foGlvhO98N7X+x0CQQDW27Sqlg7bOEUd
+R17Y5D+KKI1UL6VJHQNHU2ColjRH/mezy5a5bvQ2J7yiWKjTdShmETx/w3OSGUyE
+gicd4JPTAkEA0IokD2p/z2jFlRtyLNFU3zObwpxaadUyXo1/jS6xjwJDUpc2Lx15
+nMTvH0hzuOkwgd7Atp2xQBW8Xir333PXWwJBAJkDlPHbti7XLxl/54NNYhbxdF0d
+JXghSmF0dqT5e7g97Pq1pdzfsNoUiJmRzIHzsNantc9Dkb3deInx6wuzEXMCQQCn
+Y8rwKN8wn/vA5Qfvm5ORmb5UJuaX/s5wgQm6TJmvnfRmDgQrK3CbeqQqKyDgcyVB
+iYiMzOUi+I970uemEDjzAkA8bw9S8BxiUnz22rD2wUkFEN5kfMoBg67NTQGnFwkW
+bAmqJ1n3lHmLQcND121DWD/rQH7f6LSBpPQKZi/4ES0i
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootExpiredCARSA/careq.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBxDCCAS0CAQAwgYMxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xGDAW
+BgNVBAMTD0phc29uIFNpYnRob3JwZTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxKjAoBgkqhkiG9w0BCQEWG2phc29uLnNpYnRob3JwZUBzeW1iaWFuLmNv
+bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArwZzfdOKxxmfHfGBJzOGVUPo
+3CN2wRiGpJKAO30EZjBieb4GVJjI5+T5RYQv96LOe6CK/ahkC2mdeVuqA1NM/aTA
+U4YiI5piTHRZ7A/1f1tfUNKfR60TyxmR+mH2y/IFvopWteL6RPMkMWM9nyaYQJDT
+/JB+kr8g7mtpO2/DwQECAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4GBAE0E8PHn09GJ
+XXLHOiCtV3oLqwoGwNf3K9KkPtwMeWBjsSYUt8oswj0VNr0wS4RtjLy2j9ZQjcmA
+jV4971YxjZA3x3c8YD5lMivzTcoT4S7x6lHJ2G12aT9RhvHUc3aDf480yZ4T0ucu
+5swBwJvlM60rD5SIekhy+Et1yZCOt/NW
+-----END CERTIFICATE REQUEST-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootTCBCARSA/cacert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICpzCCAhCgAwIBAgIJAOQTyZwbHgqhMA0GCSqGSIb3DQEBBAUAMHIxCzAJBgNV
+BAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xFDASBgNVBAMTC0pvaGFuIEdyb3RoMRQw
+EgYDVQQKEwtTeW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhA
+c3ltYmlhbi5jb20wHhcNMDUwNjE2MTIyNzQ0WhcNMTUwNjE0MTIyNzQ0WjByMQsw
+CQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMRQwEgYDVQQDEwtKb2hhbiBHcm90
+aDEUMBIGA1UEChMLU3ltYmlhbiBMdGQxJjAkBgkqhkiG9w0BCQEWF2pvaGFuLmdy
+b3RoQHN5bWJpYW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC88QPG
+x2QhQjRbKWrvRCWhcXnrrAEJAyuUJF1WwlV4M7yPwC1Zv4GlVrnLk7V275QFgn1p
+CXYXppBnEeM9Y6+snOF9vOgDQCiOEhX7Zkwy6SAPDe59gvkLtdbMZkwqwCY5d1/W
+sWTmUllwn2TKxtmVebFLP78z+URQimFCxOs7bwIDAQABo0UwQzAdBgNVHQ4EFgQU
+x/HLBjvfMqybBQi8P6XjulbmC3MwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8B
+Af8EBAMCAgQwDQYJKoZIhvcNAQEEBQADgYEAQ/3fqhVHVoC5jaq04q+Tl25HkIns
+lTPSlczTcFAiVWCWnPlSDxr5bJ17pQWy0Kwb8YvXqxxxUtWyDdHI3Fqh2nDq77Xt
+VDvOIVvOK9KXo2QevVwN0hdQA1TKeejMpUu/lj7ajIEaLcIx9UIoNhVU2monuy2P
+f1Y2Nr0Wec9Q29I=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootTCBCARSA/cakey.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXgIBAAKBgQC88QPGx2QhQjRbKWrvRCWhcXnrrAEJAyuUJF1WwlV4M7yPwC1Z
+v4GlVrnLk7V275QFgn1pCXYXppBnEeM9Y6+snOF9vOgDQCiOEhX7Zkwy6SAPDe59
+gvkLtdbMZkwqwCY5d1/WsWTmUllwn2TKxtmVebFLP78z+URQimFCxOs7bwIDAQAB
+AoGBAIScbNghrmehffnV8hYJMJhFexssWHWo4fdSJqj0MOTy+w+yBKKPRUF0w2bd
+P2pA8RWE5tzIJTioUYXmCiZWRz+cLtTfmQhf45eBKPOZa9UnYzHM0Ws1H/sonO7w
+HriGC7Zbxm3qcaJlIg3oRpgRBooU/xIAXZakDNK877xTUldhAkEA7PeYmTeyVzi9
+PGkqZFoW+NJIFViXA4Uo/UFJbQwTU63QGkSy1hyA+g12GthPsJTIer5Sm8DUAaDn
+dJe6pwineQJBAMwd7/enxIWJsWWSsvaStsYr3afhLbuTRfMqYQeT51sr7cTRzNdg
+22JP5uoVC00hMqsVFPupvatfS8dbLDmheCcCQB09pEfr1obqynck5wVBFKqZkCmK
+KABYMymlH8FkBxKBVTeYmJTRKZ0xggxn+tVoVqDG0XzEu6SDzWvWuUKZT8kCQQCq
+h6RxUs+kBUqZIruztxVOcV2JIV7U5JC/PDu+WfojOIs4MVOi6T/AXiL8lEJR2Rd8
+yWszajeVElO8JVbIezdnAkEA6K1N61pxd7mwAvsS/aRlP7XikHzb/7wdPIZXWu1z
+4dxdnOT3GO1a2q7hAcMRIRydBLPLFOWaoGoQSbrLfLbPAQ==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/SymbianTestRootTCBCARSA/careq.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBsjCCARsCAQAwcjELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEUMBIG
+A1UEAxMLSm9oYW4gR3JvdGgxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZI
+hvcNAQkBFhdqb2hhbi5ncm90aEBzeW1iaWFuLmNvbTCBnzANBgkqhkiG9w0BAQEF
+AAOBjQAwgYkCgYEAvPEDxsdkIUI0Wylq70QloXF566wBCQMrlCRdVsJVeDO8j8At
+Wb+BpVa5y5O1du+UBYJ9aQl2F6aQZxHjPWOvrJzhfbzoA0AojhIV+2ZMMukgDw3u
+fYL5C7XWzGZMKsAmOXdf1rFk5lJZcJ9kysbZlXmxSz+/M/lEUIphQsTrO28CAwEA
+AaAAMA0GCSqGSIb3DQEBBAUAA4GBAJQDUcSWpNd9c5R5q+OV40cSwvEV8iVaw6Zw
+G9nZoY/CECCa/+I5izrfuqyV09kyIkEDb/eo2CM/U8EAIs+nPZYC3zxKsbsX8ere
+pKdV4PeWeznDmm90GzpYAozpJtrAkKCs1IkTHx/VAqYVenFGEzMCqBvF7Du/Ffsk
+s1xVnjjb
+-----END CERTIFICATE REQUEST-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/alternativesigningoid_eku.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICQDCCAamgAwIBAgIJANIXk6buRofcMA0GCSqGSIb3DQEBBAUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYxMTA4MTY0MDE2WhcNMzQwMzI0MTY0MDE2WjB4MQswCQYDVQQGEwJJTjESMBAG
+A1UEBxMJQmFuZ2Fsb3JlMRQwEgYDVQQDEwt3d3cuZWt1LmNvbTEUMBIGA1UEChML
+U3ltYmlhbiBMdGQxKTAnBgkqhkiG9w0BCQEWGlR1c2hhci5HYW5ndWxpQFN5bWJp
+YW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWFcBXe/It6qp9Ho7D
+wbdUA1IDF4/ys5oPtitJqXDdbYXPTnGTxHnQVQFoJZmz19Dl3R0i8P+x/FASUKgT
+F7HTWeWnV3WFElDR99SVHEMgquvKBiZrerfDaecaIjE3Mx34B88G9sUnY9bNcRyG
+vPU1HOZ2Iv7llD/HDJ6CXAm05wIDAQABoxcwFTATBgNVHSUEDDAKBggrBgEFBQcD
+HjANBgkqhkiG9w0BAQQFAAOBgQBvrAOLVglqU9U/2Y/qEf347T32f82Lo+RVGOJq
+Z3IZj3YokN8FJSb2qW+HvlYAdyXKhcOSqod5DZjnvxagfsyfmvXQIT60Oqsn8axi
+g+5oSyx9fj9Cm9RNOvft3DGpo7CLL1gYE8EMlxOxjyVADzZcVYpCPT2b1Y91weDO
+DTtZuA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/certificatereq.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBuDCCASECAQAweDELMAkGA1UEBhMCSU4xEjAQBgNVBAcTCUJhbmdhbG9yZTEU
+MBIGA1UEAxMLd3d3LmVrdS5jb20xFDASBgNVBAoTC1N5bWJpYW4gTHRkMSkwJwYJ
+KoZIhvcNAQkBFhpUdXNoYXIuR2FuZ3VsaUBTeW1iaWFuLmNvbTCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEA1hXAV3vyLeqqfR6Ow8G3VANSAxeP8rOaD7YrSalw
+3W2Fz05xk8R50FUBaCWZs9fQ5d0dIvD/sfxQElCoExex01nlp1d1hRJQ0ffUlRxD
+IKrrygYma3q3w2nnGiIxNzMd+AfPBvbFJ2PWzXEchrz1NRzmdiL+5ZQ/xwyeglwJ
+tOcCAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4GBAJD7bedYkIK8U8P++8g/XNw/h0gX
+ta6dWxw85LBi/JAL6y9xYPB+9lkdTWve+KUBNbMHjJbXKRiy07uEEzLHwf/tzk9S
+ALhvD+jEfnjejKMd8tHB7DKf6RCikwYyB0pN9hErVKeguQxtB1+rCA5IU3/VjXIS
+9IQAWJ1vXXWJS7J6
+-----END CERTIFICATE REQUEST-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/ekuprivatekey.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQDWFcBXe/It6qp9Ho7DwbdUA1IDF4/ys5oPtitJqXDdbYXPTnGT
+xHnQVQFoJZmz19Dl3R0i8P+x/FASUKgTF7HTWeWnV3WFElDR99SVHEMgquvKBiZr
+erfDaecaIjE3Mx34B88G9sUnY9bNcRyGvPU1HOZ2Iv7llD/HDJ6CXAm05wIDAQAB
+AoGAHSQ+12nG0JtF89wqANmos+XzzvnxHU93ZDYe9Fr9Qxb6hPqfmUbAcixwEZY0
+svdotzF/GteFZtv6plOWXWr3SJbU1e9oR4MVF4NvrGxTZczq6Fub0le3iCn0ByLJ
+UG1bwkJ1X5GLW8553AFjwDwQ0GB9v0usyZjyYX0RidZAKxkCQQD/dDbiOpXW/eNJ
+B+fJt1q8AagwEJoxvPtfLoLxwJCDv5Ggs2aRe94uRCAuPbckZuAaMhpecJzXq6rq
+xznxT8DjAkEA1ormToqZC9fHf0Xk9vPSjPQjqHPxYX1pGblG2EWhEegYknMtpDDT
+nc7Ay9hOwTBID0x0hUcqsv6eQdYqm4KPLQJBALfnpX92p9rwSsmP3GnXC4ZgNwHr
+Yea+48UhSfnbJO8EYkXsAcJpB4oNV5GSsp+NRHb3bQ5iSjfmCZUeOnOkc/sCQEgg
+oHcNT5DUtYRLakPACyxKM+bBPAiLkhcM3A1/szwC7KfnwxNtOufWB6lAipGWetNx
+38ai+277/RajOuXXSe0CQCXIhVBqD2SQC0Gn7Rqr0woZmqDJOe1iFJAl4ioq+GZx
+PfiofJy/ppuEwij1VTNUtlkA0SOdXq8BJUKvhla7UQY=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/no_eku.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICIjCCAYsCCQC0oCBy3klHxDANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRT
+eW1iaWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA2MTEx
+MDE0MDIzOVoXDTM0MDMyNjE0MDIzOVoweDELMAkGA1UEBhMCSU4xEjAQBgNVBAcT
+CUJhbmdhbG9yZTEUMBIGA1UEAxMLd3d3LmVrdS5jb20xFDASBgNVBAoTC1N5bWJp
+YW4gTHRkMSkwJwYJKoZIhvcNAQkBFhpUdXNoYXIuR2FuZ3VsaUBTeW1iaWFuLmNv
+bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1hXAV3vyLeqqfR6Ow8G3VANS
+AxeP8rOaD7YrSalw3W2Fz05xk8R50FUBaCWZs9fQ5d0dIvD/sfxQElCoExex01nl
+p1d1hRJQ0ffUlRxDIKrrygYma3q3w2nnGiIxNzMd+AfPBvbFJ2PWzXEchrz1NRzm
+diL+5ZQ/xwyeglwJtOcCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBUcv8OHgqOlK3W
+JMb9nTiJIoCniliA/89sRCQaWamn5q/QLXcmVKeYGh9oAljs7HyUDbqVSqZMN9xh
+Y/6wb7+FBR5HRZjRTaTO8C8GH9mITnyaUz/oV0AbIAEdXcxma8LggYQs46+x9mU8
+FvrKEuWnHuwQWFBUM+SuCxw0Le4++Q==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/serverauth_eku.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICQDCCAamgAwIBAgIJAJxFMDhZx9ooMA0GCSqGSIb3DQEBBAUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYxMTEwMTQwMDI1WhcNMzQwMzI2MTQwMDI1WjB4MQswCQYDVQQGEwJJTjESMBAG
+A1UEBxMJQmFuZ2Fsb3JlMRQwEgYDVQQDEwt3d3cuZWt1LmNvbTEUMBIGA1UEChML
+U3ltYmlhbiBMdGQxKTAnBgkqhkiG9w0BCQEWGlR1c2hhci5HYW5ndWxpQFN5bWJp
+YW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWFcBXe/It6qp9Ho7D
+wbdUA1IDF4/ys5oPtitJqXDdbYXPTnGTxHnQVQFoJZmz19Dl3R0i8P+x/FASUKgT
+F7HTWeWnV3WFElDR99SVHEMgquvKBiZrerfDaecaIjE3Mx34B88G9sUnY9bNcRyG
+vPU1HOZ2Iv7llD/HDJ6CXAm05wIDAQABoxcwFTATBgNVHSUEDDAKBggrBgEFBQcD
+ATANBgkqhkiG9w0BAQQFAAOBgQAplqLMFDj1FafIReRPL1NRvXtUnF9V9BuvqwQF
+NJynscJHFD9hUeH6FP9jPNpyGhHazkMfWWZrCNCDZjByDoLUrPsFWZiPMBI2mDgD
+WERzATeLAjqHi5sX+IZVGjsBez068QINOL9sc+6M+nYTSM2laZSSANXB3+iM2s49
+fqAs/Q==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/extendedkeyusage/standardsigningoid_eku.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICQDCCAamgAwIBAgIJAKa0UzYnXvL/MA0GCSqGSIb3DQEBBAUAMDMxHTAbBgNV
+BAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMRIwEAYDVQQDEwlSb290NS1SU0EwHhcN
+MDYxMTEwMTQwMjAzWhcNMzQwMzI2MTQwMjAzWjB4MQswCQYDVQQGEwJJTjESMBAG
+A1UEBxMJQmFuZ2Fsb3JlMRQwEgYDVQQDEwt3d3cuZWt1LmNvbTEUMBIGA1UEChML
+U3ltYmlhbiBMdGQxKTAnBgkqhkiG9w0BCQEWGlR1c2hhci5HYW5ndWxpQFN5bWJp
+YW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWFcBXe/It6qp9Ho7D
+wbdUA1IDF4/ys5oPtitJqXDdbYXPTnGTxHnQVQFoJZmz19Dl3R0i8P+x/FASUKgT
+F7HTWeWnV3WFElDR99SVHEMgquvKBiZrerfDaecaIjE3Mx34B88G9sUnY9bNcRyG
+vPU1HOZ2Iv7llD/HDJ6CXAm05wIDAQABoxcwFTATBgNVHSUEDDAKBggrBgEFBQcD
+AzANBgkqhkiG9w0BAQQFAAOBgQA101hTQ2dBadKSrQo+ZdZllM5vjbBboBC73fli
+TPPCtkrGdx/nB3WezS9mjw2bzQ7SMXGz1nPkWMuwatiUJY6nstu/9OkTz8dHdfgl
+BfKhhUxueDAwpnuEOBUKaQf73HDDQ2qhEZKRXzdhyl2GZef2b4umCf4xJDTMi+EO
+yyVNXw==
+-----END CERTIFICATE-----
Binary file installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/sucert/sucert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/sucert/sucert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDVDCCAr2gAwIBAgIJAPWY1VSGSv5IMA0GCSqGSIb3DQEBBAUAMHAxCzAJBgNV
+BAYTAklOMQswCQYDVQQIEwJLQTELMAkGA1UEBxMCQkExDDAKBgNVBAoTA1NZTTEM
+MAoGA1UECxMDU0VDMQ8wDQYDVQQDEwZTVUNFUlQxGjAYBgkqhkiG9w0BCQEWC3N5
+bUBzeW0uY29tMB4XDTA4MDExMDA4NDAzMFoXDTIzMDEwNjA4NDAzMFowcDELMAkG
+A1UEBhMCSU4xCzAJBgNVBAgTAktBMQswCQYDVQQHEwJCQTEMMAoGA1UEChMDU1lN
+MQwwCgYDVQQLEwNTRUMxDzANBgNVBAMTBlNVQ0VSVDEaMBgGCSqGSIb3DQEJARYL
+c3ltQHN5bS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO2ZgAHDBq4t
+I0loXtpX1ludH+x8VLlCgeH2lAD7eWrWR8wuKWVchaCZWBeUm9z8wHgLVnRaayuk
+i8XTXXfGGfj3DpN1lPzpAcPC8uCA+EN4VjGGvZNRdkO/L3I5XTpVbrESpQS8IRel
+6NRE/DDgYDvc6SO2uobUYO+vX/ydFa4RAgMBAAGjgfUwgfIwDAYDVR0TBAUwAwEB
+/zAdBgNVHQ4EFgQUVF6Xb/Cc2Rre1AJzW7/bxsC6uCswgaIGA1UdIwSBmjCBl4AU
+VF6Xb/Cc2Rre1AJzW7/bxsC6uCuhdKRyMHAxCzAJBgNVBAYTAklOMQswCQYDVQQI
+EwJLQTELMAkGA1UEBxMCQkExDDAKBgNVBAoTA1NZTTEMMAoGA1UECxMDU0VDMQ8w
+DQYDVQQDEwZTVUNFUlQxGjAYBgkqhkiG9w0BCQEWC3N5bUBzeW0uY29tggkA9ZjV
+VIZK/kgwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIBBjANBgkqhkiG9w0B
+AQQFAAOBgQAcF3d/fTshZHNEerqY7l+fb+auEI+VYQN4FEyZIPrGTxGWYT5RBhkJ
+muSlJP7R5jDZJS5pnWtF8Mj7tFNdDwKYOplUEWOFrK+Tl2hG7SsSga1nxVQjCCPq
+LVaMTLDox9y5tHU2XuzDKrreOr3BOuhIwNWkp8PF3+tqMxKye6A/Vg==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/sucert/sucertkey.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXgIBAAKBgQDtmYABwwauLSNJaF7aV9ZbnR/sfFS5QoHh9pQA+3lq1kfMLill
+XIWgmVgXlJvc/MB4C1Z0WmsrpIvF0113xhn49w6TdZT86QHDwvLggPhDeFYxhr2T
+UXZDvy9yOV06VW6xEqUEvCEXpejURPww4GA73OkjtrqG1GDvr1/8nRWuEQIDAQAB
+AoGBAIWTQm+7IMpS/f+K+ahusUgX8ZaV31u3lCVg5pwWxI/Xn82eNg+SEF3VV70K
+AwYd4maamSQYoR+MBjhVN7raWEaV7I7PjzDuPSfrJCmdzjWIHfVL6NdhnI5L5Fub
+NIwZzbd+7EWWExVAP1EGWmeQJMPkFMLS9NKEZeUY8KwCKCNBAkEA+Qk0II37Gy/O
+9aW6vAP0L6IaPhfMRAFwK5Z8VyclVuStP+0TS1SO25tltb9PLPgT6K4HpDw0ntKV
+pm75c6tyJQJBAPQ+bQ+dXO1EZGp/R9Roi0XJ7SMHazU6dkz1GOfaJedgAspTopqR
+JUvliIjEG74Mmy1lch7ydQ2PLNL0l05Lin0CQQCYQ15RwT2Uw8hgPTJNHoXAUfaF
+nHtR4Sc6H0pq5w5XcH3VJhiz6EFoWDz5wLyiHBPgIfeeHQl3Sf4hwpxWcq7ZAkEA
+htbz9NvmkqLgYR8Vs8Fnqka5YU5WNJOq/f+OGWoI5PzPbY3Qxk59bbIxt3e07S4e
+eWh5IXavgqXZlDkuUy5HLQJAfzaXfg+jA3ywW0yAo7IXu438zDo8yy8Gxupj5HUR
+Oo8E/ifXUc9FPT97t9cY1veuYEfx8rWTrsF5Pddr4M67/w==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestallcapabilitiesca/cakey.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDLWzf2YjOQzJuBFYNuE78MTv2Td6y2aSCkPNOCywQajmShZp01
+PuNXcJa/xTscVzuTLaJqEEAQdJbJcsvmCEJG9LahlHeFpfPmdhl93UqhSrP/nR0/
+d1CpwaGCdhoyuRTXOlnAfC3sWQWQLDNwwUYycdyj0a/KB5pbIsdngaWZgQIDAQAB
+AoGBAJJ4bWKFcObGuOrM+BF9H4paCsMA2+G27s/dD+uRFq+aCFlIc8s6NL1yVuJh
+ySWsnzhvEiCa+8necA1BJiPVpwXymHjlpxHOxOY+/Nw2TuhDbKXTkH74kTJujH1P
+l+s2D2y5QFLGPhMZS3wZaxqrM9a32L6UTG6cKhpU3QEREW8BAkEA+WdefX+PPAIO
+4GDQJJcEnSZCWjhDLvZa4qarKWKc8bZorDr5GnQjcKy7Q0ymhLOqz1G6j05N5Wn7
+edPd808QyQJBANC8E8mL01N/1um4ypl35hMdn2kVWOgDTXZcKCvHxkujkwR+YU1J
+RvgwzOZuzhtu9uaCi9JR2aCiUFmqrndlFvkCQQChwSomiPnT+J2/Zur4ID4s0iiM
+rRrdtYfioig2si+KET04HxN61cI6jLzzfB4vyPtKdP5jfWzGEwO30vKLoEcJAkAZ
+WJ02fgodO4rHOq8vT4XakGBJDFSNZ8lCNBKUrl9/088IXqhGED3T6WkYGiBg6GqG
+txdvZIz+mncTTEx/JwFRAkAneOBAM/ptTvQB5u0G3S8NEKsVvxgTalLQfNKs5Z/L
+AOLAfb/d6op0zJdqrf+1FVPOKqTgDbHNiRpONIbvqn66
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestallcapabilitiesca/careq.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIByzCCATQCAQAwgYoxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xKDAm
+BgNVBAMTH1Jvb3QgY2VydCB3aXRoIGFsbCBjYXBhYmlsaXRpZXMxFDASBgNVBAoT
+C1N5bWJpYW4gTHRkMSowKAYJKoZIhvcNAQkBFhtjaHJpc3RpYW4uY3Jvc2FAc3lt
+Ymlhbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMtbN/ZiM5DMm4EV
+g24TvwxO/ZN3rLZpIKQ804LLBBqOZKFmnTU+41dwlr/FOxxXO5MtomoQQBB0lsly
+y+YIQkb0tqGUd4Wl8+Z2GX3dSqFKs/+dHT93UKnBoYJ2GjK5FNc6WcB8LexZBZAs
+M3DBRjJx3KPRr8oHmlsix2eBpZmBAgMBAAGgADANBgkqhkiG9w0BAQUFAAOBgQA7
+xIZyaaK+RFifvievrhtLByMcWrYoOebiYgXhFp6cam2aGs2bwFkg8UNbLO7dinHS
+fy8Yibs8Vwy6CGRKGja4+uv9LDzQWUrO98ZlOD+Z/gXwbijahNA6tELYQtfMjqYW
+Fg7QB3TZQRSh0TccnJRuUwrahLRysXoO8YeRxPkHtg==
+-----END CERTIFICATE REQUEST-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestallcapabilitiesca/symbiantestallcapabilitiesca.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC2TCCAkKgAwIBAgIJANL91xYnWbu9MA0GCSqGSIb3DQEBBQUAMIGKMQswCQYD
+VQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMSgwJgYDVQQDEx9Sb290IGNlcnQgd2l0
+aCBhbGwgY2FwYWJpbGl0aWVzMRQwEgYDVQQKEwtTeW1iaWFuIEx0ZDEqMCgGCSqG
+SIb3DQEJARYbY2hyaXN0aWFuLmNyb3NhQHN5bWJpYW4uY29tMB4XDTA3MDcyMzE0
+MzMxMVoXDTE3MDcyMDE0MzMxMVowgYoxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZM
+b25kb24xKDAmBgNVBAMTH1Jvb3QgY2VydCB3aXRoIGFsbCBjYXBhYmlsaXRpZXMx
+FDASBgNVBAoTC1N5bWJpYW4gTHRkMSowKAYJKoZIhvcNAQkBFhtjaHJpc3RpYW4u
+Y3Jvc2FAc3ltYmlhbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMtb
+N/ZiM5DMm4EVg24TvwxO/ZN3rLZpIKQ804LLBBqOZKFmnTU+41dwlr/FOxxXO5Mt
+omoQQBB0lslyy+YIQkb0tqGUd4Wl8+Z2GX3dSqFKs/+dHT93UKnBoYJ2GjK5FNc6
+WcB8LexZBZAsM3DBRjJx3KPRr8oHmlsix2eBpZmBAgMBAAGjRTBDMB0GA1UdDgQW
+BBTLC1jGC4eKo2YSR9lt6h1G+um+2DASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1Ud
+DwEB/wQEAwICBDANBgkqhkiG9w0BAQUFAAOBgQCa0t9SRxzvz+bruRQuFfhA5Dz9
+udxP4gc3IvXANg0P3oBkS6KUoPDNdxze97kEPUjUtiyN0uoo/n+BD6ILWUKsSI3R
+Ed05ulO3LecKe6hyG+CwvOpcfdjnJEq34oKiffaWbmLOHJ93sGZJT0CP0gUROlj9
+v83hwyVk9lbRuriSDA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestrootcanotinstore/cacert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC1zCCAkCgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBjTELMAkGA1UEBhMCVUsx
+EjAQBgNVBAcTCUNhbWJyaWRnZTEmMCQGA1UEAxMdVGVzdCByb290IG5vdCBpbiBz
+d2ljZXJ0c3RvcmUxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMSMwIQYJ
+KoZIhvcNAQkBFhRub3QucmVhbEBzeW1iaWFuLmNvbTAeFw0wNTEyMDkxNTEyNTVa
+Fw0zMzA0MjUxNTEyNTVaMIGNMQswCQYDVQQGEwJVSzESMBAGA1UEBxMJQ2FtYnJp
+ZGdlMSYwJAYDVQQDEx1UZXN0IHJvb3Qgbm90IGluIHN3aWNlcnRzdG9yZTEdMBsG
+A1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxIzAhBgkqhkiG9w0BCQEWFG5vdC5y
+ZWFsQHN5bWJpYW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDI0qkA
+hKsNL2fBg0jVGzFmasgmt1clfTaQ8rzniARm8UH5iGv1WsRuqnUooTPQAMp8K1Kl
+u8EuTBEDEo/+qZ5B/EHrVEGKA+v0S0Z4sWjtmtQVJPur5oSWJYvFDHEflMQwoDXB
+QLBxREX+g16Z1IF5FXlbsVROCBKWuAo6GoJugQIDAQABo0UwQzAdBgNVHQ4EFgQU
+HqVcIyGInLMrO8lDZCNG1P5XAuMwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8B
+Af8EBAMCAgQwDQYJKoZIhvcNAQEEBQADgYEAERyKfJEfX9JLZ2eGUv/Aikxa+lI4
++p8IjAszV2lF3pUIgXWxqacJd9O6CA63E/UvSm6yDrpK2jM2ZaurP+Y9zRwOFfTt
+0a8jk14mvEIVVHR2d0xIl551RDvVj9lENzm6nob9A7cmAh2ZBlLaqgnFqKwOhVg3
+mLbciA5vxvCW5zk=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestrootcanotinstore/cakey.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDI0qkAhKsNL2fBg0jVGzFmasgmt1clfTaQ8rzniARm8UH5iGv1
+WsRuqnUooTPQAMp8K1Klu8EuTBEDEo/+qZ5B/EHrVEGKA+v0S0Z4sWjtmtQVJPur
+5oSWJYvFDHEflMQwoDXBQLBxREX+g16Z1IF5FXlbsVROCBKWuAo6GoJugQIDAQAB
+AoGBAIeofo+iDyZ+AnnfZKDImMtVkNVOfmkNt4Gc5+0Dne2oRef5tuvsH8ueDDyh
+AK4fCqlsXo0kUvAiZE+OB4WBMSyxh3juvcwpdzr0zGec4QpdBdomouIGXWsyql06
+od/t0/askIv23jWz2dFeR2h/9yC4aIvs/FKz02xWbFjNKcJBAkEA5uchlyTNJv7A
+qS1BfIdYvAX/TV19/KjPd9EoPKI3nMX3jIqHt5Z7omv0ta36iCP/x4qWfKDZlICl
+FUgyGyOqeQJBAN6mjek6oN45smMLFiJp5fnrEQi8HKO5l5LHaPQmq7FmbXypYIZm
+YmbmtmC5e4CGqjXUVJxFZyOdI1OFcLGY4kkCQCnbLBOh8C5pb7M7KOvR/RvYWndD
+w1rRnwoxOAIFxd79Y+puEjwNY0wGFc35Q7j6DZu2W6Er50UsLMC23Z5d0MECQQC3
+VjRywWkntCDU95MRYVwSz+Jl6+g1VSSfo34j1Rf56xrq1Nn7saEDlKTGvtUYf0r3
+KlFFoMyOAd3N74pdY0OpAkAJfkwGA2XwPkq1CO5GdKkxyEiExY/o4YIs4cSWBhGB
+YRKn7QMkJjtPiblMAZRxFYQ3bmqdBuiqfIjLPlOCNyud
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestrootcanotinstore/careq.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBzjCCATcCAQAwgY0xCzAJBgNVBAYTAlVLMRIwEAYDVQQHEwlDYW1icmlkZ2Ux
+JjAkBgNVBAMTHVRlc3Qgcm9vdCBub3QgaW4gc3dpY2VydHN0b3JlMR0wGwYDVQQK
+ExRTeW1iaWFuIFNvZnR3YXJlIEx0ZDEjMCEGCSqGSIb3DQEJARYUbm90LnJlYWxA
+c3ltYmlhbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMjSqQCEqw0v
+Z8GDSNUbMWZqyCa3VyV9NpDyvOeIBGbxQfmIa/VaxG6qdSihM9AAynwrUqW7wS5M
+EQMSj/6pnkH8QetUQYoD6/RLRnixaO2a1BUk+6vmhJYli8UMcR+UxDCgNcFAsHFE
+Rf6DXpnUgXkVeVuxVE4IEpa4Cjoagm6BAgMBAAGgADANBgkqhkiG9w0BAQQFAAOB
+gQANkbvWhda5zNzLZjHG3bLky3lfNcdyg21zcNiTlePE/0yC8vU/YoYYDOZ34eKP
++FjyxaZqZnJ21FVonkczmg0PufdKId6w4Pz1tlOo09u28jLXALzqFNoYn3yHrvGD
+sQaWQaSHmi618dJXvcvrYUiKCfrn+dGsKD0cPJeE8mWqBw==
+-----END CERTIFICATE REQUEST-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestrootcanotinstore/cert_chain_rsa_len1/chain_rsa_len1.cert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIICmzCCAgSgAwIBAgIBBDANBgkqhkiG9w0BAQQFADCBjTELMAkGA1UEBhMCVUsx
+EjAQBgNVBAcTCUNhbWJyaWRnZTEmMCQGA1UEAxMdVGVzdCByb290IG5vdCBpbiBz
+d2ljZXJ0c3RvcmUxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMSMwIQYJ
+KoZIhvcNAQkBFhRub3QucmVhbEBzeW1iaWFuLmNvbTAeFw0wNTEyMDkxNTMxMzFa
+Fw0zMzA0MjQxNTMxMzFaMIGVMQswCQYDVQQGEwJVSzESMBAGA1UEBxMJQ2FtYnJp
+ZGdlMS0wKwYDVQQDEyRjaGFpbjEgZm9yIHRlc3Rpbmcgcm9vdCBub3QgaW4gc3Rv
+cmUxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMSQwIgYJKoZIhvcNAQkB
+FhVsZXNzLnJlYWxAc3ltYmlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+nFzE917T3ygNpx0WVQ8o93I9xWpG7v9UaRd7+yfRlsQRQSbnmjzQeRdUKhoY67M7
+bRIGlM5ZVRHOfb4cT2mKCQIDAQABo0UwQzAdBgNVHQ4EFgQUtPI5rfnOWmy5h3wq
+7i9zrUg2sdUwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJ
+KoZIhvcNAQEEBQADgYEAORgndhsUAr7+5qm3eR6gxUZ1Mtflw9m+sqf5j1+45mw3
+gSrlG5f6+SMqphrBBDzyAi0k2eJlY1OM4oO0pXtbrSOvzODTIECGnnzXrIDGRsup
+yQrAYENOivul4Kgwwqo7n0Bud92ceOs4nR6FKFhPH9xtf5zlOLy419NoZlQjt00=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC1zCCAkCgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBjTELMAkGA1UEBhMCVUsx
+EjAQBgNVBAcTCUNhbWJyaWRnZTEmMCQGA1UEAxMdVGVzdCByb290IG5vdCBpbiBz
+d2ljZXJ0c3RvcmUxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMSMwIQYJ
+KoZIhvcNAQkBFhRub3QucmVhbEBzeW1iaWFuLmNvbTAeFw0wNTEyMDkxNTEyNTVa
+Fw0zMzA0MjUxNTEyNTVaMIGNMQswCQYDVQQGEwJVSzESMBAGA1UEBxMJQ2FtYnJp
+ZGdlMSYwJAYDVQQDEx1UZXN0IHJvb3Qgbm90IGluIHN3aWNlcnRzdG9yZTEdMBsG
+A1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxIzAhBgkqhkiG9w0BCQEWFG5vdC5y
+ZWFsQHN5bWJpYW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDI0qkA
+hKsNL2fBg0jVGzFmasgmt1clfTaQ8rzniARm8UH5iGv1WsRuqnUooTPQAMp8K1Kl
+u8EuTBEDEo/+qZ5B/EHrVEGKA+v0S0Z4sWjtmtQVJPur5oSWJYvFDHEflMQwoDXB
+QLBxREX+g16Z1IF5FXlbsVROCBKWuAo6GoJugQIDAQABo0UwQzAdBgNVHQ4EFgQU
+HqVcIyGInLMrO8lDZCNG1P5XAuMwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8B
+Af8EBAMCAgQwDQYJKoZIhvcNAQEEBQADgYEAERyKfJEfX9JLZ2eGUv/Aikxa+lI4
++p8IjAszV2lF3pUIgXWxqacJd9O6CA63E/UvSm6yDrpK2jM2ZaurP+Y9zRwOFfTt
+0a8jk14mvEIVVHR2d0xIl551RDvVj9lENzm6nob9A7cmAh2ZBlLaqgnFqKwOhVg3
+mLbciA5vxvCW5zk=
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/tsisfile/data/signedsis/symbiantestrootcanotinstore/cert_chain_rsa_len1/first.rsa.cer	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIICmzCCAgSgAwIBAgIBBDANBgkqhkiG9w0BAQQFADCBjTELMAkGA1UEBhMCVUsx
+EjAQBgNVBAcTCUNhbWJyaWRnZTEmMCQGA1UEAxMdVGVzdCByb290IG5vdCBpbiBz
+d2ljZXJ0c3RvcmUxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMSMwIQYJ
+KoZIhvcNAQkBFhRub3QucmVhbEBzeW1iaWFuLmNvbTAeFw0wNTEyMDkxNTMxMzFa
+Fw0zMzA0MjQxNTMxMzFaMIGVMQswCQYDVQQGEwJVSzESMBAGA1UEBxMJQ2FtYnJp
+ZGdlMS0wKwYDVQQDEyRjaGFpbjEgZm9yIHRlc3Rpbmcgcm9vdCBub3QgaW4gc3Rv
+cmUxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMSQwIgYJKoZIhvcNAQkB
+FhVsZXNzLnJlYWxAc3ltYmlhbi5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+nFzE917T3ygNpx0WVQ8o93I9xWpG7v9UaRd7+yfRlsQRQSbnmjzQeRdUKhoY67M7
+bRIGlM5ZVRHOfb4cT2mKCQIDAQABo0UwQzAdBgNVHQ4EFgQUtPI5rfnOWmy5h3wq
+7i9zrUg2sdUwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAgQwDQYJ
+KoZIhvcNAQEEBQADgYEAORgndhsUAr7+5qm3eR6gxUZ1Mtflw9m+sqf5j1+45mw3
+gSrlG5f6+SMqphrBBDzyAi0k2eJlY1OM4oO0pXtbrSOvzODTIECGnnzXrIDGRsup
+yQrAYENOivul4Kgwwqo7n0Bud92ceOs4nR6FKFhPH9xtf5zlOLy419NoZlQjt00=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC1zCCAkCgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBjTELMAkGA1UEBhMCVUsx
+EjAQBgNVBAcTCUNhbWJyaWRnZTEmMCQGA1UEAxMdVGVzdCByb290IG5vdCBpbiBz
+d2ljZXJ0c3RvcmUxHTAbBgNVBAoTFFN5bWJpYW4gU29mdHdhcmUgTHRkMSMwIQYJ
+KoZIhvcNAQkBFhRub3QucmVhbEBzeW1iaWFuLmNvbTAeFw0wNTEyMDkxNTEyNTVa
+Fw0zMzA0MjUxNTEyNTVaMIGNMQswCQYDVQQGEwJVSzESMBAGA1UEBxMJQ2FtYnJp
+ZGdlMSYwJAYDVQQDEx1UZXN0IHJvb3Qgbm90IGluIHN3aWNlcnRzdG9yZTEdMBsG
+A1UEChMUU3ltYmlhbiBTb2Z0d2FyZSBMdGQxIzAhBgkqhkiG9w0BCQEWFG5vdC5y
+ZWFsQHN5bWJpYW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDI0qkA
+hKsNL2fBg0jVGzFmasgmt1clfTaQ8rzniARm8UH5iGv1WsRuqnUooTPQAMp8K1Kl
+u8EuTBEDEo/+qZ5B/EHrVEGKA+v0S0Z4sWjtmtQVJPur5oSWJYvFDHEflMQwoDXB
+QLBxREX+g16Z1IF5FXlbsVROCBKWuAo6GoJugQIDAQABo0UwQzAdBgNVHQ4EFgQU
+HqVcIyGInLMrO8lDZCNG1P5XAuMwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8B
+Af8EBAMCAgQwDQYJKoZIhvcNAQEEBQADgYEAERyKfJEfX9JLZ2eGUv/Aikxa+lI4
++p8IjAszV2lF3pUIgXWxqacJd9O6CA63E/UvSm6yDrpK2jM2ZaurP+Y9zRwOFfTt
+0a8jk14mvEIVVHR2d0xIl551RDvVj9lENzm6nob9A7cmAh2ZBlLaqgnFqKwOhVg3
+mLbciA5vxvCW5zk=
+-----END CERTIFICATE-----
Binary file installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/capabilities/cacert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/capabilities/cakey.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQDF/Y9Pz2WIOdymUkIGZHIduTaIbT+7Aej/rfe07CSbSVrqTovW
+O4tp+iqxjwPq4zz3w+CgWSwna9bRf7kMnA+THkDprUEd3GPv4L2S72Y1l7zDo3OR
+grQJU//ubBMlpCgtn5+yDYNSJ48TozENexuPYFmnaLMZSaOzpnsfn+WghwIDAQAB
+AoGAe41EnlhdEsqQ4BWa8CREdjn7Rt1uFMQXY15rorJuEZ2QJ4FGkDTuRf8AH3eQ
+yUZu6GqKxWWAQUVxc6DRmIXWzSzrbE/KiZRy+8vWqL1xAJ1GV+VkW+E+W2SIWANW
+1qI2fpCrBVo8CMtNTnclYP11UQMZSe36XqeKUP7oIzkgbLkCQQD06u2wKOB5HG0A
+xy8bucffK3hboYaEt6SKzDm6rgZV7PsFz94WsJHe1FvgO7oEX0gsUplEBc28drf+
+jhe0jAr9AkEAzvMJdUFk/7KZcrxAz1Mg3qn2Uf2juSjqGRH5vRbDshPoSRcbMnZq
+R+1w5+9Vr98VwX5GpBiWYskjfA0kWux60wJBAPOdCrgCsOVG5RW1CqKldK4Da0CZ
+tlgk4sI8yd9qYlrt0fLCBMLE9xOSX6D3R9w5emy77D/BFhe0bugBJossEXECQCeB
+r/mJbV1+29pSY9DwXqMDMTm/wOSVEfONQe6+DMfPExX46kE859cpVdeBEguL+9w/
+Xf7vjq33FeYVoC4XXO8CQEAjKeA9JYRCAntochSHKc3RIgpueTjXCMIPv5V66xIK
+h+FZIZqL+tA9cKuaxZfjg6xTBophmxNSm3e4RDtIdp0=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/capabilities/careq.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBxDCCAS0CAQAwgYMxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xGDAW
+BgNVBAMTD0phc29uIFNpYnRob3JwZTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxKjAoBgkqhkiG9w0BCQEWG0phc29uLlNpYnRob3JwZUBzeW1iaWFuLmNv
+bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLpG6gHEWU8tv1+Xj+Vb7JrD
+gceSxghPFurQ54VROC1rZ8nqtYnink2Wj0FXL/dU1uK2d7ytFvzUA+pkoqUOi+si
+AFUY0s+vYz8AwCBv9ZAEGMJFn42j9mBMq3bu3LvseRYcCmn30uHcnKJ0f+vW79cY
+7AYWD1PZdkcAVyNCUBcCAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4GBAJOjWwxAGApe
+Vv2SR/sAUK0UdDm4BXMMC8My8pE3wTfGSdX6Fk+Q8aunrTp/UOiFmHblB+gaGK4M
+qPRmsbvNXWXX7vybhS2RPrBYCKwNWN9PYPUJmznT+f9xuoinG5A+vzBegZ83SFjs
+kJt16wuygZw+4PSCTm3Fv2QMN/5UjxBk
+-----END CERTIFICATE REQUEST-----
Binary file installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/chain/cacert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/chain/cacert.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDkDCCAvmgAwIBAgIJAOhKfiKE61ruMA0GCSqGSIb3DQEBBAUAMIGFMQswCQYD
+VQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9uMScwJQYDVQQDEx5SU0EgVGVzdFJvb3RS
+U0EgQ2hhaW4gQ2VydCBPbmUxFDASBgNVBAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZI
+hvcNAQkBFhdqb2hhbi5ncm90aEBzeW1iaWFuLmNvbTAeFw0wNTA2MjEwOTIwNTJa
+Fw0xNTA2MTkwOTIwNTJaMIGFMQswCQYDVQQGEwJVSzEPMA0GA1UEBxMGTG9uZG9u
+MScwJQYDVQQDEx5SU0EgVGVzdFJvb3RSU0EgQ2hhaW4gQ2VydCBPbmUxFDASBgNV
+BAoTC1N5bWJpYW4gTHRkMSYwJAYJKoZIhvcNAQkBFhdqb2hhbi5ncm90aEBzeW1i
+aWFuLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAv+WsyWNv0YYuHcPI
+4UwzOPXynkgBAL7jM8S9PB6jT2cZNA54RKKHECPRkjXAc2eI+fcFc7ttQ2ZIXgQs
+ROxfa8pWg5cMccu2zY+jZ4d0LRxUJT/0O4uGKjZL6kafxRKjm89aWAmM7lvMdkbL
+Nzt8Z6DRlgIocS6zZCjTHrwX+KECAwEAAaOCAQQwggEAMB0GA1UdDgQWBBT7vaDB
+/w75VJNe6L3PZxY2qxS55zCBugYDVR0jBIGyMIGvgBT7vaDB/w75VJNe6L3PZxY2
+qxS556GBi6SBiDCBhTELMAkGA1UEBhMCVUsxDzANBgNVBAcTBkxvbmRvbjEnMCUG
+A1UEAxMeUlNBIFRlc3RSb290UlNBIENoYWluIENlcnQgT25lMRQwEgYDVQQKEwtT
+eW1iaWFuIEx0ZDEmMCQGCSqGSIb3DQEJARYXam9oYW4uZ3JvdGhAc3ltYmlhbi5j
+b22CCQDoSn4ihOta7jASBgNVHRMBAf8ECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIC
+BDANBgkqhkiG9w0BAQQFAAOBgQCAyRYXvuGjsebj3LbCPgl0HUl1AapwboHgSsfV
+YyF24i5Gu7LNoUkuRxtq5lB6wIPDXuTRHC7SAcNOpMj5yxT73MlLVKyzsOXVwwwb
+Xdh8ZHazS5TKIWYc7rPIhRq8xIAG99fOwAk0L94FJYY6QajU8qvHOmFjfTHP4Us7
+Qy8lGA==
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/chain/cakey.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQC/5azJY2/Rhi4dw8jhTDM49fKeSAEAvuMzxL08HqNPZxk0DnhE
+oocQI9GSNcBzZ4j59wVzu21DZkheBCxE7F9rylaDlwxxy7bNj6Nnh3QtHFQlP/Q7
+i4YqNkvqRp/FEqObz1pYCYzuW8x2Rss3O3xnoNGWAihxLrNkKNMevBf4oQIDAQAB
+AoGAF6cpqxEUoVDWsliFlC+eSLEYHKZnaT4eJy1i3dww6QKeOqpl7J/T4gtoM4to
+k1D5s0XdaCx8BUjANsZw5nX0NNA6erAJhay1SYuLEJThqJlCd/yQ8eQqnYGV3bdg
+RQ91Xz5P4uB94J9vvzJsnu5AMLpkVv1ifIKve1thX5y7qhkCQQDyUTh9SR2eSzyq
+9Z7uiZpng28ze9OjJy9xYy4sxrW9UN6nv3FWWrWsez8ma3i+bqY7V8ct+ScTtSDS
+x4/magfzAkEAyrudSm8KNAt4hzwCRtQ3N4nfuKZX5nQYnaHVGPYC+39GMlgfScSZ
+PMYyz6GOGbLVqQHYaIPoZYfdM0nk96zWGwJBAOXlzTSAhAtE0oBYnLsv7kA7YOt1
+let7J/Xp5UsyFAdTjIuWhI8rbKYCIH3xBROXozs2IpEpi7uU41lXYN14x6UCQDKG
+UWv0gnl4BmDFrteSGfTIcq4lHrD7bAsVAvPGk/WzwX3YgmuzCHGh/5XJcI2tCRym
+rhVWEnwDQTiACQVE2NMCQBauqmdE6DPnSsUruFwdr8fRCcQuWm4B3mqa3ysoXZQV
+6IIGkhzYzc0nXupoTc0XfRGCVZ7XqMwSjQdvQkUmmsA=
+-----END RSA PRIVATE KEY-----
Binary file installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/chain/intermediate/cacert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/chain/intermediate/cakey.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAOW2tCnwU6kxU4ZvQnARNreGR69vWwd8ttICH1+ieiHei7aKivyx
+Qp4axUBpBC4aKRdOk1UZp7kgwdUaIFwLtEECAwEAAQJAKArRHP5nlvaiOKzsR9y4
+TQV7OXmPxJ5YwALetSz9XSm5Y/eHmVmYNgtiU9obWmn6benmOwAr5Hqp9hWzcffO
+AQIhAPWlBIi1025lBUa+o2/rx9Kcz7d93aZwpoTrhQfMHlj9AiEA72XCs7xxJ8WN
+aymmZ1b/Z97KayX4ccLz0bDwq2SmXZUCIDBd1Y61fnP2IBvV3Yhj/GxTw/J1Lfdf
+pun1FbR7VF5hAiEA4i9jJi6FOu6MDxPrBPhNl/YHifT2J4Xql9R1j3opNYECIQDE
+1KASCjYFzWT85Kpl868gz8+KEujnbag6VtmWOmfiMg==
+-----END RSA PRIVATE KEY-----
Binary file installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/expired/cacert.der has changed
Binary file installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/mandatory/cacert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/mandatory/cakey.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDTedZXXNJFzLYNonyhN2lKHGgzPZGmBdjSPj9hrfOvYZP77eZu
+NTspOrZXftfEzoqeAewkBzVCa41Ij2uD0lvFWwfKRBr5wwjq60qKUpLx6DvLCrQ9
+IUuLNQ9f/CR1jRq4r/9UbwZfbGp8q0w1fabtDexA6TZ7rHdesAAoUqw1sQIDAQAB
+AoGBAK5Jb3k4qqOT/0Zlb8l+XWwS1V3FlE/76aH8Y0ghkQAtr0Sl4I9bl5J3LOgX
+RcSRZHSsqO1Yc3B2K05txPIzYCVaI9GejIUMR3QS53uKQwuKFhneeDSIT1hdFNiC
+z9I0+XO8/K6sIjhkRxJDQhYv7+8ggEwn/B3MzuNp+QxFKkZxAkEA+0uUdNIjWME1
+3LyDoxyMkiQZHyKNwRNsFZm49+MSzKCK/BNzxlD7YBzO+i5XbS+xnU7ShNNQpSKT
+oxocSYmu3wJBANdvaNEEwjOLN7p0tGCQGGpQUzMXMoLWpsVOE/SJeyXjpIZS2BrR
+KbM83nYw87l97db0/6I/nKm6hlb8uuG5/W8CQQDvlMU7A0VzzvEdPBV8ozFZ+1SA
+HJ9tXqkDhwWUQEeiE8WuQpV0k6y1m4GxgBEWJgx+X7HRtO4EIo0DSVeCvOOdAkB3
+hGE8BE3Q1p1WHcSsBYTmBiYCJA5rs7XVpBlCAruFK6Nsua0WQ4/E1jH8k+/CqnA2
+XrkrQ+sf5lD9FTyAWfSVAkB3k3K08mFredhr9pqLKQeN2b5LHg55a4Hl0y7m7ZKS
+D7kTvXhpi03W4EUsS1GEZ5QzKlxctsQH2bEjmKmC1Si4
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/mandatory/careq.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBxDCCAS0CAQAwgYMxCzAJBgNVBAYTAlVLMQ8wDQYDVQQHEwZMb25kb24xGDAW
+BgNVBAMTD0phc29uIFNpYnRob3JwZTEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxKjAoBgkqhkiG9w0BCQEWG0phc29uLlNpYnRob3JwZUBzeW1iaWFuLmNv
+bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAnysSqHZjRmkZcpnDXSA285Lx
+RBX01C8dyoygbB9Ipzqjr+55YJZxBH/34VWMS4CdX280WwkXYaxpjaPiGhwFVPms
+i5CWvhNsgQERogxYrvLeE1j/OfJzvnpMN14zp+p1ROxo30WmfkEQIlUkiVJz+3wg
+jAgjgwdeDXAJNmstC1UCAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4GBAFKD99j8x7Ze
+nzr+ms6k42hQzU7Gp4YEOJVgHsmLatz5fRahiKIX9NwNSWMMsRKjdi993rGQxNaX
+xZNMJzr/847w9KbjXd5bxi5o1qC9t7261O5OLMTAropU4YU1RzsenvvR51ymMFSu
+MYUZqyXjF3xahMqtpccn17uLF3HnI4qS
+-----END CERTIFICATE REQUEST-----
Binary file installationservices/switestfw/testcertificates/swi/test/writableswicertstore/certs/renewed/cacert.der has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/usif/root5ca.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICITCCAYqgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMR0wGwYDVQQKExRTeW1i
+aWFuIFNvZnR3YXJlIEx0ZDESMBAGA1UEAxMJUm9vdDUtUlNBMB4XDTA0MDMwMzE2
+MzQ0MloXDTE0MDMwMTE2MzQ0MlowMzEdMBsGA1UEChMUU3ltYmlhbiBTb2Z0d2Fy
+ZSBMdGQxEjAQBgNVBAMTCVJvb3Q1LVJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAufV5zRvgR/ohzfb8AizbLePxK7QfBOuTtwy70/ifZCP5aZMri6DgObYM
+Jwh4lChQ+UnQgMX9sRP1kWZ6UEbrhm7oUz7keI6wu4m4myYmMjY3nc+7T/std+o/
+Vzt/bSyLNYpAqUW50g46SL1lof8fXKGkqFRH42czeMUwqnEffRsCAwEAAaNFMEMw
+DgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQUwHQYDVR0OBBYEFHzj
+BilRFiByFNQlr/0YW21eSK9vMA0GCSqGSIb3DQEBBAUAA4GBACEv1s039YBNfVn/
+dxZm+1XDLmrm6Of5p3SjBz94osLV+cNsddP5W+jmdtEL2u+x33foGFPOkDyFFnIW
+gkFVfAKKCH70K2liJWDS5D+mu32zU8Kc/JF0musvKZ/EbuddJS+x7t7kBl4fFgr1
+0/AO8YOgD1AV55Z9Bjf1lTTHZMcX
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/switestfw/testcertificates/usif/root5ca_key.pem	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC59XnNG+BH+iHN9vwCLNst4/ErtB8E65O3DLvT+J9kI/lpkyuL
+oOA5tgwnCHiUKFD5SdCAxf2xE/WRZnpQRuuGbuhTPuR4jrC7ibibJiYyNjedz7tP
++y136j9XO39tLIs1ikCpRbnSDjpIvWWh/x9coaSoVEfjZzN4xTCqcR99GwIDAQAB
+AoGAMMPAtxrSS826Q6q7F07wAy69Nbq8T6v/RodeUg3mrnoIk7j2OF1tr3Sf5zR/
+ekrAQT8sIDjLeD5FrWV0Ocz/QgUrcUG62yD3JgYT+YBZVKGLYIWzRp6BSqGLC/qU
++Q8W+s8AAsnRip5vsBDYLRWIhC5WAlNHE+7urTfIsAC0UxECQQDeSk4wxwlifiUW
+rGt759zFzUoWyAb/tRcnti88RKJkG+/15sccEFlD+qCeee/aD8FlbnE390XhaLCX
+lPsHriftAkEA1ii5N8MX03lMZhaW+k+obP06l46N+64a8g7tlL1vHOxeXdHydhpB
+tJ2F2jeqbtxmEvos19UrmVsuFrMiargIJwJAO1D4rGtwRagDnZlE1Tt53g55xrp5
+o6JfG2myERL/glcyIRwD5ak3KLyoP6GqLzYlFTvzWkvRieS1ur02f0YpwQJBAJz3
+fkIrwXPjzSZqWkCfUCCKPn7FIrYct21BmctSSXWWndgAQMlll1Etv+Tgtg/JhRtV
+uLZ9bRZbKV3D8G7t8jMCQQDC0Qrv26meE2ePUPGZdKfjZPY2/+M2z/j8kDsr+4fM
+0RxsJLH7p2bvxN80g/sSAdinbwLsqYiLrs7cz8Opv7Vb
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/bwins/stsclientu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,18 @@
+EXPORTS
+	?RegisterTemporaryL@RStsSession@Usif@@QAEXABVTDesC16@@@Z @ 1 NONAME ; void Usif::RStsSession::RegisterTemporaryL(class TDesC16 const &)
+	?CommitL@RStsSession@Usif@@QAEXXZ @ 2 NONAME ; void Usif::RStsSession::CommitL(void)
+	?CreateTransactionL@RStsSession@Usif@@QAEKXZ @ 3 NONAME ; unsigned long Usif::RStsSession::CreateTransactionL(void)
+	?RollBackL@RStsSession@Usif@@QAEXXZ @ 4 NONAME ; void Usif::RStsSession::RollBackL(void)
+	?RollbackAllPendingL@RStsRecoverySession@Usif@@QAEXXZ @ 5 NONAME ; void Usif::RStsRecoverySession::RollbackAllPendingL(void)
+	?Close@RStsSession@Usif@@QAEXXZ @ 6 NONAME ; void Usif::RStsSession::Close(void)
+	?TransactionIdL@RStsSession@Usif@@QAEKXZ @ 7 NONAME ; unsigned long Usif::RStsSession::TransactionIdL(void)
+	??0RStsRecoverySession@Usif@@QAE@XZ @ 8 NONAME ; Usif::RStsRecoverySession::RStsRecoverySession(void)
+	?OverwriteL@RStsSession@Usif@@QAEXABVTDesC16@@AAVRFile@@I@Z @ 9 NONAME ; void Usif::RStsSession::OverwriteL(class TDesC16 const &, class RFile &, unsigned int)
+	?RemoveL@RStsSession@Usif@@QAEXABVTDesC16@@@Z @ 10 NONAME ; void Usif::RStsSession::RemoveL(class TDesC16 const &)
+	?Close@RStsRecoverySession@Usif@@QAEXXZ @ 11 NONAME ; void Usif::RStsRecoverySession::Close(void)
+	?CreateTemporaryL@RStsSession@Usif@@QAEXABVTDesC16@@AAVRFile@@I@Z @ 12 NONAME ; void Usif::RStsSession::CreateTemporaryL(class TDesC16 const &, class RFile &, unsigned int)
+	?OpenTransactionL@RStsSession@Usif@@QAEXK@Z @ 13 NONAME ; void Usif::RStsSession::OpenTransactionL(unsigned long)
+	?CreateNewL@RStsSession@Usif@@QAEXABVTDesC16@@AAVRFile@@I@Z @ 14 NONAME ; void Usif::RStsSession::CreateNewL(class TDesC16 const &, class RFile &, unsigned int)
+	?RegisterNewL@RStsSession@Usif@@QAEXABVTDesC16@@@Z @ 15 NONAME ; void Usif::RStsSession::RegisterNewL(class TDesC16 const &)
+	??0RStsSession@Usif@@QAE@XZ @ 16 NONAME ; Usif::RStsSession::RStsSession(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/eabi/stsclientu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,20 @@
+EXPORTS
+	_ZN4Usif11RStsSession10CreateNewLERK7TDesC16R5RFilej @ 1 NONAME
+	_ZN4Usif11RStsSession10OverwriteLERK7TDesC16R5RFilej @ 2 NONAME
+	_ZN4Usif11RStsSession12RegisterNewLERK7TDesC16 @ 3 NONAME
+	_ZN4Usif11RStsSession14TransactionIdLEv @ 4 NONAME
+	_ZN4Usif11RStsSession16CreateTemporaryLERK7TDesC16R5RFilej @ 5 NONAME
+	_ZN4Usif11RStsSession16OpenTransactionLEm @ 6 NONAME
+	_ZN4Usif11RStsSession18CreateTransactionLEv @ 7 NONAME
+	_ZN4Usif11RStsSession18RegisterTemporaryLERK7TDesC16 @ 8 NONAME
+	_ZN4Usif11RStsSession5CloseEv @ 9 NONAME
+	_ZN4Usif11RStsSession7CommitLEv @ 10 NONAME
+	_ZN4Usif11RStsSession7RemoveLERK7TDesC16 @ 11 NONAME
+	_ZN4Usif11RStsSession9RollBackLEv @ 12 NONAME
+	_ZN4Usif11RStsSessionC1Ev @ 13 NONAME
+	_ZN4Usif11RStsSessionC2Ev @ 14 NONAME
+	_ZN4Usif19RStsRecoverySession19RollbackAllPendingLEv @ 15 NONAME
+	_ZN4Usif19RStsRecoverySession5CloseEv @ 16 NONAME
+	_ZN4Usif19RStsRecoverySessionC1Ev @ 17 NONAME
+	_ZN4Usif19RStsRecoverySessionC2Ev @ 18 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,195 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* @ Software Transaction System
+*
+*/
+
+
+/**
+ @file
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+// STS exported headers
+
+../inc/sts.h			SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/sts/sts.h)
+../inc/stsdefs.h		SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/sts/stsdefs.h)
+
+// ROMKIT includes
+../inc/sts.iby                       /epoc32/rom/include/sts.iby
+
+PRJ_MMPFILES
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+stsserver.mmp			// STS Server
+stsclient.mmp			// STS Client
+
+#endif // TOOLS2
+#endif // TOOLS
+
+PRJ_TESTMMPFILES
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+../test/group/tsts.mmp                                           //STS test framework
+../test/group/tstsrollbackall.mmp                                //STS test framework
+../test/tintegrityservices/group/tstsintegrityservicesclient.mmp    //legacy client-server framework for testing integrity services code
+../test/tintegrityservices/group/tstsintegrityservicesserver.mmp    //legacy client-server framework for testing integrity services code
+
+#endif // TOOLS2
+#endif // TOOLS
+
+PRJ_TESTEXPORTS
+
+// ROMKIT includes
+../inc/tsts.iby                       /epoc32/rom/include/tsts.iby
+
+../test/scripts/tsts.ini					z:/tusif/tsts/tsts.ini
+../test/scripts/tsts.script					z:/tusif/tsts/tsts.script
+../test/scripts/tsts_rollbackall.script				z:/tusif/tsts/tsts_rollbackall.script
+../test/scripts/data/tstsdummy.txt			z:/tusif/tsts/data/tstsdummy.txt
+../test/scripts/tsts_bootuptimerecovery.script			z:/tusif/tsts/tsts_bootuptimerecovery.script
+../test/scripts/batchfiles/tsts_bootuptimerecovery.bat		z:/tusif/tsts/batchfiles/tsts_bootuptimerecovery.bat
+
+
+//tsts rollback-all testexports - testcase1
+../test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8/0.bak       z:/tusif/tsts/data/rollbackall/testcase1/c_drive/61f7bbf8/0.bak
+../test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8/1.bak       z:/tusif/tsts/data/rollbackall/testcase1/c_drive/61f7bbf8/1.bak
+../test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8.drv         z:/tusif/tsts/data/rollbackall/testcase1/c_drive/61f7bbf8.drv
+../test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8.log         z:/tusif/tsts/data/rollbackall/testcase1/c_drive/61f7bbf8.log
+../test/scripts/data/rollbackall/testcase1/e_drive/61f7bbf8/0.bak       z:/tusif/tsts/data/rollbackall/testcase1/e_drive/61f7bbf8/0.bak
+../test/scripts/data/rollbackall/testcase1/e_drive/61f7bbf8/1.bak       z:/tusif/tsts/data/rollbackall/testcase1/e_drive/61f7bbf8/1.bak
+../test/scripts/data/rollbackall/testcase1/e_drive/61f7bbf8.log         z:/tusif/tsts/data/rollbackall/testcase1/e_drive/61f7bbf8.log
+
+//tsts rollback-all testexports - testcase2
+../test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3/0.bak       z:/tusif/tsts/data/rollbackall/testcase2/c_drive/b06c42f3/0.bak
+../test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3/1.bak       z:/tusif/tsts/data/rollbackall/testcase2/c_drive/b06c42f3/1.bak
+../test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3.drv         z:/tusif/tsts/data/rollbackall/testcase2/c_drive/b06c42f3.drv
+../test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3.log         z:/tusif/tsts/data/rollbackall/testcase2/c_drive/b06c42f3.log
+../test/scripts/data/rollbackall/testcase2/e_drive/b06c42f3/0.bak       z:/tusif/tsts/data/rollbackall/testcase2/e_drive/b06c42f3/0.bak
+../test/scripts/data/rollbackall/testcase2/e_drive/b06c42f3/1.bak       z:/tusif/tsts/data/rollbackall/testcase2/e_drive/b06c42f3/1.bak
+../test/scripts/data/rollbackall/testcase2/e_drive/b06c42f3.log         z:/tusif/tsts/data/rollbackall/testcase2/e_drive/b06c42f3.log
+
+//tsts rollback-all testexports - testcase3
+../test/scripts/data/rollbackall/testcase3/c_drive/bd596810.drv         z:/tusif/tsts/data/rollbackall/testcase3/c_drive/bd596810.drv
+../test/scripts/data/rollbackall/testcase3/c_drive/bd596810.log         z:/tusif/tsts/data/rollbackall/testcase3/c_drive/bd596810.log
+../test/scripts/data/rollbackall/testcase3/e_drive/bd596810.log         z:/tusif/tsts/data/rollbackall/testcase3/e_drive/bd596810.log
+
+//tsts rollback-all testexports - testcase4
+../test/scripts/data/rollbackall/testcase4/c_drive/cb94c9f0.drv         z:/tusif/tsts/data/rollbackall/testcase4/c_drive/cb94c9f0.drv
+../test/scripts/data/rollbackall/testcase4/c_drive/cb94c9f0.log         z:/tusif/tsts/data/rollbackall/testcase4/c_drive/cb94c9f0.log
+../test/scripts/data/rollbackall/testcase4/e_drive/cb94c9f0.log         z:/tusif/tsts/data/rollbackall/testcase4/e_drive/cb94c9f0.log
+
+//tsts rollback-all testexports - testcase5
+../test/scripts/data/rollbackall/testcase5/c_drive/b630b6f0.drv         z:/tusif/tsts/data/rollbackall/testcase5/c_drive/b630b6f0.drv
+../test/scripts/data/rollbackall/testcase5/c_drive/b630b6f0.log         z:/tusif/tsts/data/rollbackall/testcase5/c_drive/b630b6f0.log
+../test/scripts/data/rollbackall/testcase5/e_drive/b630b6f0.log         z:/tusif/tsts/data/rollbackall/testcase5/e_drive/b630b6f0.log
+
+//tsts rollback-all testexports - testcase6
+../test/scripts/data/rollbackall/testcase6/c_drive/be3d42f0.drv         z:/tusif/tsts/data/rollbackall/testcase6/c_drive/be3d42f0.drv
+../test/scripts/data/rollbackall/testcase6/c_drive/be3d42f0.log         z:/tusif/tsts/data/rollbackall/testcase6/c_drive/be3d42f0.log
+../test/scripts/data/rollbackall/testcase6/e_drive/be3d42f0.log         z:/tusif/tsts/data/rollbackall/testcase6/e_drive/be3d42f0.log
+
+//tsts rollback-all testexports - SEC-STS-RollbackAll-0002
+../test/scripts/data/rollbackall/sec-sts-rollbackall-0002/b6da9d45.drv         z:/tusif/tsts/data/rollbackall/sec-sts-rollbackall-0002/b6da9d45.drv
+../test/scripts/data/rollbackall/sec-sts-rollbackall-0002/b6da9d45.log         z:/tusif/tsts/data/rollbackall/sec-sts-rollbackall-0002/b6da9d45.log
+
+//legacy tintegrityservices test export
+../test/tintegrityservices/scripts/tintegrityservices.script 	        z:/tusif/tsts/tintegrityservices/scripts/tsts_tintegrityservices.script
+../test/tintegrityservices/scripts/tintegrityservices.ini 		z:/tusif/tsts/tintegrityservices/scripts/tintegrityservices.ini
+../test/tintegrityservices/scripts/oom.ini 						z:/tusif/tsts/tintegrityservices/scripts/oom.ini
+
+../test/tintegrityservices/scripts/install_v1/EFailAddingNewFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/install_v1/efailaddingnewfile.ini
+../test/tintegrityservices/scripts/install_v1/EFailAddingTempFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/install_v1/efailaddingtempfile.ini
+../test/tintegrityservices/scripts/install_v1/EFailBackupFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/install_v1/efailbackupfilesremoved.ini
+../test/tintegrityservices/scripts/install_v1/EFailDeletingFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/install_v1/efaildeletingfile.ini
+../test/tintegrityservices/scripts/install_v1/EFailInstallComplete.ini 		z:/tusif/tsts/tintegrityservices/scripts/install_v1/efailinstallcomplete.ini
+../test/tintegrityservices/scripts/install_v1/EFailNone.ini 				z:/tusif/tsts/tintegrityservices/scripts/install_v1/efailnone.ini
+../test/tintegrityservices/scripts/install_v1/EFailTempFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/install_v1/efailtempfilesremoved.ini
+
+../test/tintegrityservices/scripts/install_v2/EFailAddingNewFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/install_v2/efailaddingnewfile.ini
+../test/tintegrityservices/scripts/install_v2/EFailAddingTempFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/install_v2/efailaddingtempfile.ini
+../test/tintegrityservices/scripts/install_v2/EFailBackupFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/install_v2/efailbackupfilesremoved.ini
+../test/tintegrityservices/scripts/install_v2/EFailDeletingFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/install_v2/efaildeletingfile.ini
+../test/tintegrityservices/scripts/install_v2/EFailInstallComplete.ini 		z:/tusif/tsts/tintegrityservices/scripts/install_v2/efailinstallcomplete.ini
+../test/tintegrityservices/scripts/install_v2/EFailNone.ini 				z:/tusif/tsts/tintegrityservices/scripts/install_v2/efailnone.ini
+../test/tintegrityservices/scripts/install_v2/EFailTempFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/install_v2/efailtempfilesremoved.ini
+
+../test/tintegrityservices/scripts/rollback_install_v1/EFailDeletingFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/rollback_install_v1/efaildeletingfile.ini
+../test/tintegrityservices/scripts/rollback_install_v1/EFailNewFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_install_v1/efailnewfilesremoved.ini
+../test/tintegrityservices/scripts/rollback_install_v1/EFailNone.ini 				z:/tusif/tsts/tintegrityservices/scripts/rollback_install_v1/efailnone.ini
+../test/tintegrityservices/scripts/rollback_install_v1/EFailOldFilesRestored.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_install_v1/efailoldfilesrestored.ini
+../test/tintegrityservices/scripts/rollback_install_v1/EFailTempFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_install_v1/efailtempfilesremoved.ini
+
+../test/tintegrityservices/scripts/rollback_install_v2/EFailDeletingFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/rollback_install_v2/efaildeletingfile.ini
+../test/tintegrityservices/scripts/rollback_install_v2/EFailNewFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_install_v2/efailnewfilesremoved.ini
+../test/tintegrityservices/scripts/rollback_install_v2/EFailNone.ini 				z:/tusif/tsts/tintegrityservices/scripts/rollback_install_v2/efailnone.ini
+../test/tintegrityservices/scripts/rollback_install_v2/EFailOldFilesRestored.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_install_v2/efailoldfilesrestored.ini
+../test/tintegrityservices/scripts/rollback_install_v2/EFailTempFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_install_v2/efailtempfilesremoved.ini
+
+../test/tintegrityservices/scripts/rollback_uninstall_v1/EFailDeletingFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v1/efaildeletingfile.ini
+../test/tintegrityservices/scripts/rollback_uninstall_v1/EFailNewFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v1/efailnewfilesremoved.ini
+../test/tintegrityservices/scripts/rollback_uninstall_v1/EFailNone.ini 				z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v1/efailnone.ini
+../test/tintegrityservices/scripts/rollback_uninstall_v1/EFailOldFilesRestored.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v1/efailoldfilesrestored.ini
+../test/tintegrityservices/scripts/rollback_uninstall_v1/EFailRestoringFile.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v1/efailrestoringfile.ini
+../test/tintegrityservices/scripts/rollback_uninstall_v1/EFailTempFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v1/efailtempfilesremoved.ini
+
+../test/tintegrityservices/scripts/rollback_uninstall_v2/EFailDeletingFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v2/efaildeletingfile.ini
+../test/tintegrityservices/scripts/rollback_uninstall_v2/EFailNewFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v2/efailnewfilesremoved.ini
+../test/tintegrityservices/scripts/rollback_uninstall_v2/EFailNone.ini 				z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v2/efailnone.ini
+../test/tintegrityservices/scripts/rollback_uninstall_v2/EFailOldFilesRestored.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v2/efailoldfilesrestored.ini
+../test/tintegrityservices/scripts/rollback_uninstall_v2/EFailRestoringFile.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v2/efailrestoringfile.ini
+../test/tintegrityservices/scripts/rollback_uninstall_v2/EFailTempFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_uninstall_v2/efailtempfilesremoved.ini
+
+../test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailDeletingFile.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_upgrade_v1-v2/efaildeletingfile.ini
+../test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailNewFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_upgrade_v1-v2/efailnewfilesremoved.ini
+../test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailNone.ini 			z:/tusif/tsts/tintegrityservices/scripts/rollback_upgrade_v1-v2/efailnone.ini
+../test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailOldFilesRestored.ini z:/tusif/tsts/tintegrityservices/scripts/rollback_upgrade_v1-v2/efailoldfilesrestored.ini
+../test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailRestoringFile.ini 	z:/tusif/tsts/tintegrityservices/scripts/rollback_upgrade_v1-v2/efailrestoringfile.ini
+../test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailTempFilesRemoved.ini z:/tusif/tsts/tintegrityservices/scripts/rollback_upgrade_v1-v2/efailtempfilesremoved.ini
+
+../test/tintegrityservices/scripts/uninstall_v1/EFailBackupFilesRemoved.ini z:/tusif/tsts/tintegrityservices/scripts/uninstall_v1/efailbackupfilesremoved.ini
+../test/tintegrityservices/scripts/uninstall_v1/EFailDeletingFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/uninstall_v1/efaildeletingfile.ini
+../test/tintegrityservices/scripts/uninstall_v1/EFailInstallComplete.ini 	z:/tusif/tsts/tintegrityservices/scripts/uninstall_v1/efailinstallcomplete.ini
+../test/tintegrityservices/scripts/uninstall_v1/EFailNone.ini 				z:/tusif/tsts/tintegrityservices/scripts/uninstall_v1/efailnone.ini
+../test/tintegrityservices/scripts/uninstall_v1/EFailRemovingFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/uninstall_v1/efailremovingfile.ini
+../test/tintegrityservices/scripts/uninstall_v1/EFailTempFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/uninstall_v1/efailtempfilesremoved.ini
+
+../test/tintegrityservices/scripts/uninstall_v2/EFailBackupFilesRemoved.ini z:/tusif/tsts/tintegrityservices/scripts/uninstall_v2/efailbackupfilesremoved.ini
+../test/tintegrityservices/scripts/uninstall_v2/EFailDeletingFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/uninstall_v2/efaildeletingfile.ini
+../test/tintegrityservices/scripts/uninstall_v2/EFailInstallComplete.ini 	z:/tusif/tsts/tintegrityservices/scripts/uninstall_v2/efailinstallcomplete.ini
+../test/tintegrityservices/scripts/uninstall_v2/EFailNone.ini 				z:/tusif/tsts/tintegrityservices/scripts/uninstall_v2/efailnone.ini
+../test/tintegrityservices/scripts/uninstall_v2/EFailRemovingFile.ini 		z:/tusif/tsts/tintegrityservices/scripts/uninstall_v2/efailremovingfile.ini
+../test/tintegrityservices/scripts/uninstall_v2/EFailTempFilesRemoved.ini 	z:/tusif/tsts/tintegrityservices/scripts/uninstall_v2/efailtempfilesremoved.ini
+
+../test/tintegrityservices/scripts/upgrade_v1-v2/EFailAddingNewFile.ini 	 z:/tusif/tsts/tintegrityservices/scripts/upgrade_v1-v2/efailaddingnewfile.ini
+../test/tintegrityservices/scripts/upgrade_v1-v2/EFailAddingTempFile.ini 	 z:/tusif/tsts/tintegrityservices/scripts/upgrade_v1-v2/efailaddingtempfile.ini
+../test/tintegrityservices/scripts/upgrade_v1-v2/EFailBackupFilesRemoved.ini z:/tusif/tsts/tintegrityservices/scripts/upgrade_v1-v2/efailbackupfilesremoved.ini
+../test/tintegrityservices/scripts/upgrade_v1-v2/EFailDeletingFile.ini 		 z:/tusif/tsts/tintegrityservices/scripts/upgrade_v1-v2/efaildeletingfile.ini
+../test/tintegrityservices/scripts/upgrade_v1-v2/EFailInstallComplete.ini 	 z:/tusif/tsts/tintegrityservices/scripts/upgrade_v1-v2/efailinstallcomplete.ini
+../test/tintegrityservices/scripts/upgrade_v1-v2/EFailNone.ini 				 z:/tusif/tsts/tintegrityservices/scripts/upgrade_v1-v2/efailnone.ini
+../test/tintegrityservices/scripts/upgrade_v1-v2/EFailRemovingFile.ini 		 z:/tusif/tsts/tintegrityservices/scripts/upgrade_v1-v2/efailremovingfile.ini
+../test/tintegrityservices/scripts/upgrade_v1-v2/EFailTempFilesRemoved.ini   z:/tusif/tsts/tintegrityservices/scripts/upgrade_v1-v2/efailtempfilesremoved.ini
+
+../test/tintegrityservices/scripts/data/unittests/testjournal.log z:/tusif/tsts/tintegrityservices/scripts/data/unittests/myjournal.log
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/group/security_softwaretransactionservices.history.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="Software Transaction Services">
+  <purpose>
+    Provide transactional services on top of Symbian OS file system.
+  </purpose>
+  
+  <defect number="DEF130781" title="PREQ1269: STS deletes the existing empty directories on rollback of transaction" revision="008">
+	Issue solved for empty directories on rollback of transaction
+  </defect>
+  
+  <defect number="DEF131875" title="SMPSAFE MMP file updates for SWI and USIF" revision="007">
+    updated MMP files for SWI and USIF components to declare them SMPSAFE 
+  </defect>
+
+  <defect number="DEF130602" title="PREQ1269: STS returns -15 error when rollback large number of files" revision="006">
+	 STS returns -15 error when rollback large number of files
+  </defect>
+  
+  <defect number="DEF130332" title=" PREQ1269: STS server creating unnecessarry directories." revision="005">
+	 STS server now doesn't create unnecessarry directories 
+  </defect>
+
+  <defect number="DEF130535" title="PREQ1269: TFileMode enum is used as function paramter type, which is incorrect." revision="004">
+	Used TUint as function paramter type in the following methods:
+    1)RStsSession::CreateTemporaryL()
+	2)RStsSession::CreateNewL() 
+	3)RStsSession::OverwriteL() 
+  </defect>
+  
+  <deliverystep number="1117" name="PREQ1269: Crypto Services: Plugin management and highly desirable features
+ (Phase 2)" osproject="Diran" revision="003">
+	  <milestone project="GT0433" number="3.2"/>
+	  <preq number="1269" title="Universal Software Install Framework">
+		  1) Post-manufacture plugin management 2) Complex queries in the SCR
+			3) Additional smaller requirements and changes and 4) Improved security in the SCR
+	  </preq>
+  </deliverystep>
+
+  <defect number="DEF128988" title="RollBackAllL() should be TRAPed in CStsServer::ConstructL()" revision="002">
+	RollBackAllL() call in CStsServer::ConstructL() has been put in TRAP_IGNORE to ignore any errors returned form the roll-back all procedure and provide smooth STS server startup
+  </defect>
+
+  <deliverystep number="1116" name="PREQ1269: Security and Data Privacy: Universal Software Install Framework (Phase 1)" osproject="Diran" revision="001">
+	  <milestone project="GT0433" number="3.1"/>
+	  <preq number="1269" title="Universal Software Install Framework">
+		   Delivers the main set of features for the Diran Early Phase. Includes the new components (SCR, SIF and STS), migration of the native installer to use the new components and most reference code.
+			Excludes non-mandatory features and post-production plugin management.
+	  </preq>
+  </deliverystep>
+
+</relnotes>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/group/security_softwaretransactionservices.mrp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,9 @@
+component	security_softwaretransactionservices
+source	\sf\mw\appinstall\installationservices\swtransactionservices
+binary	\sf\mw\appinstall\installationservices\swtransactionservices\group	all
+exports	\sf\mw\appinstall\installationservices\swtransactionservices\group
+notes_source	\component_defs\release.src
+
+ipr E 
+ipr T \sf\mw\appinstall\installationservices\swtransactionservices\test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/group/stsclient.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* STS Client
+*
+*/
+
+
+TARGET				stsclient.dll
+TARGETTYPE			dll
+
+UID					0x0 0x10285BCE
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE			../inc
+USERINCLUDE			../inc_private
+
+SOURCEPATH			../source/client
+
+SOURCE				sts.cpp
+SOURCE				stsrecovery.cpp
+
+CAPABILITY			All
+
+VENDORID			0x70000001
+
+LIBRARY				euser.lib 
+LIBRARY				scsclient.lib efsrv.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/group/stsserver.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* STS Server 
+*
+*/
+
+TARGET				softwaretransactionservices.exe
+TARGETTYPE			exe
+
+UID					0x0 0x10285BCD
+EPOCHEAPSIZE    0x4000 0x0200000
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+USERINCLUDE			../inc
+USERINCLUDE			../inc_private
+USERINCLUDE			../../swinstallationfw/common/inc
+
+SOURCEPATH			../source/server
+
+SOURCE				startup.cpp
+SOURCE				stsserver.cpp
+SOURCE				stsserversession.cpp
+
+SOURCE				integrityservices.cpp
+SOURCE              integritytree.cpp
+SOURCE              journal.cpp
+SOURCE              journalfile.cpp
+SOURCE              operationfunctions.cpp
+SOURCE              transactionwrapper.cpp
+
+CAPABILITY			ProtServ TCB AllFiles
+
+VENDORID			0x70000001
+
+LIBRARY				euser.lib
+LIBRARY				scsserver.lib efsrv.lib
+LIBRARY				estor.lib
+LIBRARY				sectcbutil.lib
+LIBRARY				securityutils.lib 
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc/sts.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,243 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+
+#ifndef __STSSESSION_H__
+#define __STSSESSION_H__
+
+#include <scs/scsclient.h>
+#include <f32file.h>
+#include <usif/sts/stsdefs.h>
+
+namespace Usif
+{
+/**
+	The RStsSession class provides synchronous interface to the STS server.
+	This class wraps all the details of client-server communication with the STS server
+	residing in a separate process.
+
+	This class is intended to be used by STS client applications.
+
+        RStsSession class uses a unique transaction ID to identify operations belonging to different FS management transactions.
+        A transaction is a logical set of file system operations to be executed or rolled back atomically so that either all 
+        operations fail or all operations succeed together.
+
+        Closing the session through RStsSession::Close() rolls back the transaction unless it was explicitly rolled back or committed
+        using the respective methods.
+	
+	@publishedAll
+	@released	
+ */
+
+    class RStsSession : public RScsClientBase
+		{
+	public:
+		IMPORT_C RStsSession();
+
+		/**
+		 Opens a session to the STS server and creates a new transaction
+		 @pre Neither CreateTransactionL nor OpenTransactionL have been invoked previously on this STS session.
+		 @leave system wide error codes
+		 @return the newly created transaction's unique ID
+		 */
+		IMPORT_C TStsTransactionId CreateTransactionL();
+
+		/**
+		 Opens a session to the STS server and joins an existing transaction.
+		 This API should not be called throughout a valid session to the STS server
+		 (i.e: CreateTransactionL() >> OpenTransactionL() or OpenTransactionL() >> OpenTransactionL())
+		 @pre There is an active transaction with the supplied id.
+		 @pre Neither CreateTransactionL nor OpenTransactionL have been invoked previously on this STS session. 
+		 @leave system wide error codes
+		 @param aTransactionID the unique TInt32 transaction ID
+		 */
+		IMPORT_C void OpenTransactionL(TStsTransactionId aTransactionID);
+
+	public:
+		//journalling related functions
+
+		/**
+		 Notifies the STS server that a file or directory is being added to the file system.
+		 Important note: the actual file operation is not executed. It has to be done 
+		 by the client code AFTER calling this API.
+		 On commit the file is kept, on rollback it is removed.                
+		 @leave system wide error codes
+		 @param aFileName - Fully qualified name of file or directory
+		 */
+		IMPORT_C void RegisterNewL(const TDesC& aFileName);
+
+		/**
+		 Instructs the STS server to create a new file.
+		 The server creates a file and returns a handle to it. 
+		 On commit the file is kept, on rollback it is removed.
+		 Important note: ownership of the newly created file is transfered from the server
+		 to the client, so it is the client's responsibility to make sure that the file is
+		 closed properly.
+		 On creation the new file is empty.
+		 @leave system wide error codes
+		 @leave KErrAlreadyExist If the file already exists
+		 @param aFileName - Fully qualified name of file
+		 @param aFile - Reference of a file handle that is set to the new created file
+		 @param aFileMode - File creation mode of the new file (see TFileMode documentation
+		                    for the possible mode or combination of modes)
+		 */
+		IMPORT_C void CreateNewL(const TDesC& aFileName, RFile &aFile, TUint aCreateMode);
+
+		/**
+		 Instructs the STS server to remove the specified file or directory.
+		 Important note: the file is removed by the STS server. The client doesn't have to delete it
+		 after a call to this API.
+		 If the file does not exist, this function does nothing.
+		 On commit the file remains permanently deleted, on rollback it is restored.
+		 @leave system wide error codes
+		 @param aFileName - Fully qualified name of file or directory
+		 */
+		IMPORT_C void RemoveL(const TDesC& aFileName);
+
+		/**
+		 Notifies the STS server that a temporary file is being added to the file system.
+		 Important note: the actual file operation (i.e: creating the file at the target location) is not executed. 
+		 It has to be done by the client code AFTER calling this API.
+		 The temporary file is deleted both on commit and on rollback.
+		 @leave system wide error codes
+		 @param aFileName - Fully qualified name of file or directory
+		 */
+		IMPORT_C void RegisterTemporaryL(const TDesC& aFileName);
+
+		/**
+		 Instructs the STS server to create a new temporary file.
+		 The server creates a file and returns a handle to it. 
+		 The temporary file is deleted both on commit and on rollback.
+		 Important note: ownership of the newly created file is transfered from the server
+		 to the client, so it is the client's responsibility to make sure that the file is
+		 closed properly.                
+		 On creation the new file is empty.
+
+		 @leave system wide error codes
+		 @leave KErrAlreadyExists  A file with this name already exists
+		 @param aFileName - Fully qualified name of file
+		 @param aFile - Reference of a file handle that is set to the new created file
+		 @param aFileMode - File creation mode of the new file (see TFileMode documentation
+		                    for the possible mode or combination of modes)
+		 */
+		IMPORT_C void CreateTemporaryL(const TDesC& aFileName, RFile &aFile, TUint aCreateMode);
+
+		/**
+		 Instructs the STS server to overwrite the target file.
+		 If the file doesn't exist, an empty new file is created. If the file already exists, it is overwritten with an empty one. 
+		 A file handle to the new file is returned to the client in both cases.		 
+		 Important note: ownership of the newly created file is transfered from the server
+		 to the client, so it is the client's responsibility to make sure that the file is
+		 closed properly.        
+		 On creation the new file is empty.
+		 On commit the new file is kept. On rollback, the new file is removed and the original one is restored.
+		 
+		 Please note that this function is recommended whenever the client generates the content for the new file.
+		 If the new file's content is not generated (e.g. it is copied), it is recommended to use RemoveL followed by RegisterNewL.
+		 
+		 @leave system wide error codes
+		 @param aFileName - Fully qualified name of file or directory
+		 @param aFile - Reference of a file handle that is set to the new created file
+		 @param aFileMode - File creation mode of the new file (see TFileMode documentation
+		                    for the possible mode or combination of modes)
+		 */
+		IMPORT_C void OverwriteL(const TDesC& aFileName, RFile &aFile, TUint aCreateMode);
+
+		/**
+		 Commits the current file system transaction. After commiting a transaction its file 
+		 operations cannot be reverted.
+		 Important note: this function implies closing the session to the server.
+		 @leave system wide error codes
+		 */
+		IMPORT_C void CommitL();
+
+		/**
+		 Starts the recovery process for the transaction. All operations are reverted during roll back restoring
+		 the file system to a state that it was in right before starting the transaction.
+		 Important note: This function implies closing the session to the server;
+		                 any affected directories(including pre-existing) which were found empty will be deleted.
+		 @leave system wide error codes
+		 */
+		IMPORT_C void RollBackL();
+
+		/**
+		 Returns the currently active transcation's id.
+		 @leave system wide error codes
+		 @leave KErrArgument If no transaction is active in this session - either it was not opened, or it has been already committed or rolled back.
+		 */
+		IMPORT_C TStsTransactionId TransactionIdL();
+
+		/**
+		 Closes this session to the STS server. Also rolls back the transaction in case neither CommitL not RollBackL
+		 were invoked previously.
+		 NOTE: Any affected directories(including pre-existing) which were found empty will be deleted.
+		 */
+		IMPORT_C void Close();
+
+	private:
+		/**
+		 Connects to the STS server and starts it if necessary
+		 @leave system wide error codes
+		 */
+		void ConnectL();
+
+		};//class RStsSession
+   
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+   /**
+	 This class provides provides synchronous interface to the STS server for rolling back all pending transactions.
+
+	 @internalTechnology
+	 @released
+	 */
+	class RStsRecoverySession : public RScsClientBase
+		{
+	public:
+		IMPORT_C RStsRecoverySession();
+
+		/**
+		 Connects to the STS server and instructs it to roll back all pending transactions. 
+		 Does nothing if there are no pending transactions.
+		 @leave system wide error codes
+		 */
+		IMPORT_C void RollbackAllPendingL();
+
+		/**
+		 Closes this session to the STS server.
+		 */
+		IMPORT_C void Close();
+
+	private:
+		/**
+		 Connects to the STS server and starts it if necessary
+		 @leave system wide error codes
+		 */
+		void ConnectL();
+
+		};//class RStsRecoverySession   
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+	}////namespace Usif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc/sts.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef STS_IBY
+#define STS_IBY
+
+REM Software Transaction Services
+
+file=ABI_DIR\BUILD_DIR\softwaretransactionservices.exe			sys\bin\softwaretransactionservices.exe
+file=ABI_DIR\BUILD_DIR\stsclient.dll			                sys\bin\stsclient.dll
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc/stsdefs.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This header defines common STS entities
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+
+#ifndef __STSDEFS_H__
+#define __STSDEFS_H__
+
+#include <e32def.h>
+
+namespace Usif
+	{
+	typedef ::TUint32 TStsTransactionId; ///Transaction id in STS
+	}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc/stsrecovery.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+
+#ifndef __STSRECOVERY_H__
+#define __STSRECOVERY_H__
+
+#include <scs/scsclient.h>
+#include <f32file.h>
+#include <usif/sts/stsdefs.h>
+
+namespace Usif
+{
+
+   /**
+	 This class provides provides synchronous interface to the STS server for rolling back all pending transactions.
+
+	 @internalComponent
+	 @released
+	 */
+	class RStsRecoverySession : public RScsClientBase
+		{
+	public:
+		IMPORT_C RStsRecoverySession();
+
+		/**
+		 Connects to the STS server and instructs it to roll back all pending transactions. 
+		 Does nothing if there are no pending transactions.
+		 @leave system wide error codes
+		 */
+		IMPORT_C void RollbackAllPendingL();
+
+		/**
+		 Closes this session to the STS server.
+		 */
+		IMPORT_C void Close();
+
+	private:
+		/**
+		 Connects to the STS server and starts it if necessary
+		 @leave system wide error codes
+		 */
+		void ConnectL();
+
+		};//class RStsRecoverySession   
+	}////namespace Usif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc/tsts.iby	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef TSTS_IBY
+#define TSTS_IBY
+
+define ZDRIVE \epoc32\data\Z
+
+REM Software Transaction Services Test Suite
+
+
+file=ABI_DIR\BUILD_DIR\tststestserver.exe	  sys\bin\tststestserver.exe
+file=ABI_DIR\BUILD_DIR\tststestserverrollbackall.exe	  sys\bin\tststestserverrollbackall.exe
+
+data = ZDRIVE\tusif\tsts\tsts.script             \tusif\tsts\tsts.script
+data = ZDRIVE\tusif\tsts\tsts_rollbackall.script \tusif\tsts\tsts_rollbackall.script
+data = ZDRIVE\tusif\tsts\tsts.ini                \tusif\tsts\tsts.ini
+data = ZDRIVE\tusif\tsts\data\tstsdummy.txt      \tusif\tsts\data\tstsdummy.txt
+
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase1\c_drive\61f7bbf8.drv    \tusif\tsts\data\rollbackall\testcase1\c_drive\61f7bbf8.drv
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase1\c_drive\61f7bbf8.log    \tusif\tsts\data\rollbackall\testcase1\c_drive\61f7bbf8.log
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase1\c_drive\61f7bbf8\0.bak  \tusif\tsts\data\rollbackall\testcase1\c_drive\61f7bbf8\0.bak
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase1\c_drive\61f7bbf8\1.bak  \tusif\tsts\data\rollbackall\testcase1\c_drive\61f7bbf8\1.bak
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase1\e_drive\61f7bbf8.log    \tusif\tsts\data\rollbackall\testcase1\e_drive\61f7bbf8.log
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase1\e_drive\61f7bbf8\0.bak  \tusif\tsts\data\rollbackall\testcase1\e_drive\61f7bbf8\0.bak
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase1\e_drive\61f7bbf8\1.bak  \tusif\tsts\data\rollbackall\testcase1\e_drive\61f7bbf8\1.bak
+
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase2\c_drive\b06c42f3.drv    \tusif\tsts\data\rollbackall\testcase2\c_drive\b06c42f3.drv
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase2\c_drive\b06c42f3.log    \tusif\tsts\data\rollbackall\testcase2\c_drive\b06c42f3.log
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase2\c_drive\b06c42f3\0.bak  \tusif\tsts\data\rollbackall\testcase2\c_drive\b06c42f3\0.bak
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase2\c_drive\b06c42f3\1.bak  \tusif\tsts\data\rollbackall\testcase2\c_drive\b06c42f3\1.bak
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase2\e_drive\b06c42f3.log    \tusif\tsts\data\rollbackall\testcase2\e_drive\b06c42f3.log
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase2\e_drive\b06c42f3\0.bak  \tusif\tsts\data\rollbackall\testcase2\e_drive\b06c42f3\0.bak
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase2\e_drive\b06c42f3\1.bak  \tusif\tsts\data\rollbackall\testcase2\e_drive\b06c42f3\1.bak
+
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase3\c_drive\bd596810.drv    \tusif\tsts\data\rollbackall\testcase3\c_drive\bd596810.drv
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase3\c_drive\bd596810.log    \tusif\tsts\data\rollbackall\testcase3\c_drive\bd596810.log
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase3\e_drive\bd596810.log    \tusif\tsts\data\rollbackall\testcase3\e_drive\bd596810.log
+
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase4\c_drive\cb94c9f0.drv    \tusif\tsts\data\rollbackall\testcase4\c_drive\cb94c9f0.drv
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase4\c_drive\cb94c9f0.log    \tusif\tsts\data\rollbackall\testcase4\c_drive\cb94c9f0.log
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase4\e_drive\cb94c9f0.log    \tusif\tsts\data\rollbackall\testcase4\e_drive\cb94c9f0.log
+
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase5\c_drive\b630b6f0.drv    \tusif\tsts\data\rollbackall\testcase5\c_drive\b630b6f0.drv
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase5\c_drive\b630b6f0.log    \tusif\tsts\data\rollbackall\testcase5\c_drive\b630b6f0.log
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase5\e_drive\b630b6f0.log    \tusif\tsts\data\rollbackall\testcase5\e_drive\b630b6f0.log
+
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase6\c_drive\be3d42f0.drv    \tusif\tsts\data\rollbackall\testcase6\c_drive\be3d42f0.drv
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase6\c_drive\be3d42f0.log    \tusif\tsts\data\rollbackall\testcase6\c_drive\be3d42f0.log
+data = ZDRIVE\tusif\tsts\data\rollbackall\testcase6\e_drive\be3d42f0.log    \tusif\tsts\data\rollbackall\testcase6\e_drive\be3d42f0.log
+
+data = ZDRIVE\tusif\tsts\data\rollbackall\sec-sts-rollbackall-0002\b6da9d45.drv    \tusif\tsts\data\rollbackall\sec-sts-rollbackall-0002\b6da9d45.drv
+data = ZDRIVE\tusif\tsts\data\rollbackall\sec-sts-rollbackall-0002\b6da9d45.log    \tusif\tsts\data\rollbackall\sec-sts-rollbackall-0002\b6da9d45.log
+
+//these files are for the "legacy" tintegrityservices tests
+file=ABI_DIR\BUILD_DIR\tstsintegrityservicesclient.dll		sys\bin\tstsintegrityservicesclient.dll
+file=ABI_DIR\BUILD_DIR\tstsintegrityservicesserver.exe	  	sys\bin\tstsintegrityservicesserver.exe
+
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\tsts_tintegrityservices.script   \tusif\tsts\tintegrityservices\scripts\tsts_tintegrityservices.script
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini           \tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\oom.ini                          \tusif\tsts\tintegrityservices\scripts\oom.ini
+
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v1\EFailAddingNewFile.ini      \tusif\tsts\tintegrityservices\scripts\install_v1\EFailAddingNewFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v1\EFailAddingTempFile.ini     \tusif\tsts\tintegrityservices\scripts\install_v1\EFailAddingTempFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v1\EFailBackupFilesRemoved.ini \tusif\tsts\tintegrityservices\scripts\install_v1\EFailBackupFilesRemoved.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v1\EFailDeletingFile.ini       \tusif\tsts\tintegrityservices\scripts\install_v1\EFailDeletingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v1\EFailInstallComplete.ini    \tusif\tsts\tintegrityservices\scripts\install_v1\EFailInstallComplete.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v1\EFailNone.ini               \tusif\tsts\tintegrityservices\scripts\install_v1\EFailNone.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v1\EFailTempFilesRemoved.ini   \tusif\tsts\tintegrityservices\scripts\install_v1\EFailTempFilesRemoved.ini
+
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v2\EFailAddingNewFile.ini      \tusif\tsts\tintegrityservices\scripts\install_v2\EFailAddingNewFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v2\EFailAddingTempFile.ini     \tusif\tsts\tintegrityservices\scripts\install_v2\EFailAddingTempFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v2\EFailBackupFilesRemoved.ini \tusif\tsts\tintegrityservices\scripts\install_v2\EFailBackupFilesRemoved.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v2\EFailDeletingFile.ini       \tusif\tsts\tintegrityservices\scripts\install_v2\EFailDeletingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v2\EFailInstallComplete.ini    \tusif\tsts\tintegrityservices\scripts\install_v2\EFailInstallComplete.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v2\EFailNone.ini               \tusif\tsts\tintegrityservices\scripts\install_v2\EFailNone.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\install_v2\EFailTempFilesRemoved.ini   \tusif\tsts\tintegrityservices\scripts\install_v2\EFailTempFilesRemoved.ini
+
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailDeletingFile.ini     \tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailDeletingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailNewFilesRemoved.ini  \tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailNewFilesRemoved.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailNone.ini             \tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailNone.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailOldFilesRestored.ini \tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailOldFilesRestored.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailTempFilesRemoved.ini \tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailTempFilesRemoved.ini
+
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_install_v2\EFailDeletingFile.ini     \tusif\tsts\tintegrityservices\scripts\rollback_install_v2\EFailDeletingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_install_v2\EFailNewFilesRemoved.ini  \tusif\tsts\tintegrityservices\scripts\rollback_install_v2\EFailNewFilesRemoved.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_install_v2\EFailNone.ini             \tusif\tsts\tintegrityservices\scripts\rollback_install_v2\EFailNone.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_install_v2\EFailOldFilesRestored.ini \tusif\tsts\tintegrityservices\scripts\rollback_install_v2\EFailOldFilesRestored.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_install_v2\EFailTempFilesRemoved.ini \tusif\tsts\tintegrityservices\scripts\rollback_install_v2\EFailTempFilesRemoved.ini
+
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailDeletingFile.ini     \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailDeletingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailNewFilesRemoved.ini  \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailNewFilesRemoved.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailNone.ini             \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailNone.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailOldFilesRestored.ini \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailOldFilesRestored.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailRestoringFile.ini    \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailRestoringFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailTempFilesRemoved.ini \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v1\EFailTempFilesRemoved.ini
+
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailDeletingFile.ini      \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailDeletingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailNewFilesRemoved.ini   \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailNewFilesRemoved.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailNone.ini              \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailNone.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailOldFilesRestored.ini  \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailOldFilesRestored.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailRestoringFile.ini     \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailRestoringFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailTempFilesRemoved.ini  \tusif\tsts\tintegrityservices\scripts\rollback_uninstall_v2\EFailTempFilesRemoved.ini
+
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailDeletingFile.ini     \tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailDeletingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailNewFilesRemoved.ini  \tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailNewFilesRemoved.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailNone.ini             \tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailNone.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailOldFilesRestored.ini \tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailOldFilesRestored.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailRestoringFile.ini    \tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailRestoringFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailTempFilesRemoved.ini \tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailTempFilesRemoved.ini
+
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailBackupFilesRemoved.ini \tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailBackupFilesRemoved.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailDeletingFile.ini       \tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailDeletingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailInstallComplete.ini    \tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailInstallComplete.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailNone.ini               \tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailNone.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailRemovingFile.ini       \tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailRemovingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailTempFilesRemoved.ini   \tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailTempFilesRemoved.ini
+
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailBackupFilesRemoved.ini \tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailBackupFilesRemoved.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailDeletingFile.ini       \tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailDeletingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailInstallComplete.ini    \tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailInstallComplete.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailNone.ini               \tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailNone.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailRemovingFile.ini       \tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailRemovingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailTempFilesRemoved.ini   \tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailTempFilesRemoved.ini
+
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailAddingNewFile.ini      \tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailAddingNewFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailAddingTempFile.ini     \tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailAddingTempFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailBackupFilesRemoved.ini \tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailBackupFilesRemoved.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailDeletingFile.ini       \tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailDeletingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailInstallComplete.ini    \tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailInstallComplete.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailNone.ini               \tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailNone.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailRemovingFile.ini       \tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailRemovingFile.ini
+data = ZDRIVE\tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailTempFilesRemoved.ini   \tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailTempFilesRemoved.ini
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc_private/integrityservices.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,323 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Definition of CIntegrityServices
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology 
+*/
+
+#ifndef __INTEGRITYSERVICES_H__
+#define __INTEGRITYSERVICES_H__
+
+#include <e32base.h>
+#include <f32file.h>
+#include <e32ldr_private.h>
+#include <usif/sts/stsdefs.h>
+#include "integrityservicesevent.h"
+
+
+class RFs;
+
+namespace Usif
+{
+class CJournal;
+class CIntegrityTreeNode;
+/**
+ * This class maintains the integrity of installed software by ensuring that
+ * the device is always left in a consistent state. If a software modification
+ * process (install, upgrade or uninstall) is interrupted then that process is
+ * reverted, returning the device to its original state with no orphaned or
+ * missing files.
+ *
+ * @released
+ * @internalTechnology 
+ */
+class CIntegrityServices : public CBase
+	{
+	public:
+
+		/**
+		 * Constructs a new CIntegrityServices object specifying a path for
+		 * the journal files
+		 *
+		 * @code
+		 *
+		 *	TTime currentTime;
+		 *	currentTime.UniversalTime();
+		 *	_LIT(KIntegrityServicesPath, "\\private\\SID\\");
+		 *	iIntegrityServices = CIntegrityServices::NewL(currentTime.Int64(), 
+		 *											KIntegrityServicesPath);
+		 *
+		 * @endcode
+		 *
+		 * @param aTransactionID A unique ID provided by the client to
+		 *						 identify this transaction. It is suggested
+		 *						 that the client use the current time as the
+		 *						 unique ID. This value can then be shared
+		 *						 between different processes so that they use
+		 *						 the same journal.
+		 */
+		 static CIntegrityServices* NewL(TStsTransactionId aTransactionID);
+		
+		/**
+		 * Constructs a new CIntegrityServices object specifying a path for
+		 * the journal files and puts it on the cleanup stack
+		 * @param aTransactionID A unique ID provided by the client to
+		 *						 identify this transaction. It is suggested
+		 *						 that the client use the current time as the
+		 *						 unique ID. This value can then be shared
+		 *						 between different processes so that they use
+		 *						 the same journal.
+		 */
+		 static CIntegrityServices* NewLC(TStsTransactionId aTransactionID);
+		
+		 ~CIntegrityServices();
+		
+		/**
+		 * Notifies Integrity Services that a file or directory is being added
+		 * so that it can be removed if a rollback occurs. A record is created
+		 * in the journal file on the appropriate drive.
+		 *
+		 * @param aFileName - Name of file or directory including path
+		 */
+		 void RegisterNewL(const TDesC& aFileName);
+
+		/**
+		 * Instructs Integrity Services to create a new file. 
+		 * It is removed if a rollback occurs. A record is created
+		 * in the journal file on the appropriate drive.
+		 *
+		 * @param aFileName - Name of file or directory including path
+		 * @param newFile - Reference of a file handle that is set to the newly created file
+		 * @param aFileMode - File creation mode of the new file (see TFileMode documentation
+		 *                    for the possible mode or combination of modes)
+		 */
+		 void CreateNewL(const TDesC& aFileName, RFile &newFile, TUint aFileMode);
+		
+		/**
+		 * Removes the specified file or directory, first backing it up before
+		 * deleting it. A record is created in the journal file on the
+		 * appropriate drive.
+		 *
+		 * @param aFileName - Name of file or directory including path
+		 */
+		 void RemoveL(const TDesC& aFileName);
+		
+		/**
+		 * Notifies Integrity Services that a file or directory is being added
+		 * that must later be removed. A record is created in the journal file
+		 * on the appropriate drive.
+		 *
+		 * @param aFileName - Name of file including path
+		 */
+		 void RegisterTemporaryL(const TDesC& aFileName);
+
+		/**
+		 * Instructs Integrity Services to create a new temporary file. 
+		 * It is removed if a rollback occurs. A record is created
+		 * in the journal file on the appropriate drive.
+		 *
+		 * @param aFileName - Name of file including path
+		 * @param newFile - Reference of a file handle that is set to the newly created file
+		 * @param aFileMode - File creation mode of the new file (see TFileMode documentation
+		 *                    for the possible mode or combination of modes)
+		 */
+		 void CreateTemporaryL(const TDesC& aFileName, RFile &newFile, TUint aFileMode);
+
+		/**
+		 * Instructs Integrity Services to create a new file.
+		 * If the file already exists it's removed to a backup location first before the new file is created. 
+		 * The newly created file is removed if a rollback occurs and the old one is restored. 
+		 * A record is created in the journal file on the appropriate drive.
+		 * @param aFileName - Name of file or directory including path
+		 * @param newFile - Reference of a file handle that is set to the newly created file
+		 * @param aFileMode - File creation mode of the new file (see TFileMode documentation
+		 *                    for the possible mode or combination of modes)
+		 */
+		 void OverwriteL(const TDesC& aFileName, RFile &newFile, TUint aFileMode);
+
+		/**
+		 * Commits the current transaction by deleting backup, temporary and
+		 * journal files. The journal files are first refreshed so that
+		 * operations shared between processes and spread across multiple
+		 * drives are committed at the same time. If any journal file from this
+		 * transaction is not present or has already been rolledback the
+		 * commit will fail.
+		 */
+		 void CommitL();
+		
+		/**
+		 * Starts the recovery process for all drives.
+		 * Drive are rolled back independantly since removable media may be at
+		 * a different state to internal drives (which may have already been 
+		 * rolled back).
+		 *
+		 * @param aRecordAllRollbackEvents- This parameter specifies whether we should record events during the rollback.
+		 *  This allows continuing the rollback in case it has been interrupted. In most cases, this flag should be "on", however
+		 *   if we failed a previous roll back due to low space or low memory, it can prevent any roll back due to lack of resources for recording
+		 *   the rollback events. In these cases, it should be set to "off".
+		 *
+		 */
+		 void RollBackL(TBool aRecordAllRollbackEvents = ETrue);
+
+		/**
+		 * Returns the TransactionID
+		 *
+		 * @return a TStsTransactionId representing the transaction
+		 */
+		inline TStsTransactionId TransactionId() const;
+
+		/**
+		 * Scans through the transaction path and returns a list if transaction ids that have been found.
+		 *  
+		 * @param idArray - an array of TStsTransactionId in which the found ids are returned to the caller
+		 */
+		static void GetListOfTransactionsL(RArray<TStsTransactionId>& aIdArray);
+
+		/**
+		 * Roll back all transactions that it can find in the transaction path in the filesystem
+		 * Important note: The function tries the best effort to roll back all transactions found. 
+		 *                 Failing to roll back one transaction doesn't influence the roll back of others,
+		 *                 however if any of the transactions fail to roll back properly the function finally
+		 *                 will leave with the latest error encountered. (After it has tried to roll back all!)    
+		 */
+		static void RollbackAllL();
+
+		/**
+		 * Failure types - indicate when to simulate power failure during
+		 * testing
+		 */
+		enum TFailType
+			{
+			EFailNone,
+			EFailAddingNewFile,
+			EFailRemovingFile,
+			EFailAddingTempFile,
+			EFailRestoringFile,
+			EFailDeletingFile,
+			EFailInstallComplete,
+			EFailNewFilesRemoved,
+			EFailOldFilesRestored,
+			EFailTempFilesRemoved,
+			EFailBackupFilesRemoved,
+			};
+		
+		/**
+		 * Failure position - indicate when to simulate power failure during
+		 * testing
+		 */	
+		enum TFailPosition
+			{
+			EBeforeJournal,
+			EAfterJournal,
+			EBeforeAction,
+			EAfterAction
+			};
+			
+	private:
+		/**
+		 * Constructor for CIntegrityServices
+		 *
+		 * @param aTransactionID A unique ID provided by the client to
+		 *						 identify this transaction. It is suggested
+		 *						 that the client use the current time as the
+		 *						 unique ID. This value can then be shared
+		 *						 between different processes so that they use
+		 *						 the same journal.
+		 */
+		 CIntegrityServices(TStsTransactionId aTransactionID);
+		
+		/**
+		 * Second phase constructor for CIntegrityServices
+		 *
+		 */
+		 void ConstructL();
+						
+		/**
+		 * Removes a trailing slash from directory name, if needed.
+		 * 
+		 * @param aFileName the filename to modify. If the filename does not represent a directory, it is not modified
+		 */
+		static void NormalizeDirectoryName(TDes& aFileName);
+
+	private:
+	
+	    /**
+		 * Pointer to the journal - uses log file(s) for persistant storage
+		 * A log file is created on each drive involved so that they can be
+		 * recovered independantly.
+		 */
+		CJournal* iJournal;
+		
+		/**
+		 * Provided by the client to identify this transaction.
+		 */
+		TStsTransactionId iTransactionID;
+		
+		/**
+		 * The supplied path in which to read and write journal files.
+		 */
+		TPath iJournalPath;
+
+		 /**
+		 The drive number for the system drive.
+		 */
+		 TDriveNumber iSystemDrive;
+		 
+	private:
+	
+		RFs iFs;
+		
+		RLoader iLoader;
+	
+	public:
+	    /** 
+		 * Failure type (used only by test code)
+		 */
+		static TFailType iFailType;
+		
+		/** 
+		 * Failure position (used only by test code)
+		 */
+		static TFailPosition iFailPosition;
+		
+		/** 
+		 * Specify the name of the file to fail on (used only in test code)
+		 */
+		static TFileName iFailFileName;
+		static TBool iIsFailureTestingEnabled;
+		
+		/**
+		 * Test utility function
+		 *
+		 * @param aFailType		 The operation on which to fail
+		 * @param aFailPosition	 The position at which to fail
+		 * @param aFailFileName	 The filename on which to fail
+		 */
+		static void SimulatePowerFailureL(TFailType aFailType, TFailPosition aPosition, const TDesC& aFailFileName);
+	};
+
+inline TStsTransactionId CIntegrityServices::TransactionId() const
+	{
+	return iTransactionID;
+	}
+
+} //namespace
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc_private/integrityservicesevent.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Definition of TIntegrityServicesEvent
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology
+*/
+
+#ifndef __INTEGRITYSERVICESEVENT_H__
+#define __INTEGRITYSERVICESEVENT_H__
+
+namespace Usif
+{
+	
+/**
+ * Defines the events recorded in the journal file
+ */
+enum TIntegrityServicesEvent
+	{
+	ENone,
+	ERemovedFile,
+	EBackupFile,
+	ETempFile,
+	EAddedFile,
+	ECommitted,
+	EBackupFilesRemoved,
+	EAddedFilesRemoved,
+	ERemovedFilesRestored,
+	ETempFilesRemoved
+	};
+
+} //namespace
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc_private/integritytree.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,202 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology
+*/
+
+#ifndef __INTEGRITYTREE_H__
+#define __INTEGRITYTREE_H__
+
+#include <e32base.h>
+#include <f32file.h>
+#include "integrityservicesevent.h"
+#include "integrityservices.h"
+
+namespace Usif
+{
+
+class CIntegrityTreeNode;
+class CIntegrityTreeLeaf;
+
+typedef void(* TTreeWalkFunctionL)(const TDesC& aPath, CIntegrityTreeLeaf* aLeaf, RFs& aFs, RLoader& aLoader, CFileMan& aFileMan);
+
+class CIntegrityTreeLeaf : public CBase
+	{
+public:
+	/**
+	 * Constructs a file tree leaf, and places it on the cleanup stack
+	 *
+	 * @param aFileName The filename for this leaf node
+	 * @param aType The type of this leaf
+	 * @param aOwningJournal A reference to the filename of the owning journal
+	 * @return A fully constructed tree leaf
+	 */
+	static CIntegrityTreeLeaf* NewLC(const TDesC& aFileName, TIntegrityServicesEvent aType,
+		const TDesC& aOwningJournal);
+	
+	/**
+	 * Sets the peer node if applicable. This is used for leaves that
+	 * naturally form pairs, for example a removed file and its backup.
+	 * 
+	 * @param aPeer The leaf's peer.
+	 *
+	 */
+	
+	void SetPeer(CIntegrityTreeLeaf* aPeer);
+	
+	/**
+	 * Returns the leaf's peer, or null if none was set
+	 *
+	 * @return The leaf's peer node if available
+	 *
+	 */
+	
+	CIntegrityTreeLeaf* Peer();
+	
+	/**
+	 * Returns the type of this leaf. 
+	 *
+	 * @return This leaf's type
+	 */
+	 
+	TIntegrityServicesEvent Type();
+	
+	/**
+	 * Returns the file name for this leaf
+	 *
+	 * @return The file name for this leaf
+	 */
+	
+	const TDesC& Name();
+	
+	/**
+	 * Returns the name of the journal file that owns this leaf
+	 *
+	 * @return The associated journal file name
+	 */
+	
+	const TDesC& Journal();
+	
+	~CIntegrityTreeLeaf();
+private:
+	CIntegrityTreeLeaf(TIntegrityServicesEvent aType, const TDesC& aOwningJournal);
+	void ConstructL(const TDesC& aFileName);
+	
+private:
+	HBufC* iFileName;
+	TIntegrityServicesEvent iType;
+	CIntegrityTreeLeaf* iPeer;
+	
+	const TDesC& iOwningJournal;
+	
+	};
+	
+class CIntegrityTreeNode : public CBase
+	{
+public:
+	/**
+	 * Constructs a file tree node, and places it on the cleanup stack
+	 *
+	 * @param aDirectoryName The name of the directory this node represents
+	 * @return A fully constructed tree node
+	 */
+	
+	static CIntegrityTreeNode* NewL(const TDesC& aDirectoryName);
+	
+	/**
+	 * Constructs a file tree node
+	 *
+	 * @param aDirectoryName The name of the directory this node represents
+	 * @return A fully constructed tree node
+	 */
+	
+	static CIntegrityTreeNode* NewLC(const TDesC& aDirectoryName);
+	
+	/**
+	 * Returns the name of the directory this node represents
+	 * 
+	 * @return The name of this directory
+	 */
+	
+	const TDesC& Name();
+	
+	/**
+	 * Adds a leaf node to this tree structure, adding intermediate (directory) nodes along
+	 * the way as appropriate.
+	 * 
+	 * @param aFileName The fully qualified file name of the node to add
+	 * @param aType The type of the node to add
+	 * @param aOwningJournal The file name of the journal that owns this node
+	 * @return The leaf node added.
+	 *
+	 */
+	
+	CIntegrityTreeLeaf* AddNodeL(const TDesC& aFileName, TIntegrityServicesEvent aType, const TDesC& aOwningJournal);
+	
+	/**
+	 * Finds a node in the tree if it exists.
+	 *
+	 * @param aFileName The file name to find
+	 * @param aType The type of node to find
+	 * @return KErrNone if found, otherwise one of the system wide error codes
+	 */
+	
+	TInt FindNode(const TDesC& aFileName, TIntegrityServicesEvent aType);
+	
+	/**
+	 * Applies a function to every applicable node in the tree
+	 *
+	 * @param aFunc The function to apply
+	 * @param aTypeFilter The type of node to apply the function to
+	 * @param aFs A connected file server session
+	 * @param aLoader reference to the RLoader server session
+	 * @param aFileMan A constructed CFileMan object
+	 * @param aFailType The type of failure to induce if required. Used exclusively in testing.
+	 *
+	 */
+	
+	void WalkTreeL(TTreeWalkFunctionL aFunc, TIntegrityServicesEvent aTypeFilter,
+		RFs& aFs, RLoader& aLoader, CFileMan& aFileMan, 
+		CIntegrityServices::TFailType aFailType);
+		
+	~CIntegrityTreeNode();
+protected:
+	CIntegrityTreeLeaf* DoAddNodeL(TDes& aFileName, TIntegrityServicesEvent aType, const TDesC& aOwningJournal);
+	TInt DoFindNode(TDes& aFileName, TIntegrityServicesEvent aType);
+	void DoWalkTreeL(TDes& aPath, TTreeWalkFunctionL aFunc, TIntegrityServicesEvent aTypeFilter, 
+		RFs& aFs, RLoader& aLoader, CFileMan& aFileMan,
+		CIntegrityServices::TFailType aFailType);
+	
+private:
+	CIntegrityTreeNode();
+	void ConstructL(const TDesC& aDirectoryName);
+	
+private:
+	HBufC* iDirName;
+	RPointerArray<CIntegrityTreeNode> iDirectories;
+	RPointerArray<CIntegrityTreeLeaf> iFiles;
+	
+	friend class Usif::CIntegrityServices;
+	};
+
+} // namespace Usif
+
+#endif /* __INTEGRITYTREE_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc_private/journal.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,366 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Definition of CJournal
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology 
+*/
+
+#ifndef __JOURNAL_H__
+#define __JOURNAL_H__
+
+#include <e32base.h>
+#include <usif/sts/stsdefs.h>
+#include "journalfile.h"
+#include "integrityservicesevent.h"
+
+class RFs;
+
+namespace Usif
+{
+
+_LIT(KJournalExt, "log"); // extension for journal files on each drive
+_LIT(KDriveExt, "drv"); // extension for this transaction's drive array
+
+/**
+ * The journal stores integrity services events and their related filenames
+ * in files spread across several drives. Each drive has its own journal file
+ * so that recovery of drives can occur independantly. This class handles both
+ * the reading and writing of these files. The filename of each journal is:
+ *
+ * JournalPath|TransactionID
+ *   |--------|--------|
+ * ?:\????????\00000000.log
+ *
+ * @released
+ * @internalTechnology 
+ */
+class CJournal : public CBase
+	{
+	public:
+
+		/**
+		 * Constructs a new CJournal
+		 *
+		 * @code
+		 *
+		 *	TTime currentTime;
+		 *	currentTime.UniversalTime();
+		 *	_LIT(KIntegrityServicesPath, "\\private\\SID\\");
+		 *	iIntegrityServices = CIntegrityServices::NewL(currentTime.Int64(), 
+		 *											KIntegrityServicesPath);
+		 *
+		 * @endcode
+		 *
+		 * @param aFs reference to the file system provided by CIntegrityServices
+		 * @param aLoader reference to the RLoader provided by CIntegrityServices
+		 * @param aTransactionID A unique ID provided by the client to
+		 *						 identify this transaction. It is suggested
+		 *						 that the client use the current time as the
+		 *						 unique ID. This value can then be shared
+		 *						 between different processes so that they use
+		 *						 the same journal.
+		 * @param aPath			 The path in which to read and write journal
+		 *						 files. eg "\\private\\SID\\"
+		 */
+		static CJournal* NewL(RFs& aFs, RLoader& aLoader, TStsTransactionId aTransactionID, const TDesC& aPath);
+		
+		/**
+		 * Constructs a new CJournal and places it on the cleanup stack
+		 *
+		 * @code
+		 *
+		 *	TTime currentTime;
+		 *	currentTime.UniversalTime();
+		 *	_LIT(KIntegrityServicesPath, "\\private\\SID\\");
+		 *	iIntegrityServices = CIntegrityServices::NewL(currentTime.Int64(), 
+		 *											KIntegrityServicesPath);
+		 *
+		 * @endcode
+		 *
+		 * @param aFs reference to the file system provided by CIntegrityServices
+		 * @param aLoader reference to the RLoader provided by CIntegrityServices
+		 * @param aTransactionID A unique ID provided by the client to
+		 *						 identify this transaction. It is suggested
+		 *						 that the client use the current time as the
+		 *						 unique ID. This value can then be shared
+		 *						 between different processes so that they use
+		 *						 the same journal.
+		 * @param aPath			 The path in which to read and write journal
+		 *						 files. eg "\\private\\SID\\"
+		 */
+		static CJournal* NewLC(RFs& aFs, RLoader& aLoader, TStsTransactionId aTransactionID, const TDesC& aPath);
+		
+		virtual ~CJournal();
+
+		/**
+		 * Notifies Integrity Services that a file or directory is being added
+		 * so that it can be removed if a rollback occurs. A record is created
+		 * in the journal file on the appropriate drive.
+		 *
+		 * @param aFileName - Name of file or directory including path
+		 */
+		void AddL(const TDesC& aFileName);
+		
+		/**
+		 * Removes the specified file or directory, first backing it up before
+		 * deleting it. A record is created in the journal file on the
+		 * appropriate drive.
+		 *
+		 * @param aFileName - Name of file or directory including path
+		 * @param aFileName - the generated backup filename to return
+		 */
+		void RemoveL(const TDesC& aFileName, TDes& aBackupFileName);
+		
+		/**
+		 * Notifies Integrity Services that a file or directory is being added
+		 * that must later be removed. A record is created in the journal file
+		 * on the appropriate drive.
+		 *
+		 * @param aFileName - Name of file or directory including path
+		 */
+		void TemporaryL(const TDesC& aFileName);
+		
+		/** 
+		 * Commits all journals for this transaction 
+		 * */
+		void CommitL();		
+				
+		/**
+		 * Performs a file restore operation on a single drive
+		 * 
+		 * @param aDrive The drive to apply this operation to
+		 */
+		
+		void RestoreFilesL(TInt aDrive);
+			
+		/**
+		 * Rolls back the journal on all drives
+		 @see CIntegrityServices::RollbackL on explanation for aRecordAllRollbackEvents
+		 */
+		void RollBackL(TBool aRecordAllRollbackEvents = ETrue);
+		
+		/**
+		 * Creates the <sysdrive>:\<journal path>\<transactionID>.drv file's name 
+		 * This file is used by the journal to keep track of affected drives.
+		 * @param aTransactionID The transaction id for which the filename is to be assembled
+		 * @param aPath The journal path to be used when assembling the filename.
+		 * @param aDrvFileName The assembled fully qualfied filename is returned in this descriptor
+		 */
+		 static void CreateDrvFileNameL(TStsTransactionId aTransactionID, const TDesC& aPath, TDes& aDrvFileName);
+			
+		/**
+		 * Creates drive independent journal file name eg: \<journal path>\<transactionID>.<journalfileextension> and appends to aJournalFileName  
+		 * @param aTransactionID The transaction id for which the filename is to be assembled
+		 * @param aPath The journal path to be used when assembling the filename.
+		 * @param aJournalFileName The assembled drive independent filename is appended to the end of this descriptor
+		 */
+		 static void CreateJournalFileNameL(TStsTransactionId aTransactionID, const TDesC& aPath, TDes& aJournalFileName);
+		 
+		 static TInt RecoverTransactionIdFromDrvFileName(const TDesC& aDrvFileName, TStsTransactionId& aTransactionID);
+		 
+	private:
+	
+		CJournal(RFs& aFs, RLoader& aLoader);
+		
+		/**
+		 * Second phase constructor for CJournal
+		 *
+		 * @param aTransactionID A unique ID provided by the client to
+		 *						 identify this transaction. It is suggested
+		 *						 that the client use the current time as the
+		 *						 unique ID. This value can then be shared
+		 *						 between different processes so that they use
+		 *						 the same journal.
+		 * @param aPath			 The path in which to read and write journal
+		 *						 files. eg "\\private\\SID\\"
+		 */
+		void ConstructL(TStsTransactionId aTransactionID, const TDesC& aPath);
+
+		/**
+		 * Closes then deletes all files used by this journal. Records completed
+		 * drives to the drives array.
+		 */
+		void DeleteJournalFilesL();
+		
+		/**
+		 * Removes the journal file from the indicated drive if possible.
+		 * @see CIntegrityServices::RollbackL on explanation for aRecordAllRollbackEvents		 
+		 *
+		 */
+
+		void DeleteJournalFileL(TInt aDrive, TBool aRecordAllRollbackEvents = ETrue );
+		
+		/**
+		 * Removes the drives file from the system drive for this journal.
+		 *
+		 */
+		
+		void DeleteDrivesFileL();
+		
+		/**
+		 * Reads the array of drives used by this transaction from a file.
+		 */
+		void RefreshDrivesArrayL();
+		
+		/**
+		 * Opens a CJournalFile object on this drive, locking the journal file
+		 * and preventing use by other instances of CIntegrityServices using
+		 * the same Transaction ID. If a journal file does not exist it will
+		 * be created.
+		 *
+		 * @param aDrive the drive on which to open the journal file
+		 */
+		TInt PrepareToWriteL(TInt aDrive);
+		
+		/**
+		 * Adds the specified drive to the drives array used by this
+		 * transaction an records it in a file.
+		 *
+		 * @param aDrive the drive to add
+		 */
+		void UpdateDrivesFileL(TInt aDrive);
+		
+		/**
+		 * Performs the initial read of the drives file, and creates journal file
+		 * objects for every present drive already used in this transaction.
+		 */
+		void InitJournalsL();
+		
+		/**
+		 * Closes, then deletes the journal file opened with StartRollbackL().
+		@see CIntegrityServices::RollbackL on explanation for aRecordAllRollbackEvents		 
+		 */
+		void FinishRollbackL(TInt aDrive, TBool aRecordAllRollbackEvents = ETrue );
+		
+		/**
+		 * Returns the last event found in the journal files.
+		 * (used to determine how far the installation progressed)
+		 *
+		 * @return TIntegrityServicesEvent representing the last event in the journal
+		 */
+		TIntegrityServicesEvent LastEventL() const;
+				
+		/**
+		 * Performs a file delete operation on all drives referenced by this journal
+		 * 
+		 * @param aTypeFilter The type of file to apply this operation to
+		 * @param aFailType The type of test failure to induce during testing
+		 */	
+		void DeleteFilesL(TIntegrityServicesEvent aTypeFilter);
+
+		/**
+		 * Performs a file delete operation on a single drive
+		 * 
+		 * @param aTypeFilter The type of file to apply this operation to
+		 * @param aDrive The drive to apply this operation to
+		 * @param aFailType The type of test failure to induce during testing
+		 */
+		
+		void DeleteFilesL(TIntegrityServicesEvent aTypeFilter, TInt aDrive);		
+		
+		/**
+		 * Write a journal event to a specific drive
+		 *
+		 * @param aEvent the TEvent describing the current operation
+		 * @param aDrive The drive to write the event to
+		 * @param aSerializeEventToJournal Specifies whether the journal event should be serialized
+		 */
+		 
+		void WriteJournalEventL(TIntegrityServicesEvent aEvent, TInt aDrive, TBool aSerializeEventToJournal);
+		
+  		/**
+  		 * Performs recovery of the journal for a particular drive.
+  		 * 
+  		 * @param aDrive	The drive to rollback
+		 * @param aRecordAllRollbackEvents @see CIntegrityServices::RollbackL
+  		 */
+  		void RollBackDriveL(TInt aDrive, TBool aRecordAllRollbackEvents);
+  		
+		/**
+		 * Writes the event to all journal files
+		 *
+		 * @param aEvent the TEvent describing the current operation
+		 */
+		void WriteJournalEventL(TIntegrityServicesEvent aEvent);
+		
+		/**
+		 * Opens all journal file(s) belonging to this transaction, first
+		 * reading and verifying the existing contents. The files remain
+		 * open (and therefore locked) until FinishCommitL() is called.
+		 */
+		void StartCommitL();
+		
+		/*
+		 * Closes, then deletes the journal file(s) opened with StartCommitL().
+		 */
+		void FinishCommitL();
+
+		/**
+		 * Retrieves the last event from the journal on a specific drive
+		 *
+		 * @param aDrive The drive for which to retrieve the last event
+		 * @return TIntegrityServicesEvent representing the last event in the journal
+		 */
+		
+		TIntegrityServicesEvent LastEventL(TInt aDrive) const;		
+
+		/**
+		 * Retrieves the matching index in iJournalFiles for a journal which matches aDrive. Returns KErrNotFound if there's no journal for the drive
+		 */
+
+		TInt FindJournalFileIndexL(TInt aDrive) const;
+		
+	    /**
+		 * Reference to opened file server session
+		 */
+		RFs& iFs;
+		
+		/**
+		 * Reference to RLoader server session
+		 */
+		RLoader& iLoader;
+		/**
+		 * The generic journal filename (does not include a drive)
+		 */
+		TFileName iJournalFileName;
+		
+		/**
+		 * The filename for the drives array (located on the system drive)
+		 * This file stores the drives used, and drives completed for this
+		 * transaction.
+		 */
+		TFileName iDriveArrayFileName;
+
+		/**
+		 * The array of completed drives for this transaction
+		 */
+		RArray<TInt> iCompletedDrives;
+		 
+		RArray<TInt> iAllDrives;
+		
+		/**
+		 * Array of CJournalFile objects
+		 */
+		RPointerArray<CJournalFile> iJournalFiles;
+	};
+
+} ///namespace
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc_private/journalfile.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,232 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Definition of CJournalFile
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology
+*/
+
+#ifndef __JOURNALFILE_H__
+#define __JOURNALFILE_H__
+
+#include <e32base.h>
+#include <s32file.h>
+
+#include "integrityservicesevent.h"
+#include "integritytree.h"
+
+namespace Usif
+{
+	
+/**
+ * The purpose of this class is to wrap a RFileWriteStream so that multiple
+ * journal files can be held open by the client. This eliminates the need to 
+ * constantly open and close files. 
+ *
+ * @released
+ * @internalTechnology 
+ */
+class CJournalFile : public CBase
+	{
+	public:
+		
+		/**
+		 * Constructs a new CJournalFile
+		 *
+		 * @param aFs reference to the supplied file system session
+		 * @param aLoader reference to the RLoader session
+		 * @param aFileName the filename of the journal
+		 */
+		static CJournalFile* NewL(RFs& aFs, RLoader& aLoader, const TDesC& aFileName, TInt aDrive);
+
+		/**
+		 * Constructs a new CJournalFile an places it on the cleanup stack
+		 *
+		 * @param aFs reference to the supplied file system session
+		 * @param aLoader reference to the RLoader session
+		 * @param aFileName the filename of the journal
+		 */
+		static CJournalFile* NewLC(RFs& aFs, RLoader& aLoader, const TDesC& aFileName, TInt aDrive);
+		
+		virtual ~CJournalFile();
+
+		/**
+		 * Records an event in this journal file.
+		 *
+		 * @param aEvent	the event to record
+		 * @param aEvent	specifies whether the event should be serialized. If set to False, only the "in-memory" state of the journal is changed
+		 This parameter is used in possible low memory or low disk space conditions.
+		 */
+		void EventL(TIntegrityServicesEvent aEvent, TBool aSerializeEventToJournal = ETrue);
+		
+		/**
+		 * Notifies Integrity Services that a file or directory is being added
+		 * so that it can be removed if a rollback occurs. A record is created
+		 * in the journal file on the appropriate drive.
+		 *
+		 * @param aFileName - Name of file or directory including path
+		 */
+		void AddL(const TDesC& aFileName);
+		
+		/**
+		 * Checks if the file being removed has already been journalled for
+		 * adding in the same journal file.  If it has been, nothing is
+		 * journalled and the backup file name is set to zero length. Otherwise
+		 * a record is journalled for the removal and the backup filename is
+		 * set to the appropriate next name to use.
+		 *
+		 * @param aFileName - Name of file or directory including path
+		 * @param aBackupFileName - the generated backup filename to return or
+		 *                          zero-length if the file doesn't need to
+		 *                          be backed up.
+		 */
+		void RemoveL(const TDesC& aFileName, TDes& aBackupFileName);
+		
+		/**
+		 * Notifies Integrity Services that a file or directory is being added
+		 * that must later be removed. A record is created in the journal file
+		 * on the appropriate drive.
+		 *
+		 * @param aFileName - Name of file or directory including path
+		 */
+		void TemporaryL(const TDesC& aFileName);
+		
+		/**
+		 * Performs an operation on the file tree structure
+		 *
+		 * @param aFunc A function to apply to all nodes
+		 * @param aTypeFilter The type of node to apply the function to
+		 * @param aFailType The type of failure to induce, used exclusively in testing.
+		 *
+		 */
+		
+		void JournalOperationL(TTreeWalkFunctionL aFunc, TIntegrityServicesEvent aTypeFilter,
+			CIntegrityServices::TFailType aFailType);
+		
+		/**
+		 * Returns the last event found in the journal, used to determine how far the 
+		 * installation progressed
+		 *
+		 * @return TIntegrityServicesEvent representing the last event in the file
+		 */
+		TIntegrityServicesEvent LastEvent() const;
+		
+		/**
+		 * Checks that the filename is valid and complete
+		 *
+		 * @param aFs a reference to an open file system session
+		 * @param aFileName the filename to check
+		 * @return TInt representing the drive specified in this filename
+		 */
+		static TInt CheckFileNameL(RFs& aFs, const TDesC& aFileName);
+		
+		/**
+		 * Accessor method that tells us which drive this journal file is on
+		 */
+		
+		TInt Drive();
+				
+		/**
+		 * Closes any file handle held open by this object. The journal file object
+		 * must not be used again after this call.
+		 */
+		 		
+		void Close();
+		
+	private:
+		/**
+		 * Constructor for CJournalFile
+		 *
+		 * @param aFs a reference to the supplied file system session
+		 * @param aLoader reference to the RLoader session
+		 */
+		CJournalFile(RFs& aFs, RLoader& aLoader, TInt aDrive);
+		
+		/**
+		 * Second phase constructor for CJournalFile
+		 *
+		 * @param aFileName the filename of the journal
+		 */
+		void ConstructL(const TDesC& aFileName);
+		
+		/**
+		 * Reads and verifies the journal file
+		 */
+		void ReadL();
+
+		/**
+		 * Reads and verifies a journal entry from the supplied stream
+		 *
+		 * @param aJournalStream the stream to read
+		 * @param aDrive used to verify files referred to are only from that drive
+		 */
+		void ReadEntryL(RFileReadStream& aJournalStream, TInt aDrive);
+		
+		/**
+		 * Prepares to write to the journal file by opening an RFileWriteStream
+		 */
+		void PrepareToWriteL();
+		
+		/**
+		 * Generates the next backup filename for this journal file.
+		 */
+		void NextBackupFileNameL(TDes& aBackupFileName);
+
+		/**
+		 * Reference to the supplied file system session
+		 */
+		RFs& iFs;
+
+		/**
+		 * Reference to RLoader server session
+		 */
+		RLoader& iLoader;
+		
+		/**
+		 * The write stream for this journal
+		 */
+		RFileWriteStream iWriteStream;
+		
+		/**
+		 * The last journal event recorded in the journal
+		 */
+		TIntegrityServicesEvent iLastEvent;
+		
+		CIntegrityTreeNode* iTreeRoot;
+		
+		/**
+		 * The count of backup files in this journal
+		 */
+		TInt iBackupFilesCount;
+		
+		/**
+		 * The filename of this journal
+		 */
+		TFileName iJournalFileName;
+		
+		/**
+		 * The drive number this journal file is on
+		 */
+		
+		TInt iDrive;
+	};
+
+} //namespace
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc_private/operationfunctions.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology
+*/
+
+#ifndef __OPERATIONFUNCTIONS_H__
+#define __OPERATIONFUNCTIONS_H__
+
+#include <e32base.h>
+#include <f32file.h>
+#include <e32ldr_private.h>
+#include <e32uid.h>
+
+namespace Usif
+{
+class CIntegrityTreeLeaf;
+
+void IntegrityDeleteFileL(const TDesC& aPath, CIntegrityTreeLeaf* aLeaf, RFs& aFs, RLoader& aLoader, 
+						  CFileMan& aFileMan);
+void IntegrityRestoreFileL(const TDesC& aPath, CIntegrityTreeLeaf* aLeaf, RFs& aFs, RLoader& aLoader, 
+	 					   CFileMan& aFileMan);
+void RemoveDirectoryTreeL(RFs& aFs, const TDesC& aFileName);
+
+} // namespace Usif
+
+#endif /* __OPERATIONFUNCTIONS_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc_private/stscommon.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sts.h
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+
+#ifndef __STSCOMMON_H__
+#define __STSCOMMON_H__
+
+namespace Usif
+	{
+	_LIT(KStsServerName, "!SoftwareTransactionServicesServer");
+	_LIT(KStsServerImgName, "softwaretransactionservices.exe");
+	const TInt KStsVerMajor = 1;		
+	const TInt KStsVerMinor = 0;		
+	const TInt KStsVerBuild = 0;		
+		
+    const TInt KUidStsClient         = 0x10285BCE;
+    const TInt KUidStsRecoveryClient = 0x10285BD0;
+    const TInt KUidStsServer         = 0x10285BCD;
+    const TInt KUidDaemon 			 = 0x10202DCE;
+    
+    enum TStsClientServerFunctionType
+		{
+		//client to server
+		ECreateTransaction,  //creates a new transaction
+		EOpenTransaction,    //opens an existing transaction
+		ECommit,             //instructs the server to commit the transaction that is currently associated with the session
+		ERollBack,           //instructs the server to roll back the transaction that is currently associated with the session
+		EGetId,              //instructs the server to retrieve the id of the transaction that is currently associated with the session
+
+		ERegisterNew,        //notifies the server that a new file was added by client
+		ECreateNew,          //instructs the server to create a new file and return a handle to it to the client
+		ERemove,             //instructs the server to remove a file
+		ERegisterTemporary,  //notifies the server that a new temporary file was added by client
+		ECreateTemporary,    //instructs the server to create a new temporary file and return a handle to it to the client
+		EOverwrite,          //instructs the server to create a new file (owervriting the existing one)
+		
+		//recovery of all transactions
+		ERollBackAllPending
+		};
+		/**
+			Delay in microseconds before the STS Server is shut down, after
+			the last remaining session has been closed.
+		 */
+		const TInt KStsServerShutdownPeriod = 2 * 1000 * 1000;
+
+		//IPC argument slot in client-server messaging
+		const TInt KFilePathIPCSlot 	= 0;
+		const TInt KIdIPCSlot       	= 1;
+		const TInt KFileHandleIPCSlot	= 2;
+		const TInt KFileModeIPCSlot	    = 3;
+		
+	}//endof namespace Usif
+#endif
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc_private/stsserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Defines server-side classes which are used to implement the STS server.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+ 
+
+#ifndef __STSSERVER_H__
+#define __STSSERVER_H__
+
+#include <f32file.h>
+#include <scs/scsserver.h>
+#include <usif/sts/stsdefs.h>
+#include "stscommon.h"
+#include "integrityservices.h"
+#include "transactionwrapper.h"
+
+namespace Usif
+	{
+	class CStsServerSession;
+	
+	class CStsServer : public CScsServer
+	/**
+		The CScsServer-derived object which is used to generate STS sessions for the STS clients.
+	 */
+		{
+		friend class CStsServerSession;
+		
+		public:
+			static CStsServer* NewLC();
+					
+			~CStsServer();
+			
+			//Implement from CScsServer
+			CScsSession* DoNewSessionL(const RMessage2& aMessage);
+		
+			//Transaction management functions
+			CIntegrityServices* CreateTransactionL();
+			CIntegrityServices* AttachTransactionL(TStsTransactionId aTransactionID);
+			void ReleaseTransactionL(CIntegrityServices* &aTransactionPtr, TBool aMarkAsCompleted=EFalse);
+			void FinaliseTransactionL(CIntegrityServices* &aTransactionPtr);
+			
+		protected:
+			CPolicyServer::TCustomResult CustomSecurityCheckL(const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing);		
+
+		private:
+			CStsServer();
+			void ConstructL();
+			//Transaction management helper functions
+			TInt FindActiveTransaction(TStsTransactionId aTransactionID);
+			TStsTransactionId CreateTransactionID();
+			TBool  IsExistingTransaction(TStsTransactionId aTransactionID);
+			
+			//custom security check
+			TBool CheckIfFileModificationAllowedL(const RMessage2& aMsg);
+			
+			//rolls back all pending transactions
+			void RollBackAllPendingL();
+			
+		private:
+//			RFs iFs;						
+			RPointerArray<CReferenceCountedTransactionWrapper> iTransactionWrapperContainer;
+			}; //End of class CStsServer
+	
+	} // End of namespace USIF				
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc_private/stsserversession.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* stsserver.h
+* Defines server-side class which is used to implement the STS server session.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+ 
+
+#ifndef __STSSERVERSESSION_H__
+#define __STSSERVERSESSION_H__
+
+#include <scs/scsserver.h>
+#include "stscommon.h"
+#include "integrityservices.h"
+
+namespace Usif
+	{
+    class CStsServer;
+    
+	class CStsServerSession : public CScsSession
+	/**
+		The instance of this class is used to service STS client requests and 
+		is created for each client. 
+	 */
+		{
+	public:
+		static CStsServerSession* NewL(CStsServer &aServer, const RMessage2& aMessage);
+		~CStsServerSession();
+				
+		// implement CScsSession
+		TBool DoServiceL(TInt aFunction, const RMessage2& aMessage);
+
+	private:
+		CStsServerSession(CStsServer& aServer);
+		void ConstructL();
+		
+	private:
+		CIntegrityServices* iTransactionPtr;
+		};
+	
+	} // End of namespace SCRSERVER_H				
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/inc_private/transactionwrapper.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+
+#ifndef __TRANSACTIOWRAPPER_H__
+#define __TRANSACTIOWRAPPER_H__
+
+#include <e32def.h>
+#include <e32base.h>
+#include "integrityservices.h"
+#include <usif/sts/stsdefs.h>
+
+namespace Usif
+{
+	class CReferenceCountedTransactionWrapper : public CBase
+	{
+	public:
+		static CReferenceCountedTransactionWrapper* NewLC(TStsTransactionId aTransactionID);
+		~CReferenceCountedTransactionWrapper();
+		CIntegrityServices* Attach();
+		TInt Detach();
+		TStsTransactionId TransactionId() const {return iTrPtr->TransactionId();}
+		TBool IsCompleted(){return iCompleted;}
+		void SetCompleted(){iCompleted=ETrue;}
+	private:
+		CReferenceCountedTransactionWrapper();
+		void ConstructL(TStsTransactionId aTransactionID);
+		
+	private:
+		TInt iRefCount;
+		CIntegrityServices* iTrPtr;
+		TBool iCompleted;
+	};
+
+}//namespace Usif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/source/client/sts.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* sts.h
+*
+*/
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+#include <usif/sts/sts.h>
+#include "stscommon.h"
+#include <e32cmn.h>
+#include <e32uid.h>
+
+using namespace Usif;
+
+
+void RStsSession::ConnectL()
+	{
+	__ASSERT_DEBUG(iHandle == NULL, User::Invariant());
+	TInt err = RScsClientBase::Connect(KStsServerName, TVersion(KStsVerMajor,
+			KStsVerMinor, KStsVerBuild), KStsServerImgName, TUidType(
+			KExecutableImageUid, KNullUid, TUid::Uid(KUidStsServer)));
+	User::LeaveIfError(err);
+	}
+
+EXPORT_C RStsSession::RStsSession()
+: RScsClientBase()
+	{
+	// empty
+	}
+
+EXPORT_C void RStsSession::Close()
+	{
+	RScsClientBase::Close();
+	}
+
+EXPORT_C TStsTransactionId RStsSession::CreateTransactionL()
+	{
+	// It is possible to create several transactions on the same session, assuming that they are all sequential
+	if (iHandle == NULL)
+		ConnectL();
+	TStsTransactionId trID;
+	TPckg<TStsTransactionId> idPkg(trID);
+	TIpcArgs ipcArgs;
+	ipcArgs.Set(KIdIPCSlot, &idPkg);
+	User::LeaveIfError(CallSessionFunction(ECreateTransaction, ipcArgs));
+	return trID;
+	}
+
+EXPORT_C void RStsSession::OpenTransactionL(TStsTransactionId aTransactionID)
+	{
+	if (iHandle == NULL)
+		ConnectL();
+	TPckgC<TStsTransactionId> idPkg(aTransactionID);
+	TIpcArgs ipcArgs;
+	ipcArgs.Set(KIdIPCSlot, &idPkg);
+	User::LeaveIfError(CallSessionFunction(EOpenTransaction, ipcArgs));
+	}
+
+EXPORT_C void RStsSession::RegisterNewL(const TDesC& aFileName)
+	{
+	TIpcArgs ipcArgs;
+	ipcArgs.Set(KFilePathIPCSlot, &aFileName);
+	User::LeaveIfError(CallSessionFunction(ERegisterNew, ipcArgs));
+	}
+
+EXPORT_C void RStsSession::CreateNewL(const TDesC& aFileName, RFile &aFile, TUint aCreateMode)
+	{
+	__ASSERT_DEBUG(((KFilePathIPCSlot!=KFileHandleIPCSlot) &&
+					(KFilePathIPCSlot!=KFileModeIPCSlot)   &&
+					(KFileModeIPCSlot!=KFileHandleIPCSlot)), User::Invariant());
+
+	TPckgBuf<TInt> fileHandlePkg;
+	TPckgC<TUint> pkgFileMode(aCreateMode);
+	TIpcArgs ipcArgs;
+	ipcArgs.Set(KFilePathIPCSlot, &aFileName);
+	ipcArgs.Set(KFileHandleIPCSlot, &fileHandlePkg);
+	ipcArgs.Set(KFileModeIPCSlot, &pkgFileMode);
+	TInt fileServerHandle = User::LeaveIfError(CallSessionFunction(ECreateNew, ipcArgs));
+	User::LeaveIfError(aFile.AdoptFromServer(fileServerHandle, fileHandlePkg()));
+	}
+
+EXPORT_C void RStsSession::RemoveL(const TDesC& aFileName)
+	{
+	TIpcArgs ipcArgs;
+	ipcArgs.Set(KFilePathIPCSlot, &aFileName);
+	User::LeaveIfError(CallSessionFunction(ERemove, ipcArgs));
+	}
+
+EXPORT_C void RStsSession::RegisterTemporaryL(const TDesC& aFileName)
+	{
+	TIpcArgs ipcArgs;
+	ipcArgs.Set(KFilePathIPCSlot, &aFileName);
+	User::LeaveIfError(CallSessionFunction(ERegisterTemporary, ipcArgs));
+	}
+
+EXPORT_C void RStsSession::CreateTemporaryL(const TDesC& aFileName, RFile &aFile, TUint aCreateMode)
+	{
+	__ASSERT_DEBUG(((KFilePathIPCSlot!=KFileHandleIPCSlot) &&
+					(KFilePathIPCSlot!=KFileModeIPCSlot)   &&
+					(KFileModeIPCSlot!=KFileHandleIPCSlot)), User::Invariant());
+
+	TPckgBuf<TInt> fileHandlePkg;
+	TPckgC<TUint> pkgFileMode(aCreateMode);
+	TIpcArgs ipcArgs;
+	ipcArgs.Set(KFilePathIPCSlot, &aFileName);
+	ipcArgs.Set(KFileHandleIPCSlot, &fileHandlePkg);
+	ipcArgs.Set(KFileModeIPCSlot, &pkgFileMode);
+	TInt fileServerHandle = User::LeaveIfError(CallSessionFunction(ECreateTemporary, ipcArgs));
+	User::LeaveIfError(aFile.AdoptFromServer(fileServerHandle, fileHandlePkg()));
+	}
+
+EXPORT_C void RStsSession::OverwriteL(const TDesC& aFileName, RFile &aFile, TUint aCreateMode)
+	{
+	__ASSERT_DEBUG(((KFilePathIPCSlot!=KFileHandleIPCSlot) &&
+					(KFilePathIPCSlot!=KFileModeIPCSlot)   &&
+					(KFileModeIPCSlot!=KFileHandleIPCSlot)), User::Invariant());
+
+	TPckgBuf<TInt> fileHandlePkg;
+	TPckgC<TUint> pkgFileMode(aCreateMode);
+	TIpcArgs ipcArgs;
+	ipcArgs.Set(KFilePathIPCSlot, &aFileName);
+	ipcArgs.Set(KFileHandleIPCSlot, &fileHandlePkg);
+	ipcArgs.Set(KFileModeIPCSlot, &pkgFileMode);
+	TInt fileServerHandle = User::LeaveIfError(CallSessionFunction(EOverwrite, ipcArgs));
+	User::LeaveIfError(aFile.AdoptFromServer(fileServerHandle, fileHandlePkg()));
+	}
+
+EXPORT_C void RStsSession::CommitL()
+	{
+	User::LeaveIfError(CallSessionFunction(ECommit));
+	Close();
+	}
+
+EXPORT_C void RStsSession::RollBackL()
+	{
+	User::LeaveIfError(CallSessionFunction(ERollBack));
+	Close();
+	}
+
+EXPORT_C TStsTransactionId RStsSession::TransactionIdL()
+	{
+	TStsTransactionId id;
+	TPckg<TStsTransactionId> idPkg(id);
+	TIpcArgs ipcArgs;
+	ipcArgs.Set(KIdIPCSlot, &idPkg);
+	User::LeaveIfError(CallSessionFunction(EGetId, ipcArgs));
+	return id;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/source/client/stsrecovery.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include <usif/sts/sts.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "stsrecovery.h"
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "stscommon.h"
+#include <e32cmn.h>
+#include <e32uid.h>
+
+namespace Usif
+	{
+	void RStsRecoverySession::ConnectL()
+		{
+		TInt err = RScsClientBase::Connect(KStsServerName, 
+				                           TVersion(KStsVerMajor, KStsVerMinor, KStsVerBuild), 
+				                           KStsServerImgName, 
+				                           TUidType (KExecutableImageUid, KNullUid, TUid::Uid(KUidStsServer)));
+		User::LeaveIfError(err);
+		}
+	
+	EXPORT_C RStsRecoverySession::RStsRecoverySession()
+		:	RScsClientBase()
+		{
+		}
+
+	EXPORT_C void RStsRecoverySession::Close()
+		{
+		RScsClientBase::Close();
+		}
+
+	EXPORT_C void RStsRecoverySession::RollbackAllPendingL()
+		{
+		ConnectL();
+		User::LeaveIfError(CallSessionFunction(ERollBackAllPending));
+		Close();
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/source/server/integrityservices.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,381 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CIntegrityServices implementation
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology
+*/
+
+#include "integrityservices.h"
+#include "journal.h"
+#include "operationfunctions.h"
+#include "usiflog.h"
+
+#include <f32file.h>
+
+using namespace Usif;
+
+_LIT(KTransactionPath, "\\sys\\install\\integrityservices\\");
+
+CIntegrityServices::TFailType CIntegrityServices::iFailType = EFailNone;
+CIntegrityServices::TFailPosition CIntegrityServices::iFailPosition = EBeforeJournal;
+TFileName CIntegrityServices::iFailFileName;
+TBool CIntegrityServices::iIsFailureTestingEnabled = EFalse;
+
+
+/**
+ * This is a trivial C class that just encapsulates a TEntryArray object in order to 
+ * facilitate its storage on the heap.
+ *
+ * @released
+ * @internalComponent 
+ */
+class CEntryArray : public CBase
+	{
+public:
+	inline TEntryArray& operator()();
+
+private:
+	/**
+	 * Container to hold file entries
+	 */
+	TEntryArray iEntryArray;
+	};
+
+inline TEntryArray& CEntryArray::operator()()
+	{
+	return iEntryArray;
+	}
+
+ CIntegrityServices* CIntegrityServices::NewL(TStsTransactionId aTransactionID)
+	{
+	CIntegrityServices* self = CIntegrityServices::NewLC(aTransactionID);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+ CIntegrityServices* CIntegrityServices::NewLC(TStsTransactionId aTransactionID)
+	{
+	CIntegrityServices* self = new(ELeave) CIntegrityServices(aTransactionID);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+ CIntegrityServices::CIntegrityServices(TStsTransactionId aTransactionID) : iTransactionID(aTransactionID)
+	{
+	}
+
+ CIntegrityServices::~CIntegrityServices()
+	{
+	delete iJournal;
+	iFs.Close();
+	
+	iLoader.Close();
+	}
+
+ void CIntegrityServices::ConstructL()
+	{
+	DEBUG_PRINTF2(_L("CIntegrityServices::ConstructL() - Opening session with  Session ID %X."), iTransactionID);
+	
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iFs.ShareProtected()); //needed as new RFiles are to be passed back to client's side
+	User::LeaveIfError(iLoader.Connect());
+
+	// store the journal path and create the journal
+	TParsePtrC pathPtr(KTransactionPath);
+	iJournalPath = pathPtr.Path();
+	iJournal = CJournal::NewL(iFs, iLoader, iTransactionID, iJournalPath);
+	iSystemDrive = ::RFs::GetSystemDrive();
+	}
+ 
+const TInt KIntegrityServicesSimulatedBatteryFailure=-10205; 
+ 
+/*static*/ void CIntegrityServices::SimulatePowerFailureL(TFailType aFailType, TFailPosition aFailPosition, const TDesC& aFailFileName)
+	{
+	if (!iIsFailureTestingEnabled)
+		return;
+	
+	if(iFailType == aFailType && iFailPosition == aFailPosition && iFailFileName == aFailFileName)
+		{
+		User::Leave(KIntegrityServicesSimulatedBatteryFailure);
+		}
+	}
+
+/*static*/ void CIntegrityServices::NormalizeDirectoryName(TDes& aFileName)
+{
+	// Directories are represented in the integrity tree and integrity journal exactly as files,
+	// without the trailing slash 
+	TInt lastCharPos = aFileName.Length() - 1;
+	if ( lastCharPos >= 0 && aFileName[lastCharPos] == KPathDelimiter &&
+		 aFileName.Locate(KPathDelimiter) != lastCharPos) // Take care not to remove slash from "c:\" and the like
+		{
+		aFileName.Delete(lastCharPos, 1);
+		}			
+}
+
+ void CIntegrityServices::RegisterNewL(const TDesC& aFileName)
+	{
+	DEBUG_PRINTF3(_L("CIntegrityServices::RegisterNewL() - Session %X, File: %S."),	iTransactionID, &aFileName);
+
+	HBufC* localFilenameHeap = aFileName.AllocLC();
+	TPtr localFilename = localFilenameHeap->Des();
+	NormalizeDirectoryName(localFilename); // If it is a directory name, make sure to normalize it
+		
+	// Record the added file or directory in the journal
+	SimulatePowerFailureL(EFailAddingNewFile, EBeforeJournal, aFileName);
+	iJournal->AddL(localFilename);
+	SimulatePowerFailureL(EFailAddingNewFile, EAfterJournal, aFileName);
+	CleanupStack::PopAndDestroy(localFilenameHeap);
+	}
+
+ void VerifyMkDirErrorL(TInt err)
+	{
+	if(err != KErrNone && err != KErrAlreadyExists)
+		{
+		User::Leave(err);
+		}	
+	}
+ 
+ void ProcessNewFileRegistrationResultL(TInt err, RFs& aFs, const TDesC& aFileName, RFile& aFile)
+	{
+	if(err!= KErrNone)
+		{
+		//if we hit this point it means we successfully created the new file however registering with the transaction has  failed
+		//so we have to remove the new file to make the journal and the file system consistent
+		aFile.Close();
+		aFs.Delete(aFileName);
+		User::Leave(err);
+		}	
+	}
+
+ void CIntegrityServices::CreateNewL(const TDesC& aFileName, RFile &newFile, TUint aFileMode)
+	{
+	DEBUG_PRINTF3(_L("CIntegrityServices::CreateNewL() - Session %X, File: %S."),	iTransactionID, &aFileName);
+	TInt err = iFs.MkDirAll(aFileName); //first we have to create the full directory path to aFileName otherwise RFs::Create will fail
+	VerifyMkDirErrorL(err);
+	User::LeaveIfError(newFile.Create(iFs, aFileName, aFileMode));
+	TRAPD(regResult, RegisterNewL(aFileName));	
+	ProcessNewFileRegistrationResultL(regResult, iFs, aFileName, newFile); //checks if the registration failed and cleans up the file in the filesystem if it did
+	}
+
+ void CIntegrityServices::RemoveL(const TDesC& aFileName)
+	{
+	DEBUG_PRINTF3(_L("CIntegrityServices::RemoveL() - Session %X, File: %S."), iTransactionID, &aFileName);
+
+	// before doing anything check that the file or directory exists
+	TEntry entry;
+	
+	TInt res = iFs.Entry(aFileName, entry);
+	if (res == KErrNotFound || res == KErrPathNotFound)
+		return; // If the file is not present, do nothing. Returning an error would require the user of the API to do additional checks
+	User::LeaveIfError(res);
+
+	// We might need to grow this buffer by one byte later
+	HBufC* localFilenameHeap = HBufC::NewLC(aFileName.Length() + 1);
+	TPtr localFilename = localFilenameHeap->Des();
+	localFilename.Copy(aFileName);
+	
+	TBool isFilenameDir = entry.IsDir();
+	// The "if" below is not functionally necessary, but it is a slight optimization - 
+	// so that we won't attempt to normalize directory name on files. The optimization is not
+	// done in AddL or NormalizeDirectoryName itself, since we don't have future use for TEntry there, and the cost for RFs::Entry overweighs the one for NormalizeDirectoryName
+	if ( isFilenameDir ) 
+		{
+		NormalizeDirectoryName(localFilename);
+		}
+
+	RBuf backupFileName;
+	backupFileName.CreateL(KMaxFileName);
+	CleanupClosePushL(backupFileName);
+	SimulatePowerFailureL(EFailRemovingFile, EBeforeJournal, aFileName);
+	iJournal->RemoveL(localFilename, backupFileName);
+		
+	if (backupFileName.Length())
+		{
+		SimulatePowerFailureL(EFailRemovingFile, EAfterJournal, aFileName);
+
+		TInt err = iFs.MkDirAll(backupFileName);
+		VerifyMkDirErrorL(err);
+
+		SimulatePowerFailureL(EFailRemovingFile, EBeforeAction, aFileName);
+			err = iFs.Rename(localFilename, backupFileName);
+			DEBUG_PRINTF4(_L("CIntegrityServices::RemoveL() - Renamed %S as %S error %d"), &localFilename, &backupFileName, err);
+			User::LeaveIfError(err);
+		SimulatePowerFailureL(EFailRemovingFile, EAfterAction, aFileName);
+		}
+	else
+		{
+		DEBUG_PRINTF2(_L("CIntegrityServices::RemoveL() - %S already backed up"), &aFileName);
+		SimulatePowerFailureL(EFailRemovingFile, EBeforeAction, aFileName);
+		// If backupFileName is zero-length, the file was added earlier
+		// in the same journal and doesn't need to be backed up.
+		if (isFilenameDir)
+			{
+			CFileMan* fileman = CFileMan::NewL(iFs);
+			CleanupStack::PushL(fileman);			
+			// Make sure to append slash before calling RmDir - otherwise it deletes the parent directory
+			if (localFilename[localFilename.Length()-1] != KPathDelimiter)
+	  			{
+  				localFilename.Append(KPathDelimiter);
+  				}			
+			User::LeaveIfError(fileman->RmDir(localFilename)); // A directory cannot be a paged exec., so we don't have to use iLoader
+			CleanupStack::PopAndDestroy(fileman);
+			}
+		else
+			{
+			User::LeaveIfError(iLoader.Delete(aFileName));
+			}
+		SimulatePowerFailureL(EFailRemovingFile, EAfterAction, aFileName);			
+		}
+
+	// Don't leave an empty directory structure, try pruning it
+	RemoveDirectoryTreeL(iFs, aFileName);
+
+	CleanupStack::PopAndDestroy(2, localFilenameHeap); // backupFileName
+	}
+
+ void CIntegrityServices::RegisterTemporaryL(const TDesC& aFileName)
+	{
+	DEBUG_PRINTF3(_L("CIntegrityServices::RegisterTemporaryL() - Session %X, File: %S."), iTransactionID, &aFileName);
+
+	// record the temporary file or directory in the journal
+	SimulatePowerFailureL(EFailAddingTempFile, EBeforeJournal, aFileName);
+	iJournal->TemporaryL(aFileName);
+	SimulatePowerFailureL(EFailAddingTempFile, EAfterJournal, aFileName);
+	}
+
+ void CIntegrityServices::CreateTemporaryL(const TDesC& aFileName, RFile &newFile, TUint aFileMode)
+	{
+	DEBUG_PRINTF3(_L("CIntegrityServices::CreateTemporaryL() - Session %X, File: %S."), iTransactionID, &aFileName);
+
+	TInt err = iFs.MkDirAll(aFileName); //first we have to create the full directory path to aFileName otherwise RFs::Create will fail
+	VerifyMkDirErrorL(err);
+	User::LeaveIfError(newFile.Create(iFs, aFileName, aFileMode));
+	TRAPD(regResult, RegisterTemporaryL(aFileName));
+	ProcessNewFileRegistrationResultL(regResult, iFs, aFileName, newFile);
+	}
+
+ void CIntegrityServices::OverwriteL(const TDesC& aFileName, RFile &newFile, TUint aFileMode)
+	{
+	DEBUG_PRINTF3(_L("CIntegrityServices::OverwriteL() - Session %X, File: %S."), iTransactionID, &aFileName);
+
+	TBool b;
+	TInt err;
+	if((err=iFs.IsFileOpen(aFileName, b))== KErrNone) //returned error code shows whether the file exists or not; the bool value is ignored
+		{
+		//file exists remove first
+		RemoveL(aFileName);
+		}
+	else
+		{
+		if(err != KErrNotFound)
+			{
+			User::Leave(err);
+			}
+		}
+	CreateNewL(aFileName, newFile, aFileMode);
+	}
+
+ void CIntegrityServices::CommitL()
+	{
+	DEBUG_PRINTF2(_L("CIntegrityServices::CommitL() - Session %X."), iTransactionID);	
+	iJournal->CommitL();
+	}
+
+ void CIntegrityServices::RollBackL(TBool aRecordAllRollbackEvents /* = ETrue */)
+	{
+	DEBUG_PRINTF2(_L("CIntegrityServices::RollBackL() - transaction %X"), iTransactionID);
+	iJournal->RollBackL(aRecordAllRollbackEvents);
+	}
+
+/*static*/ void CIntegrityServices::GetListOfTransactionsL(RArray<TStsTransactionId>& aIdArray)
+	{
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+	TDriveUnit systemDrive(::RFs::GetSystemDrive());
+	RBuf fileSpec;
+	fileSpec.CreateL(systemDrive.Name(), KMaxFileName);
+	CleanupClosePushL(fileSpec);
+	fileSpec.Append(KTransactionPath);
+	fileSpec.Append(KMatchAny);
+	fileSpec.Append(KExtDelimiter);
+	fileSpec.Append(KDriveExt);
+
+	RDir dir;
+	TInt err = dir.Open(fs, fileSpec, KEntryAttNormal);
+	CleanupStack::PopAndDestroy(&fileSpec);
+	if (err == KErrPathNotFound || err == KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy(&fs);
+		return; // These errors are not considered fatal - there may be no journals present
+		}
+	User::LeaveIfError(err);
+	CleanupClosePushL(dir);
+	
+	CEntryArray* entryArrayContainer = new (ELeave) CEntryArray;
+	TEntryArray& entryArray = (*entryArrayContainer)();
+	err = dir.Read(entryArray);
+	CleanupStack::PopAndDestroy(&dir);
+	CleanupStack::PushL(entryArrayContainer);	
+	if (err != KErrNone && err != KErrEof)
+		{
+		User::Leave(err);
+		}
+	TInt entryCount(entryArray.Count());
+	for (TInt index = 0; index < entryCount; ++index)
+		{
+		TStsTransactionId transactionID;
+		if (CJournal::RecoverTransactionIdFromDrvFileName(
+				entryArray[index].iName, transactionID) == KErrNone)
+			{
+			aIdArray.AppendL(transactionID);
+			}
+		}
+	CleanupStack::PopAndDestroy(entryArrayContainer);
+	CleanupStack::PopAndDestroy(&fs);
+	}
+
+/*static*/ void CIntegrityServices::RollbackAllL()
+	{
+	RArray<TStsTransactionId> transactionIDs;
+	CleanupClosePushL(transactionIDs);
+	CIntegrityServices::GetListOfTransactionsL(transactionIDs);
+	TInt numberOfTransactions(transactionIDs.Count());
+	TInt lastError=KErrNone;
+	DEBUG_PRINTF2(_L("CIntegrityServices::RollbackAllL() %d transactions have been found."), numberOfTransactions );							
+	for(TInt i=0; i<numberOfTransactions; ++i)
+		{
+		DEBUG_PRINTF2(_L("CIntegrityServices::RollbackAllL() Trying to roll back transaction %X"), transactionIDs[i]);
+		TRAPD(err,
+			CIntegrityServices* transactionPtr = CIntegrityServices::NewLC(transactionIDs[i]);
+			transactionPtr->RollBackL(EFalse); // Specify not to record roll back events. If we failed in the middle of a previous roll back, due to lack of resources we shouldn't be trying to record more events
+			CleanupStack::PopAndDestroy(transactionPtr);
+			); //failing to roll back one transaction shouldn't affect the overall rollback all procedure
+		if(err!=KErrNone)
+			{
+			lastError=err; //remember last error and leave with that error code indicating an error in the overall procedure
+			}
+		DEBUG_PRINTF2(_L("CIntegrityServices::RollbackAllL() Rolled back transaction %X"), transactionIDs[i]);			
+		}
+	CleanupStack::PopAndDestroy(&transactionIDs);
+	User::LeaveIfError(lastError);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/source/server/integritytree.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,281 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology
+*/
+
+#include "integritytree.h"
+
+#include "integrityservices.h"
+#include <f32file.h>
+
+namespace Usif
+{
+CIntegrityTreeLeaf* CIntegrityTreeLeaf::NewLC(const TDesC& aFileName, TIntegrityServicesEvent aType,
+	const TDesC& aOwningJournal)
+	{
+	CIntegrityTreeLeaf* self = new (ELeave) CIntegrityTreeLeaf(aType, aOwningJournal);
+	CleanupStack::PushL(self);
+	self->ConstructL(aFileName);
+	return self;
+	}
+	
+CIntegrityTreeLeaf::~CIntegrityTreeLeaf()
+	{
+	delete iFileName;
+	}
+
+CIntegrityTreeLeaf::CIntegrityTreeLeaf(TIntegrityServicesEvent aType, const TDesC& aOwningJournal)
+	: iType(aType), iOwningJournal(aOwningJournal)
+	{
+	}
+	
+void CIntegrityTreeLeaf::ConstructL(const TDesC& aFileName)	
+	{
+	iFileName = aFileName.AllocL();
+	}
+
+CIntegrityTreeLeaf* CIntegrityTreeLeaf::Peer()
+	{
+	return iPeer;
+	}
+	
+TIntegrityServicesEvent CIntegrityTreeLeaf::Type()
+	{
+	return iType;
+	}
+	
+const TDesC& CIntegrityTreeLeaf::Name()
+	{
+	return *iFileName;
+	}
+	
+const TDesC& CIntegrityTreeLeaf::Journal()
+	{
+	return iOwningJournal;
+	}
+	
+void CIntegrityTreeLeaf::SetPeer(CIntegrityTreeLeaf* aPeer)
+	{
+	iPeer = aPeer;
+	} 
+	
+CIntegrityTreeNode* CIntegrityTreeNode::NewL(const TDesC& aDirectoryName)
+	{
+	CIntegrityTreeNode* self = CIntegrityTreeNode::NewLC(aDirectoryName);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CIntegrityTreeNode* CIntegrityTreeNode::NewLC(const TDesC& aDirectoryName)
+	{
+	CIntegrityTreeNode* self = new (ELeave) CIntegrityTreeNode;
+	CleanupStack::PushL(self);
+	self->ConstructL(aDirectoryName);
+	return self;
+	}
+	
+	
+const TDesC& CIntegrityTreeNode::Name()
+	{
+	return *iDirName;
+	}
+	
+CIntegrityTreeLeaf* CIntegrityTreeNode::AddNodeL(const TDesC& aFileName, TIntegrityServicesEvent aType, const TDesC& aOwningJournal)
+	{
+	RBuf filename;
+	filename.CreateL(aFileName, aFileName.Length());
+	CleanupClosePushL(filename);
+	CIntegrityTreeLeaf* leaf = DoAddNodeL(filename, aType, aOwningJournal);
+	CleanupStack::PopAndDestroy(&filename);
+	return leaf;
+	}
+
+TInt CIntegrityTreeNode::FindNode(const TDesC& aFileName, TIntegrityServicesEvent aType)
+	{
+	RBuf filename;
+	TInt found = 0;
+	TRAPD(err, 
+			filename.CreateL(aFileName, aFileName.Length());
+			CleanupClosePushL(filename);
+			found = DoFindNode(filename, aType);
+			CleanupStack::PopAndDestroy(&filename);
+		);
+	if (err != KErrNone)
+		{
+		return err;
+		}
+	return found;
+	}
+
+void CIntegrityTreeNode::WalkTreeL(TTreeWalkFunctionL aFunc, TIntegrityServicesEvent aTypeFilter,
+	RFs& aFs, RLoader& aLoader, CFileMan& aFileMan, CIntegrityServices::TFailType aFailType)
+	{
+	RBuf filename;
+	filename.CreateL(*iDirName, KMaxFileName);
+	CleanupClosePushL(filename);
+	DoWalkTreeL(filename, aFunc, aTypeFilter, aFs, aLoader, aFileMan, aFailType);
+	CleanupStack::PopAndDestroy(&filename);
+	}
+	
+CIntegrityTreeLeaf* CIntegrityTreeNode::DoAddNodeL(TDes& aFileName, TIntegrityServicesEvent aType, const TDesC& aOwningJournal)
+	{
+	TInt pathDividerPos = aFileName.Locate(KPathDelimiter);
+	User::LeaveIfError(pathDividerPos); // The must be at least /this/ directory name
+	
+	TPtrC dirPtr(aFileName.Left(pathDividerPos));
+	if (dirPtr.CompareF(*iDirName) != 0)
+		{
+		User::Leave(KErrBadName); // this doesn't belong to us.
+		}
+	
+	// remove the directory section of the path.
+	aFileName.Delete(0, pathDividerPos+1);
+	
+	// Now, see if we need to pass it on up the chain.
+	pathDividerPos = aFileName.Locate(KPathDelimiter);
+	if (pathDividerPos == KErrNotFound)
+		{
+		// This is now just a file name, add a new file name leaf here.
+		CIntegrityTreeLeaf* leaf = CIntegrityTreeLeaf::NewLC(aFileName, aType, aOwningJournal);
+		iFiles.AppendL(leaf);
+		CleanupStack::Pop(leaf);
+		return leaf;
+		}
+	else
+		{
+		// There are more directories in the chain... See if we have an entry...
+		dirPtr.Set(aFileName.Left(pathDividerPos));
+	 
+		TInt dirCount(iDirectories.Count());
+		for (TInt i = 0; i < dirCount; ++i)
+			{
+			if (dirPtr.CompareF(iDirectories[i]->Name()) == 0)
+				{
+				return iDirectories[i]->DoAddNodeL(aFileName, aType, aOwningJournal);
+				}
+			}
+		// doesn't yet exist. Add it to the tree.
+		CIntegrityTreeNode* node = CIntegrityTreeNode::NewLC(dirPtr);
+		iDirectories.AppendL(node);
+		CleanupStack::Pop(node);
+		
+		// pass the remaining path down the tree
+		return node->DoAddNodeL(aFileName, aType, aOwningJournal);
+		}
+	}
+	
+TInt CIntegrityTreeNode::DoFindNode(TDes& aFileName, TIntegrityServicesEvent aType)
+	{
+	TInt pathDividerPos = aFileName.Locate(KPathDelimiter);
+	if (pathDividerPos < 0)
+		return pathDividerPos; // The must be at least one path delimiter in the file name	
+	
+	TPtrC dirPtr(aFileName.Left(pathDividerPos));
+	if (dirPtr.CompareF(*iDirName) != 0)
+		{
+		return KErrBadName; // this doesn't belong to us.
+		}
+	
+	// remove the directory section of the path.
+	aFileName.Delete(0, pathDividerPos+1);
+	
+	// Now, see if we need to pass it on up the chain.
+	pathDividerPos = aFileName.Locate(KPathDelimiter);
+	if (pathDividerPos == KErrNotFound)
+		{
+		TInt nameCount(iFiles.Count());
+		for (TInt i = 0; i < nameCount; ++i)
+			{
+			if (iFiles[i]->Type() == aType &&
+				iFiles[i]->Name().CompareF(aFileName) == 0)
+				{
+				return KErrNone;
+				}
+			}
+		return KErrNotFound;
+		}
+	else
+		{
+		// There are more directories in the chain... See if we have an entry...
+		dirPtr.Set(aFileName.Left(pathDividerPos));
+	 
+		TInt dirCount(iDirectories.Count());
+		for (TInt i = 0; i < dirCount; ++i)
+			{
+			if (dirPtr.CompareF(iDirectories[i]->Name()) == 0)
+				{
+				return iDirectories[i]->DoFindNode(aFileName, aType);
+				}
+			}
+		return KErrNotFound;
+		}
+	}
+	
+void CIntegrityTreeNode::DoWalkTreeL(TDes& aPath, TTreeWalkFunctionL aFunc, 
+	TIntegrityServicesEvent aTypeFilter, RFs& aFs, RLoader& aLoader, CFileMan& aFileMan,
+	CIntegrityServices::TFailType aFailType)
+	{
+	aPath.Append(KPathDelimiter);
+	
+	// Feed all the files for this node to the walk function
+	
+	TInt fileCount(iFiles.Count());
+	TInt i;
+	for (i = 0; i < fileCount; ++i)
+		{
+		CIntegrityTreeLeaf* leaf = iFiles[i];
+		if (leaf->Type() == aTypeFilter)
+			{
+			CIntegrityServices::SimulatePowerFailureL(aFailType, CIntegrityServices::EBeforeAction, leaf->Name());
+			aFunc(aPath, leaf, aFs, aLoader, aFileMan);
+			CIntegrityServices::SimulatePowerFailureL(aFailType, CIntegrityServices::EAfterAction, leaf->Name());
+			}
+		}
+	
+	// Walk the child nodes for this tree	
+	TInt len = aPath.Length();
+	TInt dirCount(iDirectories.Count());
+	for (i = 0; i < dirCount; ++i)
+		{
+		CIntegrityTreeNode* node = iDirectories[i];
+		aPath.SetLength(len);
+		aPath.Append(node->Name());
+		node->DoWalkTreeL(aPath, aFunc, aTypeFilter, aFs, aLoader, aFileMan, aFailType);
+		}
+	}
+	
+CIntegrityTreeNode::CIntegrityTreeNode()
+	{
+	}
+	
+void CIntegrityTreeNode::ConstructL(const TDesC& aDirectoryName)
+	{
+	iDirName = aDirectoryName.AllocL();
+	}
+	
+CIntegrityTreeNode::~CIntegrityTreeNode()
+	{
+	delete iDirName;
+	iDirectories.ResetAndDestroy();
+	iFiles.ResetAndDestroy();
+	}
+}//End of namespace Usif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/source/server/journal.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,646 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CJournal implementation
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology
+*/
+
+#include "journal.h"
+#include "journalfile.h"
+#include "operationfunctions.h"
+#include "usiflog.h"
+#include <f32file.h>
+
+using namespace Usif;
+
+CJournal* CJournal::NewL(RFs& aFs, RLoader& aLoader, TStsTransactionId aTransactionID, const TDesC& aPath)
+	{
+	CJournal* self = CJournal::NewLC(aFs, aLoader, aTransactionID, aPath);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CJournal* CJournal::NewLC(RFs& aFs, RLoader& aLoader, TStsTransactionId aTransactionID, const TDesC& aPath)
+	{
+	CJournal* self = new(ELeave) CJournal(aFs, aLoader);
+	CleanupStack::PushL(self);
+	self->ConstructL(aTransactionID, aPath);
+	return self;
+	}
+
+CJournal::~CJournal()
+	{
+	iCompletedDrives.Reset();
+	iAllDrives.Reset();
+	iJournalFiles.ResetAndDestroy();
+	}
+
+CJournal::CJournal(RFs& aFs, RLoader& aLoader) : iFs(aFs), iLoader(aLoader)
+	{
+	}
+
+void CJournal::ConstructL(TStsTransactionId aTransactionID, const TDesC& aPath)
+	{
+	// construct the generic journal filename (does not include a drive)
+	CJournal::CreateJournalFileNameL(aTransactionID, aPath, iJournalFileName);
+	// construct the filename for the drives journal (located on the system drive)
+	CJournal::CreateDrvFileNameL(aTransactionID, aPath, iDriveArrayFileName);	
+	InitJournalsL();
+	}
+
+void CJournal::InitJournalsL()
+	{	
+	RefreshDrivesArrayL();
+	
+	// attempt to read the journals from all drives
+	
+	TInt drivesCount(iAllDrives.Count());
+	RBuf journal;
+	journal.CreateL(KMaxFileName);
+	CleanupClosePushL(journal);
+	for (TInt i = 0; i < drivesCount; ++i)
+		{
+		TDriveUnit drive(iAllDrives[i]);
+		journal = drive.Name();
+		journal.Append(iJournalFileName);
+
+		// do not load completed drives
+		if (iCompletedDrives.Find(drive) != KErrNotFound)
+			{
+			continue;
+			}
+		
+		CJournalFile* journalFile = NULL;
+		TRAPD(err, journalFile = CJournalFile::NewL(iFs, iLoader, journal, iAllDrives[i]));
+		
+		// ignore error'd drives. These will either not be rolled back,
+		// or the user will find out later we can't write or commit to them.
+		
+		if (err == KErrNone)
+			{
+			CleanupStack::PushL(journalFile);
+			iJournalFiles.AppendL(journalFile);
+			CleanupStack::Pop(journalFile);
+			}
+		}
+	CleanupStack::PopAndDestroy(&journal);
+	}
+
+TInt CJournal::FindJournalFileIndexL(TInt aDrive) const
+	{
+	for(TInt index = 0; index < iJournalFiles.Count(); ++index)
+		if (iJournalFiles[index]->Drive() == aDrive)
+			return index;
+		
+	return KErrNotFound;
+	}
+
+void CJournal::DeleteJournalFilesL()
+	{
+	// delete all journal files
+	for(TInt drive = 0; drive < iJournalFiles.Count(); drive++)
+		{		
+		DeleteJournalFileL(iJournalFiles[drive]->Drive());		
+		}	
+	iJournalFiles.ResetAndDestroy();
+	
+	// delete the drive array only after all journals have been completed
+	// (committed or rolled back)
+	if (iAllDrives.Count() == iCompletedDrives.Count())
+		{
+		DeleteDrivesFileL();
+		}
+	}
+
+void VerifyDirectoryDeletionErrorL(TInt err)
+	{
+	if(err != KErrNone && err != KErrNotFound && err != KErrPathNotFound && err != KErrInUse && err != KErrAccessDenied)
+		{
+		User::Leave(err);
+		}	
+	}
+
+
+void CJournal::DeleteJournalFileL(TInt aDrive, TBool aRecordAllRollbackEvents /* = ETrue */)
+	{	
+	TInt index = FindJournalFileIndexL(aDrive);
+	iJournalFiles[index]->Close();
+	TDriveUnit journalDrive(aDrive);
+	RBuf journal;
+	journal.CreateL(journalDrive.Name(), KMaxFileName);
+	CleanupClosePushL(journal);
+	journal.Append(iJournalFileName);
+
+	User::LeaveIfError(iFs.Delete(journal));
+
+	// record that we have completed this drive
+	if (aRecordAllRollbackEvents)
+		UpdateDrivesFileL(aDrive);
+		
+	iCompletedDrives.InsertInOrder(aDrive);
+	
+	VerifyDirectoryDeletionErrorL(iFs.RmDir(journal));
+	
+	CleanupStack::PopAndDestroy(&journal);
+	}
+	
+void CJournal::DeleteDrivesFileL()
+	{
+	iCompletedDrives.Reset();
+	TInt err = KErrNone;
+	
+	err = iFs.Delete(iDriveArrayFileName);
+			
+	if(err != KErrNone && err != KErrPathNotFound && err != KErrNotFound)
+		{
+		User::Leave(err);
+		}
+    
+    // try removing the journal path
+	TParse directory;
+	User::LeaveIfError(directory.SetNoWild(iDriveArrayFileName, NULL, NULL));
+	while(!directory.IsRoot())
+		{
+		// try to remove this directory
+		TInt err = iFs.RmDir(directory.DriveAndPath());
+		if(err != KErrNone)
+			{
+			VerifyDirectoryDeletionErrorL(err);
+			break;
+			}
+		User::LeaveIfError(directory.PopDir());
+		}
+	}
+
+// This function parses all the drives registered in the main drive file for this transaction.
+// This function also checks which drives have been completed.
+// As a result, two main drive sets: iCompletedDrives and iAllDrives are populated.
+void CJournal::RefreshDrivesArrayL()
+	{
+	// clear existing journal drive arrays prior to reloading them from file
+	iCompletedDrives.Reset();
+	iAllDrives.Reset();
+	
+	RFileReadStream journalStream;
+	TInt err = journalStream.Open(iFs, iDriveArrayFileName, EFileStream);
+	if (err == KErrNotFound || err == KErrPathNotFound)
+		return;
+	User::LeaveIfError(err);
+
+	CleanupClosePushL(journalStream);
+	while(ETrue)
+		{
+		// read the next entry in the drives' file
+		TInt drive = 0;
+		TRAP(err, drive = journalStream.ReadInt32L());
+		if (err == KErrEof)
+			break;
+		
+		User::LeaveIfError(err);
+
+		if(iAllDrives.Find(drive) == KErrNotFound)
+			{
+			// first instance indicates this drive was part of this
+			// transaction
+			iAllDrives.InsertInOrder(drive);
+			}
+		else
+			{
+			// second instance indicates this drive has been committed
+			// or rolled back
+			iCompletedDrives.InsertInOrder(drive);
+			}
+		}
+	CleanupStack::PopAndDestroy(&journalStream);
+	}
+
+void CJournal::UpdateDrivesFileL(TInt aDrive)
+	{
+	RFile file;
+	CleanupClosePushL(file);
+	// try opening the file if it already exists
+	TInt err = file.Open(iFs, iDriveArrayFileName, EFileWrite);
+	if (err != KErrNone)
+		{
+		if (err == KErrNotFound || err == KErrPathNotFound)
+			{
+			err = iFs.MkDirAll(iDriveArrayFileName);
+			if(err != KErrNone && err != KErrAlreadyExists)
+				{
+				User::Leave(err);
+				}
+			// journal does not exist, try creating one
+			User::LeaveIfError(file.Create(iFs, iDriveArrayFileName, EFileWrite));
+			}
+		else
+			{
+			User::Leave(err);
+			}
+		}
+	
+	TInt fileSize;
+	User::LeaveIfError(file.Size(fileSize));
+	
+	// attach to end of file for writing
+	RFileWriteStream stream;
+	stream.Attach(file, fileSize);	
+	CleanupStack::Pop(&file); // file ownership
+	CleanupClosePushL(stream);// transfered to stream
+	stream.WriteInt32L(aDrive);
+	CleanupStack::PopAndDestroy(&stream);
+	}
+
+void CJournal::StartCommitL()
+	{
+	DEBUG_PRINTF3(_L("CJournal::StartCommitL() - iJournalFileName %S   iDriveArrayFileName %S"), &iJournalFileName, &iDriveArrayFileName);							
+	// To commit, all drives must exist. No exceptions.
+	if (iJournalFiles.Count() != iAllDrives.Count())
+		{
+		User::Leave(KErrNotReady);
+		}
+		
+	// none of the drives must yet be completed...
+	if (iCompletedDrives.Count() != 0)
+		{
+		User::Leave(KErrNotSupported);
+		}
+		
+	// synch up all the drives
+	TInt drivesCount(iJournalFiles.Count());
+	for (TInt i = 0; i < drivesCount; ++i)
+		{
+ 		//Check if Journal drives are present.
+ 		TDriveInfo info;
+ 		if (iFs.Drive(info, iJournalFiles[i]->Drive())!=KErrNone || info.iType==EMediaNotPresent)
+ 			{
+ 			User::Leave(KErrNotReady);	
+ 			}
+		}		
+	}
+
+void CJournal::FinishCommitL()
+	{
+	DEBUG_PRINTF3(_L("CJournal::FinishCommitL() - iJournalFileName %S   iDriveArrayFileName %S"), &iJournalFileName, &iDriveArrayFileName);							
+	DeleteJournalFilesL();
+	
+	// return the journal to a state where it can be used again,
+	// in the insane event that someone wants to...
+	// (I'm looking at you sisregistry)
+	iCompletedDrives.Reset();
+	iAllDrives.Reset();
+	}
+
+void CJournal::FinishRollbackL(TInt aDrive, TBool aRecordAllRollbackEvents /* = ETrue */)
+	{
+	DEBUG_PRINTF4(_L("CJournal::FinishRollbackL() - iJournalFileName %S   iDriveArrayFileName %S   aDrive %d"), &iJournalFileName, &iDriveArrayFileName, aDrive);
+	DeleteJournalFileL(aDrive, aRecordAllRollbackEvents);
+	
+	if (iCompletedDrives.Count() == iAllDrives.Count())
+		{
+		DeleteDrivesFileL();
+		}
+	}
+
+// This function verifies whether a journal exists for this drive in this transaction.
+// If it doesn't, then the journal file is created and added to iJournalFiles
+TInt CJournal::PrepareToWriteL(TInt aDrive)
+	{	
+	TInt index = FindJournalFileIndexL(aDrive);
+	if (index >= 0) // The journal already exists
+		{
+		return index;
+		}
+	
+	__ASSERT_ALWAYS(index == KErrNotFound, User::Invariant());
+	// The journal does not exist - we need to create one
+	
+	TDriveUnit drive(aDrive);
+	RBuf journalPath;
+	journalPath.CreateL(drive.Name(), KMaxFileName);
+	CleanupClosePushL(journalPath);
+	journalPath.Append(iJournalFileName);
+
+	CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, journalPath, aDrive);
+	iJournalFiles.AppendL(journalFile);
+	CleanupStack::Pop(journalFile);
+	CleanupStack::PopAndDestroy(&journalPath);
+	
+	UpdateDrivesFileL(aDrive);
+	
+	User::LeaveIfError(iAllDrives.InsertInOrder(aDrive));
+
+	return iJournalFiles.Count() - 1; // Since we appended the entry, we return the last index
+	}
+	
+void CJournal::DeleteFilesL(TIntegrityServicesEvent aTypeFilter)
+	{
+	TInt journalsCount(iJournalFiles.Count());
+	for (TInt i = 0; i < journalsCount; ++i)
+		{
+		iJournalFiles[i]->JournalOperationL(IntegrityDeleteFileL, aTypeFilter, CIntegrityServices::EFailDeletingFile);
+		}
+	}
+	
+void CJournal::RestoreFilesL(TInt aDrive)
+	{
+	TInt index = FindJournalFileIndexL(aDrive);
+	User::LeaveIfError(index);
+	iJournalFiles[index]->JournalOperationL(IntegrityRestoreFileL, ERemovedFile, CIntegrityServices::EFailRestoringFile);
+	}
+		
+void CJournal::DeleteFilesL(TIntegrityServicesEvent aTypeFilter, TInt aDrive)
+	{
+	TInt index = FindJournalFileIndexL(aDrive);
+	User::LeaveIfError(index);
+	iJournalFiles[index]->JournalOperationL(IntegrityDeleteFileL, aTypeFilter, CIntegrityServices::EFailDeletingFile);
+	}
+
+void CJournal::WriteJournalEventL(TIntegrityServicesEvent aEvent)
+	{
+	// write the event to each journal file
+	for(TInt index = 0; index < iJournalFiles.Count(); index++)
+		{
+		iJournalFiles[index]->EventL(aEvent);
+		}
+	}
+	
+void CJournal::WriteJournalEventL(TIntegrityServicesEvent aEvent, TInt aDrive, TBool aSerializeEventToJournal)
+	{
+	TInt index = FindJournalFileIndexL(aDrive);
+	User::LeaveIfError(index);
+	iJournalFiles[index]->EventL(aEvent, aSerializeEventToJournal);
+	}
+
+void CJournal::AddL(const TDesC& aFileName)
+	{
+	DEBUG_PRINTF2(_L("CJournal::AddL() - aFileName %S"), &aFileName);							
+	// write the filename to the journal on the same drive
+	TInt drive = CJournalFile::CheckFileNameL(iFs, aFileName);
+	TInt index = PrepareToWriteL(drive);
+	iJournalFiles[index]->AddL(aFileName);
+	}
+
+void CJournal::RemoveL(const TDesC& aFileName, TDes& backupFileName)
+	{
+	DEBUG_PRINTF2(_L("CJournal::RemoveL() - aFileName %S"), &aFileName);							
+	// write the filename to the journal on the same drive
+	TInt drive = CJournalFile::CheckFileNameL(iFs, aFileName);
+	TInt index = PrepareToWriteL(drive);
+	iJournalFiles[index]->RemoveL(aFileName, backupFileName);
+	}
+
+void CJournal::TemporaryL(const TDesC& aFileName)
+	{
+	DEBUG_PRINTF2(_L("CJournal::TemporaryL() - aFileName %S"), &aFileName);							
+	// write the filename to the journal on the same drive
+	TInt drive = CJournalFile::CheckFileNameL(iFs, aFileName);
+	TInt index = PrepareToWriteL(drive);
+	iJournalFiles[index]->TemporaryL(aFileName);
+	}
+
+TIntegrityServicesEvent CJournal::LastEventL() const
+	{
+	TIntegrityServicesEvent lastEvent = ENone;
+	// work out the "real" last event
+	// journals states may be at different since they cannot all be written
+	// to simultaneously
+	for(TInt index = 0; index < iJournalFiles.Count(); index++)
+		{
+		TInt position = iCompletedDrives.Find(iJournalFiles[index]->Drive());
+		
+		if(position!=KErrNotFound) 
+			continue; //don't check completed drives
+		
+		TIntegrityServicesEvent currentJournalLastEvent = iJournalFiles[index]->LastEvent();
+		if (currentJournalLastEvent >= lastEvent)
+			lastEvent = currentJournalLastEvent;
+		}//for
+	return lastEvent;
+	}
+	
+TIntegrityServicesEvent CJournal::LastEventL(TInt aDrive) const
+	{
+	DEBUG_PRINTF2(_L("CJournal::LastEventL() - aDrive %d"), aDrive);							
+	TInt index = FindJournalFileIndexL(aDrive);
+	User::LeaveIfError(index);
+
+	return iJournalFiles[index]->LastEvent();
+	}
+
+/*static*/ void CJournal::CreateDrvFileNameL(TStsTransactionId aTransactionID, const TDesC& aPath, TDes& aDrvFileName)
+	{
+	DEBUG_PRINTF3(_L("CJournal::CreateDrvFileNameL() - aTransactionID %X aPath %S"), aTransactionID, &aPath);							
+	aDrvFileName = TDriveUnit(::RFs::GetSystemDrive()).Name();
+	aDrvFileName.Append(aPath);
+	aDrvFileName.AppendNumUC(static_cast<TUint32>(aTransactionID), EHex);
+	aDrvFileName.Append(KExtDelimiter);
+	aDrvFileName.Append(KDriveExt);
+	}
+
+/*static*/ void CJournal::CreateJournalFileNameL(TStsTransactionId aTransactionID, const TDesC& aPath, TDes& aJournalFileName)
+	{
+	aJournalFileName.Append(aPath);
+	aJournalFileName.AppendNumUC(static_cast<TUint32>(aTransactionID), EHex);
+	aJournalFileName.Append(KExtDelimiter);
+	aJournalFileName.Append(KJournalExt);
+	}
+
+/*static*/ TInt CJournal::RecoverTransactionIdFromDrvFileName(const TDesC& aDrvFileName, TStsTransactionId& aTransactionID)
+	{
+	TLex lex(aDrvFileName);
+	TUint32 tmp;
+	TInt result = lex.Val(tmp, EHex);
+	aTransactionID = static_cast<TStsTransactionId>(tmp);
+	return result;
+	}
+
+void CJournal::RollBackDriveL(TInt aDrive, TBool aRecordAllRollbackEvents)
+	{
+	switch (LastEventL())
+		{
+		// Transaction did not complete, rollback required
+		case ERemovedFile:
+		case EBackupFile:
+		case ETempFile:
+		case EAddedFile:
+		case EAddedFilesRemoved:
+		case ERemovedFilesRestored:
+			// rollback this individual journal from where it last got to.
+			switch (LastEventL(aDrive))
+				{
+			case ERemovedFile:
+			case EBackupFile:
+			case ETempFile:
+			case EAddedFile:
+				DeleteFilesL(EAddedFile, aDrive);
+				
+				CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailNewFilesRemoved, CIntegrityServices::EBeforeJournal, KNullDesC);				
+				WriteJournalEventL(EAddedFilesRemoved, aDrive, aRecordAllRollbackEvents);
+				CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailNewFilesRemoved, CIntegrityServices::EAfterJournal, KNullDesC);
+				
+			// fall-through - automatically proceed to the next state, we'll start from EAddedFilesRemoved in case the RestoreFileL has failed
+			case EAddedFilesRemoved:
+				RestoreFilesL(aDrive);				
+				CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailOldFilesRestored, CIntegrityServices::EBeforeJournal, KNullDesC);			
+				WriteJournalEventL(ERemovedFilesRestored, aDrive, aRecordAllRollbackEvents);
+				CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailOldFilesRestored, CIntegrityServices::EAfterJournal, KNullDesC);
+
+			// fall-through - automatically proceed to the next state
+			case ERemovedFilesRestored:				
+				DeleteFilesL(ETempFile, aDrive);
+				
+				CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailTempFilesRemoved, CIntegrityServices::EBeforeJournal, KNullDesC);				
+				WriteJournalEventL(ETempFilesRemoved, aDrive, aRecordAllRollbackEvents);
+				CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailTempFilesRemoved, CIntegrityServices::EAfterJournal, KNullDesC);
+				break;
+				
+			case ETempFilesRemoved:
+				break;
+		
+			// nothing was done, just delete the journal file
+			case ENone:
+				break;
+		
+			// Erk! Bad state, bad state!
+			default:
+				User::Leave(KErrCorrupt);
+				break;
+				}
+			break;
+			
+		// Transaction complete, just need to remove the backup
+		case ECommitted:
+		case EBackupFilesRemoved:
+			switch (LastEventL(aDrive))
+				{
+			// At least one journal had a complete transaction...
+			// roll forwards all journal files.
+			case ERemovedFile:
+			case EBackupFile:
+			case ETempFile:
+			case EAddedFile:
+			case ECommitted:
+				DeleteFilesL(EBackupFile, aDrive);
+			
+				CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailBackupFilesRemoved, CIntegrityServices::EBeforeJournal, KNullDesC);			
+				WriteJournalEventL(EBackupFilesRemoved, aDrive, aRecordAllRollbackEvents);
+				CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailBackupFilesRemoved, CIntegrityServices::EAfterJournal, KNullDesC);
+
+				//fall-through - automatically proceed to the next state
+			case EBackupFilesRemoved:				
+				DeleteFilesL(ETempFile, aDrive);
+			
+				CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailTempFilesRemoved, CIntegrityServices::EBeforeJournal, KNullDesC);
+				WriteJournalEventL(ETempFilesRemoved, aDrive, aRecordAllRollbackEvents);
+				CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailTempFilesRemoved, CIntegrityServices::EAfterJournal, KNullDesC);
+				break;
+							
+			case ETempFilesRemoved:
+				break;
+		
+			// nothing was done, just delete the journal file
+			case ENone:
+				break;
+		
+			// unknown state	
+			default:
+				User::Leave(KErrCorrupt);
+				break;
+				}
+			break;
+			
+		case ETempFilesRemoved:
+			break;
+		
+		// nothing was done, just delete the journal file
+		case ENone:
+			break;
+		
+		// unknown state	
+		default:
+			User::Leave(KErrCorrupt);
+			break;
+		}
+		
+	FinishRollbackL(aDrive, aRecordAllRollbackEvents);
+	}
+
+void CJournal::CommitL()
+	{
+	StartCommitL();
+	
+	CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailInstallComplete, CIntegrityServices::EBeforeJournal, KNullDesC);
+	WriteJournalEventL(ECommitted);
+	CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailInstallComplete, CIntegrityServices::EAfterJournal, KNullDesC);
+	
+	DeleteFilesL(EBackupFile);
+	
+	CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailBackupFilesRemoved, CIntegrityServices::EBeforeJournal, KNullDesC);
+	WriteJournalEventL(EBackupFilesRemoved);
+	CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailBackupFilesRemoved, CIntegrityServices::EAfterJournal, KNullDesC);
+	
+	DeleteFilesL(ETempFile);
+	
+	CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailTempFilesRemoved, CIntegrityServices::EBeforeJournal, KNullDesC);
+	WriteJournalEventL(ETempFilesRemoved);
+	CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailTempFilesRemoved, CIntegrityServices::EAfterJournal, KNullDesC);
+	
+	FinishCommitL();
+	}
+
+void CJournal::RollBackL(TBool aRecordAllRollbackEvents /*= ETrue*/)
+	{
+#ifdef __WINSCW__
+	// For 2 minutes after initial boot, DLLs are not unloaded. If we are doing a
+	// rollback, we need to make sure any pending unloadeds are actioned, otherwise a
+	// previously loaded DLL could cause the rollback to fail on windows (on arm it is legal to
+	// delete a loaded DLL/EXE, whilst on windows it is not).
+	RLoader loader;
+	TInt r = loader.Connect();
+	if(r == KErrNone)
+		{
+		(void)loader.CancelLazyDllUnload();
+		loader.Close();
+		}
+#endif
+	
+	for(TInt index = 0; index < iJournalFiles.Count(); index++)
+		{
+		TDriveUnit drive = iJournalFiles[index]->Drive();
+		// check to see if this drive has already been completed
+		if(iCompletedDrives.Find(drive) != KErrNotFound)
+			continue;
+			
+		// only attempt to recover writeable drives that are present
+		TDriveInfo info;
+		User::LeaveIfError(iFs.Drive(info, drive));
+		if (info.iMediaAtt & KMediaAttWriteProtected || info.iType==EMediaNotPresent)
+			continue;
+
+		TRAPD(err, RollBackDriveL(drive, aRecordAllRollbackEvents));
+		if(err != KErrNone && err != KErrPathNotFound && err != KErrNotFound
+			&& err != KErrNotReady)
+			{
+			// unexpected error
+			User::Leave(err);
+			}
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/source/server/journalfile.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,402 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CJournalFile implementation
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology
+*/
+
+#include "journalfile.h"
+#include "usiflog.h"
+
+_LIT(KBackupExt, "bak"); // extension for removed files in backup location
+
+namespace Usif
+{
+CJournalFile* CJournalFile::NewL(RFs& aFs, RLoader& aLoader, const TDesC& aFileName, TInt aDrive)
+	{
+	CJournalFile* self = CJournalFile::NewLC(aFs, aLoader, aFileName, aDrive);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CJournalFile* CJournalFile::NewLC(RFs& aFs, RLoader& aLoader, const TDesC& aFileName, TInt aDrive)
+	{
+	CJournalFile* self = new(ELeave) CJournalFile(aFs, aLoader, aDrive);
+	CleanupStack::PushL(self);
+	self->ConstructL(aFileName);
+	return self;
+	}
+
+CJournalFile::CJournalFile(RFs& aFs, RLoader& aLoader, TInt aDrive) 
+	: iFs(aFs), iLoader(aLoader), iLastEvent(ENone), iDrive(aDrive)
+	{
+	}
+
+CJournalFile::~CJournalFile()
+	{
+	iWriteStream.Close();
+	delete iTreeRoot;
+	}
+
+void CJournalFile::ConstructL(const TDesC& aFileName)
+	{
+	DEBUG_PRINTF2(_L("CJournalFile::ConstructL() - aFileName %S"), &aFileName);							
+	iJournalFileName = aFileName;
+	
+	TChar drive;
+	User::LeaveIfError(iFs.DriveToChar(iDrive, drive));
+	
+	TBuf<2> driveSpec;
+	driveSpec.Append(drive);
+	driveSpec.Append(KDriveDelimiter);
+	iTreeRoot = CIntegrityTreeNode::NewL(driveSpec);
+	
+	// read any existing entries from this journal
+	TRAPD(err, ReadL());
+	if(err != KErrNone)
+		{
+		DEBUG_PRINTF2(_L("CJournalFile::ConstructL() - CJournalFile::ReadL() has left with error %d"), err);							
+		// if necessary create the path
+		if(err == KErrPathNotFound)
+			{
+			User::LeaveIfError(iFs.MkDirAll(iJournalFileName));
+			}
+		else if (err != KErrNotFound)
+			{
+			DEBUG_PRINTF2(_L("CJournalFile::ConstructL() - Leaving with error %d"), err);							
+			User::Leave(err);
+			}
+		}
+	// now prepare for writing
+	PrepareToWriteL();
+	}
+
+void CJournalFile::ReadL()
+	{
+	RFileReadStream journalStream;
+	User::LeaveIfError(journalStream.Open(iFs, iJournalFileName, EFileRead | EFileShareAny));
+	CleanupClosePushL(journalStream);
+	
+	// we need to check that any filenames read from the journal are on the
+	// same drive as the journal itself
+	TDriveUnit journalDrive(iJournalFileName);
+	
+	TInt err = KErrNone;
+	while(err == KErrNone)
+		{
+		// read the next journal entry
+		TRAP(err, ReadEntryL(journalStream, journalDrive));
+		if(err != KErrNone && err != KErrEof)
+			{
+			DEBUG_PRINTF2(_L("CJournalFile::ReadL() - CJournalFile::ReadEntryL() has left with error %d Leaving with this error!"), err);							
+			User::Leave(err);
+			}
+		}
+	CleanupStack::PopAndDestroy(&journalStream);
+	}
+
+void VerifyIsFileEventL(TIntegrityServicesEvent aEvent)
+	{
+	if (aEvent != ERemovedFile &&
+		aEvent != ETempFile && aEvent != EAddedFile)
+		{
+		User::Leave(KErrCorrupt);
+		}	
+	}
+
+void VerifyIsEmptyOrFileEventL(TIntegrityServicesEvent aEvent)
+	{
+	if (aEvent == ENone)
+		return;
+
+	VerifyIsFileEventL(aEvent);
+	}
+
+void CJournalFile::ReadEntryL(RFileReadStream& aJournalStream, TInt aDrive)
+	{
+	TIntegrityServicesEvent event = static_cast<TIntegrityServicesEvent> (aJournalStream.ReadInt32L());
+	
+	HBufC* removedFile = NULL;
+	HBufC* backupFile = NULL;
+	HBufC* tempFile = NULL;
+	HBufC* addedFile = NULL;
+	
+	switch(event)
+		{
+		case ERemovedFile:
+			{
+			VerifyIsEmptyOrFileEventL(iLastEvent);
+			removedFile = HBufC::NewLC(aJournalStream, KMaxFileName);
+			// should be followed by the backup event
+			if(aJournalStream.ReadInt32L() != EBackupFile)
+				{
+				User::Leave(KErrCorrupt);
+				}
+			backupFile = HBufC::NewLC(aJournalStream, KMaxFileName);
+			// make sure files are located on the same drive as the journal
+			if(CJournalFile::CheckFileNameL(iFs, *removedFile) != aDrive 
+				|| CJournalFile::CheckFileNameL(iFs, *backupFile) != aDrive)
+				{
+				User::Leave(KErrCorrupt);
+				}
+	
+			CIntegrityTreeLeaf* removeLeaf = iTreeRoot->AddNodeL(*removedFile, ERemovedFile, iJournalFileName);
+			CIntegrityTreeLeaf* backupLeaf = iTreeRoot->AddNodeL(*backupFile, EBackupFile, iJournalFileName);
+
+			removeLeaf->SetPeer(backupLeaf);
+			backupLeaf->SetPeer(removeLeaf);
+
+			CleanupStack::PopAndDestroy(backupFile);
+			CleanupStack::PopAndDestroy(removedFile);
+			iBackupFilesCount++;
+			iLastEvent = ERemovedFile;
+			}
+			break;
+			
+		case EBackupFile:
+			// cannot have a backup file on its own
+			User::Leave(KErrCorrupt);
+			break;
+			
+		case ETempFile:
+			VerifyIsEmptyOrFileEventL(iLastEvent);
+			
+			tempFile = HBufC::NewLC(aJournalStream, KMaxFileName);
+			// make the file is located on the same drive as the journal
+			if(CJournalFile::CheckFileNameL(iFs, *tempFile) != aDrive)
+				{
+				User::Leave(KErrCorrupt);
+				}
+			iTreeRoot->AddNodeL(*tempFile, ETempFile, iJournalFileName);
+			CleanupStack::PopAndDestroy(tempFile);
+			iLastEvent = ETempFile;
+			break;
+			
+		case EAddedFile:
+			VerifyIsEmptyOrFileEventL(iLastEvent);
+			
+			addedFile = HBufC::NewLC(aJournalStream, KMaxFileName);
+			// make the file is located on the same drive as the journal
+			if(CJournalFile::CheckFileNameL(iFs, *addedFile) != aDrive)
+				{
+				User::Leave(KErrCorrupt);
+				}
+			iTreeRoot->AddNodeL(*addedFile, EAddedFile, iJournalFileName);
+			CleanupStack::PopAndDestroy(addedFile);
+			iLastEvent = EAddedFile;
+			break;
+			
+		case ECommitted:
+			VerifyIsFileEventL(iLastEvent);
+				
+			iLastEvent = ECommitted;
+			break;
+			
+		case EBackupFilesRemoved:
+			if(iLastEvent != ECommitted)
+				{
+				User::Leave(KErrCorrupt);
+				}
+			iLastEvent = EBackupFilesRemoved;
+			break;
+			
+		case EAddedFilesRemoved:
+			if(iLastEvent != ECommitted)
+				VerifyIsFileEventL(iLastEvent); // The last event can be only a commit, or one of the file events
+
+			iLastEvent = EAddedFilesRemoved;
+			break;
+			
+		case ETempFilesRemoved:
+			if(iLastEvent != EBackupFilesRemoved && iLastEvent != ERemovedFilesRestored)
+				{
+				User::Leave(KErrCorrupt);
+				}
+			iLastEvent = ETempFilesRemoved;
+			break;
+			
+		case ERemovedFilesRestored:
+			if(iLastEvent != EAddedFilesRemoved)
+				{
+				User::Leave(KErrCorrupt);
+				}
+			iLastEvent = ERemovedFilesRestored;
+			break;
+			
+		default:
+			User::Leave(KErrCorrupt);
+			break;
+   		}
+	}
+
+void CJournalFile::PrepareToWriteL()
+	{
+	DEBUG_PRINTF2(_L("CJournalFile::PrepareToWriteL() iJournalFileName %S"), &iJournalFileName);							
+	RFile file;
+	CleanupClosePushL(file);
+	// try opening the journal if it already exists
+	TEntry entry;
+	TBool journalFileExists = (iFs.Entry(iJournalFileName, entry) == KErrNone);
+	if (journalFileExists)
+		{
+		User::LeaveIfError(file.Open(iFs, iJournalFileName, EFileWrite | EFileShareAny));
+		}
+	else
+		{
+		// journal does not exist, try creating one
+		User::LeaveIfError(file.Create(iFs, iJournalFileName, EFileWrite | EFileShareAny));
+		}
+	
+	TInt fileSize;
+	User::LeaveIfError(file.Size(fileSize));
+	
+	// attach to end of file for writing
+	iWriteStream.Attach(file, fileSize);
+	CleanupStack::Pop(&file); // file ownership transfered to stream
+	}
+
+void CJournalFile::EventL(TIntegrityServicesEvent aEvent, TBool aSerializeEventToJournal /* = ETrue*/ )
+	{
+	DEBUG_PRINTF2(_L("CJournalFile::EventL() - aEvent %d"), aEvent);							
+	if (aSerializeEventToJournal)
+		{
+		iWriteStream.WriteInt32L(static_cast<TInt> (aEvent));
+		iWriteStream.CommitL();
+		}
+	
+	iLastEvent = aEvent;
+	}
+
+void CJournalFile::AddL(const TDesC& aFileName)
+	{
+	DEBUG_PRINTF2(_L("CJournalFile::AddL() - aFileName %S"), &aFileName);							
+	iTreeRoot->AddNodeL(aFileName, EAddedFile, iJournalFileName);
+
+	// write filename to journal
+	iWriteStream.WriteInt32L(static_cast<TInt> (EAddedFile));
+	iWriteStream << aFileName;
+	iWriteStream.CommitL();
+	
+	iLastEvent = EAddedFile;
+	}
+
+void CJournalFile::RemoveL(const TDesC& aFileName, TDes& aBackupFileName)
+	{
+	DEBUG_PRINTF2(_L("CJournalFile::RemoveL() - aFileName %S"), &aFileName);							
+	// Only journal removals if the file hasn't been added in the same
+	// journalfile.
+	TInt err = iTreeRoot->FindNode(aFileName, EAddedFile);
+	if (err == KErrNotFound)
+		{
+		CIntegrityTreeLeaf* removalNode = iTreeRoot->AddNodeL(aFileName, ERemovedFile, iJournalFileName);
+
+		// generate the next backup filename for this journal
+		NextBackupFileNameL(aBackupFileName);
+	
+		CIntegrityTreeLeaf* backupNode = iTreeRoot->AddNodeL(aBackupFileName, EBackupFile, iJournalFileName);
+	
+		// set peers on both nodes
+		removalNode->SetPeer(backupNode);
+		backupNode->SetPeer(removalNode);
+		
+		// write filenames to journal
+		iWriteStream.WriteInt32L(static_cast<TInt> (ERemovedFile));
+		iWriteStream << aFileName;
+		iWriteStream.WriteInt32L(static_cast<TInt> (EBackupFile));
+		iWriteStream << aBackupFileName;
+		iWriteStream.CommitL();
+	
+		iLastEvent = ERemovedFile;
+		}
+	else
+		{
+		User::LeaveIfError(err);
+		}
+	}
+	
+void CJournalFile::TemporaryL(const TDesC& aFileName)
+	{
+	DEBUG_PRINTF2(_L("CJournalFile::TemporaryL() - aFileName %S"), &aFileName);							
+	iTreeRoot->AddNodeL(aFileName, ETempFile, iJournalFileName);
+	
+	// write filename to journal
+	iWriteStream.WriteInt32L(static_cast<TInt> (ETempFile));
+	iWriteStream << aFileName;
+	iWriteStream.CommitL();
+	
+	iLastEvent = ETempFile;
+	}
+	
+void CJournalFile::JournalOperationL(TTreeWalkFunctionL aFunc, TIntegrityServicesEvent aTypeFilter,
+	CIntegrityServices::TFailType aFailType)
+	{
+	CFileMan* fileman = CFileMan::NewL(iFs);
+	CleanupStack::PushL(fileman);
+	iTreeRoot->WalkTreeL(aFunc, aTypeFilter, iFs, iLoader, *fileman, aFailType);
+	CleanupStack::PopAndDestroy(fileman);
+	}
+
+void CJournalFile::NextBackupFileNameL(TDes& aBackupFileName)
+	{
+	TParsePtrC fileNamePtr(iJournalFileName);
+	aBackupFileName = fileNamePtr.DriveAndPath();
+	aBackupFileName.Append(fileNamePtr.Name());
+	aBackupFileName.Append(KPathDelimiter);
+	aBackupFileName.AppendNumUC(iBackupFilesCount, EHex);
+	aBackupFileName.Append(KExtDelimiter);
+	aBackupFileName.Append(KBackupExt);
+	
+	iBackupFilesCount++;
+	}
+
+
+TIntegrityServicesEvent CJournalFile::LastEvent() const
+	{
+	return iLastEvent;
+	}
+
+TInt CJournalFile::Drive()
+	{
+	return iDrive;
+	}
+	
+void CJournalFile::Close()
+	{
+	iWriteStream.Close();
+	}
+
+/*static*/ TInt CJournalFile::CheckFileNameL(RFs&, const TDesC& aFileName)
+	{
+	TParse parse;
+
+	User::LeaveIfError(parse.Set(aFileName, NULL, NULL));
+
+	if (!parse.DrivePresent())
+		User::Leave(KErrArgument);
+	
+	if (!parse.PathPresent())
+		User::Leave(KErrArgument);	
+	
+	TDriveUnit drive(parse.Drive());
+	return drive;
+	}
+}//End of namespace Usif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/source/server/operationfunctions.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology
+*/
+
+#include "operationfunctions.h"
+#include "integritytree.h"
+#include "usiflog.h"
+
+namespace Usif
+{
+
+TBool IsBinary(const TEntry& aEntry)
+    {
+    return (aEntry[0].iUid == KExecutableImageUidValue || aEntry[0].iUid == KDynamicLibraryUidValue) ? ETrue : EFalse;
+    }
+
+
+void VerifyDeletionErrorL(TInt err)
+	{
+	if (err != KErrNone && err != KErrNotFound && err != KErrPathNotFound)
+		User::Leave(err);
+	}
+
+void IntegrityDeleteFileL(const TDesC& aPath, CIntegrityTreeLeaf* aLeaf, RFs& aFs, 
+							   RLoader& aLoader, CFileMan& aFileMan)
+	{
+    _LIT(KSysBin, "\\sys\\bin");
+	RBuf name;
+	name.CreateL(aPath, KMaxFileName);
+	CleanupClosePushL(name);
+	name.Append(aLeaf->Name());
+
+	TEntry entry;
+	TInt err = aFs.Entry(name, entry);
+	if (err == KErrNone)
+		{
+		aFs.SetAtt(name, 0, KEntryAttReadOnly);
+		if(entry.IsDir())
+			{
+			// Make sure to append slash before calling RmDir - otherwise it deletes the parent directory			
+			if (name[name.Length()-1] != KPathDelimiter) 
+	  			{
+  				name.Append(KPathDelimiter);
+  				}
+			User::LeaveIfError(aFileMan.RmDir(name));
+			}
+		else
+			{			
+            if ( aLeaf->Type() == EBackupFile ) // Implies a commit operation is in progress
+                {
+                
+                 if ( IsBinary(entry) )
+                     {
+                     // Forming the file name so the renamed file can be under sys/bin
+					 // for special delete mechanism using RLoader::Delete
+                     RBuf tmpName;
+                     TParsePtrC fileName(name);
+                     tmpName.CreateL(name.Length() + KSysBin.iTypeLength);
+                     CleanupClosePushL(tmpName);
+
+                     tmpName.Append(fileName.Drive());
+                     tmpName.Append(KSysBin);
+                     tmpName.Append(fileName.Path());
+                     tmpName.Append(fileName.NameAndExt());
+
+					 DEBUG_PRINTF3(_L("Integrity Services - Renaming %S to %S"), &name, &tmpName);
+                     aFileMan.Rename(name,tmpName,CFileMan::EOverWrite);
+                     User::LeaveIfError(aLoader.Delete(tmpName)); // Using RLoader delete for paged binaries
+					 DEBUG_PRINTF2(_L("Integrity Services - Deleted renamed file %S"), &tmpName);
+
+					 // prune the directory tree if possible
+                     RemoveDirectoryTreeL(aFs, tmpName);
+                     CleanupStack::PopAndDestroy(&tmpName);
+                     }
+                 else
+                     {
+                     User::LeaveIfError(aFileMan.Delete(name));
+                     }
+                }
+            else
+                {
+				// Need to use RLoader Delete which can be used during deletion of Added files during Rollback
+                User::LeaveIfError(aLoader.Delete(name));
+                }
+			}
+			
+		// prune the directory tree if possible
+		RemoveDirectoryTreeL(aFs, name);
+		}
+	else if(err != KErrNotFound && err != KErrPathNotFound)
+		{
+		DEBUG_PRINTF3(_L("Integrity Services - error %d removing %S"), err, &name);
+		User::Leave(err);
+		}
+	else
+	    {
+
+		DEBUG_PRINTF3(_L("Integrity Services - error %d removing %S"), err, &name);
+
+	    // Check for any renamed files to move it to sys/bin for special delete mechanism
+	    RBuf tmpName;
+	    TParsePtrC fileName(name);
+	    tmpName.CreateL(name.Length() + KSysBin.iTypeLength);
+	    CleanupClosePushL(tmpName);
+
+	    tmpName.Append(fileName.Drive());
+	    tmpName.Append(KSysBin);
+	    tmpName.Append(fileName.Path());
+	    tmpName.Append(fileName.NameAndExt());
+		DEBUG_PRINTF2(_L("Integrity Services - Removing  %S renamed binary files if any"), &tmpName);
+
+	    aLoader.Delete(tmpName);
+		// prune the directory tree if possible
+	    RemoveDirectoryTreeL(aFs, tmpName);
+	    CleanupStack::PopAndDestroy(&tmpName);
+	    }
+
+	CleanupStack::PopAndDestroy(&name);
+	}
+
+void IntegrityRestoreFileL(const TDesC& aPath, CIntegrityTreeLeaf* aLeaf, RFs& aFs, 
+								RLoader& /*aLoader*/, CFileMan& /*aFileMan*/)
+	{
+	RBuf name;
+	name.CreateL(aPath, KMaxFileName);
+	CleanupClosePushL(name);
+	name.Append(aLeaf->Name());
+
+	// find the peer file, and check it's a backup.
+	CIntegrityTreeLeaf* peer = aLeaf->Peer();
+	if (peer->Type() != EBackupFile)
+		{
+		User::Leave(KErrCorrupt);
+		}
+	
+	TParsePtrC parse(peer->Journal());
+	RBuf backup;
+	backup.CreateL(parse.DriveAndPath(), KMaxFileName);
+	CleanupClosePushL(backup);
+	backup.Append(parse.Name());
+	backup.Append(KPathDelimiter);
+	backup.Append(peer->Name());
+
+	TInt err = aFs.MkDirAll(name);
+	if(err != KErrNone && err != KErrAlreadyExists)
+		{
+		User::Leave(err);
+		}
+			
+	err = aFs.Rename(backup, name);
+	if (err != KErrNone)
+		{
+		VerifyDeletionErrorL(err);
+		// we may have already moved it back during a previous recovery
+		// attempt, check for its presence in the original location
+		TEntry restoredEntry;
+		User::LeaveIfError(aFs.Entry(name, restoredEntry));
+		}
+	else
+		{
+		// prune the backup directory tree if possible.
+		RemoveDirectoryTreeL(aFs, backup);
+		}
+	CleanupStack::PopAndDestroy(2, &name);	// backup
+	}
+	
+void RemoveDirectoryTreeL(RFs& aFs, const TDesC& aFileName)
+	{
+	TParse directory;
+	User::LeaveIfError(directory.SetNoWild(aFileName, NULL, NULL));
+	while(!directory.IsRoot())
+		{
+		// try to remove this directory
+		TInt err = aFs.RmDir(directory.DriveAndPath());
+		if(err == KErrInUse || err == KErrAccessDenied)
+			{
+			break;
+			}
+		VerifyDeletionErrorL(err);		
+		// move to deleted directory's parent
+		User::LeaveIfError(directory.PopDir());
+		}	
+	}
+
+} // end namespace Usif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/source/server/startup.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Executable entrypoint and server object factory function. The latter
+* is supplied to the SCS boilerplate code which starts up the server.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "stsserver.h"
+#include <scs/scsserver.h>
+
+using namespace Usif;
+
+	static CScsServer* NewStsServerLC()
+/**
+	This factory function is called by SCS framework.  It allocates
+	the Sts Server object and leaves it on the cleanup stack.
+
+	@return		New initialized instance of CStsServer.
+				On return this is on the cleanup stack.
+ */
+	{
+	return static_cast<CScsServer*>(CStsServer::NewLC());
+	}
+
+
+GLDEF_C TInt E32Main()
+/**
+	Executable entrypoint. Calls the SCS boilerplate code which starts the SCR server
+	and does not return until the server shuts down.
+
+	@return	Symbian OS error code where KErrNone indicates success 
+			and any other value indicates failure.
+ */
+	{
+	return StartScsServer(NewStsServerLC);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/source/server/stsserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements CStsServer.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "stsserver.h"
+#include "stsserversession.h"
+#include "usiflog.h"
+#include <scs/securityutils.h>
+
+namespace Usif
+{
+static const TUint stsServerRangeCount = 5;
+
+static const TInt stsServerRanges[stsServerRangeCount] =
+	{
+	0,							                                      //Range 0 - 0 to EBaseSession-1. Not used.
+	CScsServer::EBaseSession,	                                      //Range 1 - EBaseSession to (EBaseSession+ERegisterNew)-1. ==> from ECreateTransaction to EGetId inclusive
+	CScsServer::EBaseSession|static_cast<TInt>(ERegisterNew),         //Range 2 - (EBaseSession+ERegisterNew) to (EBaseSession+ERollBackAllPending)-1 ==> from ERegisterNew to EOverwrite inclusive
+	CScsServer::EBaseSession|static_cast<TInt>(ERollBackAllPending),  //Range 3 - (EBaseSession+ERollBackAllPending) to ((EBaseSession+ERollBackAllPending)+1)-1==> only ERollBackAllPending
+	CScsServer::EBaseSession|static_cast<TInt>(ERollBackAllPending)+1 //Range 4 - (EBaseSession+ERollBackAllPending)+1 to KMaxTInt inclusive  (i.e: ScsImpl::EPreCloseSession)
+	};
+
+static const TUint8 stsServerElementsIndex[stsServerRangeCount] =
+	{
+	CPolicyServer::ENotSupported, // Range 0 : is not supported.
+	CPolicyServer::EAlwaysPass,   // Range 1
+	CPolicyServer::ECustomCheck,  // Range 2 : custom check will be made made for each function to see if client is authorised to do that
+	0,                            // Range 3 : Can only be issued by KUidDaemon
+	CPolicyServer::EAlwaysPass    // Range 4
+	};							
+
+static const CPolicyServer::TPolicyElement stsServerElements[] =
+	{
+	{_INIT_SECURITY_POLICY_S0(KUidDaemon), CPolicyServer::EFailClient}, //special handling of function ERollBackAllPending 
+	};
+
+static const CPolicyServer::TPolicy stsServerPolicy =
+	{
+	CPolicyServer::EAlwaysPass, // Allow all connects
+	stsServerRangeCount,
+	stsServerRanges,
+	stsServerElementsIndex,
+	stsServerElements,
+	};
+
+//
+//CStsServer
+//
+
+CStsServer::CStsServer()
+/**
+	Intializes the STS server object with its version and policy.
+ */
+	:	CScsServer(TVersion(KStsVerMajor, KStsVerMinor, KStsVerBuild),stsServerPolicy)
+		{
+		//empty
+		}
+
+CStsServer::~CStsServer()
+/**
+	Destructor. Cleanup the STS server.
+ */
+	{
+	iTransactionWrapperContainer.ResetAndDestroy();
+	}
+	
+	
+CStsServer* CStsServer::NewLC()
+/**
+	Factory function allocates new, initialized instance of CStsServer.
+
+	@return		New, initialized instance of CStsServer
+				which is left on the cleanup stack.
+ */
+	{
+	CStsServer *so = new (ELeave) CStsServer();
+	CleanupStack::PushL(so);
+	so->ConstructL();
+	return so;
+	}
+
+
+void CStsServer::ConstructL()
+/**
+	Second phase constructor starts the STS server.
+ */
+	{
+	// Roll back all previous transactions in case the STS process died unexpectedly
+	// Note: error returned from RollBackAllPendingL() is ignored at this point to prevent STS server startup from failing
+	// It is important to roll back before calling CScsServer::ConstructL as the roll back may be longer than the shutdown period for the timer started by that function
+	TRAP_IGNORE(RollBackAllPendingL());
+	
+	CScsServer::ConstructL(KStsServerShutdownPeriod); 
+		
+	StartL(KStsServerName);
+	}
+
+
+CScsSession* CStsServer::DoNewSessionL(const RMessage2& aMessage)
+/**
+	Implement CStsServer by allocating a new instance of CStsServerSession.
+
+	@param	aMessage	Standard server-side handle to message.
+	@return				New instance of CStsServerSession which is owned by the caller.
+ */
+	{
+	return CStsServerSession::NewL(*this, aMessage);
+	}
+
+void CStsServer::RollBackAllPendingL()
+/**
+	Rolls back all pending transactions that have persistent information stored in the transaction
+	path in the file system.
+	Important note: this function can only be invoked if there are no active transactions in the server as it is
+	not intended to roll back active transactions. (ie: intended to be invoked at boot-up time and STS start up only) 
+ */
+	{
+	if(iTransactionWrapperContainer.Count()!=0) 
+		{
+		User::Leave(KErrInUse); //there can be no active transaction when this function is invoked 
+		}
+	CIntegrityServices::RollbackAllL();
+	}
+
+TInt TransactionWrapperLinearOrderByIdKey(const TStsTransactionId *id, const CReferenceCountedTransactionWrapper &aSecond)
+	{
+	return *id-aSecond.TransactionId();
+	}
+
+TInt TransactionWrapperLinearOrder(const CReferenceCountedTransactionWrapper &aFirst, const CReferenceCountedTransactionWrapper &aSecond)
+	{
+	return aFirst.TransactionId()-aSecond.TransactionId();
+	}
+
+TStsTransactionId CStsServer::CreateTransactionID()
+	{
+	TTime currentTime;
+	TStsTransactionId transactionID;
+	do
+		{
+		currentTime.UniversalTime();
+		transactionID = I64LOW(currentTime.Int64());
+		}
+    while(IsExistingTransaction(transactionID));
+    return transactionID;
+	}
+
+TBool CStsServer::IsExistingTransaction(TStsTransactionId aTransactionID)
+	{
+	return (FindActiveTransaction(aTransactionID)>=0);
+	} 
+
+CIntegrityServices* CStsServer::CreateTransactionL()
+	{
+	TStsTransactionId id = CreateTransactionID();
+	CReferenceCountedTransactionWrapper* wrapper = CReferenceCountedTransactionWrapper::NewLC(id);
+	iTransactionWrapperContainer.InsertInOrderL(wrapper, TLinearOrder<CReferenceCountedTransactionWrapper>(&TransactionWrapperLinearOrder));
+	CleanupStack::Pop(wrapper);
+	return wrapper->Attach();
+	}
+
+CIntegrityServices* CStsServer::AttachTransactionL(TStsTransactionId aTransactionID)
+	{
+	TInt pos=FindActiveTransaction(aTransactionID);
+	if(pos>=0) //joining an existing active transaction
+		{
+		return iTransactionWrapperContainer[pos]->Attach();
+		}
+	User::Leave(KErrNotFound);
+	return 0;
+	}
+
+void CStsServer::ReleaseTransactionL(CIntegrityServices* &aTransactionPtr, TBool aMarkAsCompleted /*=EFalse*/)
+	{
+	__ASSERT_DEBUG(aTransactionPtr, User::Invariant());
+	TInt pos=FindActiveTransaction(aTransactionPtr->TransactionId());
+	__ASSERT_DEBUG(pos>=0, User::Invariant());
+	CReferenceCountedTransactionWrapper* wrapper=iTransactionWrapperContainer[pos];
+	if(aMarkAsCompleted)
+		wrapper->SetCompleted(); //set transaction as completed (this should be done after a succesful commit or rollback) 
+	TInt refCount=wrapper->Detach();
+	__ASSERT_DEBUG(refCount>=0, User::Invariant());
+	if(refCount==0) 
+		{
+		if(!wrapper->IsCompleted()) //do an auto roll back if and only if the transaction has not been committed or rolled-back previously
+			aTransactionPtr->RollBackL();
+		delete wrapper;
+		iTransactionWrapperContainer.Remove(pos);
+		}
+	aTransactionPtr=0;
+	}
+/*
+ This function is a slight optimization of CStsServer::ReleaseTransactionL() as it is intended to be called
+ on cleanup of a committed or rolled-back transaction that obviously don't need auto rollbak again.
+ */
+void CStsServer::FinaliseTransactionL(CIntegrityServices* &aTransactionPtr)
+	{
+	ReleaseTransactionL(aTransactionPtr, ETrue);
+	}
+
+TInt CStsServer::FindActiveTransaction(TStsTransactionId aTransactionID)
+	{
+	return iTransactionWrapperContainer.FindInOrder(aTransactionID, &TransactionWrapperLinearOrderByIdKey);
+	}
+
+CPolicyServer::TCustomResult CStsServer::CustomSecurityCheckL(const RMessage2& aMsg, TInt& /*aAction*/, TSecurityInfo& /*aMissing*/)		
+	{
+	TInt functionId(StripScsFunctionMask(aMsg.Function()));
+	CPolicyServer::TCustomResult ret(EFail);
+		
+	switch(functionId)
+		{
+		case ERegisterNew:
+		case ECreateNew:
+		case ERemove:
+		case ERegisterTemporary:
+		case ECreateTemporary:
+		case EOverwrite:
+			ret = CheckIfFileModificationAllowedL(aMsg)? EPass : EFail;
+			break;
+		}
+	return ret;
+	}
+
+/*static*/TBool CStsServer::CheckIfFileModificationAllowedL(const RMessage2& aMsg)
+	{
+	RBuf filePath;
+	filePath.CreateL(KMaxFileName);
+	filePath.CleanupClosePushL();
+	aMsg.ReadL(KFilePathIPCSlot, filePath, 0);
+
+	// Retrieve the required capabilities for write access to this path
+	TCapabilitySet requiredCapabilities = SecCommonUtils::FileModificationRequiredCapabilitiesL(filePath, aMsg.SecureId());
+	
+	TBool result = EFalse;
+	TBool allFilesRequired = requiredCapabilities.HasCapability(ECapabilityAllFiles);
+	TBool tcbRequired = requiredCapabilities.HasCapability(ECapabilityTCB);
+	
+	// Test whether the client has at least one of the required capabilities
+	if (allFilesRequired)
+		result = aMsg.HasCapability(ECapabilityAllFiles);
+	if (!result && tcbRequired)
+		result = aMsg.HasCapability(ECapabilityTCB);
+	if (!allFilesRequired && !tcbRequired)
+		result = ETrue;
+	
+	CleanupStack::PopAndDestroy(&filePath);
+	return result;
+	}	
+}//end of namespace Usif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/source/server/stsserversession.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,221 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements CStsServer.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "stsserver.h"
+#include "stsserversession.h"
+#include <random.h>
+#include <e32cmn.h>
+#include <e32std.h>
+#include <usif/sts/stsdefs.h>
+#include "usiflog.h"
+
+namespace Usif
+{
+
+CStsServerSession::CStsServerSession(CStsServer& aStsserver)
+	: CScsSession(static_cast<CScsServer &>(aStsserver))
+	{
+	}
+
+CStsServerSession::~CStsServerSession()
+	{
+	if (iTransactionPtr)
+		TRAP_IGNORE(static_cast<CStsServer*>(&iServer)->ReleaseTransactionL(iTransactionPtr));
+	}
+
+CStsServerSession* CStsServerSession::NewL(CStsServer &aServer, const RMessage2& /*aMessage*/)
+	{
+	CStsServerSession* self = new (ELeave) CStsServerSession(aServer);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CStsServerSession::ConstructL()
+	{
+	CScsSession::ConstructL();
+	}
+
+
+_LIT(KStsPanicCategory, "StsServer");
+static const TInt KInvalidMessagePanicCode = KErrArgument;
+
+TBool CStsServerSession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
+	{
+	DEBUG_PRINTF2(_L("CStsServerSession::DoServiceL() - Function %d"), static_cast<TStsClientServerFunctionType>(aFunction));							
+
+	TBool ret = ETrue; //used in CScsSession::ServiceL(); if set to ETRue >> aMessage.Complete(KErrNone); is executed
+	TStsTransactionId transactionID;
+	TPckg<TStsTransactionId> idPkg(transactionID);
+	RBuf buf;
+	CStsServer* server=static_cast<CStsServer*>(&iServer);
+	
+	switch(static_cast<TStsClientServerFunctionType>(aFunction))
+		{
+		case ECreateTransaction:
+			{
+			if(iTransactionPtr)
+				{
+				User::Leave(KErrInUse);
+				}
+			iTransactionPtr = server->CreateTransactionL();
+			transactionID = iTransactionPtr->TransactionId();
+			aMessage.WriteL(KIdIPCSlot, idPkg);
+			break;
+			}
+		case EOpenTransaction:
+			{
+			if(iTransactionPtr)
+				{
+				User::Leave(KErrInUse);
+				}
+			aMessage.ReadL(KIdIPCSlot, idPkg, 0);
+			iTransactionPtr = server->AttachTransactionL(transactionID);
+			break;
+			}
+		case ERegisterNew:
+			{
+			__ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode));
+			buf.CreateL(KMaxFileName);
+			buf.CleanupClosePushL();
+			aMessage.ReadL(KFilePathIPCSlot, buf, 0);
+			iTransactionPtr->RegisterNewL(buf);
+			CleanupStack::PopAndDestroy(&buf);
+			break;
+			}
+		case ECreateNew:
+			{
+			__ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode));			
+			// Taking the filename size from the IPC Arguments
+			// No need to do any validation of filename as it is done by File Server
+			TInt srcFileNameLen = aMessage.GetDesLengthL(KFilePathIPCSlot);
+			buf.CreateL(srcFileNameLen);
+			buf.CleanupClosePushL();
+			aMessage.ReadL(KFilePathIPCSlot, buf, 0);
+			TPckgBuf<TFileMode> pkgFileMode;
+			aMessage.ReadL(KFileModeIPCSlot, pkgFileMode, 0);
+			RFile newFile;
+			CleanupClosePushL(newFile);
+			iTransactionPtr->CreateNewL(buf, newFile, pkgFileMode());
+	        User::LeaveIfError(newFile.TransferToClient(aMessage, KFileHandleIPCSlot));
+	        ASSERT(aMessage.IsNull());  // message should have been completed
+	        ret = EFalse; //message need not be completed in CScsSession::ServiceL()
+			CleanupStack::PopAndDestroy(2, &buf);
+			break;
+			}
+		case ERemove:
+			{
+			__ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode));			
+			buf.CreateL(KMaxFileName);
+			buf.CleanupClosePushL();
+			aMessage.ReadL(KFilePathIPCSlot, buf, 0);
+			iTransactionPtr->RemoveL(buf);
+			CleanupStack::PopAndDestroy(&buf);
+			break;
+			}
+		case ERegisterTemporary:
+			{
+			__ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode));			
+			buf.CreateL(KMaxFileName);
+			buf.CleanupClosePushL();
+			aMessage.ReadL(KFilePathIPCSlot, buf, 0);
+			iTransactionPtr->RegisterTemporaryL(buf);
+			CleanupStack::PopAndDestroy(&buf);
+			break;
+			}
+		case ECreateTemporary:
+			{
+			__ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode));			
+			// Taking the filename size from the IPC Arguments
+			// No need to do any validation of filename as it is done by File Server
+			TInt srcFileNameLen = aMessage.GetDesLengthL(KFilePathIPCSlot);
+			buf.CreateL(srcFileNameLen);
+			buf.CleanupClosePushL();
+			aMessage.ReadL(KFilePathIPCSlot, buf, 0);
+			TPckgBuf<TFileMode> pkgFileMode;
+			aMessage.ReadL(KFileModeIPCSlot, pkgFileMode, 0);
+			RFile newTempFile;
+			CleanupClosePushL(newTempFile);
+			iTransactionPtr->CreateTemporaryL(buf, newTempFile, pkgFileMode());
+	        User::LeaveIfError(newTempFile.TransferToClient(aMessage, KFileHandleIPCSlot));
+	        ASSERT(aMessage.IsNull());  // message should have been completed
+	        ret = EFalse; //message need not be completed in CScsSession::ServiceL()
+			CleanupStack::PopAndDestroy(2, &buf);
+			break;
+			}
+		case EOverwrite:
+			{
+			__ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode));			
+			buf.CreateL(KMaxFileName);
+			buf.CleanupClosePushL();
+			aMessage.ReadL(KFilePathIPCSlot, buf, 0);
+			TPckgBuf<TFileMode> pkgFileMode;
+			aMessage.ReadL(KFileModeIPCSlot, pkgFileMode, 0);
+			RFile newFile;
+			CleanupClosePushL(newFile);
+			iTransactionPtr->OverwriteL(buf, newFile, pkgFileMode());
+	        User::LeaveIfError(newFile.TransferToClient(aMessage, KFileHandleIPCSlot));
+	        ASSERT(aMessage.IsNull());  // message should have been completed
+	        ret = EFalse; //message need not be completed in CScsSession::ServiceL()
+			CleanupStack::PopAndDestroy(2, &buf);
+			break;
+			}
+		case ECommit:
+			{
+			__ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode));
+			iTransactionPtr->CommitL(); 
+			server->FinaliseTransactionL(iTransactionPtr); //releases transaction and erases pointer!
+			break;
+			}
+		case ERollBack:
+			{
+			__ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode));
+			iTransactionPtr->RollBackL();
+			server->FinaliseTransactionL(iTransactionPtr); //releases transaction and erases pointer!
+			break;
+			}
+		case EGetId:
+			{
+			__ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode));
+			transactionID = iTransactionPtr->TransactionId();
+			//return ID back to client
+			aMessage.WriteL(KIdIPCSlot, idPkg);
+			break;
+			}
+		case ERollBackAllPending:
+			{
+			server->RollBackAllPendingL();
+			break;
+			}
+		default:
+			{
+			User::Leave(KErrNotSupported);
+			break;
+			}
+		}
+	return ret; 
+	}
+}//end of namespace Usif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/source/server/transactionwrapper.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements CStsServer.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "transactionwrapper.h"
+
+namespace Usif
+{
+CReferenceCountedTransactionWrapper::CReferenceCountedTransactionWrapper()
+	{
+	
+	}
+
+CReferenceCountedTransactionWrapper::~CReferenceCountedTransactionWrapper()
+	{
+	delete iTrPtr;
+	}
+
+/*static*/ CReferenceCountedTransactionWrapper* CReferenceCountedTransactionWrapper::NewLC(TStsTransactionId aTransactionID)
+	{
+	CReferenceCountedTransactionWrapper* wrapper= new (ELeave) CReferenceCountedTransactionWrapper();
+	CleanupStack::PushL(wrapper);
+	wrapper->ConstructL(aTransactionID);
+	return wrapper;
+	}
+
+void CReferenceCountedTransactionWrapper::ConstructL(TStsTransactionId aTransactionID)
+	{
+	iTrPtr = CIntegrityServices::NewL(aTransactionID);
+	iRefCount=0;
+	iCompleted=EFalse;
+	}
+
+CIntegrityServices* CReferenceCountedTransactionWrapper::Attach()
+	{
+	++iRefCount; 
+	return iTrPtr; 
+	}
+
+TInt CReferenceCountedTransactionWrapper::Detach() 
+	{
+	return --iRefCount;
+	}
+}//end of namespace Usif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/group/tsts.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		tststestserver.exe
+TARGETTYPE	exe
+UID			0x1000007A 0x10285DDF
+
+
+
+USERINCLUDE	../inc
+USERINCLUDE	../tintegrityservices/inc
+USERINCLUDE	../../../swi/test/testutilswi/client
+USERINCLUDE	../../inc_private
+USERINCLUDE	../../inc
+
+USERINCLUDE	../../../swinstallationfw/common/inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+SOURCEPATH	../source
+SOURCE		tststestsuiteserver.cpp
+SOURCE		tststestsuitestep.cpp
+
+SOURCEPATH	../tintegrityservices/source
+SOURCE		tintegrityservicesstep.cpp
+
+//we need to include these soruces as unit tests, which reqire these sources, are also implemented
+
+SOURCEPATH	../../source/server
+SOURCE		integrityservices.cpp
+SOURCE      integritytree.cpp
+SOURCE      journal.cpp
+SOURCE      journalfile.cpp
+SOURCE      operationfunctions.cpp
+
+
+LIBRARY		euser.lib
+LIBRARY		efsrv.lib
+LIBRARY		testexecuteutils.lib
+LIBRARY		testexecutelogclient.lib
+LIBRARY		stsclient.lib
+LIBRARY		estor.lib
+LIBRARY		tstsintegrityservicesclient.lib
+LIBRARY		testutilclientswi.lib 
+LIBRARY		sectcbutil.lib
+LIBRARY		oomtestbase.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/group/tstsrollbackall.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		tststestserverrollbackall.exe
+TARGETTYPE	exe
+//UID3 must match swi daemon's UID3 as STS server restricts access to 
+//the RollbackAllPending interface to that particular UID
+UID		0x1000007A 0x10202DCE
+
+
+
+USERINCLUDE	../inc
+USERINCLUDE	../../inc_private
+USERINCLUDE	../../inc
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+SOURCEPATH	../source
+SOURCE		tststestsuiteserverrollbackall.cpp
+SOURCE		tststestsuitesteprollbackall.cpp
+
+LIBRARY		euser.lib
+LIBRARY		efsrv.lib
+LIBRARY		testexecuteutils.lib
+LIBRARY		testexecutelogclient.lib
+LIBRARY		stsclient.lib
+LIBRARY		estor.lib
+LIBRARY		tstsintegrityservicesclient.lib
+LIBRARY		testutilclientswi.lib 
+LIBRARY		sectcbutil.lib
+LIBRARY		oomtestbase.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/inc/tststestsuiteserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+ @internalComponent
+*/
+
+#ifndef __TSTSTESTSUITESERVER_H__
+#define __TSTSTESTSUITESERVER_H__
+#include <test/testexecuteserverbase.h>
+#include <f32file.h> 
+#include <usif/sts/sts.h>
+#include "testutilclientswi.h"
+
+using namespace Usif;
+
+class CStsTestServer : public CTestServer
+	{
+	public:
+	    //general test framework related stuff
+		static CStsTestServer* NewL();
+		virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+		~CStsTestServer();
+
+		//STS specific functions
+        TStsTransactionId CreateTransactionL(TInt aPos);
+        void OpenTransactionL(TInt aPos, TStsTransactionId aTransactionID);
+        void CloseTransactionL(TInt aPos);
+		void RegisterNewL(TInt aPos, const TDesC& aFileName);
+		void CreateNewL(TInt aPos, const TDesC& aFileName, RFile &aFile, TUint aFileMode);
+		void RemoveL(TInt aPos, const TDesC& aFileName);
+		void RegisterTemporaryL(TInt aPos, const TDesC& aFileName);
+		void CreateTemporaryL(TInt aPos, const TDesC& aFileName, RFile &aFile, TUint aFileMode);
+		void OverwriteL(TInt aPos, const TDesC& aFileName, RFile &aFile, TUint aFileMode);
+		void CommitL(TInt aPos);
+		void RollBackL(TInt aPos);
+	    void RollbackAllPendingL(TInt aPos);
+
+	    TStsTransactionId GetTransactionIDL(TInt aPos);
+
+		RTestUtilSessionSwi& GetTestUtil() {return iTestutil;}
+		
+	private:
+		RStsSession& GetSessionL(TInt aPos);
+		void ConstructL();
+
+	private:
+		static const TInt 							maxNumberOfSessions=10;
+		RStsSession 					            iSessions[maxNumberOfSessions];
+		RTestUtilSessionSwi                            iTestutil; //for file manipulation in protected directories as well
+	};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/inc/tststestsuiteserverrollbackall.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+ @internalComponent
+*/
+
+#ifndef __TSTSTESTSUITESERVERROLLBACKALL_H__
+#define __TSTSTESTSUITESERVERROLLBACKALL_H__
+#include <test/testexecuteserverbase.h>
+#include <f32file.h>
+
+class CStsTestServerRollbackAll : public CTestServer
+	{
+	public:
+	    //general test framework related stuff
+		static CStsTestServerRollbackAll* NewL();
+		virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+
+	private:
+		void ConstructL();
+	};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/inc/tststestsuitestep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,245 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+ @internalComponent
+*/
+#ifndef __TSTSTESTSUITESTEP_H__
+#define __TSTSTESTSUITESTEP_H__
+#include <test/testexecutestepbase.h>
+#include "tststestsuitestepcommon.h"
+#include <scs/oomteststep.h>
+
+class CStsTestServer;
+
+class CStsBaseTestStep : public COomTestStep
+	{
+	public:
+		CStsBaseTestStep(CStsTestServer &aStsTestServer);
+	
+	protected:
+		CStsTestServer& Server();
+		//ini access functions
+		TInt GetIntFromConfigL(const TDesC& aName);
+		TInt GetTransactionSlotFromConfigL();
+		TInt GetTransactionSlotToReuseTransactionIdFromConfigL();
+		TInt GetTransactionIdFromConfigL();
+		TPtrC GetStringFromConfigL(const TDesC& aName);
+		TPtrC GetTargetFilePathFromConfigL();
+		
+		//file handling
+		void WriteToFileL(RFile &aFile, TDesC& aString);
+		TBool FileExistsL(const TDesC &aFileName);
+		void DeleteFileL(const TDesC &aFileName);
+		void CopyFileL(const TDesC& aSourceFile, const TDesC& aDestinationFile);
+		void RmDirL(const TDesC& aFileName);
+		void MkDirAllL(const TDesC& aFileName);
+		void DeleteL(const TDesC& aFileName);
+		HBufC* CreateDataForNewFileCreatedByStsServerLC(const TDesC& aTestStepName, TNewFileType aType);
+		void SetReadOnlyL(const TDesC& aFileName, TInt aSetReadOnly);
+	protected:
+		CStsTestServer &iStsTestServer;
+	};
+
+
+class CCreateTransactionStep : public CStsBaseTestStep
+	{
+	public:
+		CCreateTransactionStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+class COpenTransactionStep : public CStsBaseTestStep
+	{
+	public:
+		COpenTransactionStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+class CCloseTransactionStep : public CStsBaseTestStep
+	{
+	public:
+		CCloseTransactionStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+	
+class CRegisterNewFileStep : public CStsBaseTestStep
+	{
+	public:
+		CRegisterNewFileStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+class CCreateNewFileStep : public CStsBaseTestStep
+	{
+	public:
+		CCreateNewFileStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+class CRemoveStep : public CStsBaseTestStep
+	{
+	public:
+		CRemoveStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+class CRegisterTemporaryStep : public CStsBaseTestStep
+	{
+	public:
+		CRegisterTemporaryStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+class CCreateTemporaryStep : public CStsBaseTestStep
+	{
+	public:
+		CCreateTemporaryStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+class COverwriteStep : public CStsBaseTestStep
+	{
+	public:
+		COverwriteStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+class CCommitStep : public CStsBaseTestStep
+	{
+	public:
+		CCommitStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+class CRollbackStep : public CStsBaseTestStep
+	{
+	public:
+		CRollbackStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+class CRollbackAllPendingStep : public CStsBaseTestStep
+	{
+	public:
+		CRollbackAllPendingStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+class CCheckFilesStep : public CStsBaseTestStep
+	{
+	public:
+		CCheckFilesStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	private:
+		void GetFileNamesForCheckL(RArray<TPtrC>& aFileNumExist,RArray<TPtrC>& aFileNumNonExist);
+		void ExtractFileNameL(TInt aEntries, const TDesC& aEntryBase, RArray<TPtrC>& aFileArray);
+		void CheckIfFilesExistL(const RArray<TPtrC>& aFileArray);
+		void CheckIfFilesNotExistL(const RArray<TPtrC>& aFileArray);
+	};
+
+class CheckFileModeChangeStep : public CStsBaseTestStep
+	{
+	public:
+		CheckFileModeChangeStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+
+class CFileOperationsStep : public CStsBaseTestStep
+	{
+	public:
+		CFileOperationsStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	private:
+		void ProcessFileOperationsL();
+		TPtrC GetNextCommandLineParameterL(const TDesC& aLine, TInt& aNextAvailablePos);
+	};
+
+class CFileModeTestStep : public CStsBaseTestStep
+	{
+	public:
+		CFileModeTestStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	private:
+		void TestCase1L();
+		void TestCase2L();
+		void TestCase3L();
+	};
+
+class CCreateLongFileNameTestStep : public CStsBaseTestStep
+	{
+	public:
+		CCreateLongFileNameTestStep(CStsTestServer &aStsTestServer);
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/inc/tststestsuitestepcommon.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+ @internalComponent
+*/
+
+#ifndef __TSTSTESTSUITESTEPCOMMON_H__
+#define __TSTSTESTSUITESTEPCOMMON_H__
+#include <e32cmn.h>
+#include <e32def.h>
+#include <f32file.h>
+
+//ini item names
+/**
+ Name of the item that defines which transaction slot is to be used in CStsTestServer
+ Value can range from 0 to CStsTestServer::maxNumberOfTransactions-1
+ Usage: <KTransactionSlot>=<slot>   e.g: TrSlot=0 or TrSlot=1 etc...
+ */
+_LIT(KTransactionSlot,	"trslot");
+
+/**
+ Name of the item that defines the fully qualified name of the target file
+ Usage: <KTargetFile>=<path>   e.g: target=c:\sys\bin\sts\server\config.ini
+ Can be used with the all commands that require a file path as input. 
+ */
+_LIT(KTargetFile,	"target");
+
+/**
+ This item has the followin role:
+ a) Name of the item that defines which transaction id is to be reused (from which slot) when issuing an open transaction command
+    Usage: <KTransactionSlotID>=<slot>   e.g: TrSlotID=0 or TrSlot=1 etc...
+ 
+ Usage:
+    [testopentransactionsection]
+    TrSlot=1
+    TrSlotID=0  ==> reuses transaction ID of transaction in slot 0            
+
+ Important note: a section that is intended to be used with open transaction command should contain either 
+                 KTransactionSlotID or KTransactionID out of which KTransactionSlotID is searched for first.
+                 (That's if an ini section conatins both then KTransactionID is simply ignored)
+ */
+_LIT(KTransactionSlotID,	"trslotid");
+
+/**
+ An arbitrary transaction ID (4byte) can be defined in the ini file that is used when opening a transaction. 
+
+ Usage:
+    [testopentransactionsection]
+    trslot=1
+    trid=0xABCDEF  ==> this vvalue is used when openeing a transaction
+ Important note: a section that is intended to be used with open transaction command should contain either 
+                 KTransactionSlotID or KTransactionID out of which KTransactionSlotID is searched for first.
+                 (That's if an ini section conatins both then KTransactionID is simply ignored)
+ */
+_LIT(KTransactionID,	"trid");
+
+/**
+ This item is for CheckFilesStep.
+ It's used to show how many subsequent file name/path items in the ini file are to be extracted 
+ for checking wheter the corresponding files exist or not.
+ Usage:
+   numexist=xx eg: numexist=2
+*/
+_LIT(KNumExist, "numexist"); 
+
+/**
+ This item is for CheckFilesStep.
+ It's used to define a particular file's name/path that is to be checked for.
+ Usage:
+   exist<x>=<path> where x starts from 0. eg: exist0=d:\myfolder\mysubfolder\myfile.txt
+*/
+_LIT(KExistBase, "exist"); // + number (0-based) = file to check for
+
+/**
+ This item is for CheckFilesStep.
+ It's used to show how many subsequent file name/path items in the ini file are to be extracted 
+ for checking wheter the corresponding files don't exist.
+ Usage:
+   numnonexist=xx eg: numnonexist=2
+*/
+_LIT(KNumNonExist, "numnonexist"); // this specifies how many files to check for
+
+/**
+ This item is for CheckFilesStep.
+ It's used to define a particular file's name/path that is to be checked for.
+ Usage:
+   nonexist<x>=<path> where x starts from 0. eg: nonexist0=d:\myfolder\mysubfolder\myfile.txt
+*/
+_LIT(KNonExistBase, "nonexist"); // + number (0-based) = file to check for
+
+/**
+ This item is for FileOperationsStep.
+ It's used to specify the number of subsequent file operations in the ini file.
+ Usage:
+   operations=xx eg: operations=2
+*/
+_LIT(KNumOfOperations, "operations"); // this specifies how many fileoperations are to be executed
+
+_LIT(KOpNameBase, 	   "operation"); 
+
+/**
+ This item is for CreateLargeFileNameStep.
+ It's used to specify the base directory.
+ Usage:
+   basedir=xx 
+*/
+_LIT(KBaseDir, 	   "basedir");
+
+/**
+ This item is for CreateLargeFileNameStep.
+ It's used to specify the base directory 
+ buffer size.
+*/
+const TInt KBufSize = 30; 
+
+/**
+ Thess items are for FileOperationsStep.
+ They denote file commands accepted by FileOperationsStep.
+ Usage:
+   operationxx=<command> <switch> <source> <destination>
+ eg: 
+   operation0=mkdirall -i c:\sys\bin\dummydir\    //-i suppresses all errors during the operation
+   operation1=copy z:\sys\bin\dummydir\dummyfile.txt z:\sys\bin\dummydir\dummyfileoncdrive.txt
+*/
+_LIT(KMkDirAllOp, 	   "mkdirall"); 
+_LIT(KRmDirOp, 	   	   "rmdir"); 
+_LIT(KCopyOp, 	   	   "copy"); 
+_LIT(KDeleteOp,	   	   "delete"); 
+_LIT(KAttribOp,		   "attrib"); 
+_LIT(KIgnoreErrorsSwitch, "-i"); 
+
+//test step names
+_LIT(KCreateTransactionStep,	"CreateTransactionStep");
+_LIT(KOpenTransactionStep,		"OpenTransactionStep");
+_LIT(KCloseTransactionStep,		"CloseTransactionStep");
+_LIT(KRegisterNewFileStep,		"RegisterNewFileStep");
+_LIT(KCreateNewFileStep,		"CreateNewFileStep");
+_LIT(KRemoveStep,				"RemoveStep");
+_LIT(KRegisterTemporaryStep,	"RegisterTemporaryStep");
+_LIT(KCreateTemporaryStep,		"CreateTemporaryStep");
+_LIT(KOverwriteStep,			"OverwriteStep");
+_LIT(KCommitStep,				"CommitStep");
+_LIT(KRollbackStep,				"RollbackStep");
+_LIT(KRollbackAllPendingStep,	"RollbackAllPendingStep");
+_LIT(KCheckFilesStep,			"CheckFilesStep");
+_LIT(KNegativeTestsStep,		"NegativeTestsStep");
+_LIT(KCheckFileModeChangeStep,	"CheckFileModeChangeStep");
+_LIT(KJournalFileUnitTest,	    "JournalFileUnitTest");
+_LIT(KJournalFileUnitTestAdd,  	"JournalFileUnitTestAdd");
+_LIT(KJournalFileUnitTestTemp,  	"JournalFileUnitTestTemp");
+_LIT(KJournalFileUnitTestRemove, "JournalFileUnitTestRemove");
+_LIT(KJournalFileUnitTestRead,  	"JournalFileUnitTestRead");
+_LIT(KJournalFileUnitTestEvent,  "JournalFileUnitTestEvent");
+_LIT(KJournalUnitTest,	    		"JournalUnitTest");
+_LIT(KJournalUnitTestInstall,	"JournalUnitTestInstall");
+_LIT(KJournalUnitTestRollback,	"JournalUnitTestRollback");
+_LIT(KIntegrityservicesUnitTestInstall,	"IntegrityservicesUnitTestInstall");
+_LIT(KIntegrityservicesUnitTestRollback,	"IntegrityservicesUnitTestRollback");
+_LIT(KFileOperationsStep,					"FileOperationsStep");
+_LIT(KFileModeTestStep,					"FileModeTestStep");
+_LIT(KCreateLongFileNameTestStep,			"CreateLongFileNameTestStep");
+
+//test step names for legacy integrityservices testcode (see ../tintegrityservices/source/tintegrityservicesstep.cpp)
+_LIT(KInstall, 					"Install");
+_LIT(KRecover, 					"Recover");
+_LIT(KCleanup, 					"Cleanup");
+_LIT(KCheck, 					"Check");
+
+
+const TInt KDefaultFileCreationMode = EFileShareExclusive|EFileWrite;
+
+enum TNewFileType
+	{
+	ENewTemporaryFile,
+	ENewPermanentFile
+	};
+	
+//predefined elements used to create file content when creating new files	
+_LIT(KFileData1, "This ");
+_LIT(KFileData2, "temporary ");
+_LIT(KFileData3, "permanent ");
+_LIT(KFileData4, "unknown type ");
+_LIT(KFileData5, "file was created by ");
+_LIT(KFileData6, " command");
+_LIT(KFileData7, "the STS server when instructed by ");
+_LIT(KFileData8, " @ ");
+_LIT(KTimeFormatString, "%H%:%T%:%S%.%C  %D%/%M%/%Y");
+
+
+//script and ini file item used by legacy integrityservices testcode (see ../tintegrityservices/source/tintegrityservicesstep.cpp)
+_LIT(KRemoveFile,	 	"removefile");
+_LIT(KTempFile, 		"temporaryfile");
+_LIT(KAddFile, 			"addfile");
+_LIT(KFailType, 		"failtype");
+_LIT(KFailPosition, 	"failposition");
+_LIT(KFailFileName, 	"failfilename");
+_LIT(KPresent, 			"present");
+_LIT(KAbsent, 			"absent");
+_LIT(KCleanupFile, 		"cleanupfile");
+_LIT(KCleanupDirectory, "cleanupdirectory");
+_LIT(KArbitraryOpFile, 	"arbitraryopfile");
+_LIT(KOperation, 		"operation");
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/inc/tststestsuitesteprollbackall.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+ @internalComponent
+*/
+#ifndef __TSTSTESTSUITESTEPROLLBACKALL_H__
+#define __TSTSTESTSUITESTEPROLLBACKALL_H__
+#include <test/testexecutestepbase.h>
+#include "tststestsuitestepcommon.h"
+#include <scs/oomteststep.h>
+
+class CRollbackAllPendingStep : public COomTestStep
+	{
+	public:
+		CRollbackAllPendingStep();
+	protected:
+		virtual void ImplTestStepPreambleL();
+		virtual void ImplTestStepPostambleL();
+		virtual void ImplTestStepL();
+	};
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/batchfiles/tsts_bootuptimerecovery.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,102 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+
+@ECHO ON
+attrib -R \epoc32\data\z\tusif\tsts\data\*.* /S
+
+if exist \epoc32\winscw\c\sys\install\integrityservices rd \epoc32\winscw\c\sys\install\integrityservices /s /q
+if exist \epoc32\drive_e\sys\install\integrityservices rd \epoc32\drive_e\sys\install\integrityservices /s /q
+md \epoc32\winscw\c\sys\install\integrityservices
+md \epoc32\drive_e\sys\install\integrityservices
+
+if exist \epoc32\winscw\c\sts_test_dir rd \epoc32\winscw\c\sts_test_dir /s /q
+if exist \epoc32\drive_e\sts_test_dir rd \epoc32\drive_e\sts_test_dir /s /q
+md \epoc32\winscw\c\sts_test_dir
+md \epoc32\drive_e\sts_test_dir
+
+
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase1\c_drive \epoc32\winscw\c\sys\install\integrityservices /y /e
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase2\c_drive \epoc32\winscw\c\sys\install\integrityservices /y /e
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase3\c_drive \epoc32\winscw\c\sys\install\integrityservices /y /e
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase4\c_drive \epoc32\winscw\c\sys\install\integrityservices /y /e
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase5\c_drive \epoc32\winscw\c\sys\install\integrityservices /y /e
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase6\c_drive \epoc32\winscw\c\sys\install\integrityservices /y /e
+
+
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase1\e_drive \epoc32\drive_e\sys\install\integrityservices /y /e
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase2\e_drive \epoc32\drive_e\sys\install\integrityservices /y /e
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase3\e_drive \epoc32\drive_e\sys\install\integrityservices /y /e
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase4\e_drive \epoc32\drive_e\sys\install\integrityservices /y /e
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase5\e_drive \epoc32\drive_e\sys\install\integrityservices /y /e
+xcopy \epoc32\data\z\tusif\tsts\data\rollbackall\testcase6\e_drive \epoc32\drive_e\sys\install\integrityservices /y /e
+
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase1_register_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase1_create_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase1_register_temp_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase1_create_temp_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase1_overwrite_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase1_register_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase1_create_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase1_register_temp_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase1_create_temp_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase1_overwrite_file_drive2.txt
+
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase2_register_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase2_create_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase2_register_temp_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase2_create_temp_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase2_overwrite_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase2_register_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase2_create_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase2_register_temp_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase2_create_temp_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase2_overwrite_file_drive2.txt
+
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase3_register_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase3_create_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase3_register_temp_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase3_create_temp_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase3_overwrite_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase3_register_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase3_create_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase3_register_temp_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase3_create_temp_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase3_overwrite_file_drive2.txt
+
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase4_register_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase4_create_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase4_register_temp_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase4_create_temp_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase4_overwrite_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase4_register_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase4_create_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase4_register_temp_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase4_create_temp_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase4_overwrite_file_drive2.txt
+
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase5_register_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase5_create_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase5_overwrite_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase5_register_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase5_create_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase5_overwrite_file_drive2.txt
+
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase6_register_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase6_create_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\winscw\c\sts_test_dir\RollbackAllTestCase6_overwrite_file_drive1.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase6_register_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase6_create_file_drive2.txt
+copy \epoc32\data\z\tusif\tsts\data\tstsdummy.txt \epoc32\drive_e\sts_test_dir\RollbackAllTestCase6_overwrite_file_drive2.txt
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/sec-sts-rollbackall-0002/b6da9d45.drv has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/sec-sts-rollbackall-0002/b6da9d45.log has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8.drv has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8.log has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8/0.bak	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is an exported dummy textfile used for STS testing.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/c_drive/61f7bbf8/1.bak	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is an exported dummy textfile used for STS testing.
\ No newline at end of file
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/e_drive/61f7bbf8.log has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/e_drive/61f7bbf8/0.bak	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is an exported dummy textfile used for STS testing.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase1/e_drive/61f7bbf8/1.bak	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is an exported dummy textfile used for STS testing.
\ No newline at end of file
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3.drv has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3.log has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3/0.bak	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is an exported dummy textfile used for STS testing.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/c_drive/b06c42f3/1.bak	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is an exported dummy textfile used for STS testing.
\ No newline at end of file
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/e_drive/b06c42f3.log has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/e_drive/b06c42f3/0.bak	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is an exported dummy textfile used for STS testing.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase2/e_drive/b06c42f3/1.bak	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is an exported dummy textfile used for STS testing.
\ No newline at end of file
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase3/c_drive/bd596810.drv has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase3/c_drive/bd596810.log has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase3/e_drive/bd596810.log has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase4/c_drive/cb94c9f0.drv has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase4/c_drive/cb94c9f0.log has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase4/e_drive/cb94c9f0.log has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase5/c_drive/b630b6f0.drv has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase5/c_drive/b630b6f0.log has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase5/e_drive/b630b6f0.log has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase6/c_drive/be3d42f0.drv has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase6/c_drive/be3d42f0.log has changed
Binary file installationservices/swtransactionservices/test/scripts/data/rollbackall/testcase6/e_drive/be3d42f0.log has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/data/tstsdummy.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+This is an exported dummy textfile used for STS testing.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/tsts.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1542 @@
+[SEC_STS_TestCase001_Commit_pre_commit]
+trslot=0
+target=c:\sts_test_dir\TestCase001_Commit.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase001_Commit.txt
+
+[SEC_STS_TestCase001_Commit_post_commit]
+numexist=1
+exist0=c:\sts_test_dir\TestCase001_Commit.txt
+
+[SEC_STS_TestCase001_Rollback_pre_rollback]
+trslot=0
+target=c:\sts_test_dir\TestCase001_Rollback.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase001_Rollback.txt
+
+[SEC_STS_TestCase001_Rollback_post_rollback]
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase001_Rollback.txt
+
+
+
+[SEC_STS_TestCase002a_Commit_pre_commit]
+trslot=0
+target=c:\sts_test_dir\TestCase002a_Commit.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase002a_Commit.txt
+
+[SEC_STS_TestCase002a_Commit_post_commit]
+numexist=1
+exist0=c:\sts_test_dir\TestCase002a_Commit.txt
+
+[SEC_STS_TestCase002a_Rollback_pre_rollback]
+trslot=0
+target=c:\sts_test_dir\TestCase002a_Rollback.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase002a_Rollback.txt
+
+[SEC_STS_TestCase002a_Rollback_post_rollback]
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase002a_Rollback.txt
+
+
+[SEC_STS_TestCase002b_Commit_pre_commit]
+trslot=0
+target=c:\sts_test_dir\TestCase002b_Commit.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase002b_Commit.txt
+
+[SEC_STS_TestCase002b_Commit_post_commit]
+numexist=1
+exist0=c:\sts_test_dir\TestCase002b_Commit.txt
+
+[SEC_STS_TestCase002b_Rollback_pre_rollback]
+trslot=0
+target=c:\sts_test_dir\TestCase002b_Rollback.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase002b_Rollback.txt
+
+[SEC_STS_TestCase002b_Rollback_post_rollback]
+numexist=1
+exist0=c:\sts_test_dir\TestCase002b_Commit.txt
+
+
+[SEC_STS_TestCase003_Commit_pre_commit]
+trslot=0
+target=c:\sts_test_dir\TestCase003_Commit.txt
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase003_Commit.txt
+
+[SEC_STS_TestCase003_Commit_post_commit]
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase003_Commit.txt
+
+[SEC_STS_TestCase003_Rollback_pre_rollback]
+trslot=0
+target=c:\sts_test_dir\TestCase003_Rollback.txt
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase003_Rollback.txt
+
+[SEC_STS_TestCase003_Rollback_post_rollback]
+numexist=1
+exist0=c:\sts_test_dir\TestCase003_Rollback.txt
+
+[SEC_STS_TestCase004_Commit_pre_commit]
+trslot=0
+target=c:\sts_test_dir\TestCase004_Commit.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase004_Commit.txt
+
+[SEC_STS_TestCase004_Commit_post_commit]
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase004_Commit.txt
+
+[SEC_STS_TestCase004_Rollback_pre_rollback]
+trslot=0
+target=c:\sts_test_dir\TestCase004_Rollback.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase004_Rollback.txt
+
+[SEC_STS_TestCase004_Rollback_post_rollback]
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase004_Rollback.txt
+
+
+[SEC_STS_TestCase005_Commit_pre_commit]
+trslot=0
+target=c:\sts_test_dir\TestCase005_Commit.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase005_Commit.txt
+
+[SEC_STS_TestCase005_Commit_post_commit]
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase005_Commit.txt
+
+[SEC_STS_TestCase005_Rollback_pre_rollback]
+trslot=0
+target=c:\sts_test_dir\TestCase005_Rollback.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase005_Rollback.txt
+
+[SEC_STS_TestCase005_Rollback_post_rollback]
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase005_Rollback.txt
+
+
+[SEC_STS_TestCase006a_Commit_pre_commit]
+trslot=0
+target=c:\sts_test_dir\TestCase006a_Commit.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase006a_Commit.txt
+
+[SEC_STS_TestCase006a_Commit_post_commit]
+numexist=1
+exist0=c:\sts_test_dir\TestCase006a_Commit.txt
+
+[SEC_STS_TestCase006a_Rollback_pre_rollback]
+trslot=0
+target=c:\sts_test_dir\TestCase006a_Rollback.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase006a_Rollback.txt
+
+[SEC_STS_TestCase006a_Rollback_post_rollback]
+numexist=1
+exist0=c:\sts_test_dir\TestCase006a_Rollback.txt
+
+[SEC_STS_TestCase006b_Commit_pre_commit]
+trslot=0
+target=c:\sts_test_dir\TestCase006b_Commit.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase006b_Commit.txt
+
+[SEC_STS_TestCase006b_Commit_post_commit]
+numexist=1
+exist0=c:\sts_test_dir\TestCase006b_Commit.txt
+
+[SEC_STS_TestCase006b_Rollback_pre_rollback]
+trslot=0
+target=c:\sts_test_dir\TestCase006b_Rollback.txt
+numexist=1
+exist0=c:\sts_test_dir\TestCase006b_Rollback.txt
+
+[SEC_STS_TestCase006b_Rollback_post_rollback]
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase006b_Rollback.txt
+
+
+[SEC_STS_TestCase007_Commit_pre_commit]
+trslot=0
+numexist=5
+exist0=c:\sts_test_dir\TestCase007_Commit_register_file.txt
+exist1=c:\sts_test_dir\TestCase007_Commit_create_file.txt
+exist2=c:\sts_test_dir\TestCase007_Commit_register_temp.txt
+exist3=c:\sts_test_dir\TestCase007_Commit_create_temp.txt
+exist4=c:\sts_test_dir\TestCase007_Commit_overwrite_file.txt
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase007_Commit_remove_file.txt
+
+[SEC_STS_TestCase007_Commit_pre_commit_register_file]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Commit_register_file.txt
+
+[SEC_STS_TestCase007_Commit_pre_commit_create_file]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Commit_create_file.txt
+
+[SEC_STS_TestCase007_Commit_pre_commit_remove_file]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Commit_remove_file.txt
+
+[SEC_STS_TestCase007_Commit_pre_commit_register_temp]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Commit_register_temp.txt
+
+[SEC_STS_TestCase007_Commit_pre_commit_create_temp]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Commit_create_temp.txt
+
+[SEC_STS_TestCase007_Commit_pre_commit_overwrite_file]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Commit_overwrite_file.txt
+
+[SEC_STS_TestCase007_Commit_post_commit]
+numexist=3
+exist0=c:\sts_test_dir\TestCase007_Commit_register_file.txt
+exist1=c:\sts_test_dir\TestCase007_Commit_create_file.txt
+exist2=c:\sts_test_dir\TestCase007_Commit_overwrite_file.txt
+numnonexist=3
+nonexist0=c:\sts_test_dir\TestCase007_Commit_remove_file.txt
+nonexist1=c:\sts_test_dir\TestCase007_Commit_register_temp.txt
+nonexist2=c:\sts_test_dir\TestCase007_Commit_create_temp.txt
+
+
+[SEC_STS_TestCase007_Rollback_pre_rollback]
+trslot=0
+numexist=5
+exist0=c:\sts_test_dir\TestCase007_Rollback_register_file.txt
+exist1=c:\sts_test_dir\TestCase007_Rollback_create_file.txt
+exist2=c:\sts_test_dir\TestCase007_Rollback_register_temp.txt
+exist3=c:\sts_test_dir\TestCase007_Rollback_create_temp.txt
+exist4=c:\sts_test_dir\TestCase007_Rollback_overwrite_file.txt
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase007_Rollback_remove_file.txt
+
+[SEC_STS_TestCase007_Rollback_pre_rollback_register_file]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Rollback_register_file.txt
+
+[SEC_STS_TestCase007_Rollback_pre_rollback_create_file]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Rollback_create_file.txt
+
+[SEC_STS_TestCase007_Rollback_pre_rollback_remove_file]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Rollback_remove_file.txt
+
+[SEC_STS_TestCase007_Rollback_pre_rollback_register_temp]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Rollback_register_temp.txt
+
+[SEC_STS_TestCase007_Rollback_pre_rollback_create_temp]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Rollback_create_temp.txt
+
+[SEC_STS_TestCase007_Rollback_pre_rollback_overwrite_file]
+trslot=0
+target=c:\sts_test_dir\TestCase007_Rollback_overwrite_file.txt
+
+[SEC_STS_TestCase007_Rollback_post_rollback]
+numexist=2
+exist0=c:\sts_test_dir\TestCase007_Rollback_overwrite_file.txt
+exist1=c:\sts_test_dir\TestCase007_Rollback_remove_file.txt
+numnonexist=3
+nonexist0=c:\sts_test_dir\TestCase007_Rollback_register_file.txt
+nonexist1=c:\sts_test_dir\TestCase007_Rollback_create_file.txt
+nonexist2=c:\sts_test_dir\TestCase007_Rollback_register_temp.txt
+nonexist3=c:\sts_test_dir\TestCase007_Rollback_create_temp.txt
+
+
+[SEC_STS_TestCase008_tr0]
+trslot=0
+
+[SEC_STS_TestCase008_tr1]
+trslot=1
+trslotid=0
+
+[SEC_STS_TestCase008_Commit_register_file_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase008_Commit_register_file_tr0.txt
+
+[SEC_STS_TestCase008_Commit_remove_file_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase008_Commit_remove_file_tr0.txt
+
+[SEC_STS_TestCase008_Commit_register_temp_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase008_Commit_register_temp_tr0.txt
+
+[SEC_STS_TestCase008_Commit_create_file_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase008_Commit_create_file_tr1.txt
+
+[SEC_STS_TestCase008_Commit_overwrite_file_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase008_Commit_overwrite_file_tr1.txt
+
+[SEC_STS_TestCase008_Commit_create_temp_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase008_Commit_create_temp_tr1.txt
+
+
+[SEC_STS_TestCase008_Commit_pre_commit_check_files]
+numexist=5
+exist0=c:\sts_test_dir\TestCase008_Commit_register_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase008_Commit_register_temp_tr0.txt
+exist2=c:\sts_test_dir\TestCase008_Commit_create_file_tr1.txt
+exist3=c:\sts_test_dir\TestCase008_Commit_overwrite_file_tr1.txt
+exist4=c:\sts_test_dir\TestCase008_Commit_create_temp_tr1.txt
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase008_Commit_remove_file_tr0.txt
+
+
+[SEC_STS_TestCase008_Commit_post_commit_check_files]
+numexist=3
+exist0=c:\sts_test_dir\TestCase008_Commit_register_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase008_Commit_create_file_tr1.txt
+exist2=c:\sts_test_dir\TestCase008_Commit_overwrite_file_tr1.txt
+numnonexist=3
+nonexist0=c:\sts_test_dir\TestCase008_Commit_remove_file_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase008_Commit_register_temp_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase008_Commit_create_temp_tr1.txt
+
+[SEC_STS_TestCase008_Rollback_register_file_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase008_Rollback_register_file_tr0.txt
+
+[SEC_STS_TestCase008_Rollback_remove_file_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase008_Rollback_remove_file_tr0.txt
+
+[SEC_STS_TestCase008_Rollback_register_temp_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase008_Rollback_register_temp_tr0.txt
+
+[SEC_STS_TestCase008_Rollback_create_file_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase008_Rollback_create_file_tr1.txt
+
+[SEC_STS_TestCase008_Rollback_overwrite_file_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase008_Rollback_overwrite_file_tr1.txt
+
+[SEC_STS_TestCase008_Rollback_create_temp_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase008_Rollback_create_temp_tr1.txt
+
+
+[SEC_STS_TestCase008_Rollback_pre_rollback_check_files]
+numexist=5
+exist0=c:\sts_test_dir\TestCase008_Rollback_register_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase008_Rollback_register_temp_tr0.txt
+exist2=c:\sts_test_dir\TestCase008_Rollback_create_file_tr1.txt
+exist3=c:\sts_test_dir\TestCase008_Rollback_overwrite_file_tr1.txt
+exist4=c:\sts_test_dir\TestCase008_Rollback_create_temp_tr1.txt
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase008_Rollback_remove_file_tr0.txt
+
+[SEC_STS_TestCase008_Rollback_post_rollback_check_files]
+numexist=2
+exist0=c:\sts_test_dir\TestCase008_Rollback_remove_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase008_Rollback_overwrite_file_tr1.txt
+numnonexist=4
+nonexist0=c:\sts_test_dir\TestCase008_Rollback_register_file_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase008_Rollback_register_temp_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase008_Rollback_create_file_tr1.txt
+nonexist3=c:\sts_test_dir\TestCase008_Rollback_create_temp_tr1.txt
+
+[SEC_STS_TestCase009_open_by_random_id]
+trslot=0
+trid=123456
+
+
+[SEC_STS_TestCase010_tr0]
+trslot=0
+
+[SEC_STS_TestCase010_tr1]
+trslot=1
+
+[SEC_STS_TestCase010_register_file_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase010_register_file_tr0.txt
+
+[SEC_STS_TestCase010_register_file_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase010_register_file_tr1.txt
+
+[SEC_STS_TestCase010_create_file_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase010_create_file_tr0.txt
+
+[SEC_STS_TestCase010_create_file_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase010_create_file_tr1.txt
+
+[SEC_STS_TestCase010_remove_file_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+
+[SEC_STS_TestCase010_remove_file_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+
+[SEC_STS_TestCase010_register_temp_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+
+[SEC_STS_TestCase010_register_temp_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+
+[SEC_STS_TestCase010_create_temp_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase010_create_temp_tr0.txt
+
+[SEC_STS_TestCase010_create_temp_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase010_create_temp_tr1.txt
+
+[SEC_STS_TestCase010_overwrite_file_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+
+[SEC_STS_TestCase010_overwrite_file_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+
+
+[SEC_STS_TestCase010_before_any_commit_or_rollback]
+numexist=10
+exist0=c:\sts_test_dir\TestCase010_register_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase010_register_file_tr1.txt
+exist2=c:\sts_test_dir\TestCase010_create_file_tr0.txt
+exist3=c:\sts_test_dir\TestCase010_create_file_tr1.txt
+exist4=c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+exist5=c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+exist6=c:\sts_test_dir\TestCase010_create_temp_tr0.txt
+exist7=c:\sts_test_dir\TestCase010_create_temp_tr1.txt
+exist8=c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+exist9=c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+numnonexist=2
+nonexist0=c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+
+[SEC_STS_TestCase010a_after_tr0_commit_before_tr1_rollback]
+numexist=8
+exist0=c:\sts_test_dir\TestCase010_register_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase010_register_file_tr1.txt
+exist2=c:\sts_test_dir\TestCase010_create_file_tr0.txt
+exist3=c:\sts_test_dir\TestCase010_create_file_tr1.txt
+exist4=c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+exist5=c:\sts_test_dir\TestCase010_create_temp_tr1.txt
+exist6=c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+exist7=c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+numnonexist=4
+nonexist0=c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase010_create_temp_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+
+
+[SEC_STS_TestCase010a_final]
+numexist=5
+exist0=c:\sts_test_dir\TestCase010_register_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase010_create_file_tr0.txt
+exist2=c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+exist3=c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+exist4=c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+numnonexist=7
+nonexist0=c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase010_create_temp_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+nonexist4=c:\sts_test_dir\TestCase010_create_temp_tr1.txt
+nonexist5=c:\sts_test_dir\TestCase010_register_file_tr1.txt
+nonexist6=c:\sts_test_dir\TestCase010_create_file_tr1.txt
+
+[SEC_STS_TestCase010b_after_tr0_commit_before_tr1_commit]
+numexist=8
+exist0=c:\sts_test_dir\TestCase010_register_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase010_register_file_tr1.txt
+exist2=c:\sts_test_dir\TestCase010_create_file_tr0.txt
+exist3=c:\sts_test_dir\TestCase010_create_file_tr1.txt
+exist4=c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+exist5=c:\sts_test_dir\TestCase010_create_temp_tr1.txt
+exist6=c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+exist7=c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+numnonexist=4
+nonexist0=c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase010_create_temp_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+
+[SEC_STS_TestCase010b_final]
+numexist=6
+exist0=c:\sts_test_dir\TestCase010_register_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase010_create_file_tr0.txt
+exist2=c:\sts_test_dir\TestCase010_register_file_tr1.txt
+exist3=c:\sts_test_dir\TestCase010_create_file_tr1.txt
+exist4=c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+exist5=c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+numnonexist=6
+nonexist0=c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase010_create_temp_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+nonexist4=c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+nonexist5=c:\sts_test_dir\TestCase010_create_temp_tr1.txt
+
+[SEC_STS_TestCase010c_after_tr0_rollback_before_tr1_commit]
+numexist=7
+exist0=c:\sts_test_dir\TestCase010_register_file_tr1.txt
+exist1=c:\sts_test_dir\TestCase010_create_file_tr1.txt
+exist2=c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+exist3=c:\sts_test_dir\TestCase010_create_temp_tr1.txt
+exist4=c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+exist5=c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+exist6=c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+numnonexist=5
+nonexist0=c:\sts_test_dir\TestCase010_register_file_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase010_create_file_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase010_create_temp_tr0.txt
+nonexist4=c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+
+[SEC_STS_TestCase010c_final]
+numexist=5
+exist0=c:\sts_test_dir\TestCase010_register_file_tr1.txt
+exist1=c:\sts_test_dir\TestCase010_create_file_tr1.txt
+exist2=c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+exist3=c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+exist4=c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+numnonexist=7
+nonexist0=c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+nonexist1=c:\sts_test_dir\TestCase010_create_temp_tr1.txt
+nonexist2=c:\sts_test_dir\TestCase010_register_file_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase010_create_file_tr0.txt
+nonexist4=c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+nonexist5=c:\sts_test_dir\TestCase010_create_temp_tr0.txt
+nonexist6=c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+
+[SEC_STS_TestCase010d_after_tr0_rollback_before_tr1_rollback]
+numexist=7
+exist0=c:\sts_test_dir\TestCase010_register_file_tr1.txt
+exist1=c:\sts_test_dir\TestCase010_create_file_tr1.txt
+exist2=c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+exist3=c:\sts_test_dir\TestCase010_create_temp_tr1.txt
+exist4=c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+exist5=c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+exist6=c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+numnonexist=5
+nonexist0=c:\sts_test_dir\TestCase010_register_file_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase010_create_file_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase010_create_temp_tr0.txt
+nonexist4=c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+
+[SEC_STS_TestCase010d_final]
+numexist=4
+exist0=c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+exist2=c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+exist3=c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+numnonexist=8
+nonexist0=c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+nonexist1=c:\sts_test_dir\TestCase010_create_temp_tr1.txt
+nonexist2=c:\sts_test_dir\TestCase010_register_file_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase010_create_file_tr0.txt
+nonexist4=c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+nonexist5=c:\sts_test_dir\TestCase010_create_temp_tr0.txt
+nonexist6=c:\sts_test_dir\TestCase010_register_file_tr1.txt
+nonexist7=c:\sts_test_dir\TestCase010_create_file_tr1.txt
+
+
+[SEC_STS_TestCase011]
+trslot=0
+
+[SEC_STS_TestCase011_register_file_drive1]
+trslot=0
+target=c:\sts_test_dir\TestCase011_register_file_drive1.txt
+
+[SEC_STS_TestCase011_create_file_drive1]
+trslot=0
+target=c:\sts_test_dir\TestCase011_create_file_drive1.txt
+
+[SEC_STS_TestCase011_register_temp_drive1]
+trslot=0
+target=c:\sts_test_dir\TestCase011_register_temp_drive1.txt
+
+[SEC_STS_TestCase011_create_temp_drive1]
+trslot=0
+target=c:\sts_test_dir\TestCase011_create_temp_drive1.txt
+
+[SEC_STS_TestCase011_remove_file_drive1]
+trslot=0
+target=c:\sts_test_dir\TestCase011_remove_file_drive1.txt
+
+[SEC_STS_TestCase011_overwrite_file_drive1]
+trslot=0
+target=c:\sts_test_dir\TestCase011_overwrite_file_drive1.txt
+
+
+[SEC_STS_TestCase011_register_file_drive2]
+trslot=0
+target=e:\sts_test_dir\TestCase011_register_file_drive2.txt
+
+[SEC_STS_TestCase011_create_file_drive2]
+trslot=0
+target=e:\sts_test_dir\TestCase011_create_file_drive2.txt
+
+[SEC_STS_TestCase011_register_temp_drive2]
+trslot=0
+target=e:\sts_test_dir\TestCase011_register_temp_drive2.txt
+
+[SEC_STS_TestCase011_create_temp_drive2]
+trslot=0
+target=e:\sts_test_dir\TestCase011_create_temp_drive2.txt
+
+[SEC_STS_TestCase011_remove_file_drive2]
+trslot=0
+target=e:\sts_test_dir\TestCase011_remove_file_drive2.txt
+
+[SEC_STS_TestCase011_overwrite_file_drive2]
+trslot=0
+target=e:\sts_test_dir\TestCase011_overwrite_file_drive2.txt
+
+[SEC_STS_TestCase011_pre_commit_or_rollback]
+numexist=10
+exist0=c:\sts_test_dir\TestCase011_register_file_drive1.txt
+exist1=c:\sts_test_dir\TestCase011_create_file_drive1.txt
+exist2=c:\sts_test_dir\TestCase011_register_temp_drive1.txt
+exist3=c:\sts_test_dir\TestCase011_create_temp_drive1.txt
+exist4=c:\sts_test_dir\TestCase011_overwrite_file_drive1.txt
+exist5=e:\sts_test_dir\TestCase011_register_file_drive2.txt
+exist6=e:\sts_test_dir\TestCase011_create_file_drive2.txt
+exist7=e:\sts_test_dir\TestCase011_register_temp_drive2.txt
+exist8=e:\sts_test_dir\TestCase011_create_temp_drive2.txt
+exist9=e:\sts_test_dir\TestCase011_overwrite_file_drive2.txt
+numnonexist=2
+nonexist0=c:\sts_test_dir\TestCase011_remove_file_drive1.txt
+nonexist1=e:\sts_test_dir\TestCase011_remove_file_drive2.txt
+
+[SEC_STS_TestCase011_post_commit]
+numexist=6
+exist0=c:\sts_test_dir\TestCase011_register_file_drive1.txt
+exist1=c:\sts_test_dir\TestCase011_create_file_drive1.txt
+exist2=c:\sts_test_dir\TestCase011_overwrite_file_drive1.txt
+exist3=e:\sts_test_dir\TestCase011_register_file_drive2.txt
+exist4=e:\sts_test_dir\TestCase011_create_file_drive2.txt
+exist5=e:\sts_test_dir\TestCase011_overwrite_file_drive2.txt
+numnonexist=6
+nonexist0=c:\sts_test_dir\TestCase011_remove_file_drive1.txt
+nonexist1=e:\sts_test_dir\TestCase011_remove_file_drive2.txt
+nonexist2=c:\sts_test_dir\TestCase011_register_temp_drive1.txt
+nonexist3=c:\sts_test_dir\TestCase011_create_temp_drive1.txt
+nonexist4=e:\sts_test_dir\TestCase011_register_temp_drive2.txt
+nonexist5=e:\sts_test_dir\TestCase011_create_temp_drive2.txt
+
+[SEC_STS_TestCase011_post_rollback]
+numexist=4
+exist0=c:\sts_test_dir\TestCase011_overwrite_file_drive1.txt
+exist1=e:\sts_test_dir\TestCase011_overwrite_file_drive2.txt
+exist2=c:\sts_test_dir\TestCase011_remove_file_drive1.txt
+exist3=e:\sts_test_dir\TestCase011_remove_file_drive2.txt
+numnonexist=8
+nonexist0=c:\sts_test_dir\TestCase011_register_file_drive1.txt
+nonexist1=c:\sts_test_dir\TestCase011_create_file_drive1.txt
+nonexist2=c:\sts_test_dir\TestCase011_register_temp_drive1.txt
+nonexist3=c:\sts_test_dir\TestCase011_create_temp_drive1.txt
+nonexist4=e:\sts_test_dir\TestCase011_register_file_drive2.txt
+nonexist5=e:\sts_test_dir\TestCase011_create_file_drive2.txt
+nonexist6=e:\sts_test_dir\TestCase011_register_temp_drive2.txt
+nonexist7=e:\sts_test_dir\TestCase011_create_temp_drive2.txt
+
+[SEC_STS_TestCase012_tr0]
+trslot=0
+
+[SEC_STS_TestCase012_tr1]
+trslot=1
+
+[SEC_STS_TestCase012_register_file_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase012_register_file_tr0.txt
+
+[SEC_STS_TestCase012_register_file_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase012_register_file_tr1.txt
+
+[SEC_STS_TestCase012_create_file_tr0]
+trslot=0
+target=e:\sts_test_dir\TestCase012_create_file_tr0.txt
+
+[SEC_STS_TestCase012_create_file_tr1]
+trslot=1
+target=e:\sts_test_dir\TestCase012_create_file_tr1.txt
+
+[SEC_STS_TestCase012_remove_file_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+
+[SEC_STS_TestCase012_remove_file_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+
+[SEC_STS_TestCase012_register_temp_tr0]
+trslot=0
+target=e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+
+[SEC_STS_TestCase012_register_temp_tr1]
+trslot=1
+target=e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+
+[SEC_STS_TestCase012_create_temp_tr0]
+trslot=0
+target=c:\sts_test_dir\TestCase012_create_temp_tr0.txt
+
+[SEC_STS_TestCase012_create_temp_tr1]
+trslot=1
+target=c:\sts_test_dir\TestCase012_create_temp_tr1.txt
+
+[SEC_STS_TestCase012_overwrite_file_tr0]
+trslot=0
+target=e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+
+[SEC_STS_TestCase012_overwrite_file_tr1]
+trslot=1
+target=e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+
+
+[SEC_STS_TestCase012_before_any_commit_or_rollback]
+numexist=10
+exist0=c:\sts_test_dir\TestCase012_register_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase012_register_file_tr1.txt
+exist2=e:\sts_test_dir\TestCase012_create_file_tr0.txt
+exist3=e:\sts_test_dir\TestCase012_create_file_tr1.txt
+exist4=e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+exist5=e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+exist6=c:\sts_test_dir\TestCase012_create_temp_tr0.txt
+exist7=c:\sts_test_dir\TestCase012_create_temp_tr1.txt
+exist8=e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+exist9=e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+numnonexist=2
+nonexist0=c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+
+[SEC_STS_TestCase012a_after_tr0_commit_before_tr1_rollback]
+numexist=8
+exist0=c:\sts_test_dir\TestCase012_register_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase012_register_file_tr1.txt
+exist2=e:\sts_test_dir\TestCase012_create_file_tr0.txt
+exist3=e:\sts_test_dir\TestCase012_create_file_tr1.txt
+exist4=e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+exist5=c:\sts_test_dir\TestCase012_create_temp_tr1.txt
+exist6=e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+exist7=e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+numnonexist=4
+nonexist0=e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase012_create_temp_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+
+[SEC_STS_TestCase012a_final]
+numexist=5
+exist0=c:\sts_test_dir\TestCase012_register_file_tr0.txt
+exist1=e:\sts_test_dir\TestCase012_create_file_tr0.txt
+exist2=e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+exist3=e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+exist4=c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+numnonexist=7
+nonexist0=e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase012_create_temp_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+nonexist3=e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+nonexist4=c:\sts_test_dir\TestCase012_create_temp_tr1.txt
+nonexist5=c:\sts_test_dir\TestCase012_register_file_tr1.txt
+nonexist6=e:\sts_test_dir\TestCase012_create_file_tr1.txt
+
+[SEC_STS_TestCase012b_after_tr0_commit_before_tr1_commit]
+numexist=8
+exist0=c:\sts_test_dir\TestCase012_register_file_tr0.txt
+exist1=c:\sts_test_dir\TestCase012_register_file_tr1.txt
+exist2=e:\sts_test_dir\TestCase012_create_file_tr0.txt
+exist3=e:\sts_test_dir\TestCase012_create_file_tr1.txt
+exist4=e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+exist5=c:\sts_test_dir\TestCase012_create_temp_tr1.txt
+exist6=e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+exist7=e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+numnonexist=4
+nonexist0=e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase012_create_temp_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+
+[SEC_STS_TestCase012b_final]
+numexist=6
+exist0=c:\sts_test_dir\TestCase012_register_file_tr0.txt
+exist1=e:\sts_test_dir\TestCase012_create_file_tr0.txt
+exist2=c:\sts_test_dir\TestCase012_register_file_tr1.txt
+exist3=e:\sts_test_dir\TestCase012_create_file_tr1.txt
+exist4=e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+exist5=e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+numnonexist=6
+nonexist0=e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+nonexist1=c:\sts_test_dir\TestCase012_create_temp_tr0.txt
+nonexist2=c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+nonexist4=e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+nonexist5=c:\sts_test_dir\TestCase012_create_temp_tr1.txt
+
+[SEC_STS_TestCase012c_after_tr0_rollback_before_tr1_commit]
+numexist=7
+exist0=c:\sts_test_dir\TestCase012_register_file_tr1.txt
+exist1=e:\sts_test_dir\TestCase012_create_file_tr1.txt
+exist2=e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+exist3=c:\sts_test_dir\TestCase012_create_temp_tr1.txt
+exist4=e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+exist5=e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+exist6=c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+numnonexist=5
+nonexist0=c:\sts_test_dir\TestCase012_register_file_tr0.txt
+nonexist1=e:\sts_test_dir\TestCase012_create_file_tr0.txt
+nonexist2=e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase012_create_temp_tr0.txt
+nonexist4=c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+
+[SEC_STS_TestCase012c_final]
+numexist=5
+exist0=c:\sts_test_dir\TestCase012_register_file_tr1.txt
+exist1=e:\sts_test_dir\TestCase012_create_file_tr1.txt
+exist2=e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+exist3=e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+exist4=c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+numnonexist=7
+nonexist0=e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+nonexist1=c:\sts_test_dir\TestCase012_create_temp_tr1.txt
+nonexist2=c:\sts_test_dir\TestCase012_register_file_tr0.txt
+nonexist3=e:\sts_test_dir\TestCase012_create_file_tr0.txt
+nonexist4=e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+nonexist5=c:\sts_test_dir\TestCase012_create_temp_tr0.txt
+nonexist6=c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+
+[SEC_STS_TestCase012d_after_tr0_rollback_before_tr1_rollback]
+numexist=7
+exist0=c:\sts_test_dir\TestCase012_register_file_tr1.txt
+exist1=e:\sts_test_dir\TestCase012_create_file_tr1.txt
+exist2=e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+exist3=c:\sts_test_dir\TestCase012_create_temp_tr1.txt
+exist4=e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+exist5=e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+exist6=c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+numnonexist=5
+nonexist0=c:\sts_test_dir\TestCase012_register_file_tr0.txt
+nonexist1=e:\sts_test_dir\TestCase012_create_file_tr0.txt
+nonexist2=e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+nonexist3=c:\sts_test_dir\TestCase012_create_temp_tr0.txt
+nonexist4=c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+
+[SEC_STS_TestCase012d_final]
+numexist=4
+exist0=e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+exist1=e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+exist2=c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+exist3=c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+numnonexist=8
+nonexist0=e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+nonexist1=c:\sts_test_dir\TestCase012_create_temp_tr1.txt
+nonexist2=c:\sts_test_dir\TestCase012_register_file_tr0.txt
+nonexist3=e:\sts_test_dir\TestCase012_create_file_tr0.txt
+nonexist4=e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+nonexist5=c:\sts_test_dir\TestCase012_create_temp_tr0.txt
+nonexist6=c:\sts_test_dir\TestCase012_register_file_tr1.txt
+nonexist7=e:\sts_test_dir\TestCase012_create_file_tr1.txt
+
+
+
+[SEC_STS_TestCase013]
+trslot=5
+target=c:\sts_test_dir\TestCase013.txt
+
+[SEC_STS_TestCase013_file_not_exist]
+numnonexist=1
+nonexist0=c:\sts_test_dir\TestCase013.txt
+
+[SEC_STS_TestCase013_file_exists]
+numexist=1
+exist0=c:\sts_test_dir\TestCase013.txt
+
+
+
+[SEC_STS_TestCase014]
+trslot=0
+target=c:\sts_test_dir\SEC_STS_TestCase014_dummydir
+
+[SEC_STS_TestCase014_pre_rollback]
+numexist=2
+exist0=c:\sts_test_dir\SEC_STS_TestCase014_dummydir
+exist1=c:\sts_test_dir\SEC_STS_TestCase014_dummydir\SEC_STS_TestCase014.txt
+
+[SEC_STS_TestCase014_post_rollback]
+numnonexist=2
+nonexist0=c:\sts_test_dir\SEC_STS_TestCase014_dummydir
+nonexist1=c:\sts_test_dir\SEC_STS_TestCase014_dummydir\SEC_STS_TestCase014.txt
+
+[SEC_STS_TestCase015]
+trslot=0
+target=c:\sts_test_dir\SEC_STS_TestCase015_dummydir
+
+[SEC_STS_TestCase015_pre_post_commit]
+numexist=2
+exist0=c:\sts_test_dir\SEC_STS_TestCase015_dummydir
+exist1=c:\sts_test_dir\SEC_STS_TestCase015_dummydir\SEC_STS_TestCase015.txt
+
+
+[SEC_STS_TestCase016]
+trslot=0
+
+[SEC_STS_TestCase016_dir]
+trslot=0
+target=c:\sts_test_dir\SEC_STS_TestCase016_dummydir
+
+[SEC_STS_TestCase016_file]
+trslot=0
+target=c:\sts_test_dir\SEC_STS_TestCase016_dummydir\SEC_STS_TestCase016.txt
+
+[SEC_STS_TestCase016_pre_rollback]
+numexist=2
+exist0=c:\sts_test_dir\SEC_STS_TestCase016_dummydir
+exist1=c:\sts_test_dir\SEC_STS_TestCase016_dummydir\SEC_STS_TestCase016.txt
+
+[SEC_STS_TestCase016_post_rollback]
+numnonexist=2
+nonexist0=c:\sts_test_dir\SEC_STS_TestCase016_dummydir
+nonexist1=c:\sts_test_dir\SEC_STS_TestCase016_dummydir\SEC_STS_TestCase016.txt
+
+[SEC_STS_TestCase017]
+trslot=0
+
+[SEC_STS_TestCase017_dir]
+trslot=0
+target=c:\sts_test_dir\SEC_STS_TestCase017_dummydir
+
+[SEC_STS_TestCase017_file]
+trslot=0
+target=c:\sts_test_dir\SEC_STS_TestCase017_dummydir\SEC_STS_TestCase017.txt
+
+[SEC_STS_TestCase017_pre_post_commit]
+numexist=2
+exist0=c:\sts_test_dir\SEC_STS_TestCase017_dummydir
+exist1=c:\sts_test_dir\SEC_STS_TestCase017_dummydir\SEC_STS_TestCase017.txt
+
+
+[SEC_STS_TestCase018]
+trslot=0
+target=c:\sts_test_dir\SEC_STS_TestCase018_dummydir
+
+[SEC_STS_TestCase018_pre_rollback]
+numnonexist=2
+nonexist0=c:\sts_test_dir\SEC_STS_TestCase018_dummydir
+nonexist1=c:\sts_test_dir\SEC_STS_TestCase018_dummydir\SEC_STS_TestCase018.txt
+
+[SEC_STS_TestCase018_post_rollback]
+numexist=2
+exist0=c:\sts_test_dir\SEC_STS_TestCase018_dummydir
+exist1=c:\sts_test_dir\SEC_STS_TestCase018_dummydir\SEC_STS_TestCase018.txt
+
+
+[SEC_STS_TestCase019]
+trslot=0
+target=c:\sts_test_dir\SEC_STS_TestCase019_dummydir
+
+[SEC_STS_TestCase019_pre_post_commmit]
+numnonexist=2
+nonexist0=c:\sts_test_dir\SEC_STS_TestCase019_dummydir
+nonexist1=c:\sts_test_dir\SEC_STS_TestCase019_dummydir\SEC_STS_TestCase019.txt
+
+[SEC_STS_TestCase020]
+trslot=0
+target=c:\sts_test_dir\SEC_STS_TestCase020.txt
+
+[SEC_STS_TestCase021_create_new_or_temp]
+trslot=0
+target=z:\sts_test_dir\SEC_STS_TestCase021.txt
+numnonexist=1
+nonexist0=z:\sts_test_dir\SEC_STS_TestCase021.txt
+
+[SEC_STS_TestCase021_overwrite]
+trslot=0
+target=z:\tusif\tsts\tsts.script
+
+[SEC_STS_TestCase022]
+trslot=0
+target=z:\sts_test_dir\SEC_STS_TestCase022.txt
+
+[SEC_STS_TestCase023]
+trslot=0
+target=test.fil
+
+[SEC_STS_TestCase024]
+trslot=0
+target=c:\test.fil
+
+[SEC_STS_TestCase025_1]
+trslot=0
+target=c:\nonexistent.file
+
+[SEC_STS_TestCase025_2]
+trslot=0
+target=c:\nonexistentdir\nonexistent.file
+
+[SEC_STS_TestCase026]
+trslot=0
+target=c:\sts_test_dir\SEC_STS_TestCase026.txt
+
+[SEC_STS_TestCase027]
+trslot=0
+target=q:\nonexistentdrivedir\nonexistent.file
+
+[SEC_STS_TestCase028_TCB_dir_setup]
+operations=18
+operation0=rmdir -i c:\sys\install\integrityservices\
+operation1=rmdir -i e:\sys\install\integrityservices\
+operation2=mkdirall -i c:\sys\install\integrityservices\
+operation3=mkdirall -i e:\sys\install\integrityservices\
+operation4=copy z:\tusif\tsts\data\rollbackall\testcase1\c_drive c:\sys\install\integrityservices
+operation5=copy z:\tusif\tsts\data\rollbackall\testcase1\e_drive e:\sys\install\integrityservices
+operation6=copy z:\tusif\tsts\data\rollbackall\testcase2\c_drive c:\sys\install\integrityservices
+operation7=copy z:\tusif\tsts\data\rollbackall\testcase2\e_drive e:\sys\install\integrityservices
+operation8=copy z:\tusif\tsts\data\rollbackall\testcase3\c_drive c:\sys\install\integrityservices
+operation9=copy z:\tusif\tsts\data\rollbackall\testcase3\e_drive e:\sys\install\integrityservices
+operation10=copy z:\tusif\tsts\data\rollbackall\testcase4\c_drive c:\sys\install\integrityservices
+operation11=copy z:\tusif\tsts\data\rollbackall\testcase4\e_drive e:\sys\install\integrityservices
+operation12=copy z:\tusif\tsts\data\rollbackall\testcase5\c_drive c:\sys\install\integrityservices
+operation13=copy z:\tusif\tsts\data\rollbackall\testcase5\e_drive e:\sys\install\integrityservices
+operation14=copy z:\tusif\tsts\data\rollbackall\testcase6\c_drive c:\sys\install\integrityservices
+operation15=copy z:\tusif\tsts\data\rollbackall\testcase6\e_drive e:\sys\install\integrityservices
+operation16=attrib r- c:\sys\install\integrityservices\*.*
+operation17=attrib r- e:\sys\install\integrityservices\*.*
+
+[file_system_cleanup]
+operations=8
+operation0=attrib -i r- c:\sys\install\integrityservices\*.*
+operation1=attrib -i r- e:\sys\install\integrityservices\*.*
+operation2=attrib -i r- c:\sts_test_dir\*.*
+operation3=attrib -i r- e:\sts_test_dir\*.*
+operation4=rmdir -i c:\sys\install\integrityservices\
+operation5=rmdir -i e:\sys\install\integrityservices\
+operation6=rmdir -i c:\sts_test_dir\
+operation7=rmdir -i e:\sts_test_dir\
+
+[SEC_STS_TestCase028]
+trslot=0
+
+[SEC_STS_TestCase028_pre_rollbackall]
+numexist=52
+exist0=c:\sts_test_dir\RollbackAllTestCase1_register_file_drive1.txt
+exist1=c:\sts_test_dir\RollbackAllTestCase1_create_file_drive1.txt
+exist2=c:\sts_test_dir\RollbackAllTestCase1_register_temp_drive1.txt
+exist3=c:\sts_test_dir\RollbackAllTestCase1_create_temp_drive1.txt
+exist4=c:\sts_test_dir\RollbackAllTestCase1_overwrite_file_drive1.txt
+exist5=e:\sts_test_dir\RollbackAllTestCase1_register_file_drive2.txt
+exist6=e:\sts_test_dir\RollbackAllTestCase1_create_file_drive2.txt
+exist7=e:\sts_test_dir\RollbackAllTestCase1_register_temp_drive2.txt
+exist8=e:\sts_test_dir\RollbackAllTestCase1_create_temp_drive2.txt
+exist9=e:\sts_test_dir\RollbackAllTestCase1_overwrite_file_drive2.txt
+
+exist10=c:\sts_test_dir\RollbackAllTestCase2_register_file_drive1.txt
+exist11=c:\sts_test_dir\RollbackAllTestCase2_create_file_drive1.txt
+exist12=c:\sts_test_dir\RollbackAllTestCase2_register_temp_drive1.txt
+exist13=c:\sts_test_dir\RollbackAllTestCase2_create_temp_drive1.txt
+exist14=c:\sts_test_dir\RollbackAllTestCase2_overwrite_file_drive1.txt
+exist15=e:\sts_test_dir\RollbackAllTestCase2_register_file_drive2.txt
+exist16=e:\sts_test_dir\RollbackAllTestCase2_create_file_drive2.txt
+exist17=e:\sts_test_dir\RollbackAllTestCase2_register_temp_drive2.txt
+exist18=e:\sts_test_dir\RollbackAllTestCase2_create_temp_drive2.txt
+exist19=e:\sts_test_dir\RollbackAllTestCase2_overwrite_file_drive2.txt
+
+exist20=c:\sts_test_dir\RollbackAllTestCase3_register_file_drive1.txt
+exist21=c:\sts_test_dir\RollbackAllTestCase3_create_file_drive1.txt
+exist22=c:\sts_test_dir\RollbackAllTestCase3_register_temp_drive1.txt
+exist23=c:\sts_test_dir\RollbackAllTestCase3_create_temp_drive1.txt
+exist24=c:\sts_test_dir\RollbackAllTestCase3_overwrite_file_drive1.txt
+exist25=e:\sts_test_dir\RollbackAllTestCase3_register_file_drive2.txt
+exist26=e:\sts_test_dir\RollbackAllTestCase3_create_file_drive2.txt
+exist27=e:\sts_test_dir\RollbackAllTestCase3_register_temp_drive2.txt
+exist28=e:\sts_test_dir\RollbackAllTestCase3_create_temp_drive2.txt
+exist29=e:\sts_test_dir\RollbackAllTestCase3_overwrite_file_drive2.txt
+
+exist30=c:\sts_test_dir\RollbackAllTestCase4_register_file_drive1.txt
+exist31=c:\sts_test_dir\RollbackAllTestCase4_create_file_drive1.txt
+exist32=c:\sts_test_dir\RollbackAllTestCase4_register_temp_drive1.txt
+exist33=c:\sts_test_dir\RollbackAllTestCase4_create_temp_drive1.txt
+exist34=c:\sts_test_dir\RollbackAllTestCase4_overwrite_file_drive1.txt
+exist35=e:\sts_test_dir\RollbackAllTestCase4_register_file_drive2.txt
+exist36=e:\sts_test_dir\RollbackAllTestCase4_create_file_drive2.txt
+exist37=e:\sts_test_dir\RollbackAllTestCase4_register_temp_drive2.txt
+exist38=e:\sts_test_dir\RollbackAllTestCase4_create_temp_drive2.txt
+exist39=e:\sts_test_dir\RollbackAllTestCase4_overwrite_file_drive2.txt
+
+exist40=c:\sts_test_dir\RollbackAllTestCase5_register_file_drive1.txt
+exist41=c:\sts_test_dir\RollbackAllTestCase5_create_file_drive1.txt
+exist42=c:\sts_test_dir\RollbackAllTestCase5_overwrite_file_drive1.txt
+exist43=e:\sts_test_dir\RollbackAllTestCase5_register_file_drive2.txt
+exist44=e:\sts_test_dir\RollbackAllTestCase5_create_file_drive2.txt
+exist45=e:\sts_test_dir\RollbackAllTestCase5_overwrite_file_drive2.txt
+
+exist46=c:\sts_test_dir\RollbackAllTestCase6_register_file_drive1.txt
+exist47=c:\sts_test_dir\RollbackAllTestCase6_create_file_drive1.txt
+exist48=c:\sts_test_dir\RollbackAllTestCase6_overwrite_file_drive1.txt
+exist49=e:\sts_test_dir\RollbackAllTestCase6_register_file_drive2.txt
+exist50=e:\sts_test_dir\RollbackAllTestCase6_create_file_drive2.txt
+exist51=e:\sts_test_dir\RollbackAllTestCase6_overwrite_file_drive2.txt
+
+numnonexist=20
+nonexist0=c:\sts_test_dir\RollbackAllTestCase1_remove_file_drive1.txt
+nonexist1=e:\sts_test_dir\RollbackAllTestCase1_remove_file_drive2.txt
+
+nonexist2=c:\sts_test_dir\RollbackAllTestCase2_remove_file_drive1.txt
+nonexist3=e:\sts_test_dir\RollbackAllTestCase2_remove_file_drive2.txt
+
+nonexist4=c:\sts_test_dir\RollbackAllTestCase3_remove_file_drive1.txt
+nonexist5=e:\sts_test_dir\RollbackAllTestCase3_remove_file_drive2.txt
+
+nonexist6=c:\sts_test_dir\RollbackAllTestCase4_remove_file_drive1.txt
+nonexist7=e:\sts_test_dir\RollbackAllTestCase4_remove_file_drive2.txt
+
+nonexist8=c:\sts_test_dir\RollbackAllTestCase5_remove_file_drive1.txt
+nonexist9=e:\sts_test_dir\RollbackAllTestCase5_remove_file_drive2.txt
+nonexist10=c:\sts_test_dir\RollbackAllTestCase5_register_temp_drive1.txt
+nonexist11=c:\sts_test_dir\RollbackAllTestCase5_create_temp_drive1.txt
+nonexist12=e:\sts_test_dir\RollbackAllTestCase5_register_temp_drive2.txt
+nonexist13=e:\sts_test_dir\RollbackAllTestCase5_create_temp_drive2.txt
+
+nonexist14=c:\sts_test_dir\RollbackAllTestCase6_remove_file_drive1.txt
+nonexist15=e:\sts_test_dir\RollbackAllTestCase6_remove_file_drive2.txt
+nonexist16=c:\sts_test_dir\RollbackAllTestCase6_register_temp_drive1.txt
+nonexist17=c:\sts_test_dir\RollbackAllTestCase6_create_temp_drive1.txt
+nonexist18=e:\sts_test_dir\RollbackAllTestCase6_register_temp_drive2.txt
+nonexist19=e:\sts_test_dir\RollbackAllTestCase6_create_temp_drive2.txt
+
+[SEC_STS_TestCase028_post_rollbackall]
+numexist=34
+exist0=c:\sts_test_dir\RollbackAllTestCase1_overwrite_file_drive1.txt
+exist1=e:\sts_test_dir\RollbackAllTestCase1_overwrite_file_drive2.txt
+exist2=c:\sts_test_dir\RollbackAllTestCase1_remove_file_drive1.txt
+exist3=e:\sts_test_dir\RollbackAllTestCase1_remove_file_drive2.txt
+
+exist4=c:\sts_test_dir\RollbackAllTestCase2_register_file_drive1.txt
+exist5=c:\sts_test_dir\RollbackAllTestCase2_create_file_drive1.txt
+exist6=c:\sts_test_dir\RollbackAllTestCase2_overwrite_file_drive1.txt
+exist7=e:\sts_test_dir\RollbackAllTestCase2_register_file_drive2.txt
+exist8=e:\sts_test_dir\RollbackAllTestCase2_create_file_drive2.txt
+exist9=e:\sts_test_dir\RollbackAllTestCase2_overwrite_file_drive2.txt
+
+exist10=c:\sts_test_dir\RollbackAllTestCase3_register_file_drive1.txt
+exist11=c:\sts_test_dir\RollbackAllTestCase3_create_file_drive1.txt
+exist12=c:\sts_test_dir\RollbackAllTestCase3_overwrite_file_drive1.txt
+exist13=e:\sts_test_dir\RollbackAllTestCase3_register_file_drive2.txt
+exist14=e:\sts_test_dir\RollbackAllTestCase3_create_file_drive2.txt
+exist15=e:\sts_test_dir\RollbackAllTestCase3_overwrite_file_drive2.txt
+
+exist16=c:\sts_test_dir\RollbackAllTestCase4_register_file_drive1.txt
+exist17=c:\sts_test_dir\RollbackAllTestCase4_create_file_drive1.txt
+exist18=c:\sts_test_dir\RollbackAllTestCase4_overwrite_file_drive1.txt
+exist19=e:\sts_test_dir\RollbackAllTestCase4_register_file_drive2.txt
+exist20=e:\sts_test_dir\RollbackAllTestCase4_create_file_drive2.txt
+exist21=e:\sts_test_dir\RollbackAllTestCase4_overwrite_file_drive2.txt
+
+exist22=c:\sts_test_dir\RollbackAllTestCase5_register_file_drive1.txt
+exist23=c:\sts_test_dir\RollbackAllTestCase5_create_file_drive1.txt
+exist24=c:\sts_test_dir\RollbackAllTestCase5_overwrite_file_drive1.txt
+exist25=e:\sts_test_dir\RollbackAllTestCase5_register_file_drive2.txt
+exist26=e:\sts_test_dir\RollbackAllTestCase5_create_file_drive2.txt
+exist27=e:\sts_test_dir\RollbackAllTestCase5_overwrite_file_drive2.txt
+
+exist28=c:\sts_test_dir\RollbackAllTestCase6_register_file_drive1.txt
+exist29=c:\sts_test_dir\RollbackAllTestCase6_create_file_drive1.txt
+exist30=c:\sts_test_dir\RollbackAllTestCase6_overwrite_file_drive1.txt
+exist31=e:\sts_test_dir\RollbackAllTestCase6_register_file_drive2.txt
+exist32=e:\sts_test_dir\RollbackAllTestCase6_create_file_drive2.txt
+exist33=e:\sts_test_dir\RollbackAllTestCase6_overwrite_file_drive2.txt
+
+numnonexist=38
+nonexist0=c:\sts_test_dir\RollbackAllTestCase1_register_file_drive1.txt
+nonexist1=c:\sts_test_dir\RollbackAllTestCase1_create_file_drive1.txt
+nonexist2=c:\sts_test_dir\RollbackAllTestCase1_register_temp_drive1.txt
+nonexist3=c:\sts_test_dir\RollbackAllTestCase1_create_temp_drive1.txt
+nonexist4=e:\sts_test_dir\RollbackAllTestCase1_register_file_drive2.txt
+nonexist5=e:\sts_test_dir\RollbackAllTestCase1_create_file_drive2.txt
+nonexist6=e:\sts_test_dir\RollbackAllTestCase1_register_temp_drive2.txt
+nonexist7=e:\sts_test_dir\RollbackAllTestCase1_create_temp_drive2.txt
+
+nonexist8=c:\sts_test_dir\RollbackAllTestCase2_remove_file_drive1.txt
+nonexist9=e:\sts_test_dir\RollbackAllTestCase2_remove_file_drive2.txt
+nonexist10=c:\sts_test_dir\RollbackAllTestCase2_register_temp_drive1.txt
+nonexist11=c:\sts_test_dir\RollbackAllTestCase2_create_temp_drive1.txt
+nonexist12=e:\sts_test_dir\RollbackAllTestCase2_register_temp_drive2.txt
+nonexist13=e:\sts_test_dir\RollbackAllTestCase2_create_temp_drive2.txt
+
+nonexist14=c:\sts_test_dir\RollbackAllTestCase3_remove_file_drive1.txt
+nonexist15=e:\sts_test_dir\RollbackAllTestCase3_remove_file_drive2.txt
+nonexist16=c:\sts_test_dir\RollbackAllTestCase3_register_temp_drive1.txt
+nonexist17=c:\sts_test_dir\RollbackAllTestCase3_create_temp_drive1.txt
+nonexist18=e:\sts_test_dir\RollbackAllTestCase3_register_temp_drive2.txt
+nonexist19=e:\sts_test_dir\RollbackAllTestCase3_create_temp_drive2.txt
+
+nonexist20=c:\sts_test_dir\RollbackAllTestCase4_remove_file_drive1.txt
+nonexist21=e:\sts_test_dir\RollbackAllTestCase4_remove_file_drive2.txt
+nonexist22=c:\sts_test_dir\RollbackAllTestCase4_register_temp_drive1.txt
+nonexist23=c:\sts_test_dir\RollbackAllTestCase4_create_temp_drive1.txt
+nonexist24=e:\sts_test_dir\RollbackAllTestCase4_register_temp_drive2.txt
+nonexist25=e:\sts_test_dir\RollbackAllTestCase4_create_temp_drive2.txt
+
+nonexist26=c:\sts_test_dir\RollbackAllTestCase5_remove_file_drive1.txt
+nonexist27=e:\sts_test_dir\RollbackAllTestCase5_remove_file_drive2.txt
+nonexist28=c:\sts_test_dir\RollbackAllTestCase5_register_temp_drive1.txt
+nonexist29=c:\sts_test_dir\RollbackAllTestCase5_create_temp_drive1.txt
+nonexist30=e:\sts_test_dir\RollbackAllTestCase5_register_temp_drive2.txt
+nonexist31=e:\sts_test_dir\RollbackAllTestCase5_create_temp_drive2.txt
+
+nonexist32=c:\sts_test_dir\RollbackAllTestCase6_remove_file_drive1.txt
+nonexist33=e:\sts_test_dir\RollbackAllTestCase6_remove_file_drive2.txt
+nonexist34=c:\sts_test_dir\RollbackAllTestCase6_register_temp_drive1.txt
+nonexist35=c:\sts_test_dir\RollbackAllTestCase6_create_temp_drive1.txt
+nonexist36=e:\sts_test_dir\RollbackAllTestCase6_register_temp_drive2.txt
+nonexist37=e:\sts_test_dir\RollbackAllTestCase6_create_temp_drive2.txt
+
+[SEC_STS_TestCase029_post_recovery]
+numexist=34
+exist0=c:\sts_test_dir\RollbackAllTestCase1_overwrite_file_drive1.txt
+exist1=e:\sts_test_dir\RollbackAllTestCase1_overwrite_file_drive2.txt
+exist2=c:\sts_test_dir\RollbackAllTestCase1_remove_file_drive1.txt
+exist3=e:\sts_test_dir\RollbackAllTestCase1_remove_file_drive2.txt
+
+exist4=c:\sts_test_dir\RollbackAllTestCase2_register_file_drive1.txt
+exist5=c:\sts_test_dir\RollbackAllTestCase2_create_file_drive1.txt
+exist6=c:\sts_test_dir\RollbackAllTestCase2_overwrite_file_drive1.txt
+exist7=e:\sts_test_dir\RollbackAllTestCase2_register_file_drive2.txt
+exist8=e:\sts_test_dir\RollbackAllTestCase2_create_file_drive2.txt
+exist9=e:\sts_test_dir\RollbackAllTestCase2_overwrite_file_drive2.txt
+
+exist10=c:\sts_test_dir\RollbackAllTestCase3_register_file_drive1.txt
+exist11=c:\sts_test_dir\RollbackAllTestCase3_create_file_drive1.txt
+exist12=c:\sts_test_dir\RollbackAllTestCase3_overwrite_file_drive1.txt
+exist13=e:\sts_test_dir\RollbackAllTestCase3_register_file_drive2.txt
+exist14=e:\sts_test_dir\RollbackAllTestCase3_create_file_drive2.txt
+exist15=e:\sts_test_dir\RollbackAllTestCase3_overwrite_file_drive2.txt
+
+exist16=c:\sts_test_dir\RollbackAllTestCase4_register_file_drive1.txt
+exist17=c:\sts_test_dir\RollbackAllTestCase4_create_file_drive1.txt
+exist18=c:\sts_test_dir\RollbackAllTestCase4_overwrite_file_drive1.txt
+exist19=e:\sts_test_dir\RollbackAllTestCase4_register_file_drive2.txt
+exist20=e:\sts_test_dir\RollbackAllTestCase4_create_file_drive2.txt
+exist21=e:\sts_test_dir\RollbackAllTestCase4_overwrite_file_drive2.txt
+
+exist22=c:\sts_test_dir\RollbackAllTestCase5_register_file_drive1.txt
+exist23=c:\sts_test_dir\RollbackAllTestCase5_create_file_drive1.txt
+exist24=c:\sts_test_dir\RollbackAllTestCase5_overwrite_file_drive1.txt
+exist25=e:\sts_test_dir\RollbackAllTestCase5_register_file_drive2.txt
+exist26=e:\sts_test_dir\RollbackAllTestCase5_create_file_drive2.txt
+exist27=e:\sts_test_dir\RollbackAllTestCase5_overwrite_file_drive2.txt
+
+exist28=c:\sts_test_dir\RollbackAllTestCase6_register_file_drive1.txt
+exist29=c:\sts_test_dir\RollbackAllTestCase6_create_file_drive1.txt
+exist30=c:\sts_test_dir\RollbackAllTestCase6_overwrite_file_drive1.txt
+exist31=e:\sts_test_dir\RollbackAllTestCase6_register_file_drive2.txt
+exist32=e:\sts_test_dir\RollbackAllTestCase6_create_file_drive2.txt
+exist33=e:\sts_test_dir\RollbackAllTestCase6_overwrite_file_drive2.txt
+
+numnonexist=64
+nonexist0=c:\sts_test_dir\RollbackAllTestCase1_register_file_drive1.txt
+nonexist1=c:\sts_test_dir\RollbackAllTestCase1_create_file_drive1.txt
+nonexist2=c:\sts_test_dir\RollbackAllTestCase1_register_temp_drive1.txt
+nonexist3=c:\sts_test_dir\RollbackAllTestCase1_create_temp_drive1.txt
+nonexist4=e:\sts_test_dir\RollbackAllTestCase1_register_file_drive2.txt
+nonexist5=e:\sts_test_dir\RollbackAllTestCase1_create_file_drive2.txt
+nonexist6=e:\sts_test_dir\RollbackAllTestCase1_register_temp_drive2.txt
+nonexist7=e:\sts_test_dir\RollbackAllTestCase1_create_temp_drive2.txt
+
+nonexist8=c:\sts_test_dir\RollbackAllTestCase2_remove_file_drive1.txt
+nonexist9=e:\sts_test_dir\RollbackAllTestCase2_remove_file_drive2.txt
+nonexist10=c:\sts_test_dir\RollbackAllTestCase2_register_temp_drive1.txt
+nonexist11=c:\sts_test_dir\RollbackAllTestCase2_create_temp_drive1.txt
+nonexist12=e:\sts_test_dir\RollbackAllTestCase2_register_temp_drive2.txt
+nonexist13=e:\sts_test_dir\RollbackAllTestCase2_create_temp_drive2.txt
+
+nonexist14=c:\sts_test_dir\RollbackAllTestCase3_remove_file_drive1.txt
+nonexist15=e:\sts_test_dir\RollbackAllTestCase3_remove_file_drive2.txt
+nonexist16=c:\sts_test_dir\RollbackAllTestCase3_register_temp_drive1.txt
+nonexist17=c:\sts_test_dir\RollbackAllTestCase3_create_temp_drive1.txt
+nonexist18=e:\sts_test_dir\RollbackAllTestCase3_register_temp_drive2.txt
+nonexist19=e:\sts_test_dir\RollbackAllTestCase3_create_temp_drive2.txt
+
+nonexist20=c:\sts_test_dir\RollbackAllTestCase4_remove_file_drive1.txt
+nonexist21=e:\sts_test_dir\RollbackAllTestCase4_remove_file_drive2.txt
+nonexist22=c:\sts_test_dir\RollbackAllTestCase4_register_temp_drive1.txt
+nonexist23=c:\sts_test_dir\RollbackAllTestCase4_create_temp_drive1.txt
+nonexist24=e:\sts_test_dir\RollbackAllTestCase4_register_temp_drive2.txt
+nonexist25=e:\sts_test_dir\RollbackAllTestCase4_create_temp_drive2.txt
+
+nonexist26=c:\sts_test_dir\RollbackAllTestCase5_remove_file_drive1.txt
+nonexist27=e:\sts_test_dir\RollbackAllTestCase5_remove_file_drive2.txt
+nonexist28=c:\sts_test_dir\RollbackAllTestCase5_register_temp_drive1.txt
+nonexist29=c:\sts_test_dir\RollbackAllTestCase5_create_temp_drive1.txt
+nonexist30=e:\sts_test_dir\RollbackAllTestCase5_register_temp_drive2.txt
+nonexist31=e:\sts_test_dir\RollbackAllTestCase5_create_temp_drive2.txt
+
+nonexist32=c:\sts_test_dir\RollbackAllTestCase6_remove_file_drive1.txt
+nonexist33=e:\sts_test_dir\RollbackAllTestCase6_remove_file_drive2.txt
+nonexist34=c:\sts_test_dir\RollbackAllTestCase6_register_temp_drive1.txt
+nonexist35=c:\sts_test_dir\RollbackAllTestCase6_create_temp_drive1.txt
+nonexist36=e:\sts_test_dir\RollbackAllTestCase6_register_temp_drive2.txt
+nonexist37=e:\sts_test_dir\RollbackAllTestCase6_create_temp_drive2.txt
+
+nonexist38=c:\sys\install\integrityservices\61F7BBF8.drv
+nonexist39=c:\sys\install\integrityservices\61F7BBF8.log
+nonexist40=c:\sys\install\integrityservices\61F7BBF8\0.bak
+nonexist41=c:\sys\install\integrityservices\61F7BBF8\1.bak
+nonexist42=e:\sys\install\integrityservices\61F7BBF8.log
+nonexist43=e:\sys\install\integrityservices\61F7BBF8\0.bak
+nonexist44=e:\sys\install\integrityservices\61F7BBF8\1.bak
+
+nonexist45=c:\sys\install\integrityservices\B06C42F3.drv
+nonexist46=c:\sys\install\integrityservices\B06C42F3.log
+nonexist47=c:\sys\install\integrityservices\B06C42F3\0.bak
+nonexist48=c:\sys\install\integrityservices\B06C42F3\1.bak
+nonexist49=e:\sys\install\integrityservices\B06C42F3.log
+nonexist50=e:\sys\install\integrityservices\B06C42F3\0.bak
+nonexist51=e:\sys\install\integrityservices\B06C42F3\1.bak
+
+nonexist52=c:\sys\install\integrityservices\B630B6F0.drv
+nonexist53=c:\sys\install\integrityservices\B630B6F0.log
+nonexist54=e:\sys\install\integrityservices\B630B6F0.log
+
+nonexist55=c:\sys\install\integrityservices\BD596810.drv
+nonexist56=c:\sys\install\integrityservices\BD596810.log
+nonexist57=e:\sys\install\integrityservices\BD596810.log
+
+nonexist58=c:\sys\install\integrityservices\BE3D42F0.drv
+nonexist59=c:\sys\install\integrityservices\BE3D42F0.log
+nonexist60=e:\sys\install\integrityservices\BE3D42F0.log
+
+nonexist61=c:\sys\install\integrityservices\CB94C9F0.drv
+nonexist62=c:\sys\install\integrityservices\CB94C9F0.log
+nonexist63=e:\sys\install\integrityservices\CB94C9F0.log
+
+
+[SEC_STS_TestCase030_threadA_transcation]
+trslot=0
+
+[SEC_STS_TestCase030_threadB_transcation]
+trslot=1
+
+[SEC_STS_TestCase030_threadC_transcation]
+trslot=2
+trslotid=0
+
+[SEC_STS_TestCase030_threadA_registernew]
+trslot=0
+target=c:\sts_test_dir\testcase030_threada_register_new.txt
+
+[SEC_STS_TestCase030_threadB_registernew]
+trslot=1
+target=c:\sts_test_dir\testcase030_threadb_register_new.txt
+
+[SEC_STS_TestCase030_threadC_registernew]
+trslot=2
+target=e:\sts_test_dir\testcase030_threadc_register_new.txt
+
+[SEC_STS_TestCase030_threadA_createnew]
+trslot=0
+target=c:\sts_test_dir\testcase030_threada_create_new.txt
+
+[SEC_STS_TestCase030_threadB_createnew]
+trslot=1
+target=c:\sts_test_dir\testcase030_threadb_create_new.txt
+
+[SEC_STS_TestCase030_threadC_createnew]
+trslot=2
+target=e:\sts_test_dir\testcase030_threadc_create_new.txt
+
+[SEC_STS_TestCase030_threadA_remove]
+trslot=0
+target=c:\sts_test_dir\testcase030_threada_remove.txt
+
+[SEC_STS_TestCase030_threadB_remove]
+trslot=1
+target=c:\sts_test_dir\testcase030_threadb_remove.txt
+
+[SEC_STS_TestCase030_threadC_remove]
+trslot=2
+target=e:\sts_test_dir\testcase030_threadc_remove.txt
+
+[SEC_STS_TestCase030_threadA_registertemp]
+trslot=0
+target=c:\sts_test_dir\testcase030_threada_register_temp.txt
+
+[SEC_STS_TestCase030_threadB_registertemp]
+trslot=1
+target=c:\sts_test_dir\testcase030_threadb_register_temp.txt
+
+[SEC_STS_TestCase030_threadC_registertemp]
+trslot=2
+target=e:\sts_test_dir\testcase030_threadc_register_temp.txt
+
+[SEC_STS_TestCase030_threadA_createtemp]
+trslot=0
+target=c:\sts_test_dir\testcase030_threada_create_temp.txt
+
+[SEC_STS_TestCase030_threadB_createtemp]
+trslot=1
+target=c:\sts_test_dir\testcase030_threadb_create_temp.txt
+
+[SEC_STS_TestCase030_threadC_createtemp]
+trslot=2
+target=e:\sts_test_dir\testcase030_threadc_create_temp.txt
+
+[SEC_STS_TestCase030_threadA_overwrite]
+trslot=0
+target=c:\sts_test_dir\testcase030_threada_overwrite.txt
+
+[SEC_STS_TestCase030_threadB_overwrite]
+trslot=1
+target=c:\sts_test_dir\testcase030_threadb_overwrite.txt
+
+[SEC_STS_TestCase030_threadC_overwrite]
+trslot=2
+target=e:\sts_test_dir\testcase030_threadc_overwrite.txt
+
+[SEC_STS_TestCase030_pre_commit]
+numexist=15
+exist0=c:\sts_test_dir\testcase030_threada_register_new.txt
+exist1=c:\sts_test_dir\testcase030_threadb_register_new.txt
+exist2=e:\sts_test_dir\testcase030_threadc_register_new.txt
+exist3=c:\sts_test_dir\testcase030_threada_create_new.txt
+exist4=c:\sts_test_dir\testcase030_threadb_create_new.txt
+exist5=e:\sts_test_dir\testcase030_threadc_create_new.txt
+exist6=c:\sts_test_dir\testcase030_threada_register_temp.txt
+exist7=c:\sts_test_dir\testcase030_threadb_register_temp.txt
+exist8=e:\sts_test_dir\testcase030_threadc_register_temp.txt
+exist9=c:\sts_test_dir\testcase030_threada_create_temp.txt
+exist10=c:\sts_test_dir\testcase030_threadb_create_temp.txt
+exist11=e:\sts_test_dir\testcase030_threadc_create_temp.txt
+exist12=c:\sts_test_dir\testcase030_threada_overwrite.txt
+exist13=c:\sts_test_dir\testcase030_threadb_overwrite.txt
+exist14=e:\sts_test_dir\testcase030_threadc_overwrite.txt
+
+numnonexist=3
+nonexist0=c:\sts_test_dir\testcase030_threada_remove.txt
+nonexist1=c:\sts_test_dir\testcase030_threadb_remove.txt
+nonexist2=e:\sts_test_dir\testcase030_threadc_remove.txt
+
+[SEC_STS_TestCase030_post_commit]
+numexist=9
+exist0=c:\sts_test_dir\testcase030_threada_register_new.txt
+exist1=c:\sts_test_dir\testcase030_threadb_register_new.txt
+exist2=e:\sts_test_dir\testcase030_threadc_register_new.txt
+exist3=c:\sts_test_dir\testcase030_threada_create_new.txt
+exist4=c:\sts_test_dir\testcase030_threadb_create_new.txt
+exist5=e:\sts_test_dir\testcase030_threadc_create_new.txt
+exist6=c:\sts_test_dir\testcase030_threada_overwrite.txt
+exist7=c:\sts_test_dir\testcase030_threadb_overwrite.txt
+exist8=e:\sts_test_dir\testcase030_threadc_overwrite.txt
+
+numnonexist=9
+nonexist0=c:\sts_test_dir\testcase030_threada_remove.txt
+nonexist1=c:\sts_test_dir\testcase030_threadb_remove.txt
+nonexist2=e:\sts_test_dir\testcase030_threadc_remove.txt
+nonexist3=c:\sts_test_dir\testcase030_threada_register_temp.txt
+nonexist4=c:\sts_test_dir\testcase030_threadb_register_temp.txt
+nonexist5=e:\sts_test_dir\testcase030_threadc_register_temp.txt
+nonexist6=c:\sts_test_dir\testcase030_threada_create_temp.txt
+nonexist7=c:\sts_test_dir\testcase030_threadb_create_temp.txt
+nonexist8=e:\sts_test_dir\testcase030_threadc_create_temp.txt
+
+
+[SEC_STS_TestCase031_pre_rollback]
+numexist=15
+exist0=c:\sts_test_dir\testcase030_threada_register_new.txt
+exist1=c:\sts_test_dir\testcase030_threadb_register_new.txt
+exist2=e:\sts_test_dir\testcase030_threadc_register_new.txt
+exist3=c:\sts_test_dir\testcase030_threada_create_new.txt
+exist4=c:\sts_test_dir\testcase030_threadb_create_new.txt
+exist5=e:\sts_test_dir\testcase030_threadc_create_new.txt
+exist6=c:\sts_test_dir\testcase030_threada_register_temp.txt
+exist7=c:\sts_test_dir\testcase030_threadb_register_temp.txt
+exist8=e:\sts_test_dir\testcase030_threadc_register_temp.txt
+exist9=c:\sts_test_dir\testcase030_threada_create_temp.txt
+exist10=c:\sts_test_dir\testcase030_threadb_create_temp.txt
+exist11=e:\sts_test_dir\testcase030_threadc_create_temp.txt
+exist12=c:\sts_test_dir\testcase030_threada_overwrite.txt
+exist13=c:\sts_test_dir\testcase030_threadb_overwrite.txt
+exist14=e:\sts_test_dir\testcase030_threadc_overwrite.txt
+
+numnonexist=3
+nonexist0=c:\sts_test_dir\testcase030_threada_remove.txt
+nonexist1=c:\sts_test_dir\testcase030_threadb_remove.txt
+nonexist2=e:\sts_test_dir\testcase030_threadc_remove.txt
+
+[SEC_STS_TestCase031_post_rollback]
+numexist=6
+exist0=c:\sts_test_dir\testcase030_threada_remove.txt
+exist1=c:\sts_test_dir\testcase030_threadb_remove.txt
+exist2=e:\sts_test_dir\testcase030_threadc_remove.txt
+exist3=c:\sts_test_dir\testcase030_threada_overwrite.txt
+exist4=c:\sts_test_dir\testcase030_threadb_overwrite.txt
+exist5=e:\sts_test_dir\testcase030_threadc_overwrite.txt
+
+numnonexist=12
+nonexist0=c:\sts_test_dir\testcase030_threada_register_new.txt
+nonexist1=c:\sts_test_dir\testcase030_threadb_register_new.txt
+nonexist2=e:\sts_test_dir\testcase030_threadc_register_new.txt
+nonexist3=c:\sts_test_dir\testcase030_threada_create_new.txt
+nonexist4=c:\sts_test_dir\testcase030_threadb_create_new.txt
+nonexist5=e:\sts_test_dir\testcase030_threadc_create_new.txt
+nonexist6=c:\sts_test_dir\testcase030_threada_register_temp.txt
+nonexist7=c:\sts_test_dir\testcase030_threadb_register_temp.txt
+nonexist8=e:\sts_test_dir\testcase030_threadc_register_temp.txt
+nonexist9=c:\sts_test_dir\testcase030_threada_create_temp.txt
+nonexist10=c:\sts_test_dir\testcase030_threadb_create_temp.txt
+nonexist11=e:\sts_test_dir\testcase030_threadc_create_temp.txt
+
+[SEC_STS_TestCase034_transaction1]
+trslot=0
+
+[SEC_STS_TestCase034_transaction2]
+trslot=1
+trslotid=0
+
+
+[SEC_STS_TestCase035]
+trslot=0
+target=c:\sts_test_dir\TestCase035.txt
+
+[SEC_STS_InvalidLongFileName_TestCase036]
+trslot=2
+target=C:\sts_test_dir\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\1.txt
+basedir=C:\sts_test_dir\abcde
+
+[SEC-STS-RollbackAll-0002_TCB_dir_setup]
+operations=5
+operation0=rmdir -i c:\sys\install\integrityservices\
+operation1=mkdirall -i c:\sys\install\integrityservices\
+operation2=copy z:\tusif\tsts\data\rollbackall\SEC-STS-RollbackAll-0002\b6da9d45.drv c:\sys\install\integrityservices\b6da9d45.drv
+operation3=copy z:\tusif\tsts\data\rollbackall\SEC-STS-RollbackAll-0002\b6da9d45.log c:\sys\install\integrityservices\b6da9d45.log
+operation4=attrib r- c:\sys\install\integrityservices\*.*
+
+[SEC-STS-RollbackAll-0002]
+trslot=0
+
+[SEC-STS-RollbackAll-0002_post_rollbackall]
+numnonexist=2
+nonexist0=c:\sys\install\integrityservices\b6da9d45.drv
+nonexist1=c:\sys\install\integrityservices\b6da9d45.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/tsts.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1329 @@
+//
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+// tsts.script
+// Software Transaction Services Tests
+
+PRINT Run Software Transaction Services (STS) Tests
+
+// Load Suite
+LOAD_SUITE tststestserver
+
+RUN_UTILS MkDir c:\sts_test_dir\
+RUN_UTILS MkDir e:\sts_test_dir\
+
+//! @SYMTestCaseID		API-SEC-STS-API-0001
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0001 test documented in TMS : Test registering a new file when transaction is either committed or rolled-back
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0001 
+
+// SEC_STS_TestCase001_Commit
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase001_Commit.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase001_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase001_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase001_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase001_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase001_Commit_post_commit
+
+END_TESTCASE API-SEC-STS-API-0001
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-B-0001
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0001 test documented in TMS : Test registering a new file when transaction is either committed or rolled-back
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-B-0001
+
+// SEC_STS_TestCase001_Rollback
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase001_Rollback.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase001_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase001_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase001_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase001_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase001_Rollback_post_rollback
+
+END_TESTCASE API-SEC-STS-API-B-0001
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0002
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0002 test documented in TMS : Test creating a new file when transaction is either committed or rolled-back
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0002
+
+// SEC_STS_TestCase002a_Commit
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase002a_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase002a_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase002a_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase002a_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase002a_Commit_post_commit
+
+END_TESTCASE API-SEC-STS-API-0002
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-B-0002
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0002 test documented in TMS : Test creating a new file when transaction is either committed or rolled-back
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-B-0002
+
+// SEC_STS_TestCase002a_Rollback
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase002a_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase002a_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase002a_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase002a_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase002a_Rollback_post_rollback
+
+END_TESTCASE API-SEC-STS-API-B-0002
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-C-0002
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0002 test documented in TMS : Test creating a new file when transaction is either committed or rolled-back (target exists)
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-C-0002
+
+// SEC_STS_TestCase002b_Commit
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase002b_Commit.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase002b_Commit_pre_commit
+RUN_TEST_STEP_RESULT -11 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase002b_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep               z:\tusif\tsts\tsts.ini SEC_STS_TestCase002b_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CommitStep                   z:\tusif\tsts\tsts.ini SEC_STS_TestCase002b_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep               z:\tusif\tsts\tsts.ini SEC_STS_TestCase002b_Commit_post_commit
+
+END_TESTCASE API-SEC-STS-API-C-0002
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-D-0002
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0002 test documented in TMS : Test creating a new file when transaction is either committed or rolled-back (target exists)
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-D-0002
+
+// SEC_STS_TestCase002b_Rollback
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase002b_Rollback.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase002b_Rollback_pre_rollback
+RUN_TEST_STEP_RESULT -11 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase002b_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep               z:\tusif\tsts\tsts.ini SEC_STS_TestCase002b_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep                 z:\tusif\tsts\tsts.ini SEC_STS_TestCase002b_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep               z:\tusif\tsts\tsts.ini SEC_STS_TestCase002b_Rollback_post_rollback
+
+END_TESTCASE API-SEC-STS-API-D-0002
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0003
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0003 test documented in TMS : Test removing a file when transaction is either committed or rolled-back (target file exists)
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0003
+
+// SEC_STS_TestCase003_Commit
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase003a_Commit.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase003_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase003_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase003_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase003_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase003_Commit_post_commit
+
+END_TESTCASE API-SEC-STS-API-0003
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-B-0003
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0003 test documented in TMS : Test removing a file when transaction is either committed or rolled-back (target file exists)
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-B-0003
+
+// SEC_STS_TestCase003_Rollback
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase003_Rollback.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase003_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase003_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase003_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase003_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase003_Rollback_post_rollback
+
+END_TESTCASE API-SEC-STS-API-B-0003
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0004
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0004 test documented in TMS : Test registering a  temporary file when transaction is either committed or rolled-back
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0004
+
+// SEC_STS_TestCase004_Commit
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase004_Commit.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase004_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase004_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase004_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase004_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase004_Commit_post_commit
+
+END_TESTCASE API-SEC-STS-API-0004
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-B-0004
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0004 test documented in TMS : Test registering a  temporary file when transaction is either committed or rolled-back
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-B-0004
+
+// SEC_STS_TestCase004_Rollback
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase004_Rollback.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase004_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase004_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase004_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase004_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase004_Rollback_post_rollback
+
+END_TESTCASE API-SEC-STS-API-B-0004
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0005
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0005 test documented in TMS : Test creating a  temporary file when transaction is either committed or rolled-back
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0005
+
+// SEC_STS_TestCase005_Commit
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase005_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase005_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase005_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase005_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase005_Commit_post_commit
+
+END_TESTCASE API-SEC-STS-API-0005
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-B-0005
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0005 test documented in TMS : Test creating a  temporary file when transaction is either committed or rolled-back
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-B-0005
+
+// SEC_STS_TestCase005_Rollback
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase005_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase005_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase005_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase005_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase005_Rollback_post_rollback
+
+END_TESTCASE API-SEC-STS-API-B-0005
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0006
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0006 test documented in TMS :Test overwriting a file when transaction is either committed or rolled-back (target exists)
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0006
+
+// SEC_STS_TestCase006a_Commit
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase006a_Commit.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase006a_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase006a_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase006a_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase006a_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase006a_Commit_post_commit
+
+END_TESTCASE API-SEC-STS-API-0006
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-B-0006
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0006 test documented in TMS :Test overwriting a file when transaction is either committed or rolled-back (target exists)
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-B-0006
+
+//SEC_STS_TestCase006a_Rollback
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase006a_Rollback.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase006a_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase006a_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase006a_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase006a_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase006a_Rollback_post_rollback
+
+END_TESTCASE API-SEC-STS-API-B-0006
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-C-0006
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0006 test documented in TMS :Test overwriting a file when transaction is either committed or rolled-back (target doesn't exist)
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-C-0006
+
+// SEC_STS_TestCase006b_Commit
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase006b_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase006b_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase006b_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase006b_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase006b_Commit_post_commit
+
+END_TESTCASE API-SEC-STS-API-C-0006
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-D-0006
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0006 test documented in TMS :Test overwriting a file when transaction is either committed or rolled-back (target doesn't exist)
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-D-0006
+
+// SEC_STS_TestCase006b_Rollback
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase006b_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase006b_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase006b_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase006b_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase006b_Rollback_post_rollback
+
+END_TESTCASE API-SEC-STS-API-D-0006
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0007
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0007 test documented in TMS : Test committing or rolling-back a  transaction that consists  of multiple file operations
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0007
+
+// SEC_STS_TestCase007_Commit
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase007_Commit_register_file.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase007_Commit_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase007_Commit_remove_file.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase007_Commit_overwrite_file.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Commit_pre_commit_register_file
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Commit_pre_commit_create_file
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Commit_pre_commit_remove_file
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Commit_pre_commit_register_temp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Commit_pre_commit_create_temp
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Commit_pre_commit_overwrite_file
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Commit_pre_commit
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Commit_post_commit
+
+END_TESTCASE API-SEC-STS-API-0007
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-B-0007
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0007 test documented in TMS : Test committing or rolling-back a  transaction that consists  of multiple file operations
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-B-0007
+
+// SEC_STS_TestCase007_Rollback
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase007_Rollback_register_file.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase007_Rollback_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase007_Rollback_remove_file.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase007_Rollback_overwrite_file.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Rollback_pre_rollback_register_file
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Rollback_pre_rollback_create_file
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Rollback_pre_rollback_remove_file
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Rollback_pre_rollback_register_temp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Rollback_pre_rollback_create_temp
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Rollback_pre_rollback_overwrite_file
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Rollback_pre_rollback
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase007_Rollback_post_rollback
+
+END_TESTCASE API-SEC-STS-API-B-0007
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0008
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0008 test documented in TMS : Test committing or rolling-back a  transaction that consists  of multiple file operations issued through multiple sessions
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0008
+
+// SEC_STS_TestCase008_Commit
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase008_Commit_register_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase008_Commit_remove_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase008_Commit_register_temp_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase008_Commit_overwrite_file_tr1.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_tr0
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Commit_register_file_tr0
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Commit_remove_file_tr0
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Commit_register_temp_tr0
+RUN_TEST_STEP 100 tststestserver OpenTransactionStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_tr1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Commit_create_file_tr1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Commit_overwrite_file_tr1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Commit_create_temp_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Commit_pre_commit_check_files
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Commit_post_commit_check_files
+RUN_TEST_STEP 100 tststestserver CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_tr0
+RUN_TEST_STEP 100 tststestserver CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_tr1
+
+END_TESTCASE API-SEC-STS-API-0008
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-B-0008
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0008 test documented in TMS : Test committing or rolling-back a  transaction that consists  of multiple file operations issued through multiple sessions
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-B-0008
+
+// SEC_STS_TestCase008_Rollback
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase008_Rollback_register_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase008_Rollback_remove_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase008_Rollback_register_temp_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase008_Rollback_overwrite_file_tr1.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_tr0
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Rollback_register_file_tr0
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Rollback_remove_file_tr0
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Rollback_register_temp_tr0
+RUN_TEST_STEP 100 tststestserver OpenTransactionStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_tr1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Rollback_create_file_tr1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Rollback_overwrite_file_tr1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Rollback_create_temp_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Rollback_pre_rollback_check_files
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_Rollback_post_rollback_check_files
+RUN_TEST_STEP 100 tststestserver CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_tr0
+RUN_TEST_STEP 100 tststestserver CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase008_tr1
+
+END_TESTCASE API-SEC-STS-API-B-0008
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0009
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0009 test documented in TMS : Test opening a non-existing transaction
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0009
+
+// SEC_STS_TestCase009
+RUN_TEST_STEP_RESULT -1 tststestserver OpenTransactionStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase009_open_by_random_id
+RUN_TEST_STEP 100 tststestserver CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase009_open_by_random_id
+
+END_TESTCASE API-SEC-STS-API-0009
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0010
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0010 test documented in TMS : Test committing or rolling back concurrent sessions
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0010
+
+// SEC_STS_TestCase010a
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr0
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr1
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_file_tr0
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_file_tr1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_file_tr0
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_file_tr1
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_remove_file_tr0
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_remove_file_tr1
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_temp_tr0
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_temp_tr1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_temp_tr0
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_temp_tr1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_overwrite_file_tr0
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_overwrite_file_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_before_any_commit_or_rollback
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr0
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010a_after_tr0_commit_before_tr1_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010a_final
+RUN_UTILS DeleteFile c:\sts_test_dir\TestCase010*.txt
+
+END_TESTCASE API-SEC-STS-API-0010
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-B-0010
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0010 test documented in TMS : Test committing or rolling back concurrent sessions
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-B-0010
+
+// SEC_STS_TestCase010b
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr0
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr1
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_file_tr0
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_file_tr1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_file_tr0
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_file_tr1
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_remove_file_tr0
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_remove_file_tr1
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_temp_tr0
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_temp_tr1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_temp_tr0
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_temp_tr1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_overwrite_file_tr0
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_overwrite_file_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_before_any_commit_or_rollback
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr0
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010b_after_tr0_commit_before_tr1_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010b_final
+RUN_UTILS DeleteFile c:\sts_test_dir\TestCase010*.txt
+
+END_TESTCASE API-SEC-STS-API-B-0010
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-C-0010
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0010 test documented in TMS : Test committing or rolling back concurrent sessions
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-C-0010
+
+// SEC_STS_TestCase010c
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr0
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr1
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_file_tr0
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_file_tr1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_file_tr0
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_file_tr1
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_remove_file_tr0
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_remove_file_tr1
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_temp_tr0
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_temp_tr1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_temp_tr0
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_temp_tr1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_overwrite_file_tr0
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_overwrite_file_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_before_any_commit_or_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr0
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010c_after_tr0_rollback_before_tr1_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010c_final
+RUN_UTILS DeleteFile c:\sts_test_dir\TestCase010*.txt
+
+END_TESTCASE API-SEC-STS-API-C-0010
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-D-0010
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0010 test documented in TMS : Test committing or rolling back concurrent sessions
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-D-0010
+
+// SEC_STS_TestCase010d
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_remove_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_remove_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_temp_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_register_temp_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_overwrite_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase010_overwrite_file_tr1.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr0
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr1
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_file_tr0
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_file_tr1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_file_tr0
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_file_tr1
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_remove_file_tr0
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_remove_file_tr1
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_temp_tr0
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_register_temp_tr1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_temp_tr0
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_create_temp_tr1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_overwrite_file_tr0
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_overwrite_file_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_before_any_commit_or_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr0
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010d_after_tr0_rollback_before_tr1_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase010_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase010d_final
+RUN_UTILS DeleteFile c:\sts_test_dir\TestCase010*.txt
+
+END_TESTCASE API-SEC-STS-API-D-0010
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0011
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0011 test documented in TMS : Test committing or rolling back a transaction which affects multiple drives
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0011
+
+// SEC_STS_TestCase011_Commit
+RUN_UTILS MkDir e:\sts_test_dir\
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase011_register_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase011_register_temp_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase011_remove_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase011_overwrite_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase011_register_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase011_register_temp_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase011_remove_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase011_overwrite_file_drive2.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase011
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_register_file_drive1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_create_file_drive1
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_register_temp_drive1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_create_temp_drive1
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_remove_file_drive1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_overwrite_file_drive1
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_register_file_drive2
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_create_file_drive2
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_register_temp_drive2
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_create_temp_drive2
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_remove_file_drive2
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_overwrite_file_drive2
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_pre_commit_or_rollback
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase011
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_post_commit
+RUN_UTILS DeleteFile c:\sts_test_dir\TestCase011*.txt
+RUN_UTILS DeleteFile e:\sts_test_dir\TestCase011*.txt
+
+END_TESTCASE API-SEC-STS-API-0011
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-B-0011
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0011 test documented in TMS : Test committing or rolling back a transaction which affects multiple drives
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-B-0011
+
+// SEC_STS_TestCase011_Rollback
+RUN_UTILS MkDir e:\sts_test_dir\
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase011_register_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase011_register_temp_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase011_remove_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase011_overwrite_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase011_register_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase011_register_temp_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase011_remove_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase011_overwrite_file_drive2.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase011
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_register_file_drive1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_create_file_drive1
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_register_temp_drive1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_create_temp_drive1
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_remove_file_drive1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_overwrite_file_drive1
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_register_file_drive2
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_create_file_drive2
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_register_temp_drive2
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_create_temp_drive2
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_remove_file_drive2
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_overwrite_file_drive2
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_pre_commit_or_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase011
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase011_post_rollback
+RUN_UTILS DeleteFile c:\sts_test_dir\TestCase011*.txt
+RUN_UTILS DeleteFile e:\sts_test_dir\TestCase011*.txt
+
+END_TESTCASE API-SEC-STS-API-B-0011
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0012
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0012 test documented in TMS : Test committing or rolling back concurrent sessions affecting multiple drives
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0012
+
+// SEC_STS_TestCase012a
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_register_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_register_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr0
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr1
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_file_tr0
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_file_tr1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_file_tr0
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_file_tr1
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_remove_file_tr0
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_remove_file_tr1
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_temp_tr0
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_temp_tr1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_temp_tr0
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_temp_tr1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_overwrite_file_tr0
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_overwrite_file_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_before_any_commit_or_rollback
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr0
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012a_after_tr0_commit_before_tr1_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012a_final
+RUN_UTILS DeleteFile c:\sts_test_dir\TestCase012*.txt
+RUN_UTILS DeleteFile e:\sts_test_dir\TestCase012*.txt
+
+END_TESTCASE API-SEC-STS-API-0012
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-B-0012
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0012 test documented in TMS : Test committing or rolling back concurrent sessions affecting multiple drives
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-B-0012
+
+// SEC_STS_TestCase012b
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_register_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_register_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr0
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr1
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_file_tr0
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_file_tr1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_file_tr0
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_file_tr1
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_remove_file_tr0
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_remove_file_tr1
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_temp_tr0
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_temp_tr1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_temp_tr0
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_temp_tr1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_overwrite_file_tr0
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_overwrite_file_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_before_any_commit_or_rollback
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr0
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012b_after_tr0_commit_before_tr1_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012b_final
+RUN_UTILS DeleteFile c:\sts_test_dir\TestCase012*.txt
+RUN_UTILS DeleteFile e:\sts_test_dir\TestCase012*.txt
+
+END_TESTCASE API-SEC-STS-API-B-0012
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-C-0012
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0012 test documented in TMS : Test committing or rolling back concurrent sessions affecting multiple drives
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-C-0012
+
+// SEC_STS_TestCase012c
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_register_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_register_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr0
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr1
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_file_tr0
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_file_tr1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_file_tr0
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_file_tr1
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_remove_file_tr0
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_remove_file_tr1
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_temp_tr0
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_temp_tr1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_temp_tr0
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_temp_tr1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_overwrite_file_tr0
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_overwrite_file_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_before_any_commit_or_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr0
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012c_after_tr0_rollback_before_tr1_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012c_final
+RUN_UTILS DeleteFile c:\sts_test_dir\TestCase012*.txt
+RUN_UTILS DeleteFile e:\sts_test_dir\TestCase012*.txt
+
+END_TESTCASE API-SEC-STS-API-C-0012
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-D-0012
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0012 test documented in TMS : Test committing or rolling back concurrent sessions affecting multiple drives
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-D-0012
+
+// SEC_STS_TestCase012d
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_register_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_register_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_remove_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\TestCase012_remove_file_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_register_temp_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_register_temp_tr1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_overwrite_file_tr0.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\TestCase012_overwrite_file_tr1.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr0
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr1
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_file_tr0
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_file_tr1
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_file_tr0
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_file_tr1
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_remove_file_tr0
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_remove_file_tr1
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_temp_tr0
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_register_temp_tr1
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_temp_tr0
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_create_temp_tr1
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_overwrite_file_tr0
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_overwrite_file_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_before_any_commit_or_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr0
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012d_after_tr0_rollback_before_tr1_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase012_tr1
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase012d_final
+RUN_UTILS DeleteFile c:\sts_test_dir\TestCase012*.txt
+RUN_UTILS DeleteFile e:\sts_test_dir\TestCase012*.txt
+
+END_TESTCASE API-SEC-STS-API-D-0012
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0014
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0014 test documented in TMS : Test directory support of RegisterNewFileL API when transaction is rolled back.
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0014 
+
+// SEC_STS_TestCase014
+RUN_UTILS MkDir c:\sts_test_dir\SEC_STS_TestCase014_dummydir
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\SEC_STS_TestCase014_dummydir\SEC_STS_TestCase014.txt
+RUN_UTILS MakeReadWrite c:\sts_test_dir\SEC_STS_TestCase014_dummydir\SEC_STS_TestCase014.txt
+RUN_TEST_STEP 100 tststestserver    CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase014
+RUN_TEST_STEP 100 tststestserver    RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase014
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase014_pre_rollback
+RUN_TEST_STEP 100 tststestserver    RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase014
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase014_post_rollback
+RUN_TEST_STEP 100 tststestserver    CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase014
+
+END_TESTCASE API-SEC-STS-API-0014
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0015
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0015 test documented in TMS : Test directory support of RegisterNewFileL API when transaction is committed.
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0015
+
+// SEC_STS_TestCase015
+RUN_UTILS MkDir c:\sts_test_dir
+RUN_UTILS MkDir c:\sts_test_dir\SEC_STS_TestCase015_dummydir
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\SEC_STS_TestCase015_dummydir\SEC_STS_TestCase015.txt
+RUN_TEST_STEP 100 tststestserver    CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase015
+RUN_TEST_STEP 100 tststestserver    RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase015
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase015_pre_post_commit
+RUN_TEST_STEP 100 tststestserver    CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase015
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase015_pre_post_commit
+RUN_TEST_STEP 100 tststestserver    CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase015
+
+END_TESTCASE API-SEC-STS-API-0015
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0016
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0016 test documented in TMS : Test directory support of RegisterNewFileL API when transaction is rolled back.
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0016
+
+// SEC_STS_TestCase016
+RUN_UTILS MkDir c:\sts_test_dir\SEC_STS_TestCase016_dummydir
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\SEC_STS_TestCase016_dummydir\SEC_STS_TestCase016.txt
+RUN_UTILS MakeReadWrite c:\sts_test_dir\SEC_STS_TestCase016_dummydir\SEC_STS_TestCase016.txt
+RUN_TEST_STEP 100 tststestserver    CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase016
+RUN_TEST_STEP 100 tststestserver    RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase016_dir
+RUN_TEST_STEP 100 tststestserver    RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase016_file
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase016_pre_rollback
+RUN_TEST_STEP 100 tststestserver    RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase016
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase016_post_rollback
+RUN_TEST_STEP 100 tststestserver    CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase016
+
+END_TESTCASE API-SEC-STS-API-0016
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0017
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0017 test documented in TMS : Test directory support of RegisterNewFileL API when transaction is committed.
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0017
+
+// SEC_STS_TestCase017
+RUN_UTILS MkDir c:\sts_test_dir
+RUN_UTILS MkDir c:\sts_test_dir\SEC_STS_TestCase017_dummydir
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\SEC_STS_TestCase017_dummydir\SEC_STS_TestCase017.txt
+RUN_TEST_STEP 100 tststestserver    CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase017
+RUN_TEST_STEP 100 tststestserver    RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase017_dir
+RUN_TEST_STEP 100 tststestserver    RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase017_file
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase017_pre_post_commit
+RUN_TEST_STEP 100 tststestserver    CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase017
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase017_pre_post_commit
+RUN_TEST_STEP 100 tststestserver    CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase017
+
+END_TESTCASE API-SEC-STS-API-0017
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0018
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0018 test documented in TMS : Test directory support of RemoveL API when transaction is rolled back.
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0018
+
+// SEC_STS_TestCase018
+RUN_UTILS MkDir c:\sts_test_dir
+RUN_UTILS MkDir c:\sts_test_dir\SEC_STS_TestCase018_dummydir
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\SEC_STS_TestCase018_dummydir\SEC_STS_TestCase018.txt
+RUN_TEST_STEP 100 tststestserver    CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase018
+RUN_TEST_STEP 100 tststestserver    RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase018
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase018_pre_rollback
+RUN_TEST_STEP 100 tststestserver    RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase018
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase018_post_rollback
+RUN_TEST_STEP 100 tststestserver    CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase018
+
+END_TESTCASE API-SEC-STS-API-0018
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0019
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0019 test documented in TMS : Test directory support of RemoveL API when transaction is committed.
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0019
+
+// SEC_STS_TestCase019
+RUN_UTILS MkDir c:\sts_test_dir
+RUN_UTILS MkDir c:\sts_test_dir\SEC_STS_TestCase019_dummydir
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\SEC_STS_TestCase019_dummydir\SEC_STS_TestCase019.txt
+RUN_UTILS MakeReadWrite c:\sts_test_dir\SEC_STS_TestCase019_dummydir\SEC_STS_TestCase019.txt
+RUN_TEST_STEP 100 tststestserver    CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase019
+RUN_TEST_STEP 100 tststestserver    RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase019
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase019_pre_post_commmit
+RUN_TEST_STEP 100 tststestserver    CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase019
+RUN_TEST_STEP 100 tststestserver    CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase019_pre_post_commmit
+RUN_TEST_STEP 100 tststestserver    CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase019
+
+END_TESTCASE API-SEC-STS-API-0019
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0021
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0021 test documented in TMS : Test creating files on a non-writable media
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0021
+
+// SEC_STS_TestCase021
+RUN_TEST_STEP        100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase021_create_new_or_temp
+RUN_TEST_STEP_RESULT -21 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase021_create_new_or_temp
+RUN_TEST_STEP        100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase021_create_new_or_temp
+RUN_TEST_STEP_RESULT -21 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase021_create_new_or_temp
+RUN_TEST_STEP        100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase021_create_new_or_temp
+RUN_TEST_STEP_RESULT -21 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase021_overwrite
+RUN_TEST_STEP        100 tststestserver CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase021_create_new_or_temp
+
+END_TESTCASE API-SEC-STS-API-0021
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0022
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0022 test documented in TMS : Test registering files on a non-writable media
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0022
+
+// SEC_STS_TestCase022
+RUN_TEST_STEP        100 tststestserver CreateTransactionStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase022
+RUN_TEST_STEP_RESULT -21 tststestserver RegisterNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase022
+RUN_TEST_STEP_RESULT -21 tststestserver RegisterTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase022
+RUN_TEST_STEP        100 tststestserver CloseTransactionStep    z:\tusif\tsts\tsts.ini SEC_STS_TestCase022
+
+END_TESTCASE API-SEC-STS-API-0022
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0023
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0023 test documented in TMS : Test APIs with non-fully qualified file path
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0023
+
+// SEC_STS_TestCase023
+RUN_TEST_STEP 100 tststestserver    CreateTransactionStep    z:\tusif\tsts\tsts.ini SEC_STS_TestCase023
+RUN_TEST_STEP !Result=-6 100 tststestserver    CreateTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase023
+RUN_TEST_STEP !Result=-6 100 tststestserver    RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase023
+RUN_TEST_STEP 100 tststestserver    RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase023
+RUN_TEST_STEP !Result=-6 100 tststestserver   RegisterNewFileStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase023
+RUN_TEST_STEP !Result=-6 100 tststestserver   CreateNewFileStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase023
+RUN_TEST_STEP 100 tststestserver    CloseTransactionStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase023
+
+END_TESTCASE API-SEC-STS-API-0023
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0024
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0024 test documented in TMS : Test APIs for files in the root directory
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0024
+
+// SEC_STS_TestCase024
+RUN_TEST_STEP 100 tststestserver    CreateTransactionStep    z:\tusif\tsts\tsts.ini SEC_STS_TestCase024
+RUN_TEST_STEP 100 tststestserver    CreateTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase024
+RUN_TEST_STEP 100 tststestserver    RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase024
+RUN_TEST_STEP 100 tststestserver    RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase024
+RUN_TEST_STEP 100 tststestserver   RegisterNewFileStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase024
+RUN_TEST_STEP 100 tststestserver   CreateNewFileStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase024
+RUN_TEST_STEP 100 tststestserver    CloseTransactionStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase024
+
+END_TESTCASE API-SEC-STS-API-0024
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0025
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0025 test documented in TMS : Test Remove for non-existent file
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0025
+
+// SEC_STS_TestCase025
+RUN_TEST_STEP 100 tststestserver    CreateTransactionStep    z:\tusif\tsts\tsts.ini SEC_STS_TestCase025_1
+RUN_TEST_STEP 100 tststestserver    RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase025_1
+RUN_TEST_STEP 100 tststestserver    RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase025_2
+RUN_TEST_STEP 100 tststestserver    CloseTransactionStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase025_1
+
+END_TESTCASE API-SEC-STS-API-0025
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0026
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0026 test documented in TMS : Test CreateTemporaryL for existent file
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0026
+
+// SEC_STS_TestCase026
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\SEC_STS_TestCase026.txt
+RUN_UTILS MakeReadWrite c:\sts_test_dir\SEC_STS_TestCase026.txt
+RUN_TEST_STEP 100 tststestserver          CreateTransactionStep    z:\tusif\tsts\tsts.ini SEC_STS_TestCase026
+RUN_TEST_STEP_RESULT -11 tststestserver   CreateTemporaryStep      z:\tusif\tsts\tsts.ini SEC_STS_TestCase026
+RUN_TEST_STEP 100 tststestserver          CloseTransactionStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase026
+
+END_TESTCASE API-SEC-STS-API-0026
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0027
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0027 test documented in TMS : Test APIs for non-existent drive
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0027
+
+// SEC_STS_TestCase027
+RUN_TEST_STEP 100 tststestserver    CreateTransactionStep    z:\tusif\tsts\tsts.ini SEC_STS_TestCase027
+RUN_TEST_STEP !Result=-18 100 tststestserver    CreateTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase027
+RUN_TEST_STEP !Result=-18 100 tststestserver    RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase027
+RUN_TEST_STEP !Result=-18 100 tststestserver    RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase027
+RUN_TEST_STEP !Result=-18 100 tststestserver   RegisterNewFileStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase027
+RUN_TEST_STEP !Result=-18 100 tststestserver   CreateNewFileStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase027
+RUN_TEST_STEP 100 tststestserver    CloseTransactionStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase027
+
+END_TESTCASE API-SEC-STS-API-0027
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0030
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0030 test documented in TMS : Test concurrent access to STS APIs
+//! @SYMTestPriority		High
+
+START_TESTCASE API-SEC-STS-API-0030
+
+// SEC_STS_TestCase030
+RUN_UTILS DeleteDirectory c:\sts_test_dir\
+RUN_UTILS DeleteDirectory e:\sts_test_dir\
+RUN_UTILS MkDir c:\sts_test_dir\
+RUN_UTILS MkDir e:\sts_test_dir\
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_remove.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_remove.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_remove.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_transcation
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_transcation
+RUN_TEST_STEP 100 tststestserver OpenTransactionStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_transcation
+CONSECUTIVE
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_registernew
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_registernew
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_registernew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_createnew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_createnew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_createnew
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_remove
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_remove
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_remove
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_registertemp
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_registertemp
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_registertemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_createtemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_createtemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_createtemp
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_overwrite
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_overwrite
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_overwrite
+CONSECUTIVE
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_pre_commit
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_transcation
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_transcation
+CONSECUTIVE
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_post_commit
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_transcation
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_post_commit
+
+END_TESTCASE API-SEC-STS-API-0030
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0031
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0031 test documented in TMS : Test concurrent access to STS APIs
+//! @SYMTestPriority		High
+
+START_TESTCASE API-SEC-STS-API-0031
+
+// SEC_STS_TestCase031
+RUN_UTILS DeleteDirectory c:\sts_test_dir\
+RUN_UTILS DeleteDirectory e:\sts_test_dir\
+RUN_UTILS MkDir c:\sts_test_dir\
+RUN_UTILS MkDir e:\sts_test_dir\
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_remove.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_remove.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_remove.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_transcation
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_transcation
+RUN_TEST_STEP 100 tststestserver OpenTransactionStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_transcation
+CONSECUTIVE
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_registernew
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_registernew
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_registernew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_createnew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_createnew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_createnew
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_remove
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_remove
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_remove
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_registertemp
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_registertemp
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_registertemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_createtemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_createtemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_createtemp
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_overwrite
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_overwrite
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_overwrite
+CONSECUTIVE
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase031_pre_rollback
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_transcation
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_transcation
+CONSECUTIVE
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase031_post_rollback
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_transcation
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase031_post_rollback
+
+END_TESTCASE API-SEC-STS-API-0031
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0032
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0032 test documented in TMS : Test concurrent access to STS APIs
+//! @SYMTestPriority		High
+
+START_TESTCASE API-SEC-STS-API-0032
+
+// SEC_STS_TestCase032
+RUN_UTILS DeleteDirectory c:\sts_test_dir\
+RUN_UTILS DeleteDirectory e:\sts_test_dir\
+RUN_UTILS MkDir c:\sts_test_dir\
+RUN_UTILS MkDir e:\sts_test_dir\
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_remove.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_remove.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_remove.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_transcation
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_transcation
+RUN_TEST_STEP 100 tststestserver OpenTransactionStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_transcation
+CONSECUTIVE
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_registernew
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_registernew
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_registernew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_createnew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_createnew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_createnew
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_remove
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_remove
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_remove
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_registertemp
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_registertemp
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_registertemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_createtemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_createtemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_createtemp
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_overwrite
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_overwrite
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_overwrite
+CONSECUTIVE
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_pre_commit
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_transcation
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_transcation
+RUN_TEST_STEP 100 tststestserver CommitStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_transcation
+CONSECUTIVE
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_post_commit
+
+END_TESTCASE API-SEC-STS-API-0032
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0033
+//! @SYMTestCaseDesc		Implementation of SEC-STS-API-0033 test documented in TMS : Test concurrent access to STS APIs
+//! @SYMTestPriority		High
+
+START_TESTCASE API-SEC-STS-API-0033
+
+// SEC_STS_TestCase033
+RUN_UTILS DeleteDirectory c:\sts_test_dir\
+RUN_UTILS DeleteDirectory e:\sts_test_dir\
+RUN_UTILS MkDir c:\sts_test_dir\
+RUN_UTILS MkDir e:\sts_test_dir\
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_register_new.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_register_temp.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_overwrite.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threada_remove.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\testcase030_threadb_remove.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\testcase030_threadc_remove.txt
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_transcation
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_transcation
+RUN_TEST_STEP 100 tststestserver OpenTransactionStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_transcation
+CONSECUTIVE
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_registernew
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_registernew
+RUN_TEST_STEP 100 tststestserver RegisterNewFileStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_registernew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_createnew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_createnew
+RUN_TEST_STEP 100 tststestserver CreateNewFileStep     z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_createnew
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_remove
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_remove
+RUN_TEST_STEP 100 tststestserver RemoveStep            z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_remove
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_registertemp
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_registertemp
+RUN_TEST_STEP 100 tststestserver RegisterTemporaryStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_registertemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_createtemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_createtemp
+RUN_TEST_STEP 100 tststestserver CreateTemporaryStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_createtemp
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_overwrite
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_overwrite
+RUN_TEST_STEP 100 tststestserver OverwriteStep         z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_overwrite
+CONSECUTIVE
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase031_pre_rollback
+CONCURRENT
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadA_transcation
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadB_transcation
+RUN_TEST_STEP 100 tststestserver RollbackStep          z:\tusif\tsts\tsts.ini SEC_STS_TestCase030_threadC_transcation
+CONSECUTIVE
+RUN_TEST_STEP 100 tststestserver CheckFilesStep        z:\tusif\tsts\tsts.ini SEC_STS_TestCase031_post_rollback
+
+END_TESTCASE API-SEC-STS-API-0033
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0034
+//! @SYMTestCaseDesc		Negative testing for duplicate API calls
+
+START_TESTCASE API-SEC-STS-API-0034
+
+// SEC_STS_TestCase034
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase034_transaction1
+RUN_TEST_STEP !Result=-14 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase034_transaction1
+RUN_TEST_STEP 100 tststestserver OpenTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase034_transaction2
+RUN_TEST_STEP !Result=-14 100 tststestserver OpenTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase034_transaction2
+RUN_TEST_STEP 100 tststestserver CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase034_transaction1
+RUN_TEST_STEP 100 tststestserver CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase034_transaction2
+
+END_TESTCASE API-SEC-STS-API-0034
+
+
+//! @SYMTestCaseID		API-SEC-STS-API-0035
+//! @SYMTestCaseDesc		File mode vs. file access
+//! @SYMTestPriority		Medium
+
+START_TESTCASE API-SEC-STS-API-0035
+
+// SEC_STS_TestCase035
+RUN_UTILS DeleteDirectory c:\sts_test_dir\
+RUN_UTILS MkDir c:\sts_test_dir\
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep z:\tusif\tsts\tsts.ini SEC_STS_TestCase035
+RUN_TEST_STEP 100 tststestserver FileModeTestStep      z:\tusif\tsts\tsts.ini SEC_STS_TestCase035
+RUN_TEST_STEP 100 tststestserver CloseTransactionStep  z:\tusif\tsts\tsts.ini SEC_STS_TestCase035
+
+END_TESTCASE API-SEC-STS-API-0035
+
+//! @SYMTestCaseID 		API-SEC_STS_InvalidLongFileName_TestCase-0036
+//! @SYMTestCaseDesc 		This test case checks whether the STS has created any directories partially when there  is an error code returned during file creation (e.g. error due to an invalid long file name being used)
+//! @SYMTestPriority 		Medium
+
+START_TESTCASE API-SEC_STS_InvalidLongFileName_TestCase-0036
+
+RUN_UTILS DeleteDirectory c:\sts_test_dir\
+RUN_UTILS MkDir c:\sts_test_dir\
+RUN_TEST_STEP 100 tststestserver CreateTransactionStep        z:\tusif\tsts\tsts.ini SEC_STS_InvalidLongFileName_TestCase036
+RUN_TEST_STEP 100 tststestserver CreateLongFileNameTestStep      z:\tusif\tsts\tsts.ini SEC_STS_InvalidLongFileName_TestCase036
+
+END_TESTCASE API-SEC_STS_InvalidLongFileName_TestCase-0036
+
+
+RUN_UTILS DeleteDirectory c:\sts_test_dir\
+RUN_UTILS DeleteDirectory e:\sts_test_dir\
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/tsts_bootuptimerecovery.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+//
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+// tsts_rollbackall.script
+// Software Transaction Services Tests
+
+PRINT Run Software Transaction Services (STS) Tests - RollBackAll interface
+
+//ensure that the boot up time recovery is completed before this script gets run
+DELAY 5000
+
+// Load Suite
+LOAD_SUITE tststestserver
+
+RUN_UTILS MkDir c:\sts_test_dir\
+RUN_UTILS MkDir e:\sts_test_dir\
+
+
+//! @SYMTestCaseID 		API-SEC-STS-API-0029
+//! @SYMTestCaseDesc 		Implementation of SEC-STS-API-0029 test documented in TMS : Test boot up time recovery of interrupted transactions
+//! @SYMTestPriority 		High
+
+START_TESTCASE API-SEC-STS-API-0029
+
+RUN_TEST_STEP 100 tststestserver CheckFilesStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase029_post_recovery
+
+END_TESTCASE API-SEC-STS-API-0029
+
+
+RUN_UTILS DeleteDirectory c:\sts_test_dir\
+RUN_UTILS DeleteDirectory e:\sts_test_dir\
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/scripts/tsts_rollbackall.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,118 @@
+//
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+// tsts_rollbackall.script
+// Software Transaction Services Tests
+
+PRINT Run Software Transaction Services (STS) Tests - RollBackAll interface
+
+//ensure that stsserver is not running (by introducing this delay) if this script is being run right after startup (ONB)
+//as sts erver is invoked by the daemon at boot up time we have to wait long enough for that operation to be finished otherwise overlap
+//of the execution of this script and the start up recovery might cause script failures
+DELAY 5000
+
+// Load Suite
+LOAD_SUITE tststestserver
+LOAD_SUITE tststestserverrollbackall
+
+RUN_UTILS MkDir c:\sts_test_dir\
+RUN_UTILS MkDir e:\sts_test_dir\
+
+
+//! @SYMTestCaseID 		API-SEC-STS-API-0028
+//! @SYMTestCaseDesc 		Implementation of SEC-STS-API-0028 test documented in TMS : Test rollback all pending transaction 
+//! @SYMTestPriority 		High
+
+START_TESTCASE API-SEC-STS-API-0028
+
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase1_register_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase1_create_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase1_register_temp_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase1_create_temp_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase1_overwrite_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase1_register_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase1_create_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase1_register_temp_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase1_create_temp_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase1_overwrite_file_drive2.txt
+
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase2_register_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase2_create_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase2_register_temp_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase2_create_temp_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase2_overwrite_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase2_register_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase2_create_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase2_register_temp_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase2_create_temp_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase2_overwrite_file_drive2.txt
+
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase3_register_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase3_create_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase3_register_temp_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase3_create_temp_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase3_overwrite_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase3_register_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase3_create_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase3_register_temp_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase3_create_temp_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase3_overwrite_file_drive2.txt
+
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase4_register_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase4_create_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase4_register_temp_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase4_create_temp_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase4_overwrite_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase4_register_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase4_create_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase4_register_temp_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase4_create_temp_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase4_overwrite_file_drive2.txt
+
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase5_register_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase5_create_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase5_overwrite_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase5_register_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase5_create_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase5_overwrite_file_drive2.txt
+
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase6_register_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase6_create_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt c:\sts_test_dir\RollbackAllTestCase6_overwrite_file_drive1.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase6_register_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase6_create_file_drive2.txt
+RUN_UTILS CopyFile z:\tusif\tsts\data\tstsdummy.txt e:\sts_test_dir\RollbackAllTestCase6_overwrite_file_drive2.txt
+
+RUN_TEST_STEP 100 tststestserver FileOperationsStep                  z:\tusif\tsts\tsts.ini SEC_STS_TestCase028_TCB_dir_setup
+RUN_TEST_STEP 100 tststestserver CheckFilesStep                      z:\tusif\tsts\tsts.ini SEC_STS_TestCase028_pre_rollbackall
+RUN_TEST_STEP 100 tststestserverrollbackall RollbackAllPendingStep   z:\tusif\tsts\tsts.ini SEC_STS_TestCase028
+RUN_TEST_STEP 100 tststestserver CheckFilesStep                      z:\tusif\tsts\tsts.ini SEC_STS_TestCase028_post_rollbackall
+RUN_TEST_STEP 100 tststestserver FileOperationsStep                  z:\tusif\tsts\tsts.ini file_system_cleanup
+
+END_TESTCASE API-SEC-STS-API-0028
+
+
+//! @SYMTestCaseID 	API-SEC-STS-RollbackAll-0002
+//! @SYMTestCaseDesc 	Verify that very big journals can be rolled back successfully
+//! @SYMTestPriority 	High
+
+START_TESTCASE API-SEC-STS-RollbackAll-0002
+
+RUN_TEST_STEP 100 tststestserver FileOperationsStep                  z:\tusif\tsts\tsts.ini SEC-STS-RollbackAll-0002_TCB_dir_setup
+RUN_TEST_STEP 100 tststestserverrollbackall RollbackAllPendingStep   z:\tusif\tsts\tsts.ini SEC-STS-RollbackAll-0002
+RUN_TEST_STEP 100 tststestserver CheckFilesStep                      z:\tusif\tsts\tsts.ini SEC-STS-RollbackAll-0002_post_rollbackall
+RUN_TEST_STEP 100 tststestserver FileOperationsStep                  z:\tusif\tsts\tsts.ini file_system_cleanup
+
+END_TESTCASE API-SEC-STS-RollbackAll-0002
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/source/tststestsuiteserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,269 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+ @internalComponent
+*/
+#include "tststestsuitestepcommon.h"
+#include "tststestsuiteserver.h"
+#include "tststestsuitestep.h"
+#include "tintegrityservicesstep.h"
+
+using namespace Usif;
+
+LOCAL_C void MainL()
+	{
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CStsTestServer* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CStsTestServer::NewL());
+	if(!err)
+		{
+		// Sync with the client and enter the active scheduler
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	delete server;
+	delete sched;
+	}
+
+
+TInt E32Main()
+/**
+ @return - Standard Epoc error code on process exit
+ Process entry point. Called by client using RProcess API
+ */
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAPD(err,MainL());
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return err;
+	}
+
+_LIT(KServerName,"tststestserver");
+
+CStsTestServer* CStsTestServer::NewL()
+/**
+ @return - Instance of the test server
+ Called inside the MainL() function to create and start the
+ CTestServer derived server.
+ */
+	{
+	CStsTestServer * server = new (ELeave) CStsTestServer();
+	CleanupStack::PushL(server);
+	server-> ConstructL();
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+void CStsTestServer::ConstructL()
+	{
+	CTestServer::ConstructL(KServerName);
+	User::LeaveIfError(iTestutil.Connect());
+	iTestutil.ShareAuto();
+	}
+
+CStsTestServer::~CStsTestServer()
+	{
+	for(TInt i=0; i<maxNumberOfSessions; ++i)
+		{
+		iSessions[i].Close(); //close the session in case it is open
+		}
+	iTestutil.Close();
+	}
+
+CTestStep* CStsTestServer::CreateTestStep(const TDesC& aStepName)
+/**
+ @return - A CTestStep derived instance
+ Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep* testStep = NULL;
+
+	if(aStepName == KCreateTransactionStep)
+		testStep = new CCreateTransactionStep(*this);
+	else if(aStepName == KOpenTransactionStep)
+		testStep = new COpenTransactionStep(*this);
+	else if(aStepName == KCloseTransactionStep)
+		testStep = new CCloseTransactionStep(*this);
+	else if(aStepName == KRegisterNewFileStep)
+		testStep = new CRegisterNewFileStep(*this);
+	else if(aStepName == KCreateNewFileStep)
+		testStep = new CCreateNewFileStep(*this);
+	else if(aStepName == KRemoveStep)
+		testStep = new CRemoveStep(*this);
+	else if(aStepName == KRegisterTemporaryStep)
+		testStep = new CRegisterTemporaryStep(*this);
+	else if(aStepName == KCreateTemporaryStep)
+		testStep = new CCreateTemporaryStep(*this);
+	else if(aStepName == KOverwriteStep)
+		testStep = new COverwriteStep(*this);
+	else if(aStepName == KCommitStep)
+		testStep = new CCommitStep(*this);
+	else if(aStepName == KRollbackStep)
+		testStep = new CRollbackStep(*this);
+	else if(aStepName == KRollbackAllPendingStep)
+		testStep = new CRollbackAllPendingStep(*this);
+	else if(aStepName == KCheckFilesStep)
+		testStep = new CCheckFilesStep(*this);
+	else if(aStepName == KCheckFileModeChangeStep)
+		testStep = new CheckFileModeChangeStep(*this);
+	else if(aStepName == KFileOperationsStep)
+		testStep = new CFileOperationsStep(*this);
+	else if(aStepName == KFileModeTestStep)
+		testStep = new CFileModeTestStep(*this);	
+		
+	//legacy integrity services support
+	else if (aStepName == KInstall)
+		testStep = new CInstallStep(*this);
+	else if (aStepName == KRecover)
+		testStep = new CRecoverStep(*this);
+	else if (aStepName == KCleanup)
+		testStep = new CCleanupStep(*this);
+	else if (aStepName == KCheck)
+		testStep = new CCheckStep(*this);
+
+	//integrity services unit tests
+	else if (aStepName == KJournalFileUnitTest)
+		testStep = new CJournalFileUnitTest(*this);
+	else if (aStepName == KJournalFileUnitTestAdd)
+		testStep = new CJournalFileUnitTestAdd(*this);
+	else if (aStepName == KJournalFileUnitTestTemp)
+		testStep = new CJournalFileUnitTestTemp(*this);
+	else if (aStepName == KJournalFileUnitTestRemove)
+		testStep = new CJournalFileUnitTestRemove(*this);
+	else if (aStepName == KJournalFileUnitTestRead)
+		testStep = new CJournalFileUnitTestRead(*this);
+	else if (aStepName == KJournalFileUnitTestEvent)
+		testStep = new CJournalFileUnitTestEvent(*this);
+	else if (aStepName == KJournalUnitTest)
+		testStep = new CJournalUnitTest(*this);
+	else if (aStepName == KJournalUnitTestInstall)
+		testStep = new CJournalUnitTestInstall(*this);
+	else if (aStepName == KJournalUnitTestRollback)
+		testStep = new CJournalUnitTestRollback(*this);
+	else if (aStepName == KIntegrityservicesUnitTestInstall)
+		testStep = new CIntegrityServicesTestInstall(*this);
+	else if (aStepName == KIntegrityservicesUnitTestRollback)
+		testStep = new CIntegrityServicesTestRollback(*this);	
+	else if (aStepName == KCreateLongFileNameTestStep)
+		testStep = new CCreateLongFileNameTestStep(*this);	
+	return testStep;
+	}
+
+TStsTransactionId CStsTestServer::CreateTransactionL(TInt aPos)
+	{
+	RStsSession& s = GetSessionL(aPos); //leaves if aPos is out of boundaries
+	TStsTransactionId id(0);
+	//see remark below at OpenTransactionL()
+	id = s.CreateTransactionL();
+	s.ShareAuto();
+	return id;
+	}
+
+void CStsTestServer::OpenTransactionL(TInt aPos, TStsTransactionId aTransactionID)
+	{
+	RStsSession& s = GetSessionL(aPos); //leaves if aPos is out of boundaries
+	/*
+	 If OpenTransactionL() leaves for some reasons (eg: in one of the testcases invalid id is supplied
+	 so it is expected to leave with KErrNotFound) s.ShareAuto() is not invoked, that's s is not shared
+	 in the context of the process. As leaving causes the corresponding teststep's thread to be killed the
+	 connection between the client and the server is destroyed by the kernel leaving s's iHandle to point to and invalid object.
+	 As a result any subsequent API call on s causes panic therefore we need to clean up properly in case of leave. 
+	 */
+	TRAPD(err, s.OpenTransactionL(aTransactionID));
+	if(err != KErrNone)
+		{
+		CloseTransactionL(aPos);
+		User::Leave(err);
+		}
+	s.ShareAuto();
+	}
+
+void CStsTestServer::CloseTransactionL(TInt aPos)
+	{
+	GetSessionL(aPos).Close();
+	}
+
+void CStsTestServer::RegisterNewL(TInt aPos, const TDesC& aFileName)
+	{
+	GetSessionL(aPos).RegisterNewL(aFileName);
+	}
+
+void CStsTestServer::CreateNewL(TInt aPos, const TDesC& aFileName, RFile &aFile, TUint aFileMode)
+	{
+	GetSessionL(aPos).CreateNewL(aFileName, aFile, aFileMode);
+	}
+
+void CStsTestServer::RemoveL(TInt aPos, const TDesC& aFileName)
+	{
+	GetSessionL(aPos).RemoveL(aFileName);
+	}
+
+void CStsTestServer::RegisterTemporaryL(TInt aPos, const TDesC& aFileName)
+	{
+	GetSessionL(aPos).RegisterTemporaryL(aFileName);
+	}
+
+void CStsTestServer::CreateTemporaryL(TInt aPos, const TDesC& aFileName, RFile &aFile, TUint aFileMode)
+	{
+	GetSessionL(aPos).CreateTemporaryL(aFileName, aFile, aFileMode);
+	}
+
+void CStsTestServer::OverwriteL(TInt aPos, const TDesC& aFileName, RFile &aFile, TUint aFileMode)
+	{
+	GetSessionL(aPos).OverwriteL(aFileName, aFile, aFileMode);
+	}
+
+void CStsTestServer::CommitL(TInt aPos)
+	{
+	GetSessionL(aPos).CommitL();
+	CloseTransactionL(aPos);
+	}
+
+void CStsTestServer::RollBackL(TInt aPos)
+	{
+	GetSessionL(aPos).RollBackL();
+	CloseTransactionL(aPos);
+	}
+
+RStsSession& CStsTestServer::GetSessionL(TInt aPos)
+	{
+	if(aPos <0 || aPos>=maxNumberOfSessions)
+		{
+		ERR_PRINTF2(_L("Position %d is out of boundaries!"), aPos);
+		User::Leave(KErrArgument);
+		}
+	return iSessions[aPos];
+	}
+
+TStsTransactionId CStsTestServer::GetTransactionIDL(TInt aPos)
+	{
+	return GetSessionL(aPos).TransactionIdL();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/source/tststestsuiteserverrollbackall.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+ @internalComponent
+*/
+#include "tststestsuiteserverrollbackall.h"
+#include "tststestsuitesteprollbackall.h"
+
+LOCAL_C void MainL()
+	{
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CStsTestServerRollbackAll* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CStsTestServerRollbackAll::NewL());
+	if(!err)
+		{
+		// Sync with the client and enter the active scheduler
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	delete server;
+	delete sched;
+	}
+
+
+TInt E32Main()
+/**
+ @return - Standard Epoc error code on process exit
+ Process entry point. Called by client using RProcess API
+ */
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAPD(err,MainL());
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return err;
+	}
+
+_LIT(KServerName,"tststestserverrollbackall");
+
+CStsTestServerRollbackAll* CStsTestServerRollbackAll::NewL()
+/**
+ @return - Instance of the test server
+ Called inside the MainL() function to create and start the
+ CTestServer derived server.
+ */
+	{
+	CStsTestServerRollbackAll * server = new (ELeave) CStsTestServerRollbackAll();
+	CleanupStack::PushL(server);
+	server-> ConstructL();
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+void CStsTestServerRollbackAll::ConstructL()
+	{
+	CTestServer::ConstructL(KServerName);
+	}
+
+CTestStep* CStsTestServerRollbackAll::CreateTestStep(const TDesC& aStepName)
+/**
+ @return - A CTestStep derived instance
+ Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep* testStep = NULL;
+
+	if(aStepName == KRollbackAllPendingStep)
+		testStep = new CRollbackAllPendingStep();
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/source/tststestsuitestep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1654 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* tststestsuitestep.h
+*
+*/
+
+
+/**
+ @file
+ @test
+ @internalComponent
+*/
+#include "tststestsuitestep.h"
+#include "tststestsuiteserver.h"
+#include <s32file.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "stsrecovery.h"
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+
+
+_LIT(KEFileShareExclusive, 				"EFileShareExclusive");
+_LIT(KEFileShareReadersOnly,			"EFileShareReadersOnly");
+_LIT(KEFileShareAny,					"EFileShareAny");
+_LIT(KEFileShareReadersOrWriters, 		"EFileShareReadersOrWriters");
+_LIT(KEFileStream, 						"EFileStream");
+_LIT(KEFileStreamText,					"EFileStreamText");
+_LIT(KEFileRead,						"EFileRead");
+_LIT(KEFileWrite,						"EFileWrite");
+_LIT(KEFileReadAsyncAll,				"EFileReadAsyncAll");
+_LIT(KEFileWriteBuffered,				"EFileWriteBuffered");
+_LIT(KEFileWriteDirectIO,				"EFileWriteDirectIO");
+_LIT(KEFileReadBuffered,				"EFileReadBuffered");
+_LIT(KEFileReadDirectIO,				"EFileReadDirectIO");
+_LIT(KEFileReadAheadOn,					"EFileReadAheadOn");
+_LIT(KEFileReadAheadOff,				"EFileReadAheadOff");
+_LIT(KORSign,							"|");
+
+
+CStsBaseTestStep::CStsBaseTestStep(CStsTestServer &aStsTestServer): iStsTestServer(aStsTestServer)
+	{
+	}
+
+CStsTestServer& CStsBaseTestStep::Server()
+	{
+	return iStsTestServer;
+	}
+
+TInt CStsBaseTestStep::GetIntFromConfigL(const TDesC& aName)
+	{
+	TInt ret(0);
+	if(!GetIntFromConfig(ConfigSection(), aName, ret))
+		{
+		ERR_PRINTF2(_L("%S is not found in config!"), &aName);
+		User::Leave(KErrNotFound);
+		}
+	return ret;
+	}
+
+TInt CStsBaseTestStep::GetTransactionSlotFromConfigL()
+/**
+ Reads the target file's path from the ini file
+ */
+	{
+	return GetIntFromConfigL(KTransactionSlot);
+	}
+
+TInt CStsBaseTestStep::GetTransactionSlotToReuseTransactionIdFromConfigL()
+	{
+	return GetIntFromConfigL(KTransactionSlotID);
+	}
+
+TInt CStsBaseTestStep::GetTransactionIdFromConfigL()
+	{
+	return GetIntFromConfigL(KTransactionID);
+	}
+
+TPtrC CStsBaseTestStep::GetStringFromConfigL(const TDesC& aName)
+	{
+	TPtrC ret;
+	if(!GetStringFromConfig(ConfigSection(), aName, ret))
+		{
+		ERR_PRINTF2(_L("%S is not found in config!"), &aName);
+		User::Leave(KErrNotFound);
+		}
+	return ret;
+	}
+
+TPtrC CStsBaseTestStep::GetTargetFilePathFromConfigL()
+	{
+	return GetStringFromConfigL(KTargetFile);
+	}
+
+void CStsBaseTestStep::WriteToFileL(RFile &aFile, TDesC& aString)
+	{
+	RFileWriteStream stream;
+	CleanupClosePushL(stream);
+	stream.Attach(aFile);
+	TRAPD(err,
+		stream.WriteL(aString);
+		stream.CommitL();
+		); //catch the error so that it can be reported
+	if(err!=KErrNone)
+		{
+		ERR_PRINTF2(_L("CStsBaseTestStep::WriteToFileL() Writing to file failed! Error code: %d"), err);
+		User::Leave(err);
+		}
+	stream.Close();
+	CleanupStack::PopAndDestroy(&stream);
+	}
+
+TBool CStsBaseTestStep::FileExistsL(const TDesC &aFileName)
+	{
+	INFO_PRINTF2(_L("CStsBaseTestStep::FileExistsL() %S"), &aFileName);
+	TBool ret=EFalse;
+	TRAPD(err, ret=Server().GetTestUtil().FileExistsL(aFileName)); //trap leaving fucntion to log error
+	if(err!=KErrNone)
+		{
+		ERR_PRINTF3(_L("CStsBaseTestStep::FileExistsL() File existence check failed for %S Error code: %d"), &aFileName, err);
+		User::Leave(err);
+		}
+	return ret;
+	}
+
+void CStsBaseTestStep::DeleteFileL(const TDesC &aFileName)	
+	{
+	TInt err=Server().GetTestUtil().Delete(aFileName); 
+	if(err!=KErrNone)
+		{
+		ERR_PRINTF3(_L("DeleteFileL() Deletion failed for %S Error code: %d"), &aFileName, err);
+		User::Leave(err);
+		}
+	}
+void CStsBaseTestStep::CopyFileL(const TDesC& aSourceFile, const TDesC& aDestinationFile)
+	{
+	TInt err=Server().GetTestUtil().Copy(aSourceFile, aDestinationFile); 
+	if(err!=KErrNone)
+		{
+		ERR_PRINTF4(_L("CStsBaseTestStep::CopyFileL() Copying %S to %S failed. Error code: %d"), &aSourceFile, &aDestinationFile, err);
+		User::Leave(err);
+		}
+	}
+
+void CStsBaseTestStep::RmDirL(const TDesC& aFileName)
+	{
+	TInt err=Server().GetTestUtil().RmDir(aFileName); 
+	if(err!=KErrNone)
+		{
+		ERR_PRINTF3(_L("CStsBaseTestStep::RmDirL() Deleting dir %S failed. Error code: %d"), &aFileName, err);
+		User::Leave(err);
+		}
+	}
+
+void CStsBaseTestStep::MkDirAllL(const TDesC& aFileName)
+	{
+	TInt err=Server().GetTestUtil().MkDirAll(aFileName); 
+	if(err!=KErrNone)
+		{
+		ERR_PRINTF3(_L("CStsBaseTestStep::MkDirAllL() Creating dir %S failed. Error code: %d"), &aFileName, err);
+		User::Leave(err);
+		}
+	}
+
+void CStsBaseTestStep::DeleteL(const TDesC& aFileName)
+	{
+	TInt err=Server().GetTestUtil().Delete(aFileName); 
+	if(err!=KErrNone)
+		{
+		ERR_PRINTF3(_L("CStsBaseTestStep::DeleteL() Deleting %S failed. Error code: %d"), &aFileName, err);
+		User::Leave(err);
+		}
+	}
+
+void CStsBaseTestStep::SetReadOnlyL(const TDesC& aFileName, TInt aSetReadOnly)
+	{
+	TInt err=Server().GetTestUtil().SetReadOnly(aFileName, aSetReadOnly);
+	if(err!=KErrNone)
+		{
+		ERR_PRINTF4(_L("CStsBaseTestStep::SetReadOnly() Trying to set \"readonly\" flag on %S failed to %d. Error code: %d"), &aFileName, aSetReadOnly, err);
+		User::Leave(err);
+		}
+	}
+
+HBufC* CStsBaseTestStep::CreateDataForNewFileCreatedByStsServerLC(const TDesC& aTestStepName, TNewFileType aType)
+	{
+	HBufC *buf = HBufC::NewLC(200);
+	TPtr bufPtr = buf->Des();
+
+	bufPtr.Append(KFileData1);
+	switch(aType)
+		{
+		case ENewTemporaryFile:
+			bufPtr.Append(KFileData2);
+			break;
+		case ENewPermanentFile:
+			bufPtr.Append(KFileData3);
+			break;
+		default:
+			bufPtr.Append(KFileData4);
+			break;
+		}
+	bufPtr.Append(KFileData5);
+	bufPtr.Append(KFileData7);
+	bufPtr.Append(aTestStepName);
+	bufPtr.Append(KFileData6);
+	return buf;
+	}
+
+//----------------------------------------
+
+CCreateTransactionStep::CCreateTransactionStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KCreateTransactionStep);
+	}
+
+void CCreateTransactionStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateTransactionStep Preamble"));
+	SetTestStepResult(EPass);
+	}
+
+void CCreateTransactionStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateTransactionStep in test step"));
+
+	TInt trSlot = GetTransactionSlotFromConfigL();
+	TInt trID = Server().CreateTransactionL(trSlot);
+	SetTestStepResult(EPass);
+	}
+
+void CCreateTransactionStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateTransactionStep Postamble"));
+	}
+
+//----------------------------------------
+
+COpenTransactionStep::COpenTransactionStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KOpenTransactionStep);
+	}
+
+void COpenTransactionStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("COpenTransactionStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void COpenTransactionStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("COpenTransactionStep in test step"));
+
+	
+	TInt trSlot = GetTransactionSlotFromConfigL(); //get required transaction slot from ini
+	TInt requiredSlotToTakeIdFrom(0);
+	TStsTransactionId trID(0);
+	TRAPD(err, requiredSlotToTakeIdFrom = GetTransactionSlotToReuseTransactionIdFromConfigL()); //get transaction id from ini to reuse its id
+	if(err == KErrNone)
+		{
+		trID = Server().GetTransactionIDL(requiredSlotToTakeIdFrom); //get ID from server from the requested slot
+		}
+	else
+		{
+		if(err == KErrNotFound)
+			{
+			trID =GetTransactionIdFromConfigL();
+			}
+		else
+			{
+			User::Leave(err);
+			}
+		}
+	//open transaction
+	Server().OpenTransactionL(trSlot, trID);
+
+	SetTestStepResult(EPass);
+	
+	}
+
+void COpenTransactionStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("COpenTransactionStep Postamble"));
+	
+	}
+
+
+
+//----------------------------------------
+		
+CCloseTransactionStep::CCloseTransactionStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KCloseTransactionStep);
+	}
+
+void CCloseTransactionStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCloseTransactionStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CCloseTransactionStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCloseTransactionStep in test step"));
+	
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//close transaction
+	Server().CloseTransactionL(trSlot);
+
+	SetTestStepResult(EPass);
+	
+	}
+
+void CCloseTransactionStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCloseTransactionStep Postamble"));
+	
+	}
+
+//----------------------------------------
+
+CRegisterNewFileStep::CRegisterNewFileStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KRegisterNewFileStep);
+	}
+
+void CRegisterNewFileStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRegisterNewFileStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CRegisterNewFileStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRegisterNewFileStep in test step"));
+	
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//get the target file path from ini
+	TPtrC filePathInIni = GetTargetFilePathFromConfigL();
+
+	Server().RegisterNewL(trSlot, filePathInIni);
+
+	SetTestStepResult(EPass);
+	
+	}
+
+void CRegisterNewFileStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRegisterNewFileStep Postamble"));
+	
+	}
+
+
+//----------------------------------------
+
+CCreateNewFileStep::CCreateNewFileStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KCreateNewFileStep);
+	}
+
+void CCreateNewFileStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateNewFileStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CCreateNewFileStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateNewFileStep in test step"));
+	
+	TFileMode fileMode(static_cast<TFileMode>(EFileShareExclusive|EFileWrite));
+	
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//get the target file path from ini
+	TPtrC filePathInIni = GetTargetFilePathFromConfigL();
+	
+	//the handle to the newly created file
+	RFile newFile;
+	CleanupClosePushL(newFile);
+	//register newly created file
+	Server().CreateNewL(trSlot, filePathInIni, newFile, fileMode);
+
+	HBufC *bufPtr=CreateDataForNewFileCreatedByStsServerLC(KCreateNewFileStep, ENewPermanentFile);
+	WriteToFileL(newFile, *bufPtr);
+	
+	CleanupStack::PopAndDestroy(2, &newFile);
+
+	SetTestStepResult(EPass);
+	
+	}
+
+void CCreateNewFileStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateNewFileStep Postamble"));
+	
+	}
+
+//----------------------------------------
+
+CRemoveStep::CRemoveStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KRemoveStep);
+	}
+
+void CRemoveStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRemoveStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CRemoveStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRemoveStep in test step"));
+	
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//get the target file path from ini
+	TPtrC filePathInIni = GetTargetFilePathFromConfigL();
+
+	Server().RemoveL(trSlot, filePathInIni);
+
+	SetTestStepResult(EPass);
+	
+	}
+
+void CRemoveStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRemoveStep Postamble"));
+	
+	}
+
+//----------------------------------------
+	
+CRegisterTemporaryStep::CRegisterTemporaryStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KRegisterTemporaryStep);
+	}
+
+void CRegisterTemporaryStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRegisterTemporaryStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CRegisterTemporaryStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRegisterTemporaryStep in test step"));
+	
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//get the target file path from ini
+	TPtrC filePathInIni = GetTargetFilePathFromConfigL();
+
+	Server().RegisterTemporaryL(trSlot, filePathInIni);
+
+	SetTestStepResult(EPass);
+	
+	}
+
+void CRegisterTemporaryStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRegisterTemporaryStep Postamble"));
+	
+	}
+
+//----------------------------------------
+	
+CCreateTemporaryStep::CCreateTemporaryStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KCreateTemporaryStep);
+	}
+
+void CCreateTemporaryStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateTemporaryStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CCreateTemporaryStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateTemporaryStep in test step"));
+	
+	TFileMode fileMode(static_cast<TFileMode>(EFileShareExclusive|EFileWrite));
+	
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//get the target file path from ini
+	TPtrC filePathInIni = GetTargetFilePathFromConfigL();
+	
+	//the handle to the newly created file
+	RFile newTempFile;
+	CleanupClosePushL(newTempFile);
+	//register newly created file
+	Server().CreateTemporaryL(trSlot, filePathInIni, newTempFile, fileMode);
+
+	HBufC* bufPtr=CreateDataForNewFileCreatedByStsServerLC(KCreateTemporaryStep, ENewTemporaryFile);
+	WriteToFileL(newTempFile, *bufPtr);
+
+	
+	CleanupStack::PopAndDestroy(2, &newTempFile);
+
+	SetTestStepResult(EPass);
+	
+	}
+
+void CCreateTemporaryStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateTemporaryStep Postamble"));
+	
+	}
+
+//----------------------------------------
+		
+COverwriteStep::COverwriteStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KOverwriteStep);
+	}
+
+void COverwriteStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("COverwriteStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void COverwriteStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("COverwriteStep in test step"));
+	
+	TFileMode fileMode(static_cast<TFileMode>(EFileShareExclusive|EFileWrite));
+	
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//get the target file path from ini
+	TPtrC filePathInIni = GetTargetFilePathFromConfigL();
+	
+	//the handle to the newly created file
+	RFile newOverwriteFile;
+	CleanupClosePushL(newOverwriteFile);
+
+	//register newly created file
+	Server().OverwriteL(trSlot, filePathInIni, newOverwriteFile, fileMode);
+
+	HBufC *bufPtr=CreateDataForNewFileCreatedByStsServerLC(KOverwriteStep, ENewPermanentFile);
+	WriteToFileL(newOverwriteFile, *bufPtr);
+	
+	CleanupStack::PopAndDestroy(2, &newOverwriteFile);
+
+	SetTestStepResult(EPass);
+	
+	}
+
+void COverwriteStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("COverwriteStep Postamble"));
+	
+	}
+
+//----------------------------------------
+		
+CCommitStep::CCommitStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KCommitStep);
+	}
+
+void CCommitStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCommitStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CCommitStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCommitStep in test step"));
+	
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//commit transaction
+	Server().CommitL(trSlot);
+
+	SetTestStepResult(EPass);
+	
+	}
+
+void CCommitStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCommitStep Postamble"));
+	
+	}
+
+//----------------------------------------
+		
+CRollbackStep::CRollbackStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KRollbackStep);
+	}
+
+void CRollbackStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRollbackStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CRollbackStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRollbackStep in test step"));
+	
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//roolback transaction
+	Server().RollBackL(trSlot);
+	
+	SetTestStepResult(EPass);
+	
+	}
+
+void CRollbackStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRollbackStep Postamble"));
+	
+	}
+
+//----------------------------------------
+		
+CRollbackAllPendingStep::CRollbackAllPendingStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KRollbackAllPendingStep);
+	}
+
+void CRollbackAllPendingStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRollbackAllPendingStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CRollbackAllPendingStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRollbackAllPendingStep in test step"));
+	
+	RStsRecoverySession session;
+	session.RollbackAllPendingL();
+	session.Close();
+	SetTestStepResult(EPass);
+	
+	}
+
+void CRollbackAllPendingStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRollbackAllPendingStep Postamble"));
+	
+	}
+
+//----------------------------------------
+			
+CCheckFilesStep::CCheckFilesStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KCheckFilesStep);
+	}
+
+void CCheckFilesStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCheckFilesStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CCheckFilesStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCheckFilesStep in test step"));
+	SetTestStepResult(EPass);
+	
+	RArray<TPtrC> fileNumExist;
+	RArray<TPtrC> fileNumNonExist;
+	CleanupClosePushL(fileNumExist);
+	CleanupClosePushL(fileNumNonExist);
+	GetFileNamesForCheckL(fileNumExist, fileNumNonExist);
+	CheckIfFilesExistL(fileNumExist);
+	CheckIfFilesNotExistL(fileNumNonExist);
+	CleanupStack::PopAndDestroy(2, &fileNumExist);
+	}
+
+void CCheckFilesStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCheckFilesStep Postamble"));
+	
+	}
+
+
+void CCheckFilesStep::GetFileNamesForCheckL(RArray<TPtrC>& aFileNumExist,RArray<TPtrC>& aFileNumNonExist)
+	{
+	TInt entriesNumExist=0;
+	TInt entriesNumNonExist=0;
+	
+	GetIntFromConfig(ConfigSection(), KNumExist, entriesNumExist);
+	GetIntFromConfig(ConfigSection(), KNumNonExist, entriesNumNonExist);
+	
+	ExtractFileNameL(entriesNumExist, KExistBase, aFileNumExist);
+	ExtractFileNameL(entriesNumNonExist, KNonExistBase, aFileNumNonExist);
+	}
+		
+void CCheckFilesStep::ExtractFileNameL(TInt aEntries, const TDesC& aEntryBase, RArray<TPtrC>& aFileArray)
+	{
+	TPtrC fname;
+	const TInt KKeyBufSize =64;
+	
+	for(TInt i=0; i<aEntries; i++)
+		{
+		//construct name of the key
+		TBuf<KKeyBufSize> keyBuf(aEntryBase);
+		keyBuf.AppendNum(i);
+		
+		if(!GetStringFromConfig(ConfigSection(),keyBuf,fname))
+			{
+			ERR_PRINTF2(_L("%S is not found in config!"), &keyBuf);
+			User::Leave(KErrNotFound);
+			}
+		aFileArray.Insert(fname, i);
+		}
+	}
+
+void CCheckFilesStep::CheckIfFilesExistL(const RArray<TPtrC>& aFileArray)
+	{
+	TInt nErr =0;
+	TInt fileCount=aFileArray.Count();
+	for(TInt i =0; i< fileCount; i++)
+		{
+		if(!FileExistsL(aFileArray[i]))
+			{
+			ERR_PRINTF2(_L("File missing: %S"), &aFileArray[i]);
+			nErr++;
+			}
+		}
+	if(nErr)
+		{
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CCheckFilesStep::CheckIfFilesNotExistL(const RArray<TPtrC>& aFileArray)
+	{
+	TInt nErr =0;
+	TInt fileCount=aFileArray.Count();
+	
+	for(TInt i =0; i< fileCount; i++)
+		{
+		if(FileExistsL(aFileArray[i]))
+			{
+			ERR_PRINTF2(_L("File exists (but shouldn't): %S"), &aFileArray[i]);
+			nErr++;
+			}
+		}
+	if(nErr)
+		{
+		SetTestStepResult(EFail);
+		}
+	}
+	
+
+//----------------------------------------
+			
+CheckFileModeChangeStep::CheckFileModeChangeStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KCheckFileModeChangeStep);
+	}
+
+void CheckFileModeChangeStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CheckFileModeChangeStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CheckFileModeChangeStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CheckFileModeChangeStep in test step"));
+	SetTestStepResult(EPass);
+	
+	TFileMode fileMode(static_cast<TFileMode>(EFileShareExclusive|EFileWrite));
+	
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//get the target file path from ini
+	TPtrC filePathInIni = GetTargetFilePathFromConfigL();
+	
+	//the handle to the newly created file
+	RFile newFile;
+	CleanupClosePushL(newFile);
+	//register newly created file
+	Server().CreateNewL(trSlot, filePathInIni, newFile, fileMode);
+
+
+	TFileMode fileModes[] = {
+			EFileShareReadersOnly,
+			EFileShareAny,
+			EFileShareReadersOrWriters,
+			EFileShareExclusive
+			};
+
+	const TDesC* fileModeStrings[] = {
+				&KEFileShareReadersOnly,
+				&KEFileShareAny,
+				&KEFileShareReadersOrWriters,
+				&KEFileShareExclusive
+				};
+	
+	TFileMode fileSubModes[] = {
+			EFileStream,
+			EFileStreamText,
+			EFileRead,
+			EFileWrite,
+			EFileReadAsyncAll,
+			EFileWriteBuffered,
+			EFileWriteDirectIO,
+			EFileReadBuffered,
+			EFileReadDirectIO,
+			EFileReadAheadOn,
+			EFileReadAheadOff
+			};
+
+	const TDesC* fileSubModeStrings[] = {
+			&KEFileStream,
+			&KEFileStreamText,
+			&KEFileRead,
+			&KEFileWrite,
+			&KEFileReadAsyncAll,
+			&KEFileWriteBuffered,
+			&KEFileWriteDirectIO,
+			&KEFileReadBuffered,
+			&KEFileReadDirectIO,
+			&KEFileReadAheadOn,
+			&KEFileReadAheadOff
+			};
+
+	
+	INFO_PRINTF4(_L("CheckFileModeChangeStep::ImplTestStepL() returned file handle mode is: %S%S%S"), &KEFileShareExclusive, &KORSign, &KEFileWrite);
+
+	for(TInt mode=0; mode<sizeof(fileModes)/sizeof(TFileMode); ++mode)
+		{
+		for(TInt submode=0; submode<sizeof(fileSubModes)/sizeof(TFileMode); ++submode)
+			{
+			TInt err=newFile.ChangeMode(static_cast<TFileMode>(fileModes[mode]|fileSubModes[submode]));
+			if(err==KErrNone)
+				{
+				INFO_PRINTF4(_L("<font color=green>CheckFileModeChangeStep::ImplTestStepL() setting file mode to %S%S%S was successful</font>"),fileModeStrings[mode], &KORSign, fileSubModeStrings[submode]);
+				}
+			else if(err==KErrArgument)
+				{
+				ERR_PRINTF4(_L("<font color=red>CheckFileModeChangeStep::ImplTestStepL() setting file mode to %S%S%S was unsuccessful. KErrArgument is returned!</font>"),fileModeStrings[mode], &KORSign, fileSubModeStrings[submode]);
+				}
+			else if(err==KErrAccessDenied)
+				{
+				ERR_PRINTF4(_L("<font color=red>CheckFileModeChangeStep::ImplTestStepL() setting file mode to %S%S%S was unsuccessful. KErrAccessDenied is returned!</font>"),fileModeStrings[mode], &KORSign, fileSubModeStrings[submode]);
+				}
+			else
+				{
+				ERR_PRINTF5(_L("<font color=red>CheckFileModeChangeStep::ImplTestStepL() setting file mode to %S%S%S was unsuccessful. %d is returned!</font>"),fileModeStrings[mode], &KORSign, fileSubModeStrings[submode], err);
+				}
+			}
+		
+		}
+	
+	CleanupStack::PopAndDestroy(&newFile);	
+	}
+
+void CheckFileModeChangeStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CheckFileModeChangeStep Postamble"));
+	
+	}
+
+//----------------------------------------
+			
+CFileOperationsStep::CFileOperationsStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KCheckFilesStep);
+	}
+
+void CFileOperationsStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CFileOperationsStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CFileOperationsStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CFileOperationsStep in test step"));
+	ProcessFileOperationsL();
+	SetTestStepResult(EPass);
+	
+	}
+
+void CFileOperationsStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CFileOperationsStep Postamble"));
+	
+	}
+		
+void CFileOperationsStep::ProcessFileOperationsL()
+	{
+	TInt numOfOps=GetIntFromConfigL(KNumOfOperations);
+	const TInt buffsize(30);
+	
+	for(TInt i=0; i<numOfOps; i++)
+		{
+		//construct name of the action (ie: action0, action1, ...)
+		TBuf<buffsize> opBuf(KOpNameBase);
+		opBuf.AppendNum(i);
+		TBool ignoreErrors=EFalse;
+		TPtrC operationLinePtr=GetStringFromConfigL(opBuf);
+		TInt nextParamStart(0);
+		TInt err=KErrNone;
+		
+		TPtrC command(GetNextCommandLineParameterL(operationLinePtr, nextParamStart));
+		TInt tempNextParamStart=nextParamStart;
+		TPtrC ignoreErrorsSwitch(GetNextCommandLineParameterL(operationLinePtr, nextParamStart));
+		if(ignoreErrorsSwitch == KIgnoreErrorsSwitch)
+			{
+			//"-i" switch is present
+			ignoreErrors=ETrue;
+			}
+		else
+			{
+			//no "-i" switch go back to original position
+			nextParamStart=tempNextParamStart;
+			}
+		if(command == KMkDirAllOp) //mkdirall
+			{
+			TPtrC target(GetNextCommandLineParameterL(operationLinePtr, nextParamStart));
+			TRAP(err, MkDirAllL(target));
+			}
+		else if(command == KRmDirOp) //rmdir
+			{
+			TPtrC target(GetNextCommandLineParameterL(operationLinePtr, nextParamStart));
+			TRAP(err, RmDirL(target));
+			}
+		else if(command == KCopyOp) //copy
+			{
+			TPtrC source(GetNextCommandLineParameterL(operationLinePtr, nextParamStart));
+			TPtrC dest(GetNextCommandLineParameterL(operationLinePtr, nextParamStart));
+			TRAP(err, CopyFileL(source, dest));
+			}
+		else if(command == KDeleteOp) //delete
+			{
+			TPtrC target(GetNextCommandLineParameterL(operationLinePtr, nextParamStart));
+			TRAP(err, DeleteL(target));
+			}
+		else if(command == KAttribOp) //attrib
+			{
+			enum TAttribOperation{
+			Unset=0x00,
+			SetReadOnly=0x01}; //later more operations can be handled
+
+			TPtrC attribSwitch(GetNextCommandLineParameterL(operationLinePtr, nextParamStart));
+			TInt operation=SetReadOnly*(attribSwitch[0] == TChar('r') || attribSwitch[0] == TChar('R'));
+			TInt flag=0;
+			if(attribSwitch[1] == TChar('+'))
+				flag=1;
+			else if(attribSwitch[1] == TChar('-'))
+				flag=-1;
+			if(attribSwitch.Length() == 2 && operation && flag)
+				{
+				TPtrC target(GetNextCommandLineParameterL(operationLinePtr, nextParamStart));
+				switch(operation) //later more operations can be handled
+					{
+					case SetReadOnly:
+						TRAP(err, SetReadOnlyL(target, (flag>0? 1 : 0)));
+						break;
+					default:
+						break;
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("<font color=red>CFileOperationsStep::ProcessFileOperationsL() Unknown command or corrupt command line %S </font>"), &operationLinePtr);
+				User::Leave(KErrArgument);
+				}
+			}
+		else //unknown command or corrupt command line (ie: missing command)
+			{
+			ERR_PRINTF2(_L("<font color=red>CFileOperationsStep::ProcessFileOperationsL() Unknown command or corrupt command line %S </font>"), &operationLinePtr);
+			User::Leave(KErrArgument);
+			}
+		
+		if(!ignoreErrors)
+			{
+			User::LeaveIfError(err);
+			}
+		}
+	}
+
+TPtrC CFileOperationsStep::GetNextCommandLineParameterL(const TDesC& aLine, TInt& aNextAvailablePos)
+	{
+	TInt lineLength=aLine.Length();
+	TInt startpos=0, stoppos=0;
+	TUint spaceChar=' ', tabChar='\t';
+	
+	if(lineLength==0 || aNextAvailablePos>=lineLength) //empty command line or next position is beyond the end of line
+		{
+		User::Leave(KErrArgument);
+		}
+
+	for(startpos=aNextAvailablePos; startpos<lineLength; ++startpos)
+		{
+		if(aLine[startpos]!=spaceChar && aLine[startpos]!=tabChar) //skip initial spaces
+			break;
+		}
+	
+	if(startpos==lineLength) //line contains only spaces
+		{
+		User::Leave(KErrArgument);
+		}
+	
+	for(stoppos=startpos; stoppos<lineLength; ++stoppos)
+		{
+		if(aLine[stoppos]==spaceChar || aLine[startpos]==tabChar) //skip all non space characters (ie: find the end of string)
+			break;
+		}
+	aNextAvailablePos=stoppos;
+	return TPtrC(aLine.Mid(startpos, stoppos-startpos));
+	
+	}
+
+//----------------------------------------
+			
+CFileModeTestStep::CFileModeTestStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	SetTestStepName(KFileModeTestStep);
+	}
+
+void CFileModeTestStep::ImplTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CFileModeTestStep Preamble"));
+	SetTestStepResult(EPass);
+	
+	}
+
+void CFileModeTestStep::ImplTestStepL()
+	{
+	INFO_PRINTF1(_L("CFileModeTestStep in test step"));
+	TestCase1L();
+	TestCase2L();
+	TestCase3L();
+	}
+
+void CFileModeTestStep::TestCase1L()
+	{
+	INFO_PRINTF1(_L("CFileModeTestStep test case 1"));
+	
+/*
+ This tescase tests that the file -that's created by the server and whose handle is returned to the client- is writable by the client 
+ */	
+	TFileMode fileModes[] = {
+			EFileShareAny,
+			EFileShareReadersOrWriters,
+			EFileShareExclusive
+			};
+
+	const TDesC* fileModeStrings[] = {
+				&KEFileShareAny,
+				&KEFileShareReadersOrWriters,
+				&KEFileShareExclusive
+				};
+	
+	TFileMode fileSubModes[] = {
+			EFileStream,
+			EFileStreamText,
+			EFileWrite,
+			EFileWriteBuffered,
+			EFileWriteDirectIO,
+			};
+
+	const TDesC* fileSubModeStrings[] = {
+			&KEFileStream,
+			&KEFileStreamText,
+			&KEFileWrite,
+			&KEFileWriteBuffered,
+			&KEFileWriteDirectIO,
+			};
+
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//get the target file path from ini
+	TPtrC filePathInIni = GetTargetFilePathFromConfigL();
+	TParsePtrC parse(filePathInIni);
+	
+	//the handle to the newly created file
+	RFile newFile;
+	//register newly created file
+	HBufC *bufPtr1=CreateDataForNewFileCreatedByStsServerLC(KCreateNewFileStep, ENewPermanentFile);
+	HBufC *bufPtr2=CreateDataForNewFileCreatedByStsServerLC(KCreateTemporaryStep, ENewTemporaryFile);
+	HBufC *bufPtr3=CreateDataForNewFileCreatedByStsServerLC(KOverwriteStep, ENewPermanentFile);
+	
+	HBufC* targetFileName = HBufC::NewLC(KMaxFileName);
+	TPtr fileNameBasePtr(targetFileName->Des());
+	fileNameBasePtr.Append(parse.DriveAndPath());
+	fileNameBasePtr.Append(parse.Name());
+	TPtr fileNameFullPtr(fileNameBasePtr);
+	
+	TInt counter(0);
+	for(TInt mode=0; mode<sizeof(fileModes)/sizeof(TFileMode); ++mode)
+		{
+		for(TInt submode=0; submode<sizeof(fileSubModes)/sizeof(TFileMode); ++submode, ++counter)
+			{
+			TInt err=KErrNone;
+			CleanupClosePushL(newFile);
+
+			TFileMode fileMode(static_cast<TFileMode>(fileModes[mode]|fileSubModes[submode]));
+			
+			//test RStsSession::CreateNewL()
+			fileNameFullPtr.Set(fileNameBasePtr);
+			fileNameFullPtr.Append(_L("_createnew"));
+			fileNameFullPtr.AppendNum(counter);
+			fileNameFullPtr.Append(parse.Ext());
+			TRAP(err,
+					Server().CreateNewL(trSlot, fileNameFullPtr, newFile, fileMode);
+					WriteToFileL(newFile, *bufPtr1);
+					);
+			newFile.Close();
+			if(err!=KErrNone)
+				{
+				ERR_PRINTF4(_L("The file -created by RStsSession::CreateNewL()- cannot be written into when the creation mode is set to  %S %S %S"), &fileModeStrings[mode], &KORSign, &fileSubModeStrings[submode]);
+				}
+	
+			//test RStsSession::CreateTemporaryL()
+			fileNameFullPtr.Set(fileNameBasePtr);
+			fileNameFullPtr.Append(_L("_createtemp"));
+			fileNameFullPtr.AppendNum(counter);
+			fileNameFullPtr.Append(parse.Ext());
+			TRAP(err,
+					Server().CreateTemporaryL(trSlot, fileNameFullPtr, newFile, fileMode);
+					WriteToFileL(newFile, *bufPtr2);
+					);
+			newFile.Close();
+			if(err!=KErrNone)
+				{
+				ERR_PRINTF4(_L("The file -created by RStsSession::CreateTemporaryL()- cannot be written into when the creation mode is set to  %S %S %S"), &fileModeStrings[mode], &KORSign, &fileSubModeStrings[submode]);
+				}
+			
+			//test RStsSession::OverwriteL()
+			fileNameFullPtr.Set(fileNameBasePtr);
+			fileNameFullPtr.Append(_L("_overwrite"));
+			fileNameFullPtr.AppendNum(counter);
+			fileNameFullPtr.Append(parse.Ext());
+			TRAP(err,
+					Server().OverwriteL(trSlot, fileNameFullPtr, newFile, fileMode);
+					WriteToFileL(newFile, *bufPtr3);
+					);
+			newFile.Close();
+			if(err!=KErrNone)
+				{
+				ERR_PRINTF4(_L("The file -created by RStsSession::OverwriteL()- cannot be written into when the creation mode is set to  %S %S %S"), &fileModeStrings[mode], &KORSign, &fileSubModeStrings[submode]);
+				}
+
+			CleanupStack::PopAndDestroy(); //newFile
+			}//inner for
+		}//outer for
+	CleanupStack::PopAndDestroy(4, bufPtr1); //bufPtr
+	}
+
+void CFileModeTestStep::TestCase2L()
+	{
+	INFO_PRINTF1(_L("CFileModeTestStep test case 2"));
+/*
+ According to the TFileMode documentation a file cannot be opened for writing if using a share mode flag of EFileShareReadersOnly
+ */
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//get the target file path from ini
+	TPtrC filePathInIni = GetTargetFilePathFromConfigL();
+	
+	
+	TFileMode fileMode(static_cast<TFileMode>(EFileShareReadersOnly|EFileWrite));
+	RFile newFile;
+	TInt err;
+
+	TRAP(err, Server().CreateNewL(trSlot, filePathInIni, newFile, fileMode));
+	newFile.Close();
+	if(err!=KErrArgument )
+		{
+		ERR_PRINTF1(_L("RStsSession::CreateNewL() returned KErrNone when an error condition was set (ie: newFileMode = EFileShareReadersOnly|EFileWrite) and KErrArgument was expected"));
+		SetTestStepResult(EFail);
+		}
+	TRAP(err, Server().CreateTemporaryL(trSlot, filePathInIni, newFile, fileMode));
+	newFile.Close();
+	if(err!=KErrArgument )
+		{
+		ERR_PRINTF1(_L("RStsSession::CreateTemporaryL() returned KErrNone when an error condition was set (ie: newFileMode = EFileShareReadersOnly|EFileWrite) and KErrArgument was expected"));
+		SetTestStepResult(EFail);
+		}
+	TRAP(err, Server().OverwriteL(trSlot, filePathInIni, newFile, fileMode));
+	newFile.Close();
+	if(err!=KErrArgument )
+		{
+		ERR_PRINTF1(_L("RStsSession::OverwriteL() returned KErrNone when an error condition was set (ie: newFileMode = EFileShareReadersOnly|EFileWrite) and KErrArgument was expected"));
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CFileModeTestStep::TestCase3L()
+	{
+	INFO_PRINTF1(_L("CFileModeTestStep test case 3"));
+	
+/*
+ This tescase tests that the file -that's created by the server and whose handle is returned to the client- is writable by others (obviously depending on the share mode) 
+ */	
+	TFileMode fileModes[] = {
+			EFileShareAny,
+			EFileShareReadersOrWriters,
+			EFileShareExclusive
+			};
+
+	const TDesC* fileModeStrings[] = {
+				&KEFileShareAny,
+				&KEFileShareReadersOrWriters,
+				&KEFileShareExclusive
+				};
+	
+	TFileMode fileSubModes[] = {
+			EFileStream,
+			EFileStreamText,
+			EFileWrite,
+			EFileWriteBuffered,
+			EFileWriteDirectIO,
+			};
+
+	const TDesC* fileSubModeStrings[] = {
+			&KEFileStream,
+			&KEFileStreamText,
+			&KEFileWrite,
+			&KEFileWriteBuffered,
+			&KEFileWriteDirectIO,
+			};
+
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+
+	//get the target file path from ini
+	TPtrC filePathInIni = GetTargetFilePathFromConfigL();
+	TParsePtrC parse(filePathInIni);
+	
+	//register newly created file
+	HBufC *bufPtr1=CreateDataForNewFileCreatedByStsServerLC(KCreateNewFileStep, ENewPermanentFile);
+	HBufC *bufPtr2=CreateDataForNewFileCreatedByStsServerLC(KCreateTemporaryStep, ENewTemporaryFile);
+	HBufC *bufPtr3=CreateDataForNewFileCreatedByStsServerLC(KOverwriteStep, ENewPermanentFile);
+	
+	HBufC* targetFileName = HBufC::NewLC(KMaxFileName);
+	
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+	
+	TPtr fileNameBasePtr(targetFileName->Des());
+	fileNameBasePtr.Append(parse.DriveAndPath());
+	fileNameBasePtr.Append(parse.Name());
+	TPtr fileNameFullPtr(fileNameBasePtr);
+	
+	TInt counter(100);
+	for(TInt mode=0; mode<sizeof(fileModes)/sizeof(TFileMode); ++mode)
+		{
+		for(TInt submode=0; submode<sizeof(fileSubModes)/sizeof(TFileMode); ++submode, ++counter)
+			{
+			//the handle to the newly created file
+			RFile newFile;
+			CleanupClosePushL(newFile);
+			//handle repsresting some other process/application/etc.. who wants to have access to the file
+			RFile otherFileClient;
+			CleanupClosePushL(otherFileClient);
+
+			TFileMode fileMode(static_cast<TFileMode>(fileModes[mode]|fileSubModes[submode]));
+			TInt otherFileClientError=KErrNone;
+			
+			//create new file interface
+			fileNameFullPtr.Set(fileNameBasePtr);
+			fileNameFullPtr.Append(_L("_createnew"));
+			fileNameFullPtr.AppendNum(counter);
+			fileNameFullPtr.Append(parse.Ext());
+			Server().CreateNewL(trSlot, fileNameFullPtr, newFile, fileMode); //create new file
+			otherFileClientError=otherFileClient.Open(fs, fileNameFullPtr, EFileShareAny|EFileWrite); //test if others can have acces to the file
+			if(otherFileClientError==KErrNone)
+				TRAP(otherFileClientError, WriteToFileL(otherFileClient, *bufPtr1));
+			if(fileModes[mode]!=EFileShareExclusive && otherFileClientError!=KErrNone)
+				{
+				ERR_PRINTF3(_L("File %S created by RStsSession::CreateNewL() cannot be written by other clients using EFileShareAny|EFileWrite filemode. Error code: %d"), &fileNameFullPtr, otherFileClientError);
+				SetTestStepResult(EFail);//original share mode is other than EFileShareExclusive so there should be no error reported when writing to the file by others
+				}
+			else if(fileModes[mode]==EFileShareExclusive && otherFileClientError==KErrNone)
+				{
+				ERR_PRINTF2(_L("File %S -created by RStsSession::CreateNewL() using EFileShareExclusive share mode- can be written by other clients using EFileShareAny|EFileWrite filemode."), &fileNameFullPtr);
+				SetTestStepResult(EFail);//original share mode is EFileShareExclusive so others should not be allowed to have access to it
+				}
+			WriteToFileL(newFile, *bufPtr1);
+			newFile.Close();
+			otherFileClient.Close();
+			
+
+			//create new temp file interface
+			fileNameFullPtr.Set(fileNameBasePtr);
+			fileNameFullPtr.Append(_L("_createtemp"));
+			fileNameFullPtr.AppendNum(counter);
+			fileNameFullPtr.Append(parse.Ext());
+			Server().CreateTemporaryL(trSlot, fileNameFullPtr, newFile, fileMode);
+			otherFileClientError=otherFileClient.Open(fs, fileNameFullPtr, EFileShareAny|EFileWrite); //test if others can have acces to the file
+			if(otherFileClientError==KErrNone)
+				TRAP(otherFileClientError, WriteToFileL(otherFileClient, *bufPtr1));
+			if(fileModes[mode]!=EFileShareExclusive && otherFileClientError!=KErrNone)
+				{
+				ERR_PRINTF3(_L("File %S created by RStsSession::CreateTemporaryL() cannot be written by other clients using EFileShareAny|EFileWrite filemode. Error code: %d"), &fileNameFullPtr, otherFileClientError);
+				SetTestStepResult(EFail);//original share mode is other than EFileShareExclusive so there should be no error reported when writing to the file by others
+				}
+			else if(fileModes[mode]==EFileShareExclusive && otherFileClientError==KErrNone)
+				{
+				ERR_PRINTF2(_L("File %S -created by RStsSession::CreateTemporaryL() using EFileShareExclusive share mode- can be written by other clients using EFileShareAny|EFileWrite filemode."), &fileNameFullPtr);
+				SetTestStepResult(EFail);//original share mode is EFileShareExclusive so others should not be allowed to have access to it
+				}
+			WriteToFileL(newFile, *bufPtr2);
+			newFile.Close();
+			otherFileClient.Close();
+			
+			//overwrite file interface
+			fileNameFullPtr.Set(fileNameBasePtr);
+			fileNameFullPtr.Append(_L("_overwrite"));
+			fileNameFullPtr.AppendNum(counter);
+			fileNameFullPtr.Append(parse.Ext());
+			Server().OverwriteL(trSlot, fileNameFullPtr, newFile, fileMode);
+			otherFileClientError=otherFileClient.Open(fs, fileNameFullPtr, EFileShareAny|EFileWrite); //test if others can have acces to the file
+			if(otherFileClientError==KErrNone)
+				TRAP(otherFileClientError, WriteToFileL(otherFileClient, *bufPtr1));
+			if(fileModes[mode]!=EFileShareExclusive && otherFileClientError!=KErrNone)
+				{
+				ERR_PRINTF3(_L("File %S created by RStsSession::OverwriteL() cannot be written by other clients using EFileShareAny|EFileWrite filemode. Error code: %d"), &fileNameFullPtr, otherFileClientError);
+				SetTestStepResult(EFail);//original share mode is other than EFileShareExclusive so there should be no error reported when writing to the file by others
+				}
+			else if(fileModes[mode]==EFileShareExclusive && otherFileClientError==KErrNone)
+				{
+				ERR_PRINTF2(_L("File %S -created by RStsSession::OverwriteL() using EFileShareExclusive share mode- can be written by other clients using EFileShareAny|EFileWrite filemode."), &fileNameFullPtr);
+				SetTestStepResult(EFail);//original share mode is EFileShareExclusive so others should not be allowed to have access to it
+				}
+			WriteToFileL(newFile, *bufPtr3);
+			newFile.Close();
+			otherFileClient.Close();
+
+			CleanupStack::PopAndDestroy(2, &newFile); //newFile, otherFileClient
+			}//inner for
+		}//outer for
+	CleanupStack::PopAndDestroy(5, bufPtr1); //bufPtr1, bufPtr2, bufPtr3, targetFileName, fs
+	}
+
+void CFileModeTestStep::ImplTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CFileModeTestStep Postamble"));
+	
+	}
+//----------------------------------------
+
+//----------------------------------------
+
+CCreateLongFileNameTestStep::CCreateLongFileNameTestStep(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KCreateLongFileNameTestStep);
+	}
+
+void CCreateLongFileNameTestStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateLongFileNameTestStep Preamble"));
+	SetTestStepResult(EPass);
+	}
+
+void CCreateLongFileNameTestStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateLongFileNameTestStep in test step"));
+
+	//get transaction slot from ini
+	TInt trSlot = GetTransactionSlotFromConfigL();
+	
+	//get the target file path from ini
+	TPtrC filePathInIni = GetTargetFilePathFromConfigL();
+	
+	TFileMode fileMode(static_cast<TFileMode>(EFileShareExclusive|EFileWrite));
+	
+	//the handle to the newly created file
+	// The file handle doesn't get actually created as it is too long. Hence
+	// pushing onto the closecleanup stack is not necessary.
+	RFile newFile;
+
+	//register newly created file
+	TRAP_IGNORE(Server().CreateNewL(trSlot, filePathInIni, newFile, fileMode));
+
+	//roolback transaction
+	Server().RollBackL(trSlot);
+	
+	TBuf<KBufSize> opBuf(GetStringFromConfigL(KBaseDir));
+	// checking for the existence of the base directory. If the base directory
+	// is existing then it implies that rollback was not successful. Hence return
+	// failure. Otherwise return success.
+	if (FileExistsL(opBuf))
+		{
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		SetTestStepResult(EPass);
+		}
+	}
+
+void CCreateLongFileNameTestStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CCreateLongFileNameTestStep Postamble"));
+	}
+
+//----------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/source/tststestsuitesteprollbackall.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @test
+ @internalComponent
+*/
+#include "tststestsuitesteprollbackall.h"
+#include <usif/sts/sts.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "stsrecovery.h"
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+
+CRollbackAllPendingStep::CRollbackAllPendingStep()
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KRollbackAllPendingStep);
+	}
+
+void CRollbackAllPendingStep::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRollbackAllPendingStep Preamble"));
+	SetTestStepResult(EPass);
+
+	}
+
+void CRollbackAllPendingStep::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRollbackAllPendingStep in test step"));
+
+	Usif::RStsRecoverySession session;
+	CleanupClosePushL(session);
+	session.RollbackAllPendingL();
+	CleanupStack::PopAndDestroy(&session);
+	SetTestStepResult(EPass);
+
+	}
+
+void CRollbackAllPendingStep::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("CRollbackAllPendingStep Postamble"));
+
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/bwins/tstsintegrityservicesclientu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+EXPORTS
+	?AddL@RIntegrityServicesServerSession@@QAEXABVTDesC16@@@Z @ 1 NONAME ; void RIntegrityServicesServerSession::AddL(class TDesC16 const &)
+	?CommitL@RIntegrityServicesServerSession@@QAEXXZ @ 2 NONAME ; void RIntegrityServicesServerSession::CommitL(void)
+	?Connect@RIntegrityServicesServerSession@@QAEHXZ @ 3 NONAME ; int RIntegrityServicesServerSession::Connect(void)
+	?CreateNewTestFileL@RIntegrityServicesServerSession@@QAEXABVTDesC16@@@Z @ 4 NONAME ; void RIntegrityServicesServerSession::CreateNewTestFileL(class TDesC16 const &)
+	?CreateTempTestFileL@RIntegrityServicesServerSession@@QAEXABVTDesC16@@@Z @ 5 NONAME ; void RIntegrityServicesServerSession::CreateTempTestFileL(class TDesC16 const &)
+	?RemoveL@RIntegrityServicesServerSession@@QAEXABVTDesC16@@@Z @ 6 NONAME ; void RIntegrityServicesServerSession::RemoveL(class TDesC16 const &)
+	?RollBackL@RIntegrityServicesServerSession@@QAEXH@Z @ 7 NONAME ; void RIntegrityServicesServerSession::RollBackL(int)
+	?SetSimulatedFailureL@RIntegrityServicesServerSession@@QAEXVTPtrC16@@00@Z @ 8 NONAME ; void RIntegrityServicesServerSession::SetSimulatedFailure(class TPtrC16, class TPtrC16, class TPtrC16)
+	?TemporaryL@RIntegrityServicesServerSession@@QAEXABVTDesC16@@@Z @ 9 NONAME ; void RIntegrityServicesServerSession::TemporaryL(class TDesC16 const &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/eabi/tstsintegrityservicesclientu.def	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+EXPORTS
+	_ZN31RIntegrityServicesServerSession10TemporaryLERK7TDesC16 @ 1 NONAME
+	_ZN31RIntegrityServicesServerSession18CreateNewTestFileLERK7TDesC16 @ 2 NONAME
+	_ZN31RIntegrityServicesServerSession19CreateTempTestFileLERK7TDesC16 @ 3 NONAME
+	_ZN31RIntegrityServicesServerSession20SetSimulatedFailureLE7TPtrC16S0_S0_ @ 4 NONAME
+	_ZN31RIntegrityServicesServerSession4AddLERK7TDesC16 @ 5 NONAME
+	_ZN31RIntegrityServicesServerSession7CommitLEv @ 6 NONAME
+	_ZN31RIntegrityServicesServerSession7ConnectEv @ 7 NONAME
+	_ZN31RIntegrityServicesServerSession7RemoveLERK7TDesC16 @ 8 NONAME
+	_ZN31RIntegrityServicesServerSession9RollBackLEi @ 9 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/group/tstsintegrityservicesclient.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Tests  client connection to tintegrityservicesserver
+*
+*/
+
+
+/**
+ @file
+*/
+
+CAPABILITY All
+
+target		tstsintegrityservicesclient.dll
+targettype	dll
+
+UID             0x10285DE6
+VENDORID	0x70000001
+
+//USERINCLUDE .\
+//USERINCLUDE ../../inc
+//USERINCLUDE ../../inc/swi
+//MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+//SOURCEPATH	.\
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE ../inc
+
+SOURCEPATH	../source
+
+SOURCE 		tintegrityservicesclientserver.cpp
+
+LIBRARY 	euser.lib 
+LIBRARY 	estor.lib
+LIBRARY 	efsrv.lib 
+LIBRARY		testexecuteutils.lib
+LIBRARY		testexecutelogclient.lib
+//LIBRARY 	stsclient.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/group/tstsintegrityservicesserver.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Act as a proxy to the integrityservices.dll
+*
+*/
+
+
+/**
+ @file
+*/
+
+CAPABILITY All
+
+target		tstsintegrityservicesserver.exe
+targettype	exe
+
+UID			0x10285DE7
+VENDORID	0x70000001
+
+USERINCLUDE ../inc
+USERINCLUDE ../../../inc_private
+USERINCLUDE ../../../../swinstallationfw/common/inc
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+SOURCEPATH	../source
+SOURCE 		e32main.cpp
+SOURCE 		tintegrityservicesserver.cpp
+
+//we need to build integrityservices code into this server code as integrityservices.dll is not built separately any more
+//so we can't link against integrityservices.lib It's part of STS server
+SOURCEPATH	../../../source/server
+SOURCE 		integrityservices.cpp
+SOURCE 		integritytree.cpp
+SOURCE 		journal.cpp
+SOURCE 		journalfile.cpp
+SOURCE 		operationfunctions.cpp
+
+LIBRARY 	euser.lib 
+LIBRARY 	estor.lib
+LIBRARY 	efsrv.lib
+LIBRARY		sectcbutil.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/inc/tintegrityservicesclientserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Common header for the server and the client.
+*
+*/
+
+
+#ifndef __INTEGRITYSERVICESCLIENTSERVER_H__
+#define __INTEGRITYSERVICESCLIENTSERVER_H__
+
+#include <e32std.h>
+#include "tintegrityservicescommon.h"
+
+/**
+ * @test
+ * @internalTechnology
+ */
+class RIntegrityServicesServerSession : public RSessionBase
+	{
+public:
+	/**
+	 * Connect to the server, attempt to start it if it is not yet running
+	 * @return KErrNone if successful, or an error code
+	 */
+	IMPORT_C TInt Connect();
+	IMPORT_C void AddL(const TDesC& aFileName);
+	IMPORT_C void RemoveL(const TDesC& aFileName);
+	IMPORT_C void TemporaryL(const TDesC& aFileName);
+	IMPORT_C void CommitL();
+	IMPORT_C void RollBackL(TBool aAllTransactions);
+	IMPORT_C void SetSimulatedFailureL(TPtrC aFailType, TPtrC aFailPosition, TPtrC aFileName);
+	IMPORT_C void CreateNewTestFileL(const TDesC& aFileName);
+	IMPORT_C void CreateTempTestFileL(const TDesC& aFileName);
+	};
+#endif // #ifndef __INTEGRITYSERVICESCLIENTSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/inc/tintegrityservicescommon.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* tintegrityservicesserver.h
+*
+*/
+
+
+#ifndef __TINTEGRITYSERVICESCOMMON_H__
+#define __TINTEGRITYSERVICESCOMMON_H__
+
+#include <e32def.h>
+#include <e32cmn.h>
+
+const TInt KIntegrityServicesSimulatedBatteryFailure=-10205;	
+
+
+_LIT(KIntegrityServicesServerName, "!tstsintegrityservicesserver");
+_LIT(KIntegrityServicesServerImage, "tstsintegrityservicesserver");
+_LIT(KIntegrityServicesServer, "Test Integrity Server");
+
+const TUid KIntegrityServicesServerUid3 = { 0x10285DE7 };
+
+/**
+ * @test
+ * @internalTechnology
+ */
+enum TIntegrityServicesServerMessage
+	{ 
+	EAdd,
+	ERemove,
+	ETemporary,
+	ECommit,
+	ERollBack,
+	ESetSimulatedFailure,
+	ECreateNewTestFile,
+	ECreateTempTestFile
+	};
+
+#endif // #ifndef __TINTEGRITYSERVICESSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/inc/tintegrityservicesserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Common header for the server and the client.
+*
+*/
+
+
+#ifndef __TINTEGRITYSERVICESSERVER_H__
+#define __TINTEGRITYSERVICESSERVER_H__
+
+#include <e32base.h>
+#include "integrityservices.h"
+#include "tintegrityservicescommon.h"
+
+namespace Usif
+{
+
+enum TIntegrityServicesServerPanic
+	{
+	EPanicIntegrityServicesServerIllegalFunction = 10,
+	};
+
+
+/**
+ * @test
+ * @internalTechnology
+ */
+class CShutdownTimer : public CTimer
+	{
+private:
+	/** Server timeout shutdown delay (approximately 2 seconds) */
+	enum {KShutdownDelay=0x200000};
+public:
+	static CShutdownTimer* NewL();
+	/** Constructs shutdown timer */
+	inline CShutdownTimer();
+	/** Second-phase construction */
+	inline void ConstructL();
+	/** Starts server shutdown when the timer goes off */
+	inline void Start();
+private:
+	void RunL();
+	};
+
+/**
+ * @test
+ * @internalTechnology
+ */
+class CIntegrityServicesServer : public CServer2
+	{
+public:
+	/**
+	 * This function creates a new CServer2 object and leaves it on 
+	 * the cleanup stack.
+	 */
+        static CIntegrityServicesServer* NewLC();
+	
+	/** Increments session count */
+	void AddSession();
+	
+	/** 
+	 * Decrements session count and starts shutdown timer if session count is 0
+	 */
+	void DropSession();
+
+	virtual ~CIntegrityServicesServer();
+
+private:
+	CIntegrityServicesServer();
+
+	/**
+	 * The second-phase constructor.
+	 */
+	void ConstructL();
+
+private:
+	/**
+	 * This function creates a new session object.
+	 */
+	virtual CSession2* NewSessionL(const TVersion& aVersion, 
+				       const RMessage2& aMessage) const;
+
+private:
+	// The number of sessions that are connected to the server. When this 
+	// number reaches 0, the server will initialize its shutdown.
+	TInt iSessionCount;
+	CShutdownTimer* iShutdown;
+	};
+
+
+
+/**
+ * @test
+ * @internalTechnology
+ */
+class CIntegrityServicesSession : public CSession2
+	{
+public:
+ 	static CIntegrityServicesSession* NewL();
+	static CIntegrityServicesSession* NewLC();
+	void CreateL();
+
+private:
+	CIntegrityServicesSession();
+
+	virtual ~CIntegrityServicesSession();
+
+	/**
+	 * The second-phase constructor.
+	 */
+	void ConstructL();
+	
+	/** Returns server reference */
+	CIntegrityServicesServer& Server();
+	
+	virtual void ServiceL(const RMessage2& aMessage);
+
+	virtual void ServiceError(const RMessage2& aMessage, TInt aError);
+
+	CIntegrityServices* iIntegrityServices;
+	};
+
+} // end namespace Usif
+#endif // #ifndef __TINTEGRITYSERVICESSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/inc/tintegrityservicesstep.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,318 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/**
+ @file
+*/
+#ifndef __TINTEGRITYSERVICESSTEP_H__
+#define __TINTEGRITYSERVICESSTEP_H__
+
+#include "tintegrityservicescommon.h"
+#include "tststestsuitestep.h"
+#include "tintegrityservicesclientserver.h"
+#include "journal.h"
+#include "integrityservices.h"
+
+
+// Base class for all steps
+class CIntegrityServicesStepBase : public CStsBaseTestStep
+	{
+public:
+	CIntegrityServicesStepBase(CStsTestServer &aStsTestServer);
+	virtual void ImplTestStepPreambleL();
+	virtual void ImplTestStepPostambleL();
+
+private:
+	void ReadFailureSettingsL();
+
+protected:
+	// Extension of config parser to allow you to get array of descriptors
+	void GetStringArrayFromConfigL(const TDesC& aSectName, const TDesC& aKeyName, RArray<TPtrC>& aArray);
+
+	TBool CheckFilesL();
+	void doInstallL();
+	void doRecoverL();
+	void doCleanupL();
+
+protected:
+	RIntegrityServicesServerSession iIntegritySession;
+	};
+
+// Step which starts installation
+class CInstallStep : public CIntegrityServicesStepBase
+	{
+public:
+	CInstallStep(CStsTestServer &aStsTestServer);
+	virtual void ImplTestStepL();
+	};
+
+// Step which recovers a previous failed installation
+class CRecoverStep : public CIntegrityServicesStepBase
+	{
+public:
+	CRecoverStep(CStsTestServer &aStsTestServer);
+	virtual void ImplTestStepL();
+	};
+
+// Step which cleans up files between test cases
+class CCleanupStep : public CIntegrityServicesStepBase
+	{
+public:
+	CCleanupStep(CStsTestServer &aStsTestServer);
+	virtual void ImplTestStepL();
+	};
+	
+// Step which checks for files
+class CCheckStep : public CIntegrityServicesStepBase
+	{
+public:
+	CCheckStep(CStsTestServer &aStsTestServer);
+	virtual void ImplTestStepL();
+	};
+
+//---------- new unit tests developed as part of the STS framework ----------
+union TIntValue
+	{
+	TInt8  int8;
+	TInt16 int16;
+	TInt32 int32;
+	};
+
+enum TIntMode
+	{
+	Mode8Bit  =1,
+	Mode16Bit =2,
+	Mode32Bit =4
+	};
+
+_LIT(KEmptyString, "");
+_LIT(KDriveLetterC, "c");
+_LIT(KDriveLetterE, "e");
+_LIT(KKournalFileExt, ".log");
+
+class CTestFile : public CBase
+	{
+	public:
+		CTestFile(RFs& aFs);
+		~CTestFile();
+		static CTestFile* NewL(RFs& aFs);
+		void OpenJournalFileL(const TDesC& aFileName, TFileMode aMode);
+		void CloseJournalFile();
+		void CreateJournalFileL(const TDesC& aFileName, TFileMode aMode);
+		void WriteIntToJournalFileL(TIntValue value, TIntMode mode);
+		TIntValue ReadIntFromJournalFileL(TIntMode mode);
+		void SeekInJournalFileL(TSeek aSeekMode, TInt &aPos);
+
+	protected:
+		RFs&          iFs;
+		RFile         journalFile;
+	};
+
+class CJournalFileUnitTest : public CStsBaseTestStep
+	{
+public:
+	CJournalFileUnitTest(CStsTestServer &aStsTestServer);
+	~CJournalFileUnitTest();
+	virtual void ImplTestStepPreambleL();
+	virtual void ImplTestStepPostambleL();
+	virtual void ImplTestStepL();
+	
+protected:
+	void OpenJournalFileL(const TDesC& aFileName, TFileMode aMode);
+	void CloseJournalFile();
+	void CreateJournalFileL(const TDesC& aFileName, TFileMode aMode);
+	void WriteIntToJournalFileL(TIntValue value, TIntMode mode);
+	TIntValue ReadIntFromJournalFileL(TIntMode mode);
+	void SeekInJournalFileL(TSeek aSeekMode, TInt &aPos);
+	
+protected:
+	RFs          		iFs;
+	RLoader      		iLoader;
+	CTestFile*  	testJournalFile;
+	};
+
+class CJournalFileUnitTestScenarioBase : public CStsBaseTestStep
+	{
+public:
+	CJournalFileUnitTestScenarioBase(CStsTestServer &aStsTestServer);
+	~CJournalFileUnitTestScenarioBase();
+	virtual void ImplTestStepPreambleL();
+	virtual void ImplTestStepPostambleL();
+	virtual void ImplTestStepL();
+
+private:
+	static void InTestCleanup(TAny* aObject);
+	virtual void ImplTestCaseScenarioL()=0; //implements the real test scenario executed in OOM test
+
+protected:
+	RFs          		iFs;
+	RLoader      		iLoader;
+	TPtrC               iJournalFileName;
+	HBufC* 				iTargetFileName;
+	HBufC*				iBackupFileName;
+	TDriveUnit          iJournaldrive;
+	TBool				iCleanupNeeded;
+	};
+
+class CJournalFileUnitTestAdd : public CJournalFileUnitTestScenarioBase
+	{
+public:
+	CJournalFileUnitTestAdd(CStsTestServer &aStsTestServer);
+	virtual void ImplTestCaseScenarioL();
+	};
+
+class CJournalFileUnitTestTemp : public CJournalFileUnitTestScenarioBase
+	{
+public:
+	CJournalFileUnitTestTemp(CStsTestServer &aStsTestServer);
+	virtual void ImplTestCaseScenarioL();
+	};
+
+class CJournalFileUnitTestRemove : public CJournalFileUnitTestScenarioBase
+	{
+public:
+	CJournalFileUnitTestRemove(CStsTestServer &aStsTestServer);
+	virtual void ImplTestCaseScenarioL();
+	};
+
+class CJournalFileUnitTestRead : public CJournalFileUnitTestScenarioBase
+	{
+public:
+	CJournalFileUnitTestRead(CStsTestServer &aStsTestServer);
+	virtual void ImplTestCaseScenarioL();
+	};
+
+class CJournalFileUnitTestEvent : public CJournalFileUnitTestScenarioBase
+	{
+public:
+	CJournalFileUnitTestEvent(CStsTestServer &aStsTestServer);
+	virtual void ImplTestCaseScenarioL();
+	};
+
+class CJournalUnitTest : public CStsBaseTestStep
+	{
+public:
+	CJournalUnitTest(CStsTestServer &aStsTestServer);
+	~CJournalUnitTest();
+	virtual void ImplTestStepPreambleL();
+	virtual void ImplTestStepPostambleL();
+	virtual void ImplTestStepL();
+
+private:
+	void TestCase1L();
+	
+protected:
+	RFs          		iFs;
+	RLoader      		iLoader;
+	CTestFile*  	    iTestFileInterface;
+	TInt 				iTrID;
+	TPtrC				iJournalPathInIni;
+	};
+
+
+class CJournalUnitTestScenarioBase : public CStsBaseTestStep
+	{
+public:
+	CJournalUnitTestScenarioBase(CStsTestServer &aStsTestServer);
+	~CJournalUnitTestScenarioBase();
+	virtual void ImplTestStepPreambleL();
+	virtual void ImplTestStepPostambleL();
+	virtual void ImplTestStepL();
+
+protected:
+	virtual void ScenarioEndL(Usif::CJournal* aJournal)=0;
+	static void InTestCleanUp(TAny* aObject);
+	
+protected:
+	RFs          		iFs;
+	RLoader      		iLoader;
+	TInt 				iTrID;
+	TPtrC				iJournalPathInIni;
+	HBufC* 				iTargetFileName;
+	TDriveUnit          iDriveUnitC;	
+	TDriveUnit          iDriveUnitE;
+	HBufC* 				iJournalFileName;
+	HBufC* 				iDrvFileName;
+	HBufC* 				iBackupFileName;
+	};
+
+class CJournalUnitTestInstall : public CJournalUnitTestScenarioBase
+	{
+public:
+	CJournalUnitTestInstall(CStsTestServer &aStsTestServer);
+protected:	
+	virtual void ScenarioEndL(Usif::CJournal* aJournal);
+	};
+
+class CJournalUnitTestRollback : public CJournalUnitTestScenarioBase
+	{
+public:
+	CJournalUnitTestRollback(CStsTestServer &aStsTestServer);
+protected:	
+	virtual void ScenarioEndL(Usif::CJournal* aJournal);
+	};
+
+_LIT(KTransactionPath, "\\sys\\install\\integrityservices\\");
+
+class CIntegrityServicesTestScenarioBase : public CStsBaseTestStep
+	{
+public:
+	CIntegrityServicesTestScenarioBase(CStsTestServer &aStsTestServer);
+	~CIntegrityServicesTestScenarioBase();
+	virtual void ImplTestStepPreambleL();
+	virtual void ImplTestStepPostambleL();
+	virtual void ImplTestStepL();
+
+protected:
+	virtual void ScenarioEndL(Usif::CIntegrityServices* aIntegrServ)=0;
+	static void InTestCleanUp(TAny* aObject);
+	void NormalizeDirectoryName(TDes& aFileName);
+	
+protected:
+	RFs          		iFs;
+	RLoader      		iLoader;
+	TInt 				iTrID;
+	TPtrC				iTargetPathInIni;
+	HBufC* 				iTargetFileName;
+	TDriveUnit          iDriveUnitC;	
+	TDriveUnit          iDriveUnitE;
+	HBufC* 				iBackupFileName;
+	HBufC* 				iTransactionBackupDirectoryPath;
+	HBufC* 				iJournalFileName;
+	HBufC* 				iDrvFileName;
+	};
+
+class CIntegrityServicesTestInstall : public CIntegrityServicesTestScenarioBase
+	{
+public:
+	CIntegrityServicesTestInstall(CStsTestServer &aStsTestServer);
+protected:	
+	virtual void ScenarioEndL(Usif::CIntegrityServices* aIntegrServ);
+	};
+
+class CIntegrityServicesTestRollback : public CIntegrityServicesTestScenarioBase
+	{
+public:
+	CIntegrityServicesTestRollback(CStsTestServer &aStsTestServer);
+protected:	
+	virtual void ScenarioEndL(Usif::CIntegrityServices* aIntegrServ);
+	};
+
+#endif
Binary file installationservices/swtransactionservices/test/tintegrityservices/scripts/data/unittests/testjournal.log has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailAddingNewFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,215 @@
+; these test failure before adding a particular new file during the installation of app version 1 files
+
+[EBeforeAction_c:\DataFileA.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeAction
+failfilename=c:\DataFileA.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EBeforeAction_e:\DataFileB.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeAction
+failfilename=e:\DataFileB.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EBeforeAction_c:\InstallApp.exe]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeAction
+failfilename=c:\DataFileA.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EBeforeAction_c:\Shared.dll]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeAction
+failfilename=c:\Shared.dll
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+; these test failure after adding a particular new file during the installation of app version 1 files
+
+[EAfterAction_c:\DataFileA.dat]
+
+failtype=EFailAddingNewFile
+failposition=EAfterAction
+failfilename=c:\DataFileA.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EAfterAction_e:\DataFileB.dat]
+
+failtype=EFailAddingNewFile
+failposition=EAfterAction
+failfilename=e:\DataFileB.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EAfterAction_c:\InstallApp.exe]
+
+failtype=EFailAddingNewFile
+failposition=EAfterAction
+failfilename=c:\DataFileA.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EAfterAction_c:\Shared.dll]
+
+failtype=EFailAddingNewFile
+failposition=EAfterAction
+failfilename=c:\Shared.dll
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+; these test failure before writing the journal entry for a particular new file during the installation of app version 1 files
+
+[EBeforeJournal_c:\DataFileA.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=c:\DataFileA.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EBeforeJournal_e:\DataFileB.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=e:\DataFileB.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EBeforeJournal_c:\InstallApp.exe]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=c:\DataFileA.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EBeforeJournal_c:\Shared.dll]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=c:\Shared.dll
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+; these test failure after writing the journal entry for a particular new file during the installation of app version 1 files
+
+[EAfterJournal_c:\DataFileA.dat]
+
+failtype=EFailAddingNewFile
+failposition=EAfterJournal
+failfilename=c:\DataFileA.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EAfterJournal_e:\DataFileB.dat]
+
+failtype=EFailAddingNewFile
+failposition=EAfterJournal
+failfilename=e:\DataFileB.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EAfterJournal_c:\InstallApp.exe]
+
+failtype=EFailAddingNewFile
+failposition=EAfterJournal
+failfilename=c:\DataFileA.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EAfterJournal_c:\Shared.dll]
+
+failtype=EFailAddingNewFile
+failposition=EAfterJournal
+failfilename=c:\Shared.dll
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailAddingTempFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,59 @@
+; these test failure before adding a particular temp file during the installation of app version 1 files
+
+[EBeforeAction_c:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EBeforeAction
+failfilename=c:\temp.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+; these test failure after adding a particular temp file during the installation of app version 1 files
+
+[EAfterAction_c:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EAfterAction
+failfilename=c:\temp.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+; these test failure before writing the journal entry for a particular temp file during the installation of app version 1 files
+
+[EBeforeJournal_c:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EBeforeJournal
+failfilename=c:\temp.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+; these test failure after writing the journal entry for a particular temp file during the installation of app version 1 files
+
+[EAfterJournal_c:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EAfterJournal
+failfilename=c:\temp.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailBackupFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+; this tests failure before writing journal entry during installation of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EFailBackupFilesRemoved
+failposition=EBeforeJournal
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+; this tests failure after removing writing journal entry during installation of app version 1 files
+
+[EAfterJournal]
+
+failtype=EFailBackupFilesRemoved
+failposition=EAfterJournal
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailDeletingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+; these test failure before deleting a particular file during the installation of app version 1 files
+
+[EBeforeAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EBeforeAction
+failfilename=c:\temp.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+; these test failure before deleting a particular file during the installation of app version 1 files
+
+[EAfterAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EAfterAction
+failfilename=c:\temp.dat
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailInstallComplete.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+; these test failure during the installation of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EFailInstallComplete
+failposition=EBeforeJournal
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+[EAfterJournal]
+
+failtype=EFailInstallComplete
+failposition=EAfterJournal
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailNone.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+; successful installation of app version 1 files
+
+[EFailNone]
+
+failtype=EFailNone
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+present-01=c:\DataFileA.dat
+present-02=e:\DataFileB.dat
+present-03=c:\InstallApp.exe
+present-04=c:\Shared.dll
+
+absent-01=c:\temp.dat
+absent-02=c:\IntegrityServices\0.drv
+absent-03=c:\IntegrityServices\0.log
+absent-04=e:\IntegrityServices\0.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v1/EFailTempFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+; these test failure before writing the commit during the installation of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+; these test failure after writing the commit during the installation of app version 1 files
+
+[EAfterJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailAddingNewFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,215 @@
+; these test failure before adding a particular new file during the installation of app version 2 files
+
+[EBeforeAction_e:\DataFileB.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeAction
+failfilename=c:\DataFileA.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EBeforeAction_e:\DataFileC.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeAction
+failfilename=e:\DataFileB.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EBeforeAction_c:\InstallApp.exe]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeAction
+failfilename=c:\DataFileA.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EBeforeAction_c:\Shared.dll]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeAction
+failfilename=c:\Shared.dll
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+; these test failure after adding a particular new file during the installation of app version 2 files
+
+[EAfterAction_e:\DataFileB.dat]
+
+failtype=EFailAddingNewFile
+failposition=EAfterAction
+failfilename=c:\DataFileA.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterAction_e:\DataFileC.dat]
+
+failtype=EFailAddingNewFile
+failposition=EAfterAction
+failfilename=e:\DataFileB.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterAction_c:\InstallApp.exe]
+
+failtype=EFailAddingNewFile
+failposition=EAfterAction
+failfilename=c:\DataFileA.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterAction_c:\Shared.dll]
+
+failtype=EFailAddingNewFile
+failposition=EAfterAction
+failfilename=c:\Shared.dll
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+; these test failure before writing the journal entry for a particular new file during the installation of app version 2 files
+
+[EBeforeJournal_e:\DataFileB.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=c:\DataFileA.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EBeforeJournal_e:\DataFileC.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=e:\DataFileB.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EBeforeJournal_c:\InstallApp.exe]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=c:\DataFileA.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EBeforeJournal_c:\Shared.dll]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=c:\Shared.dll
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+; these test failure after writing the journal entry for a particular new file during the installation of app version 2 files
+
+[EAfterJournal_e:\DataFileB.dat]
+
+failtype=EFailAddingNewFile
+failposition=EAfterJournal
+failfilename=c:\DataFileA.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterJournal_e:\DataFileC.dat]
+
+failtype=EFailAddingNewFile
+failposition=EAfterJournal
+failfilename=e:\DataFileB.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterJournal_c:\InstallApp.exe]
+
+failtype=EFailAddingNewFile
+failposition=EAfterJournal
+failfilename=c:\DataFileA.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterJournal_c:\Shared.dll]
+
+failtype=EFailAddingNewFile
+failposition=EAfterJournal
+failfilename=c:\Shared.dll
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailAddingTempFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,59 @@
+; these test failure before adding a particular temp file during the installation of app version 2 files
+
+[EBeforeAction_e:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EBeforeAction
+failfilename=e:\temp.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+; these test failure after adding a particular temp file during the installation of app version 2 files
+
+[EAfterAction_e:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EAfterAction
+failfilename=e:\temp.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+; these test failure before writing the journal entry for a particular temp file during the installation of app version 2 files
+
+[EBeforeJournal_e:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EBeforeJournal
+failfilename=e:\temp.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+; these test failure after writing the journal entry for a particular temp file during the installation of app version 2 files
+
+[EAfterJournal_e:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EAfterJournal
+failfilename=e:\temp.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailBackupFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+; this tests failure before writing journal entry during installation of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EFailBackupFilesRemoved
+failposition=EBeforeJournal
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+; this tests failure after removing writing journal entry during installation of app version 2 files
+
+[EAfterJournal]
+
+failtype=EFailBackupFilesRemoved
+failposition=EAfterJournal
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailDeletingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+; these test failure before deleting a particular file during the installation of app version 2 files
+
+[EBeforeAction_e:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EBeforeAction
+failfilename=e:\temp.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+; these test failure before deleting a particular file during the installation of app version 2 files
+
+[EAfterAction_e:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EAfterAction
+failfilename=e:\temp.dat
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailInstallComplete.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+; these test failure during the installation of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EFailInstallComplete
+failposition=EBeforeJournal
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterJournal]
+
+failtype=EFailInstallComplete
+failposition=EAfterJournal
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailNone.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+; successful installation of app version 2 files
+
+[EFailNone]
+
+failtype=EFailNone
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+present-01=e:\DataFileB.dat
+present-02=e:\DataFileC.dat
+present-03=c:\InstallApp.exe
+present-04=c:\Shared.dll
+
+absent-01=e:\temp.dat
+absent-02=c:\IntegrityServices\0.drv
+absent-03=c:\IntegrityServices\0.log
+absent-04=e:\IntegrityServices\0.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/install_v2/EFailTempFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,27 @@
+; these test failure before writing the commit during the installation of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
+
+; these test failure after writing the commit during the installation of app version 2 files
+
+[EAfterJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+addfile-01=e:\DataFileB.dat
+addfile-02=e:\DataFileC.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/oom.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,37 @@
+; tests oom conditions during installation of app version 1 files
+
+[Install_V1]
+
+failtype=EFailNone
+
+addfile-01=c:\DataFileA.dat
+addfile-02=e:\DataFileB.dat
+addfile-03=c:\InstallApp.exe
+addfile-04=c:\Shared.dll
+
+temporaryfile-01=c:\temp.dat
+
+present-01=c:\DataFileA.dat
+present-02=e:\DataFileB.dat
+present-03=c:\InstallApp.exe
+present-04=c:\Shared.dll
+
+absent-01=c:\temp.dat
+absent-02=c:\IntegrityServices\0.drv
+absent-03=c:\IntegrityServices\0.log
+absent-04=e:\IntegrityServices\0.log
+
+; cleans up files between test cases
+
+cleanupfile-01=c:\DataFileA.dat
+cleanupfile-02=e:\DataFileB.dat
+cleanupfile-03=e:\DataFileC.dat
+cleanupfile-04=c:\InstallApp.exe
+cleanupfile-05=c:\shared.dll
+cleanupfile-06=c:\temp.dat
+cleanupfile-07=e:\temp.dat
+
+; cleans up directories (recursively deleting files and directories) between test cases
+
+cleanupdirectory-01=c:\IntegrityServices\
+cleanupdirectory-02=e:\IntegrityServices\
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v1/EFailDeletingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+; these test failure during rollback of failed installation of app version 1 files
+
+[EBeforeAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EBeforeAction
+failfilename=c:\temp.dat
+
+[EAfterAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EAfterAction
+failfilename=c:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v1/EFailNewFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed installation of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EFailNewFilesRemoved
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EFailNewFilesRemoved
+failposition=EAfterJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v1/EFailNone.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+; these test successful rollback of failed installation of app version 1 files
+
+[EFailNone]
+
+absent-01=c:\DataFileA.dat
+absent-02=e:\DataFileB.dat
+absent-03=c:\InstallApp.exe
+absent-04=c:\Shared.dll
+absent-05=c:\temp.dat
+absent-06=c:\IntegrityServices\0.drv
+absent-07=c:\IntegrityServices\0.log
+absent-08=e:\IntegrityServices\0.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v1/EFailOldFilesRestored.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed installation of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EOldFilesRestored
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EOldFilesRestored
+failposition=EAfterJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v1/EFailTempFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed installation of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v2/EFailDeletingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+; these test failure during rollback of failed installation of app version 2 files
+
+[EBeforeAction_e:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EBeforeAction
+failfilename=e:\temp.dat
+
+[EAfterAction_e:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EAfterAction
+failfilename=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v2/EFailNewFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed installation of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EFailNewFilesRemoved
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EFailNewFilesRemoved
+failposition=EAfterJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v2/EFailNone.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+; these test successful rollback of failed installation of app version 2 files
+
+[EFailNone]
+
+absent-01=e:\DataFileB.dat
+absent-02=e:\DataFileC.dat
+absent-03=c:\InstallApp.exe
+absent-04=c:\Shared.dll
+absent-05=e:\temp.dat
+absent-06=c:\IntegrityServices\0.drv
+absent-07=c:\IntegrityServices\0.log
+absent-08=e:\IntegrityServices\0.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v2/EFailOldFilesRestored.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed installation of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EOldFilesRestored
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EOldFilesRestored
+failposition=EAfterJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_install_v2/EFailTempFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed installation of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailDeletingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+; these test failure during rollback of failed uninstallation of app version 1 files
+
+[EBeforeAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EBeforeAction
+failfilename=c:\temp.dat
+
+[EAfterAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EAfterAction
+failfilename=c:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailNewFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed uninstallation of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EFailNewFilesRemoved
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EFailNewFilesRemoved
+failposition=EAfterJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailNone.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+; these test successful rollback of failed uninstallation of app version 1 files
+
+[EFailNone]
+
+present-01=c:\DataFileA.dat
+present-02=e:\DataFileB.dat
+present-03=c:\InstallApp.exe
+present-04=c:\Shared.dll
+
+absent-01=c:\IntegrityServices\0.drv
+absent-02=c:\IntegrityServices\0.log
+absent-03=e:\IntegrityServices\0.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailOldFilesRestored.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed uninstallation of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EOldFilesRestored
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EOldFilesRestored
+failposition=EAfterJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailRestoringFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,49 @@
+; these test failure during rollback of failed uninstallation of app version 1 files
+
+[EBeforeAction_c:\DataFileA.dat]
+
+failtype=EFailRestoringFile
+failposition=EBeforeAction
+failfilename=c:\DataFileA.dat
+
+[EBeforeAction_e:\DataFileB.dat]
+
+failtype=EFailRestoringFile
+failposition=EBeforeAction
+failfilename=e:\DataFileB.dat
+
+[EBeforeAction_c:\InstallApp.exe]
+
+failtype=EFailRestoringFile
+failposition=EBeforeAction
+failfilename=c:\InstallApp.exe
+
+[EBeforeAction_c:\Shared.dll]
+
+failtype=EFailRestoringFile
+failposition=EBeforeAction
+failfilename=c:\shared.dll
+
+[EAfterAction_c:\DataFileA.dat]
+
+failtype=EFailRestoringFile
+failposition=EAfterAction
+failfilename=e:\DataFileA.dat
+
+[EAfterAction_e:\DataFileB.dat]
+
+failtype=EFailRestoringFile
+failposition=EAfterAction
+failfilename=e:\DataFileB.dat
+
+[EAfterAction_c:\InstallApp.exe]
+
+failtype=EFailRestoringFile
+failposition=EAfterAction
+failfilename=c:\InstallApp.exe
+
+[EAfterAction_c:\Shared.dll]
+
+failtype=EFailRestoringFile
+failposition=EAfterAction
+failfilename=c:\shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v1/EFailTempFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed uninstallation of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailDeletingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+; these test failure during rollback of failed uninstallation of app version 2 files
+
+[EBeforeAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EBeforeAction
+failfilename=c:\temp.dat
+
+[EAfterAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EAfterAction
+failfilename=c:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailNewFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed uninstallation of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EFailNewFilesRemoved
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EFailNewFilesRemoved
+failposition=EAfterJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailNone.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,12 @@
+; these test successful rollback of failed uninstallation of app version 2 files
+
+[EFailNone]
+
+present-01=e:\DataFileB.dat
+present-02=e:\DataFileC.dat
+present-03=c:\InstallApp.exe
+present-04=c:\Shared.dll
+
+absent-01=c:\IntegrityServices\0.drv
+absent-02=c:\IntegrityServices\0.log
+absent-03=e:\IntegrityServices\0.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailOldFilesRestored.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed uninstallation of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EOldFilesRestored
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EOldFilesRestored
+failposition=EAfterJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailRestoringFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,49 @@
+; these test failure during rollback of failed uninstallation of app version 2 files
+
+[EBeforeAction_e:\DataFileB.dat]
+
+failtype=EFailRestoringFile
+failposition=EBeforeAction
+failfilename=e:\DataFileB.dat
+
+[EBeforeAction_e:\DataFileC.dat]
+
+failtype=EFailRestoringFile
+failposition=EBeforeAction
+failfilename=e:\DataFileC.dat
+
+[EBeforeAction_c:\InstallApp.exe]
+
+failtype=EFailRestoringFile
+failposition=EBeforeAction
+failfilename=c:\InstallApp.exe
+
+[EBeforeAction_c:\Shared.dll]
+
+failtype=EFailRestoringFile
+failposition=EBeforeAction
+failfilename=c:\shared.dll
+
+[EAfterAction_e:\DataFileB.dat]
+
+failtype=EFailRestoringFile
+failposition=EAfterAction
+failfilename=e:\DataFileB.dat
+
+[EAfterAction_e:\DataFileC.dat]
+
+failtype=EFailRestoringFile
+failposition=EAfterAction
+failfilename=e:\DataFileC.dat
+
+[EAfterAction_c:\InstallApp.exe]
+
+failtype=EFailRestoringFile
+failposition=EAfterAction
+failfilename=c:\InstallApp.exe
+
+[EAfterAction_c:\Shared.dll]
+
+failtype=EFailRestoringFile
+failposition=EAfterAction
+failfilename=c:\shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_uninstall_v2/EFailTempFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed uninstallation of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailDeletingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+; these test failure during rollback of failed upgrade of app from version 1 to version 2
+
+[EBeforeAction_e:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EBeforeAction
+failfilename=e:\temp.dat
+
+[EAfterAction_e:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EAfterAction
+failfilename=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailNewFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed upgrade of app from version 1 to version 2
+
+[EBeforeJournal]
+
+failtype=EFailNewFilesRemoved
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EFailNewFilesRemoved
+failposition=EAfterJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailNone.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+; these test successful rollback of failed upgrade of app from version 1 to version 2
+
+[EFailNone]
+
+present-01=c:\DataFileA.dat
+present-02=e:\DataFileB.dat
+present-03=c:\InstallApp.exe
+present-04=c:\Shared.dll
+
+absent-01=e:\temp.dat
+absent-02=c:\IntegrityServices\0.drv
+absent-03=c:\IntegrityServices\0.log
+absent-04=e:\IntegrityServices\0.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailOldFilesRestored.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed upgrade of app from version 1 to version 2
+
+[EBeforeJournal]
+
+failtype=EOldFilesRestored
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EOldFilesRestored
+failposition=EAfterJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailRestoringFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+; these test failure during rollback of failed upgrade of app from version 1 to version 2
+
+[EBeforeAction_c:\DataFileA.dat]
+
+failtype=EFailRestoringFile
+failposition=EBeforeAction
+failfilename=c:\DataFileA.dat
+
+[EAfterAction_c:\DataFileA.dat]
+
+failtype=EFailRestoringFile
+failposition=EAfterAction
+failfilename=c:\DataFileA.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/rollback_upgrade_v1-v2/EFailTempFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,11 @@
+; these test failure during rollback of failed upgrade of app from version 1 to version 2
+
+[EBeforeJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+[EAfterJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/tintegrityservices.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,239 @@
+[Cleanup]
+
+; cleans up files between test cases
+
+cleanupfile-01=c:\DataFileA.dat
+cleanupfile-02=e:\DataFileB.dat
+cleanupfile-03=e:\DataFileC.dat
+cleanupfile-04=c:\InstallApp.exe
+cleanupfile-05=c:\shared.dll
+cleanupfile-06=c:\temp.dat
+cleanupfile-07=e:\temp.dat
+
+; cleans up both default and custom journal paths (recursively deleting files and directories)
+
+cleanupdirectory-01=c:\IntegrityServices\
+cleanupdirectory-02=e:\IntegrityServices\
+cleanupdirectory-03=c:\dummyDir\
+
+
+[failafteraddandremove]
+failtype=EFailAddingNewFile
+failposition=EAfterAction
+failfilename=c:\DataFileC.dat
+
+arbitraryopfile-01=c:\DataFileA.dat
+operation-01=addfile
+arbitraryopfile-02=c:\DataFileA.dat
+operation-02=removefile
+arbitraryopfile-03=c:\DataFileB.dat
+operation-03=removefile
+arbitraryopfile-04=c:\DataFileC.dat
+operation-04=addfile
+
+absent-01=c:\DataFileA.dat
+absent-02=c:\DataFileB.dat
+present-01=c:\DataFileC.dat
+
+[recoverafterfailedaddandremove]
+absent-01=c:\DataFileA.dat
+absent-02=c:\DataFileC.dat
+present-01=c:\DataFileB.dat
+
+[fail_before_journal_remove_dir]
+failtype=EFailRemovingFile
+failposition=EBeforeJournal
+failfilename=c:\dummyDir\
+
+arbitraryopfile-01=c:\dummyDir\
+operation-01=removefile
+
+present-01=c:\dummyDir\
+present-02=c:\dummyDir\DataFileA.dat
+present-03=c:\dummyDir\DataFileB.dat
+
+[directory_present]
+present-01=c:\dummyDir\DataFileA.dat
+present-02=c:\dummyDir\DataFileB.dat
+present-03=c:\dummyDir\
+
+[directory_absent]
+absent-01=c:\dummyDir\DataFileA.dat
+absent-02=c:\dummyDir\DataFileB.dat
+absent-03=c:\dummyDir\
+
+[fail_after_journal_remove_dir]
+failtype=EFailRemovingFile
+failposition=EAfterJournal
+failfilename=c:\dummyDir\
+
+arbitraryopfile-01=c:\dummyDir\
+operation-01=removefile
+
+present-01=c:\dummyDir\
+present-02=c:\dummyDir\DataFileA.dat
+present-03=c:\dummyDir\DataFileB.dat
+
+[fail_before_action_remove_dir]
+failtype=EFailRemovingFile
+failposition=EBeforeAction
+failfilename=c:\dummyDir\
+
+arbitraryopfile-01=c:\dummyDir\
+operation-01=removefile
+
+present-01=c:\dummyDir\
+present-02=c:\dummyDir\DataFileA.dat
+present-03=c:\dummyDir\DataFileB.dat
+
+[fail_none]
+failtype=EFailNone
+failposition=EAfterAction
+failfilename=c:\dummyDir\
+
+arbitraryopfile-01=c:\dummyDir\
+operation-01=removefile
+
+absent-01=c:\dummyDir\
+absent-02=c:\dummyDir\DataFileA.dat
+absent-03=c:\dummyDir\DataFileB.dat
+
+[fail_after_action_remove_dir]
+failtype=EFailRemovingFile
+failposition=EAfterAction
+failfilename=c:\dummyDir\
+
+arbitraryopfile-01=c:\dummyDir\
+operation-01=removefile
+
+absent-01=c:\dummyDir\
+absent-02=c:\dummyDir\DataFileA.dat
+absent-03=c:\dummyDir\DataFileB.dat
+
+[add_and_remove_dir]
+failtype=EFailNone
+failposition=EBeforeAction
+failfilename=c:\dummyDir\
+
+arbitraryopfile-01=c:\dummyDir\
+operation-01=addfile
+arbitraryopfile-02=c:\dummyDir\DataFileA.dat
+operation-02=addfile
+arbitraryopfile-03=c:\dummyDir\
+operation-03=removefile
+
+absent-01=c:\dummyDir\
+absent-02=c:\dummyDir\DataFileA.dat
+
+[add_and_remove_dir_fail_before_remove]
+failtype=EFailRemovingFile
+failposition=EBeforeAction
+failfilename=c:\dummyDir\
+
+arbitraryopfile-01=c:\dummyDir\
+operation-01=addfile
+arbitraryopfile-02=c:\dummyDir\DataFileA.dat
+operation-02=addfile
+arbitraryopfile-03=c:\dummyDir\
+operation-03=removefile
+
+present-01=c:\dummyDir\
+present-02=c:\dummyDir\DataFileA.dat
+
+
+[failonlasttemp]
+failtype=EFailAddingTempFile
+failposition=EAfterAction
+failfilename=e:\temp.dat
+temporaryfile-01=c:\DataFileA.dat
+temporaryfile-02=e:\DataFileB.dat
+temporaryfile-03=e:\DataFileC.dat
+temporaryfile-04=c:\InstallApp.exe
+temporaryfile-05=c:\shared.dll
+temporaryfile-06=c:\temp.dat
+temporaryfile-07=e:\temp.dat
+
+[rollbackfailondeletetemp]
+failtype=EFailDeletingFile
+failposition=EBeforeAction
+failfilename=DataFileA.dat
+present-01=c:\DataFileA.dat
+present-02=e:\DataFileB.dat
+present-03=e:\DataFileC.dat
+present-04=c:\InstallApp.exe
+present-05=c:\shared.dll
+present-06=c:\temp.dat
+present-07=e:\temp.dat
+
+[rollbacksuccess]
+absent-01=c:\DataFileA.dat
+absent-02=e:\DataFileB.dat
+absent-03=e:\DataFileC.dat
+absent-04=c:\InstallApp.exe
+absent-05=c:\shared.dll
+absent-06=c:\temp.dat
+absent-07=e:\temp.dat
+
+[registryrollback]
+absent-01=c:\sys\install\sisregistry\80000001\00000000.reg
+absent-02=c:\sys\install\sisregistry\80000001\00000000_0000.ctl
+absent-03=c:\sys\install\IntegrityServices\0.drv
+absent-04=c:\sys\install\IntegrityServices\0.log
+
+[registryrollforward]
+absent-01=c:\sys\install\IntegrityServices\0.drv
+absent-02=c:\sys\install\IntegrityServices\0.log
+present-01=c:\sys\install\sisregistry\80000002\00000000.reg
+present-02=c:\sys\install\sisregistry\80000002\00000000_0000.ctl
+
+[removablemedia]
+absent-01=c:\file1.txt
+absent-02=e:\file2.txt
+absent-03=c:\sys\install\IntegrityServices\2.drv
+absent-04=c:\sys\install\IntegrityServices\2.log
+absent-05=e:\sys\install\IntegrityServices\2.log
+
+[uninstallrollforward]
+absent-01=c:\sys\install\IntegrityServices\3.drv
+absent-02=c:\sys\install\IntegrityServices\3.log
+present-01=c:\sys\install\sisregistry\1000000f\00000000.reg
+present-02=c:\sys\install\sisregistry\1000000f\00000000_0000.ctl
+
+[package_present]
+uid-01=1000000f
+
+[package_not_installed]
+uid-01=80000001
+
+[package_installed]
+uid-01=80000002
+
+[uninstall_package]
+uid=80000002
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml          
+
+[remove_package]
+uid=1000000f
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+
+[JournalFile_unit_tests]
+target=c:\sts_test_dir\myjournal.log
+
+[JournalFile_unit_tests_oom]
+target=c:\sts_test_dir\myjournal.log
+OOMTest=true
+
+[Journal_unit_tests]
+target=\sts_test_dir\
+trid=123456
+
+[Journal_unit_tests_oom]
+OOMTest=true
+target=\sts_test_dir\
+trid=123456
+
+[Integrityservices_unit_tests_OOM]
+OOMTest=false
+target=\sts_test_dir\
+trid=654321
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/tintegrityservices.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,427 @@
+//
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+PRINT IntegrityServices tests...
+//
+//LOAD_SUITE tintegrityservices
+LOAD_SUITE tststestserver
+//
+#
+z:\tusif\tsts\tintegrityservices\scripts\
+
+//! @file
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0001
+//! @SYMTestCaseDesc		Simulates successful install of version 1 followed by sucessful uninstall
+//! @SYMTestPriority		Low
+//! @SYMTestExpectedResults	The test completes with KErrNone completion code.  All files are cleaned-up.
+//! @SYMREQ			REQ2681.5
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0001
+
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\install_v1\EFailNone.ini EFailNone
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailNone.ini EFailNone
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0001
+
+
+//! @file
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0002
+//! @SYMTestCaseDesc		Simulates successful install of version 1, then upgrade to version 2 followed by sucessful uninstall
+//! @SYMTestPriority		Low
+//! @SYMTestExpectedResults	The test completes with KErrNone completion code.  All files are cleaned-up.
+//! @SYMREQ			REQ2681.5
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0002
+
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\install_v1\EFailNone.ini EFailNone
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailNone.ini EFailNone
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailNone.ini EFailNone
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0002
+
+
+//! @file
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0003
+//! @SYMTestCaseDesc		Simulates successful install of version 2 followed by sucessful uninstall
+//! @SYMTestPriority		Low
+//! @SYMTestExpectedResults	The test completes with KErrNone completion code.  All files are cleaned-up.
+//! @SYMREQ			REQ2681.5
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0003
+
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\install_v2\EFailNone.ini EFailNone
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\uninstall_v2\EFailNone.ini EFailNone
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0003
+
+
+//! @file
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0004
+//! @SYMTestCaseDesc		Simulates failure during installation of version 1 before adding the file c:\DataFileA.dat followed by sucessful rollback.
+//! @SYMTestPriority		Low
+//! @SYMTestExpectedResults	The test completes with KErrNone completion code.  All files are cleaned-up.
+//! @SYMREQ			REQ2681.5
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0004
+
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\install_v1\EFailAddingNewFile.ini EBeforeAction_c:\DataFileA.dat
+RUN_TEST_STEP 100 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailNone.ini EFailNone
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0004
+
+
+//! @file
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0005
+//! @SYMTestCaseDesc		Simulates failure during installation of version 1 after logging that the installation completed. Recovery rolls-forward the installation to completion. It is then uninstalled successfully.
+//! @SYMTestPriority		Low
+//! @SYMTestExpectedResults	The test completes with KErrNone completion code.  All files are cleaned-up.
+//! @SYMREQ			REQ2681.5
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0005
+
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\install_v1\EFailInstallComplete.ini EAfterJournal
+RUN_TEST_STEP 100 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\install_v1\EFailNone.ini EFailNone
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailNone.ini EFailNone
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0005
+
+
+//! @file
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0006
+//! @SYMTestCaseDesc		Simulates failure during installation of version 1 and again during the recovery before finally recovering successfully.
+//! @SYMTestPriority		Low
+//! @SYMTestExpectedResults	The test completes with KErrNone completion code.  All files are cleaned-up.
+//! @SYMREQ			REQ2681.5
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0006
+
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\install_v1\EFailAddingNewFile.ini EBeforeAction_c:\DataFileA.dat
+RUN_TEST_STEP 100 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailOldFilesRestored.ini EFailBeforeJournal
+RUN_TEST_STEP 100 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\rollback_install_v1\EFailNone.ini EFailNone
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0006
+
+
+//! @file
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0007
+//! @SYMTestCaseDesc		Simulates installation of version 1 followed by failure during upgrade to version 2. A sucessful recovery is followed by sucessfull uninstall.
+//! @SYMTestPriority		Low
+//! @SYMTestExpectedResults	The test completes with KErrNone completion code.  All files are cleaned-up.
+//! @SYMREQ			REQ2681.5
+//! @SYMTestType		UT
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0007
+
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\install_v1\EFailNone.ini EFailNone
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\upgrade_v1-v2\EFailAddingNewFile.ini EBeforeAction_e:\DataFileC.dat
+RUN_TEST_STEP 100 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\rollback_upgrade_v1-v2\EFailNone.ini EFailNone
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\uninstall_v1\EFailNone.ini EFailNone
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0007
+
+
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0009
+//! @SYMTestCaseDesc		Test that rollback after adding then removing a file will not leave the file in place.
+//! @SYMTestPriority		Medium
+//! @SYMTestExpectedResults	The test completes with all files cleaned-up.
+//! @SYMDEF 			DEF088970
+//! @SYMDevelopedForRelease 	Argus
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0009
+
+// Preliminary cleanup
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+
+// Copy file into place to be removed during the rollback.
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini c:\datafileb.dat
+RUN_UTILS MakeReadWrite c:\datafileb.dat
+
+// Run test step that removes c:\datafileb.dat, adds then removes c:\DataFileA, then fails after adding another file.
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini failafteraddandremove
+
+// Roll back from previous failure, ensure that files added in the previous step are deleted and the one deleted during the
+// previous step is recovered.
+RUN_TEST_STEP 100 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini recoverafterfailedaddandremove
+
+// Delete test file
+RUN_UTILS DeleteFile c:\datafileb.dat
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0009
+
+
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0010
+//! @SYMTestCaseDesc		Test that transient rollback failure while deleting temp files will not block future rollbacks.
+//! @SYMTestPriority		Medium
+//! @SYMTestActions 		Journal addition of multiple temp files without commit, fail rollback while deleting temp files, check
+//! 				that subsequent rollback succeeds.
+//! @SYMTestExpectedResults	Last rollback succeeds, all temp files removed.
+//! @SYMDEF 			DEF088011
+//! @SYMDevelopedForRelease 	Argus
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0010
+
+// Run test step that adds a number of temporary files, failing after the last one so it doesn't commit
+RUN_TEST_STEP 10 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini failonlasttemp
+
+// Run a recovery step which fails deleting one of the temp files
+RUN_TEST_STEP 10 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini rollbackfailondeletetemp
+
+// Make sure that rollback can succeed on another attempt. 
+RUN_TEST_STEP 10 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini rollbacksuccess
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0010
+
+
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0011
+//! @SYMTestCaseDesc		Test that failure before adding a journal entry for removal is handled gracefully
+//! @SYMTestPriority		Medium
+//! @SYMTestExpectedResults	The test completes with all files present.
+//! @SYMDEF 			DEF101378
+//! @SYMDevelopedForRelease 	Argus
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0011
+
+// Preliminary cleanup
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+
+RUN_UTILS MkDir c:\dummyDir
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini c:\dummyDir\datafileb.dat
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini c:\dummyDir\datafilea.dat
+RUN_UTILS MakeReadWrite c:\dummyDir\datafileb.dat
+RUN_UTILS MakeReadWrite c:\dummyDir\datafilea.dat
+
+// Run test step that fails before adding to the journal entry that dummyDir is to be removed
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini fail_before_journal_remove_dir
+
+// Roll back from previous failure, ensure that the files are still there 
+RUN_TEST_STEP 100 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini directory_present
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0011
+
+
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0012
+//! @SYMTestCaseDesc		Test that failure after adding a journal entry for removal is handled gracefully
+//! @SYMTestPriority		Medium
+//! @SYMTestExpectedResults	The test completes with all files present.
+//! @SYMDEF 			DEF101378
+//! @SYMDevelopedForRelease 	Argus
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0012
+
+// Preliminary cleanup
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+
+RUN_UTILS MkDir c:\dummyDir
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini c:\dummyDir\datafileb.dat
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini c:\dummyDir\datafilea.dat
+RUN_UTILS MakeReadWrite c:\dummyDir\datafileb.dat
+RUN_UTILS MakeReadWrite c:\dummyDir\datafilea.dat
+
+// Run test step that fails after adding to the journal entry that dummyDir is to be removed
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini fail_after_journal_remove_dir
+
+// Roll back from previous failure, ensure the files are still there
+RUN_TEST_STEP 100 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini directory_present
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0012
+
+
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0013
+//! @SYMTestCaseDesc		Test that failure before removing a directory is handled gracefully
+//! @SYMTestPriority		Medium
+//! @SYMTestExpectedResults	The test completes with all files present.
+//! @SYMDEF 			DEF101378
+//! @SYMDevelopedForRelease 	Argus
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0013
+
+// Preliminary cleanup
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+
+RUN_UTILS MkDir c:\dummyDir
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini c:\dummyDir\datafileb.dat
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini c:\dummyDir\datafilea.dat
+RUN_UTILS MakeReadWrite c:\dummyDir\datafileb.dat
+RUN_UTILS MakeReadWrite c:\dummyDir\datafilea.dat
+
+// Run test step that fails before removing dummyDir 
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini fail_before_action_remove_dir
+
+// Roll back from previous failure, ensure the files are still there
+RUN_TEST_STEP 100 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini directory_present
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0013
+
+
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0014
+//! @SYMTestCaseDesc		Test that failure after removing a directory is handled gracefully
+//! @SYMTestPriority		Medium
+//! @SYMTestExpectedResults	The test completes with all files present.
+//! @SYMDEF 			DEF101378
+//! @SYMDevelopedForRelease 	Argus
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0014
+// Preliminary cleanup
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+
+RUN_UTILS MkDir c:\dummyDir
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini c:\dummyDir\datafileb.dat
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini c:\dummyDir\datafilea.dat
+RUN_UTILS MakeReadWrite c:\dummyDir\datafileb.dat
+RUN_UTILS MakeReadWrite c:\dummyDir\datafilea.dat
+
+// Run test step that fails after removing dummyDir
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini fail_after_action_remove_dir
+
+// Roll back from previous failure, ensure the files are still there
+RUN_TEST_STEP 100 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini directory_present
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0014
+
+
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0015
+//! @SYMTestCaseDesc		Test that roll forward of directory uninstallation works correctly
+//! @SYMTestPriority		Medium
+//! @SYMTestExpectedResults	The test completes with all files deleted.
+//! @SYMDEF 			DEF101378
+//! @SYMDevelopedForRelease 	Argus
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0015
+
+// Preliminary cleanup
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+
+RUN_UTILS MkDir c:\dummyDir
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini c:\dummyDir\datafileb.dat
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini c:\dummyDir\datafilea.dat
+RUN_UTILS MakeReadWrite c:\dummyDir\datafileb.dat
+RUN_UTILS MakeReadWrite c:\dummyDir\datafilea.dat
+
+// Run test step that fails after removing dummyDir
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini fail_before_action_remove_dir
+
+// Roll forward - check that files will get deleted
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini fail_none
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0015
+
+
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0016
+//! @SYMTestCaseDesc		Test that adding and removing a directory in the same transaction will remove it
+//! @SYMTestPriority		Medium
+//! @SYMTestExpectedResults	The test completes with all files cleaned-up.
+//! @SYMDEF 			DEF101378
+//! @SYMDevelopedForRelease 	Argus
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0016
+
+// Preliminary cleanup
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+
+// Run test step that creates c:\dummyDir with a test file, and then removes it in the same transaction.
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini add_and_remove_dir
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0016
+
+
+//! @SYMTestCaseID		API-SEC-INTEGRITYSERVICES-B-0017
+//! @SYMTestCaseDesc		Test that adding and removing a directory in the same transaction with failure before removal will rollback correctly
+//! @SYMTestPriority		Medium
+//! @SYMTestExpectedResults	The test completes with all files cleaned-up.
+//! @SYMDEF 			DEF101378
+//! @SYMDevelopedForRelease 	Argus
+
+START_TESTCASE API-SEC-INTEGRITYSERVICES-B-0017
+
+// Preliminary cleanup
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+
+// Run test step that creates c:\dummyDir with a test file, and then removes it in the same transaction while failing before removal.
+RUN_TEST_STEP 100 tststestserver Install z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini add_and_remove_dir_fail_before_remove
+
+// Roll back from previous failure, ensure that no files are present
+RUN_TEST_STEP 100 tststestserver Recover z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini directory_absent
+
+END_TESTCASE API-SEC-INTEGRITYSERVICES-B-0017
+
+
+RUN_TEST_STEP 100 tststestserver Cleanup z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Cleanup
+
+
+//! @SYMTestCaseID		API-SEC-Journalfile_unit_tests-0001
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-Journalfile_unit_tests-0001
+
+RUN_TEST_STEP 100 tststestserver JournalFileUnitTest z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini JournalFile_unit_tests
+
+END_TESTCASE API-SEC-Journalfile_unit_tests-0001
+
+
+//! @SYMTestCaseID		API-SEC-Journalfile_unit_tests_OOM-0001
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-Journalfile_unit_tests_OOM-0001
+
+RUN_TEST_STEP 100 tststestserver JournalFileUnitTestAdd     z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini JournalFile_unit_tests_oom
+RUN_TEST_STEP 100 tststestserver JournalFileUnitTestTemp    z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini JournalFile_unit_tests_oom
+RUN_TEST_STEP 100 tststestserver JournalFileUnitTestRemove  z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini JournalFile_unit_tests_oom
+RUN_UTILS CopyFile z:\tusif\tsts\tintegrityservices\scripts\data\unittests\myjournal.log  c:\sts_test_dir\myjournal.log
+RUN_TEST_STEP 100 tststestserver JournalFileUnitTestRead    z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini JournalFile_unit_tests_oom
+RUN_UTILS DeleteFile c:\sts_test_dir\myjournal.log
+RUN_TEST_STEP 100 tststestserver JournalFileUnitTestEvent   z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini JournalFile_unit_tests_oom
+
+END_TESTCASE API-SEC-Journalfile_unit_tests_OOM-0001
+
+
+//! @SYMTestCaseID		API-SEC-Journal_unit_tests-0001
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-Journal_unit_tests-0001
+
+RUN_TEST_STEP 100 tststestserver JournalUnitTest z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Journal_unit_tests
+
+END_TESTCASE API-SEC-Journal_unit_tests-0001
+
+
+//! @SYMTestCaseID		API-SEC-Journal_unit_tests_OOM-0001
+//! @SYMTestStatus		3. Released
+
+START_TESTCASE API-SEC-Journal_unit_tests_OOM-0001
+
+RUN_TEST_STEP 100 tststestserver JournalUnitTestInstall z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Journal_unit_tests_oom
+RUN_TEST_STEP 100 tststestserver JournalUnitTestRollback z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Journal_unit_tests_oom
+
+END_TESTCASE API-SEC-Journal_unit_tests_OOM-0001
+
+
+//START_TESTCASE Integrityservices_unit_tests_OOM
+//RUN_TEST_STEP 100 tststestserver IntegrityservicesUnitTestInstall z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Integrityservices_unit_tests_OOM
+//RUN_TEST_STEP 100 tststestserver IntegrityservicesUnitTestRollback z:\tusif\tsts\tintegrityservices\scripts\tintegrityservices.ini Integrityservices_unit_tests_OOM
+//END_TESTCASE Integrityservices_unit_tests_OOM
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailBackupFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+; these test failure during uninstall of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EFailBackupFilesRemoved
+failposition=EBeforeJournal
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterJournal]
+
+failtype=EFailBackupFilesRemoved
+failposition=EAfterJournal
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailDeletingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+; these test failure during uninstall of app version 1 files
+
+[EBeforeAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EBeforeAction
+failfilename=c:\temp.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EAfterAction
+failfilename=c:\temp.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailInstallComplete.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+; these test failure during uninstall of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EFailInstallComplete
+failposition=EBeforeJournal
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterJournal]
+
+failtype=EFailInstallComplete
+failposition=EAfterJournal
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailNone.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,16 @@
+; these test successful uninstall of app version 1 files
+
+[EFailNone]
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+absent-01=c:\DataFileA.dat
+absent-02=e:\DataFileB.dat
+absent-03=c:\InstallApp.exe
+absent-04=c:\Shared.dll
+absent-05=c:\IntegrityServices\0.drv
+absent-06=c:\IntegrityServices\0.log
+absent-07=e:\IntegrityServices\0.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailRemovingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,176 @@
+; these test failure during uninstall of app version 2 files
+
+[EBeforeAction_c:\DataFileA.dat]
+
+failtype=EFailRemovingFile
+failposition=EBeforeAction
+failfilename=c:\DataFileA.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EBeforeAction_e:\DataFileB.dat]
+
+failtype=EFailRemovingFile
+failposition=EBeforeAction
+failfilename=e:\DataFileB.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EBeforeAction_c:\InstallApp.exe]
+
+failtype=EFailRemovingFile
+failposition=EBeforeAction
+failfilename=c:\DataFileA.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EBeforeAction_c:\Shared.dll]
+
+failtype=EFailRemovingFile
+failposition=EBeforeAction
+failfilename=c:\Shared.dll
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterAction_c:\DataFileA.dat]
+
+failtype=EFailRemovingFile
+failposition=EAfterAction
+failfilename=c:\DataFileA.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterAction_e:\DataFileB.dat]
+
+failtype=EFailRemovingFile
+failposition=EAfterAction
+failfilename=e:\DataFileB.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterAction_c:\InstallApp.exe]
+
+failtype=EFailRemovingFile
+failposition=EAfterAction
+failfilename=c:\DataFileA.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterAction_c:\Shared.dll]
+
+failtype=EFailRemovingFile
+failposition=EAfterAction
+failfilename=c:\Shared.dll
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EBeforeJournal_c:\DataFileA.dat]
+
+failtype=EFailRemovingFile
+failposition=EBeforeJournal
+failfilename=c:\DataFileA.dat
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EBeforeJournal_e:\DataFileB.dat]
+
+failtype=EFailRemovingFile
+failposition=EBeforeJournal
+failfilename=e:\DataFileB.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EBeforeJournal_c:\InstallApp.exe]
+
+failtype=EFailRemovingFile
+failposition=EBeforeJournal
+failfilename=c:\DataFileA.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EBeforeJournal_c:\Shared.dll]
+
+failtype=EFailRemovingFile
+failposition=EBeforeJournal
+failfilename=c:\Shared.dll
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterJournal_c:\DataFileA.dat]
+
+failtype=EFailRemovingFile
+failposition=EAfterJournal
+failfilename=c:\DataFileA.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterJournal_e:\DataFileB.dat]
+
+failtype=EFailRemovingFile
+failposition=EAfterJournal
+failfilename=e:\DataFileB.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterJournal_c:\InstallApp.exe]
+
+failtype=EFailRemovingFile
+failposition=EAfterJournal
+failfilename=c:\DataFileA.dat
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterJournal_c:\Shared.dll]
+
+failtype=EFailRemovingFile
+failposition=EAfterJournal
+failfilename=c:\Shared.dll
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v1/EFailTempFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+; these test failure during uninstall of app version 1 files
+
+[EBeforeJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+removefile-01=c:\DataFileA.dat
+removefile-02=e:\DataFileB.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailBackupFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+; these test failure during uninstall of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EFailBackupFilesRemoved
+failposition=EBeforeJournal
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterJournal]
+
+failtype=EFailBackupFilesRemoved
+failposition=EAfterJournal
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailDeletingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+; these test failure during uninstall of app version 2 files
+
+[EBeforeAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EBeforeAction
+failfilename=c:\temp.dat
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterAction_c:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EAfterAction
+failfilename=c:\temp.dat
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailInstallComplete.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+; these test failure during uninstall of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EFailInstallComplete
+failposition=EBeforeJournal
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterJournal]
+
+failtype=EFailInstallComplete
+failposition=EAfterJournal
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailNone.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,16 @@
+; these successful uninstall of app version 2 files
+
+[EFailNone]
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+absent-01=e:\DataFileB.dat
+absent-02=e:\DataFileC.dat
+absent-03=c:\InstallApp.exe
+absent-04=c:\Shared.dll
+absent-05=c:\IntegrityServices\0.drv
+absent-06=c:\IntegrityServices\0.log
+absent-07=e:\IntegrityServices\0.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailRemovingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,89 @@
+; these test failure during uninstall of app version 2 files
+
+[EBeforeAction_e:\DataFileB.dat]
+
+failtype=EFailRemovingFile
+failposition=EBeforeAction
+failfilename=c:\DataFileA.dat
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EBeforeAction_e:\DataFileC.dat]
+
+failtype=EFailRemovingFile
+failposition=EBeforeAction
+failfilename=e:\DataFileB.dat
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EBeforeAction_c:\InstallApp.exe]
+
+failtype=EFailRemovingFile
+failposition=EBeforeAction
+failfilename=c:\DataFileA.dat
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EBeforeAction_c:\Shared.dll]
+
+failtype=EFailRemovingFile
+failposition=EBeforeAction
+failfilename=c:\Shared.dll
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterAction_e:\DataFileB.dat]
+
+failtype=EFailRemovingFile
+failposition=EAfterAction
+failfilename=c:\DataFileA.dat
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterAction_e:\DataFileC.dat]
+
+failtype=EFailRemovingFile
+failposition=EAfterAction
+failfilename=e:\DataFileB.dat
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterAction_c:\InstallApp.exe]
+
+failtype=EFailRemovingFile
+failposition=EAfterAction
+failfilename=c:\DataFileA.dat
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterAction_c:\Shared.dll]
+
+failtype=EFailRemovingFile
+failposition=EAfterAction
+failfilename=c:\Shared.dll
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/uninstall_v2/EFailTempFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,21 @@
+; these test failure during uninstall of app version 2 files
+
+[EBeforeJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
+
+[EAfterJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+removefile-01=e:\DataFileB.dat
+removefile-02=e:\DataFileC.dat
+removefile-03=c:\InstallApp.exe
+removefile-04=c:\Shared.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailAddingNewFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,49 @@
+; these test failure during upgrade of app from version 1 to version 2
+
+[EBeforeAction_e:\DataFileC.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeAction
+failfilename=e:\DataFileC.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterAction_e:\DataFileC.dat]
+
+failtype=EFailAddingNewFile
+failposition=EAfterAction
+failfilename=e:\DataFileC.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EBeforeJournal_e:\DataFileC.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=e:\DataFileC.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterJournal_e:\DataFileC.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=e:\DataFileC.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailAddingTempFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,49 @@
+; these test failure during upgrade of app from version 1 to version 2
+
+[EBeforeAction_e:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EBeforeAction
+failfilename=e:\temp.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterAction_e:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EAfterAction
+failfilename=e:\temp.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EBeforeJournal_e:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EBeforeJournal
+failfilename=e:\temp.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterJournal_e:\temp.dat]
+
+failtype=EFailAddingTempFile
+failposition=EAfterJournal
+failfilename=e:\temp.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailBackupFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+; these test failure during upgrade of app from version 1 to version 2
+
+[EBeforeJournal]
+
+failtype=EFailBackupFilesRemoved
+failposition=EBeforeJournal
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterJournal]
+
+failtype=EFailBackupFilesRemoved
+failposition=EAfterJournal
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailDeletingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+; these test failure during upgrade of app from version 1 to version 2
+
+[EBeforeAction_e:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EBeforeAction
+failfilename=e:\temp.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterAction_e:\temp.dat]
+
+failtype=EFailDeletingFile
+failposition=EAfterAction
+failfilename=c:\temp.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailInstallComplete.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+; these test failure during upgrade of app from version 1 to version 2
+
+[EBeforeJournal]
+
+failtype=EFailInstallComplete
+failposition=EBeforeJournal
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterJournal]
+
+failtype=EFailInstallComplete
+failposition=EAfterJournal
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailNone.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+; these successful upgrade of app from version 1 to version 2
+
+[EFailNone]
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+present-01=e:\DataFileB.dat
+present-02=e:\DataFileC.dat
+present-03=c:\InstallApp.exe
+present-04=c:\Shared.dll
+
+absent-01=e:\temp.dat
+absent-02=c:\IntegrityServices\0.drv
+absent-03=c:\IntegrityServices\0.log
+absent-04=e:\IntegrityServices\0.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailRemovingFile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,49 @@
+; these test failure during upgrade of app from version 1 to version 2
+
+[EBeforeAction_c:\DataFileA.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeAction
+failfilename=c:\DataFileA.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterAction_c:\DataFileA.dat]
+
+failtype=EFailAddingNewFile
+failposition=EAfterAction
+failfilename=c:\DataFileA.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EBeforeJournal_c:\DataFileA.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=c:\DataFileA.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterJournal_c:\DataFileA.dat]
+
+failtype=EFailAddingNewFile
+failposition=EBeforeJournal
+failfilename=c:\DataFileA.dat
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/scripts/upgrade_v1-v2/EFailTempFilesRemoved.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,23 @@
+; these test failure during upgrade of app from version 1 to version 2
+
+[EBeforeJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
+
+[EAfterJournal]
+
+failtype=EFailTempFilesRemoved
+failposition=EBeforeJournal
+
+removefile-01=c:\DataFileA.dat
+
+addfile-01=e:\DataFileC.dat
+
+temporaryfile-01=e:\temp.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/source/e32main.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* E32MAIN
+* Entry point for Test TIntegrityServices Server
+*
+*/
+
+
+#include <e32std.h>
+#include <e32base.h>
+#include "tintegrityservicesserver.h"
+
+// Perform server initialisation, in particular creation of the scheduler and 
+// server and then run the scheduler
+static void RunServerL()
+	{
+	// Naming the server thread after the server helps to debug panics
+	User::LeaveIfError(RThread().RenameMe(KIntegrityServicesServer));
+	// Create and install the active scheduler we need
+	CActiveScheduler* s= new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(s);
+	CActiveScheduler::Install(s);
+	// Create the server and leave it on the cleanup stack
+	Usif::CIntegrityServicesServer::NewLC();
+	// Init complete, signal the client
+	RProcess::Rendezvous(KErrNone);
+	// Ready to run
+	CActiveScheduler::Start();
+	// Cleanup server and scheduler
+	CleanupStack::PopAndDestroy(2);
+	}
+
+//
+// Server process entry point
+//
+
+TInt E32Main()
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New();
+	TInt err=KErrNoMemory;
+	if (cleanup)
+		{
+		TRAP(err, RunServerL());
+		delete cleanup;
+		}
+	__UHEAP_MARKEND;
+	return err;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/source/tintegrityservicesclientserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <e32uid.h>
+#include "tintegrityservicesclientserver.h"
+#include "tintegrityservicescommon.h"
+
+//
+// Starts the IntegrityServices Server in a new process
+//
+static TInt StartIntegrityServicesServer()
+	{
+	const TUidType serverUid(KExecutableImageUid, KNullUid, KIntegrityServicesServerUid3);
+	RProcess server;
+	TInt err = server.Create(KIntegrityServicesServerImage, KNullDesC);
+
+	if (err != KErrNone)
+		{
+		return err;
+		}
+
+	TRequestStatus stat;
+	server.Rendezvous(stat);
+
+	if (stat != KRequestPending)
+		{
+		server.Kill(0); // abort startup
+		}
+	else
+		{
+		server.Resume(); // logon OK, start the server
+		}
+
+	User::WaitForRequest(stat); // wait for start or death
+	// We can't use the 'exit reason' if the server panicked as this is the
+	// panic 'reason' and may be 0 which cannot be distinguished from KErrNone.
+	err = (server.ExitType() == EExitPanic) ? KErrGeneral : stat.Int();
+	server.Close();
+	return err;
+	}
+
+EXPORT_C TInt RIntegrityServicesServerSession::Connect()
+	{
+	TInt retry = 2;
+	for(;;)
+		{
+		TInt err = CreateSession(KIntegrityServicesServerName, TVersion(0,0,0), 1);
+		if (err != KErrNotFound && err != KErrServerTerminated)
+			{
+			return err;
+			}
+
+		if (--retry == 0)
+			{
+			return err;
+			}
+
+		err = StartIntegrityServicesServer();
+		if (err != KErrNone && err != KErrAlreadyExists)
+			{
+			return err;
+			}
+		}
+	}
+
+EXPORT_C void RIntegrityServicesServerSession::AddL(const TDesC& aFileName)
+	{
+	User::LeaveIfError(SendReceive(EAdd, TIpcArgs(&aFileName)));
+	}
+
+EXPORT_C void RIntegrityServicesServerSession::RemoveL(const TDesC& aFileName)
+	{
+	User::LeaveIfError(SendReceive(ERemove, TIpcArgs(&aFileName)));
+	}
+	
+EXPORT_C void RIntegrityServicesServerSession::TemporaryL(const TDesC& aFileName)
+	{
+	User::LeaveIfError(SendReceive(ETemporary, TIpcArgs(&aFileName)));
+	}
+	
+EXPORT_C void RIntegrityServicesServerSession::CommitL()
+	{
+	User::LeaveIfError(SendReceive(ECommit));
+	}
+	
+EXPORT_C void RIntegrityServicesServerSession::RollBackL(TBool aAllTransactions)
+	{
+	TPckg<TBool> all(aAllTransactions);
+	User::LeaveIfError(SendReceive(ERollBack, TIpcArgs(&all)));
+	}
+	
+EXPORT_C void RIntegrityServicesServerSession::SetSimulatedFailureL(TPtrC aFailType, TPtrC aFailPosition, TPtrC aFileName)
+	{
+	User::LeaveIfError(SendReceive(ESetSimulatedFailure, TIpcArgs(&aFailType, &aFailPosition, &aFileName)));
+	}
+	
+EXPORT_C void RIntegrityServicesServerSession::CreateNewTestFileL(const TDesC& aFileName)
+	{
+	User::LeaveIfError(SendReceive(ECreateNewTestFile, TIpcArgs(&aFileName)));
+	}
+	
+EXPORT_C void RIntegrityServicesServerSession::CreateTempTestFileL(const TDesC& aFileName)
+	{
+	User::LeaveIfError(SendReceive(ECreateTempTestFile, TIpcArgs(&aFileName)));
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/source/tintegrityservicesserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,427 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "tintegrityservicesserver.h"
+#include "tintegrityservicescommon.h"
+#include "integrityservices.h"
+#include <e32debug.h>
+
+_LIT(KFailAddingNewFile, "EFailAddingNewFile");
+_LIT(KFailRemovingFile, "EFailRemovingFile");
+_LIT(KFailAddingTempFile, "EFailAddingTempFile");
+_LIT(KFailRestoringFile, "EFailRestoringFile");
+_LIT(KFailDeletingFile, "EFailDeletingFile");
+_LIT(KFailInstallComplete, "EFailInstallComplete");
+_LIT(KFailNewFilesRemoved, "EFailNewFilesRemoved");
+_LIT(KFailOldFilesRestored, "EFailOldFilesRestored");
+_LIT(KFailTempFilesRemoved, "EFailTempFilesRemoved");
+_LIT(KFailBackupFilesRemoved, "EFailBackupFilesRemoved");
+
+_LIT(KFailBeforeJournal, "EBeforeJournal");
+_LIT(KFailAfterJournal, "EAfterJournal");
+_LIT(KFailBeforeAction, "EBeforeAction");
+_LIT(KFailAfterAction, "EAfterAction");
+
+using namespace Usif;
+
+static void PanicClient(const RMessagePtr2& aMessage, 
+						TIntegrityServicesServerPanic aPanic)
+	{
+	aMessage.Panic(KIntegrityServicesServerName, aPanic);
+	}
+
+/////
+///// CIntegrityServicesServer
+/////
+
+CIntegrityServicesServer* CIntegrityServicesServer::NewLC()
+	{
+	CIntegrityServicesServer* self = new(ELeave) CIntegrityServicesServer();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+	
+void CIntegrityServicesServer::AddSession()
+	{
+	++iSessionCount;
+	iShutdown->Cancel();
+	}
+	
+void CIntegrityServicesServer::DropSession()
+	{
+	if (--iSessionCount==0)
+		{
+		iShutdown->Start();
+		RDebug::Print(_L("Server shutting down"));
+		}
+	}
+
+CIntegrityServicesServer::~CIntegrityServicesServer()
+	{
+	delete iShutdown;
+	RDebug::Print(_L("Server destructor"));
+	}
+
+CIntegrityServicesServer::CIntegrityServicesServer() : CServer2(EPriorityNormal, ESharableSessions)
+	{
+	}
+
+void CIntegrityServicesServer::ConstructL()
+	{
+	StartL(KIntegrityServicesServerName);
+	
+	iShutdown = CShutdownTimer::NewL();
+	
+	// Ensure that the server still exits even if the 1st client fails to
+	// connect
+	iShutdown->Start();
+	}
+
+CSession2* CIntegrityServicesServer::NewSessionL(const TVersion& /*aVersion*/, 
+						 const RMessage2& /*aMessage*/) const
+	{
+	  return CIntegrityServicesSession::NewL();
+	}
+
+CIntegrityServicesSession* CIntegrityServicesSession::NewL()
+	{
+	CIntegrityServicesSession* self = CIntegrityServicesSession::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+	
+	
+CIntegrityServicesSession* CIntegrityServicesSession::NewLC()
+	{
+	CIntegrityServicesSession* self = new(ELeave) CIntegrityServicesSession();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CIntegrityServicesSession::CIntegrityServicesSession() : CSession2()
+	{
+	}
+	
+void CIntegrityServicesSession::ConstructL()
+	{
+	iIntegrityServices = CIntegrityServices::NewL(0);
+	}
+	
+void CIntegrityServicesSession::CreateL()
+	{
+	RDebug::Print(_L("Session CreateL"));
+	Server().AddSession();
+	}
+
+
+
+CIntegrityServicesSession::~CIntegrityServicesSession()
+	{
+	delete iIntegrityServices;
+	Server().DropSession();
+	}
+
+CIntegrityServicesServer& CIntegrityServicesSession::Server()
+	{
+	return *static_cast<CIntegrityServicesServer*>(
+		const_cast<CServer2*>(CSession2::Server()));
+	}
+
+/////
+///// CIntegrityServicesSession		
+/////
+
+void CreateTempTestFileL(TDesC& aFileName)
+	{
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+	RFile tempFile;
+	CleanupClosePushL(tempFile);
+	CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailAddingTempFile, CIntegrityServices::EBeforeAction, aFileName);
+	User::LeaveIfError(tempFile.Create(fs, aFileName, EFileWrite));
+	CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailAddingTempFile, CIntegrityServices::EAfterAction, aFileName);
+	CleanupStack::PopAndDestroy(2, &fs);
+	}
+
+void CreateNewTestFileL(TDesC& aFileName)
+	{
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);	
+	if (aFileName.Length() > 0 && aFileName[aFileName.Length() - 1] == KPathDelimiter)
+		{  // A new test directory is created
+		User::LeaveIfError(fs.MkDir(aFileName));
+		}
+	else
+		{  // A new test file is created
+		RFile newFile;
+		CleanupClosePushL(newFile);
+		CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailAddingNewFile, CIntegrityServices::EBeforeAction, aFileName);
+		User::LeaveIfError(newFile.Create(fs, aFileName, EFileWrite));
+		CIntegrityServices::SimulatePowerFailureL(CIntegrityServices::EFailAddingNewFile, CIntegrityServices::EAfterAction, aFileName);
+		CleanupStack::PopAndDestroy(&newFile);		
+		}
+	CleanupStack::PopAndDestroy(&fs);	
+	}
+
+void SetSimulatedFailureL(TPtrC16 aFailType, TPtrC16 aFailPosition, TPtrC16 aFailFileName)
+	{
+	if(aFailType.CompareF(KFailAddingNewFile) == 0)
+		{
+		CIntegrityServices::iFailType = CIntegrityServices::EFailAddingNewFile;
+		}
+	else if(aFailType.CompareF(KFailRemovingFile) == 0)
+		{
+		CIntegrityServices::iFailType = CIntegrityServices::EFailRemovingFile;
+		}
+	else if(aFailType.CompareF(KFailAddingTempFile) == 0)
+		{
+		CIntegrityServices::iFailType = CIntegrityServices::EFailAddingTempFile;
+		}
+	else if(aFailType.CompareF(KFailRestoringFile) == 0)
+		{
+		CIntegrityServices::iFailType = CIntegrityServices::EFailRestoringFile;
+		}
+	else if(aFailType.CompareF(KFailDeletingFile) == 0)
+		{
+		CIntegrityServices::iFailType = CIntegrityServices::EFailDeletingFile;
+		}
+	else if(aFailType.CompareF(KFailInstallComplete) == 0)
+		{
+		CIntegrityServices::iFailType = CIntegrityServices::EFailInstallComplete;
+		}
+	else if(aFailType.CompareF(KFailNewFilesRemoved) == 0)
+		{
+		CIntegrityServices::iFailType = CIntegrityServices::EFailNewFilesRemoved;
+		}
+	else if(aFailType.CompareF(KFailOldFilesRestored) == 0)
+		{
+		CIntegrityServices::iFailType = CIntegrityServices::EFailOldFilesRestored;
+		}
+	else if(aFailType.CompareF(KFailTempFilesRemoved) == 0)
+		{
+		CIntegrityServices::iFailType = CIntegrityServices::EFailTempFilesRemoved;
+		}
+	else if(aFailType.CompareF(KFailBackupFilesRemoved) == 0)
+		{
+		CIntegrityServices::iFailType = CIntegrityServices::EFailBackupFilesRemoved;
+		}
+	else
+		{
+		// default to EFailNone
+		CIntegrityServices::iFailType = CIntegrityServices::EFailNone;
+		}
+	
+	if(aFailPosition.CompareF(KFailBeforeJournal) == 0)
+		{
+		CIntegrityServices::iFailPosition = CIntegrityServices::EBeforeJournal;
+		}
+	else if(aFailPosition.CompareF(KFailAfterJournal) == 0)
+		{
+		CIntegrityServices::iFailPosition = CIntegrityServices::EAfterJournal;
+		}
+	else if(aFailPosition.CompareF(KFailBeforeAction) == 0)
+		{
+		CIntegrityServices::iFailPosition = CIntegrityServices::EBeforeAction;
+		}
+	else if(aFailPosition.CompareF(KFailAfterAction) == 0)
+		{
+		CIntegrityServices::iFailPosition = CIntegrityServices::EAfterAction;
+		}
+	else
+		{
+		if(CIntegrityServices::iFailType != CIntegrityServices::EFailNone)
+			{
+			// scripting error, FailType specified without FailPosition
+			User::Leave(KErrCorrupt);
+			}
+		}
+		
+	CIntegrityServices::iFailFileName = aFailFileName;
+	CIntegrityServices::iIsFailureTestingEnabled = CIntegrityServices::iFailType != CIntegrityServices::EFailNone;
+	}
+
+void CIntegrityServicesSession::ServiceL(const RMessage2& aMessage)
+	{
+	switch (aMessage.Function())
+		{
+		case EAdd:
+			{
+			RDebug::Print(_L("ServiceL EAdd"));
+			HBufC16* fileName = HBufC16::NewLC(aMessage.GetDesLength(0));
+		  	TPtr16 ptr(fileName->Des());
+		  	aMessage.Read(0, ptr);
+
+		  	TRAPD(err, iIntegrityServices->RegisterNewL(*fileName));
+
+			aMessage.Complete(err);
+			CleanupStack::PopAndDestroy(fileName);	
+			break;
+			}
+		case ERemove:
+			{
+			RDebug::Print(_L("ServiceL ERemove"));
+			HBufC16* fileName = HBufC16::NewLC(aMessage.GetDesLength(0));
+		  	TPtr16 ptr(fileName->Des());
+		  	aMessage.Read(0, ptr);
+
+		  	TRAPD(err, iIntegrityServices->RemoveL(*fileName));
+
+			aMessage.Complete(err);
+			CleanupStack::PopAndDestroy(fileName);	
+			
+			break;
+			}
+		case ETemporary:
+			{
+			RDebug::Print(_L("ServiceL ETemporary"));
+			HBufC16* fileName = HBufC16::NewLC(aMessage.GetDesLength(0));
+		  	TPtr16 ptr(fileName->Des());
+		  	aMessage.Read(0, ptr);
+
+		  	TRAPD(err, iIntegrityServices->RegisterTemporaryL(*fileName));
+
+			aMessage.Complete(err);
+			CleanupStack::PopAndDestroy(fileName);	
+			break;
+			}
+		case ECommit:
+			{
+			RDebug::Print(_L("ServiceL ECommit"));
+			TRAPD(err, iIntegrityServices->CommitL());
+			aMessage.Complete(err);
+			break;
+			}
+		case ERollBack:
+			{
+			RDebug::Print(_L("ServiceL ERollBack"));
+			TBool all;
+			TPckg<TBool> allTransactions(all);
+			aMessage.ReadL(0, allTransactions);
+			TInt error=KErrNone;
+			
+			if(all)
+				{
+				CIntegrityServices::RollbackAllL();
+				}
+			else
+				{
+				TRAPD(err, iIntegrityServices->RollBackL());
+				error=err;
+				}
+			aMessage.Complete(error);
+			
+			break;
+			}
+			
+		case ESetSimulatedFailure:
+			{
+			HBufC16* aFailType = HBufC16::NewLC(256);
+			HBufC16* aPosition = HBufC16::NewLC(256);
+			HBufC16* aFailFileName = HBufC16::NewLC(256);
+			TPtr16 failType(aFailType->Des());
+			TPtr16 position(aPosition->Des());
+			TPtr16 failFileName(aFailFileName->Des());
+			
+			aMessage.ReadL(0, failType);
+			aMessage.ReadL(1, position);
+			aMessage.ReadL(2, failFileName);
+			RDebug::Print(_L("ServiceL ESetSimulatedFailure %S %S %S"), &aFailType, &aPosition, &aFailFileName);
+			TRAPD(err, SetSimulatedFailureL(failType, position, failFileName));
+			aMessage.Complete(err);
+			CleanupStack::PopAndDestroy(3, aFailType);
+			break;
+			}
+		case ECreateNewTestFile:
+			{
+			RDebug::Print(_L("ServiceL ECreateNewTestFile"));
+			HBufC16* fileName = HBufC16::NewLC(aMessage.GetDesLength(0));
+		  	TPtr16 ptr(fileName->Des());
+		  	aMessage.Read(0, ptr);
+
+		  	TRAPD(err, CreateNewTestFileL(*fileName));
+
+			aMessage.Complete(err);
+			CleanupStack::PopAndDestroy(fileName);	
+			break;
+			}
+		case ECreateTempTestFile:
+			{
+			RDebug::Print(_L("ServiceL ECreateTempTestFile"));
+			HBufC16* fileName = HBufC16::NewLC(aMessage.GetDesLength(0));
+		  	TPtr16 ptr(fileName->Des());
+		  	aMessage.Read(0, ptr);
+
+		  	TRAPD(err, CreateTempTestFileL(*fileName));
+
+			aMessage.Complete(err);
+			CleanupStack::PopAndDestroy(fileName);	
+			break;
+			}
+	default:
+		{
+		PanicClient(aMessage, EPanicIntegrityServicesServerIllegalFunction);
+		break;
+		}
+		}
+	}
+
+void CIntegrityServicesSession::ServiceError(const RMessage2& aMessage, TInt aError)
+	{
+	if (aError==KErrBadDescriptor)
+		{
+		PanicClient(aMessage, EPanicIntegrityServicesServerIllegalFunction);
+		}
+	CSession2::ServiceError(aMessage, aError);
+	}
+
+/////
+///// CShutdownTimer
+/////
+inline CShutdownTimer::CShutdownTimer() : CTimer(-1)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+inline void CShutdownTimer::ConstructL()
+	{
+	CTimer::ConstructL();
+	}
+
+inline void CShutdownTimer::Start()
+	{
+	After(KShutdownDelay);
+	}
+
+CShutdownTimer* CShutdownTimer::NewL()
+	{
+	CShutdownTimer* self = new(ELeave) CShutdownTimer();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// Initiate server exit when the timer expires
+void CShutdownTimer::RunL()
+	{
+	CActiveScheduler::Stop();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swtransactionservices/test/tintegrityservices/source/tintegrityservicesstep.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1487 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file 
+ @test
+ @internalTechnology
+*/
+ 
+#include "tintegrityservicesstep.h"
+#include <s32file.h>
+#include "journal.h"
+#include "journalfile.h"
+
+
+/////////////////////////////////////////////////////////////////////
+// CIntegrityServicesStep
+/////////////////////////////////////////////////////////////////////
+CIntegrityServicesStepBase::CIntegrityServicesStepBase(CStsTestServer &aStsTestServer):CStsBaseTestStep(aStsTestServer)
+	{
+	}
+void CIntegrityServicesStepBase::ImplTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CIntegrityServicesStepBase::ImplTestStepPreambleL()"));
+	__UHEAP_MARK;
+
+	// Install an active scheduler
+	CActiveScheduler* s = new (ELeave) CActiveScheduler;
+	s->Install(s);
+	
+	User::LeaveIfError(iIntegritySession.Connect());
+
+	ReadFailureSettingsL();	
+	}
+
+void CIntegrityServicesStepBase::ImplTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CIntegrityServicesStepBase::ImplTestStepPostambleL()"));
+	// Remove the installed active scheduler
+	CActiveScheduler* s = CActiveScheduler::Current();
+	s->Install(NULL);
+	delete s;
+
+	iIntegritySession.Close();
+
+__UHEAP_MARKEND;
+
+	
+	}
+
+void CIntegrityServicesStepBase::GetStringArrayFromConfigL(const TDesC& aSectName, const TDesC& aKeyName, RArray<TPtrC>& aArray)
+	{
+	INFO_PRINTF1(_L("CIntegrityServicesStepBase::GetStringArrayFromConfigL()"));
+	_LIT(KKeyFormat, "-%02d");
+	HBufC* buf = HBufC::NewLC(aKeyName.Length() + KKeyFormat().Length());
+	TPtr ptr(buf->Des());
+	INFO_PRINTF2(_L("Parsing attribute: %S"), &aKeyName);
+
+	TInt i = 0;
+	TBool cont = ETrue;
+	do
+		{
+		++i;
+		ptr = aKeyName;
+		ptr.AppendFormat(KKeyFormat(), i);
+		TPtrC val;
+
+		cont = GetStringFromConfig(aSectName, ptr, val);
+		if (cont)
+			{
+			User::LeaveIfError(aArray.Append(val));
+			}
+		} while (cont);
+
+	INFO_PRINTF2(_L("Element count: %d"), i-1);
+	CleanupStack::PopAndDestroy(buf);
+	}
+
+TBool CIntegrityServicesStepBase::CheckFilesL()
+	{
+	INFO_PRINTF1(_L("CIntegrityServicesStepBase::CheckFilesL()"));
+	TInt result = ETrue;
+	RArray<TPtrC> fileArray;
+	CleanupClosePushL(fileArray);
+	
+	GetStringArrayFromConfigL(ConfigSection(), KPresent, fileArray);
+	for (TInt file = 0; file < fileArray.Count();file++)
+		{
+		if(FileExistsL(fileArray[file]))
+			{
+			INFO_PRINTF2(_L("%S was found"), &fileArray[file]);
+			}
+		else
+			{
+			ERR_PRINTF2(_L("%S was not found"), &fileArray[file]);
+			result = EFalse;
+			}
+		}
+	fileArray.Reset();
+	
+	GetStringArrayFromConfigL(ConfigSection(), KAbsent, fileArray);
+	for (TInt file = 0; file < fileArray.Count();file++)
+		{
+		if(FileExistsL(fileArray[file]))
+			{
+			ERR_PRINTF2(_L("%S was found"), &fileArray[file]);
+			result = EFalse;
+			}
+		else
+			{
+			INFO_PRINTF2(_L("%S was not found"), &fileArray[file]);
+			}
+		}
+	fileArray.Reset();
+	CleanupStack::PopAndDestroy(&fileArray);
+	return result;
+	}
+
+void CIntegrityServicesStepBase::ReadFailureSettingsL()
+	{		
+	INFO_PRINTF1(_L("CIntegrityServicesStepBase::ReadFailureSettings()"));
+	TPtrC failType;
+	if(!GetStringFromConfig(ConfigSection(), KFailType, failType))
+		{
+		failType.Set(KNullDesC);
+		}
+		
+	TPtrC failPosition;
+	if(!GetStringFromConfig(ConfigSection(), KFailPosition, failPosition))
+		{
+		failPosition.Set(KNullDesC);
+		}
+		
+	TPtrC failFileName;
+	if(!GetStringFromConfig(ConfigSection(), KFailFileName, failFileName))
+		{
+		failFileName.Set(KNullDesC);
+		}
+	
+	iIntegritySession.SetSimulatedFailureL(failType, failPosition, failFileName);
+	}
+	
+void CIntegrityServicesStepBase::doInstallL()
+	{
+	INFO_PRINTF1(_L("CIntegrityServicesStepBase::doInstallL()"));
+	RArray<TPtrC> fileArray;
+	CleanupClosePushL(fileArray);
+	
+	GetStringArrayFromConfigL(ConfigSection(), KRemoveFile, fileArray);
+	for (TInt file = 0; file < fileArray.Count();file++)
+		{
+		INFO_PRINTF2(_L("RemovingFile: %S"), &fileArray[file]);
+		
+		iIntegritySession.RemoveL(fileArray[file]);
+		}
+	fileArray.Reset();
+	
+	
+	GetStringArrayFromConfigL(ConfigSection(), KAddFile, fileArray);
+	for (TInt file = 0; file < fileArray.Count();file++)
+		{
+		INFO_PRINTF2(_L("AddingFile: %S"), &fileArray[file]);
+		iIntegritySession.AddL(fileArray[file]);
+		iIntegritySession.CreateNewTestFileL(fileArray[file]);
+		}
+	fileArray.Reset();
+
+	GetStringArrayFromConfigL(ConfigSection(), KTempFile, fileArray);
+	for (TInt file = 0; file < fileArray.Count();file++)
+		{
+		INFO_PRINTF2(_L("TemporaryFile: %S"), &fileArray[file]);
+		iIntegritySession.TemporaryL(fileArray[file]);
+		iIntegritySession.CreateTempTestFileL(fileArray[file]);
+		}
+	fileArray.Reset();
+
+	RArray<TPtrC> operationArray;
+	CleanupClosePushL(operationArray);
+	
+	GetStringArrayFromConfigL(ConfigSection(), KArbitraryOpFile, fileArray);
+	GetStringArrayFromConfigL(ConfigSection(), KOperation, operationArray);
+	TInt fileCount = fileArray.Count();
+	
+	if (fileCount != operationArray.Count())
+		{
+		ERR_PRINTF3(_L("Number of files (%d) does not match number of operations (%d)"), fileCount, operationArray.Count());
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		for (TInt file = 0; file < fileCount;file++)
+			{
+			if (operationArray[file].CompareF(KAddFile) == 0)
+				{
+				INFO_PRINTF2(_L("AddingFile: %S"), &fileArray[file]);
+				iIntegritySession.AddL(fileArray[file]);
+				iIntegritySession.CreateNewTestFileL(fileArray[file]);
+				}
+			else if (operationArray[file].CompareF(KRemoveFile) == 0)
+				{
+				INFO_PRINTF2(_L("RemovingFile: %S"), &fileArray[file]);
+				iIntegritySession.RemoveL(fileArray[file]);
+				}
+			else if (operationArray[file].CompareF(KTempFile) == 0)
+				{
+				INFO_PRINTF2(_L("TemporaryFile: %S"), &fileArray[file]);
+				iIntegritySession.TemporaryL(fileArray[file]);
+				iIntegritySession.CreateTempTestFileL(fileArray[file]);
+				}
+			else
+				{
+				ERR_PRINTF3(_L("Operation %S not understood, skipping file %S"), &operationArray[file], &fileArray[file]);
+				}
+			}
+		}
+	CleanupStack::PopAndDestroy(2, &fileArray);
+	
+	iIntegritySession.CommitL();
+	}
+
+void CIntegrityServicesStepBase::doRecoverL()
+	{
+	INFO_PRINTF1(_L("CIntegrityServicesStepBase::doRecoverL()"));
+	iIntegritySession.RollBackL(EFalse);
+	}
+
+void CIntegrityServicesStepBase::doCleanupL()
+	{
+	
+	INFO_PRINTF1(_L("CIntegrityServicesStepBase::doCleanupL()"));
+	RArray<TPtrC> fileArray;
+	CleanupClosePushL(fileArray);
+	
+	GetStringArrayFromConfigL(ConfigSection(), KCleanupFile, fileArray);
+	for (TInt file = 0; file < fileArray.Count();file++)
+		{
+		TRAPD(err, DeleteFileL(fileArray[file]));
+		if(err != KErrNone && err != KErrPathNotFound && err != KErrNotFound)
+			{
+			User::Leave(err);
+			}
+		}
+	fileArray.Reset();
+	GetStringArrayFromConfigL(ConfigSection(), KCleanupDirectory, fileArray);
+	for (TInt file = 0; file < fileArray.Count();file++)
+		{
+		TRAPD(err, DeleteFileL(fileArray[file]));
+		if(err != KErrNone && err != KErrPathNotFound && err != KErrNotFound)
+			{
+			User::Leave(err);
+			}
+		}
+	fileArray.Reset();
+	CleanupStack::PopAndDestroy(&fileArray);
+	}
+
+/////////////////////////////////////////////////////////////////////
+// CInstallStep
+/////////////////////////////////////////////////////////////////////
+CInstallStep::CInstallStep(CStsTestServer &aStsTestServer):CIntegrityServicesStepBase(aStsTestServer)
+	{
+	SetTestStepName(KInstall);
+	}
+
+void CInstallStep::ImplTestStepL()
+	{
+	INFO_PRINTF1(_L("CInstallStep::ImplTestStepL()"));
+	TRAPD(err, doInstallL());
+	
+	if(err == KErrNone || err == KIntegrityServicesSimulatedBatteryFailure)
+		{
+		if(CheckFilesL())
+			{
+			SetTestStepResult(EPass);
+			}
+		else
+			{
+			SetTestStepResult(EFail);
+			}
+		}
+	else
+		{
+		User::Leave(err);
+		}
+	
+	}
+
+/////////////////////////////////////////////////////////////////////
+// CRecoverStep
+/////////////////////////////////////////////////////////////////////
+CRecoverStep::CRecoverStep(CStsTestServer &aStsTestServer):CIntegrityServicesStepBase(aStsTestServer)
+	{
+	SetTestStepName(KRecover);
+	}
+
+void CRecoverStep::ImplTestStepL()
+	{
+	INFO_PRINTF1(_L("CRecoverStep::ImplTestStepL()"));
+	// begin recovery
+	TRAPD(err, doRecoverL());
+	
+	if(err == KErrNone || err == KIntegrityServicesSimulatedBatteryFailure)
+		{
+		if(CheckFilesL())
+			{
+			SetTestStepResult(EPass);
+			}
+		else
+			{
+			SetTestStepResult(EFail);
+			}
+		}
+	else
+		{
+		User::Leave(err);
+		}
+
+	
+	}
+
+/////////////////////////////////////////////////////////////////////
+// CCleanupStep
+/////////////////////////////////////////////////////////////////////
+CCleanupStep::CCleanupStep(CStsTestServer &aStsTestServer):CIntegrityServicesStepBase(aStsTestServer)
+	{
+	SetTestStepName(KCleanup);
+	}
+
+void CCleanupStep::ImplTestStepL()
+	{
+	INFO_PRINTF1(_L("CCleanupStep::ImplTestStepL()"));
+	doCleanupL();
+	
+	SetTestStepResult(EPass);
+	
+	}
+
+/////////////////////////////////////////////////////////////////////
+// CRecoverStep
+/////////////////////////////////////////////////////////////////////
+CCheckStep::CCheckStep(CStsTestServer &aStsTestServer):CIntegrityServicesStepBase(aStsTestServer)
+	{
+	SetTestStepName(KCheck);
+	}
+
+void CCheckStep::ImplTestStepL()
+	{
+	INFO_PRINTF1(_L("CCheckStep::ImplTestStepL()"));
+	// Just check for files
+	if(CheckFilesL())
+		{
+		SetTestStepResult(EPass);
+		}
+	else
+		{
+		SetTestStepResult(EFail);
+		}
+		
+	
+	}
+
+
+//---------- new unit tests developed as part of the STS framework ----------
+using namespace Usif;
+
+//define event names for logging purposes (used in journal file unit tests and journal unit tests	
+_LIT(KENone, "ENone");
+_LIT(KERemovedFile,"ERemovedFile");
+_LIT(KEBackupFile,"EBackupFile");
+_LIT(KETempFile,"ETempFile");
+_LIT(KEAddedFile,"EAddedFile");
+_LIT(KECommitted,"ECommitted");
+_LIT(KEBackupFilesRemoved,"EBackupFilesRemoved");
+_LIT(KEAddedFilesRemoved,"EAddedFilesRemoved");
+_LIT(KERemovedFilesRestored,"ERemovedFilesRestored");
+_LIT(KETempFilesRemoved, "ETempFilesRemoved");
+	
+
+const TDesC* eventNames[] = {
+				&KENone,
+				&KERemovedFile,
+				&KEBackupFile,
+				&KETempFile,
+				&KEAddedFile,
+				&KECommitted,
+				&KEBackupFilesRemoved,
+				&KEAddedFilesRemoved,
+				&KERemovedFilesRestored,
+				&KETempFilesRemoved
+				};
+
+
+const TFileMode defaultJournalFileMode = TFileMode (TFileMode(EFileWrite) | TFileMode(EFileShareAny));
+
+CJournalFileUnitTest::CJournalFileUnitTest(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KJournalFileUnitTest);
+	}
+
+CJournalFileUnitTest::~CJournalFileUnitTest()
+	{
+	delete testJournalFile;
+	iFs.Close();
+	iLoader.Close();
+	}
+
+
+void CJournalFileUnitTest::ImplTestStepPreambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("JournalFileUnitTest Preamble"));
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iLoader.Connect());
+	testJournalFile = CTestFile::NewL(iFs);
+	SetTestStepResult(EPass);
+	
+	}
+
+void CJournalFileUnitTest::ImplTestStepL()
+/**
+ @return - void code
+ Override of base class pure virtual
+ */
+	{
+	INFO_PRINTF1(_L("JournalFileUnitTest in test step"));
+	SetTestStepResult(EPass);
+	
+	TPtrC journalFilePathInIni = GetTargetFilePathFromConfigL();
+	TParsePtrC journalFilePathParse(journalFilePathInIni);
+	TDriveUnit journaldrive(journalFilePathParse.Drive());
+	HBufC* targetFileName = HBufC::NewLC(KMaxFileName);
+	HBufC* backupFileName = HBufC::NewLC(KMaxFileName);
+	
+	CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+
+	//feed incorrect file to the journalfile (ie: file's on other drive)
+	TPtr targetFileNameBasePtr(targetFileName->Des());
+	targetFileNameBasePtr.Append(TDriveUnit(journaldrive+1).Name());
+	targetFileNameBasePtr.Append(journalFilePathParse.Path());
+
+	TPtr targetFileNamePtr(targetFileNameBasePtr);
+	targetFileNamePtr.Append(_L("dummyadd.txt"));
+
+	TPtr targetBackupFileNamePtr(backupFileName->Des());
+
+	TInt err(0);
+	
+	TInt seekPosition(0);
+	TInt seekToEndPosition(0);
+	TIntValue intValue = {0};
+	TIntValue extraByte = {0xFF};
+
+	TRAP(err, journalFile->AddL(targetFileNamePtr));
+	if(err!=KErrBadName)
+		{
+		ERR_PRINTF2(_L("<font color=red>CJournalFile::AddL() returned incorrect error code. KErrBadName is expected %d is returned!</font>"), err);
+		SetTestStepResult(EFail);
+		}
+	targetFileNamePtr.Set(targetFileNameBasePtr);
+	targetFileNamePtr.Append(_L("dummytemp.txt"));
+	TRAP(err, journalFile->TemporaryL(targetFileNamePtr));
+	if(err!=KErrBadName)
+		{
+		ERR_PRINTF2(_L("<font color=red>CJournalFile::RemoveL() returned incorrect error code. KErrBadName is expected %d is returned!</font>"), err);
+		SetTestStepResult(EFail);
+		}
+
+	targetFileNamePtr.Set(targetFileNameBasePtr);
+	targetFileNamePtr.Append(_L("dummyremove.txt"));
+	TRAP(err, journalFile->RemoveL(targetFileNamePtr, targetBackupFileNamePtr));
+	if(err!=KErrBadName)
+		{
+		ERR_PRINTF2(_L("<font color=red>CJournalFile::RemoveL() returned incorrect error code. KErrBadName is expected %d is returned!</font>"), err);
+		SetTestStepResult(EFail);
+		}
+
+	*targetFileName = KEmptyString;
+	targetFileNameBasePtr.Set(targetFileName->Des());
+	targetFileNameBasePtr.Append(journalFilePathParse.DriveAndPath());
+
+	CleanupStack::PopAndDestroy(journalFile);
+	DeleteFileL(journalFilePathInIni);	
+//-------------------------------------------------------------------------------------	
+//Steps: 
+//	1.) create a CJournalFile object
+//	2.) set last event by invoking CJournalFile::EventL() (this sets the iLastEvent as well as writes the event value to the journal file on disk)
+//	3.) destroy object 
+//	4.) corrupt information by overwriting the event value in the file to requested invalid value
+//	5.) recreate CjournalFile object -> this will trigger CJournalFile::ReadEntryL
+//  note: the purpose of this testcase to excersise the main switch-case in CJournalFile::ReadEntryL		
+//-------------------------------------------------------------------------------------
+	
+	TIntegrityServicesEvent eventsToSet[] = {ERemovedFile, 
+											 EBackupFile, 
+											 ETempFile,
+											 EAddedFile,
+											 ECommitted,
+											 EBackupFilesRemoved,
+											 EAddedFilesRemoved,
+											 //ETempFilesRemoved,
+											 ERemovedFilesRestored,
+											 };
+	TInt numOfInvalidEvents[] = {6, //number of invalid events for ERemovedFile
+								 1, //number of invalid events for EBackupFile
+								 6, //number of invalid events for ETempFile
+								 6, //number of invalid events for EAddedFile
+								 7, //number of invalid events for ECommitted
+								 9, //number of invalid events for EBackupFilesRemoved
+								 6, //number of invalid events for EAddedFilesRemoved
+								 //ETempFilesRemoved
+								 9 //number of invalid events for ERemovedFilesRestored
+	                             };
+	TIntegrityServicesEvent invalidEvents[][10] = {{EBackupFile, ECommitted, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for ERemovedFile
+			                                        {EBackupFile}, //invalid events for EBackupFile, this is not really invalid value for EBackupFile, actually EBackupFile itself is invalid on its own in the file
+													{EBackupFile, ECommitted, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for ETempFile
+													{EBackupFile, ECommitted, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for EAddedFile
+													{ENone, EBackupFile, ECommitted, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for ECommitted
+													{ENone, ERemovedFile, EBackupFile, ETempFile, EAddedFile, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for EBackupFilesRemoved
+													{ENone, EBackupFile, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for EAddedFilesRemoved
+													//{}, //invalid events for ETempFilesRemoved
+													{ENone, ERemovedFile, EBackupFile, ETempFile, EAddedFile, ECommitted, EBackupFilesRemoved, ETempFilesRemoved, ERemovedFilesRestored} //invalid events for ERemovedFilesRestored
+	                                               };
+	
+	ASSERT(sizeof(eventsToSet)/sizeof(TIntegrityServicesEvent) == sizeof(numOfInvalidEvents)/sizeof(TInt) == sizeof(invalidEvents)/(sizeof(TIntegrityServicesEvent)*10));
+	for (TInt i=0; i<sizeof(eventsToSet)/sizeof(TIntegrityServicesEvent); ++i)
+	{
+	for(TInt j=0; j<numOfInvalidEvents[i]; ++j)
+		{
+		journalFile=0;
+		journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+		journalFile->EventL(invalidEvents[i][j]); //set last event to any of the requested invalid events (also writes it to jounral file)
+		CleanupStack::PopAndDestroy(journalFile);
+		intValue.int32 = static_cast<TInt32>(eventsToSet[i]);
+		seekPosition=0;
+		OpenJournalFileL(journalFilePathInIni, defaultJournalFileMode);
+		SeekInJournalFileL(ESeekStart, seekPosition);
+		WriteIntToJournalFileL(intValue, Mode32Bit); //write the requested event to journal file (overwrites last event set by EventL())
+		seekToEndPosition=0;
+		SeekInJournalFileL(ESeekEnd, seekToEndPosition);
+		WriteIntToJournalFileL(extraByte, Mode8Bit);
+		CloseJournalFile();
+		//force a Sync and catch the error that should be KErrCorrupt
+		journalFile=0;
+		TRAPD(err, 
+				journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+				CleanupStack::PopAndDestroy(journalFile);
+				);
+		if(err!=KErrCorrupt)
+			{
+			ERR_PRINTF4(_L("<font color=red>CJournalFile::SynchL() returned incorrect error code. KErrCorrupt is expected and %d is returned! Conditions: last event set via EventL(): %S  Event written into journal file: %S</font>"), err, eventNames[invalidEvents[i][j]], eventNames[eventsToSet[i]]);
+			SetTestStepResult(EFail);
+			}
+		DeleteFileL(journalFilePathInIni);
+		}
+	}	
+//-------------------------------------------------------------------------------------	
+//Steps: 
+//	1.) create a journal file using CJournalFile::NewLC
+//  2.) add an item via AddL() or TemporaryL()	
+//	2.) corrupt disk information in the filename written into the file
+//	3.) try to recreate journal object using CJournalFile::NewLC
+//	4.) expect KErrCorrupt
+//-------------------------------------------------------------------------------------
+
+	targetFileNamePtr.Set(targetFileNameBasePtr);
+	targetFileNamePtr.Append(_L("dummyadd_or_temp.txt"));
+	for(TInt i=0; i<2; i++)
+		{
+		//create a journal file and add an item via AddL() or TemporaryL()
+		journalFile=0;
+		journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+		if(i==0)
+			{
+			journalFile->AddL(targetFileNamePtr);
+			}
+		else if(i==1)
+			{
+			journalFile->TemporaryL(targetFileNamePtr);
+			}
+		CleanupStack::PopAndDestroy(journalFile);
+		//open journal file and corrupt it by overwriting the drive letter in the file's path
+		seekPosition=sizeof(TInt32)+1;
+		OpenJournalFileL(journalFilePathInIni, defaultJournalFileMode);
+		SeekInJournalFileL(ESeekStart, seekPosition);
+		intValue = ReadIntFromJournalFileL(Mode8Bit);
+		intValue.int8++; //corrupt drive letter (ie: 'c' ==> 'd')
+		SeekInJournalFileL(ESeekStart, seekPosition);
+		WriteIntToJournalFileL(intValue, Mode8Bit);
+		CloseJournalFile();
+		//check that CJournalFile recognizes corruption
+		journalFile=0;
+		TRAP(err, 
+				  journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+		          CleanupStack::PopAndDestroy(journalFile);
+			 );
+		if(err!=KErrCorrupt)
+			{
+			ERR_PRINTF2(_L("<font color=red>CJournalFile::NewL() returned incorrect error code. KErrCorrupt is expected and %d is returned!</font>"), err);
+			SetTestStepResult(EFail);
+			}
+		DeleteFileL(journalFilePathInIni);
+		}
+//-------------------------------------------------------------------------------------	
+//Steps: 
+//	1.) create a journal file using CJournalFile::NewLC
+//  2.) add an item via RemoveyL()	
+//	2.) corrupt disk information in various ways in the file
+//	3.) try to recreate journal object using CJournalFile::NewL
+//	4.) expect KErrCorrupt
+//-------------------------------------------------------------------------------------
+
+	journalFile=0;
+	journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+	targetFileNamePtr.Set(targetFileNameBasePtr);
+	targetFileNamePtr.Append(_L("dummyremove.txt"));
+	journalFile->RemoveL(targetFileNamePtr, targetBackupFileNamePtr);
+	CleanupStack::PopAndDestroy(journalFile);
+
+	OpenJournalFileL(journalFilePathInIni, defaultJournalFileMode);
+	seekPosition=sizeof(TInt32)+1+targetFileNamePtr.Length();
+	SeekInJournalFileL(ESeekStart, seekPosition);
+	intValue.int32 = static_cast<TInt32>(EAddedFile); //corrupt operation: originally EBackupFile is recorded here
+	WriteIntToJournalFileL(intValue, Mode32Bit);
+	
+	//check that CJournalFile recognizes corruption
+	journalFile=0;
+	TRAP(err, 
+			journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+    		CleanupStack::PopAndDestroy(journalFile);
+		);
+	if(err!=KErrCorrupt)
+		{
+		ERR_PRINTF2(_L("<font color=red>CJournalFile::NewL() returned incorrect error code. KErrCorrupt is expected and %d is returned!</font>"), err);
+		SetTestStepResult(EFail);
+		}
+
+	SeekInJournalFileL(ESeekStart, seekPosition);
+	intValue.int32 = static_cast<TInt32>(EBackupFile); //restore original record
+	WriteIntToJournalFileL(intValue, Mode32Bit);
+
+	//check that journal file is not corrupted
+	journalFile=0;
+	TRAP(err, 
+			journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+    		CleanupStack::PopAndDestroy(journalFile);
+		);
+	if(err!=KErrNone)
+		{
+		ERR_PRINTF2(_L("<font color=red>CJournalFile::NewL() returned incorrect error code. KErrNone is expected and %d is returned!</font>"), err);
+		SetTestStepResult(EFail);
+		}
+
+	seekPosition=sizeof(TInt32)+1;
+	SeekInJournalFileL(ESeekStart, seekPosition);
+	intValue = ReadIntFromJournalFileL(Mode8Bit); //read first file's drive letter
+	intValue.int8++; //corrupt drive letter (ie: 'c' ==> 'd')
+	SeekInJournalFileL(ESeekStart, seekPosition);
+	WriteIntToJournalFileL(intValue, Mode8Bit); //write corrupt drive letter to file
+
+	//check that CJournalFile recognizes corruption
+	journalFile=0;
+	TRAP(err, 
+			journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+    		CleanupStack::PopAndDestroy(journalFile);
+		);
+	if(err!=KErrCorrupt)
+		{
+		ERR_PRINTF2(_L("<font color=red>CJournalFile::NewL() returned incorrect error code. KErrCorrupt is expected and %d is returned!</font>"), err);
+		SetTestStepResult(EFail);
+		}
+
+	intValue.int8--; //restore original drive letter
+	SeekInJournalFileL(ESeekStart, seekPosition);
+	WriteIntToJournalFileL(intValue, Mode8Bit); //write original drive letter to file
+
+		
+	//check that journal file is not corrupted
+	journalFile=0;
+	TRAP(err, 
+			journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+    		CleanupStack::PopAndDestroy(journalFile);
+		);
+	if(err!=KErrNone)
+		{
+		ERR_PRINTF2(_L("<font color=red>CJournalFile::NewL() returned incorrect error code. KErrNone is expected and %d is returned!</font>"), err);
+		SetTestStepResult(EFail);
+		}
+
+	seekPosition=sizeof(TInt32)+1+targetFileNamePtr.Length()+sizeof(TInt32)+1;
+	SeekInJournalFileL(ESeekStart, seekPosition);
+	intValue = ReadIntFromJournalFileL(Mode8Bit); //read second file's drive letter (backup file name)
+	intValue.int8++; //corrupt drive letter (ie: 'c' ==> 'd')
+	SeekInJournalFileL(ESeekStart, seekPosition);
+	WriteIntToJournalFileL(intValue, Mode8Bit); //write corrupt drive letter to file
+
+	
+	//check that CJournalFile recognizes corruption
+	journalFile=0;
+	TRAP(err, 
+			journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+    		CleanupStack::PopAndDestroy(journalFile);
+		);
+	if(err!=KErrCorrupt)
+		{
+		ERR_PRINTF2(_L("<font color=red>CJournalFile::NewL() returned incorrect error code. KErrCorrupt is expected and %d is returned!</font>"), err);
+		SetTestStepResult(EFail);
+		}
+	
+	intValue.int8--; //restore original drive letter
+	SeekInJournalFileL(ESeekStart, seekPosition);
+	WriteIntToJournalFileL(intValue, Mode8Bit); //write original drive letter to file
+
+	//check that journal file is not corrupted
+	journalFile=0;
+	TRAP(err, 
+			journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+    		CleanupStack::PopAndDestroy(journalFile);
+		);
+	if(err!=KErrNone)
+		{
+		ERR_PRINTF2(_L("<font color=red>CJournalFile::NewL() returned incorrect error code. KErrNone is expected and %d is returned!</font>"), err);
+		SetTestStepResult(EFail);
+		}
+	CloseJournalFile();
+	INFO_PRINTF1(_L("Deleting journal file - Line 769"));
+	DeleteFileL(journalFilePathInIni);
+
+	
+	CreateJournalFileL(journalFilePathInIni, TFileMode(TFileMode(EFileWrite) | TFileMode(EFileShareExclusive)));
+	journalFile=0;
+	TRAP(err, 
+			journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive);
+    		CleanupStack::PopAndDestroy(journalFile);
+		);
+	if(err!=KErrInUse )
+		{
+		ERR_PRINTF2(_L("<font color=red>CJournalFile::NewL() returned incorrect error code. KErrInUse is expected and %d is returned!</font>"), err);
+		SetTestStepResult(EFail);
+		}
+	CloseJournalFile();
+	INFO_PRINTF1(_L("Deleting journal file - Line 783"));
+	DeleteFileL(journalFilePathInIni);
+
+	CleanupStack::PopAndDestroy(2, targetFileName);
+	}
+
+void CJournalFileUnitTest::ImplTestStepPostambleL()
+/**
+ @return - void code
+ Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("JournalFileUnitTest Postamble"));
+	delete testJournalFile;
+	testJournalFile=0;
+	iFs.Close();
+	iLoader.Close();
+	}
+
+void CJournalFileUnitTest::OpenJournalFileL(const TDesC& aFileName, TFileMode aMode)
+	{
+	testJournalFile->OpenJournalFileL(aFileName, aMode);
+	}
+
+void CJournalFileUnitTest::CreateJournalFileL(const TDesC& aFileName, TFileMode aMode)
+	{
+	testJournalFile->CreateJournalFileL(aFileName, aMode);
+	}
+
+void CJournalFileUnitTest::SeekInJournalFileL(TSeek aSeekMode, TInt &aPos)
+	{
+	testJournalFile->SeekInJournalFileL(aSeekMode, aPos);
+	}
+
+TIntValue CJournalFileUnitTest::ReadIntFromJournalFileL(TIntMode mode)
+	{
+	return testJournalFile->ReadIntFromJournalFileL(mode);
+	}
+
+void CJournalFileUnitTest::CloseJournalFile()
+	{
+	testJournalFile->CloseJournalFile();
+	}
+
+void CJournalFileUnitTest::WriteIntToJournalFileL(TIntValue value, TIntMode mode)
+	{
+	testJournalFile->WriteIntToJournalFileL(value, mode);
+	}
+
+
+
+/*static*/ CTestFile* CTestFile::NewL(RFs& aFs)
+	{
+	CTestFile* self = new(ELeave) CTestFile(aFs);
+	return self;
+	}
+
+CTestFile::CTestFile(RFs& aFs): iFs(aFs)
+	{
+	
+	}
+
+CTestFile::~CTestFile()
+	{
+	CloseJournalFile();
+	}
+
+void CTestFile::OpenJournalFileL(const TDesC& aFileName, TFileMode aMode)
+	{
+	TInt err = journalFile.Open(iFs, aFileName, aMode);
+	User::LeaveIfError(err);
+	}
+
+void CTestFile::CreateJournalFileL(const TDesC& aFileName, TFileMode aMode)
+	{
+	TInt err = iFs.MkDirAll(aFileName);
+	if(err != KErrNone && err != KErrAlreadyExists)
+		{
+		User::Leave(err);
+		}
+	err = journalFile.Create(iFs, aFileName, aMode);
+	User::LeaveIfError(err);
+	}
+
+void CTestFile::CloseJournalFile()
+	{
+	journalFile.Close();
+	}
+
+void CTestFile::WriteIntToJournalFileL(TIntValue value, TIntMode mode)
+	{
+	HBufC8* fileIOBuffer = HBufC8::NewLC(10);
+	TPtr8  fileIOBufferPtr(fileIOBuffer->Des());
+	TPckgC<TInt32> pckg(value.int32);
+	
+	switch(mode)
+		{
+		case Mode8Bit:
+		case Mode16Bit:
+		case Mode32Bit:
+			fileIOBufferPtr.Append(pckg);
+			User::LeaveIfError(journalFile.Write(fileIOBufferPtr, static_cast<TInt>(mode)));
+			break;
+		default:
+			User::Leave(KErrArgument);
+			break;
+		}
+	
+	CleanupStack::PopAndDestroy(fileIOBuffer);
+	}
+
+TIntValue CTestFile::ReadIntFromJournalFileL(TIntMode mode)
+	{
+	HBufC8* fileIOBuffer = HBufC8::NewLC(10);
+	TPtr8  fileIOBufferPtr(fileIOBuffer->Des());
+	User::LeaveIfError(journalFile.Read(fileIOBufferPtr, static_cast<TInt>(mode)));
+	TIntValue ret = {0};
+	
+	switch(mode)
+		{
+		case Mode8Bit: 
+		case Mode16Bit:
+		case Mode32Bit:
+			{
+			for(TInt i=0; i<static_cast<TInt>(mode); ++i)
+				{
+				ret.int32 |=  TInt32((*fileIOBuffer)[i]) << (8*i);
+				}
+			break;
+			}
+		default:
+			User::Leave(KErrArgument);
+			break;
+		}
+	CleanupStack::PopAndDestroy(fileIOBuffer);
+	return ret;
+	}
+	
+void CTestFile::SeekInJournalFileL(TSeek aSeekMode, TInt &aPos)
+	{
+	User::LeaveIfError(journalFile.Seek(aSeekMode, aPos));
+	}
+
+
+
+//------------------------------------------------------------------------------------------------------------
+
+CJournalFileUnitTestScenarioBase::CJournalFileUnitTestScenarioBase(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer), iCleanupNeeded(ETrue)
+	{
+	}
+
+CJournalFileUnitTestScenarioBase::~CJournalFileUnitTestScenarioBase()
+	{
+	iFs.Close();
+	iLoader.Close();
+	delete iTargetFileName;
+	delete iBackupFileName;
+	}
+
+
+void CJournalFileUnitTestScenarioBase::ImplTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CJournalFileUnitTestScenarioBase Preamble"));
+	iJournalFileName.Set(GetTargetFilePathFromConfigL());
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iLoader.Connect());
+	iTargetFileName = HBufC::NewL(KMaxFileName);
+	iBackupFileName = HBufC::NewL(KMaxFileName);
+	TParsePtrC journalFilePathParse(iJournalFileName);
+	TPtr ptr(iTargetFileName->Des());
+	ptr.Append(journalFilePathParse.DriveAndPath());
+	ptr.Append(_L("journalfile_oom_test_dummyfile.txt"));
+	iJournaldrive = journalFilePathParse.Drive();
+	SetTestStepResult(EPass);
+	
+	}
+
+void CJournalFileUnitTestScenarioBase::ImplTestStepL()
+	{
+	CleanupStack::PushL(TCleanupItem(&CJournalFileUnitTestScenarioBase::InTestCleanup, this));
+	ImplTestCaseScenarioL();
+	CleanupStack::PopAndDestroy(this);
+	}
+
+void CJournalFileUnitTestScenarioBase::ImplTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CJournalFileUnitTestScenarioBase Postamble"));
+	
+	delete iTargetFileName; 
+	iTargetFileName=0;
+	delete iBackupFileName; 
+	iBackupFileName=0;
+	iFs.Close();
+	iLoader.Close();
+	TRAP_IGNORE(DeleteFileL(iJournalFileName));
+	}
+
+/*static*/void CJournalFileUnitTestScenarioBase::InTestCleanup(TAny* aObject)
+	{
+	CJournalFileUnitTestScenarioBase* object=static_cast<CJournalFileUnitTestScenarioBase*>(aObject);
+	object->INFO_PRINTF1(_L("CJournalFileUnitTestScenarioBase::InTestCleanup()"));
+	if(object->iCleanupNeeded)
+		{
+		TRAP_IGNORE(object->DeleteFileL(object->iJournalFileName));
+		}
+	}
+
+//------------------------------------------------------------------------------------------------------------
+CJournalFileUnitTestAdd::CJournalFileUnitTestAdd(CStsTestServer &aStsTestServer): CJournalFileUnitTestScenarioBase(aStsTestServer)
+	{
+	SetTestStepName(KJournalFileUnitTestAdd);
+	}
+void CJournalFileUnitTestAdd::ImplTestCaseScenarioL()
+	{
+	INFO_PRINTF1(_L("CJournalFileUnitTestAdd in test step"));
+	CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, iJournalFileName, iJournaldrive);
+	journalFile->AddL(*iTargetFileName);
+	CleanupStack::PopAndDestroy(journalFile);
+	}
+//------------------------------------------------------------------------------------------------------------
+CJournalFileUnitTestTemp::CJournalFileUnitTestTemp(CStsTestServer &aStsTestServer): CJournalFileUnitTestScenarioBase(aStsTestServer)
+	{
+	SetTestStepName(KJournalFileUnitTestTemp);
+	}
+
+void CJournalFileUnitTestTemp::ImplTestCaseScenarioL()
+	{
+	INFO_PRINTF1(_L("CJournalFileUnitTestTemp in test step"));
+	CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, iJournalFileName, iJournaldrive);
+	journalFile->TemporaryL(*iTargetFileName);
+	CleanupStack::PopAndDestroy(journalFile);
+	}
+
+//------------------------------------------------------------------------------------------------------------
+CJournalFileUnitTestRemove::CJournalFileUnitTestRemove(CStsTestServer &aStsTestServer): CJournalFileUnitTestScenarioBase(aStsTestServer)
+	{
+	SetTestStepName(KJournalFileUnitTestRemove);
+	}
+
+void CJournalFileUnitTestRemove::ImplTestCaseScenarioL()
+	{
+	INFO_PRINTF1(_L("CJournalFileUnitTestRemove in test step"));
+	TPtr backupFileNamePtr(iBackupFileName->Des());
+	CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, iJournalFileName, iJournaldrive);
+	journalFile->RemoveL(*iTargetFileName, backupFileNamePtr);
+	CleanupStack::PopAndDestroy(journalFile);
+	}
+//------------------------------------------------------------------------------------------------------------
+CJournalFileUnitTestRead::CJournalFileUnitTestRead(CStsTestServer &aStsTestServer): CJournalFileUnitTestScenarioBase(aStsTestServer)
+	{
+	iCleanupNeeded=EFalse;
+	SetTestStepName(KJournalFileUnitTestRead);
+	}
+
+void CJournalFileUnitTestRead::ImplTestCaseScenarioL()
+	{
+	INFO_PRINTF1(_L("CJournalFileUnitTestRead in test step"));
+	CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, iJournalFileName, iJournaldrive);
+	CleanupStack::PopAndDestroy(journalFile);
+	}
+//------------------------------------------------------------------------------------------------------------
+CJournalFileUnitTestEvent::CJournalFileUnitTestEvent(CStsTestServer &aStsTestServer): CJournalFileUnitTestScenarioBase(aStsTestServer)
+	{
+	}
+
+void CJournalFileUnitTestEvent::ImplTestCaseScenarioL()
+	{
+	INFO_PRINTF1(_L("CJournalFileUnitTestEvent in test step"));
+	CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, iJournalFileName, iJournaldrive);
+	journalFile->EventL(ECommitted);
+	CleanupStack::PopAndDestroy(journalFile);
+	}
+//------------------------------------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------------------------------------
+CJournalUnitTest::CJournalUnitTest(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KJournalUnitTest);
+	}
+
+CJournalUnitTest::~CJournalUnitTest()
+	{
+	delete iTestFileInterface;
+	iFs.Close();
+	iLoader.Close();
+	}
+
+void CJournalUnitTest::ImplTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("JournalFileUnitTest Preamble"));
+	iJournalPathInIni.Set(GetTargetFilePathFromConfigL());
+	iTrID = GetTransactionIdFromConfigL();
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iLoader.Connect());
+	iTestFileInterface = CTestFile::NewL(iFs);
+	SetTestStepResult(EPass);
+	
+	}
+
+void CJournalUnitTest::ImplTestStepL()
+	{
+	INFO_PRINTF1(_L("JournalUnitTest in test step"));
+	SetTestStepResult(EPass);
+	TestCase1L();
+	}
+
+void CJournalUnitTest::ImplTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("JournalFileUnitTest Postamble"));
+	delete iTestFileInterface;
+	iTestFileInterface=0;
+	iFs.Close();
+	iLoader.Close();
+	}
+
+void CJournalUnitTest::TestCase1L()
+	{
+	INFO_PRINTF1(_L("JournalFileUnitTest Test Case1"));
+
+//-------------------------------------------------------------------------------------	
+//Steps: 
+//	1.) create a corrupt journal file on C drive (by writing invalid event into the file /eg: with a value of EAddedFile+1000/) 
+//	2.) Create a journal
+//	3.) Add a file to the journal on C drive by invoking CJounral::AddL() 
+//	4.) this will create a new journal file object representing journal activity on drive C, however due to the corrupt file being already on the C drive CJournalFile::NewLC will throw KErrCorrupt
+//  5.) expect KErrCorrupt	
+//  note: the purpose of this testcase to excersise the conditional branches in CJournal::PrepareToWriteL		
+//-------------------------------------------------------------------------------------
+	
+	TInt err=0;
+	TDriveUnit driveUnitC(KDriveLetterC);
+	TDriveUnit driveUnitE(KDriveLetterE);
+	
+	
+	HBufC* journalFileName = HBufC::NewLC(KMaxFileName);
+	HBufC* targetFileName = HBufC::NewLC(KMaxFileName);
+	
+	TPtr journalFileNamePtr(journalFileName->Des());
+	journalFileNamePtr.Append(driveUnitC.Name());
+	CJournal::CreateJournalFileNameL(iTrID, iJournalPathInIni, journalFileNamePtr); 
+	
+	//create file path base (eg: drive:\path\)
+	TPtr targetFileNameBasePtr(targetFileName->Des());
+	targetFileNameBasePtr.Append(driveUnitC.Name());
+	targetFileNameBasePtr.Append(iJournalPathInIni);
+	
+	//open up the file via the test file interface (for writing corrupt data)
+	iTestFileInterface->CreateJournalFileL(journalFileNamePtr, defaultJournalFileMode);
+	TInt seekPosition=0;
+	TIntValue intValue = {0};
+	intValue.int32=static_cast<TInt32>(EAddedFile)+1000; //corrupt data in file (eg: write operation value to an invalid value)
+	//corrupt data in journal file
+	iTestFileInterface->SeekInJournalFileL(ESeekStart, seekPosition);
+	iTestFileInterface->WriteIntToJournalFileL(intValue, Mode32Bit);
+	iTestFileInterface->CloseJournalFile();
+
+	TPtr targetFileNamePtr(targetFileNameBasePtr);
+	targetFileNamePtr.Append(_L("dummyadd.txt"));
+	
+	//create a journal and add a file on C drive: that will force CJournalFile to read in and process the  
+	//previously created corrupt file. As the file contains corrupt information CJournalFile construction is expected to fail with KErrCorrupt 
+	CJournal* journal = CJournal::NewLC(iFs, iLoader, iTrID, iJournalPathInIni);
+	TRAP(err, journal->AddL(targetFileNamePtr));
+	if(err!=KErrCorrupt)
+		{
+		ERR_PRINTF2(_L("<font color=red>CJournal::AddL() returned incorrect error code. KErrCorrupt is expected and %d is returned!</font>"), err);
+		SetTestStepResult(EFail);
+		}
+	CleanupStack::PopAndDestroy(journal); journal=0;
+
+	//clean up: delete created journal file and drive file (.drv)
+	DeleteFileL(*journalFileName);
+	//reuse targetFileName buffer to create .drv filename to delete that file
+	*targetFileName=KEmptyString;
+	targetFileNamePtr.Set(targetFileName->Des());
+	CJournal::CreateDrvFileNameL(iTrID, iJournalPathInIni, targetFileNamePtr);
+	TRAP_IGNORE(DeleteFileL(targetFileNamePtr)); //clean up .drv file in case it's been created but avoid causing leave in case it hasn't 
+	
+	CleanupStack::PopAndDestroy(targetFileName);
+	CleanupStack::PopAndDestroy(journalFileName);
+	}
+
+//------------------------------------------------------------------------------------------------------------
+
+
+CJournalUnitTestScenarioBase::CJournalUnitTestScenarioBase(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer) 
+	{
+	iDriveUnitC = _L("c"); 
+	iDriveUnitE = _L("e");
+	}
+
+CJournalUnitTestScenarioBase::~CJournalUnitTestScenarioBase()
+	{
+	iFs.Close();
+	iLoader.Close();
+	delete iTargetFileName;
+	delete iJournalFileName;
+	delete iDrvFileName;
+	delete iBackupFileName;
+	}
+
+void CJournalUnitTestScenarioBase::ImplTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CJournalUnitTestScenarioBase::ImplTestStepPreambleL()"));
+	iJournalPathInIni.Set(GetTargetFilePathFromConfigL());
+	iTrID = GetTransactionIdFromConfigL();
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iLoader.Connect());
+	iTargetFileName = HBufC::NewL(KMaxFileName);
+	iJournalFileName = HBufC::NewL(KMaxFileName);
+	iDrvFileName = HBufC::NewL(KMaxFileName);
+	iBackupFileName = HBufC::NewL(KMaxFileName);
+
+	TPtr ptr(iJournalFileName->Des());
+	ptr.Append(iDriveUnitC.Name());
+	ptr.Append(iJournalPathInIni);
+	ptr.AppendNumUC(iTrID, EHex);
+	ptr.Append(KKournalFileExt);
+	
+	ptr.Set(iTargetFileName->Des());
+	ptr.Append(iDriveUnitC.Name());
+	ptr.Append(iJournalPathInIni);
+
+	ptr.Set(iDrvFileName->Des());
+	CJournal::CreateDrvFileNameL(iTrID, iJournalPathInIni, ptr);
+
+	SetTestStepResult(EPass);
+	}
+
+void CJournalUnitTestScenarioBase::ImplTestStepL()
+	{
+	INFO_PRINTF1(_L("CJournalUnitTestScenarioBase::ImplTestStepL()"));
+
+	TPtr basePathPtr(iTargetFileName->Des());
+	TPtr fileNamePtr(basePathPtr);
+	TCleanupItem inTestCleanupItem(&CJournalUnitTestScenarioBase::InTestCleanUp, this);
+	CleanupStack::PushL(inTestCleanupItem);
+
+	CJournal* journal = CJournal::NewLC(iFs, iLoader, iTrID, iJournalPathInIni);
+	
+	*iBackupFileName=KEmptyString;
+	TPtr backupFileNamePtr(iBackupFileName->Des());
+	fileNamePtr.Set(basePathPtr);
+	fileNamePtr.Append(_L("journal_oom_test_dummyremovefile.txt"));
+	basePathPtr.Replace(0, 2, iDriveUnitC.Name());
+	journal->RemoveL(fileNamePtr, backupFileNamePtr);
+	*iBackupFileName=KEmptyString;
+	backupFileNamePtr.Set(iBackupFileName->Des());
+	basePathPtr.Replace(0, 2, iDriveUnitE.Name());
+	journal->RemoveL(fileNamePtr, backupFileNamePtr);
+	
+	  
+	fileNamePtr.Set(basePathPtr);
+	fileNamePtr.Append(_L("journal_oom_test_dummytempfile.txt"));
+	basePathPtr.Replace(0, 2, iDriveUnitC.Name());
+	journal->TemporaryL(fileNamePtr);
+	basePathPtr.Replace(0, 2, iDriveUnitE.Name());
+	journal->TemporaryL(fileNamePtr);
+	
+	
+	fileNamePtr.Set(basePathPtr);
+	fileNamePtr.Append(_L("journal_oom_test_dummyaddfile.txt"));
+	basePathPtr.Replace(0, 2, iDriveUnitC.Name());
+	journal->AddL(fileNamePtr);
+	basePathPtr.Replace(0, 2, iDriveUnitE.Name());
+	journal->AddL(fileNamePtr);
+	  
+	ScenarioEndL(journal);
+	CleanupStack::PopAndDestroy(journal);
+	CleanupStack::PopAndDestroy(this);
+	}
+
+void CJournalUnitTestScenarioBase::ImplTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CJournalUnitTestScenarioBase::ImplTestStepPostambleL()"));
+	delete iTargetFileName;
+	iTargetFileName=0;
+	delete iJournalFileName;
+	iJournalFileName=0;
+	delete iDrvFileName;
+	iDrvFileName=0;
+	delete iBackupFileName;
+	iBackupFileName=0;
+	iFs.Close();
+	iLoader.Close();
+	}
+
+/*static*/ void CJournalUnitTestScenarioBase::InTestCleanUp(TAny* aObject)
+	{
+	CJournalUnitTestScenarioBase* object=static_cast<CJournalUnitTestScenarioBase*>(aObject);
+	object->INFO_PRINTF1(_L("CJournalUnitTestScenarioBase::InTestCleanUp()"));
+
+	TPtr ptr(object->iJournalFileName->Des());
+	ptr.Replace(0, 2, object->iDriveUnitC.Name());
+	TRAP_IGNORE(object->DeleteFileL(ptr)); //delete journal file on C drive
+	ptr.Replace(0, 2, object->iDriveUnitE.Name());
+	TRAP_IGNORE(object->DeleteFileL(ptr)); //delete journal file on E drive
+	TRAP_IGNORE(object->DeleteFileL(*(object->iDrvFileName))); //delete drv file on system drive
+	}
+
+//------------------------------------------------------------------------------------------------------------
+
+CJournalUnitTestInstall::CJournalUnitTestInstall(CStsTestServer &aStsTestServer): CJournalUnitTestScenarioBase(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KJournalUnitTestInstall);
+	}
+
+void CJournalUnitTestInstall::ScenarioEndL(CJournal* aJournal)
+	{
+	aJournal->CommitL();
+	}
+
+//------------------------------------------------------------------------------------------------------------
+
+CJournalUnitTestRollback::CJournalUnitTestRollback(CStsTestServer &aStsTestServer): CJournalUnitTestScenarioBase(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KJournalUnitTestRollback);
+	}
+
+void CJournalUnitTestRollback::ScenarioEndL(CJournal* aJournal)
+	{
+	aJournal->RollBackL();
+	}
+
+//------------------------------------------------------------------------------------------------------------
+
+
+CIntegrityServicesTestScenarioBase::CIntegrityServicesTestScenarioBase(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer) 
+	{
+	iDriveUnitC = _L("c"); 
+	iDriveUnitE = _L("e");
+	}
+
+CIntegrityServicesTestScenarioBase::~CIntegrityServicesTestScenarioBase()
+	{
+	iFs.Close();
+	iLoader.Close();
+	delete iTargetFileName;
+	delete iJournalFileName;
+	delete iDrvFileName;
+	delete iBackupFileName;
+	delete iTransactionBackupDirectoryPath;
+	}
+
+void CIntegrityServicesTestScenarioBase::ImplTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("IntegrityServicesTestOOM Preamble"));
+	iTargetPathInIni.Set(GetTargetFilePathFromConfigL());
+	iTrID = GetTransactionIdFromConfigL();
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iLoader.Connect());
+	iTargetFileName = HBufC::NewL(KMaxFileName);
+	iJournalFileName = HBufC::NewL(KMaxFileName);
+	iDrvFileName = HBufC::NewL(KMaxFileName);
+	iBackupFileName = HBufC::NewL(KMaxFileName);
+	iTransactionBackupDirectoryPath = HBufC::NewL(KMaxFileName);
+
+	TPtr ptr(iJournalFileName->Des());
+	ptr.Append(iDriveUnitC.Name());
+	CJournal::CreateJournalFileNameL(iTrID, KTransactionPath, ptr);
+
+	ptr.Set(iDrvFileName->Des());
+	CJournal::CreateDrvFileNameL(iTrID, KTransactionPath, ptr);
+	
+	TParsePtrC parse(*iDrvFileName);
+	ptr.Set(iTransactionBackupDirectoryPath->Des()); //this is the directory that holds the backup files for the transaction
+	ptr.Append(parse.DriveAndPath());
+	ptr.Append(parse.Name());
+	
+	ptr.Set(iTargetFileName->Des());
+	ptr.Append(iDriveUnitC.Name());
+	ptr.Append(iTargetPathInIni);
+	NormalizeDirectoryName(ptr); //removes trailing slash
+
+	SetTestStepResult(EPass);
+	}
+
+void CIntegrityServicesTestScenarioBase::ImplTestStepL()
+	{
+	TPtr basePathPtr(iTargetFileName->Des());
+	TPtr fileNamePtr(basePathPtr);
+	RFile newFile;
+	TUint fileMode(EFileShareExclusive | EFileWrite);
+	
+	TCleanupItem inTestCleanupItem(&CIntegrityServicesTestScenarioBase::InTestCleanUp, this);
+	CleanupStack::PushL(inTestCleanupItem);
+
+	CIntegrityServices* integrityServices = CIntegrityServices::NewLC(iTrID);
+	
+	fileNamePtr.Set(basePathPtr);
+	fileNamePtr.Append(_L("\\integrityservices_oom_test_dummyremovefile.txt"));
+	basePathPtr.Replace(0, 2, iDriveUnitC.Name());
+	integrityServices->RemoveL(fileNamePtr);
+	basePathPtr.Replace(0, 2, iDriveUnitE.Name());
+	integrityServices->RemoveL(fileNamePtr);
+	  
+	fileNamePtr.Set(basePathPtr);
+	fileNamePtr.Append(_L("\\integrityservices_oom_test_dummyregistertempfile.txt"));
+	basePathPtr.Replace(0, 2, iDriveUnitC.Name());
+	integrityServices->RegisterTemporaryL(fileNamePtr);
+	basePathPtr.Replace(0, 2, iDriveUnitE.Name());
+	integrityServices->RegisterTemporaryL(fileNamePtr);
+	
+	fileNamePtr.Set(basePathPtr);
+	fileNamePtr.Append(_L("\\integrityservices_oom_test_dummycreatetempfile.txt"));
+	basePathPtr.Replace(0, 2, iDriveUnitC.Name());
+	CleanupClosePushL(newFile);
+	integrityServices->CreateTemporaryL(fileNamePtr, newFile, fileMode);
+	CleanupStack::PopAndDestroy(&newFile);
+	basePathPtr.Replace(0, 2, iDriveUnitE.Name());
+	CleanupClosePushL(newFile);
+	integrityServices->CreateTemporaryL(fileNamePtr, newFile, fileMode);
+	CleanupStack::PopAndDestroy(&newFile);
+	
+	fileNamePtr.Set(basePathPtr);
+	fileNamePtr.Append(_L("\\integrityservices_oom_test_dummyaddfile.txt"));
+	basePathPtr.Replace(0, 2, iDriveUnitC.Name());
+	integrityServices->RegisterNewL(fileNamePtr);
+	basePathPtr.Replace(0, 2, iDriveUnitE.Name());
+	integrityServices->RegisterNewL(fileNamePtr);
+	 
+	fileNamePtr.Set(basePathPtr);
+	fileNamePtr.Append(_L("\\integrityservices_oom_test_dummycreatenewfile.txt"));
+	basePathPtr.Replace(0, 2, iDriveUnitC.Name());
+	CleanupClosePushL(newFile);
+	integrityServices->CreateNewL(fileNamePtr, newFile, fileMode);
+	CleanupStack::PopAndDestroy(&newFile);
+	basePathPtr.Replace(0, 2, iDriveUnitE.Name());
+	CleanupClosePushL(newFile);
+	integrityServices->CreateNewL(fileNamePtr, newFile, fileMode);
+	CleanupStack::PopAndDestroy(&newFile);
+	
+	fileNamePtr.Set(basePathPtr);
+	fileNamePtr.Append(_L("\\integrityservices_oom_test_dummyoverwritefile.txt"));
+	basePathPtr.Replace(0, 2, iDriveUnitC.Name());
+	CleanupClosePushL(newFile);
+	integrityServices->OverwriteL(fileNamePtr, newFile, fileMode);
+	CleanupStack::PopAndDestroy(&newFile);
+	basePathPtr.Replace(0, 2, iDriveUnitE.Name());
+	CleanupClosePushL(newFile);
+	integrityServices->OverwriteL(fileNamePtr, newFile, fileMode);
+	CleanupStack::PopAndDestroy(&newFile);
+	  
+	ScenarioEndL(integrityServices);
+	CleanupStack::PopAndDestroy(integrityServices);
+	CleanupStack::PopAndDestroy(this);
+	}
+
+void CIntegrityServicesTestScenarioBase::ImplTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("IntegrityServicesTestOOM Postamble"));
+	delete iTargetFileName;
+	iTargetFileName=0;
+	delete iJournalFileName;
+	iJournalFileName=0;
+	delete iDrvFileName;
+	iDrvFileName=0;
+	delete iBackupFileName;
+	iBackupFileName=0;
+	delete iTransactionBackupDirectoryPath;
+	iTransactionBackupDirectoryPath=0;
+	iFs.Close();
+	iLoader.Close();
+	}
+
+/*static*/void CIntegrityServicesTestScenarioBase::InTestCleanUp(TAny* aObject)
+	{
+	CIntegrityServicesTestScenarioBase* object=static_cast<CIntegrityServicesTestScenarioBase*>(aObject);
+	//first clean up transaction related files
+	TPtr ptr(object->iJournalFileName->Des());
+	ptr.Replace(0, 2, object->iDriveUnitC.Name());
+	TRAP_IGNORE(object->DeleteFileL(ptr)); //delete journal file on C drive
+	ptr.Replace(0, 2, object->iDriveUnitE.Name());
+	TRAP_IGNORE(object->DeleteFileL(ptr)); //delete journal file on E drive
+	TRAP_IGNORE(object->DeleteFileL(*(object->iDrvFileName))); //delete drv file on system drive
+	ptr.Set(object->iTransactionBackupDirectoryPath->Des());
+	ptr.Replace(0, 2, object->iDriveUnitC.Name());
+	TRAP_IGNORE(object->DeleteFileL(ptr)); //delete backup directory on C drive
+	ptr.Replace(0, 2, object->iDriveUnitE.Name());
+	TRAP_IGNORE(object->DeleteFileL(ptr)); //delete backup directory on E drive
+	
+	//then clean up all the added/created/etc... files
+	ptr.Set(object->iTargetFileName->Des());
+	ptr.Replace(0, 2, object->iDriveUnitC.Name());
+	TRAP_IGNORE(object->DeleteFileL(ptr)); //delete target dir on C drive
+	ptr.Replace(0, 2, object->iDriveUnitE.Name());
+	TRAP_IGNORE(object->DeleteFileL(ptr)); //delete target dir on E drive
+	
+	}
+
+void CIntegrityServicesTestScenarioBase::NormalizeDirectoryName(TDes& aFileName)
+{
+	TInt lastCharPos = aFileName.Length() - 1;
+	if ( lastCharPos >= 0 && aFileName[lastCharPos] == KPathDelimiter &&
+		 aFileName.Locate(KPathDelimiter) != lastCharPos) // Take care not to remove slash from "c:\" and the like
+		{
+		aFileName.Delete(lastCharPos, 1);
+		}			
+}
+
+//------------------------------------------------------------------------------------------------------------
+
+CIntegrityServicesTestInstall::CIntegrityServicesTestInstall(CStsTestServer &aStsTestServer): CIntegrityServicesTestScenarioBase(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KIntegrityservicesUnitTestInstall);
+	}
+
+void CIntegrityServicesTestInstall::ScenarioEndL(Usif::CIntegrityServices* aIntegrServ)
+	{
+	aIntegrServ->CommitL();
+	}
+
+//------------------------------------------------------------------------------------------------------------
+
+CIntegrityServicesTestRollback::CIntegrityServicesTestRollback(CStsTestServer &aStsTestServer): CIntegrityServicesTestScenarioBase(aStsTestServer)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KIntegrityservicesUnitTestRollback);
+	}
+
+void CIntegrityServicesTestRollback::ScenarioEndL(Usif::CIntegrityServices* aIntegrServ)
+	{
+	aIntegrServ->RollBackL();
+	}
--- a/layers.sysdef.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/layers.sysdef.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -1,14 +1,17 @@
 <?xml version="1.0"?>
-<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_5_1.dtd" [
   <!ENTITY layer_real_source_path "sf/mw/appinstall" >
 ]>
 
-<SystemDefinition name="appinstall" schema="1.4.0">
+<SystemDefinition name="appinstall" schema="1.5.1">
   <systemModel>
     <layer name="mw_layer">
       <module name="appinstall">
         <unit unitID="sedo.appinstall" mrp="" bldFile="&layer_real_source_path;/group" name="appinstall" />
       </module>
+      <module name="">
+        <unit unitID="sedoQT.appinstall" mrp="" bldFile="&layer_real_source_path;" name="sedoQT_appinstall" proFile="appinstall.pro" qmakeArgs="-r" />
+      </module>
     </layer>
 
 	<layer name="api_test_layer">
--- a/ncdengine/debuglogger/group/catalogslogger.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/debuglogger/group/catalogslogger.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -58,11 +58,7 @@
 USERINCLUDE     ../inc ../obex/inc
 
 // System include paths
-#ifndef __SERIES60_30__
-APP_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE     /epoc32/include
-#endif
+MW_LAYER_SYSTEMINCLUDE
 
 LIBRARY         euser.lib
 LIBRARY         apparc.lib
--- a/ncdengine/debuglogger/obex/inc/btservicesearcher.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/debuglogger/obex/inc/btservicesearcher.h	Tue Aug 31 15:21:33 2010 +0300
@@ -207,9 +207,11 @@
     /*! @var iIsDeviceSelectorConnected is the device selector connected ? */
     TBool iIsDeviceSelectorConnected;
 
+#ifdef _0
     /*! @var iDeviceSelector a handle to the bluetooth device selector notifier */
     RNotifier iDeviceSelector;
-
+#endif
+    
     /*! @var iResponse the response of the device selection */
     TBTDeviceResponseParamsPckg iResponse;
 
--- a/ncdengine/debuglogger/obex/src/btservicesearcher.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/debuglogger/obex/src/btservicesearcher.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -27,11 +27,14 @@
 
 CBTServiceSearcher::~CBTServiceSearcher()
 {
+#ifdef _0
     if (iIsDeviceSelectorConnected)
 	{
         iDeviceSelector.CancelNotifier(KDeviceSelectionNotifierUid);
         iDeviceSelector.Close();
 	}
+#endif
+    
     delete iSdpSearchPattern;
     iSdpSearchPattern = NULL;
 	
@@ -46,11 +49,14 @@
 
 void CBTServiceSearcher::Cancel() {
 
+#ifdef _0
     if (iIsDeviceSelectorConnected)
 	{
         iDeviceSelector.CancelNotifier(KDeviceSelectionNotifierUid);
     
 	}
+#endif
+    
     delete iSdpSearchPattern;
     iSdpSearchPattern = NULL;
 	
@@ -66,23 +72,28 @@
 
 }
 
-void CBTServiceSearcher::SelectDeviceByDiscoveryL(TRequestStatus& aObserverRequestStatus)
+void CBTServiceSearcher::SelectDeviceByDiscoveryL(TRequestStatus& /* aObserverRequestStatus */)
     {
+    
+#ifdef _0
     if (!iIsDeviceSelectorConnected)
         {
         User::LeaveIfError(iDeviceSelector.Connect());
         iIsDeviceSelectorConnected = ETrue;
         }
+#endif
 
     //  Request a device selection 
     TBTDeviceSelectionParamsPckg selectionFilter;
     selectionFilter().SetUUID(ServiceClass());
-
+    
+#ifdef _0
     iDeviceSelector.StartNotifierAndGetResponse(
         aObserverRequestStatus, 
         KDeviceSelectionNotifierUid, 
         selectionFilter, 
         iResponse);
+#endif
     }
 
 
--- a/ncdengine/debuglogger/obex/src/objectexchangeclient.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/debuglogger/obex/src/objectexchangeclient.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -22,6 +22,8 @@
 
 #include "ObjectExchangeClient.h"
 #include "ObjectExchangeServiceSearcher.h"
+
+#include "obexconstantsinternal.h"
 #include "BTObjectExchange.pan"
 
 #include <e32svr.h>
--- a/ncdengine/engine/accesspointmanager/inc/catalogsaccesspointmanagerimpl.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/accesspointmanager/inc/catalogsaccesspointmanagerimpl.h	Tue Aug 31 15:21:33 2010 +0300
@@ -20,7 +20,14 @@
 #define C_CATALOGSACCESSPOINTMANAGERIMPL_H
 
 #include <e32def.h>
+#include <e32base.h> // HLa: DLMgr remove
+
+#ifdef _0
 #include <ApAccessPointItem.h>
+#endif
+
+#include <e32cmn.h>
+
 #include "catalogsaccesspointmanager.h"
 #include "catalogsaccesspointobserver.h"
 
@@ -190,10 +197,11 @@
      */
     void RemoveAccessPointsL();
         
-    
+#ifdef _0
     HBufC16* ReadText16L( CApAccessPointItem* aItem, const TApMember& aApMember );
 
     HBufC8* ReadText8L( CApAccessPointItem* aItem, const TApMember& aApMember );
+#endif 
     
     TBool MatchInCommsDbL( const CCatalogsAccessPointSettings& aSettings, TUint32& aId );
 
@@ -206,7 +214,9 @@
     void SaveToStorageL();
     
         
+#ifdef _0
     TBool MatchingSettingsL(const CCatalogsAccessPointSettings& aSettings, CApAccessPointItem& aItem);
+#endif
     
     void SetApDetailL( CCatalogsAccessPoint& aAp, const TDesC& aKey, const TDesC& aValue );
 
--- a/ncdengine/engine/accesspointmanager/inc/catalogsaccesspointmap.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/accesspointmanager/inc/catalogsaccesspointmap.h	Tue Aug 31 15:21:33 2010 +0300
@@ -17,6 +17,13 @@
 
 
 #include <e32base.h>
+
+#ifdef _0
+#include "catalogsaccesspointmanagerimpl.h"
+#endif
+
+#include <s32strm.h>
+
 #include "catalogsaccesspointmanagerimpl.h"
 
 class CCatalogsAccessPointMap : public CBase
--- a/ncdengine/engine/accesspointmanager/inc/catalogsaccesspointsettings.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/accesspointmanager/inc/catalogsaccesspointsettings.h	Tue Aug 31 15:21:33 2010 +0300
@@ -20,7 +20,14 @@
 #define C_CATALOGSACCESSPOINTSETTINGS_H
 
 #include <e32base.h>
+
+#ifdef _0
 #include <ApAccessPointItem.h>
+#endif
+
+#include <s32strm.h>
+
+
 #include <badesca.h>
 
 
@@ -32,6 +39,7 @@
     
     virtual ~CCatalogsAccessPointSettings();
     
+#ifdef _0
     void SetLongTextParameterL(const TApMember& aKey, const TDesC16& aValue);
     void SetText16ParameterL(const TApMember& aKey, const TDesC16& aValue);
     void SetText8ParameterL(const TApMember& aKey, const TDesC8& aValue);
@@ -54,6 +62,7 @@
         TInt aIndex, TApMember& aKey, TUint32& aValue) const;
     void BoolParameter(
         TInt aIndex, TApMember& aKey, TBool& aValue) const;
+#endif
     
 protected:
     CCatalogsAccessPointSettings();
@@ -62,11 +71,13 @@
     void InternalizeL(RReadStream& aStream);
 
 private:
+#ifdef _0
     RArray<TApMember> iLongTextMembers;
     RArray<TApMember> iText16Members;
     RArray<TApMember> iText8Members;
     RArray<TApMember> iUintMembers;
     RArray<TApMember> iBoolMembers;
+#endif
     
     CDesC16ArrayFlat* iLongTextData;
     CDesC16ArrayFlat* iText16Data;
--- a/ncdengine/engine/accesspointmanager/src/catalogsaccesspointmanagerimpl.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/accesspointmanager/src/catalogsaccesspointmanagerimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -18,9 +18,12 @@
 
 #include "catalogsaccesspointmanagerimpl.h"
 
+#ifdef _0
 #include <ApUtils.h>
 #include <ApSelect.h> 
 #include <ApDataHandler.h>
+#endif
+
 #include <badesca.h>
 
 #include "catalogsaccesspoint.h"
@@ -61,6 +64,7 @@
 _LIT(KBrowseAccessPoint, "browsingAccessPoint");
 _LIT(KPurchaseAccessPoint, "purchasingAccessPoint");
 
+#ifdef _0
 // literals used for access point settings in client configuration protocol (in alphabetical order)
 _LIT(KApName, "name");
 
@@ -152,7 +156,7 @@
 
 _LIT(KWapWspOptionConnectionless, "EWapWspOptionConnectionless");
 _LIT(KWapWspOptionConnectionOriented, "EWapWspOptionConnectionOriented");
-
+#endif
 
 CCatalogsAccessPointManager::CCatalogsAccessPointManager(
     CNcdGeneralManager& aGeneralManager ) :
@@ -565,6 +569,7 @@
     TUint32& aAccessPointId) 
     {
     DLTRACEIN((_L("Namespace: %S, CatalogId: %S, Action: %d, clientUid: %d"), &aNameSpace, &aCatalogId, aAction, aClientUid.iUid));
+    
     CCatalogsAccessPoint* accessPoint( NULL );
     CCatalogsClientAccessPointData* apData( NULL );
     TInt err = GetAccessPoint( accessPoint, apData );
@@ -593,7 +598,7 @@
     DLTRACEIN((_L("Namespace: %S, NodeId: %S, Action: %d, clientUid: %d"),
                &aNodeIdentifier.NodeNameSpace(), &aNodeIdentifier.NodeId(), aAction,
                aClientUid.iUid));
-
+    
     CCatalogsAccessPoint* accessPoint( NULL );
     CCatalogsClientAccessPointData* apData( NULL );
     TInt err = GetAccessPoint( accessPoint, apData );
@@ -711,14 +716,17 @@
     }
             
     
-TBool CCatalogsAccessPointManager::ValidateAccessPointL( CCatalogsAccessPoint* aAccessPoint )
+TBool CCatalogsAccessPointManager::ValidateAccessPointL( CCatalogsAccessPoint* /* aAccessPoint */ )
     {
     DLTRACEIN((""));
+    
 #ifdef __WINS__
     // Comms database is not accessible in emulator.
     return EFalse;
 #endif
-    CCommsDatabase *commdb = CCommsDatabase::NewL( /*EDatabaseTypeIAP*/ );
+
+#ifdef _0
+    CCommsDatabase *commdb = CCommsDatabase::NewL( /* EDatabaseTypeIAP */);
     CleanupStack::PushL( commdb );
     CApSelect*  select;
     select = CApSelect::NewLC(
@@ -765,18 +773,22 @@
             
     // Someone has altered the access point settings.
     CleanupStack::PopAndDestroy(4);
+#endif
+    
     return EFalse;
     }
 
-TBool CCatalogsAccessPointManager::MatchInCommsDbL( const CCatalogsAccessPointSettings& aSettings, TUint32& aId )
+TBool CCatalogsAccessPointManager::MatchInCommsDbL( const CCatalogsAccessPointSettings& /* aSettings */, TUint32& /* aId */)
     {
     DLTRACEIN(_L("Checking comms DB for matching access point"));
+    
 #ifdef __WINS__
     // Comms database is not accessible in emulator.
     return EFalse;
 #endif
     
-    CCommsDatabase *commdb = CCommsDatabase::NewL( /*EDatabaseTypeIAP*/ );
+#ifdef _0
+    CCommsDatabase *commdb = CCommsDatabase::NewL( /* EDatabaseTypeIAP */ );
     CleanupStack::PushL( commdb );
     CApSelect*  select;
     select = CApSelect::NewLC(
@@ -816,17 +828,22 @@
         
     CleanupStack::PopAndDestroy( 4, commdb ); // util, handler, select, commdb
     DLTRACEOUT(("Matching AP not found"));
+#endif
+    
     return EFalse;
     }
 
-void CCatalogsAccessPointManager::CreateApToCommsDBL( const CCatalogsAccessPoint& aSettings, TUint32& aId )
+void CCatalogsAccessPointManager::CreateApToCommsDBL( const CCatalogsAccessPoint& /* aSettings */, TUint32& /* aId */ )
     {
     DLTRACEIN(_L("Creating AP to comms DB"));
+    
 #ifdef __WINS__
     // Comms database is not accessible in emulator.
     return;
 #endif
-    CCommsDatabase *commdb = CCommsDatabase::NewL( /*EDatabaseTypeIAP*/ );
+
+#ifdef _0
+    CCommsDatabase *commdb = CCommsDatabase::NewL( /*EDatabaseTypeIAP */);
     CleanupStack::PushL( commdb );
     
     CApDataHandler*     handler = CApDataHandler::NewLC( *commdb );        
@@ -896,9 +913,12 @@
     CApUtils* util = CApUtils::NewLC( *commdb );
     aId = util->IapIdFromWapIdL( wapId );
     CleanupStack::PopAndDestroy( 4, commdb ); // commDb, handler, newAp, util
+    
+#endif
     DLTRACEOUT(("Access point created to comms DB"));
     }
 
+#ifdef _0
 HBufC16* CCatalogsAccessPointManager::ReadText16L( CApAccessPointItem* aItem, const TApMember& aApMember )
     {
     TInt length = aItem->ReadTextLengthL( aApMember );
@@ -926,7 +946,7 @@
     CleanupStack::Pop(); // buffer
     return buffer;
     }
-
+#endif
 
 void CCatalogsAccessPointManager::RemoveAccessPointsFromCommsDbL(
     TBool aAddShutdownOperation )
@@ -980,9 +1000,10 @@
     iClientAccessPointData = NULL;
     }
 
-void CCatalogsAccessPointManager::RemoveApFromCommsDatabaseL( const TUint32& aId )
+void CCatalogsAccessPointManager::RemoveApFromCommsDatabaseL( const TUint32& /* aId */ )
     {
-    DLTRACEIN(("aId: %u", aId ));
+    
+#ifdef _0
     CCommsDatabase *commdb = CCommsDatabase::NewL( EDatabaseTypeIAP );
     CleanupStack::PushL( commdb );
     CApDataHandler* dataHandler = CApDataHandler::NewLC( *commdb );
@@ -991,6 +1012,7 @@
     dataHandler->RemoveAPL( wapId );
     
     CleanupStack::PopAndDestroy( 3, commdb ); // util, dataHandler, commdb
+#endif
     }
 
     
@@ -1056,7 +1078,7 @@
     item->SaveL();    
     }
 
-    
+#ifdef _0   
 TBool CCatalogsAccessPointManager::MatchingSettingsL(
     const CCatalogsAccessPointSettings& aSettings, CApAccessPointItem& aItem) 
     {
@@ -1188,11 +1210,13 @@
     DLTRACEOUT(("Matching settings"));
     return ETrue;
     }
-    
+#endif   
     
 void CCatalogsAccessPointManager::SetApDetailL(
-    CCatalogsAccessPoint& aAp, const TDesC& aKey, const TDesC& aValue ) 
+    CCatalogsAccessPoint& /* aAp */, const TDesC& /* aKey */, const TDesC& /* aValue */ ) 
     {
+    
+#ifdef _0
     DLTRACEIN((""));
     TBool value = EFalse;
     
@@ -1583,6 +1607,7 @@
         {
         DLWARNING(( _L("Unknown access point detail: %S"), &aKey));
         }
+#endif
     }
     
 
--- a/ncdengine/engine/accesspointmanager/src/catalogsaccesspointsettings.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/accesspointmanager/src/catalogsaccesspointsettings.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -52,15 +52,19 @@
     delete iLongTextData;
     delete iText16Data;
     delete iText8Data;
+
+#ifdef _0
     iLongTextMembers.Close();
     iText16Members.Close();
     iText8Members.Close();
     iUintMembers.Close();
     iBoolMembers.Close();
     iUintData.Close();
-    iBoolData.Close();    
+    iBoolData.Close(); 
+#endif  
     }
     
+#ifdef _0
 void CCatalogsAccessPointSettings::SetLongTextParameterL(
     const TApMember& aKey, const TDesC& aValue) 
     {
@@ -214,11 +218,13 @@
     aKey = iBoolMembers[aIndex];
     aValue = iBoolData[aIndex];
     }
-        
-void CCatalogsAccessPointSettings::ExternalizeL(RWriteStream& aStream) 
+#endif
+
+void CCatalogsAccessPointSettings::ExternalizeL(RWriteStream& /* aStream */) 
     {
     DLTRACEIN((""));
     
+#ifdef _0
     // write long text parameters
     TInt longTextCount = LongTextParameterCount();
     aStream.WriteInt32L(longTextCount);
@@ -263,12 +269,15 @@
         aStream.WriteInt32L(iBoolMembers[i]);
         aStream.WriteInt8L(iBoolData[i]);
         }
-    
+
+#endif
     DLTRACEOUT((""));        
     }
     
-void CCatalogsAccessPointSettings::InternalizeL(RReadStream& aStream) 
+void CCatalogsAccessPointSettings::InternalizeL(RReadStream& /* aStream */) 
     {
+    
+#ifdef _0
     // read long text parameters
     TInt longTextCount = aStream.ReadInt32L();
     iLongTextMembers.ReserveL(longTextCount);
@@ -327,4 +336,6 @@
         iBoolMembers.AppendL((TApMember)aStream.ReadInt32L());
         iBoolData.AppendL(aStream.ReadInt8L());
         }
+       
+#endif
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/engine/engine.pri	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,280 @@
+
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+
+# Input
+HEADERS +=./transport/inc/catalogshttpdownload.h \
+					./transport/inc/catalogshttpdownloadmanagerimpl.h \
+
+SOURCES += ./src/catalogsbasemessageimpl.cpp \
+./src/catalogsclientserverserver.cpp \
+./src/catalogsclientserverserversession.cpp \
+./src/catalogsincompletemessage.cpp \
+./src/catalogsserverengine.cpp \
+./src/catalogsutils.cpp \
+./src/catalogskeyvaluepair.cpp \
+./src/catalogscontextimpl.cpp \
+./src/catalogsbigdes.cpp \
+./src/catalogsinterfacebase.cpp \
+./src/catalogsinterfaceidentifier.cpp \
+./src/catalogsstringmanager.cpp \
+./src/catalogsshutdownoperation.cpp \
+./transport/src/catalogstransportimpl.cpp \
+./transport/src/catalogshttpconfigimpl.cpp \
+./transport/src/catalogshttpheadersimpl.cpp \
+./transport/src/catalogshttpsessionimpl.cpp \
+./transport/src/catalogshttpdownloadmanagerimpl.cpp \
+./transport/src/catalogshttpdownload.cpp \
+./transport/src/catalogshttptransaction.cpp \
+./transport/src/catalogshttptransactionmanagerimpl.cpp \
+./transport/src/catalogshttpstack.cpp \
+./transport/src/catalogshttpsessionmanagerimpl.cpp \
+./transport/src/catalogshttpconnectioncreator.cpp \
+./transport/src/catalogshttpconnectionmanager.cpp \
+./transport/src/catalogssmssessionimpl.cpp \
+./transport/src/catalogssmsoperationimpl.cpp \
+./transport/src/catalogssmssender.cpp \
+./transport/src/catalogssmsutils.cpp \
+./transport/src/catalogsnetworkmanager.cpp \
+./transport/src/catalogsconnectioneventsink.cpp \
+./transport/src/catalogshttprequestparser.cpp \
+./transport/src/catalogshttprequestadapter.cpp \
+./transport/src/catalogshttpresponsecomposer.cpp \
+./transport/src/catalogshttputils.cpp \
+./transport/src/catalogsconnection.cpp \
+./accesspointmanager/src/catalogsaccesspointmanagerimpl.cpp \
+./accesspointmanager/src/catalogsaccesspoint.cpp \
+./accesspointmanager/src/catalogsaccesspointsettings.cpp\
+./accesspointmanager/src/catalogsaccesspointmap.cpp \
+./accesspointmanager/src/catalogsclientaccesspointdata.cpp \
+./accesspointmanager/src/catalogsremoveaccesspointshutdownoperation.cpp \
+../provider/server/src/ncdcommunicable.cpp \
+../provider/server/src/ncdproviderimpl.cpp \
+../provider/server/src/ncdnodemanager.cpp \
+../provider/server/src/ncdnodedbmanager.cpp \
+../provider/server/src/ncdoperationmanager.cpp \
+../provider/server/src/ncdnodeimpl.cpp \
+../provider/server/src/ncdnodefolder.cpp \
+../provider/server/src/ncdparentoftransparentnode.cpp \
+../provider/server/src/ncdnodetransparentfolder.cpp \
+../provider/server/src/ncdnodeitem.cpp \
+../provider/server/src/ncdrootnode.cpp \
+../provider/server/src/ncdnodemetadataimpl.cpp \
+../provider/server/src/ncdnodeitemmetadata.cpp \
+../provider/server/src/ncdnodefoldermetadata.cpp \
+../provider/server/src/ncdnodedisclaimer.cpp \
+../provider/server/src/ncdnodeiconimpl.cpp \
+../provider/server/src/ncdnodescreenshotimpl.cpp \
+../provider/server/src/ncdnodeskinimpl.cpp \
+../provider/server/src/ncdnodelink.cpp \
+../provider/server/src/ncdnodeitemlink.cpp \
+../provider/server/src/ncdnodefolderlink.cpp \
+../provider/server/src/ncdnodeidentifier.cpp \
+../provider/server/src/ncdnodeuserdataimpl.cpp \
+../provider/server/src/ncdnodedownloadimpl.cpp \
+../provider/server/src/ncdnodeupgradeimpl.cpp \
+../provider/server/src/ncdnodedependencyimpl.cpp \
+../provider/server/src/ncdnodecachecleaner.cpp \
+../provider/server/src/ncdnodecachecleanermanager.cpp \
+../provider/server/src/ncdnodefactory.cpp \
+../provider/server/src/ncdnodeidentifiereditor.cpp \
+../provider/server/src/ncddbmaxsizemap.cpp \
+../provider/server/src/ncdbaseoperation.cpp \
+../provider/server/src/ncdloadnodeoperationimpl.cpp \
+../provider/server/src/ncdloadrootnodeoperationimpl.cpp \
+../provider/server/src/ncdsendableprogress.cpp \
+../provider/server/src/ncdconfigurationmanagerimpl.cpp \
+../provider/server/src/ncdpurchaseoperationimpl.cpp \
+../provider/server/src/ncdpurchaseoptionimpl.cpp \
+../provider/server/src/ncdserversubscription.cpp \
+../provider/server/src/ncdserverpartofsubscription.cpp \
+../provider/server/src/ncdserverupgrade.cpp \
+../provider/server/src/ncdserversubscribablecontent.cpp \
+../provider/server/src/ncdnodeinstallimpl.cpp \
+../provider/server/src/ncdinstalloperationimpl.cpp \
+../provider/server/src/ncdnodecontentinfoimpl.cpp \
+../provider/server/src/ncdnodeuricontentimpl.cpp \
+../provider/server/src/ncdinstallinfo.cpp \
+../provider/server/src/ncdfileinfo.cpp \
+../provider/server/src/ncdsubscriptionmanagerimpl.cpp \
+../provider/server/src/ncdclientssubscriptions.cpp \
+../provider/server/src/ncdsubscriptiongroup.cpp \
+../provider/server/src/ncdsubscriptionimpl.cpp \
+../provider/server/src/ncdsubscriptionoperationimpl.cpp \
+../provider/server/src/ncdsubscriptionssourceidentifier.cpp \
+../provider/server/src/ncdrightsobjectoperationimpl.cpp \
+../provider/server/src/ncdnodepreviewimpl.cpp \
+../provider/server/src/ncdserveraddress.cpp \
+../provider/server/src/ncdsearchoperationimpl.cpp \
+../provider/server/src/ncdsearchnodeitem.cpp \
+../provider/server/src/ncdsearchnodefolder.cpp \
+../provider/server/src/ncdsearchnodebundle.cpp \
+../provider/server/src/ncdbundlefolder.cpp \
+../provider/server/src/ncdpreviewmanager.cpp \
+../provider/server/src/ncdchildentity.cpp \
+../provider/server/src/ncdchildentitymap.cpp \
+../provider/server/src/ncdsearchrootnode.cpp \
+../provider/server/src/ncdproviderutils.cpp \
+../provider/server/src/ncdserverdetailsimpl.cpp \
+../provider/server/src/ncdcontentdescriptor.cpp \
+../provider/server/src/ncdsubscriptiondatacompleter.cpp \
+../provider/server/src/ncdnodesupplier.cpp \
+../provider/server/src/ncdnodesupplierlink.cpp \
+../provider/server/src/ncddownloadinfo.cpp \
+../provider/server/src/ncdextendedinstallinfo.cpp \
+../provider/server/src/ncdloadbundlenodeoperationimpl.cpp \
+../provider/server/src/ncddependencyinfo.cpp \
+../provider/server/src/ncdfavoritemanagerimpl.cpp \
+../provider/server/src/ncdreportmanager.cpp \
+../provider/server/src/ncdreport.cpp \
+../provider/server/src/ncdreportdownload.cpp \
+../provider/server/src/ncdreportomadownload.cpp \
+../provider/server/src/ncdreportinstall.cpp \
+../provider/server/src/ncdnodeseeninfo.cpp \
+../provider/server/src/ncdnodeseenimpl.cpp \
+../provider/server/src/ncdnodeseenfolderimpl.cpp \
+../provider/server/src/ncdnodeidentifierutils.cpp \
+../provider/server/src/ncdpurchasehistoryutils.cpp \
+../provider/server/src/ncdcreateaccesspointoperationimpl.cpp \
+../provider/server/src/ncdsendhttprequestoperationimpl.cpp \
+../provider/server/src/ncdhttputils.cpp \
+../provider/server/src/ncdserverreportoperationimpl.cpp \
+../provider/server/src/ncdserverreportmanagerimpl.cpp \
+../provider/server/src/ncdprovidermanager.cpp \
+../provider/server/src/ncdgeneralmanager.cpp \
+../provider/server/src/ncddownloadoperationimpl.cpp \
+../provider/server/src/ncdbasedownloadhandler.cpp \
+../provider/server/src/ncdskindownloadhandler.cpp \
+../provider/server/src/ncdfilestoragefilehandler.cpp \
+../provider/server/src/ncddatabasefilehandler.cpp \
+../provider/server/src/ncdicondownloadhandler.cpp \
+../provider/server/src/ncdfiledownloadhandler.cpp \
+../provider/server/src/ncdpreviewdownloadhandler.cpp \
+../provider/server/src/ncdscreenshotdownloadhandler.cpp \
+../provider/server/src/ncdcontentdownloadoperation.cpp \
+../provider/server/src/ncddownloadsuboperation.cpp \
+../provider/server/src/ncddescriptordownloadsuboperation.cpp \
+../provider/server/src/ncdconfigurationparser.cpp \
+../provider/server/src/ncdengineconfigurationimpl.cpp \
+../provider/client/src/ncdqueryimpl.cpp \
+../provider/client/src/ncdqueryitemimpl.cpp \
+../provider/client/src/ncdquerytextitemimpl.cpp \
+../provider/client/src/ncdquerynumericitemimpl.cpp \
+../provider/client/src/ncdqueryselectionitemimpl.cpp \
+../provider/client/src/ncdquerypincodeitemimpl.cpp \
+../provider/client/src/ncdqueryoptionimpl.cpp \
+../provider/client/src/ncdexpirednode.cpp \
+../provider/client/src/ncdlocalizerutils.cpp \
+../provider/storage/src/ncdstoragemanagerimpl.cpp \
+../provider/storage/src/ncdstorageimpl.cpp \
+../provider/storage/src/ncdstorageclientimpl.cpp \
+../provider/storage/src/ncddbstoragemanager.cpp \
+../provider/storage/src/ncdstoragefiledataitem.cpp \
+../provider/storage/src/ncdfilestorageimpl.cpp \
+../provider/storage/src/ncdstoragebase.cpp \
+../provider/storage/src/ncddatabasestorageimpl.cpp \
+../provider/storage/src/ncdstoragedescriptordataitem.cpp \
+../provider/protocol/src/ncdparserimpl.cpp \
+../provider/protocol/src/ncdparserfactory.cpp \
+../provider/protocol/src/ncdprotocoldefaultobserverimpl.cpp \
+../provider/protocol/src/ncd_pp_iconimpl.cpp \
+../provider/protocol/src/ncd_pp_skinimpl.cpp \
+../provider/protocol/src/ncd_parser_pp_response.cpp \
+../provider/protocol/src/ncd_parser_pp_entityref.cpp \
+../provider/protocol/src/ncd_parser_pp_embeddeddata.cpp \
+../provider/protocol/src/ncd_parser_pp_datablocks.cpp \
+../provider/protocol/src/ncd_parser_pp_purchaseoption.cpp \
+../provider/protocol/src/ncd_parser_pp_dataentity.cpp \
+../provider/protocol/src/ncd_parser_pp_dataentitycontent.cpp \
+../provider/protocol/src/ncd_parser_pp_entitydependency.cpp \
+../provider/protocol/src/ncd_parser_pp_download.cpp \
+../provider/protocol/src/ncd_parser_pp_rights.cpp \
+../provider/protocol/src/ncd_parser_pp_information.cpp \
+../provider/protocol/src/ncd_parser_pp_messages.cpp \
+../provider/protocol/src/ncd_parser_pp_moreinfo.cpp \
+../provider/protocol/src/ncd_parser_pp_purchase.cpp \
+../provider/protocol/src/ncd_parser_pp_purchaseinformation.cpp \
+../provider/protocol/src/ncd_parser_pp_purchaseprocessed.cpp \
+../provider/protocol/src/ncd_parser_pp_purchaseentity.cpp \
+../provider/protocol/src/ncd_parser_pp_payment.cpp \
+../provider/protocol/src/ncd_parser_pp_expiredcacheddata.cpp \
+../provider/protocol/src/ncd_parser_pp_subscriptionreport.cpp \
+../provider/protocol/src/ncd_parser_pp_subscription.cpp \
+../provider/protocol/src/ncd_parser_pp_subscriptiondetails.cpp \
+../provider/protocol/src/ncd_parser_cp_actionrequest.cpp \
+../provider/protocol/src/ncd_parser_cp_response.cpp \
+../provider/protocol/src/ncd_parser_cp_capabilities.cpp \
+../provider/protocol/src/ncd_parser_cp_clientconfiguration.cpp \
+../provider/protocol/src/ncd_parser_cp_cookie.cpp \
+../provider/protocol/src/ncd_parser_cp_detail.cpp \
+../provider/protocol/src/ncd_parser_cp_details.cpp \
+../provider/protocol/src/ncd_parser_cp_error.cpp \
+../provider/protocol/src/ncd_parser_cp_query.cpp \
+../provider/protocol/src/ncd_parser_cp_queryelement.cpp \
+../provider/protocol/src/ncd_parser_cp_serverdetails.cpp \
+../provider/protocol/src/ncd_pp_folderrefimpl.cpp \
+../provider/protocol/src/ncd_pp_itemrefimpl.cpp \
+../provider/protocol/src/ncd_pp_datablockimpl.cpp \
+../provider/protocol/src/ncd_pp_dataentityimpl.cpp \
+../provider/protocol/src/ncd_pp_dataentitycontentimpl.cpp \
+../provider/protocol/src/ncd_pp_entitydependencyimpl.cpp \
+../provider/protocol/src/ncd_pp_embeddeddataimpl.cpp \
+../provider/protocol/src/ncd_pp_expiredcacheddataimpl.cpp \
+../provider/protocol/src/ncd_pp_informationimpl.cpp \
+../provider/protocol/src/ncd_pp_purchaseoptionimpl.cpp \
+../provider/protocol/src/ncd_pp_subscriptionimpl.cpp \
+../provider/protocol/src/ncd_pp_subscriptiondetailsimpl.cpp \
+../provider/protocol/src/ncd_pp_downloadimpl.cpp \
+../provider/protocol/src/ncd_pp_descriptorimpl.cpp \
+../provider/protocol/src/ncd_pp_rightsimpl.cpp \
+../provider/protocol/src/ncd_pp_purchaseimpl.cpp \
+../provider/protocol/src/ncd_pp_purchaseinformationimpl.cpp \
+../provider/protocol/src/ncd_pp_purchaseprocessedimpl.cpp \
+../provider/protocol/src/ncd_pp_purchaseentityimpl.cpp \
+../provider/protocol/src/ncd_pp_paymentimpl.cpp \
+../provider/protocol/src/ncd_pp_smsdetailsimpl.cpp \
+../provider/protocol/src/ncd_cp_actionrequestimpl.cpp \
+../provider/protocol/src/ncd_cp_clientconfigurationimpl.cpp \
+../provider/protocol/src/ncd_cp_cookieimpl.cpp \
+../provider/protocol/src/ncd_cp_detailimpl.cpp \
+../provider/protocol/src/ncd_cp_errorimpl.cpp \
+../provider/protocol/src/ncd_pp_errorimpl.cpp \
+../provider/protocol/src/ncd_cp_queryimpl.cpp \
+../provider/protocol/src/ncd_cp_queryelementimpl.cpp \
+../provider/protocol/src/ncd_cp_queryoptionimpl.cpp \
+../provider/protocol/src/ncd_cp_queryresponseimpl.cpp \
+../provider/protocol/src/ncd_cp_serverdetailsimpl.cpp \
+../provider/protocol/src/ncdsubparser.cpp \ 
+../provider/protocol/src/ncdtoplevelparser.cpp \
+../provider/protocol/src/ncdunknownparser.cpp \
+../provider/protocol/src/ncdprotocolutils.cpp \
+../provider/protocol/src/ncdparserobserverbundleimpl.cpp \
+../provider/protocol/src/ncdprotocolimpl.cpp \
+../provider/protocol/src/ncdsessionhandler.cpp \
+../provider/protocol/src/ncdstring.cpp \
+../provider/protocol/src/ncdrequestgenerator.cpp \
+../provider/protocol/src/ncdrequestbase.cpp \
+../provider/protocol/src/ncdrequestbrowsesearch.cpp \
+../provider/protocol/src/ncdrequestconfiguration.cpp \
+../provider/protocol/src/ncdrequestconfigurationdata.cpp \
+../provider/protocol/src/ncdrequestpurchase.cpp \
+../provider/protocol/src/ncdrequestmanagesubscriptions.cpp \
+../provider/protocol/src/ncdrequestinstallation.cpp \
+../provider/purchasehistory/src/ncdpurchasehistorydbimpl.cpp \
+../provider/src/ncdkeyvaluemap.cpp \
+../provider/src/ncdpurchasedetails.cpp \
+../provider/src/ncddelay.cpp
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/engine/engine.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,62 @@
+
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors: 
+#
+# Description: 
+#
+
+include ( engine.pri )
+
+IncludeBlock = \
+	"$${LITERAL_HASH}include <data_caging_paths.hrh>" \
+	"$${LITERAL_HASH}include <platform_paths.hrh>"  \
+	"$${LITERAL_HASH}include <../inc/catalogsuids.h>" \
+	"$${LITERAL_HASH}include <./inc/build_config.mmpi>" 
+
+
+TEMPLATE = app
+TARGET = ncdserver_20019119
+CONFIG += qt
+ 
+symbian: { 
+	TARGET.CAPABILITY = CAP_APPLICATION 
+	TARGET.VID = VID_DEFAULT
+	TARGET.UID3 = 0x20019119
+	TARGET.EPOCALLOWDLLDATA = 1
+	rssrules = "hidden = KAppIsHidden;"
+        RSS_RULES += rssrules
+	
+	INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+	INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+	INCLUDEPATH +=   ../provider/inc 
+	INCLUDEPATH +=   ../provider/server/inc 
+	INCLUDEPATH +=   ../provider/client/inc
+	INCLUDEPATH +=   ../provider/storage/inc
+	INCLUDEPATH +=   ../provider/protocol/inc
+	INCLUDEPATH +=   ../provider/deviceinteraction/inc
+	INCLUDEPATH +=   ../provider/purchasehistory/inc
+	
+	INCLUDEPATH +=   ../inc
+	INCLUDEPATH +=   ../engine/inc
+	INCLUDEPATH +=   ../engine/transport/inc
+	INCLUDEPATH +=   ../engine/accesspointmanager/inc
+	INCLUDEPATH += /epoc32/include/platform/mw/cwrt
+	INCLUDEPATH += /epoc32/include/ecom
+
+	LIBS += -lcommonui -lWrtDownloadMgr -lapmime -lcmmanager -lecom -lapengine -lmsgs -lsmcm -lgsmu -linetprotutil 
+	LIBS += -lhttpfiltercommon -lecom -lhttp -lesock -lcommdb -lsysutil -lhash -lestlib -lestor -lbafl -lplatformenv
+	LIBS += -lXmlEngineUtils  -lXmlEngineDOM -lXmlEngine -lXmlInterface -lxmlframework  -lcharconv -ledbms -lefsrv
+  LIBS += -lncdutils_20019119 -lncddevicemgmt_20019119
+  LIBS += -lxqutils
+}
--- a/ncdengine/engine/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -20,7 +20,7 @@
 catalogsdebug.mmp
 ncdutils.mmp
 ncddevicemgmt.mmp
-catalogsserver.mmp
+//catalogsserver.mmp
 catalogsengine.mmp
 catalogsproxy.mmp
 catalogsundertaker.mmp
@@ -43,10 +43,8 @@
 // (and perhaps pkg references).
 backup_registration.xml         z:/private/20019119/backup_registration.xml
 
-
 // Config file
 config.xml                      z:/private/20019119/config.xml
 
-
 // Variant config file
 config_variant.xml                      z:/private/20019119/config_variant.xml
--- a/ncdengine/engine/group/catalogsdebug.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/group/catalogsdebug.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -55,11 +55,7 @@
 #endif
 
 // System include paths
-#ifndef __SERIES60_30__
-APP_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE /Epoc32/include
-#endif
+MW_LAYER_SYSTEMINCLUDE
 
 LIBRARY euser.lib flogger.lib hal.lib
 
--- a/ncdengine/engine/group/catalogsengine.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/group/catalogsengine.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -48,12 +48,7 @@
 USERINCLUDE   ../../engine/inc
 
 // System include paths
-#ifndef __SERIES60_30__
-APP_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE /Epoc32/include
-#endif
-
+MW_LAYER_SYSTEMINCLUDE
 
 LIBRARY euser.lib flogger.lib ecom.lib estor.lib
 
--- a/ncdengine/engine/group/catalogsproxy.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/group/catalogsproxy.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -169,11 +169,7 @@
 USERINCLUDE   ../../provider/deviceinteraction/inc
 
 // System include paths
-#ifndef __SERIES60_30__
-APP_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE /epoc32/include
-#endif
+MW_LAYER_SYSTEMINCLUDE
 
 SYSTEMINCLUDE /epoc32/include/libc
 
--- a/ncdengine/engine/group/catalogsserver.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/group/catalogsserver.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -376,11 +376,7 @@
 
 
 // System include paths
-#ifndef __SERIES60_30__
 APP_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE   /epoc32/include
-#endif
 
 SYSTEMINCLUDE   /epoc32/include/libc
 SYSTEMINCLUDE   /epoc32/include/ecom
@@ -443,7 +439,6 @@
 LIBRARY         gsmu.lib    // SMS
 LIBRARY         smcm.lib    // SMS
 LIBRARY         msgs.lib    // SMS
-LIBRARY         apengine.lib
 
 #ifndef __SERIES60_31__
 LIBRARY         cmmanager.lib // CMManager and other SNAP/APN classes
--- a/ncdengine/engine/group/catalogsundertaker.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/group/catalogsundertaker.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -48,12 +48,7 @@
 USERINCLUDE   ../../engine/inc
 
 // System include paths
-#ifndef __SERIES60_30__
-APP_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE   /epoc32/include
-#endif
-
+MW_LAYER_SYSTEMINCLUDE
 
 LIBRARY         euser.lib flogger.lib
 
--- a/ncdengine/engine/group/config.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/group/config.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -5,7 +5,7 @@
 	<type>vanilla</type>
 	
 	<!-- Provider version -->
-	<version>9.2.1006</version>
+	<version>5.1.920</version>
 	
 	<!-- Provider provisioning -->
 	<!-- <provisioning>PoronVisio</provisioning> -->
--- a/ncdengine/engine/group/ncddevicemgmt.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/group/ncddevicemgmt.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -60,12 +60,7 @@
 USERINCLUDE   ../../provider/deviceinteraction/inc
 
 // System include paths
-#ifndef __SERIES60_30__
-APP_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE /Epoc32/include
-#endif
-
+MW_LAYER_SYSTEMINCLUDE
 
 LIBRARY euser.lib estor.lib 
 LIBRARY bafl.lib charconv.lib efsrv.lib  // needed for ARMV5 building
@@ -91,14 +86,10 @@
 LIBRARY         avkon.lib
 LIBRARY         etel3rdparty.lib 
 LIBRARY         apgrfx.lib
-LIBRARY         swinstcli.lib           // Silent install
-LIBRARY         widgetregistryclient.lib // Widget Registry
 
-#if defined( __SERIES60_30__ ) || defined( __SERIES60_31__ ) || defined( __S60_32__ )
-LIBRARY         javaregistry.lib        // Java Registry
-#else
-LIBRARY         javaregistryclient.lib
-#endif
+LIBRARY         sif.lib // SIF installer
+LIBRARY         scrclient.lib  //Registry client
+
 
 #ifndef __SERIES60_31__
 LIBRARY         sysversioninfo.lib      // SysVersionInfo
--- a/ncdengine/engine/group/ncdutils.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/group/ncdutils.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -61,12 +61,7 @@
 USERINCLUDE   ../../provider/server/inc
 
 // System include paths
-#ifndef __SERIES60_30__
-APP_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE /Epoc32/include
-#endif
-
+MW_LAYER_SYSTEMINCLUDE
 
 LIBRARY euser.lib estor.lib 
 LIBRARY bafl.lib charconv.lib efsrv.lib  // needed for ARMV5 building
--- a/ncdengine/engine/inc/catalogsclientserverserver.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/inc/catalogsclientserverserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -33,6 +33,10 @@
     {
 public:
 
+    /**
+    * Static constructor, leaves pointer on cleanup stack
+    */
+    static CCatalogsClientServerServer* NewL();    
 
     /**
      * Static constructor, leaves pointer on cleanup stack
--- a/ncdengine/engine/src/catalogsclientserverserver.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/src/catalogsclientserverserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,6 +15,7 @@
 *
 */
 
+#include <QCoreApplication>
 
 #include "catalogsclientserverserver.h"
 #include "catalogsclientserverserversession.h"
@@ -60,6 +61,16 @@
 // 
 // ---------------------------------------------------------------------------
 // 
+CCatalogsClientServerServer* CCatalogsClientServerServer::NewL()
+    {
+    CCatalogsClientServerServer* self = CCatalogsClientServerServer::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+// 
 CCatalogsClientServerServer* CCatalogsClientServerServer::NewLC()
     {
     CCatalogsClientServerServer* self = new( ELeave )
@@ -201,7 +212,7 @@
     // No more clients, shutdown
     if ( iSessionCount <= 0 )
         {
-        CActiveScheduler::Stop();
+        QCoreApplication::exit(0);
         }
     }
     
@@ -292,78 +303,6 @@
         }
     }
 
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-// 
-void CCatalogsClientServerServer::ThreadFunctionL()
-    {
-    DLTRACEIN((""));
-    DCHECK_HEAP
-    // Construct an active scheduler for the server
-
-    DLINFO(( "Creating active schduler" ));
-    CActiveScheduler* activeScheduler = new (ELeave) CActiveScheduler;
-    CleanupStack::PushL( activeScheduler );
-
-    // Install active scheduler
-    // No need to check whether an active scheduler is already installed
-    // as this is a new thread, so there won't be one
-    DLINFO(( "Installing active schduler" ));
-    CActiveScheduler::Install( activeScheduler );
-
-    // Construct our server
-    CCatalogsClientServerServer::NewLC(); // anonymous
-
-    DLINFO(( "Opening semaphore" ));
-    RSemaphore semaphore;
-    User::LeaveIfError(
-        semaphore.OpenGlobal( KCatalogsServerSemaphoreName ));
-    
-    DLINFO(( "Signalling and closing semaphore" ));
-    // Semaphore opened ok
-    semaphore.Signal();
-    semaphore.Close();
-
-    // Start handling requests, operation will stop here until
-    // the server dies
-    CActiveScheduler::Start();
-
-    DLINFO(("Server has shut down"));
-
-    // The server has been shut down, clean up
-    CleanupStack::PopAndDestroy( 2, activeScheduler );
-    DLTRACEOUT((""));
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-// 
-TInt CCatalogsClientServerServer::ThreadFunction( TAny* /*aNone*/ )
-    {
-#ifdef CATALOGS_BUILD_CONFIG_HEAP_MARKS    
-    __UHEAP_MARK;
-#endif    
-    DLINIT;
-    
-    DLTRACEIN((""));
-    
-    CTrapCleanup* cleanupStack = CTrapCleanup::New();
-    TRAPD( err, ThreadFunctionL() );
-    
-    DLTRACE(( "err: %d", err ));
-    delete cleanupStack;
-    cleanupStack = NULL;
-    
-    DLTRACEOUT((""));
-
-    DLUNINIT;
-#ifdef CATALOGS_BUILD_CONFIG_HEAP_MARKS    
-    __UHEAP_MARKEND; 
-#endif    
-    return err;    
-    }
 
 // ---------------------------------------------------------------------------
 // 
@@ -440,17 +379,48 @@
 	{
 	// WINS DLL entry-point. Just return the real thread function 
     // cast to TInt
-	return reinterpret_cast<TInt>( 
-	    &CCatalogsClientServerServer::ThreadFunction );
+	return 0;
 	}
 
 // ---------------------------------------------------------------------------
 // 
 // ---------------------------------------------------------------------------
 // 
-GLDEF_C TInt E32Main()
+int main(int argc, char *argv[])
     {
-    return CCatalogsClientServerServer::ThreadFunction( NULL );
+    DLINIT;
+    DCHECK_HEAP
+    int err = KErrNone;
+#ifdef CATALOGS_BUILD_CONFIG_HEAP_MARKS    
+    __UHEAP_MARK;
+#endif 
+        {
+        QCoreApplication app(argc, argv);
+        CCatalogsClientServerServer* server = NULL;
+        TRAP( err, server = CCatalogsClientServerServer::NewL() );
+        if ( err == KErrNone )
+            {
+            DLINFO(( "Opening semaphore" ));
+            RSemaphore semaphore;
+            err = semaphore.OpenGlobal( KCatalogsServerSemaphoreName );
+            if (err == KErrNone )
+                {
+                DLINFO(( "Signalling and closing semaphore" ));
+                // Semaphore opened ok
+                semaphore.Signal();
+                semaphore.Close();
+                err = app.exec();
+                }
+            delete server;
+            }
+    
+        DLINFO(("Server has shut down"));
+        }
+#ifdef CATALOGS_BUILD_CONFIG_HEAP_MARKS    
+    __UHEAP_MARKEND; 
+#endif
+    DLUNINIT;
+    return err;
     }
 
 
--- a/ncdengine/engine/transport/inc/catalogshttpdownload.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/transport/inc/catalogshttpdownload.h	Tue Aug 31 15:21:33 2010 +0300
@@ -19,8 +19,9 @@
 #ifndef C_CATALOGSHTTPDOWNLOAD_H
 #define C_CATALOGSHTTPDOWNLOAD_H
 
-#include <downloadmgrclient.h>
-
+// HLA: #include <DownloadMgrClient.h>
+#include <download.h>
+#include <downloadevent.h>
 #include <s32file.h>
 
 #include "catalogshttpoperation.h"
@@ -33,7 +34,8 @@
 class CCatalogsHttpHeaders;
 class CCatalogsKeyValuePair;
 class CCatalogsHttpDownloadManager;
-
+class CCatalogsHttpQTDownload;
+using namespace WRT;
 /**
 * HTTP file download implementation
 *
@@ -77,7 +79,7 @@
     */
     static CCatalogsHttpDownload* NewLC( 
         CCatalogsHttpDownloadManager& aOwner, 
-        RHttpDownload* aDownload,
+        Download* aDownload,
         const CCatalogsHttpConfig& aConfig );
 
 
@@ -238,7 +240,8 @@
      */
     TInt StatusCode() const;        
     
-    
+    TDownloadDeleteState GetStatusState();
+    Download* GetDownload();
     /**
      * Not supported
      * @see MCatalogsHttpOperation::StatusText()
@@ -282,7 +285,9 @@
         
     TBool HandleHttpError( MCatalogsHttpOperation& aOperation, 
         TCatalogsHttpError aError );
-            
+
+     void HandledownloadEventL(DownloadEvent& aEvent);   
+              
 public:     
 
     /**
@@ -290,8 +295,9 @@
     *
     * @param aEvent Download Manager event
     */
+     /* HLa
     void HandleEventL( THttpDownloadEvent aEvent );
-    
+    */
     
     /**
      * Set file server session
@@ -321,7 +327,7 @@
     */
     CCatalogsHttpDownload( 
         CCatalogsHttpDownloadManager& aOwner, 
-        RHttpDownload* aDownload );
+        Download* aDownload );
     
     /**
     * 2nd phase constructor
@@ -344,9 +350,10 @@
     /**
     * Handles event progress
     * @param aEvent The event that has progressed
-    */            
+    */
+    /* HLa
     void HandleEventProgressL( const THttpDownloadEvent& aEvent );
-
+    */
     
     /**
     * Updates the target filename from Content-Disposition -header
@@ -482,7 +489,7 @@
     /**
      *  Replace current extension at aName with extension given (eExt).
      */
-    void CCatalogsHttpDownload::ReplaceExtension( TDes& aName, const TDesC& aExt );
+    void ReplaceExtension( TDes& aName, const TDesC& aExt );
     
     /**
      * Checks the preset content-type and forces HEAD request if
@@ -509,19 +516,22 @@
 
     CCatalogsHttpDownloadManager& iOwner;
     TCatalogsTransportOperationId iId;  // Operation id
-    RHttpDownload* iDownload;           // Platform download
+    Download* iDownload;           // Platform download
     CCatalogsHttpConfig* iConfig;       // Configuration
     MCatalogsHttpObserver* iObserver;   // Observer        
     TCatalogsHttpEvent iState;          // State of the download
     HBufC8* iUri;                       // Current URI
     HBufC8* iEncodedUri;                // Current URI as encoded
     CCatalogsHttpHeaders* iResponseHeaders; // Headers from HTTP response
+    CCatalogsHttpQTDownload* iQTDownload;
     
     // added request headers not supported by DL man
     HBufC8* iAddedRequestHeaders;       
     TInt iRefCount;        
     TBool iNormalDelete;
-    TBuf8<KMaxContentTypeLength> iContentType;
+
+    // HLa: TBuf8<KMaxContentTypeLength> iContentType;
+    TBuf8<256> iContentType;
         
     // Transaction for retrieving all of the response headers
     MCatalogsHttpOperation* iTransaction;
@@ -555,7 +565,7 @@
     // For managing async pause with dlmgr.
     TBool iPausePending;
     TBool iQueuedResume;
-    
+    TDownloadDeleteState iStatus;
 protected:
 
     // Grant access to UpdateContentType
@@ -563,4 +573,18 @@
     
     };
 
+class  CCatalogsHttpQTDownload: public QObject
+	{
+		 Q_OBJECT
+		 	public:
+		 		CCatalogsHttpQTDownload(CCatalogsHttpDownload* aHttpDownload,Download* aDownload);
+	    public slots:
+    	void downloadEventHandler(DownloadEvent*);
+    	void downloadErrorHandler(Error);
+	    public:
+	    	CCatalogsHttpDownload* iCatalogsHttpDownload;
+	    	Download* iDownload;           // Platform download
+	};
+	
+	
 #endif // C_CATALOGSHTTPDOWNLOAD_H
--- a/ncdengine/engine/transport/inc/catalogshttpdownloadmanagerimpl.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/transport/inc/catalogshttpdownloadmanagerimpl.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -19,13 +19,19 @@
 #ifndef C_CATALOGSHTTPDOWNLOADMANAGER_H
 #define C_CATALOGSHTTPDOWNLOADMANAGER_H
 
-#include <downloadmgrclient.h>
+// #include <DownloadMgrClient.h>
 
 #include "catalogstransportoperationid.h"
 #include "catalogshttpsession.h"    // RCatalogsHttpOperationArray
 #include "catalogshttpsessionmanager.h"
+
 #include "catalogsconnectionmethod.h"
 #include "catalogsaccesspointobserver.h"
+#include <download.h>
+#include <downloadmanager.h>
+#include <QObject>
+
+#include <f32file.h> //HLa
 
 class MCatalogsHttpConfig;
 class CCatalogsHttpConfig;
@@ -38,16 +44,22 @@
 class CCatalogsHttpSession;
 class CCatalogsConnection;
 class CCatalogsNetworkManager;
+class CCatalogsHttpQTDownloadManager;
+using namespace WRT;
+
+const TInt KNCDEngineAppID = 0X2002E685;
+
 
 /**
  * HTTP file download manager
  *
  */
 class CCatalogsHttpDownloadManager :       
+
     public CActive, 
-    public MHttpDownloadMgrObserver,
     public MCatalogsAccessPointObserver  
     {
+  
     public: // Constructors and destructor
     
         /**
@@ -69,7 +81,7 @@
         * Destructor
         */
         virtual ~CCatalogsHttpDownloadManager();
-        
+         
     public: // New methods
     
 	    /**
@@ -159,7 +171,7 @@
 
         void AddRef();
 
-
+		DownloadManager* GetDownloadManager();
         TInt Release();    
         
         void SetConnectionMethodL( 
@@ -202,15 +214,9 @@
         
         TInt NewDownloadId();
         
-        RHttpDownload& CreatePlatformDownloadL( const TDesC8& aUrl );
-    
-    public: // From MHttpDownloadMngrObserver
-     
-        /**
-        * Handles events from Download manager 
-        */
-        virtual void HandleDMgrEventL( RHttpDownload& aDownload,
-			THttpDownloadEvent aEvent );    
+       WRT::Download& CreatePlatformDownloadL( const TDesC8& aUrl );
+      void downloadMgrEventRecieved(DownloadManagerEvent* dlmEvent);
+
 
 
     public: // from MCatalogsAccessPointObserver
@@ -259,11 +265,12 @@
         * @param aArray Array to search from
         * @param aDownload Download to find
         * @return Index to the download in iDownloads
-        */      
+        */
+        /* HLa
         TInt FindInDownloads( 
             const RCatalogsHttpOperationArray& aArray,
             RHttpDownload* aDownload ) const;
-
+        */
 
         /**
         * Searches for the given download from the given array and returns
@@ -283,6 +290,7 @@
         /**
          * Download events
          */
+        /* HLa
         class TDownloadEvent        
             {
         public:
@@ -295,7 +303,7 @@
 			        {
 			        }
             };
-
+          */
 
         /**
          * Sets this object active if event queue has unhandled events
@@ -306,18 +314,19 @@
          * Removes events from event queue that belong to the same 
          * RHttpDownload as aEvent
          */
+        /*
         void RemoveUnhandledEvents( 
             const TDownloadEvent& aEvent );
 
         void RemoveUnhandledProgressEvents( 
             const TDownloadEvent& aEvent );
-
+        */
+        
         /**
          * Deletes downloads that have not been paused by the user
          */
         void DeleteHangingDownloads();
-        
-        
+
     private:
     
         MCatalogsHttpSessionManager& iManager;
@@ -326,8 +335,9 @@
         CCatalogsHttpConnectionManager& iConnectionManager;
         CCatalogsNetworkManager* iNetworkManager; // Not owned
         TInt32 iSessionId;
-        RHttpDownloadMgr iDmgr;
-        
+        DownloadManager *iDmgr;
+        CCatalogsHttpQTDownloadManager* iQTmgr;
+        WRT::Download* iDownload;           // Platform download
         // All downloads except those that are in Restored
         RCatalogsHttpOperationArray iDownloads;
         RCatalogsHttpOperationArray iRestoredDownloads;
@@ -340,8 +350,22 @@
         RFs iFs;
         TCatalogsConnectionMethod iCurrentAp;
 
-        RArray<TDownloadEvent> iEventQueue;
+        // RArray<TDownloadEvent> iEventQueue;  //HLa
         TInt iCurrentDlId; // id of the last created download
     };
 
-#endif // C_CATALOGSHTTPDOWNLOADMANAGER_H
+
+
+class  CCatalogsHttpQTDownloadManager: public QObject
+	{
+		 Q_OBJECT
+		 	public:
+		 		CCatalogsHttpQTDownloadManager(CCatalogsHttpDownloadManager* aDownloadManager,DownloadManager* aDmgr);
+	    public slots:
+    	void downloadMgrEventRecieved(DownloadManagerEvent*);
+	    public:
+	    	CCatalogsHttpDownloadManager* iDownloadManager;
+	    	DownloadManager* iDmgr ;
+	};
+	
+	#endif // C_CATALOGSHTTPDOWNLOADMANAGER_H
\ No newline at end of file
--- a/ncdengine/engine/transport/inc/catalogshttpsessionmanager.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/transport/inc/catalogshttpsessionmanager.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -42,7 +42,7 @@
         * @param aOperation The operation
         * @return 
         */
-        virtual TInt StartOperation( MCatalogsHttpOperation* aOperation ) = 0;
+        virtual TInt StartOperation( MCatalogsHttpOperation* aOperation, TBool aConnect ) = 0;
         virtual TInt PauseOperation( MCatalogsHttpOperation* aOperation ) = 0;
         virtual TInt CompleteOperation( MCatalogsHttpOperation* aOperation ) = 0;
         
--- a/ncdengine/engine/transport/inc/catalogshttpsessionmanagerimpl.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/transport/inc/catalogshttpsessionmanagerimpl.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -79,7 +79,7 @@
         /**
         * @see MCatalogsHttpSessionManager::StartOperation()
         */        
-        TInt StartOperation( MCatalogsHttpOperation* aOperation );
+        TInt StartOperation( MCatalogsHttpOperation* aOperation, TBool aConnect );
 
 
         /**
--- a/ncdengine/engine/transport/inc/catalogshttptypes.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/transport/inc/catalogshttptypes.h	Tue Aug 31 15:21:33 2010 +0300
@@ -19,7 +19,7 @@
 #ifndef T_CATALOGSHTTPTYPES_H
 #define T_CATALOGSHTTPTYPES_H
 
-#include <httpdownloadmgrcommon.h>
+// #include <HttpDownloadMgrCommon.h>  // HLa: DLMgr remove
 
 class MCatalogsHttpOperation;
 
@@ -342,6 +342,7 @@
 /**
 * Maximum length for content types
 */
+const TUint KMaxContentTypeLength = 256; // HLa: DLMgr remove
 const TUint KCatalogsHttpMaxContentTypeLength = KMaxContentTypeLength;
 
 
--- a/ncdengine/engine/transport/src/catalogshttpdownload.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/transport/src/catalogshttpdownload.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -23,6 +23,13 @@
 #include <DocumentHandler.h>
 #include <apmstd.h> // TDataType
 #include <escapeutils.h>
+#include <downloadmanager.h>
+#include <cmmanager.h>
+#include <cmdestination.h>
+#include <uri8.h> 
+#include <QtGlobal>
+#include <QStringList>
+#include <xqconversions.h>
 
 #include "catalogshttpdownloadmanagerimpl.h"
 #include "catalogshttpobserver.h"
@@ -95,7 +102,7 @@
 //	
 CCatalogsHttpDownload* CCatalogsHttpDownload::NewLC( 
     CCatalogsHttpDownloadManager& aOwner, 
-    RHttpDownload* aDownload,
+    Download* aDownload,
     const CCatalogsHttpConfig& aConfig )
     {
     CCatalogsHttpDownload* self = new( ELeave ) CCatalogsHttpDownload( 
@@ -140,7 +147,7 @@
         else 
             {
             DLTRACE(( "Deleting download" ));
-            iDownload->Delete();                        
+             iOwner.GetDownloadManager()->removeOne(iDownload);                      
             
             if ( iState.iOperationState != ECatalogsHttpOpCompleted ) 
                 {
@@ -244,8 +251,8 @@
         {
         iObserver = NULL;
         TInt32 state = 0;
-        iDownload->GetIntAttribute( EDlAttrState, state );
-        
+
+         state = (Download::State)iDownload->attribute(State).toInt();
         if ( IsOneOf( 
                 static_cast<THttpDownloadState>( state ), 
                 EHttpDlCreated,
@@ -473,7 +480,14 @@
         TInt err = KErrNone;
         if ( iDownload ) 
             {
-            err = iDownload->Pause();
+					    try
+							{
+							iDownload->pause();
+							}
+			        catch(const std::exception& exception)
+			        	{
+							 err = qt_symbian_exception2Error(exception);
+			        	}
             }
         
         DLTRACE(("Pause err: %d", err ));
@@ -680,7 +694,7 @@
     // client-server communication with the Download manager server
     if ( iDownload && iContentSize <= 0 ) 
         {                
-        iDownload->GetIntAttribute( EDlAttrLength, iContentSize );    
+        iContentSize = iDownload->attribute(TotalSize).toInt();
         DLTRACE(("Content size from download: %i", iContentSize ));
         }
     return iContentSize;
@@ -706,7 +720,8 @@
     TBool pausable = ETrue;
     if ( iDownload ) 
         {        
-        iDownload->GetBoolAttribute( EDlAttrPausable, pausable );
+
+        pausable=iDownload->attribute(Pausable).toBool();
         }
     return pausable;
     }
@@ -799,7 +814,8 @@
     iConfig->InternalizeL( aStream );
     HBufC8* contentType = NULL;
     InternalizeDesL( contentType, aStream );
-    if ( contentType->Length() > KMaxContentTypeLength ) 
+    // HLa if ( contentType->Length() > KMaxContentTypeLength ) 
+    if ( contentType->Length() > 256 )
         {
         DeletePtr( contentType );
         DLERROR(("Content type was too long, leaving with KErrCorrupt"));
@@ -839,7 +855,152 @@
     return KErrNone;
     }
 
+void CCatalogsHttpDownload::HandledownloadEventL(DownloadEvent& aEvent)
+{
+	
+	switch(aEvent.type())
+	{
+		
+		case DownloadEvent::Started:
+		
+			break;
+		
+		case DownloadEvent::Error:	
+		case DownloadEvent::Failed:
+		case DownloadEvent::NetworkLoss:    
+		case DownloadEvent::ConnectionNeeded:  
+		case DownloadEvent::ConnectionDisconnected:    
+			{
+		    TInt32 errorId = -1;
+		    if ( aEvent.type() == DownloadEvent::NetworkLoss  || 
+		         aEvent.type() == DownloadEvent::ConnectionNeeded ||
+		         aEvent.type() == DownloadEvent::ConnectionDisconnected )
+		        {
+		        errorId = WRT::ConnectionFailed;
+		        }
+            SetTransferring( EFalse );
+            errorId = iDownload->attribute(LastError).toInt();
+            if ( errorId > 0 )
+                {
+                // Symbian error codes are always negative numbers 
+                errorId =  -1 * errorId;
+                }
+                                    
+            /*if ( ( errorId == ConnectionFailed || 
+                   errorId == TransactionFailed )) 
+                {
+                DLTRACE(("Try to reconnect"));
+                iReconnectWhenFail = EFalse;
+                iDownload->start();
+                break;
+                }
+            else if ( errorId == ContentExpired ||
+                      errorId == PartialContentModified )
+                {
+                DLTRACE(("Content has changed, reset and restart"));
+                iReconnectWhenFail = EFalse;
+                iDownload->cancel();
+                iDownload->start();
+                break;
+                }*/
+            iState.iOperationState = ECatalogsHttpOpFailed;
+            
+            TBool deleted = EFalse;
+            if ( iObserver ) 
+                {
+                // Determine whether failure was due to a HTTP error or some
+                // other error. 
+                //if ( errorId >= 400 ) 
+                //    {
+               //     deleted = iObserver->HandleHttpError( 
+               //     *this, TCatalogsHttpError(
+              //      ECatalogsHttpErrorHttp, 
+              //      errorId ) );
+              //      }
+              //  else 
+                    {
+                    AddRef();
+                    //iOwner.ConnectionManager().ReportConnectionError( 
+                    //               TCatalogsConnectionMethod(), errorId );
+                                
+                    if ( iRefCount > 1 )
+                        {                       
+                        deleted = iObserver->HandleHttpError( 
+                        *this, TCatalogsHttpError( 
+                        ECatalogsHttpErrorGeneral, errorId ) );
+                        }
+                    else 
+                        {
+                        deleted = ETrue;
+                        }
+                    Release();
+                    }
+                }
+            if ( !deleted )
+                {                
+                iOwner.CompleteOperation( this );
+                iState.iProgressState = ECatalogsHttpDone;
+                }
+			}
+			break;
+		
+		case DownloadEvent::Cancelled:
+		
+			break;
+		case DownloadEvent::ContentTypeChanged:
+			
+			break;
+		case DownloadEvent::HeadersReceived:
+			{
+					// Read the response headers from platform DL manager
+			UpdateResponseHeadersL();		
+			UpdateContentType();
+		  }
+			break;
+	
+	  
+		case DownloadEvent::Completed:
+			  {            
+            // move/rename temp file as the target file
+            TRAPD( err, MoveFileL() );
+            
+            // DLMAIN-546, delete DL manager's download before starting
+            // the next one so that downloads don't jam, again
+            if ( iDownload ) 
+                {   
+                	iTransferredSize = iDownload->attribute(DownloadedSize).toInt();             
+         
+                    
+                DLTRACE(("Deleting download"));                
+                DeletePlatformDownload();                
+                }
+            iState.iProgressState = ECatalogsHttpDone;
+            iOwner.CompleteOperation( this );
+            iState.iOperationState = ECatalogsHttpOpCompleted;
+            
+            if ( iObserver ) 
+                {                
+                iObserver->HandleHttpEventL( *this, iState );
+                }
 
+	     }
+			break;
+			
+		case DownloadEvent::InProgress:
+		    {
+		    iTransferredSize  =  iDownload->attribute(DownloadedSize).toInt();
+		    if ( iObserver ) 
+		        {                
+		        iObserver->HandleHttpEventL( *this, iState );
+		        }
+		    }
+		    break;
+		  
+	  default:
+            {
+            }		  
+	};
+}
 // ---------------------------------------------------------------------------
 // Handles events from the transaction
 // ---------------------------------------------------------------------------
@@ -991,6 +1152,8 @@
 // Handles events from the download manager
 // ---------------------------------------------------------------------------
 //	
+
+/* HLa
 void CCatalogsHttpDownload::HandleEventL( THttpDownloadEvent aEvent )
     {
     DLTRACEIN((""));
@@ -1025,20 +1188,20 @@
     
 	TInt32 statusCode = -1;
 	
-	iDownload->GetIntAttribute( EDlAttrStatusCode, statusCode );
-	DLINFO( ("Response status: %i", statusCode ) );
+	 statusCode  = (Download::State)iDownload->attribute(WRT::State).toInt(); 
+	 DLINFO( ("Response status: %i", statusCode ) );
 
 #ifdef CATALOGS_BUILD_CONFIG_DEBUG    
     TInt32 errorId = 0;
+		errorId=iDownload->attribute(LastError).toInt();
 
-	iDownload->GetIntAttribute( EDlAttrErrorId, errorId );
 	DLINFO( ("Error id: %i", errorId ) );
 	    
 #endif
 
     TInt32 globalErrorId = 0;    
-	iDownload->GetIntAttribute( 
-	    EDlAttrGlobalErrorId, globalErrorId );
+   globalErrorId= iDownload->attribute(LastError).toInt();
+
 	DLINFO( ("Global error id: %i", globalErrorId ) );
 	
 
@@ -1085,7 +1248,7 @@
                 {
                 DLTRACE(("Try to reconnect"));
                 iReconnectWhenFail = EFalse;
-                iDownload->Start();                
+                iDownload->start();                
                 break;
                 }
             
@@ -1143,9 +1306,9 @@
             // DLMAIN-546, delete DL manager's download before starting
             // the next one so that downloads don't jam, again
             if ( iDownload ) 
-                {                
-                iDownload->GetIntAttribute( 
-                    EDlAttrDownloadedSize, iTransferredSize );   
+                {   
+                	iTransferredSize = iDownload->attribute(DownloadedSize).toInt();             
+         
                     
                 DLTRACE(("Deleting download"));                
                 DeletePlatformDownload();                
@@ -1179,7 +1342,8 @@
             DLTRACE(( "Download failed" ));
             TInt32 errorId = -1;
             SetTransferring( EFalse );
-        	iDownload->GetIntAttribute( EDlAttrErrorId, errorId );
+            errorId = iDownload->attribute(LastError).toInt();
+        
         	DLINFO( ("Error id: %i", errorId ) );
 
         	DLINFO( ("Global error id: %i", globalErrorId ) );
@@ -1190,7 +1354,7 @@
                 {
                 DLTRACE(("Try to reconnect"));
                 iReconnectWhenFail = EFalse;
-                iDownload->Start();
+                iDownload->start();
                 break;
                 }
             else if ( errorId == EContentExpired ||
@@ -1198,8 +1362,8 @@
                 {
                 DLTRACE(("Content has changed, reset and restart"));
                 iReconnectWhenFail = EFalse;
-                iDownload->Reset();
-                iDownload->Start();
+                iDownload->cancel();
+                iDownload->start();
                 break;
                 }
             
@@ -1282,6 +1446,7 @@
         * Download process can be paused again. This event only occurs after
         * EHttpDlNonPausable. 
         */	
+/* HLa
         case EHttpDlPausable:
             {
             DLTRACE(( "Pausable" ));
@@ -1317,13 +1482,14 @@
             }	
         }
     }
-
+*/
 
 
 // ---------------------------------------------------------------------------
 // 
 // ---------------------------------------------------------------------------
 //	
+/*
 void CCatalogsHttpDownload::HandleEventProgressL( const 
     THttpDownloadEvent& aEvent )
     {
@@ -1388,8 +1554,7 @@
 		    if ( !iPaused ) 
 		        {		  
                 TInt32 globalErrorId = 0;
-            	iDownload->GetIntAttribute( 
-            	    EDlAttrGlobalErrorId, globalErrorId );
+            	    globalErrorId = iDownload->attribute(LastError).toInt();
             	DLINFO( ("Global error id: %i", globalErrorId ) );
 
                 if ( globalErrorId == KErrCancel ) 
@@ -1495,7 +1660,8 @@
 		    iReconnectCount = KReconnectAttempts;
 
 		    TInt32 size = 0;
-	        iDownload->GetIntAttribute( EDlAttrDownloadedSize, size );   
+		     size = iDownload->attribute(DownloadedSize).toInt();
+
 	        DLTRACE(("Transferred size from download: %i", size));
 
 	        if ( size != iTransferredSize ) 
@@ -1597,7 +1763,7 @@
 			break;
 		}
     }
-    
+ */   
 
 
 // ---------------------------------------------------------------------------
@@ -1636,7 +1802,7 @@
 //	
 CCatalogsHttpDownload::CCatalogsHttpDownload( 
     CCatalogsHttpDownloadManager& aOwner, 
-    RHttpDownload* aDownload ) :
+    Download* aDownload ) :
     iOwner( aOwner ), 
     iDownload( aDownload ), 
     iState( ECatalogsHttpOpCreated, ECatalogsHttpNone ),
@@ -1659,7 +1825,8 @@
         {        
         // id part will be updated from disk
         iId = TCatalogsTransportOperationId( iOwner.SessionId(), KErrNotFound );
-
+				iQTDownload = new CCatalogsHttpQTDownload(this,iDownload);
+				 
         UpdateSecondaryIdL();
         
         User::LeaveIfError( SetDeleteState( EDownloadCanBeDeleted ) );
@@ -1700,8 +1867,12 @@
         {
         // Download always exists when this is called so no need to check
         DLTRACE(("Updating the content type"));
-        iDownload->GetStringAttribute( EDlAttrContentType,
-            iContentType );
+        QString contentType;
+        contentType= iDownload->attribute(WRT::ContentType).toString();
+        // HLa TBuf<KMaxContentTypeLength>  ContentType(contentType.utf16());
+        TBuf<256>  ContentType(contentType.utf16());
+        	iContentType.Copy(ContentType);
+   
         }
     DLTRACEOUT(("Content-type: %S", &iContentType ));
     }
@@ -1820,10 +1991,18 @@
     // Get the current url of the download
     RBuf8 buf;
     CleanupClosePushL( buf );
+    const TInt KMaxUrlLength = 2048;
     buf.CreateL( KMaxUrlLength );
-    
-    User::LeaveIfError( iDownload->GetStringAttribute( EDlAttrCurrentUrl,
-        buf ) );
+    QString string;
+	try
+	{
+    string = iDownload->attribute(SourceUrl).toString();
+	}
+    catch(const std::exception& exception)
+    	{
+			 qt_symbian_exception2LeaveL(exception);
+    	}
+
     
     // DL manager has the encoded URI
     AssignDesL( iEncodedUri, buf );
@@ -1867,8 +2046,8 @@
             }
         else 
             {
-            User::LeaveIfError( iDownload->SetStringAttribute(
-                predefined, headers[i]->Value() ) );
+/*            User::LeaveIfError( iDownload->SetStringAttribute(
+                predefined, headers[i]->Value() ) );*/
             }
         }
 
@@ -1877,8 +2056,8 @@
     if ( iAddedRequestHeaders ) 
         {
         DLTRACE(( "added request headers: %S", iAddedRequestHeaders ));
-        User::LeaveIfError( iDownload->SetStringAttribute(
-            EDlAttrRequestHeaderAddon, *iAddedRequestHeaders ) );
+     /*   User::LeaveIfError( iDownload->SetStringAttribute(
+            EDlAttrRequestHeaderAddon, *iAddedRequestHeaders ) );*/
         delete iAddedRequestHeaders;
         iAddedRequestHeaders = NULL;
         }    
@@ -2043,6 +2222,7 @@
 TUint CCatalogsHttpDownload::MatchWithPredefinedRequestHeader( 
     const TDesC8& aHeader ) const
     {
+    /* HLa
     if ( aHeader.CompareF( KHttpRequestAcceptHeader ) == 0 ) 
         {
         return EDlAttrRequestAccept;
@@ -2087,7 +2267,7 @@
         {
         return EDlAttrRequestVary;
         }
-    
+    */
     return 0;
     }
     
@@ -2100,6 +2280,7 @@
 TUint CCatalogsHttpDownload::MatchWithPredefinedGeneralHeader( 
     const TDesC8& aHeader ) const
     {
+    /* HLa
     if ( aHeader.CompareF( KHttpGeneralCacheControlHeader ) == 0 ) 
         {
         return EDlAttrGeneralCacheControl;
@@ -2119,7 +2300,8 @@
     else if ( aHeader.CompareF( KHttpGeneralWarningHeader ) == 0 ) 
         {
         return EDlAttrGeneralWarning;
-        }    
+        }
+        */    
     return 0;
     }
     
@@ -2132,6 +2314,7 @@
 TUint CCatalogsHttpDownload::MatchWithPredefinedEntityHeader( 
     const TDesC8& aHeader ) const
     {
+    /*
     if ( aHeader.CompareF( KHttpEntityAllowHeader ) == 0 ) 
         {
         return EDlAttrEntityAllow;
@@ -2156,6 +2339,7 @@
         {
         return EDlAttrEntityLastModified;
         }
+        */
     return 0;
     }
         
@@ -2195,6 +2379,9 @@
 
     TPtr8 ptr( aTarget->Des() );
     
+    _LIT8( KHttpFieldSeparator, "\n"); // HLa
+    const TInt KColon( ':' ); // HLa
+    
     if( newSize ) 
         {
         DLTRACE( ("Appending to existing headers") );
@@ -2245,7 +2432,25 @@
     
     TRAPD( err, 
         {
-        iOwner.SetConnectionL( *iConnection );
+        if ( Config().ConnectionMethod().iType == ECatalogsConnectionMethodTypeDestination )
+            {
+            RCmManager cmManager;
+            CleanupClosePushL( cmManager );
+            cmManager.OpenL();
+            RCmDestination dest = cmManager.DestinationL( Config().ConnectionMethod().iId );
+            CleanupClosePushL( dest );
+            HBufC* temp = dest.NameLC();    
+            QString destname;
+            destname = XQConversions::s60DescToQString( *temp );
+            CleanupStack::PopAndDestroy( temp );
+            CleanupStack::PopAndDestroy( &dest ); 
+            CleanupStack::PopAndDestroy( &cmManager ); 
+            if ( iOwner.GetDownloadManager() )
+                {
+                iOwner.GetDownloadManager()->attribute(AccessPoints).toStringList();
+                iOwner.GetDownloadManager()->setAttribute(AccessPoint, destname);
+                }
+            }
             
         // Update the configuration 
         if ( iState.iProgressState == ECatalogsHttpNone ) 
@@ -2254,10 +2459,17 @@
             InitializeDownloadL();
             }
         });
-    
+   
     if ( err == KErrNone ) 
         {
-        err = iDownload->Start();
+						 try
+							{
+							iDownload->start();
+							}
+			        catch(const std::exception& exception)
+			        	{
+							 qt_symbian_exception2LeaveL(exception);
+			        	}
         }
     return err;
     }
@@ -2471,13 +2683,17 @@
     TInt err = KErrNone;
     if ( iDownload ) 
         {    
-        err = iDownload->SetIntAttribute( EDlAttrUserData, aStatus );
+
+        iStatus = aStatus;
         }
     
     return err;
     }
 
-
+CCatalogsHttpDownload::TDownloadDeleteState CCatalogsHttpDownload::GetStatusState()
+	{
+		return iStatus;
+	}
 // ---------------------------------------------------------------------------
 // Gets delete status and download id from the platform download
 // ---------------------------------------------------------------------------
@@ -2491,7 +2707,8 @@
     TInt err = KErrNotReady;
     if ( iDownload ) 
         {
-        err = iDownload->GetIntAttribute( EDlAttrUserData, data );
+
+        err = iStatus;
         DLTRACE(("Data: %d", data));
         aStatus = static_cast<TDownloadDeleteState>( data );
         }
@@ -2570,10 +2787,18 @@
             UpdateRequestHeadersL();                    
             }
                 
-        // Check if the download has been set progressive
-        TBool progressive = EFalse;
-        User::LeaveIfError( iDownload->GetBoolAttribute( 
-            EDlAttrProgressive, progressive ) );
+        // Check if the 
+        //download has been set progressive
+        /* MTA
+         * TBool progressive = EFalse;
+		try
+		{
+		         progressive =iDownload->attribute(Progressive).toBool(); 
+		}
+        catch(const std::exception& exception)
+        	{
+				 qt_symbian_exception2LeaveL(exception);
+        	}  
 
         
         // We want to have progressive downloads because then DL manager uses
@@ -2591,18 +2816,34 @@
              !iFileIsSet ) 
             {
             DLTRACE(("Setting download as progressive"));
-            User::LeaveIfError( iDownload->SetBoolAttribute( 
-                EDlAttrProgressive, ETrue ) );
-            }
+						try
+						{
+						   iDownload->setAttribute(Progressive,ETrue);
+						}
+						catch(const std::exception& exception)
+						{
+							qt_symbian_exception2LeaveL(exception);
+						}  
+						}
         
         // Doesn't pause the download after content type has been received
-        User::LeaveIfError( iDownload->SetBoolAttribute( 
-            EDlAttrNoContentTypeCheck, ETrue ) );
-
+					try
+					{
+						iDownload->setAttribute(Progressive,ETrue);
+					}
+					catch(const std::exception& exception)
+					{
+						qt_symbian_exception2LeaveL(exception);
+					}  
+**/
         if ( !iFileIsSet )
             {
             DLTRACE(("Setting filehandle to download"));
-            User::LeaveIfError( iDownload->SetFileHandleAttribute( file ) );
+           // User::LeaveIfError( iDownload->SetFileHandleAttribute( file ) );
+            file.Close();
+            TInt ret = BaflUtils::DeleteFile( iFs, *iTempFilename );
+            iDownload->setAttribute(DestinationPath,XQConversions::s60DescToQString(iConfig->Directory()));
+            iDownload->setAttribute(FileName, XQConversions::s60DescToQString(*iTempFilename));
             iFileIsSet = ETrue;                        
             }
 
@@ -2610,7 +2851,10 @@
         }        
     }
 
-
+Download* CCatalogsHttpDownload::GetDownload()
+{
+	return iDownload;
+}
 // ---------------------------------------------------------------------------
 // Delete platform download and reset secondary id
 // ---------------------------------------------------------------------------
@@ -2619,7 +2863,7 @@
     {
     if ( iDownload )
         {
-        iDownload->Delete();
+        iOwner.GetDownloadManager()->removeOne(iDownload);
         iDownload = NULL;
         iId.SetSecondaryId( KErrNotFound );
         }
@@ -2633,8 +2877,7 @@
 void CCatalogsHttpDownload::UpdateSecondaryIdL()
     {
     TInt32 secondaryId = KErrNotFound;
-    User::LeaveIfError( 
-        iDownload->GetIntAttribute( EDlAttrId, secondaryId ) );
+    secondaryId = iDownload->id();
     iId.SetSecondaryId( secondaryId );    
     }
 
@@ -2675,3 +2918,22 @@
        aName.Append( aExt );
        }
     }
+    
+CCatalogsHttpQTDownload::CCatalogsHttpQTDownload(CCatalogsHttpDownload* aHttpDownload,Download* aDownload)
+	{
+		iCatalogsHttpDownload = aHttpDownload;
+		iDownload = aDownload;
+		connect(iDownload, SIGNAL(downloadEvent(DownloadEvent*)), this,SLOT(downloadEventHandler(DownloadEvent*)));
+        connect(iDownload, SIGNAL(downloadError(Error)), this,SLOT(downloadErrorHandler(Error)));
+	}
+	
+void CCatalogsHttpQTDownload::downloadEventHandler(DownloadEvent* aEvent)
+	{
+		iCatalogsHttpDownload->HandledownloadEventL(*aEvent);
+	}
+void CCatalogsHttpQTDownload::downloadErrorHandler(Error)
+	{
+		//iCatalogsHttpDownload->HandledownloadEventL(*aEvent);
+	}
+
+
--- a/ncdengine/engine/transport/src/catalogshttpdownloadmanagerimpl.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/transport/src/catalogshttpdownloadmanagerimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -32,7 +32,11 @@
 #include "catalogsconnection.h"
 
 #include "catalogsdebug.h"
-
+#include <QString>
+#include <QVector>
+#include <QList>
+#include <downloadevent.h>
+#include <xqconversions.h>
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------------------------
@@ -59,6 +63,7 @@
             
     DLTRACE(("constructor ok"));
     CleanupStack::PushL( self );
+   
     self->ConstructL( aCleanup );
     CleanupStack::Pop( self );
     return self;
@@ -73,7 +78,7 @@
     DLTRACEIN( ( "" ) );
 
     Cancel();
-    iEventQueue.Close();
+    // HLa iEventQueue.Close();
 
     // Release downloads
     TInt count = iDownloads.Count() - 1;
@@ -102,15 +107,17 @@
         iNetworkManager->RemoveObserver( *this );
         }
 
-    if ( iDmgr.Handle() ) 
+
+    if ( iDmgr ) 
         {
         DLTRACE(("We were connected to DL manager"));
         DeleteHangingDownloads();
         }
-        
+      
     // Close download manager session    
-    iDmgr.Close();
+    iDmgr->removeAll();
     
+   
     delete iDefaultConfig;
     iManager.Release();
     
@@ -124,24 +131,20 @@
     {
     DLTRACEIN((""));
     // This pauses all downloads in addition to disconnecting
-    iDmgr.Disconnect();
-    const CDownloadArray& downloads( iDmgr.CurrentDownloads() );
-
-    TInt count = downloads.Count();
-    while( count-- )
-        {                         
-        RHttpDownload& dl = *( downloads[ count ] );
-        TInt32 deleteStatus = 0;
-        dl.GetIntAttribute( EDlAttrUserData, deleteStatus );
-        DLTRACE(("DeleteStatus: %d", deleteStatus ));
-        
-        if ( deleteStatus == CCatalogsHttpDownload::EDownloadCanBeDeleted ) 
+ 	iDmgr->pauseAll(); 
+   TInt count = iDownloads.Count();
+    for ( TInt i = 0; i < count; ++i )
+        {
+         TInt32 deleteStatus = 0;
+         deleteStatus = dynamic_cast<CCatalogsHttpDownload*>(iDownloads[i])->GetStatusState();
+       
+         if ( deleteStatus == CCatalogsHttpDownload::EDownloadCanBeDeleted ) 
             {
             DLTRACE(("Deleting download"));
-            dl.Delete();
+            iDmgr->removeOne(dynamic_cast<CCatalogsHttpDownload*>(iDownloads[i])->GetDownload());
             }
+        }        
         
-        }
     }
 
 // ---------------------------------------------------------------------------
@@ -172,16 +175,18 @@
     {
     DLTRACEIN((""));
     // Create a new download
+    QString Url = XQConversions::s60Desc8ToQString(aUrl);  
+    iDownload = iDmgr->createDownload( Url );
+    
     CCatalogsHttpDownload* dl = CCatalogsHttpDownload::NewLC( 
         *this,
         //download,
-        NULL,
+        iDownload,
         *iDefaultConfig );
     
     dl->SetUriL( aUrl );
     dl->SetFileServerSession( iFs );
-    
-    // If the given observer != NULL, set it as the observer for the download
+        // If the given observer != NULL, set it as the observer for the download
     if ( aObserver ) 
         {        
         dl->Config().SetObserver( aObserver );        
@@ -207,6 +212,7 @@
     TInt count = iDownloads.Count();
     for ( TInt i = 0; i < count; ++i )
         {
+        	
         if ( iDownloads[i]->OperationId() == aId ) 
             {
             return iDownloads[i];
@@ -396,12 +402,19 @@
     DLTRACEIN((""));
     if ( aMethod != iCurrentAp )
         {
+		try
+		{
         DLTRACE( ( "Set AP, type: %d, id: %u, apn: %d", 
             aMethod.iType, aMethod.iId, aMethod.iApnId ));
-        User::LeaveIfError( iDmgr.Disconnect() );    
-        User::LeaveIfError( iDmgr.SetIntAttribute( EDlMgrIap, aMethod.iApnId ) );
+		 iDmgr->pauseAll(); 
+		 
         iCurrentAp = aMethod;
         DLTRACE(("AP set"));
+		}
+		 catch(const std::exception& exception)
+		 {
+		 qt_symbian_exception2LeaveL(exception);
+		 }
         }    
     }
 
@@ -460,40 +473,23 @@
     {
     return iSessionId;
     }
-    
-    
+
 // ---------------------------------------------------------------------------
 // Handles download manager events
 // ---------------------------------------------------------------------------
-//
-void CCatalogsHttpDownloadManager::HandleDMgrEventL( RHttpDownload& aDownload,
-	THttpDownloadEvent aEvent )
-    {
-    DLTRACEIN(( "Dl state: %i, pr: %i, DL: %x", aEvent.iDownloadState, 
-        aEvent.iProgressState, &aDownload ));
-        
-    TDownloadEvent event( aDownload, aEvent );
+//    
+ void CCatalogsHttpDownloadManager::downloadMgrEventRecieved(WRT::DownloadManagerEvent* dlmEvent)
+  {
+  	
+  	switch(dlmEvent ->type())
+		{
+ 
+    default:
+    	break;
+		};
 
-    if ( IsOneOf( aEvent.iDownloadState, EHttpDlDeleted, EHttpDlDeleting ) )
-        {
-        DLTRACEOUT(("Download was deleted"))
-        RemoveUnhandledEvents( event );
-        }
-    // Handle everything but Download name change events
-    else if ( aEvent.iProgressState != EHttpProgDlNameChanged )     
-        {        
-        DLTRACE(("Adding event to queue"));        
-        
-        if ( aEvent.iProgressState == EHttpProgResponseBodyReceived ) 
-            {
-            // Filter unhandled progress events from the queue
-            RemoveUnhandledProgressEvents( event );
-            }
-        
-        iEventQueue.AppendL( event );    
-        ContinueEventHandling();    
-        }
-    }
+  	
+  }  
 
 
 // ---------------------------------------------------------------------------
@@ -507,8 +503,19 @@
     DLTRACEIN((""));
     if ( aEvent == ECatalogsAccessPointClosed ) 
         {
+		try
+		{
         DLTRACE(("Disconnecting download manager"));
-        User::LeaveIfError( iDmgr.Disconnect() );
+
+		iDmgr->pauseAll();
+	}
+
+ 		catch(const std::exception& exception) 
+               { 
+               qt_symbian_exception2LeaveL(exception); 
+               } 
+            
+
         }
     }
 
@@ -556,6 +563,11 @@
     
     // shared so that RFiles can be given to Download manager
     User::LeaveIfError( iFs.ShareProtected() ); 
+   	
+   	QString DmgrUid(QString::number(KNCDEngineAppID));
+    iDmgr =  new DownloadManager(DmgrUid);
+    iDmgr->initialize();
+    iQTmgr = new CCatalogsHttpQTDownloadManager(this,iDmgr);
     
     TUid sessionId( TUid::Uid( iSessionId ) );
     if ( aCleanup ) 
@@ -581,7 +593,6 @@
     
     do    
         {
-        TRAP( err, iDmgr.ConnectL( sessionId, *this, ETrue ) );
         if ( err != KErrNone ) 
             {
             DLERROR(("DL manager connection failed with err: %d, retry attempts left", 
@@ -607,13 +618,17 @@
     iNetworkManager = &CCatalogsHttpSessionManager::NetworkManagerL();
     iNetworkManager->AddObserverL( *this );    
     
-    iDmgr.SetIntAttribute( EDlMgrExitAction, EExitPause );
     // Restore downloads from previous sessions
-    RestoreDownloadsL();
+//    RestoreDownloadsL();
+ 
     DLTRACEOUT((""));
+
     }
     
-
+DownloadManager* CCatalogsHttpDownloadManager::GetDownloadManager()
+{
+	return iDmgr;
+}
 // ---------------------------------------------------------------------------
 // Restore downloads from previous session
 // ---------------------------------------------------------------------------
@@ -621,17 +636,20 @@
 void CCatalogsHttpDownloadManager::RestoreDownloadsL()
     {
     DLTRACEIN((""));
-    const CDownloadArray& downloads = iDmgr.CurrentDownloads();    
     
+    const TInt KMaxUrlLength = 2048; // HLa
     TBuf8<KMaxUrlLength> url;
-    TBuf<KMaxPath> filename;
+    
     
+    QList<WRT::Download*> downloads = iDmgr->currentDownloads();
+
+
     // Go through downloads, create wrappers for DL manager downloads and
     // add them to HttpDownloadManager
-    for ( TInt i = 0; i < downloads.Count(); ++i ) 
+    for ( TInt i = 0; i < downloads.size(); ++i ) 
         {                 
         DLTRACE(( "Restoring dl %i", i ));
-        RHttpDownload* dlPtr = downloads[i];
+        WRT::Download *dlPtr = downloads[i];
 
         // Create the download and push it to cleanup stack
         CCatalogsHttpDownload* dl = CCatalogsHttpDownload::NewLC( *this,
@@ -639,8 +657,9 @@
 
         // set file server session
         dl->SetFileServerSession( iFs );
-        
-        dlPtr->GetStringAttribute( EDlAttrDestFilename, filename );
+       
+         QString name   =  dlPtr->attribute(FileName).toString();
+         TBuf<KMaxPath> filename(name.utf16());
 
         // Separate the filename from the path
         TParsePtrC parser( filename );
@@ -675,7 +694,8 @@
 // ---------------------------------------------------------------------------
 // Finds the index for the given download in iDownloads
 // ---------------------------------------------------------------------------
-//            
+//   
+/* HLa
 TInt CCatalogsHttpDownloadManager::FindInDownloads( 
     const RCatalogsHttpOperationArray& aArray,
     RHttpDownload* aDownload ) const
@@ -683,7 +703,7 @@
     DASSERT( aDownload );
     
     TInt32 id = 0;
-    aDownload->GetIntAttribute( EDlAttrId, id );    
+    //aDownload->GetIntAttribute( EDlAttrId, id );    
             
     TInt count = aArray.Count();
     for ( TInt i = 0; i < count; ++i )
@@ -695,7 +715,7 @@
         }
     return KErrNotFound;
     }
-
+*/
 
 // ---------------------------------------------------------------------------
 // Finds the index for the given download in the given array
@@ -720,7 +740,7 @@
     {
     DLTRACEIN(( "" ));
     DASSERT( aOperation );
-    TInt err = iManager.StartOperation( aOperation );
+    TInt err = iManager.StartOperation( aOperation, EFalse );
     if ( err == KErrNone || err == KCatalogsHttpOperationQueued ) 
         {
         TInt err2 = MoveRestoredDlToCurrentDls( *aOperation );
@@ -817,6 +837,7 @@
     DLTRACEIN(( "Event queue count: %d", iEventQueue.Count() ));
    
     // Handle the event queue 
+    /* HLa
     while ( iEventQueue.Count() ) 
         {
         
@@ -878,6 +899,7 @@
                 }
             }
         }
+        */
     }
     
     
@@ -903,6 +925,7 @@
 void CCatalogsHttpDownloadManager::ContinueEventHandling()
     {
     DLTRACEIN((""));
+    /* HLa
     if( iEventQueue.Count() && !IsActive() ) 
         {
         DLTRACE(("More events to handle"));
@@ -911,9 +934,11 @@
         TRequestStatus* status = &iStatus;
         User::RequestComplete( status, KErrNone );
         }
+        */
     }
+
     
-    
+    /* HLa
 void CCatalogsHttpDownloadManager::RemoveUnhandledEvents( 
     const TDownloadEvent& aEvent )
     {
@@ -928,8 +953,9 @@
             }        
         }    
     }
+*/
 
-
+/* HLa
 void CCatalogsHttpDownloadManager::RemoveUnhandledProgressEvents( 
     const TDownloadEvent& aEvent )
     {
@@ -946,7 +972,7 @@
             }        
         }    
     }
-
+*/
 
 TInt CCatalogsHttpDownloadManager::NewDownloadId()
     {
@@ -954,8 +980,23 @@
     }
 
 
-RHttpDownload& CCatalogsHttpDownloadManager::CreatePlatformDownloadL( 
+Download& CCatalogsHttpDownloadManager::CreatePlatformDownloadL( 
     const TDesC8& aUrl )
     {
-    return iDmgr.CreateDownloadL( aUrl );
+    
+   	QString myString=	QString::fromRawData( reinterpret_cast<const QChar*>(aUrl.Ptr()),aUrl.Length());
+
+    return *(iDmgr->createDownload( myString ));
     }
+    
+CCatalogsHttpQTDownloadManager::CCatalogsHttpQTDownloadManager(CCatalogsHttpDownloadManager* aDownloadManager,DownloadManager* aDmgr)
+	{
+		iDownloadManager = aDownloadManager;
+		iDmgr = aDmgr;
+		connect(iDmgr, SIGNAL(downloadManagerEvent(DownloadManagerEvent*)), this,SLOT(downloadMgrEventRecieved(DownloadManagerEvent*)));
+	}
+	
+void CCatalogsHttpQTDownloadManager::downloadMgrEventRecieved(DownloadManagerEvent* aEvent)
+	{
+		iDownloadManager->downloadMgrEventRecieved(aEvent);
+	}
\ No newline at end of file
--- a/ncdengine/engine/transport/src/catalogshttpsessionmanagerimpl.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/transport/src/catalogshttpsessionmanagerimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -126,7 +126,7 @@
 // ---------------------------------------------------------------------------
 //	
 TInt CCatalogsHttpSessionManager::StartOperation( 
-    MCatalogsHttpOperation* aOperation )
+    MCatalogsHttpOperation* aOperation, TBool aConnect )
     {
     DLTRACEIN((""));
     DLINFO( ("Operation ID: %i, Type: %i", 
@@ -140,25 +140,26 @@
         
     // Make sure the download is removed from queue
     RemoveFromQueue( aOperation );
-    
-    TBool isRunning = EFalse;
+       
 
     // Check if the operation can connect either by using the current AP
     // or by opening a new one
-    TRAPD( err, isRunning = ConnectL( *aOperation ) );
-    if ( err != KErrNone ) 
+    if ( aConnect )
         {
-        DLTRACEOUT(("Error: %d, err"));
-        return err;
+        TBool isRunning = EFalse;
+        TRAPD( err, isRunning = ConnectL( *aOperation ) );
+        if ( err != KErrNone )  
+            {
+            DLTRACEOUT(("Error: %d, err"));
+            return err;
+            }
+        if ( !isRunning ) 
+            {
+            DLTRACEOUT(("Not running, adding to queue"));
+            return AddToQueue( aOperation );
+            }
         }
-        
-    if ( !isRunning ) 
-        {
-        DLTRACEOUT(("Not running, adding to queue"));
-        return AddToQueue( aOperation );
-        }
-        
-    // Check whether operation belongs to general queue or not
+     // Check whether operation belongs to general queue or not
     if ( aOperation->Config().Priority() > ECatalogsPriorityQueued )
         {        
         // non-general queues
--- a/ncdengine/engine/transport/src/catalogshttptransactionmanagerimpl.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/engine/transport/src/catalogshttptransactionmanagerimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -460,7 +460,7 @@
 TInt CCatalogsHttpTransactionManager::StartOperation( 
     MCatalogsHttpOperation* aOperation )
     {        
-    return iManager.StartOperation( aOperation );
+    return iManager.StartOperation( aOperation, ETrue );
     }
 
 
Binary file ncdengine/group/altair-engine-stub.SIS has changed
--- a/ncdengine/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -41,7 +41,7 @@
 // This allows eclipsing the ROM base installation with normal SIS
 //****************************************************************************
 
-../rom/altair-engine-stub.sis   /epoc32/data/z/system/install/altair-engine-stub.SIS
+altair-engine-stub.SIS        /epoc32/data/z/system/install/altair-engine-stub.SIS
 //altair-pcd-adapter-stub.SIS   /epoc32/data/z/system/install/altair-pcd-adapter-stub.SIS
 
 //****************************************************************************
--- a/ncdengine/inc/ncdnodeinstall.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/inc/ncdnodeinstall.h	Tue Aug 31 15:21:33 2010 +0300
@@ -32,18 +32,12 @@
 class MDesCArray;
 class MNcdInstalledContent;
 
-// Forward declaration for SwiUI::TInstallOptions
-// SwiUI namespace contains install options 
-// that are used for the silent install.
-// #include <SWInstDefs.h> 
-// is required when SwiUI::TInstallOptions is created 
-// in the implementation code.
-namespace SwiUI
+// Forward declaration for Usif::TInstallOptions
+namespace Usif
     {
-    class TInstallOptions;    
+    class COpaqueNamedParams;    
     }
 
-
 /**
  *  Provides functions that can be used to install the node object.
  *  Before installing, the data should have been downloaded using
@@ -83,7 +77,6 @@
      */
     virtual MNcdInstallOperation* InstallL( MNcdInstallOperationObserver& aObserver ) = 0;
 
-
     /**
      * Starts the silent installing operation of the node object.
      * Because installation is silent, normal installation query dialogs are not shown.
@@ -96,7 +89,7 @@
      * function of the operation should be called when operation is not needed anymore.
      * 
      * @note Requires TrustedUI capabilities
-     * @note Only SIS packages and Java archives are installed silently, other content
+     * @note Only SIS packages and Java archives and widgets are installed silently, other content
      * is installed exactly like with InstallL
      * 
      * @param aObserver Observer for the operation.
@@ -109,9 +102,9 @@
      * Leaves with KNcdErrorParallelOperationNotAllowed if a parallel client is running
      *  an operation for the same metadata. See MNcdOperation for full explanation.
      */
-    virtual MNcdInstallOperation* SilentInstallL( MNcdInstallOperationObserver& aObserver,
-                                                  const SwiUI::TInstallOptions& aInstallOptions ) = 0;
-
+    virtual MNcdInstallOperation* SilentInstallL( 
+                MNcdInstallOperationObserver& aObserver,
+                Usif::COpaqueNamedParams* aInstallOptions ) = 0;
 
     /**
      * Checks if the item content has already been installed and is currently present in the
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/ncdengine.pro	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += engine/engine.pro 
--- a/ncdengine/provider/client/inc/ncdnodeinstallproxy.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/client/inc/ncdnodeinstallproxy.h	Tue Aug 31 15:21:33 2010 +0300
@@ -125,14 +125,12 @@
      */ 
     MNcdInstallOperation* InstallL( MNcdInstallOperationObserver& aObserver );
 
-
     /**
      * @see MNcdNodeInstall::SilentInstallL()
      */ 
-    MNcdInstallOperation* SilentInstallL( MNcdInstallOperationObserver& aObserver,
-                                          const SwiUI::TInstallOptions& aInstallOptions );
-    
-
+    MNcdInstallOperation* SilentInstallL( 
+                MNcdInstallOperationObserver& aObserver,
+                Usif::COpaqueNamedParams* aInstallOptions );
     /**
      * @see MNcdNodeInstall::IsInstalledL()
      */ 
--- a/ncdengine/provider/client/inc/ncdoperationmanagerproxy.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/client/inc/ncdoperationmanagerproxy.h	Tue Aug 31 15:21:33 2010 +0300
@@ -63,10 +63,10 @@
 
 
 // Forward declaration for silent install
-// SwiUI::TInstallOptions
-namespace SwiUI
+// Usif::TInstallOptions
+namespace Usif
     {
-    class TInstallOptions;    
+    class COpaqueNamedParams;    
     }
 
 /**
@@ -230,7 +230,7 @@
     virtual CNcdSilentInstallOperationProxy* CreateSilentInstallOperationL(
         CNcdNodeProxy& aNode, 
         MNcdInstallOperationObserver* aObserverconst,
-        const SwiUI::TInstallOptions& aInstallOptions );
+        Usif::COpaqueNamedParams* aInstallOptions );
     
     
     /**
--- a/ncdengine/provider/client/inc/ncdsilentinstalloperationproxy.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/client/inc/ncdsilentinstalloperationproxy.h	Tue Aug 31 15:21:33 2010 +0300
@@ -22,7 +22,7 @@
 #include <e32cmn.h>
 
 // For silent install options and options package
-#include <SWInstDefs.h>
+#include <usif/sif/sifcommon.h>
 
 #include "ncdinstalloperationproxy.h"
 
@@ -51,7 +51,7 @@
                         CNcdNodeManagerProxy* aNodeManager,
                         MNcdInstallOperationObserver* aObserver,
                         MNcdInstallationService& aInstallationService,
-                        const SwiUI::TInstallOptions& aInstallOptions );
+                        Usif::COpaqueNamedParams* aInstallOptions );
 
 
 protected: // CActive
@@ -70,7 +70,7 @@
      * @see NewLC
      */
     CNcdSilentInstallOperationProxy( MNcdInstallationService& aInstallationService,
-                                     const SwiUI::TInstallOptions& aInstallOptions );
+                                     Usif::COpaqueNamedParams* aInstallOptions );
     
     virtual ~CNcdSilentInstallOperationProxy();
 
@@ -99,10 +99,10 @@
     virtual void UseInstallServiceL( const CNcdFileInfo& aFile );
     
     /**
-     * @return const SwiUI::TInstallOptionsPckg& Contains the install options 
+     * @return const Usif::COpaqueNamedParams* Contains the install options 
      * for silent install in a data buffer.
      */
-    const SwiUI::TInstallOptionsPckg& SilentInstallOptionsPackage() const;
+    const Usif::COpaqueNamedParams* SilentInstallOptions() const;
     
     
 private: // new methods
@@ -114,8 +114,9 @@
 
 private: // data
 
+    
     // This will contain the install options for silent install in a data buffer.
-    SwiUI::TInstallOptionsPckg iInstallOptionsPackage;
+    Usif::COpaqueNamedParams* iInstallOptions;
 
     };
 
--- a/ncdengine/provider/client/src/ncdnodeinstallproxy.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/client/src/ncdnodeinstallproxy.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -202,14 +202,13 @@
     return op;
     }
 
-
 // ---------------------------------------------------------------------------
 // Creates an install operation
 // ---------------------------------------------------------------------------
 //
 MNcdInstallOperation* CNcdNodeInstallProxy::SilentInstallL( 
     MNcdInstallOperationObserver& aObserver,
-    const SwiUI::TInstallOptions& aInstallOptions )
+    Usif::COpaqueNamedParams* aInstallOptions )
     {
     DLTRACEIN((""));
 
@@ -219,9 +218,12 @@
     // observer.
     // Notice that TrustedUI capabilites are checked when silent install operation is
     // created in the server side.
+    
     CNcdInstallOperationProxy* op = 
         Metadata().Node().OperationManager().CreateSilentInstallOperationL(
         Metadata().Node(), this, aInstallOptions );
+    
+    
     iOperationObserver = &aObserver;
        
     DLTRACEOUT((""));    
--- a/ncdengine/provider/client/src/ncdoperationmanagerproxy.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/client/src/ncdoperationmanagerproxy.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -442,7 +442,7 @@
 CNcdSilentInstallOperationProxy* CNcdOperationManagerProxy::CreateSilentInstallOperationL(
     CNcdNodeProxy& aNode,
     MNcdInstallOperationObserver* aObserver,
-    const SwiUI::TInstallOptions& aInstallOptions )
+    Usif::COpaqueNamedParams* aInstallOptions )
     {
    DLTRACEIN((""));
 
--- a/ncdengine/provider/client/src/ncdsilentinstalloperationproxy.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/client/src/ncdsilentinstalloperationproxy.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -39,7 +39,7 @@
     CNcdNodeManagerProxy* aNodeManager,
     MNcdInstallOperationObserver* aObserver,
     MNcdInstallationService& aInstallationService,
-    const SwiUI::TInstallOptions& aInstallOptions )
+    Usif::COpaqueNamedParams* aInstallOptions )
     {
     CNcdSilentInstallOperationProxy* self =
         new( ELeave ) CNcdSilentInstallOperationProxy( aInstallationService, 
@@ -59,15 +59,14 @@
 //
 CNcdSilentInstallOperationProxy::CNcdSilentInstallOperationProxy( 
     MNcdInstallationService& aInstallationService,
-    const SwiUI::TInstallOptions& aInstallOptions )
+    /*const*/ Usif::COpaqueNamedParams* aInstallOptions )
 : CNcdInstallOperationProxy( aInstallationService )
     {
     // Copy all the install options into the buffer that will be used
     // when silent installation is delegated to the installer.
-    iInstallOptionsPackage = aInstallOptions;
+    iInstallOptions = aInstallOptions;
     }
 
-
 // ---------------------------------------------------------------------------
 // Destructor
 // ---------------------------------------------------------------------------
@@ -75,6 +74,9 @@
 CNcdSilentInstallOperationProxy::~CNcdSilentInstallOperationProxy()
     {
     DLTRACEIN(( "" ));
+    
+    delete iInstallOptions;
+    
     // Cancel must be called here because base class will only call its own
     // DoCancel()
     Cancel();
@@ -190,7 +192,7 @@
                 iFileHandle, 
                 aFile.MimeType(), 
                 aFile.Purpose(), 
-                SilentInstallOptionsPackage() );
+                SilentInstallOptions() ); 
             break;
             }
         
@@ -201,7 +203,7 @@
                 iFileHandle, 
                 aFile.MimeType(), 
                 aFile.Data(),
-                SilentInstallOptionsPackage() );             
+                SilentInstallOptions() );             
             break;
             }            
 
@@ -212,7 +214,7 @@
             {
             Installer().SilentInstallWidgetL(
                     iFileHandle, 
-                    SilentInstallOptionsPackage() );
+                    SilentInstallOptions() );
    
             break;
             }
@@ -227,9 +229,8 @@
     DLTRACEOUT((""));   
     }
 
-
-const SwiUI::TInstallOptionsPckg& CNcdSilentInstallOperationProxy::SilentInstallOptionsPackage() const
+const Usif::COpaqueNamedParams* CNcdSilentInstallOperationProxy::SilentInstallOptions() const
     {
     DLTRACEIN((""));
-    return iInstallOptionsPackage;
+    return iInstallOptions;
     }
--- a/ncdengine/provider/deviceinteraction/inc/ncddeviceserviceimpl.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/deviceinteraction/inc/ncddeviceserviceimpl.h	Tue Aug 31 15:21:33 2010 +0300
@@ -218,10 +218,6 @@
      */
     TAknSkinSrvSkinPackageLocation SkinLocationFromPath( const TDesC& aPath );
     
-#ifdef GET_DEVICE_ID_FROM_USERAGENT    
-    HBufC8* UserAgentL() const;
-#endif    
-    
     void GetPhoneLC( RTelServer& aServer, RPhone& aPhone );
 
     void GetSubscriberId();
--- a/ncdengine/provider/deviceinteraction/inc/ncdinstallationservice.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/deviceinteraction/inc/ncdinstallationservice.h	Tue Aug 31 15:21:33 2010 +0300
@@ -22,7 +22,8 @@
 // SwiUI namespace contains install options 
 // and install options package definitions
 // that are used for the silent install.
-#include <SWInstDefs.h>
+//#include <SWInstDefs.h>
+#include <usif/sif/sifcommon.h>
 
 #include "ncditempurpose.h"
 
@@ -124,7 +125,7 @@
     virtual void SilentInstallL( RFile& aFile,
                                  const TDesC& aMimeType,
                                  const TNcdItemPurpose& aPurpose ,
-                                 const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg ) = 0;
+                                 const Usif::COpaqueNamedParams* aInstallOptionsPckg ) = 0;
 
 
     /**
@@ -134,13 +135,13 @@
     virtual void SilentInstallJavaL( RFile& aFile,
                                      const TDesC& aMimeType,
                                      const TDesC8& aDescriptorData,
-                                     const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg ) = 0;
+                                     const Usif::COpaqueNamedParams* aInstallOptionsPckg ) = 0;
     
     /*
      * Use SWI API to install widget silently. 
      */     
     virtual void SilentInstallWidgetL(RFile& aFile,
-                                      const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg ) = 0;
+                                      const Usif::COpaqueNamedParams* aInstallOptionsPckg ) = 0;
 
     /**
      * Cancels the silent installation if it is going on.
--- a/ncdengine/provider/deviceinteraction/inc/ncdinstallationserviceimpl.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/deviceinteraction/inc/ncdinstallationserviceimpl.h	Tue Aug 31 15:21:33 2010 +0300
@@ -26,8 +26,8 @@
 #include <swi/sisregistryentry.h>
 #include <apgcli.h>
 #include <centralrepository.h>
-#include <SWInstApi.h>
-#include <widgetregistryclient.h>
+#include <usif/sif/sif.h>
+#include <usif/scr/scr.h>
 
 #include "ncdinstallationservice.h"
 #include "ncditempurpose.h"
@@ -36,24 +36,6 @@
 
 #include "ncdwidgetregistrydata.h"
 
-
-/**
- * New Java registry API was introduced in 3.2. We start using it 
- * from 5.0 onwards because it seems that some 3.2 devices don't support
- * it entirely
- */
-#if defined( __SERIES60_30__ ) || defined( __SERIES60_31__ ) || defined ( __S60_32__ )
-    #define USE_OLD_JAVA_API
-    class MJavaRegistrySuiteEntry;
-    class MJavaRegistry;
-#else
-    namespace Java
-        {
-        class CJavaRegistry;
-        }
-#endif
-
-
 class CDocumentHandler;
 
 class MNcdInstallationServiceObserver;
@@ -139,7 +121,7 @@
     void SilentInstallL( RFile& aFile,
                          const TDesC& aMimeType,
                          const TNcdItemPurpose& aPurpose,
-                         const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg );
+                         const Usif::COpaqueNamedParams* aInstallOptionsPckg );
     
     /**
      * @see MNcdInstallationService::SilentInstallJavaL
@@ -147,13 +129,13 @@
     void SilentInstallJavaL( RFile& aFile,
                              const TDesC& aMimeType,
                              const TDesC8& aDescriptorData,
-                             const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg );
+                             const Usif::COpaqueNamedParams* aInstallOptionsPckg );
     
     /**
      * @see MNcdInstallationService::SilentInstallWidgetJavaL
      */
     void SilentInstallWidgetL( RFile& aFile,
-                               const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg );
+                               const Usif::COpaqueNamedParams* aInstallOptionsPckg );
     
     /**
      * @see MNcdInstallationService::MNcdCancelSilentInstall
@@ -311,7 +293,7 @@
     void InstallL( RFile& aFile,
                    const TDesC& aMimeType,
                    const TNcdItemPurpose& aPurpose,
-                   const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg );
+                   const Usif::COpaqueNamedParams* aSilentInstallOptions );
 
     /**
      * @see MNcdInstallationService::InstallJavaL
@@ -322,12 +304,12 @@
     void InstallJavaL( RFile& aFile,
                        const TDesC& aMimeType,
                        const TDesC8& aDescriptorData,
-                       const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg );
+                       const Usif::COpaqueNamedParams* aSilentInstallOptions );
 
     
     void InstallWidgetL( 
         RFile& aFile,
-        const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg );
+        const Usif::COpaqueNamedParams* aSilentInstallOptions );
         
 
     // Sets correct values for member variables after installation has finished
@@ -385,20 +367,6 @@
      */
     TBool IsRomApplication( const TUid& aUid ) const;
     
-    
-    /**
-     * Gets the UID of the latest installed midlet by using the 
-     * Java installer's P&S key
-     * 
-     * @param aJavaRegistry Java registry
-     * @return Midlet UID
-     */
-#ifdef USE_OLD_JAVA_API
-    TUid LatestMidletUidL( MJavaRegistry& aJavaRegistry ) const;
-#else    
-    TUid LatestMidletUidL( Java::CJavaRegistry& aJavaRegistry ) const;
-#endif
-    
     static TBool MatchJava( const TDesC& aMime );
     
     TUid InstalledMidletUidL();
@@ -455,11 +423,6 @@
     // When installing java with JAD, the JAD path is stored here
     HBufC* iJadFileName;
     
-#ifdef USE_OLD_JAVA_API    
-    // For comparing installed midlet uids to find out the uid for the newly 
-    // installed java app.
-    RArray<TUid> iMIDletUids;
-#endif
 
     // Theme handling
     // Server session
@@ -483,18 +446,18 @@
     
     CNcdActiveOperationObserver* iInstallStatusObserver;
 
-    SwiUI::RSWInstLauncher iInstaller;
-        
+    //SwiUI::RSWInstLauncher iInstaller;
+    Usif::RSoftwareInstall iInstaller;
+    Usif::COpaqueNamedParams* iArguments; 
+    Usif::COpaqueNamedParams* iResults;
+    
     // ROM application UIDS
     RArray<TUid> iRomUids; 
     
-    // needed for cancelling install correctly
-    SwiUI::TServerRequest iCancelCode;  
-    
+    //RWidgetRegistryClientSession iWidgetRegistry; 
+    Usif::RSoftwareComponentRegistry iScrSession;
     
-    RWidgetRegistryClientSession iWidgetRegistry;    
-    
-    RWidgetInfoArray iInstalledWidgets;    
+    //RWidgetInfoArray iInstalledWidgets;    
     RPointerArray<CExtendedWidgetInfo> iInstalledWidgetsInfos; 
     };
 
--- a/ncdengine/provider/deviceinteraction/inc/ncdsilentinstallactiveobserver.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/deviceinteraction/inc/ncdsilentinstallactiveobserver.h	Tue Aug 31 15:21:33 2010 +0300
@@ -23,7 +23,9 @@
 #include <e32base.h>
 #include <f32file.h>
 // For silent install
-#include <SWInstApi.h> 
+#include <usif/sif/sif.h>
+
+
 
 class MNcdAsyncSilentInstallObserver;
 
@@ -68,20 +70,20 @@
      * Sets this object active for observing a silent install operation.
      * 
      * @param aFileName Installation file name.
-     * @param aSilentInstallOptionsPckg Silent installation options.
+     * @param aSilentInstallOptions Silent installation options.
      */
     void StartToObserveL( const TDesC& aFileName,
-                          const SwiUI::TInstallOptionsPckg& aSilentInstallOptionsPckg );
+                          const Usif::COpaqueNamedParams* aSilentInstallOptions );
 
 
     /**
      * Sets this object active for observing a silent install operation.
      * 
      * @param aFile Installation file handle.
-     * @param aSilentInstallOptionsPckg Silent installation options.
+     * @param aSilentInstallOptions Silent installation options.
      */
     void StartToObserveL( RFile& aFile,
-                          const SwiUI::TInstallOptionsPckg& aSilentInstallOptionsPckg );
+                          const Usif::COpaqueNamedParams* aSilentInstallOptions );
 
 
     /**
@@ -147,8 +149,7 @@
      * that handles the installation operations that this
      * class object observes. Ownerhsip is not transferred.
      */
-    SwiUI::RSWInstSilentLauncher& SilentLauncher();
-
+    Usif::RSoftwareInstall& SilentLauncher();
 
     /**
      * Converts the given error code if necessary.
@@ -176,10 +177,11 @@
 
     // The silent launcher handles the install operations that
     // this class object observes. 
-    SwiUI::RSWInstSilentLauncher iSilentLauncher;
+    // SwiUI::RSWInstSilentLauncher iSilentLauncher;
+    Usif::RSoftwareInstall iInstaller;
+    Usif::COpaqueNamedParams* iResults;
+    Usif::COpaqueNamedParams* iArguments;
     
-    SwiUI::TServerRequest iCancelCode;
-
 };
 
 #endif // NCD_SILENT_INSTALL_ACTIVE_OBSERVER_H
--- a/ncdengine/provider/deviceinteraction/inc/ncdwidgetregistrydata.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/deviceinteraction/inc/ncdwidgetregistrydata.h	Tue Aug 31 15:21:33 2010 +0300
@@ -20,7 +20,7 @@
 
 // INCLUDES
 #include <f32file.h>
-#include <widgetregistryclient.h>
+//#include <WidgetRegistryClient.h>  //HLa: Widget registry remove
 #include "catalogsutils.h"
 
 // CONSTANTS
@@ -44,7 +44,9 @@
         inline CExtendedWidgetInfo()
             {
             iUid = TUid::Uid(0);
-            iVersion = HBufC::New( KWidgetRegistryVal + 1 );
+            //HLa: Widget registry remove
+            //iVersion = HBufC::New( KWidgetRegistryVal + 1 );
+            iVersion = HBufC::New( KMaxFileName + 1 ); 
             
             }
         /**
--- a/ncdengine/provider/deviceinteraction/src/ncddeviceserviceimpl.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/deviceinteraction/src/ncddeviceserviceimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -38,7 +38,7 @@
 #endif
 
 #ifdef GET_DEVICE_ID_FROM_USERAGENT
-    #include <cuseragent.h>
+    #include <sysversioninfo.h>
 #endif
 
 #include "catalogs_device_config.h"
@@ -681,30 +681,16 @@
     return KCatalogsOverrideDeviceId().AllocLC();
 #endif    
 
-#ifdef GET_DEVICE_ID_FROM_USERAGENT    
-    // Assume the device id begins with "Nokia" and ends with "/"
-    HBufC8* userAgent = UserAgentL();
-    CleanupStack::PushL( userAgent );
-    TInt offset = userAgent->Find( _L8( "Nokia" ));
-    if ( offset == KErrNotFound )
-        {
-        DLTRACEOUT(("No Nokia"));
-        CleanupStack::PopAndDestroy( userAgent );
-        return KNullDesC().AllocLC();
-        }
-    TPtrC8 id = userAgent->Des().Mid( offset );
-    offset = id.Locate( '/' );
-    if ( offset == KErrNotFound )
-        {
-        DLTRACEOUT(("no /"));
-        CleanupStack::PopAndDestroy( userAgent );
-        return KNullDesC().AllocLC();
-        }
-    TPtrC8 id2 = id.Left( offset );
-    HBufC* devId = HBufC::NewL( id2.Length() );
-    devId->Des().Copy( id2 );
-    CleanupStack::PopAndDestroy( userAgent );
-    CleanupStack::PushL( devId );
+#ifdef GET_DEVICE_ID_FROM_USERAGENT  
+    
+    // Get model version.
+    TBuf< KSysVersionInfoTextLength > modelVersion;
+    User::LeaveIfError( SysVersionInfo::GetVersionInfo(
+        SysVersionInfo::EModelVersion, modelVersion ) );
+    
+    // Create buffer.
+    HBufC* devId = HBufC::NewLC( modelVersion.Length() );
+    devId->Des().Append( modelVersion );
     DLTRACEOUT(( _L("devId: %S"), devId ));
     return devId;
     
@@ -751,36 +737,16 @@
     
     if ( !iDeviceModel )
         {
-        // Get manufacturer 
-        HBufC8* manufacturer = Des16ToDes8LC( DeviceManufacturerL() );
-        
-        HBufC8* userAgent = UserAgentL();
-        CleanupStack::PushL( userAgent );
-        
-        TInt offset = userAgent->FindF( *manufacturer ); 
-        if ( offset == KErrNotFound )
-            {
-            DLTRACEOUT(("Device manufacturer not found"));
-            CleanupStack::PopAndDestroy( 2, manufacturer ); // manufacturer, useragent
-            return KNullDesC();
-            }
+        // Get model version.
+        TBuf< KSysVersionInfoTextLength > modelVersion;
+        User::LeaveIfError( SysVersionInfo::GetVersionInfo(
+            SysVersionInfo::EModelVersion, modelVersion ) );
+    
+        // Create buffer.
+        iDeviceModel = HBufC::NewL( modelVersion.Length() );
+        iDeviceModel->Des().Append( modelVersion );
+        }
         
-        // Strip manufacturer of the string    
-        TPtrC8 id = userAgent->Des().Mid( offset + manufacturer->Length() );
-        
-        // Locate the end of the device model
-        offset = id.Locate( '/' );
-        if ( offset == KErrNotFound )
-            {
-            DLTRACE(("no /"));
-            CleanupStack::PopAndDestroy( 2, manufacturer ); // manufacturer, useragent
-            return KNullDesC();
-            }
-        TPtrC8 id2 = id.Left( offset );
-        iDeviceModel = Des8ToDes16L( id2 );                        
-        
-        CleanupStack::PopAndDestroy( 2, manufacturer ); // manufacturer, useragent
-        }
     DLTRACEOUT(( _L("device model: %S"), iDeviceModel ));
     return *iDeviceModel;
 #endif // CATALOGS_OVERRIDE_MODEL   
@@ -853,30 +819,6 @@
         }
     return EAknsSrvPhone;
     }
-    
-
-// ---------------------------------------------------------------------------
-// On SDK 3.0 UA looks like this:
-// Mozilla/4.0 ( compatible; MSIE 5.0; Series60/3.0 Nokia6630/4.06.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 ) 
-// ---------------------------------------------------------------------------
-#ifdef GET_DEVICE_ID_FROM_USERAGENT
-
-HBufC8* CNcdDeviceService::UserAgentL() const
-    {
-    DLTRACEIN((""));
-#ifndef CATALOGS_OVERRIDE_USERAGENT    
-    CUserAgent* ua = CUserAgent::NewL();
-    CleanupStack::PushL( ua );
-    HBufC8* uas = ua->UserAgentL();
-    CleanupStack::PopAndDestroy( ua );
-    DLTRACEOUT(("UserAgent: %S", uas));
-    return uas;
-#else // CATALOGS_OVERRIDE_USERAGENT
-    return KCatalogsOverrideUserAgent().AllocL(); 
-#endif    
-    }
-
-#endif    
 
 // ---------------------------------------------------------------------------
 // GetPhoneLC
--- a/ncdengine/provider/deviceinteraction/src/ncdinstallationserviceimpl.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/deviceinteraction/src/ncdinstallationserviceimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -32,16 +32,6 @@
 #include <e32property.h>
 #include <sacls.h>
 
-#ifdef USE_OLD_JAVA_API
-    #include <mjavaregistry.h>
-    #include <swi/minstalledappsregistry.h>
-#else
-    #include <javaregistry.h>
-    #include <javaregistrypackageentry.h>
-
-    using namespace Java;
-#endif
-
 #include "ncdinstallationserviceobserver.h"
 #include "ncdactiveoperationobserver.h"
 #include "ncdsilentinstallactiveobserver.h"
@@ -55,21 +45,7 @@
 
 const TUint KFileOpenFlags = EFileShareReadersOrWriters;
 
-#ifdef __SERIES60_31__
-
-    const TInt32 KPSUidJavaLatestInstallation = KUidJmiLatestInstallation;
-
-#else
-
-    // Defined originally in /mw/java/inc/javauids.h
-    // This should become available at some point in javadomainpskeys.h
-    //const TInt32 KPSUidJavaLatestInstallation = 0x10282567;
-    #include <javadomainpskeys.h>
-
-#endif
-
-// length taken from WidgetRegistryData.h
-const TInt KWidgetBundleIdLength = KWidgetRegistryVal + 1;    
+//const TInt KWidgetBundleIdLength = KMaxFileName + 1; 
 
 // ======== CALLBACK FUNCTION ========
  
@@ -131,10 +107,13 @@
     delete iInstallationCompleteCallback;
     delete iJadFileName;
     delete iRecognizedMime;
-#ifdef USE_OLD_JAVA_API    
-    iMIDletUids.Close();
-#endif    
+    
+    delete iResults;
+    delete iArguments;
+    
     iApaLs.Close();
+    
+    
     if( iThemes )
         {
         iThemes->ResetAndDestroy();
@@ -145,17 +124,7 @@
     CancelInstall(); 
     iRomUids.Close();
     
-    if ( iWidgetRegistry.Handle() )
-        {
-        // decreases widget server's refcount but this cannot be called
-        // if Connect has not been called or we'll get a KERN-EXEC 0
-        iWidgetRegistry.Disconnect();
-        }
-    else
-        {
-        iWidgetRegistry.Close();
-        }
-    iInstalledWidgets.ResetAndDestroy();
+    iScrSession.Close();
     iInstalledWidgetsInfos.ResetAndDestroy();
     }
 
@@ -174,13 +143,18 @@
 void CNcdInstallationService::ConstructL()
     {
     DLTRACEIN((""));
+    
+    iResults = 0;
+    iArguments = 0;
+    
     iDocHandler = CDocumentHandler::NewL();
     iDocHandler->SetExitObserver( this );
     
     User::LeaveIfError( iFs.Connect() );
     User::LeaveIfError( iFs.ShareProtected() );
     User::LeaveIfError( iRegistrySession.Connect() );
-    User::LeaveIfError( iAknsSrv.Connect() ); 
+    User::LeaveIfError( iAknsSrv.Connect() );
+    User::LeaveIfError( iScrSession.Connect());
 
     iInstallationCompleteCallback = new(ELeave) CAsyncCallBack( 
         TCallBack( InstallationCompleteCallback, this ),
@@ -259,7 +233,7 @@
 void CNcdInstallationService::SilentInstallL( RFile& aFile,
                                         const TDesC& aMimeType,
                                         const TNcdItemPurpose& aPurpose,
-                                        const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg )
+                                        const Usif::COpaqueNamedParams* aInstallOptionsPckg )
     {
     DLTRACEIN((""));
 
@@ -269,7 +243,7 @@
         iSilentInstallActiveObserver = CNcdSilentInstallActiveObserver::NewL( *this );        
         }
 
-    InstallL( aFile, aMimeType, aPurpose, &aInstallOptionsPckg );
+    InstallL( aFile, aMimeType, aPurpose, aInstallOptionsPckg );
 
     DLTRACEOUT(("")); 
     }
@@ -282,7 +256,7 @@
 void CNcdInstallationService::SilentInstallJavaL( RFile& aFile,
                                             const TDesC& aMimeType,
                                             const TDesC8& aDescriptorData,
-                                            const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg )
+                                            const Usif::COpaqueNamedParams* aInstallOptionsPckg )
     {
     DLTRACEIN((""));
 
@@ -292,7 +266,7 @@
         iSilentInstallActiveObserver = CNcdSilentInstallActiveObserver::NewL( *this );        
         }
 
-    InstallJavaL( aFile, aMimeType, aDescriptorData, &aInstallOptionsPckg );
+    InstallJavaL( aFile, aMimeType, aDescriptorData, aInstallOptionsPckg );
 
     DLTRACEOUT((""));
     }
@@ -302,7 +276,7 @@
 // ---------------------------------------------------------------------------
 //
 void CNcdInstallationService::SilentInstallWidgetL( RFile& aFile,
-                                                    const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg )
+                                                    const Usif::COpaqueNamedParams* aInstallOptionsPckg )
     {
     DLTRACEIN((""));
     
@@ -312,7 +286,7 @@
         iSilentInstallActiveObserver = CNcdSilentInstallActiveObserver::NewL( *this );        
         }
 
-    InstallWidgetL( aFile, &aInstallOptionsPckg );
+    InstallWidgetL( aFile, aInstallOptionsPckg );
     
     DLTRACEOUT((""));
     }
@@ -375,11 +349,6 @@
             iJadFileName = NULL;
             }
         
-#ifdef USE_OLD_JAVA_API        
-        // Clean the array.
-        iMIDletUids.Reset();
-#endif        
-
         // Reset information flags.            
         InstallationFinishedSetup( aError );
         }
@@ -510,47 +479,54 @@
 //
 // ---------------------------------------------------------------------------
 //
-#ifdef USE_OLD_JAVA_API
 
 TBool CNcdInstallationService::JavaAppExistsL( 
     const TUid& aUid )
     {
     DLTRACEIN((""));
 
-    MJavaRegistry* javaRegistry = MJavaRegistry::CreateL();
-    CleanupReleasePushL( *javaRegistry );
+    TBool retVal = EFalse;
+    Usif::TComponentId compId = 0;
+        
+    // Get component id
+    TRAPD( ret, compId = iScrSession.GetComponentIdForAppL( aUid ) ); 
+    if ( ret == KErrNotFound )
+        {
+        return EFalse;
+        }
+    else if  (ret != KErrNone )
+        {
+        User::Leave( ret );
+        }
+         
+    Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+    TRAPD(err, iScrSession.GetComponentL(compId, *entry));
     
-    TRAPD( err, 
+    if ( err == KErrNotFound )
         {
-        // Leaves with KErrNotFound if not found
-        MJavaRegistryMIDletEntry* midletEntry = javaRegistry->MIDletEntryL(
-            aUid );    
-        midletEntry->Release();
-        });
+        retVal = EFalse;
+        }
+    else if  (err != KErrNone )
+        {
+        User::Leave( err );
+        }
+    else
+        {
+        // type == Java ?
+        if ( entry->SoftwareType().Compare( Usif::KSoftwareTypeJava ) == 0 )
+            {
+            retVal = ETrue;
+            }
+        else
+            {
+            retVal = EFalse;
+            }
+        }
+    CleanupStack::PopAndDestroy(entry);
+    return retVal;
     
-    LeaveIfNotErrorL( err, KErrNotFound );
-    
-    CleanupStack::PopAndDestroy( javaRegistry );
-    return err == KErrNone;
     }
 
-#else
-
-TBool CNcdInstallationService::JavaAppExistsL( 
-    const TUid& aUid )
-    {
-    DLTRACEIN((""));
-
-    CJavaRegistry* javaRegistry = CJavaRegistry::NewLC();    
-
-    TBool exists = javaRegistry->RegistryEntryExistsL( aUid );
-    
-    CleanupStack::PopAndDestroy( javaRegistry );
-    return exists;
-    }
-
-#endif
-
 // Check via widget registry API
 TNcdApplicationStatus CNcdInstallationService::IsWidgetInstalledL(const TDesC& aIdentifier, const TCatalogsVersion& aVersion)
     {
@@ -924,7 +900,7 @@
     
     iInstaller.Close();
     
-    if ( aError == SwiUI::KSWInstErrUserCancel ) 
+    if ( aError == KErrCancel ) 
         {
         DLTRACE(("User cancelled, converting error to KErrAbort" ) );
         aError = KErrAbort;        
@@ -973,9 +949,7 @@
         if ( iInstallError != KErrNone ) 
             {        
             DLTRACE(("Notify install error"));
-#ifdef USE_OLD_JAVA_API            
-            iMIDletUids.Reset();
-#endif            
+
             iObserver->InstallationCompleteL( KNullDesC, TUid(), iInstallError );       
             return; 
             }
@@ -1315,7 +1289,7 @@
 void CNcdInstallationService::InstallL( RFile& aFile,
                                         const TDesC& aMimeType,
                                         const TNcdItemPurpose& aPurpose,
-                                        const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg )
+                                        const Usif::COpaqueNamedParams* aSilentInstallOptions )
     {
     DLTRACEIN(( _L("iBusy=%d, MIME: %S"),iBusy, &aMimeType ));    
     DASSERT( iObserver );
@@ -1361,7 +1335,7 @@
             aFile, 
             *iRecognizedMime, 
             KNullDesC8, 
-            aSilentInstallOptionsPckg );
+            aSilentInstallOptions );
         return;
         }
     else if ( MatchWidget( aFile, aMimeType ) )
@@ -1369,7 +1343,7 @@
         DLTRACE(("Widget"));
         InstallWidgetL( 
             aFile,
-            aSilentInstallOptionsPckg );
+            aSilentInstallOptions );
         return;
         }
     
@@ -1411,13 +1385,25 @@
         // Start application installation.
         DLINFO(( "Calling doc handler Open" ));
 
-        if ( !aSilentInstallOptionsPckg )
+        if ( !aSilentInstallOptions )
             {
             DLINFO(("Normal install"));
             InitializeInstallerL();
-            iCancelCode = SwiUI::ERequestInstallHandle;
+            //iCancelCode = SwiUI::ERequestInstallHandle;
             
-            iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
+            if ( !iArguments )
+                {
+                iArguments = Usif::COpaqueNamedParams::NewL();
+                }
+            if ( !iResults )
+               {
+               iResults = Usif::COpaqueNamedParams::NewL();
+               }
+            
+            iArguments->AddIntL( Usif::KSifInParam_InstallSilently, EFalse );
+            
+            iInstaller.Install( aFile, *iArguments, *iResults, iInstallStatusObserver->iStatus ); 
+            //iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
             iInstallStatusObserver->StartToObserve();            
             }
         else
@@ -1427,7 +1413,7 @@
             // of the silent install and it will forward the information for the callback
             // function of this class object.
             iSilentInstallActiveObserver->StartToObserveL( aFile,
-                                                           *aSilentInstallOptionsPckg );
+                                                           aSilentInstallOptions );
             }
             
         iBusy = ETrue;
@@ -1498,7 +1484,7 @@
 void CNcdInstallationService::InstallJavaL( RFile& aFile,
                                             const TDesC& /*aMimeType*/,
                                             const TDesC8& aDescriptorData,
-                                            const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg )
+                                            const Usif::COpaqueNamedParams* aSilentInstallOptions )
     {
     DLTRACEIN((_L("iBusy=%d, descriptor=%d"),iBusy, aDescriptorData.Length() ));
     DASSERT( iObserver );
@@ -1512,15 +1498,6 @@
 
     iInstallError = KErrNone;
     
-#ifdef USE_OLD_JAVA_API
-    // Store installed java app uids before installation to see
-    // which one is a new java app later.
-    MJavaRegistry* javaRegistry = MJavaRegistry::CreateL();
-    CleanupReleasePushL( *javaRegistry );
-    iMIDletUids.Reset();
-    javaRegistry->InstalledMIDletUidsL( iMIDletUids );
-    CleanupStack::PopAndDestroy( javaRegistry );
-#endif
     
     // In platform security systems JAR and JAD has to be in same folder
     // to get the installation process work correctly.
@@ -1542,7 +1519,7 @@
     iInstallType = EJavaInstall;
     TDataType dataType;    
             
-    if ( aSilentInstallOptionsPckg == NULL )
+    if ( aSilentInstallOptions == NULL )
         {
         DLINFO(("Normal install"));
         InitializeInstallerL();
@@ -1550,15 +1527,40 @@
             {
             DLTRACE(("Installing JAD+JAR"));
             // JAD+JAR install
-            iCancelCode = SwiUI::ERequestInstall;
-            iInstaller.Install( iInstallStatusObserver->iStatus, *iJadFileName );
+            //iCancelCode = SwiUI::ERequestInstall;
+            if ( !iArguments )
+                {
+                iArguments = Usif::COpaqueNamedParams::NewL();
+                }
+            if ( !iResults )
+                {
+                iResults = Usif::COpaqueNamedParams::NewL();
+                }
+             
+             iArguments->AddIntL( Usif::KSifInParam_InstallSilently, EFalse );
+                        
+            iInstaller.Install( *iJadFileName, *iArguments, *iResults, iInstallStatusObserver->iStatus ); 
+            //iInstaller.Install( iInstallStatusObserver->iStatus, *iJadFileName );
             }
         else
             {
             DLTRACE(("Installing JAR"));
             // JAR install
-            iCancelCode = SwiUI::ERequestInstallHandle;
-            iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
+            //iCancelCode = SwiUI::ERequestInstallHandle;
+            if ( !iArguments )
+                {
+                iArguments = Usif::COpaqueNamedParams::NewL();
+                }
+            if ( !iResults )
+               {
+               iResults = Usif::COpaqueNamedParams::NewL();
+               }
+            
+             iArguments->AddIntL( Usif::KSifInParam_InstallSilently, EFalse );
+             
+             iInstaller.Install( aFile, *iArguments, *iResults, iInstallStatusObserver->iStatus ); 
+            
+            //iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
             }
         
         iInstallStatusObserver->StartToObserve();
@@ -1574,7 +1576,7 @@
             // of the silent install and it will forward the information for the callback
             // function of this class object.
             iSilentInstallActiveObserver->StartToObserveL( *iJadFileName,
-                                                           *aSilentInstallOptionsPckg );
+                                                           aSilentInstallOptions );
             }
         else
             {
@@ -1584,7 +1586,7 @@
             // of the silent install and it will forward the information for the callback
             // function of this class object.
             iSilentInstallActiveObserver->StartToObserveL( aFile,
-                                                           *aSilentInstallOptionsPckg );
+                                                           aSilentInstallOptions );
             }        
         }
 
@@ -1600,7 +1602,7 @@
 //
 void CNcdInstallationService::InstallWidgetL( 
     RFile& aFile,
-    const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg )
+    const Usif::COpaqueNamedParams* aSilentInstallOptions )
     {
     DLTRACEIN((""));    
     
@@ -1614,13 +1616,24 @@
     // Start application installation.
     DLINFO(( "Calling doc handler Open" ));
 
-    if ( !aSilentInstallOptionsPckg )
+    if ( !aSilentInstallOptions )
         {
         DLINFO(("Normal install"));
         InitializeInstallerL();
-        iCancelCode = SwiUI::ERequestInstallHandle;
-        
-        iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
+        //iCancelCode = SwiUI::ERequestInstallHandle;
+        if ( !iArguments )
+            {
+            iArguments = Usif::COpaqueNamedParams::NewL();
+            }
+        if ( !iResults )
+           {
+           iResults = Usif::COpaqueNamedParams::NewL();
+           }
+                    
+        iArguments->AddIntL( Usif::KSifInParam_InstallSilently, EFalse );
+        iInstaller.Install(aFile, *iArguments, *iResults, iInstallStatusObserver->iStatus  );
+         
+        //iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
         iInstallStatusObserver->StartToObserve();            
         }
     else
@@ -1630,7 +1643,7 @@
         // of the silent install and it will forward the information for the callback
         // function of this class object.
         iSilentInstallActiveObserver->StartToObserveL( aFile,
-                                                       *aSilentInstallOptionsPckg );
+                                                       aSilentInstallOptions );
         }
         
     iBusy = ETrue;
@@ -1647,10 +1660,13 @@
     DeletePtr( iInstallStatusObserver );
     iInstallStatusObserver = CNcdActiveOperationObserver::NewL( *this );
     
+    User::LeaveIfError( iInstaller.Connect() );
+    /*
     if ( !iInstaller.Handle() ) 
         {
         User::LeaveIfError( iInstaller.Connect() );
         }
+    */
     }
     
 
@@ -1661,11 +1677,13 @@
 void CNcdInstallationService::CancelInstall()
     {
     DLTRACEIN((""));
-    if ( iInstallStatusObserver &&
-         iInstaller.Handle() ) 
+    //if ( iInstallStatusObserver &&
+    //     iInstaller.Handle() ) 
+    if ( iInstallStatusObserver )
         {
         DLTRACE(("Cancelling installation"));
-        iInstaller.CancelAsyncRequest( iCancelCode );
+        iInstaller.CancelOperation();
+        //iInstaller.CancelAsyncRequest( iCancelCode );
         }
     
     DeletePtr( iInstallStatusObserver );
@@ -1822,7 +1840,7 @@
     {
     DLTRACEIN((""));
         
-    TApaAppInfo info;
+/*    TApaAppInfo info;
     ConnectApaLsL();    
     User::LeaveIfError( iApaLs.GetAllApps() );
     
@@ -1850,7 +1868,8 @@
         {       
         appErr = iApaLs.GetNextApp( info );
         if ( appErr == KErrNone )
-            {            
+            {
+            DLTRACE(("After GetNextApp"));
             // App is considered a ROM app if its not found either
             // in SIS registry or midlet registry
             // Note: ROM apps can be in SIS registry also but that doesn't
@@ -1893,7 +1912,7 @@
     while( appErr == KErrNone && retryCount >= 0 );
         
     iApaLs.Close();
-    CleanupStack::PopAndDestroy( &midletUids );    
+    CleanupStack::PopAndDestroy( &midletUids );*/    
     
     DLTRACEOUT(("ROM apps: %d", iRomUids.Count() ));
     }
@@ -1903,30 +1922,39 @@
 // Gets a list of installed midlet UIDs
 // ---------------------------------------------------------------------------
 //
-#ifdef USE_OLD_JAVA_API
 
 void CNcdInstallationService::MidletUidsL( RArray<TUid>& aUids )
     {
-    DLTRACEIN((""));
-    MJavaRegistry* javaRegistry = MJavaRegistry::CreateL();
-    CleanupReleasePushL( *javaRegistry );
-    javaRegistry->InstalledMIDletUidsL( aUids );
-    CleanupStack::PopAndDestroy( javaRegistry );    
-    }
 
-#else
+    // Get ids of all java components in scr
+    RArray<Usif::TComponentId> javaComponentIdList;
+    CleanupClosePushL( javaComponentIdList );
+    
+    Usif::CComponentFilter *pJavaSwTypeFilter = Usif::CComponentFilter::NewLC();
+    pJavaSwTypeFilter->SetSoftwareTypeL( Usif::KSoftwareTypeJava );
+    iScrSession.GetComponentIdsL( javaComponentIdList, pJavaSwTypeFilter );
+    CleanupStack::PopAndDestroy( pJavaSwTypeFilter );
 
-void CNcdInstallationService::MidletUidsL( RArray<TUid>& aUids )
-    {
-    DLTRACEIN((""));
-    CJavaRegistry* javaRegistry = CJavaRegistry::NewLC();
-    javaRegistry->GetRegistryEntryUidsL( aUids );          
-    CleanupStack::PopAndDestroy( javaRegistry );    
+    
+    // Get components
+    TInt aUidIndex = 0;
+    for ( TInt i = 0; i < javaComponentIdList.Count(); ++i )
+        {
+        RArray<TUid> midletUids;
+        CleanupClosePushL( midletUids );
+        iScrSession.GetAppUidsForComponentL( javaComponentIdList[i], midletUids );
+        for ( TInt j = 0; j < midletUids.Count(); ++j )
+            {
+            aUids[aUidIndex] = aUids[j];
+            aUidIndex++;
+            }
+        CleanupStack::PopAndDestroy(); // midletUids
+        }
+    
+    CleanupStack::PopAndDestroy(); // javaComponentIdList
+    
     }
 
-#endif
-
-
 // ---------------------------------------------------------------------------
 // Checks if the application is in ROM
 // ---------------------------------------------------------------------------
@@ -1937,122 +1965,6 @@
     return iRomUids.Find( aUid ) != KErrNotFound;    
     }
 
-
-// ---------------------------------------------------------------------------
-// Returns the UID of the latest installed midlet, NULL UID if none have
-// been installed since the last device restart
-// ---------------------------------------------------------------------------
-//
-#ifdef USE_OLD_JAVA_API
-
-TUid CNcdInstallationService::LatestMidletUidL( 
-    MJavaRegistry& aJavaRegistry ) const
-    {
-    DLTRACEIN((""));
-    TInt suiteUid = 0;            
-    
-    // Get UID for the latest installed Midlet suite
-    // KPSUidJavaLatestInstallation = 0x10282567
-    // Ignoring error in case the key or read policy change so that client
-    // doesn't behave strangely
-    RProperty::Get( KUidSystemCategory, 
-        KPSUidJavaLatestInstallation, suiteUid );
-    
-    DLTRACE(("JMI UID: %x", suiteUid ));
-
-    if ( !suiteUid )  
-        {
-        return KNullUid;
-        }
-    
-    // Get entry for the installed suite
-    MJavaRegistrySuiteEntry* suite = aJavaRegistry.SuiteEntryL( 
-        TUid::Uid( suiteUid ) );
-    CleanupReleasePushL( *suite );        
-    RArray<TUid> suiteUids;
-    CleanupClosePushL( suiteUids );
-
-    TUid midletUid = KNullUid; 
-    suite->MIDletUidsL( suiteUids );
-    
-    // Take first midlet UID from the suite
-    if ( suiteUids.Count() ) 
-        {
-        midletUid = suiteUids[0];
-        }
-    DLTRACE(("Midlets in suite: %d", suite->NumberOfMIDletsL() ));
-    CleanupStack::PopAndDestroy( &suiteUids );
-    DLTRACE(("InstalledAppsEntryUid: %x", midletUid.iUid ));
-
-    CleanupStack::PopAndDestroy( suite );    
-    return midletUid;
-    }
-
-#else
-
-TUid CNcdInstallationService::LatestMidletUidL( 
-    CJavaRegistry& aJavaRegistry ) const
-    {
-    DLTRACEIN((""));
-    TInt suiteUid = 0;            
-    
-    // Get UID for the latest installed Midlet suite
-    // KPSUidJavaLatestInstallation = 0x10282567
-    // Ignoring error in case the key or read policy change so that client
-    // doesn't behave strangely
-    RProperty::Get( KUidSystemCategory, 
-        KPSUidJavaLatestInstallation, suiteUid );
-    
-    DLTRACE(("JMI UID: %x", suiteUid ));
-
-    if ( !suiteUid )  
-        {
-        return KNullUid;
-        }
-    
-    // Get entry for the installed suite
-    CJavaRegistryEntry* suite = aJavaRegistry.RegistryEntryL( 
-        TUid::Uid( suiteUid ) );
-    
-    if ( !suite )
-        {
-        return KNullUid;
-        }
-    
-    CleanupStack::PushL( suite );        
-    
-    DASSERT( suite->Type() < EGeneralApplication && 
-             suite->Type() >= EGeneralPackage );
-    
-    CJavaRegistryPackageEntry* entry = 
-        static_cast<CJavaRegistryPackageEntry*>( suite );
-    
-    TUid midletUid = KNullUid;
-    TInt count = entry->NumberOfEmbeddedEntries(); 
-    TBool appFound = EFalse;
-    TInt index = 0;
-    
-    // Find the first application from the suite
-    while ( index < count && !appFound )
-        {
-        CJavaRegistryEntry* app = entry->EmbeddedEntryByNumberL( index );
-        if ( app->Type() >= EGeneralApplication ) 
-            {
-            midletUid = app->Uid();
-            appFound = ETrue;
-            DLTRACE(( "Found app: %x", midletUid.iUid ));
-            }
-        delete app;
-        ++index;
-        }
-    
-    CleanupStack::PopAndDestroy( suite );    
-    return midletUid;
-    }
-
-
-#endif
-
 // ---------------------------------------------------------------------------
 // Returns true if the MIME type matches a Java application or descriptor
 // ---------------------------------------------------------------------------
@@ -2065,77 +1977,37 @@
     }
 
 
-#ifdef USE_OLD_JAVA_API
+
 
 TUid CNcdInstallationService::InstalledMidletUidL()
     {
-    DLTRACEIN((""));
-    RArray<TUid> MIDletUids;
-    CleanupClosePushL( MIDletUids );
+
+    //Usif::COpaqueNamedParams* iResults = 0; // to be removed
     
-    MJavaRegistry* javaRegistry = MJavaRegistry::CreateL();
-    CleanupReleasePushL( *javaRegistry );
-    javaRegistry->InstalledMIDletUidsL( MIDletUids );
-    TUid MIDletUid = KNullUid;
-    // Search for new uids in Java registry.
-    for ( TInt i = 0 ; i < MIDletUids.Count() ; i++ )
+    RArray<TUid> appUids;
+    TUid midletUid = KNullUid;
+    TInt compId = 0;
+    
+    // Get component id
+    TRAPD ( err, iResults->IntByNameL( Usif::KSifOutParam_ComponentId ));
+    if ( err == KErrNotFound )
         {
-        if ( iMIDletUids.Find( MIDletUids[i] ) == KErrNotFound )
-            {
-            // A new uid found, this is the installed midlet's uid
-            MIDletUid = MIDletUids[i];
-            break;
-            }
-        }
-
-    // We didn't get any new UID so we have to check Java installer's
-    // P&S key for the installed suite UID and the get the midlet UID
-    // from that. This happens when a midlet with predefined UID, 
-    // eg. WidSets, is reinstalled. Midlet UIDs are predefined with
-    // the attribute Nokia-MIDlet-UID-<n> in a JAD or JAR manifest
-    if ( MIDletUid == KNullUid ) 
-        {
-        MIDletUid = LatestMidletUidL( *javaRegistry );
+        return midletUid;
         }
     
-    CleanupStack::PopAndDestroy( javaRegistry );
-    CleanupStack::PopAndDestroy( &MIDletUids );
-
-    iMIDletUids.Reset();
-    return MIDletUid;
-    }
-
-#else // USE_OLD_JAVA_API
-
-TUid CNcdInstallationService::InstalledMidletUidL()
-    {
-    DLTRACEIN((""));
-    CJavaRegistry* registry = CJavaRegistry::NewLC();
-    TUid midletUid = LatestMidletUidL( *registry );
-    CleanupStack::PopAndDestroy( registry );
+    // Get components
+    CleanupClosePushL( appUids );
+    iScrSession.GetAppUidsForComponentL( compId, appUids );
+    
+    // return first midlet uid, if exists
+    if ( appUids.Count() != 0 )
+        {
+        midletUid = appUids[0];
+        }
+    CleanupStack::PopAndDestroy(); // appUids 
     return midletUid;
     }
 
-#endif // USE_OLD_JAVA_API
-
-
-// ---------------------------------------------------------------------------
-// Populates the list of installed widgets
-// ---------------------------------------------------------------------------
-//
-void CNcdInstallationService::PopulateInstalledWidgetUidsL() 
-    {
-    DLTRACEIN((""));
-
-    if ( !iWidgetRegistry.Handle() )
-        {
-        User::LeaveIfError( iWidgetRegistry.Connect() );
-        }
-    
-    iInstalledWidgets.ResetAndDestroy();
-    User::LeaveIfError( iWidgetRegistry.InstalledWidgetsL( iInstalledWidgets ) );    
-    }
-
 // ---------------------------------------------------------------------------
 // Populates the list of installed widgets
 // ---------------------------------------------------------------------------
@@ -2145,38 +2017,44 @@
     {
     DLTRACEIN((""));
     
-    // Get the list of installed widget uids 
-    PopulateInstalledWidgetUidsL();
+    // Get ids of all widget components in scr
+    RArray<Usif::TComponentId> widgetComponentIdList;
+    Usif::CComponentFilter *pWidgetSwTypeFilter = Usif::CComponentFilter::NewLC();
+    pWidgetSwTypeFilter->SetSoftwareTypeL(Usif::KSoftwareTypeWidget);
+
+    iScrSession.GetComponentIdsL(widgetComponentIdList, pWidgetSwTypeFilter);
     
-    const TInt count = iInstalledWidgets.Count();
+    CleanupStack::PopAndDestroy(pWidgetSwTypeFilter);
+    CleanupClosePushL(widgetComponentIdList);
     
-    // Create array with UID & Version infos
+    const TInt count = widgetComponentIdList.Count();
+    
+    // Create array with id & version infos
     for ( TInt i = 0; i < count; ++i )
         {
         CExtendedWidgetInfo* tempInfo = new ( ELeave ) CExtendedWidgetInfo();
         CleanupStack::PushL( tempInfo );
         
-        CWidgetInfo* widgetInfo = iInstalledWidgets[i];
+        // Get widget
+        Usif::TComponentId compId = widgetComponentIdList[i];
+        Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+        iScrSession.GetComponentL(compId, *entry);
         
-        CWidgetPropertyValue* version = iWidgetRegistry.GetWidgetPropertyValueL
-            (widgetInfo->iUid, EBundleVersion );
-        CleanupStack::PushL( version );
-
-        // Fill info
-        tempInfo->iUid = widgetInfo->iUid;
-        if (!version->iValue.s)
-            *(tempInfo->iVersion) = KDefVersion;
-        else
-            *(tempInfo->iVersion) = *(version->iValue.s);
+        // Fill id & version
+        tempInfo->iUid.iUid= compId;
+        *(tempInfo->iVersion) = entry->Version();
         
         // Append to arrayt
         aWidgets.AppendL( tempInfo );
-
-        CleanupStack::PopAndDestroy( version );
+        
+        CleanupStack::PopAndDestroy(entry);
         CleanupStack::Pop( tempInfo );
         }
+    
+    
+    CleanupStack::PopAndDestroy(); // widgetComponentIdList
    
-        DLTRACEOUT((""));
+    DLTRACEOUT((""));
 
     }
 
@@ -2184,26 +2062,13 @@
 // Gets the name of widget that was installed last
 // ---------------------------------------------------------------------------
 //
+
 HBufC* CNcdInstallationService::InstalledWidgetNameLC()
     {
     DLTRACEIN((""));
     
-    TUid widgetUid = InstalledWidgetUidL();
-    
-    if ( widgetUid == KNullUid )
-        {
-        DLERROR(("No widget uid"));
-        // No new UID was found, so we assume user canceled the installation.
-        // Installer does not give any error code in that case.
-        return NULL;
-        }
-
-    HBufC* bundleId = HBufC::NewLC( KWidgetBundleIdLength );
-    TPtr des( bundleId->Des() );
-    iWidgetRegistry.GetWidgetBundleId( widgetUid, des );            
-
-    DLTRACEOUT(( _L("Widget bundle id: %S"), bundleId ));
-    return bundleId;
+    // Not currently suported
+    return NULL;
     }
     
 
@@ -2313,30 +2178,48 @@
 
 
 // ---------------------------------------------------------------------------
-//   
+//Calling widget registry API to check if a widget with given uid is installed 
+//already
 // ---------------------------------------------------------------------------
 //
 TBool CNcdInstallationService::WidgetExistsL( const TUid& aUid )
     {
     DLTRACEIN((""));
-
-    if ( !iWidgetRegistry.Handle() )
-        {
-        User::LeaveIfError( iWidgetRegistry.Connect() );
-        }
+    
+    TBool retVal = EFalse;
+        
+    // Get entry 
+    Usif::TComponentId compId = aUid.iUid;
+    Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+    TRAPD(err, iScrSession.GetComponentL(compId, *entry));
     
-    if ( iWidgetRegistry.IsWidget( aUid ) )
+    if ( err == KErrNotFound || !retVal )
+        {
+        retVal = EFalse;
+        }
+    else if  (err != KErrNone )
+        {
+        User::Leave( err );
+        }
+    else
         {
-        TBuf<KWidgetBundleIdLength> id;
-        iWidgetRegistry.GetWidgetBundleId( aUid, id );
-        return iWidgetRegistry.WidgetExistsL( id );
+        // widget ??
+        if ( entry->SoftwareType().Compare( Usif::KSoftwareTypeWidget ) == 0 )
+            {
+            retVal = ETrue;
+            }
+        else
+            {
+            retVal = EFalse;
+            }
         }
-    return EFalse;         
+    CleanupStack::PopAndDestroy(entry);
+    return retVal;
     }
 
 // ---------------------------------------------------------------------------
 //Calling widget registry API to check if a widget with given uid is installed 
-//already
+//already. Returns the version of the installed widget.
 // ---------------------------------------------------------------------------
 //
 TBool CNcdInstallationService::WidgetExistsL( 
@@ -2344,33 +2227,40 @@
     {
     DLTRACEIN((""));
     
-    if ( !iWidgetRegistry.Handle() )
+    TBool retVal = EFalse;
+    
+    // Get entry 
+    Usif::TComponentId compId = aUid.iUid;
+    Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+    TRAPD(err, retVal= iScrSession.GetComponentL(compId, *entry));
+    
+    if ( err == KErrNotFound || !retVal )
         {
-        User::LeaveIfError( iWidgetRegistry.Connect() );
+        retVal = EFalse;
         }
-    
-    if ( iWidgetRegistry.IsWidget( aUid ) )
+    else if  (err != KErrNone )
         {
-        TBuf<KWidgetBundleIdLength> id;
-        iWidgetRegistry.GetWidgetBundleId( aUid, id );
-        if (iWidgetRegistry.WidgetExistsL( id ))
+        User::Leave( err );
+        }
+    else
+        {
+        // widget ??
+        if ( entry->SoftwareType().Compare( Usif::KSoftwareTypeWidget ) == 0 )
             {
+            retVal = ETrue;
+        
             // Get version
-            CWidgetPropertyValue* version = 
-                iWidgetRegistry.GetWidgetPropertyValueL(aUid, EBundleVersion );
-            CleanupStack::PushL( version );
-            TCatalogsVersion::ConvertL( aVersion, *(version->iValue.s) );
-            CleanupStack::PopAndDestroy( version ); 
-            return (ETrue);
+            TPtrC entryVersion = entry->Version();
+            TCatalogsVersion::ConvertL( aVersion, entryVersion );
             }
         else
             {
-            return (EFalse);
+            retVal = EFalse;
             }
         }
-    else
-       return(EFalse);
-
+    CleanupStack::PopAndDestroy(entry);
+    return retVal;
+    
     }
     
 // ---------------------------------------------------------------------------
@@ -2383,44 +2273,44 @@
     {
     DLTRACEIN((""));
     
-    if ( !iWidgetRegistry.Handle() )
-          {
-          User::LeaveIfError( iWidgetRegistry.Connect() );
-          }
-
-    RPointerArray<CWidgetInfo> widgetInfoArr;
+    TBool retVal = EFalse;
+    Usif::TComponentId compId = 0;
+    
+    // Get widget component id by identifier
+    TRAPD( err, compId = 
+           iScrSession.GetComponentIdL( aIdentifier, Usif::KSoftwareTypeWidget ));
     
-    CleanupResetAndDestroyPushL( widgetInfoArr );
-    TInt err = iWidgetRegistry.InstalledWidgetsL(widgetInfoArr);
-    
-    for( TInt i( widgetInfoArr.Count() - 1 ); i >= 0; --i ) 
+    if ( err == KErrNotFound )
+        {
+        retVal = EFalse;
+        }
+    else if  (err != KErrNone )
         {
-        CWidgetInfo* widgetInfo( widgetInfoArr[i] );                  
-        CWidgetPropertyValue* bundleId = 
-            iWidgetRegistry.GetWidgetPropertyValueL
-                (widgetInfo->iUid, EBundleIdentifier );
-        CleanupStack::PushL( bundleId );
+        User::Leave( err );
+        }
+    else
+        {
+        // Widget found
+        retVal = ETrue;
         
-        if( aIdentifier.Compare( *(bundleId->iValue.s) )== 0 )
+        // Get entry 
+        Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+        retVal = iScrSession.GetComponentL(compId, *entry);
+        
+        // Get version
+        if ( retVal )
             {
-            CWidgetPropertyValue* version = 
-                iWidgetRegistry.GetWidgetPropertyValueL
-                    (widgetInfo->iUid, EBundleVersion );
-            CleanupStack::PushL( version );
-            TCatalogsVersion::ConvertL( aVersion, *(version->iValue.s) );
-            
-            CleanupStack::PopAndDestroy( version );
-            CleanupStack::PopAndDestroy( bundleId );
-            CleanupStack::PopAndDestroy( &widgetInfoArr );
-                        
-            return ETrue;
+            TPtrC entryVersion = entry->Version();
+            TCatalogsVersion::ConvertL( aVersion, entryVersion );
             }
-        CleanupStack::PopAndDestroy( bundleId );
+    
+        CleanupStack::PopAndDestroy(entry);
         }
-    CleanupStack::PopAndDestroy( &widgetInfoArr );
-    return EFalse;
+    
+    return retVal;
     }
 
+
 // ---------------------------------------------------------------------------
 //  Calling widget registry API to return the Uid of the widget
 //  with given identifier.
@@ -2432,15 +2322,13 @@
     
     TUid id = TUid::Uid(0);
     
-   if ( !iWidgetRegistry.Handle() )
-          {
-          User::LeaveIfError( iWidgetRegistry.Connect() );
-          }
+    Usif::TComponentId compId = iScrSession.GetComponentIdL(aIdentifier, Usif::KSoftwareTypeNative);
     
-    id.iUid = iWidgetRegistry.GetWidgetUidL( aIdentifier);
-
+    id.iUid = compId;
+    
     return id;
     
+    
     }
 
     
--- a/ncdengine/provider/deviceinteraction/src/ncdsilentinstallactiveobserver.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/deviceinteraction/src/ncdsilentinstallactiveobserver.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -19,6 +19,8 @@
 #include "ncdsilentinstallactiveobserver.h"
 #include "ncdasyncsilentinstallobserver.h"
 
+#include <usif/scr/scr.h>
+
 
 CNcdSilentInstallActiveObserver* CNcdSilentInstallActiveObserver::NewL( MNcdAsyncSilentInstallObserver& aObserver )
     {
@@ -49,6 +51,9 @@
 
 void CNcdSilentInstallActiveObserver::ConstructL()
     {
+    
+    iResults = 0;
+    
     CActiveScheduler::Add( this );
     }
 
@@ -60,6 +65,9 @@
     // cancel install operation and closes the silent installer. 
     // If no operation is going on, the installer is already closed. 
     // So, no need to close the silent launcher here separately.
+    
+    delete (iResults);
+
     CancelAsyncOperation();
     }
 
@@ -72,12 +80,13 @@
     // Notice, that we do not call the callback functions of the observer here
     // because we suppose that the observer has started the cancel operation itself
     // or the caller will inform the observer itself.
-    SilentLauncher().CancelAsyncRequest( iCancelCode );
+    
+    SilentLauncher().CancelOperation();
     }
 
 
 void CNcdSilentInstallActiveObserver::StartToObserveL( const TDesC& aFileName,
-                                                       const SwiUI::TInstallOptionsPckg& aSilentInstallOptionsPckg )
+                                                       const Usif::COpaqueNamedParams* aSilentInstallOptions )
     {
     // For silent installation
     // Notice that if the user does not have TrustedUI capabilities
@@ -86,19 +95,22 @@
     // because the launcher will be shown in the application list.
     // So, it would not be nice to connect in the ConstructL and to show
     // the icon in the list all the time.
+    // User::LeaveIfError( SilentLauncher().Connect() );
     User::LeaveIfError( SilentLauncher().Connect() );
     
-    iCancelCode = SwiUI::ERequestSilentInstall;
-    SilentLauncher().SilentInstall( iStatus,
-                                    aFileName,
-                                    aSilentInstallOptionsPckg );
+    if (!iResults)
+        {
+        iResults = Usif::COpaqueNamedParams::NewL();
+        }
+    
+    iInstaller.Install( aFileName, *aSilentInstallOptions, *iResults, iStatus ); 
+        
 
-    SetActive();
     }
 
 
 void CNcdSilentInstallActiveObserver::StartToObserveL( RFile& aFile,
-                                                       const SwiUI::TInstallOptionsPckg& aSilentInstallOptionsPckg )
+                                                       const Usif::COpaqueNamedParams* aSilentInstallOptions )
     {
     // For silent installation
     // Notice that if the user does not have TrustedUI capabilities
@@ -107,13 +119,16 @@
     // because the launcher will be shown in the application list.
     // So, it would not be nice to connect in the ConstructL and to show
     // the icon in the list all the time.
+
     User::LeaveIfError( SilentLauncher().Connect() );
     
-    iCancelCode = SwiUI::ERequestSilentInstallHandle;
-    SilentLauncher().SilentInstall( iStatus,
-                                    aFile,
-                                    aSilentInstallOptionsPckg );
-
+    if (!iResults)
+        {
+        iResults = Usif::COpaqueNamedParams::NewL();
+        }
+    
+    iInstaller.Install( aFile, *aSilentInstallOptions, *iResults, iStatus ); 
+    
     SetActive();
     }
 
@@ -140,6 +155,15 @@
     // Close the installer. 
     // The launcher is shown in the application list.
     // So, it would not be nice to leave it there after operation is completed.
+    
+   
+    TInt ErrCategory = 0;
+    TInt ErrCode = 0;
+    TInt ExtendedErrCode =0;
+    
+    TBool ret = iResults->GetIntByNameL(Usif::KSifOutParam_ErrCategory, ErrCategory);
+    ret = iResults->GetIntByNameL(Usif::KSifOutParam_ErrCode, ErrCode);
+    ret = iResults->GetIntByNameL(Usif::KSifOutParam_ExtendedErrCode, ExtendedErrCode);
     SilentLauncher().Close();
 
     TInt errorCode( ConvertErrorCode( iStatus.Int() ) );
@@ -154,34 +178,15 @@
     return iObserver;
     }
 
-
-SwiUI::RSWInstSilentLauncher& CNcdSilentInstallActiveObserver::SilentLauncher()
+Usif::RSoftwareInstall& CNcdSilentInstallActiveObserver::SilentLauncher()
     {
-    return iSilentLauncher;
+    // return iSilentLauncher;
+    return iInstaller;
     }
 
 
 TInt CNcdSilentInstallActiveObserver::ConvertErrorCode( TInt aErrorCode )
     {
-    switch ( aErrorCode )
-        {
-        case SwiUI::KSWInstErrUserCancel:
-            // To simplify the cancel response and cancel handling,
-            // convert the error code to normal cancel error code.
-            aErrorCode = KErrCancel;
-            break;
-
-        case SwiUI::KSWInstErrInsufficientMemory:
-            // To simplify the insufficient memory response and its handling,
-            // convert the error code to normal no memory code.
-            aErrorCode = KErrNoMemory;
-            break;
-                    
-        default:
-            // Nothing to do here.
-            break;
-        }
-
     return aErrorCode;
     }
 
--- a/ncdengine/provider/protocol/inc/ncdxmlheaders.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/protocol/inc/ncdxmlheaders.h	Tue Aug 31 15:21:33 2010 +0300
@@ -28,12 +28,12 @@
 // All necessary XML DOM parser headers are included here
 #ifdef S60_3_2_WK14_OR_NEWER
 // Filenames in 3.2 from week 14 onwards
-    #include <xmlengdom.h>
-    #include <xmlengdomimplementation.h>
-    #include <xmlengdocument.h>
-    #include <xmlengserializationoptions.h>
-    #include <xmlengxestrings.h>
-    #include <xmlengutils.h>
+    #include <xml/dom/xmlengdom.h>
+    #include <xml/dom/xmlengdomimplementation.h>
+    #include <xml/dom/xmlengdocument.h>
+    #include <xml/dom/xmlengserializationoptions.h>
+    #include <xml/utils/xmlengxestrings.h>
+    #include <xml/utils/xmlengutils.h>
 #else
 
 // Filenames in 3.1
--- a/ncdengine/provider/server/src/ncdloadnodeoperationimpl.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/server/src/ncdloadnodeoperationimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -961,11 +961,7 @@
                 }
             }
         }
-    else if ( parentIdentifier )
-        {
-        CleanupStack::PopAndDestroy( parentIdentifier );
-        }
-
+    
     // Delete data because ownership has been transferred.
     CleanupStack::PopAndDestroy( aData );
     
@@ -1262,10 +1258,6 @@
                 }
             }
         }
-    else if ( parentIdentifier )
-        {
-        CleanupStack::PopAndDestroy( parentIdentifier );
-        }
         
     // Delete data because ownership has been transferred.
     CleanupStack::PopAndDestroy( aData );
--- a/ncdengine/provider/server/src/ncdloadrootnodeoperationimpl.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/server/src/ncdloadrootnodeoperationimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1018,6 +1018,11 @@
     // Create folder for catalog bundle.
     DASSERT( bundleId );
     
+    if (!bundleId)
+        {
+        User::Leave(KErrNotFound);
+        }
+    
     CNcdNodeIdentifier* metaDataId = CNcdNodeIdentifier::NewLC(
         aDetail.Value(), *bundleId, iPendingMessage->Session().Context().FamilyId() );
     DLINFO((_L("Bundle metaid ns: %S, id: %S"), 
--- a/ncdengine/provider/server/src/ncdsearchoperationimpl.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/ncdengine/provider/server/src/ncdsearchoperationimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -724,53 +724,48 @@
         delete metaIdentifier;
         metaIdentifier = NULL;
         }
-    if( addMetaData )
+
+    // set iParentIdentifier as parent if not set otherwise, this would be the case of a
+    // normal top-level node from a content source
+    if ( ! parentIdentifier ) 
         {
-        // set iParentIdentifier as parent if not set otherwise, this would be the case of a
-        // normal top-level node from a content source
-        if ( ! parentIdentifier ) 
-            {
-            parentIdentifier = CNcdNodeIdentifier::NewLC( *iParentIdentifier );
-            }
-        
-        // Get the node reference from the data handler.
-        // The node has the given parent and its metadata
-        // will be internalized with the given data.
-        CNcdNode& node =
-            iNodeManager->DataHandlerL( *parentIdentifier, *aData, iClientUid );
-            
-        CleanupStack::PopAndDestroy( parentIdentifier );
+        parentIdentifier = CNcdNodeIdentifier::NewLC( *iParentIdentifier );
+        }
+    
+    // Get the node reference from the data handler.
+    // The node has the given parent and its metadata
+    // will be internalized with the given data.
+    CNcdNode& node =
+    iNodeManager->DataHandlerL( *parentIdentifier, *aData, iClientUid );
+    
+    CleanupStack::PopAndDestroy( parentIdentifier );
 
-        // Notice that the loaded nodes should contain the actual node identifier
-        // instead of metadata identifier, because the identifiers are returned to
-        // the proxy side after operation completes.
-        CNcdNodeIdentifier* loadedNodeId = 
-            CNcdNodeIdentifier::NewLC( node.Identifier() );
-        iLoadedNodes.AppendL( loadedNodeId );
-        CleanupStack::Pop( loadedNodeId );        
+    // Notice that the loaded nodes should contain the actual node identifier
+    // instead of metadata identifier, because the identifiers are returned to
+    // the proxy side after operation completes.
+    CNcdNodeIdentifier* loadedNodeId = 
+        CNcdNodeIdentifier::NewLC( node.Identifier() );
+    iLoadedNodes.AppendL( loadedNodeId );
+    CleanupStack::Pop( loadedNodeId );        
 
-        // If the data contains icon id and datablock id, they are stored until
-        // the datablock arrives later.
-        const MNcdPreminetProtocolIcon* icon = aData->Icon();
-        if ( icon != NULL ) 
+    // If the data contains icon id and datablock id, they are stored until
+    // the datablock arrives later.
+    const MNcdPreminetProtocolIcon* icon = aData->Icon();
+    if ( icon != NULL ) 
+        {
+        const TDesC& iconId = icon->Id();
+        const TDesC& dataBlockId = icon->DataBlock();
+        if ( iconId != KNullDesC && dataBlockId != KNullDesC ) 
             {
-            const TDesC& iconId = icon->Id();
-            const TDesC& dataBlockId = icon->DataBlock();
-            if ( iconId != KNullDesC && dataBlockId != KNullDesC ) 
-                {
-                // The node metadata was created by using the DataHandlerL
-                // and inserted for the node.
-                // So, the metadata can be asked from the node now.
-                MapIconIdForDataBlockL(iconId, dataBlockId, 
-                                       node.NodeMetaDataL().Identifier() );
-                node.NodeMetaDataL().IconL().SetIconDataReady( EFalse );
-                }
+            // The node metadata was created by using the DataHandlerL
+            // and inserted for the node.
+            // So, the metadata can be asked from the node now.
+            MapIconIdForDataBlockL(iconId, dataBlockId, 
+                                   node.NodeMetaDataL().Identifier() );
+            node.NodeMetaDataL().IconL().SetIconDataReady( EFalse );
             }
         }
-    else if ( parentIdentifier )
-        {
-        CleanupStack::PopAndDestroy( parentIdentifier );
-        }
+    
     DLTRACEOUT((""));
     }
     
--- a/ncdengine/rom/altair-engine-stub.pkg	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-;
-; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-; All rights reserved.
-; This component and the accompanying materials are made available
-; under the terms of "Eclipse Public License v1.0"
-; which accompanies this distribution, and is available
-; at the URL "http://www.eclipse.org/legal/epl-v10.html".
-;
-; Initial Contributors:
-; Nokia Corporation - initial contribution.
-;
-; Contributors:
-;
-; Description:
-;
-;;*****************************************************************************
-;;
-;; NCD Altair Catalogs PKG, engine
-;; PKG for creating ROM sis stub 
-;;
-;;*****************************************************************************
-
-;Language - standard language definitions
-&EN
-
-; standard SIS file header;
-#{"Altair Engine"},(0x20019119),9,2,1006,TYPE=SA
- 
-
-;Localised Vendor name
-%{"Nokia"}
-
-;Unique Vendor name
-:"Nokia"
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Backup & restore
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-; Backup & restore file for the engine side
-"" - "z:\private\20019119\backup_registration.xml"
-
-;;*****************************************************************************
-;; Server
-;;*****************************************************************************
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Engine config
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-"" - "z:\private\20019119\config.xml"
-
-;; Client side dll
-""
-         -"z:\sys\bin\ncdengine_20019119.dll"
-
-;; Server exe
-""
-         -"z:\sys\bin\ncdserver_20019119.exe"
-
-;; Utils dll
-""
-         -"z:\sys\bin\ncdutils_20019119.dll"
-
-;; Device management dll
-""
-         -"z:\sys\bin\ncddevicemgmt_20019119.dll"
-
-;; Debug util dll
-""
-         -"z:\sys\bin\ncddebug_20019119.dll"
-
-;; Undertaker utility
-""
-         -"z:\sys\bin\ncdundertaker_20019119.exe"
-
-;; ECOM dll+rss
-;; NEW NAMING to match the IBYs. Must be same on the stub sis
-;; and the IBY to allow eclipsing.
-""
-         -"z:\sys\bin\ncdproxy_20019119.dll"
-""
-         -"z:\resource\plugins\ncdproxy_20019119.rsc"
-
-
Binary file ncdengine/rom/altair-engine-stub.sis has changed
--- a/ncdengine/rom/make_romstub.bat	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-makesis -s altair-engine-stub.pkg altair-engine-stub.sis
--- a/package_definition.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/package_definition.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -1,41 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <SystemDefinition schema="3.0.0">
   <package id="appinstall" name="Application Installation" levels="tool framework generic api">
-    <collection id="appinstaller" name="Application Installer" level="generic">
-      <component id="appmngr2" filter="s60" name="Application Manager 2" introduced="^2">
-        <unit bldFile="appinstaller/appmngr2/group"/>
-      </component>
-      <component id="appinstui" filter="s60" name="Application Installer UI" introduced="^2">
-        <unit bldFile="appinstaller/appinstui/group"/>
-      </component>
-    </collection>
-    <collection id="ncdengine" name="Nokia Content Discover" level="framework">
-      <component id="ncdengine_engine" filter="s60" name="NCD Engine" introduced="^1">
-        <unit bldFile="ncdengine/engine/group"/>
-      </component>
-      <component id="debuglogger" filter="s60" name="NCD Debug Logger" introduced="^1">
-        <!-- <unit bldFile="ncdengine/debuglogger/group"/> -->
-      </component>
-      <component id="ncdengine_build" filter="s60" name="NCD Build" introduced="^1">
-        <unit bldFile="ncdengine/group"/>
-      </component>
-    </collection>
-    <collection id="iaupdateapi_stub" name="IA Update API Stub" level="api">
-      <component id="iaupdateapi_stub_build" name="IA Update API Stub Build" filter="s60" introduced="^2">
-        <unit bldFile="iaupdateapi_stub/group"/>
-      </component>
-    </collection>
-    <collection id="iaupdate" name="Independent Apps Update" level="api">
-      <component id="iad" name="Software Update" filter="s60" introduced="^2">
-        <unit bldFile="iaupdate/iad/group"/>
-      </component>
-      <component id="iaupdate_help" filter="s60" name="IA Update Help" introduced="^2">
-        <unit bldFile="iaupdate/help/group"/>
-      </component>
-      <component id="iaupdate_build" filter="s60" name="IA Update Build" introduced="^2">
-        <unit bldFile="iaupdate/group"/>
-      </component>
-    </collection>
     <collection id="installationservices" name="Installation Services" level="generic">
       <component id="swi" name="Secure Software Install" purpose="optional">
         <unit bldFile="installationservices/swi/group" mrp="installationservices/swi/group/security_swi.mrp"/>
@@ -43,6 +8,21 @@
       <component id="swidevicetools" name="Secure Software Install Device Tools" introduced="8.1" purpose="development">
         <unit bldFile="installationservices/swidevicetools/group" mrp="installationservices/swidevicetools/group/security_switools_device.mrp"/>
       </component>
+      <component id="swcomponentregistry" name="Software Component Registry" introduced="^4" purpose="mandatory">
+        <unit bldFile="installationservices/swcomponentregistry/group" mrp="installationservices/swcomponentregistry/group/security_softwarecomponentregistry.mrp"/>
+      </component>
+      <component id="swinstallationfw" name="Software Installation Framework" introduced="^4" purpose="optional">
+        <unit bldFile="installationservices/swinstallationfw/group" mrp="installationservices/swinstallationfw/group/security_softwareinstallframework.mrp"/>
+      </component>
+      <component id="swtransactionservices" name="Software Transaction Services" introduced="^4" purpose="optional">
+        <unit bldFile="installationservices/swtransactionservices/group" mrp="installationservices/swtransactionservices/group/security_softwaretransactionservices.mrp"/>
+      </component>
+      <component id="refswinstallationplugin" name="Reference Software Installation Plugin" introduced="^4" purpose="development" class="plugin">
+        <unit bldFile="installationservices/refswinstallationplugin/group" mrp="installationservices/refswinstallationplugin/group/security_sifrefplugin.mrp"/>
+      </component>
+      <component id="refsoftwareappmgr" name="Reference Software Application Manager" introduced="^4" purpose="development">
+        <unit bldFile="installationservices/refsoftwareappmgr/group" mrp="installationservices/refsoftwareappmgr/group/security_referenceapplicationmanager.mrp"/>
+      </component>
       <component id="switestfw" name="Software Install Test Framework" deprecated="^3" introduced="7.0" purpose="development" filter="test">
         <unit mrp="installationservices/switestfw/group/install_testframework.mrp" bldFile="installationservices/switestfw/group"/>
       </component>
@@ -64,23 +44,5 @@
         <unit bldFile="secureswitools/swisistools/group" mrp="secureswitools/swisistools/group/security_sistools.mrp"/>
       </component>
     </collection>
-    <collection id="appinstall_info" name="Application Installation Info" level="api">
-      <component id="appinstall_pub" filter="s60" name="Application Installation Public Interfaces" class="api">
-        <unit bldFile="appinstall_pub/group"/>
-        <!-- <unit bldFile="appinstall_pub/startup_list_management_api/tsrc/bc/startuplistmanagementapi/selfsignedstartupapp/group"/> -->
-        <!-- <unit bldFile="appinstall_pub/startup_list_management_api/tsrc/bc/startuplistmanagementapi/startupapp/group"/> -->
-      </component>
-      <component id="appinstall_plat" filter="s60" name="Application Installation Platform Interfaces" class="api">
-        <unit bldFile="appinstall_plat/group"/>
-        <unit bldFile="appinstall_plat/appmngr2runtimeapi/tsrc/group"/>
-        <!-- <unit bldFile="appinstall_plat/appmngr2runtimeapi/tsrc/data_src/sistest"/> -->
-      </component>
-      <component id="appinstall_test" filter="s60" name="Application Installation Test" purpose="development">
-        <!-- <unit bldFile="tsrc/group"/> -->
-      </component>
-      <component id="appinstall_metadata" name="Application Installation Metadata" class="config" introduced="^2" purpose="development" target="desktop">
-        <unit mrp="appinstall_info/appinstall_metadata/appinstall_metadata.mrp"/>
-      </component>
-    </collection>
   </package>
 </SystemDefinition>
--- a/package_definition_v2.xml	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
-  <package id="appinstall" name="Application Installation" levels="tool framework generic api">
-    <collection id="appinstaller" name="Application Installer" level="generic">
-      <component id="appmngr2" filter="s60" name="Application Manager 2" introduced="^2">
-        <unit bldFile="appinstaller/appmngr2/group"/>
-      </component>
-      <component id="appinstui" filter="s60" name="Application Installer UI" introduced="^2">
-        <unit bldFile="appinstaller/appinstui/group"/>
-      </component>
-    </collection>
-    <collection id="ncdengine" name="Nokia Content Discover" level="framework">
-      <component id="ncdengine_engine" filter="s60" name="NCD Engine" introduced="^1">
-        <unit bldFile="ncdengine/engine/group"/>
-      </component>
-      <component id="debuglogger" filter="s60" name="NCD Debug Logger" introduced="^1">
-        <!-- <unit bldFile="ncdengine/debuglogger/group"/> -->
-      </component>
-      <component id="ncdengine_build" filter="s60" name="NCD Build" introduced="^1">
-        <unit bldFile="ncdengine/group"/>
-      </component>
-    </collection>
-    <collection id="iaupdateapi_stub" name="IA Update API Stub" level="api">
-      <component id="iaupdateapi_stub_build" name="IA Update API Stub Build" filter="s60" introduced="^2">
-        <unit bldFile="iaupdateapi_stub/group"/>
-      </component>
-    </collection>
-    <collection id="iaupdate" name="Independent Apps Update" level="api">
-      <component id="iad" name="Software Update" filter="s60" introduced="^2">
-        <unit bldFile="iaupdate/iad/group"/>
-      </component>
-      <component id="iaupdate_help" filter="s60" name="IA Update Help" introduced="^2">
-        <unit bldFile="iaupdate/help/group"/>
-      </component>
-      <component id="iaupdate_build" filter="s60" name="IA Update Build" introduced="^2">
-        <unit bldFile="iaupdate/group"/>
-      </component>
-    </collection>
-    <collection id="installationservices" name="Installation Services" level="generic">
-      <component id="swi" name="Secure Software Install" purpose="optional">
-        <unit bldFile="installationservices/swi/group" mrp="installationservices/swi/group/security_swi.mrp"/>
-      </component>
-      <component id="swidevicetools" name="Secure Software Install Device Tools" introduced="8.1" purpose="development">
-        <unit bldFile="installationservices/swidevicetools/group" mrp="installationservices/swidevicetools/group/security_switools_device.mrp"/>
-      </component>
-      <component id="swcomponentregistry" name="Software Component Registry" introduced="^4" purpose="mandatory">
-        <unit bldFile="installationservices/swcomponentregistry/group" mrp="installationservices/swcomponentregistry/group/security_softwarecomponentregistry.mrp"/>
-      </component>
-      <component id="swinstallationfw" name="Software Installation Framework" introduced="^4" purpose="optional">
-        <unit bldFile="installationservices/swinstallationfw/group" mrp="installationservices/swinstallationfw/group/security_softwareinstallframework.mrp"/>
-      </component>
-      <component id="swtransactionservices" name="Software Transaction Services" introduced="^4" purpose="optional">
-        <unit bldFile="installationservices/swtransactionservices/group" mrp="installationservices/swtransactionservices/group/security_softwaretransactionservices.mrp"/>
-      </component>
-      <component id="refswinstallationplugin" name="Reference Software Installation Plugin" introduced="^4" purpose="development" class="plugin">
-        <unit bldFile="installationservices/refswinstallationplugin/group" mrp="installationservices/refswinstallationplugin/group/security_sifrefplugin.mrp"/>
-      </component>
-      <component id="refsoftwareappmgr" name="Reference Software Application Manager" introduced="^4" purpose="development">
-        <unit bldFile="installationservices/refsoftwareappmgr/group" mrp="installationservices/refsoftwareappmgr/group/security_referenceapplicationmanager.mrp"/>
-      </component>
-      <component id="switestfw" name="Software Install Test Framework" deprecated="^3" introduced="7.0" purpose="development" filter="test">
-        <unit mrp="installationservices/switestfw/group/install_testframework.mrp" bldFile="installationservices/switestfw/group"/>
-      </component>
-      <component id="swiconfig" name="Software Install Config" introduced="9.1" purpose="optional" class="config">
-        <unit bldFile="installationservices/swiconfig/group" mrp="installationservices/swiconfig/group/install_config.mrp"/>
-      </component>
-    </collection>
-    <collection id="secureswitools" name="Secure Software Install Tools" level="tool">
-      <component id="makekeys" name="MakeKeys" filter="gt" introduced="6.0" purpose="optional" target="desktop">
-        <unit bldFile="secureswitools/makekeys/group" mrp="secureswitools/makekeys/group/security_makekeys.mrp"/>
-      </component>
-      <component id="swianalysistoolkit" name="SWI Analysis Toolkit" purpose="development" target="desktop">
-        <unit bldFile="secureswitools/swianalysistoolkit/group" mrp="secureswitools/swianalysistoolkit/group/security_switools.mrp"/>
-      </component>
-      <component id="openssllib" name="OpenSSL Library" purpose="optional" target="desktop">
-        <unit mrp="secureswitools/openssllib/security_openssl.mrp"/>
-      </component>
-      <component id="swisistools" name="Secure Software Install SIS Tools" purpose="optional" target="desktop">
-        <unit bldFile="secureswitools/swisistools/group" mrp="secureswitools/swisistools/group/security_sistools.mrp"/>
-      </component>
-    </collection>
-    <collection id="appinstall_info" name="Application Installation Info" level="api">
-      <component id="appinstall_pub" filter="s60" name="Application Installation Public Interfaces" class="api">
-        <unit bldFile="appinstall_pub/group"/>
-        <!-- <unit bldFile="appinstall_pub/startup_list_management_api/tsrc/bc/startuplistmanagementapi/selfsignedstartupapp/group"/> -->
-        <!-- <unit bldFile="appinstall_pub/startup_list_management_api/tsrc/bc/startuplistmanagementapi/startupapp/group"/> -->
-      </component>
-      <component id="appinstall_plat" filter="s60" name="Application Installation Platform Interfaces" class="api">
-        <unit bldFile="appinstall_plat/group"/>
-        <unit bldFile="appinstall_plat/appmngr2runtimeapi/tsrc/group"/>
-        <!-- <unit bldFile="appinstall_plat/appmngr2runtimeapi/tsrc/data_src/sistest"/> -->
-      </component>
-      <component id="appinstall_test" filter="s60" name="Application Installation Test" purpose="development">
-        <!-- <unit bldFile="tsrc/group"/> -->
-      </component>
-      <component id="appinstall_metadata" name="Application Installation Metadata" class="config" introduced="^2" purpose="development" target="desktop">
-        <unit mrp="appinstall_info/appinstall_metadata/appinstall_metadata.mrp"/>
-      </component>
-    </collection>
-  </package>
-</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_map.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<PackageMap root="sf" layer="mw" />
\ No newline at end of file
--- a/secureswitools/makekeys/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/makekeys/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1999-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -23,19 +23,14 @@
 */
 
 PRJ_PLATFORMS
-TOOLS
+TOOLS2
 
 PRJ_EXPORTS
 
 PRJ_MMPFILES
-#ifdef TOOLS
-#ifndef TOOLS2
-#ifdef MSVCDOTNET
-makefile ../src/makekeys.net.fil
-#else //!MSVCDOTNET
-makefile ../src/makekeys.fil
-#endif // MSVCDOTNET
-#endif // TOOLS2
-#endif // TOOLS
 
-PRJ_TESTMMPFILES
+#ifdef TOOLS2
+#ifndef TOOLS2_LINUX
+makekeys.mmp
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/makekeys/group/makekeys.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This mmp file is used to replace calling makefile directly.
+*
+*/
+
+
+TARGET			makekeys.exe
+TARGETTYPE		exe
+
+
+USERINCLUDE 		../../swisistools/source/makesis
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE 		../../openssllib/import/inc
+
+
+SOURCEPATH 		../src
+SOURCE			CertificateGenerator.cpp
+SOURCE			CertificateRequestGenerator.cpp
+SOURCE			DSAKeyGenerator.cpp
+SOURCE			KeyGenerator.cpp	
+SOURCE			MAKEKEYS.CPP
+SOURCE			PARSECMD.CPP
+SOURCE			RSAKeyGenerator.cpp
+SOURCE			UTILS.CPP
+
+
+#ifndef TOOLS2_LINUX
+	MACRO			_UNICODE _CONSOLE _STLP_THREADS _WIN32 UNICODE 
+#else
+	MACRO			_UNICODE _CONSOLE UNICODE 
+#endif
+
+STATICLIBRARY			eay32 
+
+OPTION				GCC -w
+OPTION				GCC -fno-stack-check
+OPTION				GCC -fpermissive
--- a/secureswitools/makekeys/src/MAKEKEYS.CPP	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/makekeys/src/MAKEKEYS.CPP	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -56,7 +56,7 @@
 :m_fVerbose(FALSE)
 	{ ; }
 
-int CMakeKeys::Run(const int argc, const _TCHAR *argv[], const _TCHAR *envp[])
+int CMakeKeys::Run(const int argc, const _TCHAR *argv[])
 // Inputs   : argc, argv, envp - The command line passed to the process
 	{	
 	BOOL bValid = TRUE;
@@ -117,6 +117,7 @@
 
 			OUT << _T("Warning: the private key should be encrypted with the -password option") << endl;
 			OUT << _T("Do you want to use a password (y/n)? ");
+			OUT.flush();
 
 			cin >> Warn;
 
@@ -166,6 +167,7 @@
 
 				OUT << _T("Warning: the private key should be encrypted with the -password option") << endl;
 				OUT << _T("Do you want to use a password (y/n)? ");
+				OUT.flush();
 
 				cin >> Warn;
 
@@ -296,9 +298,13 @@
 	// main function - constructs a CMakeKeys object and calls it's run method
 	extern "C"
 		{
-		int _tmain(int argc, const _TCHAR *argv[], const _TCHAR *envp[])
+		int main(int argc, const char *argv[], const char *envp[])
 			{
+			// MingW doesn't support _tmain(),
+			// so using GetCommandLineW() to get wide args.
+			wchar_t** argvW = CommandLineToArgvW( GetCommandLineW(), &argc);
+			
 			CMakeKeys app;
-			return app.Run(argc, argv, envp);
+			return app.Run(argc, argvW);
 			}
 		}
--- a/secureswitools/makekeys/src/MAKEKEYS.H	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/makekeys/src/MAKEKEYS.H	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -53,7 +53,7 @@
 	public:
 		CMakeKeys();
 		
-		int  Run(const int argc, const _TCHAR *argv[], const _TCHAR *envp[]);
+		int  Run(const int argc, const _TCHAR *argv[]);
 			
 	public: 
 		CKeyGenerator* m_KeyGen;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swianalysistoolkit/group/apply_tools2_variants.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- This variant is used so that we can tell if the APPLY keyword
+       can find variants exported into the epoc32 tree -->
+
+  <var name="tools2_shlwapi">
+	<append name="LINKER_OPTIONS" value="-lshlwapi" />
+  </var>
+</build>
--- a/secureswitools/swianalysistoolkit/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swianalysistoolkit/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -22,28 +22,28 @@
 */
 
 PRJ_PLATFORMS
-DEFAULT TOOLS
-TOOLS2
+DEFAULT TOOLS2
+TOOLS
 
 PRJ_MMPFILES
 
-#ifdef TOOLS 
-#ifndef TOOLS2
-#ifdef SYMBIAN_OLD_EXPORT_LOCATION
-makefile ../source/chainvalidityandinstallfilestatustools/dumpchainvaliditytool/dumpchainvaliditytool.fil
-#else
-makefile ../source/chainvalidityandinstallfilestatustools/dumpchainvaliditytool/dumpchainvaliditytool2.fil
+#ifdef TOOLS2
+#ifndef TOOLS2_LINUX
+dumpchainvaliditytool.mmp
+dumpinstallfilestatustool.mmp
+dumpswicertstoretool.mmp
+#endif
 #endif
 
-makefile ../source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/dumpinstallfilestatustool.fil
-makefile ../source/dumpswicertstoretool/dumpswicertstoretool.fil
 
 #ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
+#ifdef TOOLS
 makefile ../source/dumpswiregistrytool/dumpswiregistrytool.fil
 #endif
+#endif
 
-#endif
-#endif
+PRJ_EXPORTS
+apply_tools2_variants.xml /epoc32/tools/makefile_templates/ossi/
 
 
 PRJ_TESTEXPORTS
@@ -186,7 +186,7 @@
 ../test/tdumpregistry/dumpregistry-output/a0000206.out /epoc32/winscw/c/tswi/tdumpregistry/dumpregistry-output/a0000206.out
 ../test/tdumpregistry/dumpregistry-output/a0000206.tmp /epoc32/winscw/c/tswi/tdumpregistry/dumpregistry-output/a0000206.tmp
 ../test/tdumpregistry/testregistry.pl /epoc32/winscw/c/tswi/tdumpregistry/testregistry.pl
-
+#endif
 
 // tdumpcertstore
 ../test/tdumpcertstore/certstore.bat /epoc32/winscw/c/tswi/tdumpcertstore/certstore.bat
@@ -220,5 +220,4 @@
 ../test/tdumpcertstore/predumpcertstoretest.bat /epoc32/winscw/c/tswi/tdumpcertstore/predumpcertstoretest.bat
 ../test/tdumpcertstore/postdumpcertstoretest.bat /epoc32/winscw/c/tswi/tdumpcertstore/postdumpcertstoretest.bat
 ../test/tdumpcertstore/testswicertstore.pl /epoc32/winscw/c/tswi/tdumpcertstore/testswicertstore.pl
-#endif
 // End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swianalysistoolkit/group/dumpchainvaliditytool.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This mmp file is used to replace calling makefile directly.
+*
+*/
+
+
+TARGET			dumpchainvaliditytool.exe
+TARGETTYPE		exe
+
+
+USERINCLUDE 			../source/chainvalidityandinstallfilestatustools/dumpchainvaliditytool
+USERINCLUDE 			../source/chainvalidityandinstallfilestatustools/common
+USERINCLUDE 			../source/common
+USERINCLUDE 			../../swisistools/source/makesis
+USERINCLUDE 			../../swisistools/source/common
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE 			../../openssllib/import/inc 
+
+SOURCEPATH			../source/chainvalidityandinstallfilestatustools
+
+SOURCE				./dumpchainvaliditytool/dumpchainvalidity.cpp
+SOURCE				./dumpchainvaliditytool/options.cpp
+SOURCE				./common/certificatechain.cpp
+SOURCE				./common/dumpchainvaliditytool.cpp
+SOURCE				./common/launchprocess.cpp
+SOURCE				./common/siscertificatechain.cpp
+SOURCE				./common/swicertstore.cpp
+SOURCE				../common/osinterface.cpp
+
+#ifndef TOOLS2_LINUX
+	MACRO			_UNICODE _CONSOLE _STLP_THREADS _WIN32 GENERATE_ERRORS DUMPCHAINVALIDITYTOOL //UNICODE
+#else
+	MACRO			_UNICODE _CONSOLE UNICODE GENERATE_ERRORS DUMPCHAINVALIDITYTOOL	
+#endif
+
+STATICLIBRARY			eay32 
+
+// Link to mingw libs: shlwapi.a 
+APPLY				tools2_shlwapi
+
+OPTION				GCC -w
+OPTION				GCC -fno-stack-check
+OPTION				GCC -fpermissive
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swianalysistoolkit/group/dumpinstallfilestatustool.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This mmp file is used to replace calling makefile directly.
+*
+*/
+
+
+TARGET			dumpinstallfilestatustool.exe
+TARGETTYPE		exe
+
+
+USERINCLUDE 			../source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool
+USERINCLUDE 			../source/chainvalidityandinstallfilestatustools/common
+USERINCLUDE 			../source/common
+USERINCLUDE 			../../swisistools/source/makesis
+USERINCLUDE 			../../swisistools/source/common
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE 			../../openssllib/import/inc 
+
+SOURCEPATH			../source/chainvalidityandinstallfilestatustools
+
+SOURCE				./dumpinstallfilestatustool/dumpinstallfilestatustool.cpp
+SOURCE				./dumpinstallfilestatustool/sisfiledata.cpp
+SOURCE				./dumpinstallfilestatustool/options.cpp
+SOURCE				./common/certificatechain.cpp
+SOURCE				./common/dumpchainvaliditytool.cpp
+SOURCE				./common/launchprocess.cpp
+SOURCE				./common/siscertificatechain.cpp
+SOURCE				./common/swicertstore.cpp
+SOURCE				../common/osinterface.cpp
+
+#ifndef TOOLS2_LINUX
+	MACRO			_UNICODE _CONSOLE _STLP_THREADS _WIN32 GENERATE_ERRORS DUMPINSTALLFILESTATUSTOOL //UNICODE
+#else
+	MACRO			_UNICODE _CONSOLE UNICODE GENERATE_ERRORS DUMPINSTALLFILESTATUSTOOL	
+#endif
+
+STATICLIBRARY			eay32 
+
+// Link to mingw libs: shlwapi.a 
+APPLY				tools2_shlwapi
+
+OPTION				GCC -w
+OPTION				GCC -fno-stack-check
+OPTION				GCC -fpermissive
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swianalysistoolkit/group/dumpswicertstoretool.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This mmp file is used to replace calling makefile directly.
+*
+*/
+
+
+TARGET			dumpswicertstoretool.exe
+TARGETTYPE		exe
+
+USERINCLUDE 		../source/dumpswicertstoretool
+USERINCLUDE 		../source/common
+USERINCLUDE 		../source/common/utf8
+USERINCLUDE 		../../swisistools/source/makesis
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE 		../../openssllib/import/inc
+
+
+SOURCEPATH 		../source/common/utf8
+SOURCE			utf8.cpp
+
+SOURCEPATH 		../source/common
+SOURCE			osinterface.cpp  
+SOURCE			ucmp.cpp 
+SOURCE			streamreader.cpp
+
+SOURCEPATH		../source/dumpswicertstoretool
+
+SOURCE			certificate.cpp 
+SOURCE			datalocator.cpp 
+SOURCE			options.cpp  
+SOURCE			pfsdump.cpp 
+SOURCE			dumpswicertstoretool.cpp  
+SOURCE			swicertstoremetadata.cpp
+
+
+#ifndef TOOLS2_LINUX
+	MACRO			_UNICODE _CONSOLE _STLP_THREADS _WIN32 _MBCS DUMPSWICERTSTORETOOL	
+#else
+	MACRO			_UNICODE _CONSOLE UNICODE DUMPSWICERTSTORETOOL
+	STATICLIBRARY		crypto 
+#endif
+
+STATICLIBRARY			eay32 
+
+// Link to mingw libs: shlwapi.a 
+APPLY				tools2_shlwapi
+
+OPTION				GCC -w
+OPTION				GCC -fno-stack-check
+OPTION				GCC -fpermissive
--- a/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/common/certificatechain.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/common/certificatechain.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -450,7 +450,7 @@
 						capabilities.append("Unknown"+capability);
 						}
 				
-					iDevCapabilities += pow(2,capability);
+					iDevCapabilities += pow((double)2,capability);
 					}
 				capability++;
 				}
@@ -540,7 +540,7 @@
 				buf[j] = *(buffer++);
 				}
 
-			deviceId.append(buf);
+			deviceId.assign(buf,(KDeviceIdLength-2));
 			deviceId.append("\n");
 			}
 		}
--- a/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/dumpinstallfilestatustool.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/dumpinstallfilestatustool.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -15,7 +15,7 @@
 *
 */
 
-
+#include <memory>
 #include "dumpinstallfilestatustool.h"
 #include "osinterface.h"
 #ifdef _MSC_VER
--- a/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/options.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/options.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -263,7 +263,7 @@
 				{
 					if(capabilities.compare(listOfCapabilities[i])==0)
 					{
-					userCaps += pow(2,i);
+					userCaps += pow((double)2,i);
 					}
 				}
 			}
--- a/secureswitools/swianalysistoolkit/source/common/streamreader.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swianalysistoolkit/source/common/streamreader.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -225,7 +225,7 @@
 	// This memory will be freed by the caller of this function
 	char *ptrUtf8 = new char[targetLength + 1];
 	
-	UTF16* sourceStart = static_cast<UTF16*>(aSource);
+	UTF16* sourceStart = reinterpret_cast<UTF16*>(aSource);
 	UTF16* sourceEnd = sourceStart + aSrcLength; 
 	UTF8* targetStart = reinterpret_cast<UTF8*>(ptrUtf8);
 	UTF8* targetEnd;
--- a/secureswitools/swianalysistoolkit/source/common/symbiantypes.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swianalysistoolkit/source/common/symbiantypes.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
--- a/secureswitools/swianalysistoolkit/source/common/utf8/utf8.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swianalysistoolkit/source/common/utf8/utf8.h	Tue Aug 31 15:21:33 2010 +0300
@@ -79,9 +79,6 @@
 
 ------------------------------------------------------------------------ */
 
-#ifndef __UTF_H__
-#define __UTF_H__
-
 /* ---------------------------------------------------------------------
     The following 4 definitions are compiler-specific.
     The C standard does not guarantee that wchar_t has at least
@@ -168,6 +165,4 @@
 }
 #endif
 
-#endif //__UTF_H__
-
 /* --------------------------------------------------------------------- */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swianalysistoolkit/source/common/utf8_wrapper.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  A wrapper header to include utf8.h using the header
+*               macro to avoid problems due to multiple inclusions.  
+*				To avoid any possible third-party license issues, 
+*				the third-party header utf8.h is not modified.
+*/
+
+#ifndef UTF8_WRAPPER_H
+#define UTF8_WRAPPER_H
+
+#include "utf8/utf8.h"
+
+#endif /* UTF8_WRAPPER_H */
\ No newline at end of file
--- a/secureswitools/swianalysistoolkit/source/dumpswicertstoretool/pfsdump.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swianalysistoolkit/source/dumpswicertstoretool/pfsdump.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -206,7 +206,8 @@
 Stream StoreFile::RootStream()
 	{
 	Toc::Head const& head=iToc.Header();
-	return FindStream(head.Root());
+	Handle hndl = static_cast<Handle>(head.Root());
+	return FindStream(hndl);
 	}
 
 Stream StoreFile::FindStream(Handle& aHandle)
--- a/secureswitools/swianalysistoolkit/source/dumpswicertstoretool/swicertstoremetadata.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swianalysistoolkit/source/dumpswicertstoretool/swicertstoremetadata.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -143,7 +143,7 @@
    				capability.append("Unknown"+unknownIndex);
    				unknownIndex++;
    				}
-  			cap += pow(2,j);
+  			cap += pow((double)2,j);
    			}
    		else
    			{
--- a/secureswitools/swisistools/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1999-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -50,8 +50,18 @@
 ../source/xmlparser/xerces/lib/libxerces_deb.a    /epoc32/release/tools2/deb/libxerces.a
 ../source/xmlparser/xerces/lib/libxerces_rel.a    /epoc32/release/tools2/rel/libxerces.a
 
+../source/xmlparser/xerces/lib/libxerces_linux.a    /epoc32/release/tools2/linux-i386/deb/libxerces.a
+../source/xmlparser/xerces/lib/libxerces_linux.a    /epoc32/release/tools2/linux-i386/rel/libxerces.a
+
+
+#ifdef __TOOLS2_LINUX__
+../source/dbmanager/sqlite/sqlite-3.6.1.so  /epoc32/tools/sqlite-3.6.1.so
+/usr/lib/libdl.a	/epoc32/release/tools2/linux-i386/deb/libdl.a
+/usr/lib/libdl.a	/epoc32/release/tools2/linux-i386/rel/libdl.a
+#else
 ../source/dbmanager/sqlite/sqlite3.dll  /epoc32/tools/sqlite3.dll
 ../source/dbmanager/sqlite/sqlite3.def  /epoc32/tools/sqlite3.def
+#endif // __TOOLS2_LINUX__
 
 #endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
@@ -85,6 +95,7 @@
 #ifndef TOOLS
 #ifndef TOOLS2
 ../test/tinterpretsisinteg/tintsistef/tinterpretsis.mmp  
+../test/tinterpretsisinteg/data/regfiles/tstapp.mmp
 #endif
 #endif
 
@@ -110,6 +121,9 @@
 ../test/testmakesis/utf8.pkg /epoc32/winscw/c/tswi/utf8.pkg
 ../test/testmakesis/utf8.txt /epoc32/winscw/c/tswi/utf8.txt
 
+// file for testMakesis.pl to test 
+../test/testmakesis/largelanguagecodes.pkg /epoc32/winscw/c/tswi/largelanguagecodes.pkg
+
 // signsis
 ../test/tsignsis/largefile.zip									/epoc32/winscw/c/tswi/tsignsis/largefile.zip
 ../test/tsignsis/largedata.pkg								/epoc32/winscw/c/tswi/tsignsis/largedata.pkg
@@ -626,6 +640,7 @@
 ../test/tinterpretsisinteg/testlist.dtd /epoc32/winscw/c/tswi/tinterpretsisinteg/testlist.dtd
 ../test/tinterpretsisinteg/testlist.xml /epoc32/winscw/c/tswi/tinterpretsisinteg/testlist.xml
 
+../test/tinterpretsisinteg/data/Hello_sis.sis /epoc32/winscw/c/tswi/tinterpretsisinteg/data/hello_sis.sis
 ../test/tinterpretsisinteg/data/config-drives.ini /epoc32/winscw/c/tswi/tinterpretsisinteg/data/config-drives.ini
 ../test/tinterpretsisinteg/data/config-drives2.ini /epoc32/winscw/c/tswi/tinterpretsisinteg/data/config-drives2.ini
 ../test/tinterpretsisinteg/data/config-drives-invalid.ini /epoc32/winscw/c/tswi/tinterpretsisinteg/data/config-drives-invalid.ini
@@ -816,6 +831,19 @@
 ../test/tinterpretsisinteg/data/test_stub.sis /epoc32/data/z/system/install/test_stub.sis
 ../test/tinterpretsisinteg/data/int_nr_option_01_stub.sis /epoc32/winscw/c/tswi/tinterpretsisinteg/data/int_nr_option_01_stub.sis
 
+../test/tinterpretsisinteg/data/interpretsis_testcase_stub.sis /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase_stub.sis
+../test/tinterpretsisinteg/data/interpretsis_testcase_01_reg.rsc /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase_01_reg.rsc
+../test/tinterpretsisinteg/data/interpretsis_testcase_02_reg.rsc /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase_02_reg.rsc
+../test/tinterpretsisinteg/data/interpretsis_testcase_01.r01 /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase_01.r01
+../test/tinterpretsisinteg/data/interpretsis_testcase_01.r03 /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase_01.r03
+../test/tinterpretsisinteg/data/interpretsis_testcase_01.r04 /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase_01.r04
+../test/tinterpretsisinteg/data/interpretsis_testcase_01.r24 /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase_01.r24
+../test/tinterpretsisinteg/data/interpretsis_testcase_02.r03 /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase_02.r03
+../test/tinterpretsisinteg/data/interpretsis_testcase01.mbm /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase01.mbm
+../test/tinterpretsisinteg/data/interpretsis_testcase03.mbm /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase03.mbm
+../test/tinterpretsisinteg/data/interpretsis_testcase04.mbm /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase04.mbm
+../test/tinterpretsisinteg/data/interpretsis_testcase24.mbm /epoc32/winscw/c/tswi/tinterpretsisinteg/data/interpretsis_testcase24.mbm 
+
 ../test/tinterpretsisinteg/parameters_file/parameters.ini /epoc32/winscw/c/tswi/tinterpretsisinteg/parameters_file/parameters.ini
 ../test/tinterpretsisinteg/parameters_file/int001-006.txt /epoc32/winscw/c/tswi/tinterpretsisinteg/parameters_file/int001-006.txt
 ../test/tinterpretsisinteg/parameters_file/int001-007.txt /epoc32/winscw/c/tswi/tinterpretsisinteg/parameters_file/int001-007.txt
@@ -1508,6 +1536,14 @@
 ../test/tinterpretsisinteg/int_nr_option-39.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/int_nr_option-39.bat
 
 ../test/tinterpretsisinteg/scripts/api-inst-preq2525-interpretsis-18.script /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/api-inst-preq2525-interpretsis-18.script
+../test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-01.script /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-01.script
+../test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-02.script /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-02.script
+../test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-03.script /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-03.script
+../test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-04.script /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-04.script
+../test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-05.script /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-05.script
+../test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-06.script /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-06.script
+../test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-08.script /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-08.script
+
 ../test/tinterpretsisinteg/scripts/int_nr_option-01.script  /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/int_nr_option-01.script
 ../test/tinterpretsisinteg/scripts/int_nr_option-02.script  /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/int_nr_option-02.script
 ../test/tinterpretsisinteg/scripts/int_nr_option-03.script  /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/int_nr_option-03.script
@@ -1546,6 +1582,7 @@
 ../test/tinterpretsisinteg/scripts/int_nr_option-37.script  /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/int_nr_option-37.script
 ../test/tinterpretsisinteg/scripts/int_nr_option-38.script  /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/int_nr_option-38.script
 ../test/tinterpretsisinteg/scripts/int_nr_option-39.script  /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/int_nr_option-39.script
+../test/tinterpretsisinteg/scripts/int_defaultvaluetest.script  /epoc32/winscw/c/tswi/tinterpretsisinteg/scripts/int_defaultvaluetest.script
 
 ../test/tinterpretsisinteg/preq2525-interpretsis-01/argumentfile.ini  /epoc32/winscw/c/tswi/tinterpretsisinteg/preq2525-interpretsis-01/argumentfile.ini
 ../test/tinterpretsisinteg/preq2525-interpretsis-02/argumentfile.ini  /epoc32/winscw/c/tswi/tinterpretsisinteg/preq2525-interpretsis-02/argumentfile.ini
@@ -1584,7 +1621,11 @@
 ../test/tinterpretsisinteg/preq2525-interpretsis-16/argumentfile.ini  /epoc32/winscw/c/tswi/tinterpretsisinteg/preq2525-interpretsis-16/argumentfile.ini
 ../test/tinterpretsisinteg/preq2525-interpretsis-17/argumentfile.ini  /epoc32/winscw/c/tswi/tinterpretsisinteg/preq2525-interpretsis-17/argumentfile.ini
 ../test/tinterpretsisinteg/preq2525-interpretsis-19/argumentfile.ini  /epoc32/winscw/c/tswi/tinterpretsisinteg/preq2525-interpretsis-19/argumentfile.ini
+../test/tinterpretsisinteg/testcase-interpretsis-01/argumentfile.ini  /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile.ini
+../test/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_05.ini  /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_05.ini
+../test/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_10.ini  /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_10.ini
 
+../test/tinterpretsisinteg/parameters_file/testcase-interpretsis-07.txt  /epoc32/winscw/c/tswi/tinterpretsisinteg/parameters_file/testcase-interpretsis-07.txt
 ../test/tinterpretsisinteg/parameters_file/preq2525-interpretsis-01.txt  /epoc32/winscw/c/tswi/tinterpretsisinteg/parameters_file/preq2525-interpretsis-01.txt
 ../test/tinterpretsisinteg/parameters_file/preq2525-interpretsis-02.txt  /epoc32/winscw/c/tswi/tinterpretsisinteg/parameters_file/preq2525-interpretsis-02.txt
 ../test/tinterpretsisinteg/parameters_file/preq2525-interpretsis-03.txt  /epoc32/winscw/c/tswi/tinterpretsisinteg/parameters_file/preq2525-interpretsis-03.txt
@@ -1702,6 +1743,7 @@
 ../test/tinterpretsisinteg/interpretsism0010_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism0010_db.bat
 ../test/tinterpretsisinteg/interpretsism0011_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism0011_db.bat
 ../test/tinterpretsisinteg/interpretsism0016c_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism0016c_db.bat
+../test/tinterpretsisinteg/interpretsism001a_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism001a_db.bat
 ../test/tinterpretsisinteg/interpretsism001_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism001_db.bat
 ../test/tinterpretsisinteg/interpretsism002_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism002_db.bat
 ../test/tinterpretsisinteg/interpretsism003_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism003_db.bat
@@ -1782,6 +1824,7 @@
 ../test/tinterpretsisinteg/makesism0010_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism0010_db.bat
 ../test/tinterpretsisinteg/makesism0011_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism0011_db.bat
 ../test/tinterpretsisinteg/makesism0016c_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism0016c_db.bat
+../test/tinterpretsisinteg/makesism001a_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism001a_db.bat 
 ../test/tinterpretsisinteg/makesism001_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism001_db.bat 
 ../test/tinterpretsisinteg/makesism002_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism002_db.bat 
 ../test/tinterpretsisinteg/makesism003_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism003_db.bat 
@@ -1858,6 +1901,7 @@
 ../test/tinterpretsisinteg/int_nr_option-37_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/int_nr_option-37_db.bat
 ../test/tinterpretsisinteg/int_nr_option-38_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/int_nr_option-38_db.bat
 ../test/tinterpretsisinteg/int_nr_option-39_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/int_nr_option-39_db.bat
+../test/tinterpretsisinteg/int_defaultvaluetest_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/int_defaultvaluetest_db.bat
 
 ../test/tinterpretsisinteg/parameters_file/testcasef009file_db.txt /epoc32/winscw/c/tswi/tinterpretsisinteg/parameters_file/testcasef009file_db.txt
 ../test/tinterpretsisinteg/parameters_file/testcasei003file_db.txt /epoc32/winscw/c/tswi/tinterpretsisinteg/parameters_file/testcasei003file_db.txt
@@ -1875,6 +1919,9 @@
 ../test/tinterpretsisinteg/testdatascr/base_r.pkg /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatascr/base_r.pkg
 ../test/tinterpretsisinteg/testdatascr/hiddensa.pkg /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatascr/hiddensa.pkg
 
+../test/tinterpretsisinteg/testelseifdata/testelseif.pkg /epoc32/winscw/c/tswi/tinterpretsisinteg/testelseifdata/testelseif.pkg
+../test/tinterpretsisinteg/testelseifdata/file0 /epoc32/winscw/c/tswi/tinterpretsisinteg/testelseifdata/file0
+
 // exports for scrtool
 ../test/tscrtool/tscrtool.ini				/epoc32/winscw/c/tswi/tscrtool/tscrtool.ini
 ../test/tscrtool/tscrtool.pl				/epoc32/winscw/c/tswi/tscrtool/tscrtool.pl
@@ -1891,6 +1938,13 @@
 ../test/tscrtool/data/preprovision_symbian.xml		/epoc32/winscw/c/tswi/tscrtool/data/preprovision_symbian.xml
 ../test/tscrtool/data/preprovision_attribute_missing.xml		/epoc32/winscw/c/tswi/tscrtool/data/preprovision_attribute_missing.xml
 ../test/tscrtool/data/preprovision_coverage.xml		/epoc32/winscw/c/tswi/tscrtool/data/preprovision_coverage.xml
+../test/tscrtool/data/preprovision_appreginfo.xml		/epoc32/winscw/c/tswi/tscrtool/data/preprovision_appreginfo.xml
+../test/tscrtool/data/preprovision_nullappuid.xml		/epoc32/winscw/c/tswi/tscrtool/data/preprovision_nullappuid.xml
+../test/tscrtool/data/preprovision_appregattribmissing.xml		/epoc32/winscw/c/tswi/tscrtool/data/preprovision_appregattribmissing.xml
+../test/tscrtool/data/preprovision_noappattrib.xml		/epoc32/winscw/c/tswi/tscrtool/data/preprovision_noappattrib.xml
+../test/tscrtool/data/preprovision_nullappfile.xml		/epoc32/winscw/c/tswi/tscrtool/data/preprovision_nullappfile.xml
+../test/tscrtool/data/preprovision_nocaptioniconinfo.xml		/epoc32/winscw/c/tswi/tscrtool/data/preprovision_nocaptioniconinfo.xml
+../test/tscrtool/data/preprovision_invalid_appproperty.xml		/epoc32/winscw/c/tswi/tscrtool/data/preprovision_invalid_appproperty.xml
 
 //script files for PREQ2525 installing equivalent language
 ../test/tinterpretsisinteg/api-inst-preq2525-interpretsis-01_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-preq2525-interpretsis-01_db.bat
@@ -1912,6 +1966,14 @@
 ../test/tinterpretsisinteg/api-inst-preq2525-interpretsis-17_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-preq2525-interpretsis-17_db.bat
 ../test/tinterpretsisinteg/api-inst-preq2525-interpretsis-18_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-preq2525-interpretsis-18_db.bat
 ../test/tinterpretsisinteg/api-inst-preq2525-interpretsis-19_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-preq2525-interpretsis-19_db.bat
+../test/tinterpretsisinteg/api-inst-testcase-interpretsis-01_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-testcase-interpretsis-01_db.bat
+../test/tinterpretsisinteg/api-inst-testcase-interpretsis-02_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-testcase-interpretsis-02_db.bat
+../test/tinterpretsisinteg/api-inst-testcase-interpretsis-03_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-testcase-interpretsis-03_db.bat
+../test/tinterpretsisinteg/api-inst-testcase-interpretsis-04_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-testcase-interpretsis-04_db.bat
+../test/tinterpretsisinteg/api-inst-testcase-interpretsis-05_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-testcase-interpretsis-05_db.bat
+../test/tinterpretsisinteg/api-inst-testcase-interpretsis-06_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-testcase-interpretsis-06_db.bat
+../test/tinterpretsisinteg/api-inst-testcase-interpretsis-07_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-testcase-interpretsis-07_db.bat
+../test/tinterpretsisinteg/api-inst-testcase-interpretsis-08_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/api-inst-testcase-interpretsis-08_db.bat
 
 #endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
--- a/secureswitools/swisistools/group/dbmanager.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/group/dbmanager.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -21,9 +21,11 @@
 TARGETTYPE		LIB
 
 USERINCLUDE 	../../swianalysistoolkit/source/common
+USERINCLUDE 	../../swianalysistoolkit/source/common/utf8
 USERINCLUDE 	../source/common
 USERINCLUDE 	../source/dbmanager
 USERINCLUDE 	../source/xmlparser
+USERINCLUDE		../source/sisxlibrary
 
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 SYSTEMINCLUDE	../../openssllib/import/inc 
@@ -38,6 +40,9 @@
 SOURCE			logs.cpp
 SOURCE			util.cpp
 
+SOURCEPATH		../source/sisxlibrary
+SOURCE			utility.cpp
+
 #ifndef TOOLS2_LINUX
 MACRO	_UNICODE _CONSOLE _STLP_THREADS _WIN32 UNICODE __GNUG__
 #else
--- a/secureswitools/swisistools/group/interpretsis.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/group/interpretsis.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -28,6 +28,11 @@
 USERINCLUDE 		../../swianalysistoolkit/source/common
 USERINCLUDE 		../../swianalysistoolkit/source/common/utf8
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+USERINCLUDE 		../source/rscparser
+USERINCLUDE		../source/xmlparser
+#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 SYSTEMINCLUDE 		../../openssllib/import/inc/openssl 
 SYSTEMINCLUDE 		../../openssllib/import/inc
@@ -51,7 +56,8 @@
 #ifndef TOOLS2_LINUX
 STATICLIBRARY		eay32 zlib seclib
 #else
-STATICLIBRARY		crypto zlib seclib 
+STATICLIBRARY		crypto zlib seclib dl
+LIBRARY c
 #endif
 
 OPTION			GCC -w
--- a/secureswitools/swisistools/group/interpretsislib.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/group/interpretsislib.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -28,8 +28,8 @@
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 USERINCLUDE		../source/xmlparser
-USERINCLUDE 	../source/common
 USERINCLUDE 	../source/dbmanager
+USERINCLUDE 	../source/rscparser
 #endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
@@ -75,10 +75,27 @@
 SOURCE			xmlgenerator.cpp
 SOURCE			dbhelper.cpp
 
+
 SOURCEPATH		../source/common
 SOURCE			util.cpp
 
-#endif 
+SOURCEPATH		../source/rscparser
+SOURCE			barsc2.cpp
+SOURCE			barscimpl.cpp
+SOURCE			dictionarycompression.cpp
+SOURCE			commontypes.cpp
+SOURCE			barsread2.cpp
+SOURCE			barsreadimpl.cpp
+SOURCE			parse.cpp
+SOURCE			apmstd.cpp
+SOURCE			apaid.cpp
+SOURCE			aplapplistitem.cpp
+SOURCE			aplappinforeader.cpp
+SOURCE			uidtype.cpp
+SOURCE			dirparse.cpp
+SOURCE			apsecutils.cpp
+
+#endif
 SOURCEPATH		../../swianalysistoolkit/source/common/utf8
 SOURCE			utf8.cpp
 
--- a/secureswitools/swisistools/group/scrtool.mmp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/group/scrtool.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -27,7 +27,7 @@
 USERINCLUDE 		../source/xmlparser
 USERINCLUDE 		../source/dbmanager
 USERINCLUDE 		../source/dbmanager/sqlite
-USERINCLUDE		../source/sisxlibrary
+USERINCLUDE			../source/sisxlibrary
 
 SYSTEMINCLUDE 		../source/xmlparser/xerces/include
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
--- a/secureswitools/swisistools/source/common/util.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/common/util.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -31,10 +31,13 @@
 #include <openssl/bio.h>
 #include <openssl/evp.h>
 #include <openssl/buffer.h>
+
 #ifdef _WIN32
 #include <windows.h>
 #endif // _WIN32
-#include "utf8.h"
+
+
+#include "utf8_wrapper.h"
 
 static const TUint32 CrcTab32[256] =
      {
@@ -212,9 +215,10 @@
 
 TInt64 Util::WideCharToInt64(const wchar_t* aWideChar)
 	{
-	TInt64 i64 = 0;
-	swscanf(aWideChar, L"%I64d", &i64);
-	return i64;
+	TInt64 value=0;
+	std::wstringstream str(aWideChar);
+	str >> value;
+	return value;
 	}
 
 DllExport const std::wstring Util::IntegerToWideString(int aInt)
@@ -243,23 +247,31 @@
 
 std::string Util::Base64Decode( const std::string& aEncodedData )
 	{
-	BIO *mem = BIO_new(BIO_s_mem());
-	BIO_write(mem, aEncodedData.c_str(), aEncodedData.length());
+	unsigned char* pIn = aEncodedData.c_str();
+	int inLen = aEncodedData.length();
+	unsigned char* pOut = new unsigned char[inLen];
 
-	BIO* b64 = BIO_new(BIO_f_base64());
-	mem = BIO_push(b64, mem);
-	int inlen = 0;
-	char inbuf[40]={0};
+	int outLen;
+	std::string aDecodeData;
+		
+    // create a memory buffer containing base64 encoded data
+    BIO* bmem = BIO_new_mem_buf((void*)pIn, inLen);
 
-	inlen = BIO_read(b64, inbuf, aEncodedData.length());
-    BIO_write(mem, inbuf, inlen);
-	std::string decodedData = inbuf;
-	
-	BIO_free_all(mem);
-	return decodedData;
+    // push a Base64 filter so that reading from buffer decodes it
+    BIO *bioCmd = BIO_new(BIO_f_base64());
+    // we don't want newlines
+    BIO_set_flags(bioCmd, BIO_FLAGS_BASE64_NO_NL);
+    bmem = BIO_push(bioCmd, bmem);
+
+    int finalLen = BIO_read(bmem, (void*)pOut, outLen);
+
+	aDecodeData.assign(pOut, pOut+finalLen);
+	delete pOut;
+    BIO_free_all(bmem);
+
+	return aDecodeData;
 	}
 
-
 TUint32 Util::Crc32(const void* aPtr, TInt aLength)
 	{
 	const TUint8* p = (const TUint8*)aPtr;
@@ -269,3 +281,7 @@
 	 crc = (crc >> 8) ^ CrcTab32[(crc ^ *p++) & 0xff];
 	return crc;
 	}
+
+
+
+
--- a/secureswitools/swisistools/source/common/util.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/common/util.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
--- a/secureswitools/swisistools/source/dbmanager/dblayer.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/dbmanager/dblayer.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -21,6 +21,7 @@
 #include "logs.h"
 #include "util.h"
 #include "symbiantypes.h"
+#include "utility.h"
 
 #include <string>
 #include <vector>
@@ -37,11 +38,76 @@
 typedef std::vector<std::wstring>::const_iterator ConstWstringIterator;
 typedef std::vector<XmlDetails::TScrEnvironmentDetails>::const_iterator ScrEnvIterator;
 typedef std::vector<XmlDetails::TScrEnvironmentDetails::TLocalizedSoftwareTypeName>::const_iterator ScrEnvLocSwTypeNameIterator;
+typedef std::vector<XmlDetails::TScrEnvironmentDetails::TCustomAcessList>::const_iterator ScrEnvCustomAccessIterator;
 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponent>::const_iterator CompIterator;
 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentLocalizable>::const_iterator CompLocIterator;
 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentProperty>::const_iterator CompPropIterator;
 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentFile>::const_iterator CompFileIter;
 typedef std::vector<XmlDetails::TScrPreProvisionDetail::TComponentFile::TFileProperty>::const_iterator FilePropIterator;
+typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo>::const_iterator CompApplicationRegistrationInfoIterator;
+typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppAttribute>::const_iterator ApplicationAttributeIterator;
+typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TDataType>::const_iterator ApplicationDataTypeIterator;
+typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo>::const_iterator ApplicationServiceInfoIterator;
+typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo>::const_iterator ApplicationLocalizableInfoIterator;
+typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TLocalizableAttribute>::const_iterator LocalizableAttributeIterator;
+typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData>::const_iterator ViewDataIterator;
+typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData::TViewDataAttributes>::const_iterator ViewDataAttributeIterator;
+typedef std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty>::const_iterator ApplicationPropertyIterator;
+
+
+#ifdef __LINUX__
+
+/*
+* Platform specific feature
+*
+* In WINDOWS : sizeof(wchar_t) = 2
+* In LINUX   : sizeof(wchar_t) = 4
+*/
+
+static utf16WString utf32WString2utf16WString(std::wstring aParameter)
+{
+	int strLen = aParameter.length();
+	const wchar_t * source = aParameter.c_str();
+	unsigned short int* buffer = new unsigned short int[strLen + 1];
+
+	// Using a temp variable in place of buffer as ConvertUTF32toUTF16 modifies the source pointer passed.
+	unsigned short int* temp = buffer;
+
+	ConvertUTF32toUTF16(&source, source + strLen, &temp,  temp + strLen, lenientConversion);
+
+	// Appending NUL to the converted buffer.
+	*temp = 0;
+
+	utf16WString utf16Ws;
+	utf16Ws.resize(strLen);
+
+	// The built-in basic_string template class copy operation
+	// truncates when a NUL is encountered when a c_str() is
+	// used to construct the required string.
+	// So, if aParameter is any hashable string having the
+	// syntax : swtypeName + L'\0' + someId then, we will end
+	// up returning only part of the converted UTF-16 string.
+	// Hence, we resort to the explicit copy operation with
+	// two bytes at a time.
+	while( strLen-- )
+	{
+		utf16Ws[ strLen ] = buffer[ strLen ];
+	}
+
+	delete[] buffer;
+
+	return utf16Ws;
+}
+
+#else
+
+// We need not do anything for WINDOWS, since the windows wstring
+// will already be in UTF-16 encoding.
+#define utf32WString2utf16WString(aParameter) (aParameter)
+
+#endif
+
+
 
 const int KMaxDrives=26;
 
@@ -87,13 +153,14 @@
 	{
 	try
 		{
+		LOGENTER("CDbLayer::PopulatePreProvisionDetails()");
 		AddPreProvisionDetails(aPreProvisionDetailList);
 		}
 		catch(CException& aException)
 			{
 			std::string rollbackTransaction("ROLLBACK;");
 			ExecuteStatement(rollbackTransaction);
-			std::string errMsg = "Failed to populate SCR database with environment details.";
+			std::string errMsg = "Failed to populate SCR database with pre provision details.";
 			LOGERROR(aException.GetMessageA());
 			throw CException(errMsg,ExceptionCodes::ESqlCorrupt);
 			}
@@ -110,9 +177,16 @@
 
 void CDbLayer::PopulateDatabase(const std::vector<XmlDetails::TScrEnvironmentDetails>& aScrEnvDetails)
 	{
-	std::string insertSoftwareType("INSERT INTO SoftwareTypes(SoftwareTypeId,SifPluginUid,InstallerSecureId,ExecutionLayerSecureId) VALUES(?,?,?,?);");
+	LOGENTER("CDbLayer::PopulateDatabase()");
+	std::string insertSoftwareType("INSERT INTO SoftwareTypes(SoftwareTypeId,SifPluginUid,LauncherExecutable) VALUES(?,?,?);");
 	std::auto_ptr<CStatement> stmtSwType(iScrDbHandler->PrepareStatement(insertSoftwareType));
 	
+	std::string insertSTWithoutLE("INSERT INTO SoftwareTypes(SoftwareTypeId,SifPluginUid) VALUES(?,?);");
+	std::auto_ptr<CStatement> stmtSwTypeWithoutLE(iScrDbHandler->PrepareStatement(insertSTWithoutLE));
+	
+    std::string insertCustomAccessList("INSERT INTO CustomAccessList(SoftwareTypeId,SecureId,AccessMode) VALUES(?,?,?);");
+	std::auto_ptr<CStatement> stmtCustomAccessList(iScrDbHandler->PrepareStatement(insertCustomAccessList));
+	
 	std::string insertSwTypeName("INSERT INTO SoftwareTypeNames(SoftwareTypeId,Locale,Name) VALUES(?,?,?);");
 	std::auto_ptr<CStatement> stmtSwTypeName(iScrDbHandler->PrepareStatement(insertSwTypeName));
 		
@@ -121,13 +195,26 @@
 
 	for(ScrEnvIterator aScrEnvIterator = aScrEnvDetails.begin(); aScrEnvIterator != aScrEnvDetails.end(); ++aScrEnvIterator)
 		{
-		unsigned int swTypeId = Util::Crc32(aScrEnvIterator->iUniqueSoftwareTypeName.c_str(),aScrEnvIterator->iUniqueSoftwareTypeName.length()*2);
+		// To maintain the consistency of CRC value across the platforms(WINDOWS and LINUX), we are
+		// using UTF-16 string in CRC generation.
+		utf16WString utf16Ws = utf32WString2utf16WString(aScrEnvIterator->iUniqueSoftwareTypeName);
+		unsigned int swTypeId = Util::Crc32(utf16Ws.c_str(),aScrEnvIterator->iUniqueSoftwareTypeName.length()*2);
+
+		if (!aScrEnvIterator->iLauncherExecutable.empty())
+		{
 		stmtSwType->BindInt(1, swTypeId);
 		stmtSwType->BindInt(2, aScrEnvIterator->iSifPluginUid);
-		stmtSwType->BindInt(3, aScrEnvIterator->iInstallerSid);
-		stmtSwType->BindInt(4, aScrEnvIterator->iExecutionLayerSid);
+		stmtSwType->BindStr(3, aScrEnvIterator->iLauncherExecutable);
 		stmtSwType->ExecuteStatement();
 		stmtSwType->Reset();
+		}
+		else
+		{
+		stmtSwTypeWithoutLE->BindInt(1, swTypeId);
+		stmtSwTypeWithoutLE->BindInt(2, aScrEnvIterator->iSifPluginUid);
+		stmtSwTypeWithoutLE->ExecuteStatement();
+		stmtSwTypeWithoutLE->Reset();
+		}
 		// First insert unique sw type name
 		const TInt uniqueSwTypeNameLocale = 0;
 		ExecuteSwTypeNameStatement(stmtSwTypeName, swTypeId, uniqueSwTypeNameLocale, aScrEnvIterator->iUniqueSoftwareTypeName);
@@ -136,6 +223,16 @@
 			{
 			ExecuteSwTypeNameStatement(stmtSwTypeName, swTypeId, swTypeNameIter->iLocale, swTypeNameIter->iName);
 			}
+                
+        for(ScrEnvCustomAccessIterator customAccessIter = aScrEnvIterator->iCustomAcessList.begin(); customAccessIter != aScrEnvIterator->iCustomAcessList.end(); ++customAccessIter)
+			{
+        	stmtCustomAccessList->BindInt(1, swTypeId);
+            stmtCustomAccessList->BindInt(2, customAccessIter->iSecureId);
+            stmtCustomAccessList->BindInt(3, customAccessIter->iAccessMode);
+            stmtCustomAccessList->ExecuteStatement();
+            stmtCustomAccessList->Reset();
+			}
+		
 		for(ConstWstringIterator mimeIter= aScrEnvIterator->iMIMEDetails.begin(); mimeIter != aScrEnvIterator->iMIMEDetails.end(); ++mimeIter)
 			{
 			stmtMimeType->BindInt(1, swTypeId);
@@ -144,36 +241,54 @@
 			stmtMimeType->Reset();
 			}
 		}
+	LOGEXIT("CDbLayer::PopulateDatabase()");
 
 	}
 
 void CDbLayer::AddPreProvisionDetails(const XmlDetails::TScrPreProvisionDetail& aPreProvisionDetailList)
 	{
+	LOGENTER("CDbLayer::AddPreProvisionDetails()");
 	for(CompIterator aCompIterator = aPreProvisionDetailList.iComponents.begin(); aCompIterator != aPreProvisionDetailList.iComponents.end(); ++aCompIterator)
 		{	
 		std::string beginTransaction("BEGIN;");
 		ExecuteStatement(beginTransaction);
 		
-		AddComponentDetails(*aCompIterator, aPreProvisionDetailList.iSoftwareTypeName);
-		int componentId = iScrDbHandler->LastInsertedId();
-		AddComponentLocalizables(componentId,aCompIterator->iComponentLocalizables);
-		AddComponentProperties(componentId,aCompIterator->iComponentProperties);
-		AddComponentFiles(componentId,aCompIterator->iComponentFiles);
-		AddComponentDependencies(componentId, aCompIterator->iComponentDependency, aPreProvisionDetailList.iSoftwareTypeName);
-
+		int componentId = 0;
+		if (!AddComponentDetails(*aCompIterator, aPreProvisionDetailList.iSoftwareTypeName))
+			{
+			componentId = iScrDbHandler->LastInsertedId();
+			AddComponentLocalizables(componentId,aCompIterator->iComponentLocalizables);
+			AddComponentProperties(componentId,aCompIterator->iComponentProperties);
+			AddComponentFiles(componentId,aCompIterator->iComponentFiles);
+			AddComponentDependencies(componentId, aCompIterator->iComponentDependency, aPreProvisionDetailList.iSoftwareTypeName);
+			}
+		AddApplicationRegistrationInfo(componentId,aCompIterator->iApplicationRegistrationInfo);
 		std::string commitTransaction("COMMIT;");
 		ExecuteStatement(commitTransaction);
 
 		}
+	LOGEXIT("CDbLayer::AddPreProvisionDetails()");
 	}
 
-void CDbLayer::AddComponentDetails(const XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, const std::wstring& aSoftwareTypeName)
+bool CDbLayer::AddComponentDetails(const XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, const std::wstring& aSoftwareTypeName)
 	{
+	LOGENTER("CDbLayer::AddComponentDetails()");
 	std::string insertComponents;
 	XmlDetails::TScrPreProvisionDetail::TComponentDetails 
 		componentDetail = aComponent.iComponentDetails;
+	if (aComponent.iComponentDetails.iIsRomApplication)
+		{
+		LOGINFO("Is rom app");
+		return true;
+		}
+	LOGINFO("Not rom app");
 
-	unsigned int swTypeId = Util::Crc32(aSoftwareTypeName.c_str(),aSoftwareTypeName.length()*2);
+	// To maintain the consistency of CRC value across the platforms(WINDOWS and LINUX), we are
+	// using UTF-16 string in CRC generation.
+    utf16WString utf16Ws = utf32WString2utf16WString(aSoftwareTypeName);
+	unsigned int swTypeId = Util::Crc32(utf16Ws.c_str(),aSoftwareTypeName.length()*2);
+
+
 	std::wstring strGlobalId = componentDetail.iGlobalId;
 	
 	if(!strGlobalId.empty())
@@ -211,7 +326,12 @@
 	if(!strGlobalId.empty())
 		{
 		std::wstring concatGlobalId = aSoftwareTypeName + L'\0' + strGlobalId;
-		unsigned int globalIdHash = Util::Crc32(concatGlobalId.c_str(),concatGlobalId.length()*2);
+
+		// To maintain the consistency of CRC value across the platforms(WINDOWS and LINUX), we are
+		// using UTF-16 string in CRC generation.
+		utf16WString utf16Ws = utf32WString2utf16WString(concatGlobalId);
+		unsigned int globalIdHash = Util::Crc32(utf16Ws.c_str(),concatGlobalId.length()*2);
+
 		stmtComponents->BindInt(9, globalIdHash);
 		stmtComponents->BindStr(10, concatGlobalId);
 		stmtComponents->BindStr(11, version);
@@ -225,7 +345,8 @@
 	
 	stmtComponents->ExecuteStatement();
 	stmtComponents->Reset();
-
+	LOGEXIT("CDbLayer::AddComponentDetails()");
+	return false;
 	}
 
 int CDbLayer::GetInstalledDrives(const std::vector<XmlDetails::TScrPreProvisionDetail::TComponentFile>& aComponentFiles )
@@ -277,6 +398,7 @@
 
 void CDbLayer::AddComponentLocalizables( int aComponentId, const std::vector<XmlDetails::TScrPreProvisionDetail::TComponentLocalizable>& aComponentLocalizable)
 	{
+	LOGENTER("CDbLayer::AddComponentLocalizables()");
 	std::string insertComponentLocalizable("INSERT INTO ComponentLocalizables(ComponentId,Locale,Name,Vendor) VALUES(?,?,?,?);");
 	std::auto_ptr<CStatement> stmtComponentLocalizable(iScrDbHandler->PrepareStatement(insertComponentLocalizable));
 
@@ -289,13 +411,14 @@
 		stmtComponentLocalizable->ExecuteStatement();
 		stmtComponentLocalizable->Reset();
 		}
+	LOGEXIT("CDbLayer::AddComponentLocalizables()");
 	}
 
 void CDbLayer::AddComponentProperties( 
 	int aComponentId, 
 	const std::vector<XmlDetails::TScrPreProvisionDetail::TComponentProperty>& aComponentProperty)
 	{
-	
+	LOGENTER("CDbLayer::AddComponentProperties()");
 	std::string insertComponentProperties;
 	
 	for(CompPropIterator compPropIter = aComponentProperty.begin(); compPropIter != aComponentProperty.end() ; ++compPropIter )
@@ -322,9 +445,9 @@
 			{
 			if(compPropIter->iIsStr8Bit)
 				{
-				std::string str = Util::wstring2string(compPropIter->iValue);
+				std::string str = wstring2string(compPropIter->iValue);
 				std::string decodedString = Util::Base64Decode(str);
-				stmtComponentProperty->BindBinary(4, str);
+				stmtComponentProperty->BindBinary(4, decodedString);
 				}
 			else
 				{
@@ -338,18 +461,19 @@
 		stmtComponentProperty->ExecuteStatement();
 		stmtComponentProperty->Reset();
 		}
-	
+	LOGEXIT("CDbLayer::AddComponentProperties()");
 	}
 
 void CDbLayer::AddComponentFiles(int aComponentId, const std::vector<XmlDetails::TScrPreProvisionDetail::TComponentFile>& aComponentFiles)
 	{
+	LOGENTER("CDbLayer::AddComponentFiles()");
 	for(CompFileIter compFile = aComponentFiles.begin() ; compFile != aComponentFiles.end() ; ++compFile)
 		{
 		AddLocation(aComponentId,compFile->iLocation);
 		int cmpFileId = iScrDbHandler->LastInsertedId();
 		AddFileProperties(cmpFileId,compFile->iFileProperties);
-		
 		}
+	LOGEXIT("CDbLayer::AddComponentFiles()");
 	}
 
 
@@ -358,6 +482,7 @@
 											const std::wstring& aSoftwareTypeName
 										)
 	{
+	LOGENTER("CDbLayer::AddComponentDependencies()");
 	std::wstring dependentId = aComponentDependency.iDependentId;
 
 	if(dependentId.empty())
@@ -373,11 +498,19 @@
 	for(compDepIter = aComponentDependencyDetails.begin() ; compDepIter != aComponentDependencyDetails.end() ; ++compDepIter)
 		{
 		std::wstring concatGlobalId = dependantGlobalId + compDepIter->iSupplierId;
-				
-		unsigned int globalIdHash = Util::Crc32(concatGlobalId.c_str(),concatGlobalId.length()*2);
-		unsigned int dependantIdHash = Util::Crc32(dependantGlobalId.c_str(),dependantGlobalId.length()*2);
-		unsigned int supplierIdHash = Util::Crc32(compDepIter->iSupplierId.c_str(),compDepIter->iSupplierId.length()*2);
-		
+
+		// To maintain the consistency of CRC value across the platforms(WINDOWS and LINUX), we are
+		// using UTF-16 string in CRC generation.
+		utf16WString utf16Ws = utf32WString2utf16WString(concatGlobalId);
+		unsigned int globalIdHash = Util::Crc32(utf16Ws.c_str(),concatGlobalId.length()*2);
+
+		utf16Ws = utf32WString2utf16WString(dependantGlobalId);
+		unsigned int dependantIdHash = Util::Crc32(utf16Ws.c_str(),dependantGlobalId.length()*2);
+
+		utf16Ws = utf32WString2utf16WString(compDepIter->iSupplierId);
+		unsigned int supplierIdHash = Util::Crc32(utf16Ws.c_str(),compDepIter->iSupplierId.length()*2);
+
+
 		std::string insertComponentDeps("INSERT INTO ComponentDependencies(GlobalIdHash,DependantGlobalIdHash, SupplierGlobalIdHash, DependantGlobalId,SupplierGlobalId,VersionFrom,VersionTo) VALUES(?,?,?,?,?,?,?);");
 		std::auto_ptr<CStatement> stmtComponentDeps(iScrDbHandler->PrepareStatement(insertComponentDeps));
 		
@@ -393,6 +526,7 @@
 		stmtComponentDeps->Reset();
 	
 		}	
+	LOGEXIT("CDbLayer::AddComponentDependencies()");
 	}
 
 
@@ -403,14 +537,40 @@
 	
 	stmtComponentFileDetails->BindInt(1,aComponentId);
 	
-	// size does not return the actual binary size of the object
 	int length = aLocation.length()*2 ;
+
 	// generate hash for location
 	std::wstring location = aLocation;
 	std::transform(	location.begin(), location.end(), location.begin(), tolower);
 
-	unsigned int hash = Util::Crc32(location.c_str(),length);
-	
+	#ifdef __TOOLS2_LINUX__
+
+	// To maintain the consistency of the LocationHash value(essentially the CRC of
+	// Location string) across the WINDOWS and LINUX platforms, we reconstruct the
+	// location to have WINDOWS specific path.
+
+    std::wstring::size_type idx = 0;
+     while( (idx = location.find(L"//", idx)) != std::wstring::npos)
+     {
+    	 location.replace( idx, 2, L"\\\\" );
+     }
+
+     idx = 0;
+
+     while( (idx = location.find(L"/", idx)) != std::wstring::npos)
+     {
+    	 location.replace( idx, 1, L"\\" );
+     }
+
+	#endif
+
+
+	// To maintain the consistency of CRC value across the platforms(WINDOWS and LINUX), we are
+	// using UTF-16 string in CRC generation.
+
+	utf16WString utf16Ws = utf32WString2utf16WString(location);
+	unsigned int hash = Util::Crc32(utf16Ws.c_str(),length);
+
 	stmtComponentFileDetails->BindInt(2,hash);
 	stmtComponentFileDetails->BindStr(3,aLocation);
 	stmtComponentFileDetails->ExecuteStatement();
@@ -447,9 +607,9 @@
 			}
 		else
 			{
-			std::string str = Util::wstring2string(filePropIter->iValue);
+			std::string str = wstring2string(filePropIter->iValue);
 			std::string decodedString = Util::Base64Decode(str);
-			stmtFileProperty->BindBinary(3, str);
+			stmtFileProperty->BindBinary(3, decodedString);
 			stmtFileProperty->BindInt(4, 1);
 			}
 
@@ -458,6 +618,442 @@
 		}
 	}
 
+
+void CDbLayer::AddApplicationRegistrationInfo( int aComponentId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo>& aApplicationRegistrationInfo)
+	{
+	LOGENTER("CDbLayer::AddApplicationRegistrationInfo()");
+	int appflag = 0;
+	int appUid = 0;
+	int error = 0;
+
+	for(CompApplicationRegistrationInfoIterator compApplicationRegistrationInfoIter = aApplicationRegistrationInfo.begin(); compApplicationRegistrationInfoIter != aApplicationRegistrationInfo.end() ; ++compApplicationRegistrationInfoIter )
+	{
+		try {
+			appflag = 0;
+			appUid = AddAppAttribute(aComponentId, compApplicationRegistrationInfoIter->iApplicationAttribute);
+		}
+		catch(CException& aException)
+		{
+			LOGERROR(aException.GetMessageA());
+			LOGERROR("one of AddAppAttribute is already present in database");
+			appflag = 1;
+			error = 1;
+		}
+
+		if(appflag)
+			continue;
+				
+		if (appUid != 0)
+			{
+			AddFileOwnershipInfo(appUid, compApplicationRegistrationInfoIter->iFileOwnershipInfo);
+			AddServiceInfo(appUid, compApplicationRegistrationInfoIter->iApplicationServiceInfo);
+			AddAppLocalizableInfo(appUid, compApplicationRegistrationInfoIter->iApplicationLocalizableInfo);
+			AddProperty(appUid, compApplicationRegistrationInfoIter->iApplicationProperty);
+			}
+		else
+			{
+			std::string errMsg = "AppUid is null.";
+			LOGERROR(errMsg);
+			throw CException(errMsg,ExceptionCodes::ESqlArgumentError);
+			}
+	}
+
+	if(error)
+	{
+		std::string errMsg = "Duplicate entry present in database.";
+		LOGERROR(errMsg);
+		throw CException(errMsg,ExceptionCodes::EFileExists);
+	}
+
+	LOGEXIT("CDbLayer::AddApplicationRegistrationInfo()");
+	}
+
+int CDbLayer::AddAppAttribute( int aComponentId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppAttribute>& aAppAttribute)
+	{
+	LOGENTER("CDbLayer::AddAppAttribute()");
+	std::string insertAppAttributes;
+	
+	insertAppAttributes = "INSERT INTO AppRegistrationInfo(AppUid,ComponentId,AppFile,TypeId,Attributes,Hidden,Embeddable,Newfile,Launch,GroupName,DefaultScreenNumber) VALUES(?,?,?,?,?,?,?,?,?,?,?);";
+	std::auto_ptr<CStatement> stmtAppAttribute(iScrDbHandler->PrepareStatement(insertAppAttributes));
+
+	stmtAppAttribute->BindInt64(2, aComponentId);
+
+	//Assigning Default Values
+	TInt64 intVal = 0; 
+	stmtAppAttribute->BindInt64(1, intVal); //AppUid
+	stmtAppAttribute->BindInt64(4, intVal); //TypeId
+	stmtAppAttribute->BindInt64(5, intVal); //Attributes
+	stmtAppAttribute->BindInt64(6, intVal); //Hidden
+	stmtAppAttribute->BindInt64(7, intVal); //Embeddable
+	stmtAppAttribute->BindInt64(8, intVal); //Newfile
+	stmtAppAttribute->BindInt64(9, intVal); //Launch
+	stmtAppAttribute->BindInt64(11, intVal); //DefaultScreenNumber
+	std::wstring strVal(L"");
+	stmtAppAttribute->BindStr(3, strVal);  //AppFile
+	stmtAppAttribute->BindStr(10, strVal); //GroupName
+	
+	int appUid = 0;
+	std::string appfile;
+	for(ApplicationAttributeIterator applicationAttributeIter = aAppAttribute.begin(); applicationAttributeIter != aAppAttribute.end() ; ++applicationAttributeIter )
+		{
+		if (applicationAttributeIter->iName == L"AppUid")
+			{
+			LOGINFO("CDbLayer::AddAppAttribute()- appuid");
+			TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str());
+			stmtAppAttribute->BindInt64(1, intValue);
+			appUid = intValue;
+			}
+		else if (applicationAttributeIter->iName == L"AppFile")
+			{
+			stmtAppAttribute->BindStr(3, applicationAttributeIter->iValue);
+			if (applicationAttributeIter->iValue.length() == 0)
+				{
+				std::string errMsg = "Invalid app file.";
+				LOGERROR(errMsg);
+				throw CException(errMsg,ExceptionCodes::ESqlArgumentError);
+				}
+			
+			}
+		else if (applicationAttributeIter->iName == L"TypeId")
+			{
+			TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str());
+			stmtAppAttribute->BindInt64(4, intValue);
+			}
+		else if (applicationAttributeIter->iName == L"Attributes")
+			{
+			TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str());
+			stmtAppAttribute->BindInt64(5, intValue);
+			}
+		else if (applicationAttributeIter->iName == L"Hidden")
+			{
+			TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str());
+			stmtAppAttribute->BindInt64(6, intValue);
+			}
+		else if (applicationAttributeIter->iName == L"Embeddable")
+			{
+			TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str());
+			stmtAppAttribute->BindInt64(7, intValue);
+			}
+		else if (applicationAttributeIter->iName == L"Newfile")
+			{
+			TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str());
+			stmtAppAttribute->BindInt64(8, intValue);
+			}
+		else if (applicationAttributeIter->iName == L"Launch")
+			{
+			TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str());
+			stmtAppAttribute->BindInt64(9, intValue);
+			}
+		else if (applicationAttributeIter->iName == L"GroupName")
+			{
+			stmtAppAttribute->BindStr(10, applicationAttributeIter->iValue);
+			}
+		else if (applicationAttributeIter->iName == L"DefaultScreenNumber")
+			{
+			TInt64 intValue = Util::WideCharToInt64(applicationAttributeIter->iValue.c_str());
+			stmtAppAttribute->BindInt64(11, intValue);
+			}
+		else
+			{
+			std::string errMsg = "Invalid application attribute.";
+			LOGERROR(errMsg);
+			throw CException(errMsg,ExceptionCodes::ESqlArgumentError);
+			}
+		}
+
+		try
+		{
+			stmtAppAttribute->ExecuteStatement();
+			stmtAppAttribute->Reset();
+		}
+		catch(CException& aException)
+		{
+			LOGERROR(aException.GetMessageA());
+			LOGERROR("AppUid Already Present in Database");
+		}
+
+	LOGEXIT("CDbLayer::AddAppAttribute()");
+	return appUid;
+	}
+
+void CDbLayer::AddFileOwnershipInfo( int aAppUid, const std::vector<std::wstring>& aFileOwnershipInfo)
+	{
+	LOGENTER("CDbLayer::AddFileOwnershipInfo()");
+	std::string insertFileOwnershipInfo;
+	
+	for(ConstWstringIterator cWstringIter = aFileOwnershipInfo.begin(); cWstringIter != aFileOwnershipInfo.end() ; ++cWstringIter )
+		{  
+		insertFileOwnershipInfo = "INSERT INTO FileOwnershipInfo(AppUid,FileName) VALUES(?,?);";
+		std::auto_ptr<CStatement> stmtFileOwnershipInfo(iScrDbHandler->PrepareStatement(insertFileOwnershipInfo));
+		
+		stmtFileOwnershipInfo->BindInt64(1, aAppUid);
+		stmtFileOwnershipInfo->BindStr(2, *cWstringIter);
+			
+		stmtFileOwnershipInfo->ExecuteStatement();
+		stmtFileOwnershipInfo->Reset();
+		}
+	LOGEXIT("CDbLayer::AddFileOwnershipInfo()");
+	}
+
+void CDbLayer::AddServiceInfo( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo>& aApplicationServiceInfo)
+	{
+	LOGENTER("CDbLayer::AddServiceInfo()");
+	std::string insertServiceInfo;
+	
+	for(ApplicationServiceInfoIterator serviceInfoIter = aApplicationServiceInfo.begin(); serviceInfoIter != aApplicationServiceInfo.end() ; ++serviceInfoIter )
+		{  
+		insertServiceInfo = "INSERT INTO ServiceInfo(AppUid,Uid) VALUES(?,?);";
+		std::auto_ptr<CStatement> stmtServiceInfo(iScrDbHandler->PrepareStatement(insertServiceInfo));
+		
+		stmtServiceInfo->BindInt64(1, aAppUid);
+		stmtServiceInfo->BindInt64(2, serviceInfoIter->iUid);
+		stmtServiceInfo->ExecuteStatement();
+		stmtServiceInfo->Reset();
+		
+		int serviceId = iScrDbHandler->LastInsertedId();
+		std::string insertDataType;
+		
+		const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TDataType>& datatype = serviceInfoIter->iDataType;
+		for(ApplicationDataTypeIterator dataTypeIter = datatype.begin(); dataTypeIter != datatype.end() ; ++dataTypeIter )
+			{  
+			insertDataType = "INSERT INTO DataType(ServiceId,Priority,Type) VALUES(?,?,?);";
+			std::auto_ptr<CStatement> stmtDataType(iScrDbHandler->PrepareStatement(insertDataType));
+			
+			stmtDataType->BindInt64(1, serviceId);
+			stmtDataType->BindInt64(2, dataTypeIter->iPriority);
+			#ifdef __TOOLS2_LINUX__
+			stmtDataType->BindStr(3, dataTypeIter->iType, avoidSlashConversion);
+			#else
+			stmtDataType->BindStr(3, dataTypeIter->iType);
+			#endif
+				
+			stmtDataType->ExecuteStatement();
+			stmtDataType->Reset();
+			}
+		}
+	LOGEXIT("CDbLayer::AddServiceInfo()");
+	}
+
+void CDbLayer::AddAppLocalizableInfo( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo>& aApplicationLocalizableInfo)
+{
+	LOGENTER("CDbLayer::AddAppLocalizableInfo()");
+	for(ApplicationLocalizableInfoIterator localizableInfoIter = aApplicationLocalizableInfo.begin(); localizableInfoIter != aApplicationLocalizableInfo.end() ; ++localizableInfoIter )
+	{
+		AddLocalizableAttribute(aAppUid, localizableInfoIter->iLocalizableAttribute);
+		int localAppInfoId = iScrDbHandler->LastInsertedId();
+		AddViewData(localAppInfoId, localizableInfoIter->iViewData);
+	}
+	LOGEXIT("CDbLayer::AddAppLocalizableInfo()");
+}
+
+void CDbLayer::AddLocalizableAttribute( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TLocalizableAttribute>& aApplicationLocalizableAttribute)
+{
+	LOGENTER("CDbLayer::AddLocalizableAttribute()");
+	std::string insertAppLocalizableInfo;
+		
+	insertAppLocalizableInfo = "INSERT INTO LocalizableAppInfo(AppUid,ShortCaption,GroupName,Locale,CaptionAndIconId) VALUES(?,?,?,?,?);";
+	std::auto_ptr<CStatement> stmtAppLocalizableInfo(iScrDbHandler->PrepareStatement(insertAppLocalizableInfo));
+
+	//Assigning default value
+	TInt64 intVal = 0;
+	stmtAppLocalizableInfo->BindInt64(4, intVal); //Locale
+	stmtAppLocalizableInfo->BindInt64(5, intVal); //CaptionAndIconId
+	std::wstring strVal(L"");
+	stmtAppLocalizableInfo->BindStr(2, strVal);   //ShortCaption
+	stmtAppLocalizableInfo->BindStr(3, strVal);   //GroupName
+	
+	std::string insertCaptionAndIconInfo;
+		
+	insertCaptionAndIconInfo = "INSERT INTO CaptionAndIconInfo(Caption,NumberOfIcons,IconFile) VALUES(?,?,?);";
+	std::auto_ptr<CStatement> stmtCaptionAndIconInfo(iScrDbHandler->PrepareStatement(insertCaptionAndIconInfo));
+
+	//Assigning default value
+	stmtCaptionAndIconInfo->BindStr(1, strVal);   //Caption
+	stmtCaptionAndIconInfo->BindInt64(2, intVal); //NumberOfIcons
+	stmtCaptionAndIconInfo->BindStr(3, strVal);   //IconFile
+
+
+	bool captionAndIconInfoPresent = 0;
+	//for every TLocalizableAttribute
+	stmtAppLocalizableInfo->BindInt64(1, aAppUid);
+	for(LocalizableAttributeIterator localizableAttributeIter = aApplicationLocalizableAttribute.begin(); localizableAttributeIter != aApplicationLocalizableAttribute.end() ; ++localizableAttributeIter )
+	{
+		if (localizableAttributeIter->iName == L"ShortCaption")
+		{
+			stmtAppLocalizableInfo->BindStr(2, localizableAttributeIter->iValue);
+		}
+		else if(localizableAttributeIter->iName == L"GroupName")
+		{
+			stmtAppLocalizableInfo->BindStr(3, localizableAttributeIter->iValue);
+		}
+		else if(localizableAttributeIter->iName == L"Locale")
+		{
+			TInt64 intValue = Util::WideCharToInt64(localizableAttributeIter->iValue.c_str());
+			stmtAppLocalizableInfo->BindInt64(4, intValue);
+		}
+		else if(localizableAttributeIter->iName == L"Caption")
+		{
+			stmtCaptionAndIconInfo->BindStr(1, localizableAttributeIter->iValue);
+			captionAndIconInfoPresent = 1;
+		}
+		else if(localizableAttributeIter->iName == L"NumberOfIcons")
+		{
+			TInt64 intValue = Util::WideCharToInt64(localizableAttributeIter->iValue.c_str());
+			stmtCaptionAndIconInfo->BindInt64(2, intValue);
+			captionAndIconInfoPresent = 1;
+		}
+		else if(localizableAttributeIter->iName == L"IconFile")
+		{
+			stmtCaptionAndIconInfo->BindStr(3, localizableAttributeIter->iValue);
+			captionAndIconInfoPresent = 1;
+		}
+		else
+		{
+			std::string errMsg = "Invalid localizable attribute.";
+			LOGERROR(errMsg);
+			throw CException(errMsg,ExceptionCodes::ESqlArgumentError);
+		}
+	}
+	if (captionAndIconInfoPresent)
+	{
+		stmtCaptionAndIconInfo->ExecuteStatement();
+		stmtCaptionAndIconInfo->Reset();
+		int captionAndIconIdForLocalizableInfo = iScrDbHandler->LastInsertedId();
+		stmtAppLocalizableInfo->BindInt64(5, captionAndIconIdForLocalizableInfo);
+	}
+	stmtAppLocalizableInfo->ExecuteStatement();
+	stmtAppLocalizableInfo->Reset();
+	LOGEXIT("CDbLayer::AddLocalizableAttribute()");
+}
+
+
+void CDbLayer::AddViewData( int alocalAppInfoId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData>& aViewData)
+{
+	LOGENTER("CDbLayer::AddViewData()");
+
+	for(ViewDataIterator viewDataIter = aViewData.begin(); viewDataIter != aViewData.end() ; ++viewDataIter )
+	{
+		AddViewDataAttributes(alocalAppInfoId, viewDataIter->iViewDataAttributes);
+	}
+
+	LOGEXIT("CDbLayer::AddViewData()");
+}
+
+
+void CDbLayer::AddViewDataAttributes( int alocalAppInfoId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData::TViewDataAttributes>& aViewDataAttribute)
+	{
+	LOGENTER("CDbLayer::AddViewData()");
+	std::string insertViewData;
+
+	insertViewData = "INSERT INTO ViewData(LocalAppInfoId,Uid,ScreenMode,CaptionAndIconId) VALUES(?,?,?,?);";
+	std::auto_ptr<CStatement> stmtViewData(iScrDbHandler->PrepareStatement(insertViewData));
+
+
+	//Assigning Default Value
+	TInt64 intVal = 0;
+	stmtViewData->BindInt64(2, intVal); //Uid
+	stmtViewData->BindInt64(3, intVal); //ScreenMode
+	stmtViewData->BindInt64(4, intVal); //CaptionAndIconId
+
+	std::string insertCaptionAndIconInfo;
+		
+	insertCaptionAndIconInfo = "INSERT INTO CaptionAndIconInfo(Caption,NumberOfIcons,IconFile) VALUES(?,?,?);";
+	std::auto_ptr<CStatement> stmtCaptionAndIconInfo(iScrDbHandler->PrepareStatement(insertCaptionAndIconInfo));
+
+	//Assigning Default Value
+	stmtCaptionAndIconInfo->BindInt64(2, intVal); //NumberOfIcons
+	std::wstring strVal(L"");
+	stmtCaptionAndIconInfo->BindStr(1, strVal); //Caption
+	stmtCaptionAndIconInfo->BindStr(3, strVal); //IconFile
+
+	bool captionAndIconInfoPresent = 0;
+	//for every TViewData
+	stmtViewData->BindInt64(1, alocalAppInfoId);
+
+	for(ViewDataAttributeIterator viewDataIter = aViewDataAttribute.begin(); viewDataIter != aViewDataAttribute.end() ; ++viewDataIter )
+		{
+		if (viewDataIter->iName == L"Uid")
+			{
+			TInt64 intValue = Util::WideCharToInt64(viewDataIter->iValue.c_str());
+			stmtViewData->BindInt64(2, intValue);
+			}
+		else if(viewDataIter->iName == L"ScreenMode")
+			{
+			TInt64 intValue = Util::WideCharToInt64(viewDataIter->iValue.c_str());
+			stmtViewData->BindInt64(3, intValue);
+			}
+		else if(viewDataIter->iName == L"Caption")
+			{
+			stmtCaptionAndIconInfo->BindStr(1, viewDataIter->iValue);
+			captionAndIconInfoPresent = 1;
+			}
+		else if(viewDataIter->iName == L"NumberOfIcons")
+			{
+			TInt64 intValue = Util::WideCharToInt64(viewDataIter->iValue.c_str());
+			stmtCaptionAndIconInfo->BindInt64(2, intValue);
+			captionAndIconInfoPresent = 1;
+			}
+		else if(viewDataIter->iName == L"IconFile")
+			{
+			stmtCaptionAndIconInfo->BindStr(3, viewDataIter->iValue);
+			captionAndIconInfoPresent = 1;
+			}
+		else
+			{
+			std::string errMsg = "Invalid view data attribute.";
+			LOGERROR(errMsg);
+			throw CException(errMsg,ExceptionCodes::ESqlArgumentError);
+			}
+		}
+	if (captionAndIconInfoPresent)
+		{
+		stmtCaptionAndIconInfo->ExecuteStatement();
+		stmtCaptionAndIconInfo->Reset();
+		int captionAndIconIdForViewData = iScrDbHandler->LastInsertedId();
+		stmtViewData->BindInt64(4, captionAndIconIdForViewData);
+		}
+	stmtViewData->ExecuteStatement();
+	stmtViewData->Reset();
+	LOGEXIT("CDbLayer::AddViewData()");
+	}
+
+void CDbLayer::AddProperty( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty>& aApplicationProperty)
+	{
+	LOGENTER("CDbLayer::AddProperty()");
+	std::string insertApplicationProperty;
+
+	for(ApplicationPropertyIterator appPropertyIter = aApplicationProperty.begin(); appPropertyIter != aApplicationProperty.end() ; ++appPropertyIter )
+		{  
+
+		insertApplicationProperty = "INSERT INTO AppProperties(AppUid,Locale,Name,ServiceUid,IntValue,StrValue,IsStr8Bit) VALUES(?,?,?,?,?,?,?);";
+		std::auto_ptr<CStatement> stmtAppProperty(iScrDbHandler->PrepareStatement(insertApplicationProperty));
+		
+		stmtAppProperty->BindInt64(1, aAppUid);
+		stmtAppProperty->BindInt(2, appPropertyIter->iLocale);
+		stmtAppProperty->BindStr(3, appPropertyIter->iName);
+		stmtAppProperty->BindInt(4, appPropertyIter->iServiceUid);
+		stmtAppProperty->BindInt(5, appPropertyIter->iIntValue);
+
+		if(appPropertyIter->iIsStr8Bit)
+			{
+				std::string str;
+				int len = appPropertyIter->iStrValue.length();
+				str.assign(appPropertyIter->iStrValue.c_str(),appPropertyIter->iStrValue.c_str()+len);
+				stmtAppProperty->BindBinary(6, str);
+			}
+		else
+			{
+			stmtAppProperty->BindStr(6, appPropertyIter->iStrValue);
+			}
+		
+		stmtAppProperty->BindInt(7, appPropertyIter->iIsStr8Bit);
+
+		stmtAppProperty->ExecuteStatement();
+		stmtAppProperty->Reset();
+		}
+	LOGEXIT("CDbLayer::AddProperty()");
+	}
+
 void CDbLayer::ExecuteStatement(const std::string& aStmtStr)
 	{
 	std::auto_ptr<CStatement> stmt(iScrDbHandler->PrepareStatement(aStmtStr));
--- a/secureswitools/swisistools/source/dbmanager/dblayer.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/dbmanager/dblayer.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -38,6 +38,19 @@
 
 #include <string>
 
+#ifdef __TOOLS2_LINUX__
+
+// utf16WString represents the UTF-16 data(WINDOWS wstring).
+typedef std::basic_string<unsigned short int> utf16WString;
+
+#else
+
+// Under WINDOWS, wstring will be in UTF-16 format itself.
+typedef std::wstring utf16WString;
+
+#endif
+
+
 class CDbLayer
 	{
 	public:
@@ -53,7 +66,7 @@
 		
 		void AddPreProvisionDetails(const XmlDetails::TScrPreProvisionDetail& aPreProvisionDetailList);
 		
-		void AddComponentDetails(const XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, const std::wstring& aSoftwareTypeName);
+		bool AddComponentDetails(const XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, const std::wstring& aSoftwareTypeName);
 		
 		int GetInstalledDrives(const std::vector<XmlDetails::TScrPreProvisionDetail::TComponentFile>& aComponentFiles );
 		
@@ -84,7 +97,26 @@
 		void AddFileProperties(int aComponentId, const std::vector<XmlDetails::TScrPreProvisionDetail::TComponentFile::TFileProperty>& aFileProperty);
 		
 		void ExecuteStatement(const std::string& aStmtStr);
+		
 
+		void AddApplicationRegistrationInfo( int aComponentId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo>& aApplicationRegistrationInfo);
+
+		int AddAppAttribute(int aComponentId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppAttribute>& aAppAttribute);
+
+		void AddFileOwnershipInfo(int aAppUid, const std::vector<std::wstring>& aFileOwnershipInfo);
+
+		void AddServiceInfo( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo>& aApplicationServiceInfo);
+
+		void AddAppLocalizableInfo( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo>& aApplicationLocalizableInfo);
+
+		void AddLocalizableAttribute( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TLocalizableAttribute>& aApplicationLocalizableAttribute);
+
+		void AddViewData( int alocalAppInfoId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData>& aViewData);
+
+		void AddViewDataAttributes( int alocalAppInfoId, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData::TViewDataAttributes>& aViewDataAttribute);
+			
+		void AddProperty( int aAppUid, const std::vector<XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty>& aApplicationProperty);
+				
 		const std::wstring GetLocalTime();
 			
 	private:
--- a/secureswitools/swisistools/source/dbmanager/dbprocessor.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/dbmanager/dbprocessor.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -30,10 +30,130 @@
 #include "logs.h"
 #include "util.h"
 #include "symbiantypes.h"
-
+#include "utf8_wrapper.h"
+#include "../sisxlibrary/utility.h"
 #include <string>
 #include <cassert>
 
+#ifdef __linux__
+#include <dlfcn.h>
+
+
+void* GetProcAddress(HINSTANCE aHandle, const char* aSymbol)
+	{
+	return dlsym(aHandle, aSymbol);
+	}
+
+HINSTANCE LoadLibraryA(const char* aLibraryName)
+	{
+	HINSTANCE handleUsingDefaultSearchPath = dlopen(aLibraryName, RTLD_LAZY);
+
+	if( handleUsingDefaultSearchPath == NULL )
+	{
+		// Once the dlopen() fails by not finding the aLibraryName in the default
+		// path specified by LD_LIBRARY_PATH, we will look in the epoc32/tools 
+		// path as the second option.
+
+		const char* epocRoot = getenv("EPOCROOT");		
+		if(NULL == epocRoot)
+			{
+			throw CException("EPOCROOT environment variable not specified.", ExceptionCodes::EEnvNotSpecified);
+			}
+		std::string epocRootStr(epocRoot); 
+
+		std::string absPathToLibrary = epocRootStr + std::string("epoc32/tools/") + std::string(aLibraryName);
+		HINSTANCE handleUsingAbsSearchPath = dlopen(absPathToLibrary.c_str(), RTLD_LAZY);
+
+		return handleUsingAbsSearchPath;
+	}
+
+	return handleUsingDefaultSearchPath;
+	}
+
+int FreeLibrary(HINSTANCE aHandle)
+	{
+	// FreeLibrary returns non-zero value on success whereas
+	// dlcose returns zero on success.
+	return (dlclose(aHandle) == 0)? true: false;
+	}
+
+std::string GetErrorMessage()
+	{
+	return dlerror();
+	}
+
+static utf16WString utf32WString2utf16WString(std::wstring& aParameter)
+{
+	int strLen = aParameter.length();
+	const wchar_t * source = aParameter.c_str();
+	unsigned short int* buffer = new unsigned short int[(strLen + 1) * 2];
+
+	// Using a temp variable in place of buffer as ConvertUTF32toUTF16 modifies the source pointer passed.
+	unsigned short int* temp = buffer;
+
+	ConvertUTF32toUTF16(&source, source + strLen, &temp,  temp + strLen, lenientConversion);
+
+	// Appending NUL to the converted buffer.
+	*temp = 0;
+
+	utf16WString utf16Ws;
+	utf16Ws.resize(strLen);
+
+	// The built-in basic_string template class copy operation
+	// truncates when a NUL is encountered when a c_str() is
+	// used to construct the required string.
+	// So, if aParameter is any hashable string having the
+	// syntax : swtypeName + L'\0' + someId then, we will end
+	// up returning only part of the converted UTF-16 string.
+	// Hence, we resort to the explicit copy operation with
+	// two bytes at a time.
+	while( strLen-- )
+	{
+		utf16Ws[ strLen ] = buffer[ strLen ];
+	}
+
+	delete[] buffer;
+
+	return utf16Ws;
+}
+
+static std::wstring utf16WString2utf32WString(utf16WString& aParameter)
+{	
+	int strLen = aParameter.length();
+	const unsigned short int* source = aParameter.c_str();
+	wchar_t* buffer = new wchar_t[ strLen + 1 ];
+
+	// Using a temp variable in place of buffer as ConvertUTF16toUCS4 modifies the source pointer passed.
+	wchar_t* temp = buffer;
+
+	ConvertUTF16toUCS4(&source, source + strLen, &temp, temp + strLen);
+
+	// Appending NUL to the converted buffer.
+	*temp = 0;
+
+	std::wstring utf32Ws(buffer);
+
+	delete[] buffer;
+
+	return utf32Ws;
+}
+
+#else
+std::string GetErrorMessage()
+	{
+	LPCVOID lpMsgBuf;
+		
+	DWORD err = GetLastError();
+	FormatMessage	(	FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
+						FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err,
+						MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,
+						0, NULL 
+					);
+	std::wstring wErrMsg((wchar_t*)lpMsgBuf);
+	return wstring2string(wErrMsg);
+	}
+#endif // __linux__
+
 TDbLibrary* iLibraryHandler = NULL;
 
 TDbLibrary::TDbLibrary(const std::string& aDllPath)
@@ -55,18 +175,7 @@
 	int retCode = FreeLibrary(sqLiteHndl);
 	if(retCode == 0)
 		{
-		LPCVOID lpMsgBuf;
-		
-		DWORD err = GetLastError();
-		FormatMessage	(	FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
-							FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err,
-							MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,
-							0, NULL 
-						);
-		std::wstring wErrMsg((wchar_t*)lpMsgBuf);
-		std::string errMsg = Util::wstring2string(wErrMsg);
-		//LOGERROR(errMsg);
-		
+		//LOGERROR(GetErrorMessage());
 		}
 	}
 
@@ -167,16 +276,7 @@
 	if(aFnPtr != NULL)
 		return;
 
-	LPCVOID lpMsgBuf;
-		
-	DWORD err = GetLastError();
-	FormatMessage	(	FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
-						FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err,
-						MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,
-						0, NULL 
-					);
-	std::wstring wErrMsg((wchar_t*)lpMsgBuf);
-	std::string errMsg = Util::wstring2string(wErrMsg);
+	std::string errMsg = GetErrorMessage();
 	//LOGERROR(errMsg);
 	throw CException(errMsg,ExceptionCodes::ELibraryLoadError);
 	}
@@ -362,9 +462,46 @@
 	CheckSqlErrCode(err);
 	}
 
+
+#ifdef __TOOLS2_LINUX__
+void CStatement::BindStr(TInt aParameterIndex, const std::wstring &aParameterStr, int aConvertSlash=allowSlashConversion)
+#else
 void CStatement::BindStr(TInt aParameterIndex, const std::wstring &aParameterStr)
+#endif
 	{
+	/*
+	 * Under LINUX : Because of the UTF-32 format of wstring, we can't directly use the sqlite3_bind_text16() which
+	 * requires UTF-16 format. So, we convert the UTF-32 data into UTF-16 before using it.
+	 *
+	 * Under WINDOWS : No conversion required since wstring will be in UTF-16 format itself.
+	 */
+
+    #ifdef __LINUX__
+	// Make sure that the wstring passed to this function is not having any trailing
+	// explicit NUL( Preferably, pass c_str() part of wstring ).
+    //
+	// Only case in which you shouldn't pass c_str() is that the wstring has NUL as
+	// part of its actual string content(like swtypename + L'\0' + someID etc).
+
+	// In order to maintain the consistency of DB contents across the WINDOWS and LINUX platforms, before interacting
+	// with the DB we convert the local paths into WINDOWS specific paths.
+    //
+	// If aParameterStr is not a PATH but contains a forward slash, we should restrain 
+	// from the slash conversion. One such instance is MimeType.
+	//
+	std::wstring temp = aParameterStr;
+	if( aConvertSlash == allowSlashConversion )
+	{
+	    ConvertToWindowsSpecificPaths(temp);
+	}
+
+    utf16WString utf16s = utf32WString2utf16WString(temp);
+
+	TInt err = iLibraryHandler.sqlite3_bind_text16(iStmtHandle, aParameterIndex, utf16s.c_str(), aParameterStr.size()*2, SQLITE_TRANSIENT);
+
+    #else
 	TInt err = iLibraryHandler.sqlite3_bind_text16(iStmtHandle, aParameterIndex, aParameterStr.c_str(), aParameterStr.size()*2, SQLITE_TRANSIENT);
+	#endif
 	// The fifth argument has the value SQLITE_TRANSIENT, it means that SQLite makes its own private copy of the data immediately
 	CheckSqlErrCode(err);
 	}
@@ -376,6 +513,25 @@
 	CheckSqlErrCode(err);
 	}
 
+void CStatement::BindBinary(TInt aParameterIndex, const std::wstring &aParameterStr)
+	{
+	#ifdef __LINUX__
+	// To maintain consistency of the binary equivalent of the wstring
+	// being binded, we convert the wstring with UTF-32 encoding under LINUX
+	// to UTF-16 encoding which is same as that of wstring under WINDOWS.
+	
+	std::wstring temp = aParameterStr;
+	utf16WString utf16s = utf32WString2utf16WString(temp);
+
+	TInt err = iLibraryHandler.sqlite3_bind_blob(iStmtHandle, aParameterIndex, utf16s.c_str(), aParameterStr.size()*2, SQLITE_TRANSIENT);
+	#else
+	TInt err = iLibraryHandler.sqlite3_bind_blob(iStmtHandle, aParameterIndex, aParameterStr.c_str(), aParameterStr.size()*2, SQLITE_TRANSIENT);
+	#endif
+
+	// The fifth argument has the value SQLITE_TRANSIENT, it means that SQLite makes its own private copy of the data immediately
+	CheckSqlErrCode(err);
+	}
+
 void CStatement::Reset()
 	{
 	TInt err = iLibraryHandler.sqlite3_reset(iStmtHandle);
@@ -404,8 +560,28 @@
 
 std::wstring CStatement::StrColumn(int aColumnId ) const
 	{
-	std::wstring columnValue(static_cast<const wchar_t*>(iLibraryHandler.sqlite3_column_text16(iStmtHandle, aColumnId)));
-	return columnValue;
+	/*
+	 * Under LINUX : While writing onto DB, we bind the wstring after converting it into UTF-16 from
+	 * UTF-32 format. So, now while reading we need to convert the UTF-16 data back to UTF-32
+	 * format so that we can return the required UTF-32 wstring.
+	 *
+	 * Under WINDOWS : No conversion required since wstring will be in UTF-16 format itself.
+	 */
+	#ifdef __LINUX__
+
+	utf16WString utf16S = iLibraryHandler.sqlite3_column_text16(iStmtHandle, aColumnId);
+	std::wstring utf32S = utf16WString2utf32WString(utf16S);
+
+	// The DB will have WINDOWS specific paths to maintain the consistency of DB contents across WINDOWS and LINUX platforms.
+	// So, after reading under LINUX we will convert them into local paths.
+
+    ConvertToLinuxSpecificPaths(utf32S);
+
+	#else
+	std::wstring utf32S(static_cast<const wchar_t*>(iLibraryHandler.sqlite3_column_text16(iStmtHandle, aColumnId)));
+	#endif
+
+	return utf32S;
 	}
 
 TInt64 CStatement::Int64Column(int aColumnId ) const
--- a/secureswitools/swisistools/source/dbmanager/dbprocessor.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/dbmanager/dbprocessor.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -32,7 +32,12 @@
 #include "./sqlite/sqlite3.h"
 #include "symbiantypes.h"
 #include <string>
+
+#ifdef __linux__
+typedef void* HINSTANCE;
+#else
 #include <windows.h>
+#endif // __linux__
 
 // Forward declarations
 class CStatement;
@@ -107,6 +112,50 @@
 	};
 
 
+#ifdef __TOOLS2_LINUX__
+typedef enum {
+	allowSlashConversion = 0,
+	avoidSlashConversion
+} SlashConversionFlags;
+
+// utf16WString represents the UTF-16 data(WINDOWS wstring).
+typedef std::basic_string<unsigned short int> utf16WString;
+
+
+inline void ConvertToWindowsSpecificPaths(std::wstring& aPath)
+{
+		std::wstring::size_type idx = 0;
+		while( (idx = aPath.find(L"//", idx)) != std::wstring::npos)
+		{
+			aPath.replace( idx, 2, L"\\\\" );
+		}
+
+		idx = 0;
+
+		while( (idx = aPath.find(L"/", idx)) != std::wstring::npos)
+		{
+			aPath.replace( idx, 1, L"\\" );
+		}
+}
+
+inline void ConvertToLinuxSpecificPaths(std::wstring& aPath)
+{
+	 std::wstring::size_type idx = 0;
+     while( (idx = aPath.find(L"\\\\", idx)) != std::wstring::npos)
+     {
+             aPath.replace( idx, 2, L"//" );
+     }
+
+     idx = 0;
+
+     while( (idx = aPath.find(L"\\", idx)) != std::wstring::npos)
+     {
+             aPath.replace( idx, 1, L"/" );
+     }
+}
+
+#endif
+
 /**
 	An instance of this class is used to execute all types of SQL statements with or without
 	parameters. 
@@ -183,11 +232,21 @@
 			@param aParameterIndex The index value identifying the parameter; the first parameter 
 			       has an index of 1.
 			@param aParameterStr The 16-bit descriptor whose content is to be assigned to the parameter.
+			@param aConvertSlash The integer value which is used only under LINUX platform specifies whether
+								 to convert any LINUX specific paths to WINDOWS specific paths in aParameterStr.
+								 This helps in avoiding the wrong interpretation of the DataType strings
+								 having the syntax (DataType/Format) as PATHs.
 		 */
-		void BindStr(int aParameterIndex, const std::wstring& aParameterStr);
+		#ifdef __TOOLS2_LINUX__
+		void BindStr(TInt aParameterIndex, const std::wstring &aParameterStr, int aConvertSlash=allowSlashConversion);
+		#else
+		void BindStr(TInt aParameterIndex, const std::wstring &aParameterStr);
+		#endif
 		
 		void BindBinary(int aParameterIndex, const std::string &aParameterStr);
 
+		void BindBinary(int aParameterIndex, const std::wstring &aParameterStr);
+
 		/**
 			Resets this SQL statement object to its initial state and makes it ready to be executed again.
 			Any SQL statement parameters that had values bound to them, retain their values.
@@ -263,4 +322,4 @@
 		TDbLibrary iLibraryHandler;
 		};
 
-#endif // DBPROCESSOR_H
\ No newline at end of file
+#endif // DBPROCESSOR_H
Binary file secureswitools/swisistools/source/dbmanager/sqlite/sqlite-3.6.1.so has changed
--- a/secureswitools/swisistools/source/dumpsislib/dumpsis.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/dumpsislib/dumpsis.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -31,7 +31,7 @@
 #include "dumpsis.h"
 #include "siscontroller.h"
 #include "exception.h"
-#include "utf8.h"
+#include "utf8_wrapper.h"
 
 CDumpSis::CDumpSis(const std::wstring& aSISFileName, bool aVerbose)
 		: 	iController(NULL),
--- a/secureswitools/swisistools/source/interpretsis/commandparser.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsis/commandparser.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -121,6 +121,11 @@
 		<< "\t\t[-t romstubdir] [-n language_code] [-i config_file] \n"
 		<< "\t\t[-x pkgUID[,pkgUID2,...]] [-w [off | error | warn | info]] [-l logfile]\n\n"
 		<< "Where:\t-h\t\tDisplays help\n"
+		#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+		<< "\t-a\t\tThe path representing the location of Resource files\n"
+		<< "\t  \t\tSpecifying the ROM Drive (-z) is mandatory.\n"
+		<< "\t  \t\tLocalize resource file is read from (Rom_drive\\path_specified_in_resource_file)\n"
+		#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 		<< "\t-c\t\tThe directory representing the system drive on the device\n"
 		<< "\t-d\t\tThe system drive letter [default to 'C']\n"
 		<< "\t-e\t\tDisable eclipsing and SID checks using Z drive \n"
@@ -170,8 +175,8 @@
 
 void CCommandParser::DisplayVersion()
 	{
-	std::cout << "\nINTERPRETSIS  " << " Version  2.2.0 ." << std::endl;
-	std::cout << "Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.\n " << std::endl;
+	std::cout << "\nINTERPRETSIS  " << " Version  3.0.0 ." << std::endl;
+	std::cout << "Copyright (c) 2009 Symbian Software Ltd. All rights reserved.\n " << std::endl;
 	}
  
 
@@ -208,6 +213,17 @@
 
 		switch (toupper(*++optPtr))
 		    {
+			#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+			case 'A':
+				{
+				if (argc <= 1)
+					throw CCommandParser::ECmdLineNoDirArgument;
+				
+				--argc;
+				aParamList->SetResourceFilePath(*(++argv));
+				break;	
+				}
+			#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 			case 'C':
 				{
 				if (argc <= 1)
@@ -216,6 +232,7 @@
 				--argc;
 				aParamList->SetSystemDrive(*(++argv));
 				break;
+				
 				}
 			case 'D':
 				{	
@@ -224,7 +241,7 @@
 				ConvertMultiByteToWideChar(*++argv,-1, buf, 2048);
 				aParamList->SetSystemDriveLetter(tolower(buf[0]));
 				break;
-				}
+				}					
 			case 'E':
 				{
 				aParamList->SetFlag(CParameterList::EFlagsDisableZDriveChecksSet);
--- a/secureswitools/swisistools/source/interpretsis/main.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsis/main.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -28,6 +28,9 @@
 #include "interpretsis.h"
 #include "logger.h"
 #include "../common/exception.h"
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+#include "dirparse.h"
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 
 #ifndef _WIN32
@@ -47,6 +50,9 @@
 
 int main(int argc, const char* argv[])
 	{
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+	std::string dbpath;
+#endif	
 	bool pauseWhenDone = false;
 
 	int result= SUCCESS;
@@ -76,10 +82,37 @@
 
 		CInterpretSIS interpretSis(paramList);
 		
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+		//Parsing Preprovisioned Resource file in not done if RegistryVersionExists
+		if(!paramPtr->RegistryVersionExists())
+		{
+			if ( paramPtr->IsFlagSet(CParameterList::EFlagsResourceFilePathSet)) 
+			{
+				ParseResourceDir(paramPtr, interpretSis);
+
+				if (NULL != logFile)
+				{
+					bool val = logFile->is_open();
+					logFile->close();
+					delete logFile;
+				}
+				return result;
+			}
+			else
+			{
+				ParseResourceDir(paramPtr, interpretSis);
+			}
+		}
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK		
+	
 		result = interpretSis.Install();
-		
+
 		// Uninstall the sis files
 		interpretSis.Uninstall();
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+		if(result != 0)
+			dbpath=GetDbPath(paramPtr);
+#endif
 		}
     catch( CCommandParser::CmdLineException err )
 		{
@@ -98,6 +131,14 @@
 		e.Display();
 		result = CONFIG_ERROR;
     	}
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	catch(const CResourceFileException& aObject)
+		{
+		LERROR(L"Resource File Parsing Error - ");
+		aObject.Display();
+		result = RSC_PARSING_ERROR;
+		}
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
     catch(const RomManagerException& e)
     	{
 		LERROR(L"ROM Manager Error - ");
@@ -134,13 +175,31 @@
 		result = UNKNOWN_EXCEPTION;
 		LERROR(L"Unknown Error" << std::endl);
 		}
-	
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+	//Restore Database in case of installation error for SA over SA and PU case
+	if(result != 0)
+	{
+		std::string BackupDb(dbpath);
+		BackupDb.append("_backup");
+		if (FileExists(string2wstring(BackupDb)))
+		{	
+			#ifdef __TOOLS2_LINUX__
+				std::string command = "mv " + BackupDb + " " + dbpath;
+			#else
+				std::string command = "move " + BackupDb + " " + dbpath;
+			#endif
+			int err = system(command.c_str());
+			if (err != 0)
+				LERROR(L"Failed to Restore src.db ");
+		}
+	}
+#endif
 	if (NULL != logFile)
-		{
+	{
 		bool val = logFile->is_open();
 		logFile->close();
 		delete logFile;
-		}
+	}
 
 	return result;
-	}
+}
--- a/secureswitools/swisistools/source/interpretsislib/dbconstants.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/dbconstants.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -63,6 +63,28 @@
 std::wstring DbConstants::CompWildCardFileCount = L"CompWildCardFileCount";
 std::wstring DbConstants::CompSidFileName = L"CompSidFileName";
 
+// file description - Registration File Properties
+std::wstring DbConstants::CompAppFile = L"AppFile";
+std::wstring DbConstants::CompAppUid = L"AppUid";
+std::wstring DbConstants::CompTypeId = L"TypeId";
+std::wstring DbConstants::CompAttributes = L"Attributes";
+std::wstring DbConstants::CompHidden = L"Hidden";
+std::wstring DbConstants::CompEmbeddable = L"Embeddable";
+std::wstring DbConstants::CompNewfile = L"Newfile";
+std::wstring DbConstants::CompLaunch = L"Launch";
+std::wstring DbConstants::CompDefaultScreenNumber = L"DefaultScreenNumber";
+std::wstring DbConstants::CompOpaqueData = L"OpaqueData";
+
+// file description - Localization File Properties
+std::wstring DbConstants::CompShortCaption = L"ShortCaption";
+std::wstring DbConstants::CompCaption = L"Caption";
+std::wstring DbConstants::CompNumberOfIcons = L"NumberOfIcons";
+std::wstring DbConstants::CompLocale = L"Locale";
+std::wstring DbConstants::CompIconFile = L"IconFile";
+std::wstring DbConstants::CompGroupName = L"GroupName";
+std::wstring DbConstants::CompUID = L"Uid";
+std::wstring DbConstants::CompScreenMode = L"ScreenMode";
+
 // inROM
 std::wstring DbConstants::CompInRom = L"CompInRom";
 std::wstring DbConstants::CompIsSigned = L"CompIsSigned";
--- a/secureswitools/swisistools/source/interpretsislib/dbconstants.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/dbconstants.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -74,6 +74,28 @@
 	extern std::wstring	CompWildCardFileCount;
 	extern std::wstring	CompSidFileName;
 
+	// file description - Registration File Properties
+	extern std::wstring	CompAppFile;
+	extern std::wstring	CompAppUid;
+	extern std::wstring CompTypeId;
+	extern std::wstring	CompAttributes;
+	extern std::wstring	CompHidden;
+	extern std::wstring	CompEmbeddable;
+	extern std::wstring	CompNewfile;
+	extern std::wstring	CompLaunch;
+	extern std::wstring	CompDefaultScreenNumber;
+	extern std::wstring	CompOpaqueData;
+
+	// file description - Localization File Properties
+	extern std::wstring	CompShortCaption;
+	extern std::wstring	CompCaption;
+	extern std::wstring	CompNumberOfIcons;
+	extern std::wstring	CompLocale;
+	extern std::wstring	CompIconFile;
+	extern std::wstring	CompGroupName;
+	extern std::wstring	CompUID;
+	extern std::wstring	CompScreenMode;
+	
 	// inROM
 	extern std::wstring	CompInRom;
 	extern std::wstring	CompIsSigned;
@@ -133,4 +155,4 @@
 	static const int KDefaultInstalledLanguage = CSISLanguage::ELangEnglish;
 }	
 
-#endif // DBCONSTANTS_H
\ No newline at end of file
+#endif // DBCONSTANTS_H
--- a/secureswitools/swisistools/source/interpretsislib/dbhelper.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/dbhelper.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -31,15 +31,81 @@
 
 const int DbHelper::Absent = -1;
 
+DbHelper::~DbHelper()
+	{
+	delete iScrDbHandler;
+	}
+
 DbHelper::DbHelper( const std::wstring& aDrivePath, bool aIsSystemDrive)
 	{
-	std::string dllName = "sqlite3.dll";
+
+  #ifdef __LINUX__
+  std::string dllName = "sqlite-3.6.1.so"; 	  	  	 
+  #else 	  	  	 
+  std::string dllName = "sqlite3.dll"; 
+  #endif		
 	std::string dbName; 
 	
 	if (aIsSystemDrive)
+	#ifdef __TOOLS2_LINUX__
+		dbName = wstring2string(aDrivePath) + "/sys/install/scr/scr.db";
+	#else
 		dbName = wstring2string(aDrivePath) + "\\sys\\install\\scr\\scr.db";
+	#endif
 	else 
+	#ifdef __TOOLS2_LINUX__
+		dbName = wstring2string(aDrivePath) + "/sys/install/scr/provisioned/scr.db";
+	#else
 		dbName = wstring2string(aDrivePath) + "\\sys\\install\\scr\\provisioned\\scr.db";
+	#endif
+
+	std::wstring wdbname(string2wstring(dbName));
+	//Create the SCR DB if not present in the System Drive
+	if(!FileExists(wdbname))
+		{
+		const char* epocRoot = getenv("EPOCROOT");
+		if(NULL == epocRoot)
+			{
+				std::string emsg(" EPOCROOT environment variable not specified.");
+				int retCode = ExceptionCodes::EEnvNotSpecified;
+				throw InterpretSisError(emsg,retCode);
+			}
+		std::string epocRootStr(epocRoot); 
+
+		#ifndef __TOOLS2_LINUX__
+			std::wstring swEnvInfo = string2wstring(epocRootStr) + L"epoc32\\tools\\create_db.xml";
+		#else
+			std::wstring swEnvInfo = string2wstring(epocRootStr) + L"epoc32/tools/create_db.xml";
+		#endif
+
+		if(FileExists(swEnvInfo))
+			{
+			#ifdef __TOOLS2_LINUX__
+				std::string executable = "scrtool";
+			#else
+				std::string executable = "scrtool.exe";
+			#endif
+			std::string command;
+			
+			command = executable + " -c " + dbName + " -f " + wstring2string(swEnvInfo);
+			
+			std::cout << "Creating DB : " << command << std::endl;
+			
+			int error = system(command.c_str());
+			if(error != 0)
+				{
+					std::string err = "Scrtool failed to create the database.";
+					throw InterpretSisError(err, DATABASE_UPDATE_FAILED);
+				}
+			}
+		else
+			{
+				LERROR(L"Failed to create the database.");
+				std::string emessage(" XML file /epoc32/tools/create_db.xml which contains software environment information is not found.");
+				int returnCode = ExceptionCodes::EFileNotPresent;
+				throw InterpretSisError(emessage,returnCode);
+			}
+		}
 
 	try
 		{
@@ -48,7 +114,7 @@
 	catch(CException& aException)
 		{
 		int returnCode = aException.GetCode();
-		std::wstring emessage = Utf8ToUcs2( aException.GetMessageA() );
+		std::wstring emessage = string2wstring( aException.GetMessageA() );
 
 		returnCode = (returnCode == ExceptionCodes::ELibraryLoadError) ? LIBRARYLOAD_ERROR : returnCode;
 		throw InterpretSisError(emessage,returnCode);		
@@ -69,6 +135,19 @@
 	return (uid == aUid);
 	}
 
+TBool DbHelper::IsAppUidInstalled(TUint32 aAppUid) const
+	{
+	std::string selectUid("SELECT AppFile FROM AppRegistrationInfo WHERE AppUid=?;");
+	std::auto_ptr<CStatement> stmtUid(iScrDbHandler->PrepareStatement(selectUid));
+		
+	stmtUid->BindInt(1, aAppUid);
+	
+	if(!stmtUid->ProcessNextRow())
+		return false;
+		
+	return true;
+	}
+
 TInt32 DbHelper::GetComponentId(TInt32 aUid, const std::wstring aPackageName, const std::wstring aVendorName ) const
 	{
 	std::string selectUid("SELECT ComponentId from ComponentProperties where Name='CompUid' and IntValue=? and ComponentId IN (SELECT ComponentId FROM \
@@ -206,7 +285,7 @@
 	std::string selCompId("SELECT ComponentId FROM ComponentsFiles WHERE Location=?;");
 	std::auto_ptr<CStatement> stmtCompId(iScrDbHandler->PrepareStatement(selCompId));
 		
-	stmtCompId->BindStr(1, aFileName);
+	stmtCompId->BindStr(1, aFileName.c_str());
 	
 	TInt32 componentId = 0;
 	if(stmtCompId->ProcessNextRow())
@@ -218,7 +297,7 @@
 	std::string selCompPropsId("SELECT ComponentId FROM ComponentProperties WHERE StrValue=? and Name like 'WCFile%';");
 	std::auto_ptr<CStatement> stmtCompPropsId(iScrDbHandler->PrepareStatement(selCompPropsId));
 		
-	stmtCompPropsId->BindStr(1, aFileName);
+	stmtCompPropsId->BindStr(1, aFileName.c_str());
 	
 	if(stmtCompPropsId->ProcessNextRow())
 		{
@@ -250,6 +329,91 @@
 
 void DbHelper::RemoveEntry( TInt32 aComponentId ) const
 	{
+
+	std::vector<TInt32> appUidList = GetAppRegistrationInfoAppUid(aComponentId);
+	std::vector<TInt32> ::iterator appUidIter;
+	for( appUidIter = appUidList.begin(); appUidIter != appUidList.end() ; ++appUidIter )
+	{
+		// delete FileOwnershipInfo
+		std::string delFileOwnerInfo("DELETE FROM FileOwnershipInfo WHERE AppUid=?;");
+		std::auto_ptr<CStatement> stmtdelFileOwnerInfo(iScrDbHandler->PrepareStatement(delFileOwnerInfo));
+		stmtdelFileOwnerInfo->BindInt(1, *appUidIter);
+		stmtdelFileOwnerInfo->ExecuteStatement();
+
+		// delete AppProperties
+		std::string delAppProperties("DELETE FROM AppProperties WHERE AppUid=?;");
+		std::auto_ptr<CStatement> stmtAppProperties(iScrDbHandler->PrepareStatement(delAppProperties));
+		stmtAppProperties->BindInt(1, *appUidIter);
+		stmtAppProperties->ExecuteStatement();
+
+		std::vector<TInt32> serviceIdList = GetServiceInfoServiceID(*appUidIter);
+		
+		std::vector<TInt32> ::iterator serviceIdIter;
+		for( serviceIdIter = serviceIdList.begin(); serviceIdIter != serviceIdList.end() ; ++serviceIdIter )
+		{
+			// delete DataType
+			std::string delDataType("DELETE FROM DataType WHERE ServiceId=?;");
+			std::auto_ptr<CStatement> stmtDataType(iScrDbHandler->PrepareStatement(delDataType));
+			stmtDataType->BindInt(1, *serviceIdIter);
+			stmtDataType->ExecuteStatement();
+		}
+
+		// delete ServiceInfo
+		std::string delServiceInfo("DELETE FROM ServiceInfo WHERE AppUid=?;");
+		std::auto_ptr<CStatement> stmtServiceInfo(iScrDbHandler->PrepareStatement(delServiceInfo));
+		stmtServiceInfo->BindInt(1, *appUidIter);
+		stmtServiceInfo->ExecuteStatement();
+
+		std::vector<TInt32> localAppInfoIdList = GetLocalAppInfoID(*appUidIter);
+		
+		std::vector<TInt32> ::iterator localAppInfoIdIter;
+		for( localAppInfoIdIter = localAppInfoIdList.begin(); localAppInfoIdIter != localAppInfoIdList.end() ; ++localAppInfoIdIter )
+		{
+			std::vector<TInt32> viewDataCaptionIdList = GetViewDataCaptionAndIconID(*localAppInfoIdIter);
+			
+			std::vector<TInt32> ::iterator viewDataCaptionIdIter;
+			for( viewDataCaptionIdIter = viewDataCaptionIdList.begin(); viewDataCaptionIdIter != viewDataCaptionIdList.end() ; ++viewDataCaptionIdIter )
+			{
+				// delete CaptionAndIconInfo
+				std::string delCaptionInfo("DELETE FROM CaptionAndIconInfo WHERE CaptionAndIconId=?;");
+				std::auto_ptr<CStatement> stmtCaptionInfo(iScrDbHandler->PrepareStatement(delCaptionInfo));
+				stmtCaptionInfo->BindInt(1, *viewDataCaptionIdIter);
+				stmtCaptionInfo->ExecuteStatement();
+			}
+
+			// delete ViewData
+			std::string delViewData("DELETE FROM ViewData WHERE LocalAppInfoId=?;");
+			std::auto_ptr<CStatement> stmtViewData(iScrDbHandler->PrepareStatement(delViewData));
+			stmtViewData->BindInt(1, *localAppInfoIdIter);
+			stmtViewData->ExecuteStatement();
+		}
+
+		std::vector<TInt32> LocalCaptionIdList = GetLocalCaptionAndIconID(*appUidIter);
+		std::vector<TInt32> ::iterator LocalCaptionIdIter;
+		for( LocalCaptionIdIter = LocalCaptionIdList.begin(); LocalCaptionIdIter != LocalCaptionIdList.end() ; ++LocalCaptionIdIter )
+		{
+			// delete CaptionAndIconInfo
+			std::string delCaptionInfo("DELETE FROM CaptionAndIconInfo WHERE CaptionAndIconId=?;");
+			std::auto_ptr<CStatement> stmtCaptionInfo(iScrDbHandler->PrepareStatement(delCaptionInfo));
+			stmtCaptionInfo->BindInt(1, *LocalCaptionIdIter);
+			stmtCaptionInfo->ExecuteStatement();
+		}
+
+		// delete LocalizableAppInfo
+		std::string delLocalizableAppInfo("DELETE FROM LocalizableAppInfo WHERE AppUid=?;");
+		std::auto_ptr<CStatement> stmtLocalizableAppInfo(iScrDbHandler->PrepareStatement(delLocalizableAppInfo));
+		stmtLocalizableAppInfo->BindInt(1, *appUidIter);
+		stmtLocalizableAppInfo->ExecuteStatement();
+
+	}
+
+	// delete AppRegistrationInfo
+	std::string delAppRegistrationInfo("DELETE FROM AppRegistrationInfo WHERE ComponentId=?;");
+	std::auto_ptr<CStatement> stmtAppRegistrationInfo(iScrDbHandler->PrepareStatement(delAppRegistrationInfo));
+	stmtAppRegistrationInfo->BindInt(1, aComponentId);
+	stmtAppRegistrationInfo->ExecuteStatement();
+
+	
 	// delete component properties
 	std::string delCompProps("DELETE FROM ComponentProperties WHERE ComponentId=?;");
 	std::auto_ptr<CStatement> stmtDelCompProps(iScrDbHandler->PrepareStatement(delCompProps));
@@ -844,6 +1008,85 @@
 	return stmtCompProperty->IntColumn(0);
 	}
 
+std::vector<TInt32> DbHelper::GetServiceInfoServiceID(TInt32 aAppUid) const
+{
+	std::vector<TInt32> serviceIdList;
+	std::string selectServiceId("SELECT ServiceId FROM ServiceInfo WHERE AppUid=?;");
+	std::auto_ptr<CStatement> stmtServiceId(iScrDbHandler->PrepareStatement(selectServiceId));
+	
+	stmtServiceId->BindInt(1, aAppUid);
+	while(stmtServiceId->ProcessNextRow())
+	{
+		serviceIdList.push_back(stmtServiceId->IntColumn(0));
+	}
+	
+	return serviceIdList;
+}
+
+
+std::vector<TInt32> DbHelper::GetLocalAppInfoID(TInt32 aAppUid) const
+{
+	std::vector<TInt32> localAppInfoIdList;
+	std::string selectLocalAppInfoId("SELECT LocalAppInfoId FROM LocalizableAppInfo WHERE AppUid=?;");
+	std::auto_ptr<CStatement> stmtLocalAppInfoId(iScrDbHandler->PrepareStatement(selectLocalAppInfoId));
+	
+	stmtLocalAppInfoId->BindInt(1, aAppUid);
+	while(stmtLocalAppInfoId->ProcessNextRow())
+	{
+		localAppInfoIdList.push_back(stmtLocalAppInfoId->IntColumn(0));
+	}
+	
+	return localAppInfoIdList;
+}
+
+
+std::vector<TInt32> DbHelper::GetLocalCaptionAndIconID(TInt32 aAppUid) const
+{
+	std::vector<TInt32> localCaptionAndIconIdList;
+	std::string selectLocalCaptionAndIconId("SELECT CaptionAndIconId FROM LocalizableAppInfo WHERE AppUid=?;");
+	std::auto_ptr<CStatement> stmtLocalCaptionAndIconId(iScrDbHandler->PrepareStatement(selectLocalCaptionAndIconId));
+	
+	stmtLocalCaptionAndIconId->BindInt(1, aAppUid);
+	while(stmtLocalCaptionAndIconId->ProcessNextRow())
+	{
+		localCaptionAndIconIdList.push_back(stmtLocalCaptionAndIconId->IntColumn(0));
+	}
+	
+	return localCaptionAndIconIdList;
+}
+
+
+std::vector<TInt32> DbHelper::GetViewDataCaptionAndIconID(TInt32 aLocalAppInfoID) const
+{
+	std::vector<TInt32> viewCaptionIdList;
+	std::string selectViewCaptionId("SELECT CaptionAndIconId FROM ViewData WHERE LocalAppInfoId=?;");
+	std::auto_ptr<CStatement> stmtViewCaptionId(iScrDbHandler->PrepareStatement(selectViewCaptionId));
+	
+	stmtViewCaptionId->BindInt(1, aLocalAppInfoID);
+	while(stmtViewCaptionId->ProcessNextRow())
+	{
+		viewCaptionIdList.push_back(stmtViewCaptionId->IntColumn(0));
+	}
+	
+	return viewCaptionIdList;
+}
+
+
+std::vector<TInt32> DbHelper::GetAppRegistrationInfoAppUid(TInt32 aComponentId) const
+{
+	std::vector<TInt32> appUidList;
+	std::string selectAppUid("SELECT AppUid FROM AppRegistrationInfo WHERE ComponentId=?;");
+	std::auto_ptr<CStatement> stmtAppUid(iScrDbHandler->PrepareStatement(selectAppUid));
+
+	stmtAppUid->BindInt(1, aComponentId);
+	while(stmtAppUid->ProcessNextRow())
+	{
+		appUidList.push_back(stmtAppUid->IntColumn(0));
+	}
+
+	return appUidList;
+}
+
 TInt32 DbHelper::GetComponentPropertyIntFormattedValue(TInt32 aComponentId, std::wstring aComponentPropertyName, TInt32 aIntFormatter) const
 	{
 	TInt32 propertyValue = 0;
--- a/secureswitools/swisistools/source/interpretsislib/dbhelper.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/dbhelper.h	Tue Aug 31 15:21:33 2010 +0300
@@ -48,7 +48,9 @@
 	{
 	public:
 		DbHelper( const std::wstring& aDrivePath, bool aIsSystemDrive);
+		~DbHelper();
 		TBool IsInstalled(TInt32 aUid) const;
+		TBool IsAppUidInstalled(TUint32 aAppUid) const;
 		bool InternalizeIfExists(SisRegistryObject& aSisRegistryObject, const TUint32 aUid ) const;
 		
 		bool GetIsRemovable( TInt32 aComponentId ) const;
@@ -73,6 +75,11 @@
 		TInt GetIndex( TUint32 aPackageUid) const;
 
 	private:
+		std::vector<TInt32> GetAppRegistrationInfoAppUid(TInt32 aComponentId) const;
+		std::vector<TInt32> GetServiceInfoServiceID(TInt32 aAppUid) const;
+		std::vector<TInt32> GetLocalAppInfoID(TInt32 aAppUid) const;
+		std::vector<TInt32> GetLocalCaptionAndIconID(TInt32 aAppUid) const;
+		std::vector<TInt32> GetViewDataCaptionAndIconID(TInt32 aLocalAppInfoID) const;
 		TInt32 GetComponentPropertyIntValue( TInt32 aComponentId, std::wstring aComponentPropertyName, TInt32 aDefaultValue = DbHelper::Absent ) const;
 		TInt32 GetComponentPropertyIntFormattedValue(TInt32 aComponentId, std::wstring aComponentPropertyName, TInt32 aIntFormatter) const;
 		std::wstring GetComponentPropertyStrValue(TInt32 aComponentId, std::wstring aComponentPropertyName, TInt32 aIntFormatter) const;
--- a/secureswitools/swisistools/source/interpretsislib/deserialiser.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/deserialiser.h	Tue Aug 31 15:21:33 2010 +0300
@@ -26,7 +26,7 @@
 #include "serialisable.h"
 #include "cardinality.h"
 #include "ucmp.h"
-#include "utf8.h"
+#include "utf8_wrapper.h"
 #include "is_utils.h"
 
 #pragma warning (disable: 4800)
--- a/secureswitools/swisistools/source/interpretsislib/errors.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/errors.h	Tue Aug 31 15:21:33 2010 +0300
@@ -62,7 +62,10 @@
 	PACKAGE_NOT_FOUND = -22,
 	ENV_NOT_SPECIFIED = -23,
 	DB_EXCEPTION = -24,
-	
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	RSC_PARSING_ERROR = -25,
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+
 	// errors related to database registration
 	GLOBALID_CREATION_ERROR = -40,
 	DATABASE_ENTRY_MISSING = -41,
--- a/secureswitools/swisistools/source/interpretsislib/expressionevaluator.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/expressionevaluator.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -32,7 +32,6 @@
 #include "sisregistryobject.h"
 #include "logger.h"
 #include "version.h"
-#include "is_utils.h"
 
 // ExpressionResult
 using namespace Utils;
@@ -361,7 +360,7 @@
 		std::ostringstream stream;
 		stream << "\tIF EXISTS(\'" << narrowFileName << "\') => " << fileExists;
 		std::string msg = stream.str();
-		std::wstring finalMessage = string2wstring( msg );
+    std::wstring finalMessage = string2wstring( msg );
 		LINFO( finalMessage );
 		}
     //
@@ -426,7 +425,7 @@
 					std::ostringstream stream;
 					stream << "Input language " << result << " is not supported by SIS file. Using first language " <<firstLanguage;
 					std::string msg = stream.str();
-					std::wstring finalMessage = string2wstring( msg );
+				std::wstring finalMessage = string2wstring( msg );
 					LWARN( finalMessage );	
 					}
 				result = firstLanguage;
@@ -437,7 +436,7 @@
 			std::ostringstream stream;
 			stream << "\tIF " << attributeName << " ... where [" << attributeName << " = " << result << "]";
 			std::string msg = stream.str();
-			std::wstring finalMessage = string2wstring( msg );
+        std::wstring finalMessage = string2wstring( msg );
 			LINFO( finalMessage );
 			}
         }
--- a/secureswitools/swisistools/source/interpretsislib/filedescription.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/filedescription.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -28,7 +28,27 @@
 FileDescription::~FileDescription ()
 	{
 	}
+	
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+FileDescription::FileDescription(const CSISFileDescription& aFile, TInt aSid, const TInt aTargetDrive, const std::wstring& aFileName, const std::wstring& aLocalName)
+	: iTarget(aFileName),
+	iLocalFile(aLocalName),
+	iMimeType(aFile.MimeType().GetString()),
+	iOperation(aFile.Operation()),
+	iOperationOptions(aFile.OperationOptions()),
+	iUncompressedLength(aFile.UncompressedLength()),
+	iIndex(aFile.FileIndex()),
+	iSid(aSid)
+{
+	const unsigned char* data = aFile.Hash().Blob().Data();
+	TUint32 len = aFile.Hash().Blob().Size();
 
+	std::string hashData((char*)data, len);
+
+	iHash.SetData(hashData);
+	iHash.SetHashId(HashContainer::EHashSHA);
+}
+#else
 FileDescription::FileDescription(const CSISFileDescription& aFile, TInt aSid, const TInt aTargetDrive, const std::wstring& aFileName)
 	: iTarget(aFileName),
 	iMimeType(aFile.MimeType().GetString()),
@@ -46,6 +66,7 @@
 	iHash.SetData(hashData);
 	iHash.SetHashId(HashContainer::EHashSHA);
 }
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 void FileDescription::Internalize(Deserialiser& des)
 	{
--- a/secureswitools/swisistools/source/interpretsislib/filedescription.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/filedescription.h	Tue Aug 31 15:21:33 2010 +0300
@@ -43,7 +43,12 @@
 	Constructor
 	*/
 	FileDescription () {};
+	#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	FileDescription (const CSISFileDescription& aFile, TInt aSid, const TInt aTargetDrive, const std::wstring& aFileName);
+	#else
+	FileDescription (const CSISFileDescription& aFile, TInt aSid, 
+						const TInt aTargetDrive, const std::wstring& aFileName, const std::wstring& aLocalName);
+	#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 	virtual ~FileDescription ();
 
@@ -98,8 +103,21 @@
 	void SetTarget(const std::wstring& aTarget)
 	{ iTarget = aTarget; }
 
+	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	const std::wstring& GetLocalFile() const
+	{ return iLocalFile; }
+
+	void SetLocalFile(const std::wstring& aLocalFile)
+	{ iLocalFile = aLocalFile; }
+	#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
 private:
 	std::wstring  iTarget;
+	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	// Full file name to the PC location
+	std::wstring iLocalFile;
+	#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	
 	std::wstring  iMimeType;
 	TInt        iOperation;
 	TInt        iOperationOptions;
--- a/secureswitools/swisistools/source/interpretsislib/installer.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/installer.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -21,6 +21,7 @@
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 #include "dbhelper.h" 
+#include "dirparse.h"
 #ifndef __TOOLS2_LINUX__
 #include <windows.h>
 #endif 
@@ -346,6 +347,11 @@
 	InstallableFiles installable;
 	GetInstallableFiles(file, installable, *iExpressionEvaluator, aInstallSISFile.iTargetDrive);
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	TBool iBackupFlag = false;
+	Backup(file, installable, iBackupFlag);
+#endif
+
 	// Uninstall the same package (if found) prior to any installation
 	UninstallPkg(file);
 
@@ -353,8 +359,33 @@
 
 	InstallFiles(installable, iParamList.SystemDriveLetter());
 
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	UpdateRegistry(file, installable, aInstallSISFile, aInstallSISFile.iSUFlag);
+#else
+	try {
+
+		UpdateRegistry(file, installable, aInstallSISFile, aInstallSISFile.iSUFlag);
+	}
+	catch  (InterpretSisError& e)
+	{
+		RestoreAll(file, installable, iBackupFlag);
+
+		LERROR(L"\t" << string2wstring(e.what()));
+		int result =  e.GetErrorCode();
+		return result;
 	
+	}
+	catch  (...)
+	{//Update Registry Failed. UnInstall the files.
+
+		RestoreAll(file, installable, iBackupFlag);
+		return RSC_PARSING_ERROR;
+	}
+
+	if(iBackupFlag)
+		RemoveBackup(file, installable);
+#endif
+
 	if (aInstallSISFile.iGenerateStub)
 	{
 		CreateStubSisFile(aInstallSISFile, file);
@@ -482,6 +513,182 @@
 	iRegistry.GenerateStubRegistry();
 }
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+// Backup all installed files for this Uid's packages and all the SisRegistry Entries
+void Installer::Backup(const SisFile& aFile, InstallableFiles& aInstallable, TBool& aBackupFlag)
+{
+	TUint32 uid = aFile.GetPackageUid();
+	TUint32 installType = aFile.GetInstallType();
+
+	// Check to see the SA is installed, else backup is not required.
+	if (iRegistry.IsInstalled(uid) && ((installType == CSISInfo::EInstInstallation) || (installType == CSISInfo::EInstPartialUpgrade)))
+	{
+		aBackupFlag = true;
+		int err = 0;
+		LINFO(L"Backup package \"" << aFile.GetPackageName() << L"\" prior to re-installation");
+
+		// Backup all installed files for this Uid's packages and all the SisRegistry Entries
+		iRegistry.BackupCtl(uid);
+
+		//Backup SCR DB
+		std::string DbPath = iRegistry.GetDbPath();
+		if (FileExists(string2wstring(DbPath)))
+		{	
+			std::string BackupDb(DbPath);
+			BackupDb.append("_backup");
+
+		 	err=FileCopyA(DbPath.c_str(),BackupDb.c_str(),0);
+			if (err != 0)
+				LERROR(L"Failed to Backup Database scr.db ");
+		}
+
+		// Backup all installed files for this Uid's packages and all the SisRegistry Entries
+		InstallableFiles::const_iterator filedesIter; 
+		//Backup files
+		for(filedesIter = aInstallable.begin() ; filedesIter != aInstallable.end(); ++filedesIter)
+		{
+			std::wstring itargetLocalFile = (*filedesIter)->GetLocalTarget();
+			if (FileExists(itargetLocalFile))
+			{
+				std::wstring itargetBackupFile = (*filedesIter)->GetLocalTarget();
+				std::wstring temp = itargetBackupFile.c_str();
+				temp.append(L"_backup");
+				itargetBackupFile = temp;
+
+
+				int pos =0;
+				#ifdef __LINUX__
+				std::wstring sysBin = L"/sys/bin/";
+				#else
+				std::wstring sysBin = L"\\sys\\bin\\";
+				#endif
+
+				if((pos = itargetBackupFile.find(sysBin, 0)) != std::wstring::npos)
+				{
+					BackupHashForFile(itargetLocalFile, iParamList.SystemDriveLetter(), iParamList.SystemDrivePath());
+				}
+
+				std::string iLocalFile = wstring2string(itargetLocalFile);
+				std::string iBackupFile = wstring2string(itargetBackupFile);
+
+				err=FileCopyA(iLocalFile.c_str(),iBackupFile.c_str(),0);
+				if (err != 0)
+					LERROR(L"Failed to Backup installable file ");
+			}
+		}
+	}
+}
+
+// Remove Backup of all installed files for this Uid's packages and all the SisRegistry Entries
+void Installer::RemoveBackup(const SisFile& aFile, InstallableFiles& aInstallable)
+{
+	TUint32 uid = aFile.GetPackageUid();
+	TUint32 installType = aFile.GetInstallType();
+
+	// Check to see the SA is installed, else backup is not required.
+	if (iRegistry.IsInstalled(uid) && ((installType == CSISInfo::EInstInstallation) || (installType == CSISInfo::EInstPartialUpgrade)))
+	{
+		LINFO(L"Remove Backup of package \"" << aFile.GetPackageName() << L"\" after re-installation success");
+		// Remove all installed files for this Uid's packages and all the SisRegistry Entries
+		iRegistry.RemoveCtlBackup(uid);
+
+		//Remove Backup SCR DB
+		std::string DbPath = iRegistry.GetDbPath();
+		std::string BackupDb(DbPath);
+		BackupDb.append("_backup");
+		std::wstring DbBackup = string2wstring(BackupDb);
+
+		if (FileExists(DbBackup))
+			RemoveFile(DbBackup);
+	
+		// Remove all installed files for this Uid's packages and all the SisRegistry Entries
+		InstallableFiles::const_iterator filedesIter; 
+		std::wstring itargetLocalFile;
+		std::wstring itargetBackupFile;
+
+		for(filedesIter = aInstallable.begin() ; filedesIter != aInstallable.end(); ++filedesIter)
+		{
+		    itargetLocalFile = (*filedesIter)->GetLocalTarget();
+			itargetBackupFile = (*filedesIter)->GetLocalTarget();
+			std::wstring temp = itargetBackupFile.c_str();
+			temp.append(L"_backup");
+			itargetBackupFile = temp;
+			
+			if (FileExists(itargetBackupFile))
+			{
+				RemoveFile(itargetBackupFile);
+				RemoveHashForFile(itargetBackupFile, iParamList.SystemDriveLetter(), iParamList.SystemDrivePath());
+			}
+		}
+	}
+}
+
+// Restore all installed files for this Uid's packages and all the SisRegistry Entries
+void Installer::Restore(const SisFile& aFile, InstallableFiles& aInstallable, TBool& aBackupFlag)
+{
+	TUint32 uid = aFile.GetPackageUid();
+	TUint32 installType = aFile.GetInstallType();
+
+	// Check to see the SA is installed, else backup is not required.
+	if((installType == CSISInfo::EInstInstallation) || (installType == CSISInfo::EInstPartialUpgrade))
+	{
+		LINFO(L"Restoring Installed Package ");
+
+		// Restore all .ctl file for this Uid's packages and all the SisRegistry Entries
+		iRegistry.RestoreCtl(uid, aBackupFlag);
+
+		// Restore all installed files for this Uid's packages and all the SisRegistry Entries
+		InstallableFiles::const_iterator filedesIter; 
+		for(filedesIter = aInstallable.begin() ; filedesIter != aInstallable.end(); ++filedesIter)
+		{
+			std::wstring itargetLocalFile = (*filedesIter)->GetLocalTarget();
+			std::wstring itargetBackupFile = (*filedesIter)->GetLocalTarget();
+			itargetBackupFile.append(L"_backup");
+			if (FileExists(itargetBackupFile))
+			{
+				int pos =0;
+				#ifdef __LINUX__
+				std::wstring sysBin = L"/sys/bin/";
+				#else
+				std::wstring sysBin = L"\\sys\\bin\\";
+				#endif
+
+				if((pos = itargetBackupFile.find(sysBin, 0)) != std::wstring::npos)
+				{
+					RestoreHashForFile(itargetLocalFile, iParamList.SystemDriveLetter(), iParamList.SystemDrivePath());
+				}
+
+				std::string iLocalFile = wstring2string(itargetLocalFile);
+				std::string iBackupFile = wstring2string(itargetBackupFile);
+				
+				int err = FileMoveA(iBackupFile.c_str(),iLocalFile.c_str());
+				if (err != 0)
+					LERROR(L"Failed to Restore file ");
+			}
+		}
+	}
+}
+
+void Installer::RestoreAll(const SisFile& aFile, InstallableFiles& aInstallable, TBool& aBackupFlag)
+{
+	InstallableFiles::const_iterator filedesIter; 
+	std::wstring itargetLocalFile;
+
+	for(filedesIter = aInstallable.begin() ; filedesIter != aInstallable.end(); ++filedesIter)
+	{
+		itargetLocalFile = (*filedesIter)->GetLocalTarget();
+		
+		if (FileExists(itargetLocalFile))
+		{
+			RemoveFile(itargetLocalFile);
+			RemoveHashForFile(itargetLocalFile, iParamList.SystemDriveLetter(), iParamList.SystemDrivePath());
+		}
+	}
+	Restore(aFile, aInstallable, aBackupFlag);
+	FreeInstallableFiles(aInstallable);
+}
+
+#endif
 
 struct CheckDependencyMet
 {
@@ -812,7 +1019,7 @@
 				// hash file is always created on the system drive
 				reghashdir[0] = iSystemDrive;
 
-				LINFO(L"\tCreating hash: " << reghashdir << basename.c_str());				
+				LINFO(L"\tCreating hash: " << reghashdir << basename);				
 				std::wstring hash = hashdir + basename;
 				HANDLE hFile = MakeSISOpenFile(hash.c_str(), GENERIC_WRITE, CREATE_ALWAYS);		
 				if( INVALID_HANDLE_VALUE == hFile )
@@ -1337,6 +1544,7 @@
 					std::wostringstream os;
 					os << target.c_str() << L" eclipses file from ROM" << std::endl;
 					iProblemFiles.append(os.str());
+
 					iError = ECLIPSING_VIOLATION;
 					continue;
 				}
--- a/secureswitools/swisistools/source/interpretsislib/installer.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/installer.h	Tue Aug 31 15:21:33 2010 +0300
@@ -68,7 +68,12 @@
 
 	void UninstallPkg(const SisFile& aSis); // Uninstall the same package (if found)
 											// prior to installation
-
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	void Backup(const SisFile& aFile, InstallableFiles& aInstallable, TBool& aBackupFlag);
+	void RemoveBackup(const SisFile& aFile, InstallableFiles& aInstallable);
+	void Restore(const SisFile& aFile, InstallableFiles& aInstallable, TBool& aBackupFlag);
+	void RestoreAll(const SisFile& aFile, InstallableFiles& aInstallable, TBool& aBackupFlag);
+#endif
 	bool DependenciesOk(const SisFile& aFile);			// Check to see if the sis file
 														// meets it's dependencies
 
@@ -92,7 +97,7 @@
 	const SisRegistryObject& AddRegistry(const SisFile& aFile,	// Create the registry entries for
 		const InstallableFiles& aInstalled, const bool aSUFlag);	// the installed sis file
 
-	void RemoveHashForFile(const std::wstring& aFile);
+	//void RemoveHashForFile(const std::wstring& aFile);
 
 	bool CheckDependency(const CSISDependency* aDep);	
 
--- a/secureswitools/swisistools/source/interpretsislib/interpretsis.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/interpretsis.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
--- a/secureswitools/swisistools/source/interpretsislib/interpretsis.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/interpretsis.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -76,4 +76,4 @@
 	Installer*		iInstaller;
 	};
 
-#endif //__INTERPRETSIS_H__
\ No newline at end of file
+#endif //__INTERPRETSIS_H__
--- a/secureswitools/swisistools/source/interpretsislib/is_utils.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/is_utils.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -79,10 +79,18 @@
 {
     while( len-- > 0 )
     {
+	#ifdef __TOOLS2_LINUX__
     	if( *aIn == '\\' )
     	{
     		*aIn = '/';
     	}
+	#else
+    	if( *aIn == '/' )
+    	{
+    		*aIn = '\\';
+    	}
+	#endif
+		
     	aIn++;
     }
 }
--- a/secureswitools/swisistools/source/interpretsislib/parameterlist.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/parameterlist.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -40,6 +40,17 @@
 	{
 	}
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+void CParameterList::SetResourceFilePath(const std::string& aFilePath)
+	{
+	iResourceFilePath = StringUtils::FixPathDelimiters(aFilePath);
+	if (!IsDirectory(iResourceFilePath))
+		{
+		throw EParamInvalidDir;
+		}
+	iFlags |= EFlagsResourceFilePathSet;
+	}
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 void CParameterList::SetSystemDrive(const std::string& aFilePath)
 	{
--- a/secureswitools/swisistools/source/interpretsislib/parameterlist.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/parameterlist.h	Tue Aug 31 15:21:33 2010 +0300
@@ -116,7 +116,11 @@
         EFlagsSysDriveSet           = 0x0010,
         EFlagsStubDirectorySet      = 0x0020,
         EFlagsConfigIniSet          = 0x0040,
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+		EFlagsResourceFilePathSet   = 0x0100,
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 		EFlagsDisableZDriveChecksSet= 0x0080
+
         };
 
 public: // Constructors & destructor
@@ -135,6 +139,13 @@
 	 * @param aError type of error.
 	 */
 	static void DisplayError(TParamException aError);
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	/**
+	 * Set the path which represent the system drive.
+	 * @param File-system path which represents system drive
+	 */
+	void SetResourceFilePath(const std::string& aFilePath);
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	/**
 	 * Set the path which represent the system drive.
 	 * @param File-system path which represents system drive
@@ -239,6 +250,12 @@
 	 * Get the system drive path.
 	 */
 	inline const std::wstring&	SystemDrivePath() const;
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	/**
+	 * Get the Resource File path.
+	 */
+	inline const std::wstring&	ResourceFilePath() const;
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	/**
 	 * Gets the ROM drive (Z) path in the file-system.
 	 */
@@ -291,7 +308,10 @@
 	SISFileList				iFileNames;
     OptionList				iRomLogFiles;
 	OptionList				iPkgUIDs;
-	std::wstring			iSystemDrivePath; 
+	std::wstring			iSystemDrivePath;
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	std::wstring			iResourceFilePath;
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	std::wstring			iZDrive; 
     std::wstring			iConfigFile;
     std::wstring			iSisStubPath;
@@ -327,6 +347,13 @@
 	return iSystemDrivePath;
 	}
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+inline const std::wstring& CParameterList::ResourceFilePath() const
+	{
+	return iResourceFilePath;
+	}
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
 inline const std::wstring& CParameterList::RomDrivePath() const
 	{
 	return iZDrive;
--- a/secureswitools/swisistools/source/interpretsislib/serialiser.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/serialiser.h	Tue Aug 31 15:21:33 2010 +0300
@@ -26,7 +26,7 @@
 #include "serialisable.h"
 #include "ucmp.h"
 #include "cardinality.h"
-#include "utf8.h"
+#include "utf8_wrapper.h"
 
 /**
 * @file SERIALISER.H
--- a/secureswitools/swisistools/source/interpretsislib/sisfile.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/sisfile.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -207,6 +207,7 @@
 		std::string x = wstring2string(this->GetPackageName());
 		throw InvalidSis(x, error, SIS_NOT_SUPPORTED);
 		}
+
 	}
 
 bool SisFile::ProcessInstallOptionsWarning(const CSISInstallBlock& aInstallBlock, std::string& aError)
@@ -218,7 +219,7 @@
 		{
 		const CSISFileDescription& fD = aInstallBlock.FileDescription(i);
         const CSISFileDescription::TSISFileOperation operation = fD.Operation();
-		std::wstring target(fD.Target().GetString());
+		std::wstring target(fD.Target().GetString().c_str());
         //
         switch( operation )
             {
@@ -276,7 +277,7 @@
 			break;
 	    	}
 		}
-	return success;
+		return success;
 	}
 
 
@@ -422,9 +423,9 @@
 
 		if (ifBlock.WasteOfSpace())
 			{
+			std::string x;
 			std::string error = "corrupt SIS file";
-			std::string x = wstring2string(this->GetPackageName());
-			throw InvalidSis(x, error, INVALID_SIS);
+			throw InvalidSis(Ucs2ToUtf8(this->GetPackageName(),x), error, INVALID_SIS);
 			}
 
 		// Main expression
@@ -445,8 +446,7 @@
 				ProcessInstallBlock(ifElseBlock.InstallBlock(), aFiles, aEvaluator, aDrivePath, aInstallingDrive);
 				break;	// Stop processing else if blocks
 				}
-			// Process the rest of the files
-			GetInstallableFiles(aFiles, ifElseBlock.InstallBlock(), aDrivePath, aInstallingDrive);
+			
 			}
 		} 
 	}
--- a/secureswitools/swisistools/source/interpretsislib/sisregistry.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/sisregistry.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -23,7 +23,6 @@
 #include "dbhelper.h"
 #include "dblayer.h"
 #include "dbconstants.h"
-#include "is_utils.h"
 #include "xmlgenerator.h"
 #include "xmlparser.h"
 #include "util.h"
@@ -31,8 +30,10 @@
 #include <iostream>
 #include <stdexcept>
 #include <iostream>
+#include "dirparse.h"
+#include "parse.h"
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
-#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 // constants 
 #define IGNORE_FORMATTING -1
 #define ENABLE 1
@@ -1465,13 +1466,22 @@
 void SisRegistry::UpdateInstallationInformation(XmlDetails::TScrPreProvisionDetail aScrPreProvisionDetail)
 	{
 	CXmlGenerator xmlGenerator;
-	char* tmpFileName = tmpnam(NULL);	
+
+	#ifndef __TOOLS2_LINUX__
+		char* tmpFileName = tmpnam(NULL);	
+	#else
+		char tmpFileName[] = "/tmp/interpretsis_XXXXXX";	
+		int temp_fd;
+		temp_fd=mkstemp(tmpFileName); 
+		fclose(fdopen(temp_fd,"w"));
+	#endif
+
 	std::wstring filename(string2wstring(tmpFileName));
 
 	int isRomApplication = 0;
 	xmlGenerator.WritePreProvisionDetails(filename , aScrPreProvisionDetail, isRomApplication);
 
-	#ifdef __LINUX__
+	#ifdef __TOOLS2_LINUX__
 	std::string executable = "scrtool";
 	#else
 	std::string executable = "scrtool.exe";
@@ -1487,11 +1497,11 @@
 		LERROR(L"Temporary file removal failed.");
 
 	if(error != 0)
-		{
+	{
 		std::string err = "Scrtool failed to upload the database registry entry.";
 		LERROR(L"Scrtool failed to upload the database registry entry.");
 		throw InterpretSisError(err, DATABASE_UPDATE_FAILED);
-		}
+	}
 	}
 
 std::string SisRegistry::GetDbPath()
@@ -1517,7 +1527,7 @@
 
 std::string SisRegistry::GetEpocRoot()
 	{
-	const char* epocRoot = getenv("EPOCROOT");
+	const char* epocRoot = getenv("EPOCROOT");	
 	if(NULL == epocRoot)
 		{
 		std::string err = "EPOCROOT environment variable not specified. Please specify it as part of your environment variable." \
@@ -1540,7 +1550,8 @@
 #else		
 		swprintf(textGlobalId,20,L"%08x",aUid);
 #endif
-	
+		
+
 	std::wstring globalId = textGlobalId;
 	
 	if( aInstallType == CSISInfo::EInstAugmentation || aInstallType == CSISInfo::EInstPreInstalledPatch )
@@ -1599,7 +1610,11 @@
 	    {
 		if (*currFile != L"." && *currFile != L"..")
 		    {
-			RemoveFile(path + *currFile);
+			#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+				int pos = 0;
+				if((pos = currFile->find(L".ctl_backup", 0)) == std::wstring::npos)
+			#endif
+					RemoveFile(path + *currFile);
 		    }
 
 		++currFile;
@@ -1630,7 +1645,11 @@
 				{
 				if (*currFile != L"." && *currFile != L"..")
 					{
-					RemoveFile(path + *currFile);
+					#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+						int pos = 0;
+						if((pos = currFile->find(L".ctl_backup", 0)) == std::wstring::npos)
+					#endif
+							RemoveFile(path + *currFile);
 					}
 				++currFile;
 				}
@@ -1646,6 +1665,91 @@
 		}
 	}
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+void SisRegistry::BackupCtl(TUint32 aUid)
+{
+	std::list<std::wstring> regDirFiles;
+	std::wstring path = GetRegistryDir( iParamList.SystemDrivePath(), aUid );
+    GetDirContents(path, regDirFiles);
+	std::list<std::wstring>::iterator currFile = regDirFiles.begin();
+
+	std::wstring  path1 = FixPathDelimiterstap(path);
+	// Backup all .ctl files in the system drive for this package
+	while (currFile != regDirFiles.end())
+	{
+		if (*currFile != L"." && *currFile != L"..")
+	    {
+			std::string ifile = wstring2string(path1 +*currFile);
+			std::string ibackupfile(ifile);
+			ibackupfile.append("_backup");
+
+			int err=FileCopyA(ifile.c_str(),ibackupfile.c_str(),0);
+			if (err != 0)
+				LERROR(L"Failed to Backup .ctl ");
+		}
+		++currFile;
+    }
+}
+
+void SisRegistry::RestoreCtl(TUint32 aUid, TBool& aBackupFlag)
+{
+	std::list<std::wstring> regDirFiles;
+	std::wstring path = GetRegistryDir( iParamList.SystemDrivePath(), aUid );
+    GetDirContents(path, regDirFiles);
+	std::list<std::wstring>::iterator currFile = regDirFiles.begin();
+
+	// Restore all .ctl files in the system drive for this package
+	while (currFile != regDirFiles.end())
+	{
+		if (*currFile != L"." && *currFile != L"..")
+	    {
+			if(aBackupFlag)
+			{
+				int pos =0;
+				if((pos = currFile->find(L".ctl_backup", 0)) == std::wstring::npos)
+				{
+					std::string ifile = wstring2string(path +*currFile);
+					std::string ibackupfile(ifile);
+					ibackupfile.append("_backup");
+
+					RemoveFile(path + *currFile);
+				 	int err = FileMoveA(ibackupfile.c_str(),ifile.c_str());
+					if (err != 0)
+						LERROR(L"Failed to Restore .ctl ");
+				}
+			}
+			else
+			{
+				RemoveFile(path + *currFile);
+			}
+		}
+		++currFile;
+    }
+}
+
+void SisRegistry::RemoveCtlBackup(TUint32 aUid)
+{
+	std::list<std::wstring> regDirFiles;
+	std::wstring path = GetRegistryDir( iParamList.SystemDrivePath(), aUid );
+    GetDirContents(path, regDirFiles);
+	std::list<std::wstring>::iterator currFile = regDirFiles.begin();
+	
+	// Remove all .ctl backup files in the system drive for this package
+	while (currFile != regDirFiles.end())
+	{
+		if (*currFile != L"." && *currFile != L"..")
+	    {
+			std::wstring ifile(path +*currFile);
+			ifile.append(L"_backup");
+			
+			if (FileExists(ifile))
+				RemoveFile(ifile);
+		}
+		++currFile;
+    }
+}
+#endif
+
 TUint32 SisRegistry::GetUid(TUint32 aSid) const
 	{
 	return iDbHelper->GetUid(aSid);
@@ -1681,6 +1785,9 @@
 	AddEmbeddedPackages(component, aSisRegistryObject.GetEmbeddedPackages());
 	AddProperties(component, aSisRegistryObject.GetProperties());
 	AddFileDescription(component, aSisRegistryObject.GetFileDescriptions());
+	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	AddApplicationRegistrationInfoL(component, aSisRegistryObject.GetFileDescriptions(), aSisRegistryObject.GetInRom());
+	#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	
 	// inROM
 	if(DbConstants::KDefaultIsInRom != aSisRegistryObject.GetInRom())
@@ -1985,6 +2092,7 @@
 		// add the location in the component files table
 		XmlDetails::TScrPreProvisionDetail::TComponentFile componentFile;
 		componentFile.iLocation = (*filedesIter)->GetTarget();
+
 		AddFileDescriptionAsFileProperty(componentFile, *filedesIter);
 		aComponent.iComponentFiles.push_back(componentFile);
 		}
@@ -1993,6 +2101,86 @@
 		AddComponentProperty(aComponent, DbConstants::CompWildCardFileCount, wildcardFileCount, IGNORE_FORMATTING);	
 	}
 
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+void SisRegistry::AddApplicationRegistrationInfoL(XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, const std::vector<FileDescription*>& aFileDescription, int aInRom )
+{
+	std::vector<FileDescription*>::const_iterator filedesIter;
+	std::wstring iLocalFile;
+	std::string RegistrationFileName;
+	
+	//Find Registration File from list of filelist
+	for(filedesIter = aFileDescription.begin() ; filedesIter != aFileDescription.end(); ++filedesIter)
+	{
+		// if it has wild card characters then donot process. Continue.
+		if( IsFileWideCard((*filedesIter)->GetLocalFile()) )
+		{
+			continue;
+		}
+
+		iLocalFile = (*filedesIter)->GetLocalFile();
+		RegistrationFileName = wstring2string(iLocalFile);
+
+		std::string iRomPath = wstring2string(iParamList.RomDrivePath());
+		if(aInRom)
+		{
+			std::string localpath = FullNameWithoutDrive(RegistrationFileName);
+			RegistrationFileName = iRomPath + localpath;
+		}
+
+		size_t found=RegistrationFileName.rfind(".rsc");
+		if(found==string::npos)
+			continue;
+
+		//Return 0 for Registration file else 1
+		TInt err = FindRegistrationResourceFileL(RegistrationFileName);
+
+		if(err)
+			continue;
+
+		std::string folder;
+		#ifdef __LINUX__
+		const char *privateFolder = "private/10003a3f/";
+		#else
+		const char *privateFolder = "private\\10003a3f\\";
+		#endif
+
+		found=RegistrationFileName.find(privateFolder);
+
+		if( found != string::npos ) 
+			folder = RegistrationFileName.substr(0,found); 
+		else
+			folder = RegistrationFileName; 
+
+		CAppInfoReader* appInfoReader = NULL;
+		appInfoReader = CAppInfoReader::NewL(RegistrationFileName, NullUid, folder); 
+		if (!appInfoReader)
+		{
+			std::string errMsg= "Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+		else
+		{
+			TBool readSuccessful=EFalse;
+
+			readSuccessful= appInfoReader->ReadL(aFileDescription, iRomPath, aInRom);
+		
+			if (readSuccessful)
+			{
+				CreateApplicationRegistrationInfoL(aComponent,appInfoReader);
+			}
+			else
+			{
+				delete appInfoReader;
+				std::string errMsg= "Reading Resource File failed.";
+				throw CResourceFileException(errMsg);
+			}
+		}
+		delete appInfoReader;
+	}
+}
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
 void SisRegistry::AddFileDescriptionAsFileProperty	(	XmlDetails::TScrPreProvisionDetail::TComponentFile& aComponentFile, 
 												const FileDescription* aFileDescription
 										)
--- a/secureswitools/swisistools/source/interpretsislib/sisregistry.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/sisregistry.h	Tue Aug 31 15:21:33 2010 +0300
@@ -60,6 +60,11 @@
 	~SisRegistry();
 
 public: // API
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	void BackupCtl(TUint32 aUid);
+	void RestoreCtl(TUint32 aUid, TBool& aBackupFlag);
+	void RemoveCtlBackup(TUint32 aUid);
+#endif
 	TBool IsInstalled(TUint32 aUid) const;
 	const SisRegistryPackage& SidToPackage(TUint32 aSid);
 	void SidToFileName(TUint32 aSid, std::wstring& aFileName);
@@ -179,7 +184,14 @@
 	void AddFileDescription	(	XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, 
 								const std::vector<FileDescription*>& aFileDescription 
 							);
-	
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	void AddApplicationRegistrationInfoL	(	XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, 
+								const std::vector<FileDescription*>& aFileDescription,
+								int aInRom 
+							);
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
+
 	void AddFileDescriptionAsFileProperty	(	XmlDetails::TScrPreProvisionDetail::TComponentFile& aComponentFile, 
 												const FileDescription* aFileDescription
 											);
--- a/secureswitools/swisistools/source/interpretsislib/sisregistryobject.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/sisregistryobject.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -124,8 +124,12 @@
 {
 	for( InstallableFiles::const_iterator curr = aFiles.begin(); curr != aFiles.end(); ++curr )
 	{	
-		InstallableFile* installableFile= *curr;		
+		InstallableFile* installableFile= *curr;	
+		#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 		FileDescription* f = new FileDescription(*installableFile->FileDescription() , installableFile->Sid(), aTargetDrive, installableFile->GetTarget());
+		#else
+		FileDescription* f = new FileDescription(*installableFile->FileDescription() , installableFile->Sid(), aTargetDrive, installableFile->GetTarget(),installableFile->GetLocalTarget());
+		#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 		iFileDescriptions.push_back(f);
 	}
 
@@ -380,8 +384,11 @@
 					aSids.push_back(aSid);
 				}
 			}
-
+			#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK //Just to ignore compiler
+			FileDescription* aFileDescription = new FileDescription(fileDesc, aSid, L'Z', fileDesc.Target().GetString(), fileDesc.Target().GetString());
+			#else
 			FileDescription* aFileDescription = new FileDescription(fileDesc, aSid, L'Z', fileDesc.Target().GetString());
+			#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 			iFileDescriptions.push_back(aFileDescription);
 		}
 		SetSids(aSids);
@@ -724,7 +731,11 @@
 	{	
 		InstallableFile* installableFile= *curr;
 		TUint32 sid = installableFile->Sid();
+		#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+		FileDescription* f = new FileDescription(*installableFile->FileDescription() , sid, iSelectedDrive, installableFile->GetTarget(),installableFile->GetLocalTarget());
+		#else
 		FileDescription* f = new FileDescription(*installableFile->FileDescription() , sid, iSelectedDrive, installableFile->GetTarget());
+		#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 		iFileDescriptions.push_back(f);
 
 		// If the SID is there already there is no reason to add it again
@@ -745,8 +756,13 @@
 	{	
 		InstallableFile* installableFile= *curr;
 		TUint32 sid = installableFile->Sid();
+		#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 		FileDescription f = FileDescription(*installableFile->FileDescription(), sid,
-											iSelectedDrive, installableFile->GetTarget());
+											iSelectedDrive, installableFile->GetTarget(),installableFile->GetLocalTarget());
+		#else
+		FileDescription f = FileDescription(*installableFile->FileDescription(), sid,
+										iSelectedDrive, installableFile->GetTarget());
+		#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 		
 		FileDescriptions::const_iterator end = iFileDescriptions.end();
 		for (FileDescriptions::iterator curr2 = iFileDescriptions.begin();
--- a/secureswitools/swisistools/source/interpretsislib/utils_win32.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/utils_win32.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -273,3 +273,46 @@
 
 	return 0;
 }
+/*
+//std::string Utils::wstring2string (const std::wstring& aWide)
+std::string wstring2string (const std::wstring& aWide)
+	{
+	int max = WideCharToMultiByte(CP_OEMCP,0,aWide.c_str(),aWide.length(),0,0,0,0);
+	std::string reply;
+	if (max > 0 )
+		{
+		char* buffer = new char [max];
+		try
+			{
+			WideCharToMultiByte(CP_OEMCP,0,aWide.c_str(),aWide.length(),buffer,max,0,0);
+			reply = std::string (buffer, max);
+			}
+		catch (...)
+			{
+			}
+		delete [] buffer;
+		}
+	return reply;
+	}
+
+//std::wstring Utils::string2wstring (const std::string& aNarrow)
+std::wstring string2wstring (const std::string& aNarrow)
+	{
+	int max = MultiByteToWideChar(CP_OEMCP,0,aNarrow.c_str(),aNarrow.length(),0,0);
+	std::wstring reply;
+	if (max > 0 )
+		{
+		wchar_t* buffer = new wchar_t [max];
+		try
+			{
+			MultiByteToWideChar(CP_OEMCP,0,aNarrow.c_str(),aNarrow.length(),buffer,max);
+			reply = std::wstring (buffer, max);
+			}
+		catch (...)
+			{
+			}
+		delete [] buffer;
+		}
+	return reply;
+	}
+*/
--- a/secureswitools/swisistools/source/interpretsislib/xmlgenerator.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/xmlgenerator.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -23,10 +23,13 @@
  @internalTechnology
 */
 
+#include "util.h"
 #include "xmlgenerator.h"
-#include "../common/exception.h"
+#include "exception.h"
 #include "is_utils.h"
 
+#include "utf8_wrapper.h"
+
 #include <xercesc/dom/DOM.hpp>
 #include <xercesc/util/XMLString.hpp>
 #include <xercesc/util/PlatformUtils.hpp>
@@ -55,9 +58,135 @@
 typedef void (*xmlPlatform) ();
 typedef void (*releaseXmlChPtr) (XMLCh** buf);
 
-// constants used for writing to the xml file
-std::wstring	PreProvisionInformation(L"PreProvisionInformation");
-std::wstring	SoftwareTypeName(L"SoftwareTypeName");
+
+//------------------------------------- Literals ------------------------------------------
+// Xerces literals are of type XMLCh*. For gcc XMLCh is defined as unsigned short (UCS16). 
+// In windows wchar_t has the same size as XMLCh therefor literals defined as L"This is a 
+// literal" will work. But in linux size of wchar_t is 4 (UCS32) bytes and hence L cannot 
+// be used for defining literals. To avoid string conversion and dynamic memory allocation 
+// following method is used to represent unsigned short literal. Current compiler has the 
+// limitation to represent such literals.
+//-----------------------------------------------------------------------------------------
+const XMLCh* KPreProvisionInformation = (const XMLCh*)    "P\0r\0e\0P\0r\0o\0v\0i\0s\0i\0o\0n\0I\0n\0f\0o\0r\0m\0a\0t\0i\0o\0n\0\0\0";
+const XMLCh* KSoftwareTypeName = (const XMLCh*)           "S\0o\0f\0t\0w\0a\0r\0e\0T\0y\0p\0e\0N\0a\0m\0e\0\0\0";
+const XMLCh* KUTF16 = (const XMLCh*)                      "U\0T\0F\0-\0001\0006\0\0\0";
+const XMLCh* KComponent = (const XMLCh*)                  "C\0o\0m\0p\0o\0n\0e\0n\0t\0\0\0";
+const XMLCh* KDependentId = (const XMLCh*)                "D\0e\0p\0e\0n\0d\0e\0n\0t\0I\0d\0\0\0"; 
+const XMLCh* KToVersion = (const XMLCh*)                  "T\0o\0V\0e\0r\0s\0i\0o\0n\0\0\0";
+const XMLCh* KFromVersion = (const XMLCh*)                "F\0r\0o\0m\0V\0e\0r\0s\0i\0o\0n\0\0\0";
+const XMLCh* KSupplierId = (const XMLCh*)                 "S\0u\0p\0p\0l\0i\0e\0r\0I\0d\0\0\0";
+const XMLCh* KName = (const XMLCh*)                       "N\0a\0m\0e\0\0\0";
+const XMLCh* KFileProperty_StrValue = (const XMLCh*)      "F\0i\0l\0e\0P\0r\0o\0p\0e\0r\0t\0y\0_\0S\0t\0r\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KFileProperty_IntValue = (const XMLCh*)      "F\0i\0l\0e\0P\0r\0o\0p\0e\0r\0t\0y\0_\0I\0n\0t\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KLocation = (const XMLCh*)                   "L\0o\0c\0a\0t\0i\0o\0n\0\0\0";
+const XMLCh* KComponentProperty_IsBinary = (const XMLCh*) "C\0o\0m\0p\0o\0n\0e\0n\0t\0P\0r\0o\0p\0e\0r\0t\0y\0_\0I\0s\0B\0i\0n\0a\0r\0y\0\0\0";
+const XMLCh* KComponentProperty_StrValue = (const XMLCh*) "C\0o\0m\0p\0o\0n\0e\0n\0t\0P\0r\0o\0p\0e\0r\0t\0y\0_\0S\0t\0r\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KComponentProperty_IntValue = (const XMLCh*) "C\0o\0m\0p\0o\0n\0e\0n\0t\0P\0r\0o\0p\0e\0r\0t\0y\0_\0I\0n\0t\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KComponentProperty_Locale = (const XMLCh*)   "C\0o\0m\0p\0o\0n\0e\0n\0t\0P\0r\0o\0p\0e\0r\0t\0y\0_\0L\0o\0c\0a\0l\0e\0\0\0";
+const XMLCh* KComponentLocalizable_Vendor=(const XMLCh*)  "C\0o\0m\0p\0o\0n\0e\0n\0t\0L\0o\0c\0a\0l\0i\0z\0a\0b\0l\0e\0_\0V\0e\0n\0d\0o\0r\0\0\0";
+const XMLCh* KComponentLocalizable_Name = (const XMLCh*)  "C\0o\0m\0p\0o\0n\0e\0n\0t\0L\0o\0c\0a\0l\0i\0z\0a\0b\0l\0e\0_\0N\0a\0m\0e\0\0\0";
+const XMLCh* KComponentLocalizable_Locale=(const XMLCh*)  "C\0o\0m\0p\0o\0n\0e\0n\0t\0L\0o\0c\0a\0l\0i\0z\0a\0b\0l\0e\0_\0L\0o\0c\0a\0l\0e\0\0\0";
+const XMLCh* KBuild = (const XMLCh*)                      "B\0u\0i\0l\0d\0\0\0";
+const XMLCh* KMinor = (const XMLCh*)                      "M\0i\0n\0o\0r\0\0\0";
+const XMLCh* KMajor = (const XMLCh*)                      "M\0a\0j\0o\0r\0\0\0";
+const XMLCh* KVersion = (const XMLCh*)                    "V\0e\0r\0s\0i\0o\0n\0\0\0"; 
+const XMLCh* KHidden = (const XMLCh*)                     "H\0i\0d\0d\0e\0n\0\0\0";
+const XMLCh* KOriginVerified = (const XMLCh*)             "O\0r\0i\0g\0i\0n\0V\0e\0r\0i\0f\0i\0e\0d\0\0\0";
+const XMLCh* KGlobalId = (const XMLCh*)                   "G\0l\0o\0b\0a\0l\0I\0d\0\0\0";
+const XMLCh* KScomoState = (const XMLCh*)                 "S\0c\0o\0m\0o\0S\0t\0a\0t\0e\0\0\0";
+const XMLCh* KSize = (const XMLCh*)                       "S\0i\0z\0e\0\0\0";
+const XMLCh* KRemovable = (const XMLCh*)                  "R\0e\0m\0o\0v\0a\0b\0l\0e\0\0\0";
+const XMLCh* KComponentLocalizable = (const XMLCh*)       "C\0o\0m\0p\0o\0n\0e\0n\0t\0L\0o\0c\0a\0l\0i\0z\0a\0b\0l\0e\0\0\0";
+const XMLCh* KComponentProperty = (const XMLCh*)          "C\0o\0m\0p\0o\0n\0e\0n\0t\0P\0r\0o\0p\0e\0r\0t\0y\0\0\0";
+const XMLCh* KComponentProperty_Value = (const XMLCh*)    "C\0o\0m\0p\0o\0n\0e\0n\0t\0P\0r\0o\0p\0e\0r\0t\0y\0_\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KComponentFile = (const XMLCh*)              "C\0o\0m\0p\0o\0n\0e\0n\0t\0F\0i\0l\0e\0\0\0";
+const XMLCh* KFileProperty = (const XMLCh*)               "F\0i\0l\0e\0P\0r\0o\0p\0e\0r\0t\0y\0\0\0";
+const XMLCh* KFileProperty_Value = (const XMLCh*)         "F\0i\0l\0e\0P\0r\0o\0p\0e\0r\0t\0y\0_\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KComponentDependency = (const XMLCh*)        "C\0o\0m\0p\0o\0n\0e\0n\0t\0D\0e\0p\0e\0n\0d\0e\0n\0c\0y\0\0\0"; 	
+const XMLCh* KDependencyList = (const XMLCh*)             "D\0e\0p\0e\0n\0d\0e\0n\0c\0y\0L\0i\0s\0t\0\0\0";
+const XMLCh* KRomApplication = (const XMLCh*)             "R\0o\0m\0A\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0\0\0";
+const XMLCh* KApplicationRegistrationInfo = (const XMLCh*) "A\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0R\0e\0g\0i\0s\0t\0r\0a\0t\0i\0o\0n\0I\0n\0f\0o\0\0\0";
+const XMLCh* KOpaqueData = (const XMLCh*) 				  "O\0p\0a\0q\0u\0e\0D\0a\0t\0a\0\0\0";
+const XMLCh* KData = (const XMLCh*)						  "D\0a\0t\0a\0\0\0";
+const XMLCh* KOpaqueLocale = (const XMLCh*)				  "O\0p\0a\0q\0u\0e\0L\0o\0c\0a\0l\0e\0\0\0";
+const XMLCh* KIsBinary = (const XMLCh*)				  	  "I\0s\0B\0i\0n\0a\0r\0y\0\0\0";
+const XMLCh* KFileOwnershipinfo = (const XMLCh*)		  "F\0i\0l\0e\0O\0w\0n\0e\0r\0s\0h\0i\0p\0i\0n\0f\0o\0\0\0";
+const XMLCh* KFileName = (const XMLCh*) 				  "F\0i\0l\0e\0N\0a\0m\0e\0\0\0";
+const XMLCh* KApplicationLocalizableInfo = (const XMLCh*) "A\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0L\0o\0c\0a\0l\0i\0z\0a\0b\0l\0e\0I\0n\0f\0o\0\0\0";
+const XMLCh* KLocalizableAttribute = (const XMLCh*)       "L\0o\0c\0a\0l\0i\0z\0a\0b\0l\0e\0A\0t\0t\0r\0i\0b\0u\0t\0e\0\0\0";
+const XMLCh* KLocalizableAttribute_Value = (const XMLCh*) "L\0o\0c\0a\0l\0i\0z\0a\0b\0l\0e\0A\0t\0t\0r\0i\0b\0u\0t\0e\0_\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KLocalizableAttribute_IntValue = (const XMLCh*) "L\0o\0c\0a\0l\0i\0z\0a\0b\0l\0e\0A\0t\0t\0r\0i\0b\0u\0t\0e\0_\0I\0n\0t\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KLocalizableAttribute_StrValue = (const XMLCh*) "L\0o\0c\0a\0l\0i\0z\0a\0b\0l\0e\0A\0t\0t\0r\0i\0b\0u\0t\0e\0_\0S\0t\0r\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KViewData = (const XMLCh*) "V\0i\0e\0w\0D\0a\0t\0a\0\0\0";
+const XMLCh* KViewDataAttribute = (const XMLCh*) "V\0i\0e\0w\0D\0a\0t\0a\0A\0t\0t\0r\0i\0b\0u\0t\0e\0\0\0";
+const XMLCh* KApplicationDataType = (const XMLCh*) "A\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0D\0a\0t\0a\0T\0y\0p\0e\0\0\0";
+const XMLCh* KPriority = (const XMLCh*) "P\0r\0i\0o\0r\0i\0t\0y\0\0\0";
+const XMLCh* KType = (const XMLCh*) "T\0y\0p\0e\0\0\0";
+const XMLCh* KViewData_Value = (const XMLCh*) "V\0i\0e\0w\0D\0a\0t\0a\0_\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KViewData_IntValue = (const XMLCh*) "V\0i\0e\0w\0D\0a\0t\0a\0_\0I\0n\0t\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KViewData_StrValue = (const XMLCh*) "V\0i\0e\0w\0D\0a\0t\0a\0_\0S\0t\0r\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KApplicationServiceInfo = (const XMLCh*) "A\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0S\0e\0r\0v\0i\0c\0e\0I\0n\0f\0o\0\0\0";
+const XMLCh* KUid = (const XMLCh*) "U\0i\0d\0\0\0";
+const XMLCh* KServiceOpaqueData = (const XMLCh*) "S\0e\0r\0v\0i\0c\0e\0O\0p\0a\0q\0u\0e\0D\0a\0t\0a\0\0\0";
+const XMLCh* KServiceData = (const XMLCh*) "S\0e\0r\0v\0i\0c\0e\0D\0a\0t\0a\0\0\0";
+const XMLCh* KServiceOpaqueLocale = (const XMLCh*) "S\0e\0r\0v\0i\0c\0e\0O\0p\0a\0q\0u\0e\0L\0o\0c\0a\0l\0e\0\0\0";
+const XMLCh* KApplicationProperty = (const XMLCh*) "A\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0P\0r\0o\0p\0e\0r\0t\0y\0\0\0";
+const XMLCh* KLocale = (const XMLCh*) "L\0o\0c\0a\0l\0e\0\0\0";
+const XMLCh* KServiceUid = (const XMLCh*) "S\0e\0r\0v\0i\0c\0e\0U\0i\0d\0\0\0";
+const XMLCh* KIntValue = (const XMLCh*) "I\0n\0t\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KStrValue = (const XMLCh*) "S\0t\0r\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KIsStr8Bit = (const XMLCh*) "I\0s\0S\0t\0r\08\0B\0i\0t\0\0\0";
+const XMLCh* KApplicationAttribute = (const XMLCh*) "A\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0A\0t\0t\0r\0i\0b\0u\0t\0e\0\0\0";
+const XMLCh* KApplicationAttribute_Value = (const XMLCh*) "A\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0A\0t\0t\0r\0i\0b\0u\0t\0e\0_\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KApplicationAttribute_IntValue = (const XMLCh*) "A\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0A\0t\0t\0r\0i\0b\0u\0t\0e\0_\0I\0n\0t\0V\0a\0l\0u\0e\0\0\0";
+const XMLCh* KApplicationAttribute_StrValue = (const XMLCh*) "A\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0A\0t\0t\0r\0i\0b\0u\0t\0e\0_\0S\0t\0r\0V\0a\0l\0u\0e\0\0\0";
+
+
+
+
+//-----------------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------------------------------------------------------
+//											UTILITY FUNCTIONS
+//------------------------------------------------------------------------------------------------------------------------------
+
+XercesString ConvertToXercesString(const char* aString, int aLength)
+	{
+	XMLCh* buffer = new UTF16[aLength + 1];
+	XMLCh* temp = buffer; // save as buffer gets modified..
+	ConvertUTF8toUTF16(&aString, aString + aLength, &temp, buffer + aLength, lenientConversion);
+	
+	// Appending NUL to the converted buffer.
+	*temp = 0;
+
+	XercesString result;
+
+	result.append(buffer);
+	delete[] buffer;
+
+	return result;
+	}
+
+XercesString IntegerToXercesString(int aValue)
+	{
+	std::stringstream str;
+	str << aValue;
+
+	return ConvertToXercesString(str.str().c_str(), str.str().length());
+	}
+
+
+XercesString Int64ToXercesString(TInt64 aInt)
+	{
+	char str[50];
+	
+	sprintf(str, "%I64u", aInt);
+
+	return ConvertToXercesString(str, strlen(str));
+	}
+	
+
+//------------------------------------------------------------------------------------------------------------------------------
 
 
 CXmlGenerator::CXmlGenerator()
@@ -67,7 +196,10 @@
 	{}
 
 
-void CXmlGenerator::WritePreProvisionDetails(const std::wstring aXmlFileName, const XmlDetails::TScrPreProvisionDetail& aPreProvisionDetail)
+void CXmlGenerator::WritePreProvisionDetails(const std::wstring aXmlFileName, 
+												const XmlDetails::TScrPreProvisionDetail& aPreProvisionDetail,
+												int& aRomApplication
+												)
 	{
 	try 
 		{
@@ -83,9 +215,14 @@
 		std::auto_ptr < SchemaDomErrorHandler > errHandler(new SchemaDomErrorHandler());
 		domWriter->setErrorHandler(errHandler.get());
 
+#ifdef _WIN32
+		// XMLString::trascode() function should be used for conversion.
 		std::auto_ptr < XMLFormatTarget > outputFile( new LocalFileFormatTarget( aXmlFileName.c_str() ) );	
-		
-		const char* epocRoot = getenv("EPOCROOT");
+#else
+        std::string fileName = wstring2string(aXmlFileName);
+		std::auto_ptr < XMLFormatTarget > outputFile( new LocalFileFormatTarget( fileName.c_str() ) );
+#endif // _WIN32		
+		const char* epocRoot = getenv("EPOCROOT");		
 		if(NULL == epocRoot)
 			{
 			throw std::runtime_error("EPOCROOT environment variable not specified.");
@@ -93,31 +230,33 @@
 		
 		std::string epocRootStr(epocRoot); 
 
-		std::string dtdFilePath = epocRootStr + "epoc32\\tools\\preprovision.dtd";
+		#ifdef __LINUX__ 
+		std::string dtdFilePath = epocRootStr + "epoc32/tools/preprovision.dtd";
+		#else 	  	  	 
+		std::string dtdFilePath = epocRootStr + "epoc32\\tools\\preprovision.dtd"; 	
+		#endif
 		
 		fn_auto_ptr<releaseXmlChPtr, XMLCh> dtdPath( &XMLString::release, XMLString::transcode(dtdFilePath.c_str()) );
-		DOMDocumentType* documentType = domImpl->createDocumentType(L"PreProvisionInformation",NULL, dtdPath.get());
+		DOMDocumentType* documentType = domImpl->createDocumentType(KPreProvisionInformation,NULL, dtdPath.get());
 		
 		
-		mem_fn_auto_ptr< releaseDOMDoc, DOMDocument* > domDocument( &XERCES_CPP_NAMESPACE::DOMDocument::release, domImpl->createDocument(	0, PreProvisionInformation.c_str(), documentType) );
+		mem_fn_auto_ptr< releaseDOMDoc, DOMDocument* > domDocument( &XERCES_CPP_NAMESPACE::DOMDocument::release, domImpl->createDocument(	0, KPreProvisionInformation, documentType) );
 
 		DOMElement* rootElement = domDocument->getDocumentElement();
 		
 		// SoftwareTypeName
-		AddChildElement(rootElement, domDocument.get(), SoftwareTypeName.c_str(), aPreProvisionDetail.iSoftwareTypeName.c_str() );
+		AddChildElement(rootElement, domDocument.get(), KSoftwareTypeName, aPreProvisionDetail.SoftwareTypeName().c_str() );
 
 		std::vector<XmlDetails::TScrPreProvisionDetail::TComponent>::const_iterator compIter;
 		for(compIter = aPreProvisionDetail.iComponents.begin(); compIter != aPreProvisionDetail.iComponents.end() ; ++compIter)
 			{
-			DOMElement*  component = domDocument->createElement(L"Component");
+			DOMElement*  component = domDocument->createElement(KComponent);
 			rootElement->appendChild(component);
 
-			WriteComponent(component,domDocument.get(), *compIter);
+			WriteComponent(component,domDocument.get(), *compIter, aRomApplication);
 			}
-		
 		// do the serialization through DOMWriter::writeNode();
-		domWriter->writeNode(outputFile.get(), *domDocument.get());
-		
+		domWriter->writeNode(outputFile.get(), *domDocument.get()); 	  			
 		}
         catch (const XMLException& toCatch) 
 			{
@@ -141,7 +280,7 @@
 
 	if (aDomWriter->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true))
 		 aDomWriter->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true);
-	
+
 	if (aDomWriter->canSetFeature(XMLUni::fgDOMWRTNormalizeCharacters, false))
 		aDomWriter->setFeature(XMLUni::fgDOMWRTNormalizeCharacters, false);
 
@@ -160,29 +299,41 @@
 	if (aDomWriter->canSetFeature(XMLUni::fgDOMXMLDeclaration, true))
 		 aDomWriter->setFeature(XMLUni::fgDOMXMLDeclaration, true);
 	
-	aDomWriter->setEncoding(L"UTF-16");
+	aDomWriter->setEncoding(KUTF16);
 	}
 
-void CXmlGenerator::WriteComponent( DOMElement* aRootElement, DOMDocument* aDocument, const XmlDetails::TScrPreProvisionDetail::TComponent& aComponent)
+void CXmlGenerator::WriteComponent( DOMElement* aRootElement, DOMDocument* aDocument, 
+										const XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, 
+										int& aRomApplication
+										)
 	{
-	std::wstring isRemovable = Utils::IntegerToWideString(aComponent.iComponentDetails.iIsRemovable);
-	AddChildElement(aRootElement, aDocument, L"Removable", isRemovable.c_str() );
+
+	if (aRomApplication) 
+	{
+		int isRomApplication = 1;
+		XercesString isRomApp = IntegerToXercesString(isRomApplication);
+		AddChildElement(aRootElement, aDocument, KRomApplication, isRomApp.c_str());
+	}
 	
-	std::wstring size = Utils::Int64ToWideString(aComponent.iComponentDetails.iSize);
-	AddChildElement(aRootElement, aDocument, L"Size", size.c_str() );
+	XercesString isRemovable = IntegerToXercesString(aComponent.iComponentDetails.iIsRemovable);
+	AddChildElement(aRootElement, aDocument, KRemovable, isRemovable.c_str() );
+
 	
-	std::wstring scomoState = Utils::IntegerToWideString(aComponent.iComponentDetails.iScomoState);
-	AddChildElement(aRootElement, aDocument, L"ScomoState", scomoState.c_str() );
+	XercesString size = Int64ToXercesString(aComponent.iComponentDetails.iSize);
+	AddChildElement(aRootElement, aDocument, KSize, size.c_str() );
+	
+	XercesString scomoState = IntegerToXercesString(aComponent.iComponentDetails.iScomoState);
+	AddChildElement(aRootElement, aDocument, KScomoState, scomoState.c_str() );
 
-	AddChildElement(aRootElement, aDocument, L"GlobalId", aComponent.iComponentDetails.iGlobalId.c_str() );
+	AddChildElement(aRootElement, aDocument, KGlobalId, aComponent.iComponentDetails.GlobalId().c_str() );
 
 	WriteComponentVersion(aRootElement, aDocument, aComponent.iComponentDetails.iVersion);
 	
-	std::wstring isOriginVerified = Utils::IntegerToWideString(aComponent.iComponentDetails.iOriginVerified);
-	AddChildElement(aRootElement, aDocument, L"OriginVerified", isOriginVerified.c_str() );
+	XercesString isOriginVerified = Int64ToXercesString(aComponent.iComponentDetails.iOriginVerified);
+	AddChildElement(aRootElement, aDocument, KOriginVerified, isOriginVerified.c_str() );
 
-	std::wstring isHidden = Utils::IntegerToWideString(aComponent.iComponentDetails.iIsHidden);
-	AddChildElement(aRootElement, aDocument, L"Hidden", isHidden.c_str() );
+	XercesString isHidden = IntegerToXercesString(aComponent.iComponentDetails.iIsHidden);
+	AddChildElement(aRootElement, aDocument, KHidden, isHidden.c_str() );
 
 	WriteComponentLocalizables(aRootElement, aDocument, aComponent.iComponentLocalizables);
 
@@ -191,6 +342,9 @@
 	WriteComponentFiles(aRootElement, aDocument, aComponent.iComponentFiles);
 
 	WriteComponentDependencies(aRootElement, aDocument, aComponent.iComponentDependency);
+
+	WriteAppRegInfo(aRootElement, aDocument, aComponent.iApplicationRegistrationInfo);
+
 	}
 
 void CXmlGenerator::WriteComponentVersion
@@ -200,11 +354,11 @@
 				XmlDetails::TScrPreProvisionDetail::TComponentDetails::TVersion aVersion
 				)
 	{
-	DOMElement*  version = aDocument->createElement(L"Version");
+	DOMElement*  version = aDocument->createElement(KVersion);
 	aRootElement->appendChild(version);
-	version->setAttribute( L"Major", aVersion.iMajor.c_str() );
-	version->setAttribute( L"Minor", aVersion.iMinor.c_str() );
-	version->setAttribute( L"Build", aVersion.iBuild.c_str() );
+	version->setAttribute( KMajor, aVersion.MajorVersion().c_str() );
+	version->setAttribute( KMinor, aVersion.MinorVersion().c_str() );
+	version->setAttribute( KBuild, aVersion.BuildVersion().c_str() );
 	}
 
 void CXmlGenerator::WriteComponentLocalizables
@@ -216,11 +370,13 @@
 	std::vector<ComponentLocalizable>::const_iterator compLocIter;
 	for( compLocIter = aComponentLocalizable.begin() ; compLocIter != aComponentLocalizable.end() ; ++compLocIter)
 		{
-		DOMElement* newRoot = AddTag(aRootElement, aDocument, L"ComponentLocalizable");
-		std::wstring locale = Utils::IntegerToWideString(compLocIter->iLocale);
-		AddChildElement(newRoot,aDocument, L"ComponentLocalizable_Locale", locale.c_str());
-		AddChildElement(newRoot,aDocument, L"ComponentLocalizable_Name", compLocIter->iName.c_str());
-		AddChildElement(newRoot,aDocument, L"ComponentLocalizable_Vendor", compLocIter->iVendor.c_str());
+		DOMElement* newRoot = AddTag(aRootElement, aDocument, KComponentLocalizable);
+		XercesString locale = IntegerToXercesString(compLocIter->iLocale);
+
+
+		AddChildElement(newRoot,aDocument, KComponentLocalizable_Locale, locale.c_str());
+		AddChildElement(newRoot,aDocument, KComponentLocalizable_Name, compLocIter->Name().c_str());
+		AddChildElement(newRoot,aDocument, KComponentLocalizable_Vendor, compLocIter->Vendor().c_str());
 		}
 	}
 
@@ -234,32 +390,323 @@
 	for( compPropIter = aComponentProperties.begin() ; compPropIter != aComponentProperties.end() ; ++compPropIter)
 		{
 		
-		DOMElement* compPropRoot = AddTag(aRootElement, aDocument, L"ComponentProperty");
+		DOMElement* compPropRoot = AddTag(aRootElement, aDocument, KComponentProperty);
 		
-		std::wstring locale = Utils::IntegerToWideString(compPropIter->iLocale);
-		AddChildElement(compPropRoot,aDocument, L"ComponentProperty_Locale", locale.c_str());
+		XercesString locale = IntegerToXercesString(compPropIter->iLocale);
+		AddChildElement(compPropRoot,aDocument, KComponentProperty_Locale, locale.c_str());
 		
-		DOMElement* compPropValueRoot = AddTag(compPropRoot, aDocument, L"ComponentProperty_Value");
+		DOMElement* compPropValueRoot = AddTag(compPropRoot, aDocument, KComponentProperty_Value);
 		
-		std::wstring isBinary = Utils::IntegerToWideString(compPropIter->iIsStr8Bit);
+		XercesString isBinary = IntegerToXercesString(compPropIter->iIsStr8Bit);
 
 		if(compPropIter->iIsIntValue)
 			{
-			AddChildElement(compPropValueRoot,aDocument, L"ComponentProperty_IntValue", compPropIter->iValue.c_str());
+			AddChildElement(compPropValueRoot,aDocument, KComponentProperty_IntValue, compPropIter->Value().c_str());
 			}
 		else
 			{
-			AddChildElement(compPropValueRoot,aDocument, L"ComponentProperty_StrValue", compPropIter->iValue.c_str());
+			AddChildElement(compPropValueRoot,aDocument, KComponentProperty_StrValue, compPropIter->Value().c_str());
 			}
 		
 		
-		AddChildElement(compPropRoot,aDocument, L"ComponentProperty_IsBinary", isBinary.c_str());
+		AddChildElement(compPropRoot,aDocument, KComponentProperty_IsBinary, isBinary.c_str());
 
-		compPropRoot->setAttribute(L"Name", compPropIter->iName.c_str());
+		compPropRoot->setAttribute(KName, compPropIter->Name().c_str());
 		
 		}
 	}
 
+
+/**
+ * Writes Class TAppRegistrationInfo Info in XML. 
+ */
+
+void CXmlGenerator::WriteAppRegInfo	
+					( 
+						DOMElement* aRootElement, DOMDocument* aDocument, 
+						const std::vector<AppRegistrationInfo>& aAppRegInfo 
+					)
+{
+	std::vector<AppRegistrationInfo>::const_iterator compFileIter;
+	for( compFileIter = aAppRegInfo.begin() ; compFileIter != aAppRegInfo.end() ; ++compFileIter)
+	{
+		DOMElement* compFileRoot = AddTag(aRootElement, aDocument, KApplicationRegistrationInfo);
+
+		WriteAppAttributes(compFileRoot, aDocument, compFileIter->iApplicationAttribute);
+
+		const std::vector<AppOpaqueDataType>& aAppOpaqueDataType = compFileIter->iOpaqueDataType;
+		std::vector<AppOpaqueDataType>::const_iterator fileAppOpaqueDataType;
+
+		for( fileAppOpaqueDataType = aAppOpaqueDataType.begin() ; fileAppOpaqueDataType != aAppOpaqueDataType.end() ; ++fileAppOpaqueDataType)
+		{
+			if(0 == fileAppOpaqueDataType->iServiceUid)
+			{
+				DOMElement* filePropValueRoot = AddTag(compFileRoot, aDocument, KOpaqueData);
+				
+				if(fileAppOpaqueDataType->iIsBinary)
+				{
+					std::string temp = wstring2string(fileAppOpaqueDataType->iOpaqueData);
+					std::string binStrData = Util::Base64Encode(temp);
+					std::wstring binData = string2wstring(binStrData);
+					XercesString opaqueBinData = WStringToXercesString(binData);
+					AddChildElement(filePropValueRoot,aDocument, KData, opaqueBinData.c_str());
+				}
+				else
+				{
+					XercesString opaqueData = WStringToXercesString(fileAppOpaqueDataType->iOpaqueData);
+					AddChildElement(filePropValueRoot,aDocument, KData, opaqueData.c_str());
+				}
+				
+				XercesString locale = IntegerToXercesString(fileAppOpaqueDataType->iLocale);
+				AddChildElement(filePropValueRoot,aDocument, KOpaqueLocale, locale.c_str());
+
+				XercesString iBinary = IntegerToXercesString(fileAppOpaqueDataType->iIsBinary);
+				AddChildElement(filePropValueRoot,aDocument, KIsBinary, iBinary.c_str());
+				
+			}
+		}
+
+		for(vector<std::wstring>::iterator mimeiter = compFileIter->iFileOwnershipInfo.begin() ; mimeiter != compFileIter->iFileOwnershipInfo.end() ; ++mimeiter )
+		{
+			DOMElement* filePropRoot = AddTag(compFileRoot, aDocument, KFileOwnershipinfo);
+
+			XercesString temp = WStringToXercesString(*mimeiter);
+			AddChildElement(filePropRoot,aDocument, KFileName,  temp.c_str());
+		}
+
+		WriteAppServiceInfo(compFileRoot, aDocument, compFileIter->iApplicationServiceInfo, compFileIter->iOpaqueDataType);
+		WriteAppLocalizableInfo(compFileRoot, aDocument, compFileIter->iApplicationLocalizableInfo);
+	}
+}
+
+/**
+ * Writes Class TAppLocalizableInfo Info in XML. 
+ */
+
+void CXmlGenerator::WriteAppLocalizableInfo	
+					( 
+						DOMElement* aRootElement, DOMDocument* aDocument, 
+						const std::vector<AppLocalizableInfo>& aAppLocalizableInfo
+					)
+{
+	std::vector<AppLocalizableInfo>::const_iterator filePropIter;
+	for( filePropIter = aAppLocalizableInfo.begin() ; filePropIter != aAppLocalizableInfo.end() ; ++filePropIter)
+	{
+		DOMElement* filePropRoot = AddTag(aRootElement, aDocument, KApplicationLocalizableInfo);
+
+		WriteAppLocalizableAttribute(filePropRoot, aDocument, filePropIter->iLocalizableAttribute);
+		WriteAppLocalizableViewData(filePropRoot, aDocument, filePropIter->iViewData);
+	}
+}
+
+/**
+ * Writes Class TAppLocalizableAttribute Info in XML. 
+ */
+
+void CXmlGenerator::WriteAppLocalizableAttribute	
+					( 
+						DOMElement* aRootElement, DOMDocument* aDocument, 
+						const std::vector<AppLocalizableAttribute>& aAppLocalizableAttribute 
+					)
+{
+	std::vector<AppLocalizableAttribute>::const_iterator filePropIter;
+	for( filePropIter = aAppLocalizableAttribute.begin() ; filePropIter != aAppLocalizableAttribute.end() ; ++filePropIter)
+	{
+		DOMElement* filePropRoot = AddTag(aRootElement, aDocument, KLocalizableAttribute);
+		DOMElement* filePropValueRoot = AddTag(filePropRoot, aDocument, KLocalizableAttribute_Value);
+
+		XercesString value = WStringToXercesString(filePropIter->iValue);
+		if(filePropIter->iIsIntValue)
+		{
+			AddChildElement(filePropValueRoot, aDocument, KLocalizableAttribute_IntValue, value.c_str());
+		}
+		else
+		{
+			AddChildElement(filePropValueRoot, aDocument, KLocalizableAttribute_StrValue, value.c_str());
+		}
+		XercesString name = WStringToXercesString(filePropIter->iName);
+		filePropRoot->setAttribute(KName, name.c_str());
+	}
+}
+
+/**
+ * Writes Class TAppViewData Info in XML. 
+ */
+
+ void CXmlGenerator::WriteAppLocalizableViewData 
+					 ( 
+						 DOMElement* aRootElement, DOMDocument* aDocument, 
+						 const std::vector<AppViewData>& aAppViewData 
+					 )
+ {
+	 std::vector<AppViewData>::const_iterator filePropIter;
+	 for( filePropIter = aAppViewData.begin() ; filePropIter != aAppViewData.end() ; ++filePropIter)
+	 {
+		 DOMElement* filePropRoot = AddTag(aRootElement, aDocument, KViewData);
+		 WriteAppLocalizableViewDataAttributes(filePropRoot, aDocument, filePropIter->iViewDataAttributes);
+	 }
+ }
+
+ void CXmlGenerator::WriteAppLocalizableViewDataAttributes 
+					 ( 
+						 DOMElement* aRootElement, DOMDocument* aDocument, 
+						 const std::vector<AppViewDataAttributes>& aAppViewDataAttributes 
+					 )
+ {
+	 std::vector<AppViewDataAttributes>::const_iterator filePropIter;
+	 for( filePropIter = aAppViewDataAttributes.begin() ; filePropIter != aAppViewDataAttributes.end() ; ++filePropIter)
+	 {
+		 DOMElement* filePropRoot = AddTag(aRootElement, aDocument, KViewDataAttribute);
+		 DOMElement* filePropValueRoot = AddTag(filePropRoot, aDocument, KViewData_Value);
+ 
+		 XercesString value = WStringToXercesString(filePropIter->iValue);
+		 if(filePropIter->iIsIntValue)
+		 {
+			 AddChildElement(filePropValueRoot, aDocument, KViewData_IntValue, value.c_str());
+
+		 }
+		 else
+		 {
+			 AddChildElement(filePropValueRoot, aDocument, KViewData_StrValue, value.c_str());
+
+		 }
+
+		 XercesString name = WStringToXercesString(filePropIter->iName);
+		 filePropRoot->setAttribute(KName, name.c_str());
+	 }
+ }
+
+/**
+ * Writes Class TAppServiceInfo Info in XML. 
+ */
+
+void CXmlGenerator::WriteAppServiceInfo	
+					( 
+						DOMElement* aRootElement, DOMDocument* aDocument, 
+						const std::vector<AppServiceInfo>& aAppServiceInfo,
+						const std::vector<AppOpaqueDataType>& aAppOpaqueData 
+					)
+{
+	std::vector<AppServiceInfo>::const_iterator filePropIter;
+	std::vector<AppOpaqueDataType>::const_iterator fileAppPropIter;
+	for( filePropIter = aAppServiceInfo.begin() ; filePropIter != aAppServiceInfo.end() ; ++filePropIter)
+	{
+		DOMElement* filePropRoot = AddTag(aRootElement, aDocument, KApplicationServiceInfo);
+	
+		XercesString uid = IntegerToXercesString(filePropIter->iUid);
+		AddChildElement(filePropRoot,aDocument, KUid, uid.c_str());
+
+
+		for( fileAppPropIter = aAppOpaqueData.begin() ; fileAppPropIter != aAppOpaqueData.end() ; ++fileAppPropIter)
+		{
+			if(filePropIter->iUid == fileAppPropIter->iServiceUid)
+			{
+				if(!fileAppPropIter->iOpaqueData.empty())
+				{
+					DOMElement* filePropValueRoot = AddTag(filePropRoot, aDocument, KServiceOpaqueData);
+
+					XercesString opaqueData = WStringToXercesString(fileAppPropIter->iOpaqueData);
+					AddChildElement(filePropValueRoot,aDocument, KServiceData, opaqueData.c_str());
+
+					XercesString locale = IntegerToXercesString(fileAppPropIter->iLocale);
+					AddChildElement(filePropValueRoot,aDocument, KServiceOpaqueLocale, locale.c_str());
+				}
+			}
+		}
+
+		WriteAppDataType(filePropRoot, aDocument, filePropIter->iDataType);
+	}
+}
+
+/**
+ * Writes Class TDataType Info in XML. 
+ */
+
+void CXmlGenerator::WriteAppDataType	
+					( 
+						DOMElement* aRootElement, DOMDocument* aDocument, 
+						const std::vector<AppDataType>& aAppDataType 
+					)
+{
+	std::vector<AppDataType>::const_iterator filePropIter;
+	for( filePropIter = aAppDataType.begin() ; filePropIter != aAppDataType.end() ; ++filePropIter)
+	{
+		DOMElement* filePropRoot = AddTag(aRootElement, aDocument, KApplicationDataType);
+
+		XercesString priority = IntegerToXercesString(filePropIter->iPriority);
+		AddChildElement(filePropRoot,aDocument, KPriority, priority.c_str());
+
+		XercesString type = WStringToXercesString(filePropIter->iType);
+		AddChildElement(filePropRoot, aDocument, KType, type.c_str());
+	}
+}
+
+/**
+ * Writes Class TApplicationAttribute Info in XML. 
+ */
+
+void CXmlGenerator::WriteAppAttributes	
+					( 
+						DOMElement* aRootElement, DOMDocument* aDocument, 
+						const std::vector<ApplicationAttribute>& aAppAttributes 
+					)
+{
+	std::vector<ApplicationAttribute>::const_iterator filePropIter;
+	for( filePropIter = aAppAttributes.begin() ; filePropIter != aAppAttributes.end() ; ++filePropIter)
+	{
+		DOMElement* filePropRoot = AddTag(aRootElement, aDocument, KApplicationAttribute);
+
+		DOMElement* filePropValueRoot = AddTag(filePropRoot, aDocument, KApplicationAttribute_Value);
+
+		XercesString value = WStringToXercesString(filePropIter->iValue);
+		if(filePropIter->iIsIntValue)
+		{
+			AddChildElement(filePropValueRoot, aDocument, KApplicationAttribute_IntValue, value.c_str());
+		}
+		else
+		{
+			AddChildElement(filePropValueRoot, aDocument, KApplicationAttribute_StrValue, value.c_str());
+		}
+
+		XercesString name = WStringToXercesString(filePropIter->iName);
+		filePropRoot->setAttribute(KName, name.c_str());
+	}
+}
+
+/**
+ * Writes Class TApplicationProperty Info in XML. 
+ */
+void CXmlGenerator::WriteAppProperty	
+					( 
+						DOMElement* aRootElement, DOMDocument* aDocument, 
+						const std::vector<AppProperty>& aAppProperty 
+					)
+{
+	std::vector<AppProperty>::const_iterator filePropIter;
+	for( filePropIter = aAppProperty.begin() ; filePropIter != aAppProperty.end() ; ++filePropIter)
+	{
+		DOMElement* filePropRoot = AddTag(aRootElement, aDocument, KApplicationProperty);
+
+		XercesString locale = IntegerToXercesString(filePropIter->iLocale);
+		AddChildElement(filePropRoot,aDocument, KLocale, locale.c_str());
+
+		XercesString name = WStringToXercesString(filePropIter->iName);
+		AddChildElement(filePropRoot,aDocument, KName, name.c_str());
+
+		XercesString serviceUid = IntegerToXercesString(filePropIter->iServiceUid);
+		AddChildElement(filePropRoot,aDocument, KServiceUid, serviceUid.c_str());
+
+		XercesString intValue = IntegerToXercesString(filePropIter->iIntValue);
+		AddChildElement(filePropRoot,aDocument, KIntValue, intValue.c_str());
+
+		XercesString strValue = WStringToXercesString(filePropIter->iStrValue);
+		AddChildElement(filePropRoot, aDocument, KStrValue, strValue.c_str());
+
+		XercesString isStr8Bit = IntegerToXercesString(filePropIter->iIsStr8Bit);
+		AddChildElement(filePropRoot,aDocument, KIsStr8Bit, isStr8Bit.c_str());
+	}
+}
+
 void CXmlGenerator::WriteComponentFiles	
 					( 
 						DOMElement* aRootElement, DOMDocument* aDocument, 
@@ -269,11 +716,11 @@
 	std::vector<ComponentFile>::const_iterator compFileIter;
 	for( compFileIter = aComponentFiles.begin() ; compFileIter != aComponentFiles.end() ; ++compFileIter)
 		{
-		DOMElement* compFileRoot = AddTag(aRootElement, aDocument, L"ComponentFile");
+		DOMElement* compFileRoot = AddTag(aRootElement, aDocument, KComponentFile);
 
 		WriteFileProperties(compFileRoot, aDocument, compFileIter->iFileProperties);
 		
-		compFileRoot->setAttribute(L"Location", compFileIter->iLocation.c_str());
+		compFileRoot->setAttribute(KLocation, compFileIter->Location().c_str());
 		}
 	}
 
@@ -286,18 +733,18 @@
 	std::vector<FileProperty>::const_iterator filePropIter;
 	for( filePropIter = aFileProperties.begin() ; filePropIter != aFileProperties.end() ; ++filePropIter)
 		{
-		DOMElement* filePropRoot = AddTag(aRootElement, aDocument, L"FileProperty");
-		DOMElement* filePropValueRoot = AddTag(filePropRoot, aDocument, L"FileProperty_Value");
+		DOMElement* filePropRoot = AddTag(aRootElement, aDocument, KFileProperty);
+		DOMElement* filePropValueRoot = AddTag(filePropRoot, aDocument, KFileProperty_Value);
 
 		if(filePropIter->iIsIntValue)
 			{
-			AddChildElement(filePropValueRoot, aDocument, L"FileProperty_IntValue", filePropIter->iValue.c_str());
+			AddChildElement(filePropValueRoot, aDocument, KFileProperty_IntValue, filePropIter->Value().c_str());
 			}
 		else
 			{
-			AddChildElement(filePropValueRoot, aDocument, L"FileProperty_StrValue", filePropIter->iValue.c_str());
+			AddChildElement(filePropValueRoot, aDocument, KFileProperty_StrValue, filePropIter->Value().c_str());
 			}
-		filePropRoot->setAttribute(L"Name", filePropIter->iName.c_str());
+		filePropRoot->setAttribute(KName, filePropIter->Name().c_str());
 		}
 	}
 
@@ -315,20 +762,20 @@
 	std::vector<ComponentDependencyDetail> componentDependencyList = aComponentDependency.iComponentDependencyList;
 	std::vector<ComponentDependencyDetail>::const_iterator compDepIter;
 
-	DOMElement* compDepRoot = AddTag(aRootElement, aDocument, L"ComponentDependency");
+	DOMElement* compDepRoot = AddTag(aRootElement, aDocument, KComponentDependency);
 
 	for( compDepIter = componentDependencyList.begin() ; compDepIter != componentDependencyList.end() ; ++compDepIter)
 		{
-		DOMElement* compDepListRoot = AddTag( compDepRoot, aDocument, L"DependencyList" );
-		AddChildElement( compDepListRoot, aDocument, L"SupplierId", compDepIter->iSupplierId.c_str() );
-		AddChildElement( compDepListRoot, aDocument, L"FromVersion", compDepIter->iFromVersion.c_str() );
-		AddChildElement( compDepListRoot, aDocument, L"ToVersion", compDepIter->iToVersion.c_str() );
+		DOMElement* compDepListRoot = AddTag( compDepRoot, aDocument, KDependencyList );
+		AddChildElement( compDepListRoot, aDocument, KSupplierId, compDepIter->SupplierId().c_str() );
+		AddChildElement( compDepListRoot, aDocument, KFromVersion, compDepIter->FromVersion().c_str() );
+		AddChildElement( compDepListRoot, aDocument, KToVersion, compDepIter->ToVersion().c_str() );
 		}
-	compDepRoot->setAttribute(L"DependentId", aComponentDependency.iDependentId.c_str());
+	compDepRoot->setAttribute(KDependentId, aComponentDependency.DependentId().c_str());
 	}
 
 
-void CXmlGenerator::AddChildElement( DOMElement* aRootElement, DOMDocument* aDocument, const wchar_t* aElementName, const wchar_t* aTextValue )
+void CXmlGenerator::AddChildElement( DOMElement* aRootElement, DOMDocument* aDocument, const XMLCh* aElementName, const XMLCh* aTextValue )
 	{
 	DOMElement*  element = aDocument->createElement(aElementName);
 	aRootElement->appendChild(element);
@@ -337,7 +784,7 @@
 	element->appendChild(textValue);
 	}
 
-DOMElement* CXmlGenerator::AddTag( DOMElement* aRootElement, DOMDocument* aDocument, const wchar_t* aTagName)
+DOMElement* CXmlGenerator::AddTag( DOMElement* aRootElement, DOMDocument* aDocument, const XMLCh* aTagName)
 	{
 	DOMElement*  tagName = aDocument->createElement(aTagName);
 	aRootElement->appendChild(tagName);
@@ -351,6 +798,8 @@
  */
 bool SchemaDomErrorHandler::handleError(const DOMError& domError)
 	{
-	const XMLCh* message = domError.getMessage();
+	const XMLCh* message = domError.getMessage();	
 	return false;
 	}
+
+
--- a/secureswitools/swisistools/source/interpretsislib/xmlgenerator.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/interpretsislib/xmlgenerator.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -38,7 +38,20 @@
 #include <xercesc/sax/ErrorHandler.hpp>
 #include <xercesc/dom/DOM.hpp>
 
+#include "parameterlist.h"
 
+using namespace std;
+
+#define AppRegistrationInfo XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo
+#define ApplicationAttribute XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppAttribute 
+#define AppDataType XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TDataType 
+#define AppServiceInfo XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo 
+#define AppLocalizableInfo XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo
+#define AppLocalizableAttribute XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TLocalizableAttribute 
+#define AppViewData XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData 
+#define AppViewDataAttributes XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData::TViewDataAttributes 
+#define AppProperty XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty 
+#define AppOpaqueDataType XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TOpaqueDataType
 #define ComponentLocalizable XmlDetails::TScrPreProvisionDetail::TComponentLocalizable
 #define ComponentProperty XmlDetails::TScrPreProvisionDetail::TComponentProperty
 #define ComponentFile XmlDetails::TScrPreProvisionDetail::TComponentFile
@@ -46,6 +59,7 @@
 #define ComponentDependency XmlDetails::TScrPreProvisionDetail::TComponentDependency
 #define ComponentDependencyDetail XmlDetails::TScrPreProvisionDetail::TComponentDependency::TComponentDependencyDetail
 
+
 class CXmlGenerator
 	{
 
@@ -64,14 +78,18 @@
 		/**
 		 * Retrieves software environment details, from the supplied xml file. 
 		 */
-		void WritePreProvisionDetails(const std::wstring aXmlFileName, const XmlDetails::TScrPreProvisionDetail& aPreProvisionDetail);
+		void WritePreProvisionDetails(const std::wstring aXmlFileName, 
+											const XmlDetails::TScrPreProvisionDetail& aPreProvisionDetail,
+											int& aRomApplication
+										);
 		
 		
 	private:	
 
 		void WriteComponent(	XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
 								XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
-								const XmlDetails::TScrPreProvisionDetail::TComponent& aComponent
+								const XmlDetails::TScrPreProvisionDetail::TComponent& aComponent,
+								int& aRomApplication
 							);
 
 		void WriteComponentVersion	(	
@@ -94,6 +112,71 @@
 						const std::vector<ComponentProperty>& aComponentProperties 
 					);
 
+		void WriteAppRegInfo	
+					( 
+						XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
+						XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
+						const std::vector<AppRegistrationInfo>& aAppRegInfo 
+					);
+
+
+		void WriteAppAttributes	
+					( 
+						XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
+						XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
+						const std::vector<ApplicationAttribute>& aAppAttributes 
+					);
+
+		void WriteAppProperty	
+					( 
+						XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
+						XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
+						const std::vector<AppProperty>& aAppProperty 
+					);
+
+		void WriteAppServiceInfo 
+					( 
+						XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
+						XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
+						const std::vector<AppServiceInfo>& aAppServiceInfo,
+						const std::vector<AppOpaqueDataType>& aAppOpaqueData
+					);
+
+		void WriteAppDataType 
+					( 
+						XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
+						XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
+						const std::vector<AppDataType>& aAppDataType 
+					);
+
+		void WriteAppLocalizableInfo 
+					( 
+						XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
+						XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
+						const std::vector<AppLocalizableInfo>& aAppLocalizableInfo 
+					);
+
+		void WriteAppLocalizableAttribute 
+					( 
+						XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
+						XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
+						const std::vector<AppLocalizableAttribute>& aAppLocalizableAttribute 
+					);
+
+		void WriteAppLocalizableViewData 
+					( 
+						XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
+						XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
+						const std::vector<AppViewData>& aAppViewData 
+					);
+
+		void WriteAppLocalizableViewDataAttributes 
+					 ( 
+ 						XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
+						XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
+						const std::vector<AppViewDataAttributes>& aAppViewDataAttributes 
+					 );
+
 		void WriteComponentFiles	
 					( 
 						XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
@@ -118,19 +201,18 @@
 		void AddChildElement(	
 								XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
 								XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
-								const wchar_t* aElementName, 
-								const wchar_t* aTextValue 
+								const XMLCh* aElementName, 
+								const XMLCh* aTextValue 
 							);
 
 		XERCES_CPP_NAMESPACE::DOMElement* AddTag	
 							(	
 								XERCES_CPP_NAMESPACE::DOMElement* aRootElement, 
 								XERCES_CPP_NAMESPACE::DOMDocument* aDocument, 
-								const wchar_t* aTagName
+								const XMLCh* aTagName
 							);
 
 		void SetWriterFeatures(XERCES_CPP_NAMESPACE::DOMWriter* aDomWriter);
-
 	};
 
 
--- a/secureswitools/swisistools/source/makesis/makesis.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/makesis/makesis.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
--- a/secureswitools/swisistools/source/makesis/makesis.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/makesis/makesis.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
--- a/secureswitools/swisistools/source/makesislib/packageparser.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/makesislib/packageparser.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/apaid.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,75 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: class TAppServiceInfo represents the Service Info
+// structure of Resource File. Member Function of this Class are defined. 
+//
+
+/** 
+* @file apaid.cpp
+*
+* @internalComponent
+* @released
+*/
+
+#include "apaid.h"
+#include <cassert>
+
+//
+// class TAppServiceInfo
+//
+
+//Default Constructor for class TAppServiceInfo
+TAppServiceInfo::TAppServiceInfo()
+	: iUid(NullUid),
+	  iDataTypes(0)
+{
+}
+
+//Destructor for class TAppServiceInfo
+TAppServiceInfo::~TAppServiceInfo()
+{
+}
+
+//Constructor for class TAppServiceInfo
+TAppServiceInfo::TAppServiceInfo(TUid aUid, 
+	std::vector<TDataTypeWithPriority*> aDataTypes)
+	: iUid(aUid),
+	  iDataTypes(aDataTypes)
+{
+}
+
+//Releases the data member
+void TAppServiceInfo::Release()
+{
+
+	if(0 < iDataTypes.size())
+		iDataTypes.clear();
+}
+
+/*
+* Member function of Class TAppServiceInfo to return private member
+* variable iUid
+*/
+TUid TAppServiceInfo::GetUid()
+{
+	return iUid;
+}
+
+/*
+* Member function of Class TAppServiceInfo to return private member
+* variable iDataTypes
+*/
+std::vector<TDataTypeWithPriority*> TAppServiceInfo::GetDataType()
+{
+	return iDataTypes;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/apaid.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,114 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// apaid.h - Application capabilities.
+//
+/** 
+* @file apaid.h
+*
+* @internalComponent
+* @released
+*/
+
+#ifndef __APAID_H__
+#define __APAID_H__
+#include<iostream>
+#include<vector>
+#include "commontypes.h"
+using namespace std;
+#include "apmstd.h"		// class TDataTypeWithPriority
+#include "uidtype.h"
+
+class TAppCapability
+{
+public:
+	/** Defines an application's support for embeddability. */
+	enum TEmbeddability {
+		/** An application cannot be embedded. */
+		ENotEmbeddable=0,
+		/** An application can be run embedded or standalone and can read/write embedded document-content. */
+		EEmbeddable=1,
+		/** An application can only be run embedded and can read/write embedded document-content. */
+		EEmbeddableOnly=2,
+		/** An application can be run embedded or standalone and cannot read/write embedded document-content. */
+		EEmbeddableUiOrStandAlone=5,
+		/** An application can only be run embedded and cannot read/write embedded document-content. */
+		EEmbeddableUiNotStandAlone=6 };
+	/** Defines an application's attributes as a set of bit flags. */
+	enum TCapabilityAttribute
+		{
+		/** This functionality is deprecated from v9.5 onwards.
+		@deprecated
+		*/
+		EBuiltAsDll			= 0x00000001,
+		/** If set, the application provides control panel functionality. */
+		EControlPanelItem	= 0x00000002,
+		/** If set, the application is not a native executable, and hence the "path" and "extension" (as well as the "name") must be provided in the app_file field of the APP_REGISTRATION_INFO resource. */
+		ENonNative			= 0x00000004
+		};
+public:
+	/** Indicates the extent to which the application can be embedded. */
+	TEmbeddability iEmbeddability;
+	/** Indicates whether the application is document-based and supports being asked 
+	to create a new file. */
+	TUint iSupportsNewFile;
+	/** Indicates whether the existence of the application should be advertised to the 
+	user. If this is set to ETrue, the application does not appear on the Extras 
+	Bar (or equivalent). */
+	TUint iAppIsHidden;  // not shown in the Shell etc.
+	/** Allows the application to be launched in the foreground (when set to EFalse) 
+	or in the background (when set to ETrue). */
+	TUint iLaunchInBackground; // Series 60 extension to allow apps to be launched in the background
+	/** Stores the application's logical group name. */
+	TAppGroupName iGroupName; // Series 60 extension to allow apps to be categorized according a logical group name, e.g. 'games'
+
+	/** Indicates the application attributes. One or more values from TCapabilityAttribute may be specified. */
+	TUint iAttributes;
+private:
+	// expandable class - add new members to the end, add them to the end of int/ext also, and increment the version no.
+	// default value for all data members must be 0
+	enum { EVersion=4 };
+private:
+	TInt iTAppCapability_Reserved1;
+	};
+
+
+/** Application service information.
+
+Encapsulates a service UID and associated opaque data.
+
+An instance of this class provides information about
+a specific implementation of the service identified by
+the encapsulated service UID.
+
+@publishedPartner
+@released
+*/
+
+class TAppServiceInfo
+	{
+public:
+	 TAppServiceInfo();
+	 ~TAppServiceInfo();
+	 TAppServiceInfo(TUid aUid, std::vector<TDataTypeWithPriority*> aDataTypes);
+	 void Release();
+	 TUid GetUid();
+	 std::vector<TDataTypeWithPriority*> GetDataType();
+	 
+private:
+	TUid iUid;
+	std::vector<TDataTypeWithPriority*> iDataTypes;
+	TInt iTAppServiceInfo;
+	};
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/aplappinforeader.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1383 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// aplappinforeader.cpp
+//
+/** 
+* @file aplappinforeader.cpp
+*
+* @internalComponent
+* @released
+*/
+
+#include <stdlib.h> 
+#include <iostream.h> 
+#include <string> 
+#include "aplappinforeader.h"
+#include "barsc2.h"
+#include "barsread2.h"
+#include <cassert>
+#include "parse.h"
+#include "uidtype.h"
+#include "stringutils.h"
+#include "is_utils.h"
+#include "apsecutils.h"
+#include "parse.h"
+
+using namespace std;
+
+const TUint KNonLocalized = 0;
+
+#define REINTERPRET_CAST(type,exp) (reinterpret_cast<type>(exp))
+
+const TUint KResourceOffsetMask = 0xFFFFF000;
+
+#ifdef __LINUX__
+std::string KAppBinaryPathAndExtension("/sys/bin/.exe");
+#else
+std::string KAppBinaryPathAndExtension("\\sys\\bin\\.exe");
+#endif
+
+const TInt KAppRegistrationInfoResourceId = 1;
+
+// The 2nd UID that defines a resource file as being an application registration resource file.
+const TUid KUidAppRegistrationFile = {0x101F8021};
+
+/**
+@internalTechnology
+*/
+std::string KAppResourceFileExtension(".rsc");
+
+#ifdef __LINUX__
+std::string KLitPathForUntrustedRegistrationResourceFiles("/private/10003a3f/import/apps/");
+#else
+std::string KLitPathForUntrustedRegistrationResourceFiles("\\private\\10003a3f\\import\\apps\\");
+#endif
+
+//
+// CAppInfoReader
+//
+
+// The behaviour of the Take-methods of this class is a little non-standard, as it
+// transfers ownership of the pointer owned by a CAppInfoReader derived object
+// to the caller. This means that this function is only designed to be called once.
+// Doing things this way provides a small performance optimisation by enabling the caller
+// to delete it's stored pointer, and replace it with one returned by this function,
+// instead of having to copy the object (copying could be expensive for the methods
+// of this class that need to return arrays).
+
+
+CAppInfoReader* CAppInfoReader::NewL(const std::string& aRegistrationFileName, TUid aAppUid, const std::string& aLocalizeFilePath)
+{
+	CAppInfoReader* self = new CAppInfoReader(aRegistrationFileName, aAppUid, aLocalizeFilePath);
+	if(NULL == self)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+	return self;
+}
+
+CAppInfoReader::CAppInfoReader(const std::string& aRegistrationFileName, TUid aAppUid, const std::string& aLocalizeFilePath) :
+	iAppUid(aAppUid),
+	iDefaultScreenNumber(0),
+	iNonMbmIconFile(false),
+	iApplicationLanguage(ELangNone),
+	iIndexOfFirstOpenService(KErrNotFound),
+	iRegistrationFileName(aRegistrationFileName),
+	iDrivePath(aLocalizeFilePath)
+	{
+
+	 	iAppBinaryFullName = NULL;;
+		iCapability.iGroupName = NULL;
+		iCaption = NULL;
+		iShortCaption = NULL;
+		iViewDataArray = NULL;;
+		iOwnedFileArray = NULL;
+		iIconFileName = NULL;
+	 	iLocalisableResourceFileName = NULL;
+		iServiceArray = NULL;
+	}
+
+CAppInfoReader::~CAppInfoReader()
+{
+	delete iAppBinaryFullName;
+	delete iCaption;
+	delete iShortCaption;
+	if(iViewDataArray)
+		iViewDataArray->clear();
+	delete iViewDataArray;
+	if(iOwnedFileArray)
+		iOwnedFileArray->clear();
+	delete iOwnedFileArray;
+	delete iIconFileName;
+	delete iLocalisableResourceFileName;
+	if(iServiceArray)
+		iServiceArray->clear();
+	delete iServiceArray;
+	if(iAppLocalizableInfo.size())
+		iAppLocalizableInfo.clear();
+	if(iOpaqueDataArray.size())
+		iOpaqueDataArray.clear();
+}
+
+Ptr16* CAppInfoReader::AppBinaryFullName()
+{
+	Ptr16* fileName = iAppBinaryFullName;
+	return fileName;
+}
+
+TUidType CAppInfoReader::AppBinaryUidType() const
+{
+	return iAppBinaryUidType;
+}
+
+TUid CAppInfoReader::AppUid() const
+{
+	return iAppUid;
+}
+
+void CAppInfoReader::Capability(TAppCapability& aCapabilityBuf) const
+{
+	memcpy(&aCapabilityBuf, &iCapability,sizeof(TAppCapability));
+}
+
+TUint CAppInfoReader::DefaultScreenNumber() const
+{
+	return iDefaultScreenNumber;
+}
+
+Ptr16* CAppInfoReader::Caption()
+{
+	Ptr16* caption = iCaption;
+	iCaption = NULL; // ownership transferred to caller
+	return caption;
+}
+
+Ptr16* CAppInfoReader::ShortCaption()
+{
+	Ptr16* shortCaption = iShortCaption;
+	iShortCaption = NULL; // ownership transferred to caller
+	return shortCaption;
+}
+
+TInt CAppInfoReader::NumOfAppIcons() const
+{
+	return iNumOfAppIcons;
+}
+
+std::vector<CAppViewData*>* CAppInfoReader::Views()
+{
+	std::vector<CAppViewData*>* viewDataArray = iViewDataArray;
+	iViewDataArray = NULL; // ownership transferred to caller
+	return viewDataArray;
+}
+
+std::vector<CAppLocalizableInfo*> CAppInfoReader::LocalizableInfo()
+{
+	std::vector<CAppLocalizableInfo*> AppLocalizableInfo = iAppLocalizableInfo;
+	return AppLocalizableInfo;
+}
+
+std::vector<CAppLocalOpaqueDataInfo*> CAppInfoReader::GetOpaqueDataArray()
+{
+	std::vector<CAppLocalOpaqueDataInfo*> opaqueDataArray = iOpaqueDataArray;
+	return opaqueDataArray;
+}
+
+std::vector<Ptr16*>* CAppInfoReader::OwnedFiles()
+{
+	std::vector<Ptr16*>* ownedFileArray = iOwnedFileArray;
+	iOwnedFileArray = NULL; // ownership transferred to caller
+	return ownedFileArray;
+}
+
+Ptr16* CAppInfoReader::IconFileName()
+{
+	Ptr16* iconFileName = iIconFileName;
+	iIconFileName = NULL; // ownership transferred to caller
+	ConvertToPlatformSpecificPath(iconFileName->GetPtr(), iconFileName->GetLength());
+	return iconFileName;
+}
+
+TBool CAppInfoReader::NonMbmIconFile() const
+{
+	return iNonMbmIconFile;
+}
+
+Ptr16* CAppInfoReader::LocalisableResourceFileName()
+{
+	Ptr16* localisableResourceFileName = iLocalisableResourceFileName;
+	iLocalisableResourceFileName = NULL; // ownership transferred to caller
+	return localisableResourceFileName;
+}
+
+TLanguage CAppInfoReader::AppLanguage() const
+{
+	return iApplicationLanguage;
+}
+
+std::vector<TAppServiceInfo*>* CAppInfoReader::ServiceArray(TInt& aIndexOfFirstOpenService)
+{
+	std::vector<TAppServiceInfo*>* serviceArray = iServiceArray;
+	iServiceArray = NULL;
+	aIndexOfFirstOpenService = iIndexOfFirstOpenService;
+	return serviceArray;
+}
+
+TBool CAppInfoReader::ReadL(const std::vector<FileDescription*>& aFileDescription, std::string& aRomPath, int aInRom )
+{
+		TUint fileOffset = 0;
+		TInt fileLength = 0;
+		TUid firstUid(KExecutableImageUidVal);
+		TUid middleUid(KUidApp);
+		TInt err;
+		TInt LocalizeError = 0;
+		TUid reguid;
+		CResourceFile* registrationFile = new CResourceFile(iRegistrationFileName, fileOffset, fileLength);
+		if(NULL==registrationFile)
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+	
+		if(registrationFile)
+		{
+			iAppUid = registrationFile->ReadAppUidL();
+			if(!iAppUid.GetUid())
+			{
+				std::string errMsg= "Failed : Invalid Resource File. Null Application UID.";
+				throw CResourceFileException(errMsg);
+			}
+
+			reguid = registrationFile->ReadFileUidL();
+			if(reguid.GetUid()!= KUidAppRegistrationResourceFile)
+			{
+				std::string errMsg= "Failed : Invalid Resource File. UID2 is not defined.";
+				throw CResourceFileException(errMsg);
+			}
+		}
+	
+		// set the TUidType for the app binary
+		// cannot read the TEntry info from the app binary because it's in \sys\bin
+		iAppBinaryUidType = TUidType(firstUid, middleUid, iAppUid); 
+		
+		RResourceReader resourceReader;
+		resourceReader.OpenL(registrationFile, KAppRegistrationInfoResourceId); 
+	
+		TUint localisableResourceId = 1; // only initialising this here to keep the compiler happy, as it's concerned that the variable might be used without having been initialised. The variable should be initialised later, before it's used
+	
+		try {
+				ReadMandatoryInfoL(resourceReader);
+			
+				err = ReadNonLocalisableInfoL(resourceReader, localisableResourceId);
+	
+				if (!err)
+				{	
+					err = ReadNonLocalisableOptionalInfoL(resourceReader, registrationFile);
+				}
+			}
+			catch(const CResourceFileException& aObject)
+			{
+			
+				delete registrationFile;
+				cout<< aObject.GetMsg()<< endl;
+				return EFalse; // might have read something, but failed to setup enough info to make it worthwhile trying to read any more
+			}
+		
+		TBool useDefaultIcons = ETrue;
+	
+		if(iLocalisableResourceFileName)
+		{
+			std::string localizeFileName = Ptr16ToString(iLocalisableResourceFileName);
+
+			std::vector<FileDescription*>::const_iterator filedesIter;
+			//std::wstring iFile;
+			std::wstring iLocalizeFile;
+			//std::string aFileName;
+			std::string iLocalFilePath;
+
+			std::string iLocalFileExt(".r");
+			
+			for(filedesIter = aFileDescription.begin() ; filedesIter != aFileDescription.end(); ++filedesIter)
+			{
+				iLocalizeFile = (*filedesIter)->GetLocalFile();
+			
+				iLocalFilePath = wstring2string(iLocalizeFile);
+
+				if((iLocalFilePath.find(localizeFileName,0) == std::wstring::npos) 
+						|| (iLocalFilePath.find(iLocalFileExt,0) == std::wstring::npos))
+					continue;
+
+				size_t found;
+				std::string Locale;
+				int iLocale = 0;
+			
+				found=iLocalFilePath.find_last_of(".");
+				if(found)
+					Locale = iLocalFilePath.substr(found+2);
+
+				iLocale = atoi(Locale.c_str()); 
+				if(!iLocale)
+					iLocale = KNonLocalized;
+			
+				CResourceFile* tlocalisableFile = NULL;
+
+				if(aInRom)
+				{
+					std::string LocalFile = FullNameWithoutDrive(iLocalFilePath);
+					iLocalFilePath = aRomPath + LocalFile;
+				}
+
+				try {
+					// open the localisable resource file	
+					tlocalisableFile = new CResourceFile(iLocalFilePath, 0, 0);
+					if(NULL==tlocalisableFile)
+					{
+						std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+						throw CResourceFileException(errMsg);
+					}
+	
+					if (!err)
+					{
+						if (tlocalisableFile && (localisableResourceId & KResourceOffsetMask))
+							tlocalisableFile->ConfirmSignatureL();
+
+						err = ReadLocalisableInfoLoopL(*tlocalisableFile, localisableResourceId, useDefaultIcons, iLocale);
+					}
+						
+					delete tlocalisableFile;
+				}
+				catch(const CResourceFileException& aObject)
+				{
+					LocalizeError = 1;
+					aObject.Display();
+					delete tlocalisableFile;
+				}
+			}
+		}
+	
+	// if anything went wrong, we tell the caller that the read was unsuccessful. Some
+	// of the members of this class may contain data which is not complete, but this doesn't matter
+	// because the caller shouldn't try to access the data if the read was unsuccessful
+	TBool readSuccessful = 0;
+	if(!LocalizeError)
+		readSuccessful = (err == KErrNone);
+	delete registrationFile;
+	return readSuccessful;
+}
+
+
+// reads as much info as it can
+// at least captions and icons must be setup on return from this method (using defaults if necessary)
+TBool CAppInfoReader::ReadL()
+{
+	TUint fileOffset = 0;
+	TInt fileLength = 0;
+	TUid firstUid(KExecutableImageUidVal);
+	TUid middleUid(KUidApp);
+	TInt err;
+	TInt LocalizeError = 0;
+	TUid reguid;
+	
+	CResourceFile* registrationFile = new CResourceFile(iRegistrationFileName, fileOffset, fileLength);
+	if(NULL==registrationFile)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+
+	if(registrationFile)
+	{
+		iAppUid = registrationFile->ReadAppUidL();
+		if(!iAppUid.GetUid())
+		{
+			std::string errMsg= "Failed : Invalid Resource File. Null Application UID.";
+			throw CResourceFileException(errMsg);
+		}
+
+		reguid = registrationFile->ReadFileUidL();
+		if(reguid.GetUid()!= KUidAppRegistrationResourceFile)
+		{
+			std::string errMsg= "Failed : Invalid Resource File. UID2 is not defined.";
+			throw CResourceFileException(errMsg);
+		}
+	}
+
+	// set the TUidType for the app binary
+	// cannot read the TEntry info from the app binary because it's in \sys\bin
+	iAppBinaryUidType = TUidType(firstUid, middleUid, iAppUid);	
+	
+	RResourceReader	resourceReader;
+	resourceReader.OpenL(registrationFile, KAppRegistrationInfoResourceId);	
+
+	TUint localisableResourceId = 1; // only initialising this here to keep the compiler happy, as it's concerned that the variable might be used without having been initialised. The variable should be initialised later, before it's used
+
+	try {
+			ReadMandatoryInfoL(resourceReader);
+		
+			err = ReadNonLocalisableInfoL(resourceReader, localisableResourceId);
+
+			if (!err)
+			{	
+				err = ReadNonLocalisableOptionalInfoL(resourceReader, registrationFile);
+			}
+		}
+		catch(const CResourceFileException& aObject)
+		{
+		
+			delete registrationFile;
+			cout<< aObject.GetMsg()<< endl;
+			return EFalse; // might have read something, but failed to setup enough info to make it worthwhile trying to read any more
+		}
+	
+	TBool useDefaultIcons = ETrue;
+
+	if(iLocalisableResourceFileName)
+	{
+		std::string localizeFileName = Ptr16ToString(iLocalisableResourceFileName);
+		std::string folder;
+		std::string file;
+		size_t found;
+		std::string iLocalPath(iDrivePath);
+
+		#ifdef __LINUX__
+	  	found=localizeFileName.find_last_of("//");
+		#else
+		found=localizeFileName.find_last_of("/\\");
+		#endif
+
+	  	if(found)
+	  		folder = localizeFileName.substr(0,found);
+	  	else
+		{
+			#ifdef __LINUX__
+			folder.assign("/");	  		
+			#else
+			folder.assign("\\");
+			#endif
+		}
+	  	
+	  	file = localizeFileName.substr(found+1);
+		file.append(".");
+		
+		iLocalPath.append(folder);
+				
+		std::wstring iFilePath = string2wstring(iLocalPath);
+		std::wstring iFileName = string2wstring(file);
+
+		#ifdef __LINUX__
+		iLocalPath.append("/");
+		#else
+		iLocalPath.append("\\");
+		#endif
+		
+		std::list<std::wstring> locDirs;
+		GetDirContents( iFilePath, locDirs );
+
+	 	std::list<std::wstring>::iterator curr = locDirs.begin();
+		for( curr = locDirs.begin(); curr != locDirs.end(); ++curr )
+		{
+			if (curr->find(iFileName,0) != std::wstring::npos)
+			{
+			    std::string fName;
+				std::string sAbsolutePath;
+				sAbsolutePath.assign(iLocalPath);
+			 	fName = wstring2string( *curr );
+
+			   	sAbsolutePath.append(fName);
+				//cout << sAbsolutePath<<endl;
+				
+				std::string Locale;
+				int iLocale = 0;
+		
+				found=fName.rfind(".r");
+				if(found!=string::npos)
+					Locale = fName.substr(found+2);
+				else
+					continue;
+
+				iLocale = atoi(Locale.c_str()); 
+			    if(!iLocale)
+					iLocale = KNonLocalized;
+				   
+				CResourceFile* tlocalisableFile = NULL;
+
+				try {
+					// open the localisable resource file	
+					tlocalisableFile = new CResourceFile(sAbsolutePath, 0, 0);
+					if(NULL==tlocalisableFile)
+					{
+						std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+						throw CResourceFileException(errMsg);
+					}
+
+					if (!err)
+					{
+						if (tlocalisableFile && (localisableResourceId & KResourceOffsetMask))
+							tlocalisableFile->ConfirmSignatureL();
+
+						err = ReadLocalisableInfoLoopL(*tlocalisableFile, localisableResourceId, useDefaultIcons, iLocale);
+					}
+					
+					delete tlocalisableFile;
+				}
+				catch(const CResourceFileException& aObject)
+				{
+					LocalizeError = 1;
+					aObject.Display();
+					delete tlocalisableFile;
+				}
+			}
+		}
+	}
+
+	// if anything went wrong, we tell the caller that the read was unsuccessful. Some
+	// of the members of this class may contain data which is not complete, but this doesn't matter
+	// because the caller shouldn't try to access the data if the read was unsuccessful
+	TBool readSuccessful = 0;
+	if(!LocalizeError)
+		readSuccessful = (err == KErrNone);
+	delete registrationFile;
+	return readSuccessful;
+}
+
+// this method reads the minimum information required to register an app
+// if this fails (Leaves), we say the read has been unsuccessful
+
+void CAppInfoReader::ReadMandatoryInfoL(RResourceReader& aResourceReader)
+{
+	aResourceReader.ReadUint32L(); // skip over LONG reserved_long
+	aResourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+
+	// read LTEXT app_file
+	PtrC16* appFile = aResourceReader.ReadTPtrCL();
+
+	if(NULL==appFile)
+	{
+		std::string errMsg= "Failed : Invalid Resource File Name. Application File Name is Mandatory.";
+		throw CResourceFileException(errMsg);
+	}
+
+	ConvertToPlatformSpecificPath(appFile->iPtr, appFile->iMaxLength);
+
+	TInt err=0;
+	// this object gets used for 2 purposes: first to check that a ParsePtrC can be created over "appFile" without it panicking, and second to construct iAppBinaryFullName
+	err = FindWild(appFile); // do this before creating a TParsePtrC, since TParsePtrC's constructor panics if it fails (which would provide an easy way for malware to kill the Apparc server)
+
+	if(err==1)
+	{
+		std::string errMsg= "Failed : Invalid Resource File Name : Wild Characters Present.";
+		throw CResourceFileException(errMsg);
+	}
+		
+	ParsePtrC appFileParser(appFile);
+
+	// read LONG attributes
+	iCapability.iAttributes = aResourceReader.ReadUint32L();
+
+
+	if(!appFileParser.NamePresent())
+	{
+		appFileParser.SetToNull();	//Pointer pointing to the content of Resource file. To be destroyed by RResourceReader.
+		std::string errMsg= "Failed : Invalid Resource File Name : Name Not Present.";
+		throw CResourceFileException(errMsg);
+	}
+		
+	std::string appNameWithoutExtension(appFileParser.Name());
+	std::string registrationFileDrive;
+	
+	string::size_type index = iRegistrationFileName.find( ':' );
+	if( index != string::npos )
+		registrationFileDrive.assign(iRegistrationFileName, index-1, 2);
+
+	if (iCapability.iAttributes & TAppCapability::ENonNative)
+	{
+		if (!appFileParser.PathPresent() || !appFileParser.ExtPresent())
+		{
+			appFileParser.SetToNull();	//Pointer pointing to the content of Resource file. To be destroyed by RResourceReader.
+			std::string errMsg= "Failed : Invalid Resource File Name : Path And Extension Not Present.";
+			throw CResourceFileException(errMsg);
+		}
+
+		std::string appFilePath(appFileParser.Path());
+		std::string appFileNameAndExt(appFileParser.NameAndExt());
+
+		if (appFileParser.DrivePresent())
+			registrationFileDrive = appFileParser.Drive();
+
+		err = FindWild(registrationFileDrive, appFilePath, appFileNameAndExt);
+		if(err==1)
+		{
+			appFileParser.SetToNull();	//Pointer pointing to the content of Resource file. To be destroyed by RResourceReader.
+			std::string errMsg= "Failed : Invalid Resource File Name : Wild Characters Present.";
+			throw CResourceFileException(errMsg);
+		}
+	}
+	else if (iCapability.iAttributes & TAppCapability::EBuiltAsDll)
+	{
+		appFileParser.SetToNull();	//Pointer pointing to the content of Resource file. To be destroyed by RResourceReader.
+		std::string errMsg= "Failed : legacy dll-style app.";
+		throw CResourceFileException(errMsg);
+	}
+	else
+	{
+		// exe-style app
+		err = FindWild(registrationFileDrive, KAppBinaryPathAndExtension, appNameWithoutExtension);
+		if(err==1)
+		{
+			appFileParser.SetToNull();	//Pointer pointing to the content of Resource file. To be destroyed by RResourceReader.
+			std::string errMsg= "Failed : Invalid Resource File Name : Wild Characters Present.";
+			throw CResourceFileException(errMsg);
+		}
+	}
+
+	iAppBinaryFullName = new Ptr16(appFileParser.FullName()->iMaxLength);
+	if(NULL==iAppBinaryFullName || NULL == iAppBinaryFullName->GetPtr())
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+	iAppBinaryFullName->UpdateLength(appFileParser.FullName()->iMaxLength);
+	BufCpy(iAppBinaryFullName->GetPtr(),appFileParser.FullName()->iPtr,appFileParser.FullName()->iMaxLength);
+
+	appFileParser.SetToNull();	//Pointer pointing to the content of Resource file. To be destroyed by RResourceReader.
+	appFile->iPtr = NULL;		//Pointer pointing to the content of Resource file. To be destroyed by RResourceReader.
+	delete appFile;
+}
+
+/*
+* Converts PtrC16* to Ptr16* datatype. Creates a Buffer copy.
+*/
+
+Ptr16* CAppInfoReader::CreateFullIconFileNameL(const PtrC16* aIconFileName) const
+{
+	Ptr16* filename = NULL;
+
+	if (aIconFileName->iMaxLength == 0)
+		return NULL;
+
+	/*
+	 * aIconFileName may contain a valid string in some format (for eg. URI format) other than path to a regular file on disk
+	 * and that can be a mbm or non-mbm file. Such a filename will be reported as invalid filename by iFs.IsValidName() method. 
+	 * aIconFileName will be returned since it is a valid string. 
+	 */	
+	
+	ParsePtrC parsePtr(aIconFileName);
+
+	if (parsePtr.IsWild() || !parsePtr.PathPresent() || !parsePtr.NamePresent())
+		return NULL;
+
+	filename = new Ptr16(aIconFileName->iMaxLength);
+	if(NULL==filename || NULL == filename->GetPtr())
+	{
+		parsePtr.SetToNull();
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+	filename->UpdateLength(aIconFileName->iMaxLength);
+	BufCpy(filename->GetPtr(),aIconFileName->iPtr,aIconFileName->iMaxLength);
+
+	std::wstring iFileName = Ptr16ToWstring(filename);
+	std::wstring iFilePath = string2wstring(iDrivePath);
+	std::string fullnamewitoutdrive = parsePtr.FullNameWithoutDrive();
+	std::wstring iFilename1 = string2wstring(fullnamewitoutdrive);
+
+	if(parsePtr.DrivePresent())
+		iFilePath.append(iFilename1);
+	else
+		iFilePath.append(iFileName);
+	
+	// check for fully qualified icon filename
+	if (parsePtr.DrivePresent() && FileExists(iFileName))
+	{
+		parsePtr.SetToNull();
+		return filename;	
+	}
+	else
+	{
+		// check for icon file on same drive as localisable resource file
+		std::string localisableResourceFileDrive = parsePtr.Drive();
+		TInt ret = FindWild(aIconFileName);
+		if(ret == 0 && FileExists(iFilePath))
+		{
+			parsePtr.SetToNull();
+			return filename;
+		}
+		else
+		{
+			ParsePtrC parsePtr_reg(iRegistrationFileName);
+			std::string registrationFileDrive = parsePtr_reg.Drive();
+
+			if(registrationFileDrive.compare(localisableResourceFileDrive))
+			{
+				// check for icon file on same drive as registration file
+				std::string Registrationfilepath(parsePtr_reg.FullPath());
+				Registrationfilepath.append(parsePtr.NameAndExt());
+				std::wstring iRegFilePath = string2wstring(Registrationfilepath);
+				std::string iconfile = parsePtr.StrName();
+					
+				ret = FindWild(registrationFileDrive,iconfile,localisableResourceFileDrive);
+				if(ret == 0 && FileExists(iRegFilePath))
+				{
+					parsePtr_reg.SetToNull();
+					parsePtr.SetToNull();
+					return filename;
+				}
+			}
+			parsePtr_reg.SetToNull();
+		}
+	}
+
+	parsePtr.SetToNull();	//To Avoid double delete in destructor. To be destroyed by RResourceReader.
+							//Same as iIconFileName data member of class CAppInfoReader. Destructor will delete.
+	return NULL;					// Or to be deleted by calling function.
+}
+
+/*
+* Read Localizable resource file.
+@ Param: aResourceFile - Localizable file Handler.
+@ Param: aResourceId of Localizable file.
+*/
+
+TInt CAppInfoReader::ReadLocalisableInfoLoopL(CResourceFile& aResourceFile, TUint aResourceId, TBool& aUseDefaultIcons, TInt& iLocale)
+{
+	CAppLocalizableInfo* localinfo = CAppLocalizableInfo::NewL(iRegistrationFileName, iDrivePath);
+	RResourceReader resourceReader;
+	resourceReader.OpenL(&aResourceFile, aResourceId); //original
+
+	localinfo->SetLocale(iLocale);
+
+	resourceReader.ReadUint32L(); // skip over LONG reserved_long
+	resourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+
+	// read LTEXT short_caption
+	Ptr16* shortCaption = resourceReader.ReadHBufCL();
+	localinfo->SetShortCaption(shortCaption);
+
+	resourceReader.ReadUint32L(); // skip over LONG reserved_long
+	resourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+
+	// read LTEXT caption
+	Ptr16* caption = resourceReader.ReadHBufCL();
+	if(NULL == caption)
+	{
+		Ptr16* appBinaryFullName = CAppInfoReader::AppBinaryFullName();
+
+		caption = new Ptr16(appBinaryFullName->GetLength());
+		if(NULL == caption)
+			{
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+		BufCpy(caption->GetPtr(),appBinaryFullName->GetPtr(),appBinaryFullName->GetLength());
+		caption->UpdateLength(appBinaryFullName->GetLength());
+	}
+	localinfo->SetCaption(caption);
+	
+	// read WORD number_of_icons
+	const TInt numOfIcons = resourceReader.ReadInt16L();
+	localinfo->SetNumOfAppIcons(numOfIcons);
+
+	// read LTEXT icon_file
+	iIconFileName = NULL;
+	PtrC16* iconFile = resourceReader.ReadTPtrCL();
+
+	if(NULL != iconFile)
+	{
+		ConvertToPlatformSpecificPath(iconFile->iPtr, iconFile->iMaxLength);
+		Ptr16*	iconFileName = CreateFullIconFileNameL(iconFile);
+		
+		if (iconFileName)
+		{
+			localinfo->SetIconFileName(iconFileName);
+			aUseDefaultIcons = EFalse;
+			iNonMbmIconFile = ETrue;
+			iconFile->iPtr = NULL;
+			delete iconFile;
+		}
+		else
+		{
+			iconFile->iPtr = NULL;
+			delete iconFile;
+			std::string errMsg= "Failed : Icon File not present in Device.";
+			throw CResourceFileException(errMsg);
+		}
+	}
+
+	//Read ViewData  of Localizable file.
+	localinfo->ReadViewDataL(resourceReader);
+
+	// Read LTEXT group_name
+	// If a localised group name has been specified, it overrides
+	// The group name (if any), specified by APP_REGISTRATION_INFO
+
+	PtrC16* groupName = resourceReader.ReadTPtrCL();
+
+	if(NULL != groupName)
+	{
+		if (groupName->iMaxLength > 0)
+		{
+			Ptr16* gName = new Ptr16(groupName->iMaxLength);
+			if(NULL==gName || NULL == gName->GetPtr())
+			{
+				delete groupName;
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+			gName->UpdateLength(groupName->iMaxLength);
+			BufCpy(gName->GetPtr(),groupName->iPtr,groupName->iMaxLength);
+			localinfo->SetGroupName(gName);
+			groupName->iPtr = NULL; //To Avoid double delete in destructor. To be destroyed by RResourceReader.
+		}
+	}
+
+	iAppLocalizableInfo.push_back(localinfo);
+	delete groupName;
+	return 0;
+}
+
+void CAppInfoReader::ReadOpaqueDataL(TUint aResourceId, CResourceFile* aRegistrationFile, TUint32 aServiceUid)
+{
+	Ptr8* opaqueData = NULL;
+	int iLocale = 0;
+
+	if (aResourceId == 0)
+	{
+		opaqueData = new Ptr8(1);
+		if(NULL==opaqueData || NULL==opaqueData->GetPtr())
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+		*(opaqueData->GetPtr()) = 0;
+		opaqueData->UpdateLength(1);
+	}
+	else
+	{
+		if (aResourceId & KResourceOffsetMask)
+		{
+			if(iLocalisableResourceFileName)
+			{
+				std::string localizeFileName = Ptr16ToString(iLocalisableResourceFileName);
+				std::string folder;
+				std::string file;
+				size_t found;
+				size_t find;
+				std::string iLocalPath(iDrivePath);
+		
+				#ifdef __LINUX__
+				found=localizeFileName.find_last_of("//");
+				#else
+				found=localizeFileName.find_last_of("/\\");
+				#endif
+
+				if(found)
+					folder = localizeFileName.substr(0,found);
+				else
+				{
+					#ifdef __LINUX__
+					folder.assign("/");
+					#else
+					folder.assign("\\");
+					#endif					
+				}
+			
+				file = localizeFileName.substr(found+1);
+				file.append(".");
+			
+				iLocalPath.append(folder);
+					
+				std::wstring iFilePath = string2wstring(iLocalPath);
+				std::wstring iFileName = string2wstring(file);
+				#ifdef __LINUX__
+				iLocalPath.append("/");
+				#else
+				iLocalPath.append("\\");
+				#endif
+
+		
+				std::list<std::wstring> locDirs;
+				GetDirContents( iFilePath, locDirs );
+			
+				std::list<std::wstring>::iterator curr = locDirs.begin();
+				for( curr = locDirs.begin(); curr != locDirs.end(); ++curr )
+				{
+					if (curr->find(iFileName,0) != std::wstring::npos)
+					{
+						std::string fName;
+						std::string sAbsolutePath;
+						std::string Locale;
+						sAbsolutePath.assign(iLocalPath);
+						fName = wstring2string( *curr );
+
+						find=fName.rfind("backup");
+						if(find != string::npos)
+							continue;
+
+						sAbsolutePath.append(fName);										
+						found=fName.find_last_of(".");
+						if(found)
+							Locale = fName.substr(found+2);
+			
+						iLocale = atoi(Locale.c_str()); 
+						if(!iLocale)
+							iLocale = KNonLocalized;
+					   
+						CResourceFile* tlocalisableFile = NULL;
+			
+						// open the localisable resource file	
+						tlocalisableFile = new CResourceFile(sAbsolutePath, 0, 0);
+						if(NULL==tlocalisableFile)
+						{
+							std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+							throw CResourceFileException(errMsg);
+						}
+			
+						if (tlocalisableFile)
+						{
+							if (tlocalisableFile && (aResourceId & KResourceOffsetMask))
+								tlocalisableFile->ConfirmSignatureL();
+
+							opaqueData = tlocalisableFile->AllocReadL(aResourceId);
+
+							if(opaqueData)
+							{
+								const TUint8* currentPtr=opaqueData->GetPtr();//TUint8 pointer is used
+									
+								//resource string length is limited to 255 characters max.
+								const TInt unicodeLength=*currentPtr;
+		
+								++currentPtr;
+								if (unicodeLength!=0)
+								{
+									if (REINTERPRET_CAST(TUint,currentPtr)&0x1)
+									{			
+										// The resource compiler puts out a padding byte (arbitrarily 0xab)
+										// to ensure the alignment of Unicode strings within each resource.
+										if(*currentPtr!=0xab)
+										{
+											std::string errMsg= "Failed : Trying to access invalid registrationFile";
+											throw CResourceFileException(errMsg);
+										}
+										++currentPtr;
+									}
+								}
+								
+								opaqueData->SetPtr(currentPtr);
+								opaqueData->ForceLength(unicodeLength*2);
+							}
+							else
+							{
+								opaqueData = new Ptr8(1);
+								if(NULL==opaqueData || NULL==opaqueData->GetPtr())
+								{
+									std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+									throw CResourceFileException(errMsg);
+								}
+								*(opaqueData->GetPtr()) = 0;
+								opaqueData->SetLength(1);
+							}
+
+							CAppLocalOpaqueDataInfo* opaqueInfo = CAppLocalOpaqueDataInfo::NewL(iLocale, aServiceUid, opaqueData);
+							iOpaqueDataArray.push_back(opaqueInfo);
+							
+						}
+						delete tlocalisableFile;
+					}
+				}
+			}
+		}
+		else
+		{	// expecting opaque data to be in the registration file
+			assert(aRegistrationFile);
+			opaqueData = aRegistrationFile->AllocReadL(aResourceId); //lint !e613 Suppress ossible use of null pointer
+
+			const TUint8* currentPtr=opaqueData->GetPtr();//TUint8 pointer is used
+
+			//resource string length is limited to 255 characters max.
+			const TInt unicodeLength=*currentPtr;
+		
+			++currentPtr;
+			if (unicodeLength!=0)
+			{
+				if (REINTERPRET_CAST(TUint,currentPtr)&0x1)
+				{
+					// The resource compiler puts out a padding byte (arbitrarily 0xab)
+					// to ensure the alignment of Unicode strings within each resource.
+					if(*currentPtr!=0xab)
+					{
+						std::string errMsg= "Failed : Trying to access invalid registrationFile";
+						throw CResourceFileException(errMsg);
+					}
+					++currentPtr;
+				}
+			}
+
+			opaqueData->SetPtr(currentPtr);
+			opaqueData->SetLength(unicodeLength*2);
+
+			CAppLocalOpaqueDataInfo* opaqueInfo = CAppLocalOpaqueDataInfo::NewL(iLocale, aServiceUid, opaqueData);
+			iOpaqueDataArray.push_back(opaqueInfo);
+		}
+	}
+}
+
+TInt CAppInfoReader::ReadNonLocalisableOptionalInfoL(RResourceReader& aResourceReader, CResourceFile* aRegistrationFile)	
+{
+	// read LEN WORD STRUCT service_list[]
+	TInt serviceCount = 0;
+	TInt err = 0;
+	// service information was not present in the first release of the registration file
+	// APP_REGISTRATION_INFO resource struct
+	// this method must not leave if the registration file doesn't contain service information, so the
+	// following call to ReadInt16L is trapped to ensure this method doesn't leave just because
+	// there is no more information in the resource to read (KErrEof)
+
+	serviceCount = aResourceReader.ReadInt16L();
+
+	if (!iServiceArray && serviceCount > 0)
+	{
+		iServiceArray = new std::vector<TAppServiceInfo*>;
+
+		if(NULL==iServiceArray){
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+	}
+	
+	while (serviceCount--)
+	{
+		const TUid serviceUid = {aResourceReader.ReadUint32L()};
+		
+		if ((serviceUid == KOpenServiceUid) && (iOpenServiceIsLegacy))
+		{
+			assert(iIndexOfFirstOpenService == 0);
+			// If we found an Open service in the SERVICE_INFO declaration
+			// then we must ignore the legacy one
+			if ( 0 < iServiceArray->size() )
+			{
+				(*iServiceArray)[0]->Release();
+				iServiceArray->erase(iServiceArray->begin());
+			}
+			iOpenServiceIsLegacy = EFalse;
+			iIndexOfFirstOpenService = KErrNotFound;
+		}
+		
+		std::vector<TDataTypeWithPriority*>* mimeTypesSupported = new std::vector<TDataTypeWithPriority*>;
+		if(NULL==mimeTypesSupported)
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+
+		ReadMimeTypesSupportedL(aResourceReader, *mimeTypesSupported);
+		
+		const TUint resourceId = aResourceReader.ReadUint32L();
+
+		ReadOpaqueDataL(resourceId, aRegistrationFile, serviceUid.iUid);
+
+		TAppServiceInfo* serviceInfo = new TAppServiceInfo(serviceUid, *mimeTypesSupported);
+		if(NULL==serviceInfo)
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+
+		iServiceArray->push_back(serviceInfo);
+
+		if ((serviceUid == KOpenServiceUid) && (iIndexOfFirstOpenService < 0))
+			iIndexOfFirstOpenService = iServiceArray->size() - 1;
+	}
+
+	// read LLINK opaque_data
+	const TUint resourceId = aResourceReader.ReadUint32L();
+
+	ReadOpaqueDataL(resourceId, aRegistrationFile, 0);
+
+	return 0;
+}
+
+TInt CAppInfoReader::ReadNonLocalisableInfoL(RResourceReader& aResourceReader, TUint& aLocalisableResourceId)
+{
+	// read LTEXT localisable_resource_file
+	PtrC16*	localisableResourceFileName = aResourceReader.ReadTPtrCL();
+
+	if(NULL == localisableResourceFileName)
+	{
+		iLocalisableResourceFileName = NULL;
+	}
+	else
+	{
+		ConvertToPlatformSpecificPath(localisableResourceFileName->iPtr, localisableResourceFileName->iMaxLength);
+		if (localisableResourceFileName->iMaxLength > 0 )
+		{
+			ParsePtrC parsePtr(localisableResourceFileName);
+
+			if(parsePtr.IsValidName())
+			{
+				iLocalisableResourceFileName = NULL;
+				parsePtr.SetToNull();	//To Avoid double Delete in destructor.
+				std::string errMsg= "Failed : Invalid localisable Resource File Name";
+				throw CResourceFileException(errMsg);
+			}
+			
+			std::string registrationFileDrive;
+	
+			string::size_type index = iRegistrationFileName.find( ':' );
+			if( index != string::npos )
+				registrationFileDrive.assign(iRegistrationFileName, index-1, 2);
+
+			TInt err=0;
+			std::string sTemp = parsePtr.StrName();
+
+			err = FindWild(registrationFileDrive, KAppResourceFileExtension, sTemp);
+			if(err==1)
+			{
+				std::string errMsg= "Failed : Invalid drive for Registration File";
+				parsePtr.SetToNull();	//To Avoid double Delete in destructor.
+				throw CResourceFileException(errMsg);
+			}
+
+			iLocalisableResourceFileName = new Ptr16(parsePtr.FullName()->iMaxLength);
+			if(NULL==iLocalisableResourceFileName || NULL==iLocalisableResourceFileName->GetPtr())
+			{
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				parsePtr.SetToNull();	//To Avoid double Delete in destructor.
+				throw CResourceFileException(errMsg);
+			}
+
+			iLocalisableResourceFileName->UpdateLength(parsePtr.FullName()->iMaxLength);
+			BufCpy(iLocalisableResourceFileName->GetPtr(),parsePtr.FullName()->iPtr,parsePtr.FullName()->iMaxLength);
+
+			parsePtr.SetToNull();	//To Avoid double Delete in destructor.
+		}
+	}
+	// read LONG localisable_resource_id
+	aLocalisableResourceId = aResourceReader.ReadUint32L();
+
+	iCapability.iAppIsHidden = aResourceReader.ReadInt8L();
+	iCapability.iEmbeddability = static_cast<TAppCapability::TEmbeddability>(aResourceReader.ReadInt8L());
+	iCapability.iSupportsNewFile = aResourceReader.ReadInt8L();
+	iCapability.iLaunchInBackground = aResourceReader.ReadInt8L();
+
+	PtrC16* iTemp = aResourceReader.ReadTPtrCL();
+
+	if(NULL==iTemp || NULL==iTemp->iPtr)
+		iCapability.iGroupName = NULL;
+	else 
+	{
+		iCapability.iGroupName = new Ptr16(iTemp->iMaxLength);
+		if(NULL==iCapability.iGroupName || NULL == iCapability.iGroupName->GetPtr())
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+		iCapability.iGroupName->UpdateLength(iTemp->iMaxLength);
+		BufCpy(iCapability.iGroupName->GetPtr(), iTemp->iPtr, iTemp->iMaxLength );
+	}
+	// read BYTE default_screen_number
+	iDefaultScreenNumber = aResourceReader.ReadUint8L();
+ 	
+	//read the datatypes
+	std::vector<TDataTypeWithPriority*>* datatypes = new std::vector<TDataTypeWithPriority*>;
+	if(NULL==datatypes)
+	{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+	}
+
+	ReadMimeTypesSupportedL(aResourceReader, *datatypes);
+	//dataTypes is deleted if 
+	// A. There are no legacy datatypes
+	// B. Control panel plugin apps are not allowed to register MIME types.If they happen to have any, these datatypes should be ignored.
+	iServiceArray = NULL;
+	if ((iCapability.iAttributes & TAppCapability::EControlPanelItem) || (datatypes->size() == 0))
+		delete datatypes;
+	else
+	{
+		iServiceArray = new std::vector<TAppServiceInfo*>;
+		if(NULL==iServiceArray)
+		{
+				delete datatypes;
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+		}
+
+		Ptr8* opaqueData = new Ptr8(1);
+		if(NULL==opaqueData || NULL==opaqueData->GetPtr())
+		{
+			delete datatypes;
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+		*(opaqueData->GetPtr()) = 0;
+		opaqueData->UpdateLength(0);
+
+		TAppServiceInfo* serviceInfo = new TAppServiceInfo(KOpenServiceUid, *datatypes);
+		if(NULL==serviceInfo)
+		{
+			delete datatypes;
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+		iServiceArray->push_back(serviceInfo);
+		iIndexOfFirstOpenService = 0;
+		iOpenServiceIsLegacy = ETrue;
+	}
+
+	// read LEN WORD STRUCT file_ownership_list[]
+	const TInt fileOwnershipArraySize = aResourceReader.ReadInt16L();
+
+	iOwnedFileArray = NULL;
+	if (fileOwnershipArraySize > 0)
+	{
+		iOwnedFileArray = new std::vector<Ptr16*>;
+		if(NULL==iOwnedFileArray)
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+	}
+	for (TInt i=0; i < fileOwnershipArraySize; i++)
+	{
+		PtrC16* fileNamePtr_temp = aResourceReader.ReadTPtrCL();
+
+		if(NULL != fileNamePtr_temp)
+		{
+			ConvertToPlatformSpecificPath(fileNamePtr_temp->iPtr, fileNamePtr_temp->iMaxLength);
+			Ptr16* fileNamePtr = new Ptr16(fileNamePtr_temp->iMaxLength);
+			if(NULL==fileNamePtr || NULL==fileNamePtr->GetPtr())
+			{
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+			fileNamePtr->UpdateLength(fileNamePtr_temp->iMaxLength);			  
+			BufCpy(fileNamePtr->GetPtr(),fileNamePtr_temp->iPtr,fileNamePtr_temp->iMaxLength);
+
+			iOwnedFileArray->push_back(fileNamePtr);
+		}
+		else
+		{
+			Ptr16* fileNamePtr = NULL;
+			iOwnedFileArray->push_back(fileNamePtr);
+		}
+	}
+
+	return 0;
+}
+
+// This method can be used to check whether app has a WriteDeviceCap 
+// and its sid is trusted
+void CAppInfoReader::ReadAppSecurityInfo()
+{
+    if (!iSecurityInfoHasBeenRead)
+    {
+		if(NULL==iAppBinaryFullName)
+		{
+			std::string errMsg= "Failed : Invalid Application Name";
+			throw CResourceFileException(errMsg);
+		}
+
+		Ptr16* iBinaryName = new Ptr16(iAppBinaryFullName->GetLength());
+		if(NULL == iBinaryName)
+		{
+				std::string errMsg= "Failed : Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+		}
+		BufCpy(iBinaryName->GetPtr(),iAppBinaryFullName->GetPtr(),iAppBinaryFullName->GetLength());
+		iBinaryName->UpdateLength(iAppBinaryFullName->GetLength());
+
+		const TInt err = CApaSecurityUtils::CheckAppSecurity( *iBinaryName, 
+                                        iHasWriteDeviceDataCap, iIsSidTrusted, iDrivePath);
+
+		delete iBinaryName;
+	
+        if ( KErrNone != err )
+        {
+            iHasWriteDeviceDataCap = EFalse;
+            iIsSidTrusted = EFalse;
+        }
+
+        iSecurityInfoHasBeenRead = ETrue;   
+     }
+}
+
+
+void CAppInfoReader::ReadMimeTypesSupportedL(RResourceReader& aResourceReader,
+	std::vector<TDataTypeWithPriority*>& aMimeTypesSupported)
+{
+	// read LEN WORD STRUCT datatype_list[]
+	const TInt dataTypeArraySize = aResourceReader.ReadInt16L();
+	if (dataTypeArraySize <= 0)
+		return;
+	
+	for (TInt i=0; i < dataTypeArraySize; i++)
+	{
+		TDataTypePriority priority = static_cast<TDataTypePriority>(aResourceReader.ReadInt32L());
+
+		//Check for data priority of UnTrusted apps however the trusted apps will not have any restrictions 
+		//over the data priority.	
+		//If an untrusted app has write device data capability (i.e. still has priority = KDataTypePrioritySystem),
+		//do not restrict to KDataTypeUnTrustedPriorityThreshold
+		if (priority > KDataTypeUnTrustedPriorityThreshold || priority == KDataTypePrioritySystem )
+	    {
+		    ReadAppSecurityInfo();
+
+            if (priority == KDataTypePrioritySystem)
+            {
+                // Check that the app has capability WriteDeviceData
+                if (!iHasWriteDeviceDataCap)
+                    priority = KDataTypePriorityNormal;
+            }
+            else
+            {
+                //data priority for UnTrusted apps would be capped if it is greater than the threshold priority i.e, KMaxTInt16.
+                TInt match=iRegistrationFileName.find(KLitPathForUntrustedRegistrationResourceFiles);
+                if (match != KErrNotFound && !iIsSidTrusted) 
+                {
+                    //if registration file is in import directory and 
+                    //its sid is in unprotected range - downgrade the priority
+                    priority = KDataTypeUnTrustedPriorityThreshold;	
+                }
+             }
+	    }
+
+		PtrC8* dataTypePtr  = aResourceReader.ReadTPtrC8L();
+
+		if(NULL != dataTypePtr)
+		{
+			TDataType* dataType = new TDataType(dataTypePtr);
+			if(NULL==dataType)
+			{
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+			TDataTypeWithPriority* dataTypeWithPriority = new TDataTypeWithPriority(*dataType, priority);
+			if(NULL==dataTypeWithPriority)
+			{	
+				delete dataType;
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+			aMimeTypesSupported.push_back(dataTypeWithPriority);
+		}
+		else
+		{
+			TDataTypeWithPriority* dataTypeWithPriority = NULL;
+			aMimeTypesSupported.push_back(dataTypeWithPriority);
+		}
+	}
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/aplappinforeader.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,111 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// aplappinforeader.h
+//
+/** 
+* @file aplappinforeader.h
+*
+* @internalComponent
+* @released
+*/
+#ifndef __APLAPPINFOREADER_H__
+#define __APLAPPINFOREADER_H__
+
+
+#include "apaid.h"
+#include <vector>
+#include "apmstd.h"
+#include "barsc2.h"
+#include "barsread2.h"
+#include "e32lang.h"
+#include "aplapplistitem.h"
+#include "filedescription.h"
+
+using namespace std;
+
+/**
+Reads application information from a combination of registration file,
+optional localisable resource file and optional icon file.
+
+@internalComponent
+*/
+class CAppInfoReader
+	{
+public:
+	static CAppInfoReader* NewL(const std::string& aRegistrationFileName, TUid aAppUid, const std::string& aLocalizeFilePath);
+	TBool ReadL();
+	TBool ReadL(const std::vector<FileDescription*>& aFileDescription, std::string& aRomPath, int aInRom);
+	~CAppInfoReader();
+public:
+	Ptr16* AppBinaryFullName();
+	TUidType AppBinaryUidType() const;
+	TUid AppUid() const;
+	void Capability(TAppCapability& aCapabilityBuf) const;
+	TUint DefaultScreenNumber() const;
+	std::vector<CAppViewData*>* Views();
+	std::vector<CAppLocalizableInfo*> LocalizableInfo();
+	std::vector<CAppLocalOpaqueDataInfo*> GetOpaqueDataArray();
+	std::vector<Ptr16*>* OwnedFiles();
+	
+	Ptr16* Caption();
+	Ptr16* ShortCaption();
+	TInt NumOfAppIcons() const;
+	Ptr16* IconFileName();
+	TBool NonMbmIconFile() const;
+	
+	Ptr16* LocalisableResourceFileName();
+	TLanguage AppLanguage() const;
+	std::vector<TAppServiceInfo*>* ServiceArray(TInt& aIndexOfFirstOpenService);
+	Ptr16* CreateFullIconFileNameL(const PtrC16* aIconFileName) const;
+	
+private:
+	CAppInfoReader(const std::string& aRegistrationFileName, TUid aAppUid, const std::string& aLocalizeFilePath);
+	void ReadMimeTypesSupportedL(RResourceReader& aResourceReader, std::vector<TDataTypeWithPriority*>& aMimeTypesSupported);
+	void ReadMandatoryInfoL(RResourceReader& aResourceReader);
+	TInt ReadNonLocalisableInfoL(RResourceReader& aResourceReader, TUint& aLocalisableResourceId);
+	TInt ReadNonLocalisableOptionalInfoL(RResourceReader& aResourceReader, CResourceFile* aRegistrationFile);
+	TInt ReadLocalisableInfoLoopL(CResourceFile& aResourceFile, TUint aResourceId, TBool& aUseDefaultIcons, TInt& iLocale);
+	void ReadOpaqueDataL(TUint aResourceId, CResourceFile* aRegistrationFile, TUint32 aServiceUid);
+	void ReadAppSecurityInfo();
+		
+private:
+	TUid iAppUid;
+	Ptr16* iAppBinaryFullName;
+	TUidType iAppBinaryUidType;
+	TAppCapability iCapability;
+	TUint iDefaultScreenNumber;
+	Ptr16* iCaption;
+	Ptr16* iShortCaption;
+	TInt iNumOfAppIcons;
+	std::vector<CAppViewData*>* iViewDataArray;
+	std::vector<Ptr16*>* iOwnedFileArray;
+	Ptr16* iIconFileName;
+	TBool iNonMbmIconFile; // ETrue if icon filename is not an MBM file, however, EFalse does not necessarily mean it is an MBM file
+	Ptr16* iLocalisableResourceFileName;
+	TLanguage iApplicationLanguage;
+	std::vector<TAppServiceInfo*>* iServiceArray;
+	TInt iIndexOfFirstOpenService;
+	TBool iOpenServiceIsLegacy;
+	std::vector<CAppLocalOpaqueDataInfo*> iOpaqueDataArray;
+private:
+	const std::string& iRegistrationFileName;
+	const std::string& iDrivePath;
+	std::vector<CAppLocalizableInfo*> iAppLocalizableInfo;
+	TBool iHasWriteDeviceDataCap;
+    TBool iIsSidTrusted;
+    // This flag is used to determine if app security info was allready read
+    TBool iSecurityInfoHasBeenRead;
+	};
+
+#endif	// __APLAPPINFOREADER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/aplapplistitem.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,468 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// aplapplistitem.cpp
+//
+/** 
+* @file aplapplistitem.cpp
+*
+* @internalComponent
+* @released
+*/
+#include "aplapplistitem.h"
+#include "barsc2.h"
+#include "parse.h"
+#include "uidtype.h"
+
+//
+// class CAppLocalOpaqueDataInfo
+//
+
+//Default Constructor for class CAppLocalOpaqueDataInfo
+CAppLocalOpaqueDataInfo::CAppLocalOpaqueDataInfo()
+	: iServiceUid(0),
+	  iLocale(0),
+	  iOpaqueData(NULL)
+{
+}
+
+//Destructor for class CAppLocalOpaqueDataInfo
+CAppLocalOpaqueDataInfo::~CAppLocalOpaqueDataInfo()
+{
+	delete iOpaqueData;
+}
+
+//Constructor for class CAppLocalOpaqueDataInfo
+CAppLocalOpaqueDataInfo::CAppLocalOpaqueDataInfo(TInt aLocale, TUint32 aServiceUid, Ptr8* aOpaqueData)
+	: iLocale(aLocale),
+	  iServiceUid(aServiceUid),
+	  iOpaqueData(aOpaqueData)
+{
+	assert(iOpaqueData);
+}
+
+
+CAppLocalOpaqueDataInfo* CAppLocalOpaqueDataInfo::NewL(TInt aLocale, TUint32 aServiceUid, Ptr8* aOpaqueData)
+{
+	CAppLocalOpaqueDataInfo* self=new CAppLocalOpaqueDataInfo(aLocale, aServiceUid, aOpaqueData);
+	if(NULL==self)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+
+	return self;	
+}
+
+
+Ptr8* CAppLocalOpaqueDataInfo::GetOpaqueData()
+{
+	return iOpaqueData;
+}
+
+TUint32 CAppLocalOpaqueDataInfo::GetServiceUid()
+{
+	return iServiceUid;
+}
+
+TInt CAppLocalOpaqueDataInfo::GetLocale()
+{
+	return iLocale;
+}
+
+//
+// Class CAppLocalizableInfo
+//
+CAppLocalizableInfo::~CAppLocalizableInfo()
+{
+	delete iCaption;
+	delete iShortCaption;
+	delete iGroupName;
+	delete iIconFileName;
+	if(iViewDataArray)
+		iViewDataArray->clear();
+	delete iViewDataArray;
+	delete iOpaqueData;
+}
+
+CAppLocalizableInfo::CAppLocalizableInfo(const std::string& aRegistrationFileName, const std::string& aLocalizeFilePath)
+	: iNumOfAppIcons(0),
+	iRegistrationFilePath(aRegistrationFileName),
+	iLocalPath(aLocalizeFilePath)
+{
+	iCaption = NULL;
+	iShortCaption = NULL;
+	iIconFileName = NULL;
+	iGroupName = NULL;
+	iViewDataArray = NULL;
+	iOpaqueData = NULL;
+}
+
+CAppLocalizableInfo* CAppLocalizableInfo::NewL(const std::string& aRegistrationFileName,const std::string& aLocalizeFilePath)
+{
+	CAppLocalizableInfo* self=new CAppLocalizableInfo(aRegistrationFileName, aLocalizeFilePath);
+	if(NULL==self)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+
+	return self;	
+}
+
+
+void CAppLocalizableInfo::SetCaption(Ptr16* Caption)
+{	
+	iCaption = Caption;
+}
+void CAppLocalizableInfo::SetShortCaption(Ptr16* ShortCaption)
+{
+	iShortCaption = ShortCaption;
+}
+void CAppLocalizableInfo::SetGroupName(Ptr16* GroupName)
+{
+	iGroupName = GroupName;
+}
+void CAppLocalizableInfo::SetIconFileName(Ptr16* IconFileName)
+{
+	iIconFileName = IconFileName;
+}
+
+void CAppLocalizableInfo::SetNumOfAppIcons(TInt NumOfAppIcons)
+{
+	iNumOfAppIcons = NumOfAppIcons;
+}
+
+void CAppLocalizableInfo::SetLocale(TInt Locale)
+{
+	iLocale = Locale;
+}
+
+void CAppLocalizableInfo::SetOpaqueData(Ptr8* OpaqueData)
+{
+	iOpaqueData = OpaqueData;
+}
+
+std::vector<CAppViewData*>* CAppLocalizableInfo::GetViewDataArray()
+{
+	return iViewDataArray;
+}
+Ptr16* CAppLocalizableInfo::GetGroupName()
+{
+	return iGroupName;
+}
+
+Ptr16* CAppLocalizableInfo::GetCaption()
+{
+	return iCaption;
+}
+
+Ptr16* CAppLocalizableInfo::GetShortCaption()
+{
+	return iShortCaption;
+}
+
+Ptr16* CAppLocalizableInfo::GetIconFileName()
+{
+	return iIconFileName;
+}
+
+TInt CAppLocalizableInfo::GetNumOfAppIcons()
+{
+	return iNumOfAppIcons;
+}
+
+TInt CAppLocalizableInfo::GetLocale()
+{
+	return iLocale;
+}	
+
+Ptr8* CAppLocalizableInfo::GetOpaqueData()
+{
+	return iOpaqueData;
+}
+
+//Read ViewData struct of Localizable resource file.
+void CAppLocalizableInfo::ReadViewDataL(RResourceReader& aResourceReader)
+{
+	// read LEN WORD STRUCT view_list[]
+	const TInt numOfViews = aResourceReader.ReadInt16L();
+
+	if (numOfViews > 0)
+	{
+		iViewDataArray = new std::vector<CAppViewData*>;
+		if(NULL==iViewDataArray)
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+	}
+
+	for(TInt view = 0; view < numOfViews; ++view)
+	{
+		CAppViewData* viewData = CAppViewData::NewL();
+		aResourceReader.ReadUint32L(); // skip over LONG reserved_long
+		aResourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+
+		// read LONG uid
+		const TUid viewUid =  {aResourceReader.ReadInt32L()};
+		viewData->SetUid(viewUid);
+		// read LONG screen_mode
+		const TInt screenMode = aResourceReader.ReadInt32L();
+		viewData->SetScreenMode(screenMode);
+
+		aResourceReader.ReadUint32L(); // skip over LONG reserved_long
+		aResourceReader.ReadUint32L(); // skip over LLINK reserved_llink
+
+		// read LTEXT caption
+		PtrC16* viewCaption = aResourceReader.ReadTPtrCL();
+
+		if(NULL != viewCaption)
+		{
+			viewData->SetCaptionL(viewCaption);
+
+			viewCaption->iPtr = NULL; //To Avoid double delete in destructor. To be destroyed by RResourceReader.
+			delete viewCaption;
+		}
+		// read WORD number_of_icons
+		const TInt numOfViewIcons = aResourceReader.ReadInt16L();
+		viewData->SetNumOfViewIcons(numOfViewIcons);
+
+		// read LTEXT icon_file
+		PtrC16* viewIconFile = aResourceReader.ReadTPtrCL();
+
+		if(NULL != viewIconFile)
+		{
+			ConvertToPlatformSpecificPath(viewIconFile->iPtr, viewIconFile->iMaxLength);
+			Ptr16*	fullViewIconFileName = ViewDataIconFileNameL(viewIconFile);
+			if (fullViewIconFileName)
+			{
+				viewData->SetIconFileNameL(fullViewIconFileName);
+				viewData->SetNonMbmIconFile(true);
+				delete fullViewIconFileName;
+			}
+			else
+			{
+				viewIconFile->iPtr = NULL;
+				viewIconFile->iMaxLength = 0;
+
+				if (numOfViewIcons > 0 && iIconFileName)
+				{ // default to app icon filename
+					viewIconFile->iPtr = iIconFileName->GetPtr(); 
+					viewIconFile->iMaxLength = iIconFileName->GetLength();
+				std::string errMsg= "Failed : ServiceInfo Icon File not present in Device.";
+				throw CResourceFileException(errMsg);
+				}
+			}
+		}
+
+		iViewDataArray->push_back(viewData);
+		if(NULL != viewIconFile)
+		{
+			viewIconFile->iPtr = NULL; //To Avoid double delete in destructor. To be destroyed by RResourceReader.
+		}
+		delete viewIconFile;
+	}
+
+}
+
+
+Ptr16* CAppLocalizableInfo::ViewDataIconFileNameL(const PtrC16* aIconFileName) const
+{
+	Ptr16* filename = NULL;
+	if (aIconFileName->iMaxLength == 0)
+		return NULL;
+
+	/*
+	 * aIconFileName may contain a valid string in some format (for eg. URI format) other than path to a regular file on disk
+	 * and that can be a mbm or non-mbm file. Such a filename will be reported as invalid filename by iFs.IsValidName() method. 
+	 * aIconFileName will be returned since it is a valid string. 
+	 */	
+	ParsePtrC parsePtr(aIconFileName);
+
+	if ( parsePtr.IsWild() || !parsePtr.PathPresent() || !parsePtr.NamePresent() )
+	{
+		parsePtr.SetToNull();
+		return NULL;
+	}
+
+	filename = new Ptr16(aIconFileName->iMaxLength);
+	if(NULL==filename || NULL == filename->GetPtr())
+	{
+		parsePtr.SetToNull();
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+	filename->UpdateLength(aIconFileName->iMaxLength);
+	BufCpy(filename->GetPtr(),aIconFileName->iPtr,aIconFileName->iMaxLength);
+
+	std::wstring iFileName = Ptr16ToWstring(filename);
+	std::wstring iFilePath = string2wstring(iLocalPath);
+	std::string fullnamewitoutdrive = parsePtr.FullNameWithoutDrive();
+	std::wstring iFilename1 = string2wstring(fullnamewitoutdrive);
+
+	if(parsePtr.DrivePresent())
+		iFilePath.append(iFilename1);
+	else
+		iFilePath.append(iFileName);
+
+	// check for fully qualified icon filename
+	if (parsePtr.DrivePresent() && FileExists(iFileName))
+	{
+		parsePtr.SetToNull();
+		return filename;	
+	}
+	else
+	{
+		// check for icon file on same drive as localisable resource file
+		std::string localisableResourceFileDrive = parsePtr.Drive();
+		TInt ret = FindWild(aIconFileName);
+		if(ret == 0 && FileExists(iFilePath))
+		{
+			parsePtr.SetToNull();
+			return filename;
+		}
+		else
+		{
+			ParsePtrC parsePtr_reg(iRegistrationFilePath);
+			std::string registrationFileDrive = parsePtr_reg.Drive();
+
+			if(registrationFileDrive.compare(localisableResourceFileDrive))
+			{
+				// check for icon file on same drive as registration file
+				std::string registrationfilepath(parsePtr_reg.FullPath());
+				registrationfilepath.append(parsePtr.NameAndExt());
+				std::wstring iRegFilePath = string2wstring(registrationfilepath);
+				std::string iconfile = parsePtr.StrName();
+			
+				ret = FindWild(registrationFileDrive,iconfile,localisableResourceFileDrive);
+				if(ret == 0 && FileExists(iRegFilePath))
+				{
+					parsePtr_reg.SetToNull();
+					parsePtr.SetToNull();
+					return filename;
+				}
+			}
+			parsePtr_reg.SetToNull();
+		}
+	}
+	parsePtr.SetToNull();	//To Avoid double delete in destructor. To be destroyed by RResourceReader.
+							//Same as iIconFileName data member of class CAppInfoReader. Destructor will delete.
+	return NULL;					// Or to be deleted by calling function.
+}
+
+//
+// Class CAppViewData
+//
+
+CAppViewData::~CAppViewData()
+{
+	delete iCaption;
+	delete iIconFileName;
+}
+
+CAppViewData::CAppViewData()
+	: iNonMbmIconFile(false),iNumOfViewIcons(0),iScreenMode(0)
+{
+	iCaption = NULL;
+	iIconFileName = NULL;
+	iUid = NullUid;
+}
+
+CAppViewData* CAppViewData::NewL()
+{
+	CAppViewData* self=new CAppViewData();
+	if(NULL==self)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+
+	return self;	
+}
+
+void CAppViewData::SetUid(TUid aUid)
+{
+	iUid=aUid;
+}
+
+void CAppViewData::SetScreenMode(TInt aScreenMode)
+{
+	iScreenMode=aScreenMode;
+}
+
+void CAppViewData::SetCaptionL(const PtrC16* aCaption)
+{
+	if(aCaption != NULL)
+	{
+		iCaption=new Ptr16(aCaption->iMaxLength);
+		if(NULL==iCaption || NULL==iCaption->GetPtr())
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+		iCaption->UpdateLength(aCaption->iMaxLength);
+		BufCpy(iCaption->GetPtr(),aCaption->iPtr,aCaption->iMaxLength);
+	}
+	else
+		iCaption = NULL;
+}
+
+void CAppViewData::SetIconFileNameL(const Ptr16* aFileName)
+{
+	if(aFileName != NULL)
+	{
+		iIconFileName = new Ptr16(aFileName->GetLength());
+		if(NULL==iIconFileName || NULL==iIconFileName->GetPtr())
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+		iIconFileName->UpdateLength(aFileName->GetLength());
+		BufCpy(iIconFileName->GetPtr(),aFileName->GetPtr(),aFileName->GetLength());
+	}
+	else
+		iIconFileName = NULL;
+}
+
+void CAppViewData::SetNumOfViewIcons(TInt aNumOfViewIcons)
+{
+	iNumOfViewIcons = aNumOfViewIcons;
+}
+
+void CAppViewData::SetNonMbmIconFile(TBool aNonMbmIconFile)
+{
+	iNonMbmIconFile = aNonMbmIconFile;
+}
+
+TUid CAppViewData::Uid() const
+{
+	return iUid;
+}
+
+Ptr16* CAppViewData::GetCaption()
+{
+	return iCaption;
+}
+TInt CAppViewData::GetScreenMode()
+{
+	return iScreenMode;
+}
+Ptr16* CAppViewData::GetIconFileName()
+{
+	return iIconFileName;
+}
+TInt CAppViewData::GetNumOfViewIcons()
+{
+	return iNumOfViewIcons;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/aplapplistitem.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,137 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// aplapplistitem.h
+//
+/** 
+* @file aplapplistitem.h
+*
+* @internalComponent
+* @released
+*/
+#ifndef __APLAPPLISTITEM_H__
+#define __APLAPPLISTITEM_H__
+
+#include "apaid.h"
+#include "barsread2.h"
+#include "stringutils.h"
+#include "is_utils.h"
+
+/**
+The CAppLocalOpaqueDataInfo class represents the data associated with an application OpaqueData.
+
+@internalComponent
+*/
+class CAppLocalOpaqueDataInfo
+	{
+public:
+	~CAppLocalOpaqueDataInfo();
+	CAppLocalOpaqueDataInfo();
+	CAppLocalOpaqueDataInfo(TInt 	aLocale, TUint32 aServiceUid, Ptr8* aOpaqueData);
+	static CAppLocalOpaqueDataInfo* NewL(TInt aLocale, TUint32 aServiceUid, Ptr8* aOpaqueData);
+	Ptr8* GetOpaqueData();
+	TUint32 GetServiceUid();
+	TInt GetLocale();
+
+private:
+	Ptr8* 	iOpaqueData;
+	TUint32	iServiceUid;
+	TInt 	iLocale;
+	};
+
+/**
+The CApaAppViewData class represents the data associated with an application view.
+
+@internalComponent
+*/
+class CAppViewData
+	{
+public:
+	TUid Uid() const;
+	inline Ptr16 Caption() const;
+public:
+	~CAppViewData();
+	static CAppViewData* NewL();
+	void SetUid(TUid aUid);
+	void SetCaptionL(const PtrC16* aCaption);
+	void SetScreenMode(TInt aScreenMode);
+	void SetIconFileNameL(const Ptr16* aFileName);
+	void SetNonMbmIconFile(TBool aNonMbmIconFile);
+	void SetNumOfViewIcons(TInt aNumOfViewIcons);
+	Ptr16* GetCaption();
+	TInt GetScreenMode();
+	Ptr16* GetIconFileName();
+	TInt GetNumOfViewIcons();
+	CAppViewData();
+
+private:
+	Ptr16* iCaption;
+	TUid iUid;
+	TInt iScreenMode;
+	Ptr16* iIconFileName;
+	TBool iNonMbmIconFile;
+	TInt iNumOfViewIcons;
+	};
+
+//
+// inlines
+//
+
+inline Ptr16 CAppViewData::Caption() const
+	{ return *iCaption; }
+
+/**
+Reads application information from a combination of localizable registration file,
+
+@internalComponent
+*/
+
+class CAppLocalizableInfo
+{
+public:
+		~CAppLocalizableInfo();
+	static CAppLocalizableInfo* NewL(const std::string& aRegistrationFileName, const std::string& aLocalizeFilePath);
+		CAppLocalizableInfo(const std::string& aRegistrationFileName,const std::string& aLocalizeFilePath);
+	void SetCaption(Ptr16* Caption);
+	void SetShortCaption(Ptr16* ShortCaption);
+	void SetGroupName(Ptr16* GroupName);
+	void SetIconFileName(Ptr16* IconFileName);
+	void SetNumOfAppIcons(TInt NumOfAppIcons);
+	void SetLocale(TInt Locale);
+	void SetOpaqueData(Ptr8* OpaqueData);
+	void ReadViewDataL(RResourceReader& resourceReader);
+	Ptr16* ViewDataIconFileNameL(const PtrC16* aIconFileName) const;
+	std::vector<CAppViewData*>* GetViewDataArray();	
+	Ptr16* GetGroupName();
+	Ptr16* GetCaption();
+	Ptr16* GetShortCaption();
+	Ptr16* GetIconFileName();
+	TInt GetNumOfAppIcons();
+	TInt GetLocale();
+	Ptr8* GetOpaqueData();
+	
+private:
+	std::vector<CAppViewData*>* iViewDataArray;
+	Ptr16* iGroupName;
+	Ptr16* iCaption;
+	Ptr16* iShortCaption;
+	TInt iNumOfAppIcons;
+	Ptr16* iIconFileName;
+	TInt iLocale;
+	Ptr8* iOpaqueData;
+	const std::string& iRegistrationFilePath;
+	const std::string& iLocalPath;
+};
+
+
+#endif //__APLAPPLISTITEM_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/apmstd.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,85 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+/** 
+* @file APMSTD.cpp
+*
+* @internalComponent
+* @released
+*/
+#include "apmstd.h"
+#include "barsc2.h"
+#include "parse.h"
+
+//
+// class TDataType
+//
+
+TDataType::TDataType()
+	:iDataType(),
+	iUid(NullUid)
+/** Default constructor.
+
+Sets an empty data type string and sets the associated UID to NullUid. */
+	{}
+
+
+TDataType::~TDataType()
+/** Default destructor.
+
+Sets an empty data type string and sets the associated UID to NullUid. */
+{
+	delete iDataType;
+}
+
+TDataType::TDataType(const PtrC8* aDataType)
+	:iUid(NullUid)
+/** Copy constructor.
+
+@param aDataType The data type to be copied. */
+{
+	iDataType = new Ptr8(aDataType->iMaxLength);
+	if(NULL==iDataType)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+	iDataType->UpdateLength(aDataType->iMaxLength);
+	BufCpy8(iDataType->GetPtr(), aDataType->iPtr, aDataType->iMaxLength);
+}
+
+
+Ptr8* TDataType::GetDataType()
+{
+	return iDataType;
+}
+
+
+//
+// class TDataTypeWithPriority
+//
+
+/** Default constructor */
+TDataTypeWithPriority::TDataTypeWithPriority()
+{
+}
+
+/** Constructor taking a data type and a priority value.
+
+@param aDataType The data type.
+@param aPriority The priority value. */
+TDataTypeWithPriority::TDataTypeWithPriority(const TDataType& aDataType, TDataTypePriority aPriority)
+	: iDataType(aDataType),
+	iPriority(aPriority)
+	{}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/apmstd.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,181 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+/** 
+* @file apmstd.h
+*
+* @internalComponent
+* @released
+*/
+#if !defined (__APMSTD_H__)
+#define __APMSTD_H__
+
+#include "commontypes.h"
+
+/**
+@publishedAll
+@released
+
+The largest possible value for a TInt16.
+*/
+const TInt KMaxTInt16=0x7fff;
+
+/**
+@publishedAll
+@released
+
+The smallest possible value for a TInt16.
+*/
+const TInt KMinTInt16=(-32768);
+
+/**
+@publishedAll
+@released
+*/
+const TInt KMaxDataTypeLength=256;
+
+/** Defines the priority associated with a data type.
+
+The priority is used by a device to resolve the current preferred handler 
+of a data type, in the absence of any user preferences.
+
+@publishedAll
+@released
+@see TDataTypeWithPriority */
+typedef TInt32 TDataTypePriority;
+
+/** Reserved for future use. 
+
+@publishedAll
+@released */
+const TInt32 KDataTypePriorityUserSpecified=KMaxTInt16;
+
+/** Trusted applications may use this priority value to ensure 
+    their MIME type associations cannot be overridden by 
+    self signed (untrusted) applications.
+
+@publishedAll
+@released
+@see TDataTypeWithPriority */
+const TInt32 KDataTypePriorityTrustedHigh = 0xC000;
+
+/** This is Threshold priority for Un-Trusted apps i.e., for the applications which reside 
+in \\private\\10003a3f\\import\\apps and have a SID which is in the unprotected range. This is to avoid Un-Trusted app's claiming for priority higher 
+than the threshold, if they claim for priority higher than the Threshold then it would be 
+reduced to KDataTypeUnTrustedPriorityThreshold.
+
+@publishedAll
+@released */
+const TInt32 KDataTypeUnTrustedPriorityThreshold=KMaxTInt16;
+
+/** A priority value associated with a data (MIME) type. Associating an application 
+with a data type at this priority means that this application, and no other, 
+should ever handle the data type. Use sparingly.
+
+@publishedAll
+@released
+@see TDataTypeWithPriority */
+const TInt32 KDataTypePriorityHigh=10000;
+
+/** A priority value associated with a data (MIME) type. Associating an application 
+with a data type at this priority means that the data type is the primary 
+type for that application. For example, "text/plain" files for a text editor.
+
+@publishedAll
+@released
+@see TDataTypeWithPriority */
+const TInt32 KDataTypePriorityNormal=0;
+
+/** A priority value associated with a data (MIME) type. Associating an application 
+with a data type at this priority means that the data type is a secondary 
+type for that application. For example, "text/plain" files for a web browser.
+
+@publishedAll
+@released
+@see TDataTypeWithPriority */
+const TInt32 KDataTypePriorityLow=-10000;
+
+/** A priority value associated with a data (MIME) type. Associating an application 
+with a data type at this priority means that the data type is a last resort 
+for that application. Use sparingly.
+
+@publishedAll
+@released
+@see TDataTypeWithPriority */
+const TInt32 KDataTypePriorityLastResort=-20000;
+
+/** Reserved for future use. 
+
+@publishedAll
+@released */
+const TInt32 KDataTypePriorityNotSupported=KMinTInt16;
+
+/** This is a special priority that overrides any user settings. Applications must
+have EWriteDeviceData to use this priority. If they have not then they will be
+downgraded to KDataTypePriorityNormal.
+
+@publishedPartner
+@released
+@see TDataTypeWithPriority */
+const TInt32 KDataTypePrioritySystem = 0xFFF9;
+
+
+/** A data type.
+
+The class maintains a string that describes the data type and an associated 
+UID.
+
+A data type is also referred to as a MIME type. 
+
+@publishedAll
+@released */
+class TDataType
+	{
+public:
+	 TDataType();
+	 ~TDataType();
+	 TDataType(const PtrC8* aDataType);
+     Ptr8* GetDataType();
+	 
+private:
+	Ptr8* iDataType;
+	TUid iUid;
+	};
+
+class TDataTypeWithPriority
+/** A data (MIME) type and a priority value for that data type.
+
+The priority is used to resolve the current preferred handler of a data type, 
+in the absence of any user preferences. An AIF file can associate an application 
+with a data (MIME) type that is not native to Symbian OS. A priority value 
+can be specified that allows the device to choose the highest priority application 
+that can handle that data type.
+
+@publishedAll 
+@released 
+@see TDataType
+@see TDataTypePriority */
+	{
+public:
+	 TDataTypeWithPriority();
+	 TDataTypeWithPriority(const TDataType& aDataType, TDataTypePriority aPriority);
+
+public:
+	/** The data type. */
+	TDataType iDataType;
+	/** The priority value. */
+	TDataTypePriority iPriority;
+	};
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/apsecutils.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,144 @@
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Security issues related methods used across apparc
+// 
+// apsecutils.cpp
+//
+
+#include "apsecutils.h"
+#include <stdlib.h> 
+#include <iostream.h> 
+#include <fstream>
+#include <string> 
+#include "parse.h"
+
+using namespace std;
+
+TUint32 CApaSecurityUtils::iCapabilities = 0;
+TUint32 CApaSecurityUtils::iSecureID = 0;
+
+/** 
+ * Determines whether an EXE SID is within the protected range\d
+ * 
+ * @param aSid The SID to check
+ * @return ETrue if it is protected
+ */
+inline TBool CApaSecurityUtils::HasWriteDeviceDataCap( const TUint32 aCapability )
+{
+     // If bit 6 is set then WriteDeviceData capability is enabled
+     return (aCapability & 0x20) ? 1 : 0;
+} 
+
+/** 
+ * Determines whether an EXE SID is within the protected range\d
+ * 
+ * @param aSid The SID to check
+ * @return ETrue if it is protected
+ */
+inline TBool CApaSecurityUtils::IsSidProtected( const TUint32 aSid )
+{
+     // If bit 31 is set then Sid is unprotected
+     return (aSid & 0x80000000) ? 0 : 1;
+} 
+
+TInt CApaSecurityUtils::GetInfo(std::string& aFilename)
+{
+	const TUint8 kHeaderSize= 4;
+	TUint8 header[kHeaderSize];
+
+	std::ifstream* iFileContents;	
+	iFileContents= new std::ifstream(aFilename.c_str(), std::ios::in|std::ios::binary);
+
+	if(!iFileContents->good())
+	{
+		if (iFileContents->is_open())
+		{
+			iFileContents->close();
+		}
+		if(iFileContents)
+			delete iFileContents;
+		return 1;
+	}
+	
+	TInt aPos=0x80;
+	// Seek to the offset specified by "aPos"
+	iFileContents->seekg(aPos, std::ios_base::beg);
+	iFileContents->read((char*)header, kHeaderSize); 
+	memcpy((TUint8*)&iSecureID,header,4);
+
+	aPos=0x88;
+	// Seek to the offset specified by "aPos"
+	iFileContents->seekg(aPos, std::ios_base::beg);
+	iFileContents->read((char*)header, kHeaderSize); 
+	memcpy((TUint8*)&iCapabilities,header,4);
+
+	if (iFileContents->is_open())
+	{
+		iFileContents->close();
+	}
+
+	if(iFileContents)
+		delete iFileContents;
+	
+	return 0;
+}
+
+/**
+ * Check if application has a WriteDeviceData capability
+ * and if it's SID is in the protected range
+ * 
+ * @param aAppFilename path to application exe file
+ * @param aHasWriteDeviceDataCap returns ETrue if app has WriteDeviceData cap
+ * @param aIsSidProtected returns ETrue if application SID is in the protected range
+ * @return KErrNone if succesful, error code otherwise
+ */
+TInt CApaSecurityUtils::CheckAppSecurity( const Ptr16& aAppFilename, 
+                                           TBool& aHasWriteDeviceDataCap, 
+                                           TBool& aIsSidProtected,
+                                           const std::string& aDerivedPath)
+
+{ 
+    aHasWriteDeviceDataCap = EFalse;
+    aIsSidProtected = EFalse;
+
+	std::string Filename = Ptr16ToString(&aAppFilename);
+	std::string Path(aDerivedPath);
+	#ifdef __LINUX__
+	Path.append("/sys/bin/");
+	#else
+	Path.append("\\sys\\bin\\");
+	#endif
+
+	Path.append(Filename);
+	Path.append(".exe");
+	
+    TInt ret = CApaSecurityUtils::GetInfo(Path);
+
+    if ( KErrNone == ret )
+    {
+        if( HasWriteDeviceDataCap( TUint32( iCapabilities) ) )
+        {
+            aHasWriteDeviceDataCap = ETrue;
+        }
+
+        if( IsSidProtected( TUint32( iSecureID) ) )
+        {
+            aIsSidProtected = ETrue;
+        }
+    }
+
+    return ret;
+}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/apsecutils.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// apsecutils.h
+//
+
+/** 
+* @file apsecutils.h
+*
+* @internalComponent
+* @released
+*/
+
+#ifndef __APSECUTILS_H__
+#define __APSECUTILS_H__
+
+#include "commontypes.h"
+/** AppArc security utils.
+
+This is a set of security related methods for apparc internal usage.
+
+*/
+class CApaSecurityUtils
+    {
+public:
+    static TInt CheckAppSecurity( const Ptr16& aAppFilename, 
+                                           TBool& aHasWriteDeviceDataCap, 
+                                           TBool& aIsSidProtected,
+                                           const std::string& aDerivedPath);
+
+	static TInt GetInfo(std::string& aFilename);
+
+private:
+    inline static TBool IsSidProtected( const TUint32 aSid );
+	inline static TBool HasWriteDeviceDataCap( const TUint32 aCapability );
+
+private:
+	static TUint32 iCapabilities;
+	static TUint32 iSecureID;
+    };
+    
+#endif // __APSECUTILS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/barsc2.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,137 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+/** 
+* @file barsc2.cpp
+*
+* @internalComponent
+* @released
+*/
+#include <iostream>
+#include <sstream>
+#include "barsc2.h"
+#include <string>
+
+CResourceFile::CResourceFile(const std::string& aName,TUint32 aFileOffset, TInt aFileSize)
+	{
+	// Creating the implementation instance with a placement new operator.
+	new (iImpl) RResourceFileImpl;
+	
+	// Open the resource file for reading.
+	Impl()->OpenL(aName, aFileOffset, aFileSize);
+	}
+
+
+CResourceFile::~CResourceFile()
+	{
+	RResourceFileImpl* impl = Impl();
+	impl->~RResourceFileImpl();
+	}
+
+
+Ptr8* CResourceFile::AllocReadL(const TInt& aResourceId)
+	{
+	return Impl()->AllocReadL(aResourceId);
+	}
+
+/** Initialises the offset value from the first resource.
+
+The function tests to catch cases where the first resource is not an RSS_SIGNATURE.
+It assumes that the first resource in the file consists of
+two 32-bit integers. The first integer contains the version number and
+the second is a self-referencing link whose value is the offset for
+the resources in the file, plus 1.This function must be called before
+calling Offset(), AllocReadL(), AllocReadLC() or ReadL().
+@leave The function leaves if this resource id is not in this
+resource file or the file is corrupted. */
+void CResourceFile::ConfirmSignatureL()
+	{
+	Impl()->ConfirmSignatureL();
+	}
+
+// Read Uid3 of Resource File
+TUid CResourceFile::ReadAppUidL()
+	{
+	// Unicode compressed RSC file will have 19 bytes header.
+	const TUint8 Read_Byte = 4;
+	TUint8 header[Read_Byte];
+	sTUid uid;
+		
+	// Read Uid3 of Resource File
+	Impl()->ReadL(8,header,Read_Byte);
+	// Get the Third UID
+	memcpy((TUint8*)&uid.iUid1,header,Read_Byte);
+
+	TUid iUid = {uid.iUid1};
+	return iUid;
+	}
+
+// Read Uid2 of Resource File
+TUid CResourceFile::ReadFileUidL()
+	{
+	// Unicode compressed RSC file will have 19 bytes header.
+	const TUint8 Read_Byte = 4;
+	TUint8 header[Read_Byte];
+	sTUid uid;
+		
+	// Read Uid3 of Resource File
+	Impl()->ReadL(4,header,Read_Byte);
+	// Get the Third UID
+	memcpy((TUint8*)&uid.iUid1,header,Read_Byte);
+
+	TUid iUid = {uid.iUid1};
+	return iUid;
+	}
+
+TBool CResourceFile::OwnsResourceId(const TInt& aResourceId) const
+	{
+	return Impl()->OwnsResourceId(aResourceId);
+	}
+
+
+RResourceFileImpl* CResourceFile::Impl()
+	{
+	return reinterpret_cast <RResourceFileImpl*> (iImpl);
+	}
+
+
+const RResourceFileImpl* CResourceFile::Impl() const
+	{
+	return reinterpret_cast <const RResourceFileImpl*> (iImpl);
+	}
+
+
+void CResourceFileException::Display() const 
+	{
+	std::ostringstream errDispStream;
+	errDispStream<<iValue;
+	errDispStream<<std::endl;
+
+// Note: Remove the following tow sentences after integrating with Interpretsis.	
+	std::string str = errDispStream.str();
+	std::cout<<str;
+
+//  Note: Put this when integrating with InterpretSis
+//	std::wstring finalMessage = Utf8ToUcs2( errDispStream.str() );
+//  LERROR( finalMessage );
+	}
+
+	/**
+	Get the exception message
+	*/
+std::string CResourceFileException::GetMsg()
+	{
+		return iValue;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/barsc2.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,158 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+/** 
+* @file barsc2.h
+*
+* @internalComponent
+* @released
+*/
+#ifndef __BARSC2_H__
+#define __BARSC2_H__
+
+#include <string>
+#include "barscimpl.h"
+
+class RResourceFileImpl;
+
+/**
+This class accesses a resource file and reads the resource data into a buffer.
+Interpretation of the data is achieved using the RResourceReader class.
+*/
+class CResourceFile 
+	{
+public:
+	/**
+	Initializes in place the implementation object and 
+	opens the resource file for reading.
+	@param aName Resource file name
+	@param aFileOffset Resource file offset
+	@param aFileSize Resource file size	
+	*/
+	CResourceFile(const std::string& aName, TUint32 aFileOffset, TInt aFileSize);
+	
+	/**
+	Cleanup the allocated memory
+	*/
+	~CResourceFile();
+	
+	/** 
+	Reads a resource into a heap and returns the correspoding pointer to it.
+	
+	Ownership of the allocated heap is passed to the caller who must destroy 
+	it when it is no longer needed.
+
+	The search for the resource uses the following algorithm:
+
+	@param aResourceId The numeric id of the resource to be read.
+	@return Pointer to the allocated heap memory containing the resource.
+	*/
+	Ptr8* AllocReadL(const TInt& aResourceId);
+
+	/** Initialises the offset value from the first resource.
+
+	The function assumes that the first resource in the file consists of
+	two 32-bit integers. The first integer contains the version number and
+	the second is a self-referencing link whose value is the offset for
+	the resources in the file, plus 1.This function must be called before
+	calling Offset(), AllocReadL(), AllocReadLC() or ReadL().
+
+	@param aSignature This argument value is not used by the function.
+	@leave The function leaves if this resource id is not in this
+	resource file or the file is corrupted. */
+	void ConfirmSignatureL();
+	
+	/** 
+	Tests whether the resource file owns the specified resource id.
+	@param aResourceId The resource id to test.
+	@return True, if the resource file owns the id, false otherwise.
+	*/
+	TBool OwnsResourceId(const TInt& aResourceId) const;
+
+	/** 
+	Reads Resource File Uid3.
+	@param  Void
+	@return Uid3 of Resource File.
+	*/
+
+	TUid ReadAppUidL();
+
+	/** 
+	Reads Resource File Uid2.
+	@param  Void
+	@return Uid2 of Resource File.
+	*/
+
+	TUid ReadFileUidL();
+	 
+private:
+	/**
+	prevent default copy constructor
+	*/
+	CResourceFile(const CResourceFile&);
+	/**
+	prevent default assignment operator
+	*/
+	CResourceFile& operator=(const CResourceFile&);
+	/** 
+	@return Non-const pointer to the implementation. 
+	*/
+	RResourceFileImpl* Impl();
+	/** 
+	@return Const pointer to the implementation. 
+	*/
+	const RResourceFileImpl* Impl() const;
+
+private:
+	enum
+		{
+		KRscFileSize = 24,
+		};
+	TUint8 iImpl[KRscFileSize];
+	};
+
+
+/**
+This class implements the exception handling mechanism
+required for resource file parsing.
+*/
+class CResourceFileException
+{
+public:
+
+	/**
+	Initializes the CResourceFileException class with the required
+	exception message.
+	@param aValue Exception message that is to be displayed.
+	*/
+	inline CResourceFileException(const std::string& aValue)
+							   :iValue(aValue)
+		{
+		}
+
+	/**
+	Displays the exception message
+	*/
+	void Display() const;
+
+	/**
+	Get the exception message
+	*/
+	std::string GetMsg();
+
+private:
+	std::string iValue;
+};
+
+#endif//__BARSC2_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/barscimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1129 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+/** 
+* @file BaRscImpl.cpp
+*
+* @internalComponent
+* @released
+*/
+#include <iostream>
+#include <fstream>
+#include <cassert>
+#include <sys/stat.h>
+#include <sstream>
+#include "barsc2.h"
+#include "barscimpl.h"
+#include "dictionarycompression.h"
+#include "ucmp.h"
+#include "util.h"
+#include "parse.h"
+
+#define REINTERPRET_CAST(type,exp) (reinterpret_cast<type>(exp))
+#define CONST_CAST(type,exp) (const_cast<type>(exp))
+#define STATIC_CAST(type,exp) (static_cast<type>(exp))
+
+inline TUint8* MemCopy(TAny* aTrg, const TAny* aSrc, TInt aLength)
+{ return (TUint8*)memmove(aTrg, aSrc, aLength) + aLength; }
+
+
+/** Cleanup function.
+@internalComponent
+@param aArrayOfDictionaryCompressionBitStreams Pointer to an vector of 
+RDictionaryCompressionBitStream objects which have to be closed. */
+void CloseArrayOfDictionaryCompressionBitStreams(TAny* aArray)
+{
+	typedef std::vector<RDictionaryCompressionBitStream> RDictComprBitStream;
+	RDictComprBitStream* array = static_cast <RDictComprBitStream*> (aArray);
+	for (TInt i=array->size()-1;i>=0;--i)
+		{
+		array[i].clear();
+		}
+	array->clear();
+}
+
+RResourceFileImpl::TExtra::TExtra():
+	iBitArrayOfResourcesContainingCompressedUnicode(NULL),
+	iFileOffset(0),
+	iFileSize(0)
+{
+}
+
+
+RResourceFileImpl::TExtra::~TExtra()
+{
+	delete [] iDictionaryCompressionData.iCachedResourceBuffer;
+	iDictionaryCompressionData.iCachedResourceBuffer = NULL;
+	delete [] iDictionaryCompressionData.iCachedDictionaryIndex;
+	iDictionaryCompressionData.iCachedDictionaryIndex = 0;
+
+	delete iBitArrayOfResourcesContainingCompressedUnicode;
+}
+
+
+TInt32 RResourceFileImpl::TExtra::ContainsCompressedUnicode(TInt& aRscIdx, TBool aFirstRscIsGen) const
+{
+	
+	if (aFirstRscIsGen)
+	{
+		// dictionary-compressed resource files can have an automatically generated 
+		//resource which is the bit-array of resources containing compressed Unicode 
+		//(this automatically generated resource does not have a corresponding bit 
+		//for itself in the bit-array as it would be self-referring...)
+		--aRscIdx; 
+		if (aRscIdx<0)
+		{
+			//aRscIdx is referring to the automatically generated resource 
+			//(which is the bit-array of resources containing compressed Unicode)
+			return EFalse; 
+			}
+	}
+	
+	assert(aRscIdx>=0);
+	
+	if (iBitArrayOfResourcesContainingCompressedUnicode==NULL)
+		{
+		return EFalse;
+		}
+	
+	TInt index = aRscIdx/8;
+	assert(index < iBitArrayOfResourcesContainingCompressedUnicode->GetLength());
+	return (*iBitArrayOfResourcesContainingCompressedUnicode)[index]&(1<<(aRscIdx%8));
+}
+
+
+RResourceFileImpl::RResourceFileImpl() :
+	iResourceContents(NULL),
+	iSizeOfLargestResourceWhenCompletelyUncompressed(0),
+	iIndex(NULL),
+	iOffset(0),
+	iExtra(NULL),
+	iFlagsAndNumberOfResources(0)
+{
+	// Fixed class size - because of the BC reasons.
+	// RResourceFileImpl size must be the same as CResourceFile size.
+	enum
+		{
+		KRscFileImplSize = 24
+		};	
+	assert(sizeof(RResourceFileImpl) == KRscFileImplSize);
+
+	//Fixed "iOffset" position - because of the BC reasons.
+	assert(offsetof(RResourceFileImpl, iOffset)==12);
+}
+
+
+RResourceFileImpl::~RResourceFileImpl()
+{
+	if(iResourceContents)
+	{
+		if (iResourceContents->is_open())
+		{
+			iResourceContents->close();
+		}
+		delete iResourceContents;
+	}
+	iSizeOfLargestResourceWhenCompletelyUncompressed=0;
+	delete iIndex;
+	iIndex=NULL;
+	if (iExtra)
+	{
+		delete iExtra;
+		iExtra=NULL;
+	}
+
+	iFlagsAndNumberOfResources=0;
+	iOffset=0;
+}
+
+/** Opens the resource file reader.
+The resource file reader must be opened before reading resources or
+checking the signature of the resource file. 
+@internalComponent
+@param aName File to open as a resource file.
+@param aFileOffset The resource file section offset from the beginning of the file.
+@param aFileSize The resource file section size.
+@leave - The file is corrupted.
+*/
+void RResourceFileImpl::OpenL(
+						  const std::string& aName, 
+						  TUint32 aFileOffset, 
+						  TInt aFileSize)
+{
+	iResourceContents= new std::ifstream(aName.c_str(), std::ios::in|std::ios::binary);
+		
+	if(!iResourceContents->good())
+	{
+		std::string errMsg= "Unable to open RSC file. " + aName;
+		if (iResourceContents->is_open())
+			iResourceContents->close();
+		if(iResourceContents)
+			delete iResourceContents;
+		throw CResourceFileException(errMsg);
+	}
+
+	iExtra=new TExtra();
+	iExtra->iFileOffset = aFileOffset;
+	
+	TInt fileSize = 0;
+	if (aFileSize)
+		{
+		fileSize = aFileSize;
+		assert(fileSize > TInt(aFileOffset));
+		}
+	else
+		{
+		// Get the resource file size
+		struct stat resourceFileStats;
+    
+		if (stat(aName.c_str(),&resourceFileStats) == 0)
+			{
+			// The size of the file in bytes is in
+			// resourceFileStats.st_size
+			fileSize=resourceFileStats.st_size;
+			assert(fileSize > 0);
+			}   	
+		else
+			{
+			if (iResourceContents->is_open())
+					iResourceContents->close();		
+			std::string errMsg="Invalid RSC File";
+			throw CResourceFileException(errMsg);
+			}		
+		}
+	
+	iExtra->iFileSize = fileSize;	
+	
+	// Verify the header of the RSC and get the resource index
+	ReadHeaderAndResourceIndexL();
+}
+
+
+/** 
+Retrieve the UID tuple of the opened resource file.
+
+@internalComponent
+@pre OpenL() has been called successfully.
+@return The UIDs of the loaded resource file.
+*/
+TUidType RResourceFileImpl::UidType() const
+{
+	assert(iExtra!=NULL);
+	return iExtra->iUidType;
+}
+
+/** Reads a resource into a heap buffer, returns a pointer to that
+buffer.
+
+A heap buffer of appropriate length is allocated for the resource.
+Ownership of the heap buffer passes to the caller who must destroy
+it. The search for the resource uses the following algorithm:A
+resource id in the range 1 to 4095 is looked up in this resource file.
+The function leaves if there is no matching resource.If the resource
+id is greater than 4095, then the most significant 20 bits of the
+resource id is treated as an offset and the least significant 12 bits
+is treated as the real resource id. If the offset matches the offset
+value defined for this file, then the resource is looked up in this
+resource file using the real resource id (i.e. the least significant
+12 bits). If the offset does not match, then the function leaves.Note,
+do not call this function until a call to
+ConfirmSignatureL() has completed successfully.
+
+@internalComponent
+@pre OpenL() is called.
+@param aResourceId The numeric id of the resource to be read.
+@return Pointer to a heap buffer containing the resource.
+@panic Some BAFL panic codes, if the file is corrupted.
+@leave - The file is corrupted.
+@leave - There is no resource with aResourceId in the file.
+*/
+Ptr8* RResourceFileImpl::AllocReadL(const TInt& aResourceId) 
+{
+	// Check if the resource id is present in the RSC file
+	if (!OwnsResourceId(aResourceId))
+	{
+		std::ostringstream errDispStream;
+		
+		errDispStream<<"Resource ID:";
+		errDispStream<<aResourceId;
+		errDispStream<<" is not present in the RSC file";
+		
+		throw CResourceFileException(errDispStream.str());
+	}
+	
+	//"-1" because the first resource has ID 0x*****001 (not 0x*****000)
+	TInt resourceIndex= (aResourceId & EIdBits)-1; 
+	
+	if (iFlagsAndNumberOfResources & EFlagGenerate_RSS_SIGNATURE_ForFirstUserResource)
+	{
+		assert(iFlagsAndNumberOfResources & EFlagDictionaryCompressed);
+		assert(iFlagsAndNumberOfResources & EFlagThirdUidIsOffset);
+		
+		if (resourceIndex>0)
+		{
+			--resourceIndex;
+		}
+		else
+		{
+			assert(resourceIndex==0);
+
+			Ptr8* resourceDataFor_RSS_SIGNATURE = new Ptr8(8);
+			if(NULL==resourceDataFor_RSS_SIGNATURE || NULL==resourceDataFor_RSS_SIGNATURE->GetPtr())
+			{
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+
+			resourceDataFor_RSS_SIGNATURE->SetLength(8);
+			TUint* wordPointer=REINTERPRET_CAST(TUint*,CONST_CAST(TUint8*,resourceDataFor_RSS_SIGNATURE->GetPtr()));
+
+			wordPointer[0]=4;
+			wordPointer[1]=((iExtra->iUidType[2].iUid << 12) | 1);
+			return resourceDataFor_RSS_SIGNATURE;
+		}
+	}
+	
+
+	const TBool firstResourceIsGenerated=
+		(iFlagsAndNumberOfResources & 
+		EFlagFirstResourceIsGeneratedBitArrayOfResourcesContainingCompressedUnicode);
+	if (firstResourceIsGenerated)
+	{
+		assert(iFlagsAndNumberOfResources & EFlagDictionaryCompressed);
+		//dictionary-compressed resource files can have an automatically generated 
+		//resource which is the bit-array of resources containing compressed Unicode 
+		//(this automatically generated resource does not have a corresponding bit for 
+		//itself in the bit-array as it would be self-referring...)
+		++resourceIndex; 
+	}
+	
+	assert(resourceIndex>=0);
+
+	Ptr8* const dictionaryDecompressedResourceData = DictionaryDecompressedResourceDataL(resourceIndex,
+						iFlagsAndNumberOfResources & static_cast<TUint>(EAllFlags),	
+						iExtra->iDictionaryCompressionData,	
+						iIndex);
+
+	// Return the resource data if its not unicode compressed.
+	if (!iExtra->ContainsCompressedUnicode(resourceIndex,firstResourceIsGenerated))
+	{
+		return dictionaryDecompressedResourceData;
+	}
+		
+	Ptr8* const finalResourceData=DecompressUnicodeL(dictionaryDecompressedResourceData);
+
+	delete dictionaryDecompressedResourceData;
+	return finalResourceData;
+	
+}
+
+/** The method will decompress the unicode data (aInputResourceData argument), allocate enough
+memory from the heap for the decompressed data, copy the data there and return a buffer
+to the decompressed data.
+
+The method doesn't own the allocated heap memory for the decompressed data. It's a caller
+responsibility to deallocate the allocated memory.
+
+@internalComponent
+@param aInputResourceData Compressed data.
+@pre OpenL() is called.
+@leave - The file is corrupted.
+@leave - There is not enough memory for the decompressed data.
+*/
+Ptr8* RResourceFileImpl::DecompressUnicodeL(const Ptr8* aInputResourceData) const
+{
+	const TInt numberOfBytesInInput= aInputResourceData->GetLength();
+	assert(iSizeOfLargestResourceWhenCompletelyUncompressed>0);
+							
+	Ptr8* outputResourceData= new Ptr8(iSizeOfLargestResourceWhenCompletelyUncompressed);
+	if(NULL==outputResourceData || NULL==outputResourceData->GetPtr())
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+	
+	const TUint8* input= aInputResourceData->GetPtr();
+	TInt index=0;
+	
+	TBool decompressRun=ETrue;
+	while (1)
+	{
+		assert(index<numberOfBytesInInput);
+		
+		TInt runLength=input[index];
+		
+		// The run-length occupies a single byte if it is less than 128, 
+		// otherwise it occupies two bytes (in little-endian byte order), 
+		// with the most significant bit of the first byte set to non-zero 
+		//to indicate that the run-length occupies two bytes.
+		if (runLength & 0x80)
+		{
+			++index;
+			if (index>=numberOfBytesInInput)
+			{
+				std::string errMsg="Invalid Rsc File";
+				throw CResourceFileException(errMsg);
+			}
+			runLength &= ~0x80;
+			runLength <<= 8;
+			runLength |= input[index];
+		}
+		++index;
+		if (runLength>0)
+		{			
+			if (decompressRun)
+			{
+				AppendDecompressedUnicodeL(
+										outputResourceData,				
+										const_cast<unsigned char *>(input+index),
+										runLength);
+			}
+			else
+			{
+				assert(
+					(outputResourceData->GetLength() + runLength) <= 
+					iSizeOfLargestResourceWhenCompletelyUncompressed);
+				
+				memcpy((char*)(outputResourceData->GetPtr()+outputResourceData->GetLength()),(char*)(input+index),runLength);				
+				outputResourceData->UpdateLength(runLength);
+			}
+			index+=runLength;
+		}
+		if (index>numberOfBytesInInput)
+		{
+			std::string errMsg="Invalid Rsc File";
+			throw CResourceFileException(errMsg);
+		}
+		if (index>=numberOfBytesInInput)
+		{
+			break;
+		}
+			decompressRun=!decompressRun;
+	}	
+	return outputResourceData;
+}
+
+
+/** @internalComponent
+@return The first resource record.
+@leave - The file is corrupted.
+*/
+RResourceFileImpl::SSigRecord RResourceFileImpl::FirstRecordL() const
+{
+	// Added to support reading of rel 6.x resource files.
+	// rel 6.x files do not have signatures!
+	Ptr8* const firstResource=AllocReadL(1);
+
+	// Basic check to test if the signature is of the correct size.
+	if (firstResource->GetLength()!= sizeof(SSigRecord))
+	{
+		std::string errMsg="Invalid RSS Signature";
+		throw CResourceFileException(errMsg);
+	}
+	SSigRecord sigRecord = *reinterpret_cast<const SSigRecord*>(firstResource->GetPtr());
+	delete firstResource;
+	return sigRecord;
+}
+
+/** Initialises the offset value from the first resource.
+
+The function tests to catch cases where the first resource is not an RSS_SIGNATURE.
+It assumes that the first resource in the file consists of
+two 32-bit integers. The first integer contains the version number and
+the second is a self-referencing link whose value is the offset for
+the resources in the file, plus 1.This function must be called before
+calling Offset(), AllocReadL() or ReadL().
+
+@internalComponent
+@pre OpenL() is called.
+@leave if the file is corrupted.
+Some other error codes are possible too.
+*/
+void RResourceFileImpl::ConfirmSignatureL()
+{
+	// Added to support reading of rel 6.x resource files.
+	SSigRecord firstRecord=FirstRecordL();
+
+	// If the resource offset does not correspond to the first resource
+	// this is not a resource signature.
+	if ((firstRecord.offset & EIdBits) != 1)
+	{
+		std::string errMsg="Failed : Invalid RSS Signature";
+		throw CResourceFileException(errMsg);
+	}
+	iOffset=(firstRecord.offset & EOffsetBits);
+}
+
+/** The method will decomress the unicode data (aCompressedUnicode argument) and append
+the decompressed data to the end of aBuffer (aBuffer argument).
+
+@internalComponent
+@pre OpenL() is called.
+@param aBuffer Destination buffer.
+@param aCompressedUnicode Compressed unicode buffer.
+@leave - The file is corrupted.
+*/
+
+void RResourceFileImpl::AppendDecompressedUnicodeL(
+												   Ptr8* aBuffer,
+												   const TUint8*  aCompressedUnicode,
+												   const TInt& aLengthOfCompressedUnicode) const
+{
+
+	if (aLengthOfCompressedUnicode>0)
+	{
+		TUint8* startOfDecompressedUnicode= aBuffer->GetPtr() + aBuffer->GetLength();
+		
+		if (reinterpret_cast<TUint32>(startOfDecompressedUnicode) & 0x01)
+		{			
+			TUint8 padChar = 0xab;
+			memcpy(startOfDecompressedUnicode,&padChar,1);
+			++startOfDecompressedUnicode;
+			aBuffer->UpdateLength(1);
+		}
+		
+		const TInt maximumOutputLength= (
+			iSizeOfLargestResourceWhenCompletelyUncompressed - (aBuffer->GetLength()))/2; 
+		
+		TMemoryUnicodeSink decompressedUnicode(reinterpret_cast<TUint16*>(startOfDecompressedUnicode));
+		
+		TInt lengthOfDecompressedUnicode;
+		TInt numberOfInputBytesConsumed;
+		TUnicodeExpander unicodeExpander;
+		
+		unicodeExpander.ExpandL(decompressedUnicode,
+								aCompressedUnicode,
+								maximumOutputLength,
+								aLengthOfCompressedUnicode,
+								&lengthOfDecompressedUnicode,
+								&numberOfInputBytesConsumed);
+		TInt temp;
+		unicodeExpander.FlushL(decompressedUnicode,maximumOutputLength,temp);
+		lengthOfDecompressedUnicode+=temp;
+		aBuffer->UpdateLength(lengthOfDecompressedUnicode*2);
+		
+		assert(numberOfInputBytesConsumed == aLengthOfCompressedUnicode);		
+	}
+}
+
+/** Tests whether the resource file owns the specified resource id.
+
+The resource file owns the resource id if the most significant 20 bits
+of the resource id are zero or match the offset value as returned from
+a call to the Offset() member function or if the resource id is not out of range.
+
+@internalComponent
+@pre OpenL() is called.
+@param aResourceId The resource id to test.
+@return True, if the resource file owns the id, false otherwise.
+@leave - The file is corrupted.
+*/
+
+TBool RResourceFileImpl::OwnsResourceId(const TInt& aResourceId) const
+{ 
+	// Checks whether Rsc file owns the resource:
+	// does so if offset is 0, or matches that given, 
+	// and id is in index.
+
+	const TInt offset=(aResourceId & EOffsetBits);
+//	if ((offset!=0) && (offset!=iOffset))
+//		{
+//		return EFalse;
+//		}
+	
+	const TInt resourceIndex=(aResourceId & EIdBits)-1;
+	TInt numberOfResources=(iFlagsAndNumberOfResources & ~EAllFlags);
+	if (iFlagsAndNumberOfResources & EFlagGenerate_RSS_SIGNATURE_ForFirstUserResource)
+	{
+		assert(iFlagsAndNumberOfResources & EFlagDictionaryCompressed);
+		assert(iFlagsAndNumberOfResources & EFlagThirdUidIsOffset);
+		++numberOfResources;
+	}
+	if (iFlagsAndNumberOfResources & 
+		EFlagFirstResourceIsGeneratedBitArrayOfResourcesContainingCompressedUnicode)
+	{
+		assert(iFlagsAndNumberOfResources & EFlagDictionaryCompressed);
+		--numberOfResources;
+	}
+	return (resourceIndex >= 0) && (resourceIndex < numberOfResources);
+}
+
+TInt RResourceFileImpl::ReadL(
+							const TUint32& aFlags, 
+							TInt aPos,
+							TUint8* aData,
+							const TInt& aLength) 
+{
+	aPos += iExtra->iFileOffset;
+	
+	assert(aPos >= iExtra->iFileOffset);
+	assert(aLength >= 0);
+	assert((aPos + aLength) <= (iExtra->iFileOffset + iExtra->iFileSize));	
+	
+	// Seek to the offset specified by "aPos"
+	iResourceContents->seekg(aPos, std::ios_base::beg);
+	iResourceContents->read((char*)aData, aLength);	
+	return iResourceContents->gcount();
+}
+
+
+TInt RResourceFileImpl::ReadL(TInt aPos, TUint8* aData, const TInt& aLength) 
+{
+	return ReadL(iFlagsAndNumberOfResources & static_cast<TUint32>(EAllFlags),aPos,aData,aLength);
+}
+
+
+TInt RResourceFileImpl::LittleEndianTwoByteInteger(
+													const TUint8* aBuffer,
+													const TInt& aIndexOfFirstByte, TInt aLength) const
+{
+	assert((aIndexOfFirstByte + 1) < aLength);
+	return aBuffer[aIndexOfFirstByte] | (aBuffer[aIndexOfFirstByte+1]<<8);
+}
+
+
+/** Function to retrieve the header information of the rsc file and all the
+	resource index information in the rsc file. This function is created to
+	handle the common functionality in the two OpenL() method.
+@internalComponent
+@pre OpenL() is called.
+*/
+	
+void RResourceFileImpl::ReadHeaderAndResourceIndexL()
+{
+	SDictionaryCompressionData dictionaryCompressionData;
+		
+	TUidType uidType;
+	TInt length =0;
+	//dictionary-compressed resource files have a 21-byte header, 
+	//16 bytes of checked UIDs followed by a 1-byte field and two 2-byte fields
+	TUint8 header[21];
+	if(iExtra->iFileSize >= 16)
+	{
+		length = ReadL(0,header,Min((sizeof(header)/sizeof(header[0])),iExtra->iFileSize));
+		uidType=TCheckedUid(header, 16).UidType();
+
+		if (uidType[0].iUid==0x101f4a6b)
+		{
+			iFlagsAndNumberOfResources |= EFlagPotentiallyContainsCompressedUnicode;
+			assert(length >= 18);
+			iSizeOfLargestResourceWhenCompletelyUncompressed = LittleEndianTwoByteInteger(header,16+1,length);
+		}
+		else if (uidType[0].iUid==0x101f5010)
+		{
+			iFlagsAndNumberOfResources |=
+					EFlagPotentiallyContainsCompressedUnicode | EFlagDictionaryCompressed;
+			assert(length >= 18);
+			iSizeOfLargestResourceWhenCompletelyUncompressed = LittleEndianTwoByteInteger(header,16+1,length);
+		}
+		else if (uidType[0]!=TUid::Null())
+		{
+			std::string errMsg="Failed : Not Supported. Invalid Registration File.";
+			throw CResourceFileException(errMsg);
+		}
+		//the "signature" of Calypso's resource files
+		else if (LittleEndianTwoByteInteger(header,0,length)==4) 
+		{
+			iFlagsAndNumberOfResources |= EFlagDictionaryCompressed | EFlagCalypsoFileFormat;
+			iSizeOfLargestResourceWhenCompletelyUncompressed = LittleEndianTwoByteInteger(header,8,length);
+		}
+	}
+	
+	//It seems that the following AssertDebL() call never fails, 
+	//because LittleEndianTwoByteIntegerL always 
+	//returns zero or positive value.
+	assert(iSizeOfLargestResourceWhenCompletelyUncompressed>=0);
+	TInt numberOfResources=0;
+	Ptr8* bitArrayOfResourcesContainingCompressedUnicode=NULL;
+	if (iFlagsAndNumberOfResources & EFlagDictionaryCompressed)
+	{
+		if (iFlagsAndNumberOfResources & EFlagCalypsoFileFormat)
+		{
+			assert(length > 10);
+			numberOfResources=LittleEndianTwoByteInteger(header,2,length);
+			const TInt numberOfBitsUsedForDictionaryTokens = header[10];
+			const TInt numberOfDictionaryEntries =
+					(1 << numberOfBitsUsedForDictionaryTokens) - header[5];
+			assert(numberOfDictionaryEntries >= 0);
+			// "+2" because the first entry in the dictionary-index in this file format 
+			//is the number of bits from the start of the dictionary data to the start 
+			//of the first dictionary entry which is always zero, and thus unnecessary
+			const TInt startOfDictionaryData=4+7+2; 
+			// "+2" because the first entry in the resource-index in this file format is 
+			//the number of bits from the start of the resource data to the start of the 
+			//first resource which is always zero, and thus unnecessary
+			const TInt startOfResourceIndex=LittleEndianTwoByteInteger(header,6,length)+2; 
+			assert(startOfResourceIndex >= 0);
+			dictionaryCompressionData.iStartOfDictionaryData=
+							startOfDictionaryData+(numberOfDictionaryEntries*2);
+			dictionaryCompressionData.iStartOfDictionaryIndex=startOfDictionaryData;
+			dictionaryCompressionData.iNumberOfDictionaryEntries=numberOfDictionaryEntries;
+			dictionaryCompressionData.iStartOfResourceData=
+							startOfResourceIndex+(numberOfResources*2);
+			dictionaryCompressionData.iStartOfResourceIndex=startOfResourceIndex;
+			dictionaryCompressionData.iNumberOfBitsUsedForDictionaryTokens=
+							numberOfBitsUsedForDictionaryTokens;
+			
+			if ((iFlagsAndNumberOfResources & static_cast<TUint>(EFlagIsRomFile)) == 0)
+			{
+				// attempt to cache dictionary index
+				// allocate and populate the dictionary index buffer
+				dictionaryCompressionData.iCachedDictionaryIndex = new TUint16[numberOfDictionaryEntries];
+				if (dictionaryCompressionData.iCachedDictionaryIndex != 0)
+				{
+					TInt len = numberOfDictionaryEntries * 2;
+
+					Ptr8* ptr8 = new Ptr8(numberOfDictionaryEntries * 2);
+					if(NULL==ptr8 || NULL==ptr8->GetPtr())
+					{
+						std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+						throw CResourceFileException(errMsg);
+					}
+					ptr8->UpdateLength(numberOfDictionaryEntries * 2);
+					ReadL(
+						iFlagsAndNumberOfResources & static_cast<TUint>(EAllFlags), 	// aFlags
+						startOfDictionaryData,											// aPos
+						(TUint8*)ptr8->GetPtr(),
+						len);															// aLength
+
+					memcpy((TUint8*)dictionaryCompressionData.iCachedDictionaryIndex, ptr8->GetPtr(), len);
+					if(NULL != ptr8)
+					{
+						delete ptr8;
+					}
+				}
+			}	// if (iFlagsAndNumberOfResources & EFlagIsRomFile)
+		}
+		else
+		{
+			assert(length==16+1+2+2);
+			const TUint firstByteAfterUids=header[16];
+			if (firstByteAfterUids & 0x80)
+			{
+				// this flag is only set if the resource file is dictionary-compressed
+				iFlagsAndNumberOfResources |= EFlagThirdUidIsOffset; 
+			}
+			if (firstByteAfterUids & 0x40)
+			{
+				// this flag is only set if the resource file is dictionary-compressed
+				iFlagsAndNumberOfResources |= EFlagGenerate_RSS_SIGNATURE_ForFirstUserResource; 
+			}
+			if (firstByteAfterUids & 0x20)
+			{
+				iFlagsAndNumberOfResources |=
+					EFlagFirstResourceIsGeneratedBitArrayOfResourcesContainingCompressedUnicode;
+			}
+			dictionaryCompressionData.iStartOfResourceData =	LittleEndianTwoByteInteger(header,16+1+2,length);
+			TUint8 temp[2];
+			length = ReadL((iExtra->iFileSize)-2,temp,2);
+	
+			const TInt numberOfBitsOfResourceData = LittleEndianTwoByteInteger(temp,0,length);
+			dictionaryCompressionData.iStartOfResourceIndex=
+						dictionaryCompressionData.iStartOfResourceData+
+						((numberOfBitsOfResourceData+7)/8);
+			numberOfResources=(iExtra->iFileSize-dictionaryCompressionData.iStartOfResourceIndex)/2;
+			dictionaryCompressionData.iStartOfDictionaryData=16+5;
+			if ((numberOfResources>0) && 
+				!(iFlagsAndNumberOfResources &
+				EFlagFirstResourceIsGeneratedBitArrayOfResourcesContainingCompressedUnicode))
+			{
+				const TInt lengthOfBitArrayInBytes=(numberOfResources+7)/8;
+				bitArrayOfResourcesContainingCompressedUnicode=	new Ptr8(lengthOfBitArrayInBytes);
+				if(NULL==bitArrayOfResourcesContainingCompressedUnicode || NULL==bitArrayOfResourcesContainingCompressedUnicode->GetPtr())
+				{
+					std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+					throw CResourceFileException(errMsg);
+				}
+				bitArrayOfResourcesContainingCompressedUnicode->UpdateLength(lengthOfBitArrayInBytes);
+				TUint8* asWritable = bitArrayOfResourcesContainingCompressedUnicode->GetPtr();
+				ReadL(16+5,asWritable,lengthOfBitArrayInBytes);
+				dictionaryCompressionData.iStartOfDictionaryData+=lengthOfBitArrayInBytes;
+			}
+			length = ReadL(dictionaryCompressionData.iStartOfResourceData-2,temp,2);
+			const TInt numberOfBitsOfDictionaryData=LittleEndianTwoByteInteger(temp,0,length);
+			dictionaryCompressionData.iStartOfDictionaryIndex=
+						dictionaryCompressionData.iStartOfDictionaryData+
+						((numberOfBitsOfDictionaryData+7)/8);
+			dictionaryCompressionData.iNumberOfDictionaryEntries=
+						(dictionaryCompressionData.iStartOfResourceData-
+						dictionaryCompressionData.iStartOfDictionaryIndex)/2;
+			//the bottom 3 bits of firstByteAfterUids stores the number of bits used for 
+			//dictionary tokens as an offset from 3, e.g. if 2 is stored in these three bits 
+			//then the number of bits per dictionary token would be 3+2=5 - this allows a 
+			//range of 3-11 bits per dictionary token (the maximum number of dictionary 
+			//tokens therefore ranging from 8-2048) - the spec currently only supports 5-9
+			//bits per dictionary token, however
+			dictionaryCompressionData.iNumberOfBitsUsedForDictionaryTokens=
+						3 + (firstByteAfterUids & 0x07); 
+			if ((numberOfResources>0) && 
+				(iFlagsAndNumberOfResources &
+				EFlagFirstResourceIsGeneratedBitArrayOfResourcesContainingCompressedUnicode))
+			{
+				Ptr16* nulldesc = new Ptr16(1);
+				if(NULL==nulldesc || NULL==nulldesc->GetPtr())
+				{
+					std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+					throw CResourceFileException(errMsg);
+				}
+				*(nulldesc->GetPtr()) = 0;
+				nulldesc->UpdateLength(0);
+				
+				bitArrayOfResourcesContainingCompressedUnicode=
+				DictionaryDecompressedResourceDataL(
+											0,
+											iFlagsAndNumberOfResources & static_cast<TUint>(EAllFlags),
+											dictionaryCompressionData,
+											nulldesc);
+				if(NULL != nulldesc)
+				{
+					delete nulldesc;
+				}
+			}
+		}
+	}
+	else
+	{
+		assert((iExtra->iFileSize + iExtra->iFileOffset) > 2);
+		// This format of resource file is likely to be used for non-ROM resource files, 
+		//so cache the resource-index (in iIndex) to minimize disk access.
+		// Ignore the flags in non-dictionary-compressed resource files - they are to 
+		//be used only by a dictionary-compressing program. 
+		const TInt KMaximumNumberOfBytesCached=256;
+		TUint8 cache[KMaximumNumberOfBytesCached];
+		const TInt numberOfBytesCached=Min(iExtra->iFileSize,KMaximumNumberOfBytesCached);
+		TInt len = ReadL(iExtra->iFileSize-numberOfBytesCached,cache,numberOfBytesCached);
+		assert(len==numberOfBytesCached);
+		const TInt positionOfStartOfIndex=
+					((cache[numberOfBytesCached-1]<<8) | cache[numberOfBytesCached-2]);
+		const TInt numberOfBytesOfIndex=iExtra->iFileSize-positionOfStartOfIndex;
+		assert(numberOfBytesOfIndex%2==0);
+		assert(numberOfBytesOfIndex>=0);
+		const TInt numberOfBytesOfIndexStillToRetrieve=
+					numberOfBytesOfIndex-numberOfBytesCached;
+		if (numberOfBytesOfIndexStillToRetrieve<=0)
+		{
+			Ptr8* indexAsBinaryBuffer = new Ptr8(numberOfBytesOfIndex); 
+			if(NULL==indexAsBinaryBuffer || NULL==indexAsBinaryBuffer->GetPtr())
+			{
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+
+			indexAsBinaryBuffer->UpdateLength(numberOfBytesOfIndex);
+			BufCpy8(indexAsBinaryBuffer->GetPtr(), cache+(numberOfBytesCached - numberOfBytesOfIndex) , numberOfBytesOfIndex);
+
+			iIndex = new Ptr16(numberOfBytesOfIndex/2); 
+			if(NULL==iIndex || NULL==iIndex->GetPtr())
+			{
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+
+			MemCopy(CONST_CAST(TUint16*,(TUint16*)iIndex->GetPtr()),indexAsBinaryBuffer->GetPtr(),numberOfBytesOfIndex); 
+			iIndex->UpdateLength(numberOfBytesOfIndex/2);
+
+			if(NULL != indexAsBinaryBuffer)
+			{
+				delete indexAsBinaryBuffer;
+			}
+		}
+		else
+		{
+			Ptr16* const index=new Ptr16(numberOfBytesOfIndex/2);
+			if(NULL==index || NULL==index->GetPtr())
+			{
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+			index->UpdateLength(numberOfBytesOfIndex/2);
+				
+			Ptr8* indexAsWritableBinaryBuffer = new Ptr8(numberOfBytesOfIndex);
+			if(NULL==indexAsWritableBinaryBuffer || NULL==indexAsWritableBinaryBuffer->GetPtr())
+			{
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+			indexAsWritableBinaryBuffer->UpdateLength(numberOfBytesOfIndexStillToRetrieve);
+				
+			ReadL(positionOfStartOfIndex,indexAsWritableBinaryBuffer->GetPtr(),
+											numberOfBytesOfIndexStillToRetrieve);
+			assert(indexAsWritableBinaryBuffer->GetLength()==numberOfBytesOfIndexStillToRetrieve);
+			indexAsWritableBinaryBuffer->Append(cache, len);
+			indexAsWritableBinaryBuffer->UpdateLength(len);
+			assert(indexAsWritableBinaryBuffer->GetLength()==numberOfBytesOfIndex);
+			assert(indexAsWritableBinaryBuffer->GetLength()==index->GetLength()*2);
+			memcpy((TUint8*)index->GetPtr(), indexAsWritableBinaryBuffer->GetPtr() , numberOfBytesOfIndex);
+	
+			iIndex=index;
+			if(NULL != indexAsWritableBinaryBuffer)
+			{
+				delete indexAsWritableBinaryBuffer;
+			}
+		}
+			
+		//"-1" because the last thing in the index (which is in fact the last thing in the 
+		//file itself) is the position of the start of the index which is therefore not 
+		//pointing to a resource
+		numberOfResources=(numberOfBytesOfIndex/2) - 1; 
+		if ((numberOfResources>0) && 
+			(iFlagsAndNumberOfResources & EFlagPotentiallyContainsCompressedUnicode))
+		{
+			const TInt lengthOfBitArrayInBytes=(numberOfResources+7)/8;
+			bitArrayOfResourcesContainingCompressedUnicode= new Ptr8(lengthOfBitArrayInBytes);
+			if(NULL==bitArrayOfResourcesContainingCompressedUnicode || NULL==bitArrayOfResourcesContainingCompressedUnicode->GetPtr())
+			{
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+			bitArrayOfResourcesContainingCompressedUnicode->UpdateLength(lengthOfBitArrayInBytes);
+			TUint8* bitArray = bitArrayOfResourcesContainingCompressedUnicode->GetPtr();
+			//"16+1+2": 16 bytes of checked-UID + 1 byte of flags (these flags are for a 
+			//dictionary-compressing program's use rather than directly for Bafl's use, 
+			//so we ignore them) + 2 bytes containing the size of the largest resource when 
+			//uncompressed
+			ReadL(16+1+2,bitArray,lengthOfBitArrayInBytes); 
+		}
+	}
+	assert((numberOfResources & EAllFlags)==0);
+	assert((iFlagsAndNumberOfResources & ~EAllFlags)==0);
+	iFlagsAndNumberOfResources |= (numberOfResources & ~EAllFlags);
+	iExtra->iUidType = uidType;
+	iExtra->iBitArrayOfResourcesContainingCompressedUnicode = bitArrayOfResourcesContainingCompressedUnicode;
+	iExtra->iBitArrayOfResourcesContainingCompressedUnicode->SetLength(bitArrayOfResourcesContainingCompressedUnicode->GetLength());
+	iExtra->iDictionaryCompressionData = dictionaryCompressionData;
+	//iOffset is set by calling ConfirmSignatureL
+	assert(iOffset==0);
+}
+
+
+/** @internalComponent
+@pre OpenL() is called.
+@leave KErrCorrupt The file is corrupted.
+@leave KErrNoMemory There is not enough memory for the decompressed data.
+Some other error codes are possible too.
+*/
+Ptr8* RResourceFileImpl::DictionaryDecompressedResourceDataL(
+			TInt aResourceIndex,
+			TUint aFlags,
+			const SDictionaryCompressionData& aDictionaryCompressionData,
+			const Ptr16* aIndex) const
+{
+	if (aFlags & EFlagDictionaryCompressed)
+	{
+		assert(iSizeOfLargestResourceWhenCompletelyUncompressed>0);
+		Ptr8* const outputResourceData = new Ptr8(iSizeOfLargestResourceWhenCompletelyUncompressed);
+		if(NULL==outputResourceData || NULL==outputResourceData->GetPtr())
+		{
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+
+		Ptr8* asWritable = outputResourceData;
+		std::vector<RDictionaryCompressionBitStream> stackOfDictionaryCompressionBitStreams;
+		AppendDictionaryCompressionBitStreamL(
+						stackOfDictionaryCompressionBitStreams,
+						aFlags,
+						aDictionaryCompressionData,
+						aDictionaryCompressionData.iStartOfResourceData,
+						aDictionaryCompressionData.iStartOfResourceIndex,
+						aResourceIndex);
+		const TBool calypsoFileFormat=(aFlags & EFlagCalypsoFileFormat);
+		while(1)
+		{
+			const TInt indexOfTopBitStream=stackOfDictionaryCompressionBitStreams.size()-1;
+			assert(indexOfTopBitStream>=-1);
+			if (indexOfTopBitStream<0)
+			{
+				break;
+			}
+			RDictionaryCompressionBitStream& dictionaryCompressionBitStream=
+							stackOfDictionaryCompressionBitStreams[indexOfTopBitStream];
+
+			while(1)
+			{
+				if (dictionaryCompressionBitStream.EndOfStreamL())
+				{
+					dictionaryCompressionBitStream.Close();
+					stackOfDictionaryCompressionBitStreams.erase(indexOfTopBitStream);
+					break;
+				}
+				const TInt indexOfDictionaryEntry=
+								dictionaryCompressionBitStream.IndexOfDictionaryEntryL();
+				if (indexOfDictionaryEntry<0)
+				{
+					dictionaryCompressionBitStream.ReadL(asWritable,calypsoFileFormat);
+				}
+				else
+				{
+					AppendDictionaryCompressionBitStreamL(
+											stackOfDictionaryCompressionBitStreams,
+											aFlags,
+											aDictionaryCompressionData,
+											aDictionaryCompressionData.iStartOfDictionaryData,
+											aDictionaryCompressionData.iStartOfDictionaryIndex,
+											indexOfDictionaryEntry);
+					break;
+				}
+			}
+		}
+		stackOfDictionaryCompressionBitStreams.clear();
+		return outputResourceData;
+	}
+
+	assert(aResourceIndex < aIndex->GetLength());
+
+	const TInt positionOfResourceData=(*aIndex)[aResourceIndex];
+	const TInt numberOfBytes=(*aIndex)[aResourceIndex+1]-positionOfResourceData;
+
+	assert(numberOfBytes >= 0);
+	Ptr8* const outputResourceData= new Ptr8(numberOfBytes);
+	if(NULL==outputResourceData || NULL==outputResourceData->GetPtr())
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+
+	TUint8* asWritable = outputResourceData->GetPtr();
+	ReadL(aFlags,positionOfResourceData,asWritable,numberOfBytes);
+	outputResourceData->UpdateLength(numberOfBytes);
+		
+	return outputResourceData;
+		
+}
+	
+
+void RResourceFileImpl::AppendDictionaryCompressionBitStreamL(
+			std::vector<RDictionaryCompressionBitStream>& aStackOfDictionaryCompressionBitStreams,
+			TUint aFlags,
+			const SDictionaryCompressionData& aDictionaryCompressionData,
+			TInt aStartOfBitData,
+			TInt aStartOfIndex,
+			TInt aIndexEntry) const
+{
+	const TBool isRomFile=(aFlags & static_cast<TUint>(EFlagIsRomFile));
+	TUint8 temp[4];
+	TInt length = 0;
+	assert(aIndexEntry>=0);
+	TInt offsetToFirstBit;
+	TInt offsetOnePastLastBit;
+	if (	aDictionaryCompressionData.iStartOfDictionaryIndex == aStartOfIndex
+		&&	aDictionaryCompressionData.iCachedDictionaryIndex != 0)
+	{
+		assert(!isRomFile);
+		// indices start at 1
+		offsetToFirstBit = (aIndexEntry <= 0)
+			?	0
+			:	aDictionaryCompressionData.iCachedDictionaryIndex[aIndexEntry-1];
+		offsetOnePastLastBit = aDictionaryCompressionData.iCachedDictionaryIndex[aIndexEntry];
+	}
+	else
+	{
+		TInt len = ReadL(aFlags,aStartOfIndex+((aIndexEntry-1)*2),temp,4);
+		offsetToFirstBit=(aIndexEntry > 0) ? LittleEndianTwoByteInteger(temp,0,len) : 0;
+		offsetOnePastLastBit=LittleEndianTwoByteInteger(temp,2,len);
+	}
+	TInt rsc_file_size = iExtra->iFileOffset + iExtra->iFileSize;
+	TInt offset_first = offsetToFirstBit / 8 + iExtra->iFileOffset;
+	assert(offset_first < rsc_file_size);
+	TInt offset_last = offsetOnePastLastBit / 8 + iExtra->iFileOffset;
+	assert(offset_last <= rsc_file_size);
+	TUint8* buffer = NULL;
+	TInt start_pos = 0;
+	if (isRomFile)
+	{
+		TInt startOfBitData = aStartOfBitData + iExtra->iFileOffset;
+		assert(startOfBitData < rsc_file_size);
+		buffer = startOfBitData; 
+	}
+	else
+	{
+		const TInt offsetToByteContainingFirstBit=offsetToFirstBit/8;
+		const TInt offsetToOnePastByteContainingLastBit=((offsetOnePastLastBit-1)/8)+1;
+		const TInt numberOfBytesToLoad=
+							offsetToOnePastByteContainingLastBit-offsetToByteContainingFirstBit;
+		assert(numberOfBytesToLoad >= 0);
+		buffer=new TUint8[numberOfBytesToLoad];
+		if(NULL==buffer)
+		{	
+			std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+			throw CResourceFileException(errMsg);
+		}
+
+		if( iExtra->iDictionaryCompressionData.iCachedResourceBuffer == 0)
+		{
+			iExtra->iDictionaryCompressionData.iCachedResourceBuffer=new TUint8[rsc_file_size]; // reserver buffer for whole file
+			if(NULL==iExtra->iDictionaryCompressionData.iCachedResourceBuffer)
+			{	
+			 	delete buffer; // buffer deleted in RDictionaryCompressionBitStream::close
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+			
+			Ptr8* JKasWritable = new Ptr8(rsc_file_size); 
+			if(NULL==JKasWritable || NULL == JKasWritable->GetPtr())
+			{	
+			 	delete buffer; // buffer deleted in RDictionaryCompressionBitStream::close
+				std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+				throw CResourceFileException(errMsg);
+			}
+			JKasWritable->UpdateLength(rsc_file_size);
+
+			try {
+				length = ReadL(0,(TUint8*)JKasWritable->GetPtr(),	rsc_file_size);
+			}
+			catch(...)
+			{
+			 	delete buffer; // buffer deleted in RDictionaryCompressionBitStream::close
+				std::string errMsg= "Failed : Error in Reading File.";
+				throw CResourceFileException(errMsg);
+			}
+
+			BufCpy8(iExtra->iDictionaryCompressionData.iCachedResourceBuffer, JKasWritable->GetPtr(), length);
+			if(NULL != JKasWritable)
+			{
+				delete JKasWritable;
+			}
+		}
+		start_pos = aStartOfBitData + offsetToByteContainingFirstBit + iExtra->iFileOffset;
+		assert(start_pos < rsc_file_size);
+		assert((start_pos + numberOfBytesToLoad) <= rsc_file_size);
+		const TInt numberOfBitsFromStartOfBitDataToFirstLoadedByte=
+											offsetToByteContainingFirstBit*8;
+		offsetToFirstBit-=numberOfBitsFromStartOfBitDataToFirstLoadedByte;
+		offsetOnePastLastBit-=numberOfBitsFromStartOfBitDataToFirstLoadedByte;
+	
+		MemCopy( buffer, iExtra->iDictionaryCompressionData.iCachedResourceBuffer + start_pos,  numberOfBytesToLoad);
+	}
+	RDictionaryCompressionBitStream stream;
+	stream.OpenL(
+				aDictionaryCompressionData.iNumberOfBitsUsedForDictionaryTokens,
+				offsetToFirstBit,
+				offsetOnePastLastBit,
+				!isRomFile,
+				buffer);
+	try {
+		aStackOfDictionaryCompressionBitStreams.push_back(stream);
+	}
+	catch(...)
+	{
+	 	delete buffer; // buffer deleted in RDictionaryCompressionBitStream::close
+		std::string errMsg= "Failed : Error in Reading File.";
+		throw CResourceFileException(errMsg);
+	}
+	if (!isRomFile)
+	{
+		 delete buffer; // buffer deleted in RDictionaryCompressionBitStream::close
+	}
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/barscimpl.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,287 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/** 
+* @file barscimpl.h
+*
+* @internalComponent
+* @released
+*/
+
+#ifndef __BARSCIMPL_H__
+#define __BARSCIMPL_H__
+
+#include <string>
+#include "commontypes.h"
+
+//Forward declarations
+struct SDictionaryCompressionData;
+class RDictionaryCompressionBitStream;
+/** 
+Accesses a resource file and reads the resource data into a buffer.
+It is the implementation class for CResourceFile class.
+*/
+class RResourceFileImpl
+	{
+
+public:
+	RResourceFileImpl();
+	~RResourceFileImpl();
+	/** 
+	Opens the resource file reader.
+	The resource file reader must be opened before reading resources.
+	@param aName name of the RSC file.
+	@param aFileOffset RSC file offset 
+	@param aFileSize RSC file size
+	*/
+	void OpenL(const std::string& aName, TUint32 aFileOffset=0, TInt aFileSize=0);
+	/** 
+	Reads a resource after allocating heap memory for it.
+	Ownership of the allocated heap is passes to the caller who must 
+	free it.	
+	@param aResourceId The numeric id of the resource to be read.
+	@return Pointer to the heap containing the resource.
+	*/
+	Ptr8* AllocReadL(const TInt& aResourceId);
+
+	/** Initialises the offset value from the first resource.
+
+	The function tests to catch cases where the first resource is not an RSS_SIGNATURE.
+	It assumes that the first resource in the file consists of
+	two 32-bit integers. The first integer contains the version number and
+	the second is a self-referencing link whose value is the offset for
+	the resources in the file, plus 1.This function must be called before
+	calling Offset(), AllocReadL(), AllocReadLC() or ReadL().
+	*/
+	void ConfirmSignatureL();
+	
+	/** 
+	Tests whether the resource file owns the specified resource id.
+	@param aResourceId The resource id to test.
+	@return True, if the resource file owns the id, false otherwise.
+	*/
+	TBool OwnsResourceId(const TInt& aResourceId) const;
+
+	/** 
+	Function to read specified bytes from the RSC file
+	@param aPos Offset from where to begin reading
+	@param aData Buffer to store read values
+	@param aLength Length of the bytes to be read.
+	@return Length of the bytes to be read.
+	*/
+	TInt ReadL(TInt aPos,TUint8* aData,const TInt& aLength);
+
+	TUidType UidType() const;
+
+
+private:
+	struct SSigRecord
+		{
+		TInt signature;
+		TInt offset;
+		};
+  enum
+		{
+		EFlagIsRomFile																=0x80000000,
+		EFlagPotentiallyContainsCompressedUnicode									=0x40000000,
+		EFlagDictionaryCompressed													=0x20000000,
+		EFlagThirdUidIsOffset														=0x10000000,
+		EFlagGenerate_RSS_SIGNATURE_ForFirstUserResource							=0x08000000,
+		EFlagFirstResourceIsGeneratedBitArrayOfResourcesContainingCompressedUnicode	=0x04000000,
+		EFlagCalypsoFileFormat														=0x02000000,
+		EFlagIsBufferRscFile														=0x01000000,
+		EAllFlags																	=0xff000000
+		};
+	enum
+		{
+		EOffsetBits	=0xfffff000,
+		EIdBits		=0x00000fff
+		};
+
+	class TExtra;
+
+
+private:	
+	/** 
+	Function to read specified bytes from the RSC file
+	@param aFlags Integer conatainig no of resource and status flags.
+	@param aPos Offset from where to begin reading
+	@param aData Buffer to store read values
+	@param aLength Length of the bytes to be read.
+	@return Length of the bytes to be read.
+	*/
+	TInt ReadL(const TUint32& aFlags, TInt aPos, TUint8* aData, const TInt& aLength);
+
+	/** @internalComponent
+	@return The first resource record.
+	@panic Some BAFL panic codes, if the file is corrupted.
+	@leave KErrCorrupt The file is corrupted.
+	Some other error codes are possible too.
+	The method could panic or leave depending on the state of
+	iAssertObj member of RResourceFileImpl::TExtra class. */
+	SSigRecord FirstRecordL() const;
+
+	
+	/** 
+	Function to retrieve the header and 
+	resource index information of the RSC file.
+	*/
+	void ReadHeaderAndResourceIndexL();
+	
+	/** 
+	The method will decomress the unicode data (aCompressedUnicode argument) and append
+	the decompressed data to the end of aBuffer (aBuffer argument).
+
+	@param aBuffer Destination buffer.
+	@param aCompressedUnicode Pointer to compressed unicode data.
+	@param aLengthOfCompressedUnicode Length of compressed unicode data.
+	*/
+	void AppendDecompressedUnicodeL(
+								Ptr8* aBuffer,
+								const TUint8*  aCompressedUnicode,
+								const TInt& aLengthOfCompressedUnicode) const;
+	/** 
+	The method will decompress the unicode data (aInputResourceData argument), allocate enough
+	memory from the heap for the decompressed data, copy the data there and return a pointer
+	to the decompressed data.
+	The method doesn't own the allocated heap memory for the decompressed data. It's a caller
+	responsibility to deallocate the allocated memory.
+	@param aInputResourceData Compressed data.
+	@return Pointer to decompressed data 
+	*/
+	Ptr8* DecompressUnicodeL(const Ptr8* aInputResourceData) const;
+
+
+	/**
+	The method will decompress the dictionary compressed data, allocate enough
+	memory from the heap for the decompressed data, copy the data there and return a pointer
+	to the decompressed data.
+	The method doesn't own the allocated heap memory for the decompressed data. It's a caller
+	responsibility to deallocate the allocated memory.
+	@pre OpenL() is called.
+	@leave KErrCorrupt The file is corrupted.
+	@leave KErrNoMemory There is not enough memory for the decompressed data.
+	Some other error codes are possible too.
+	*/
+	Ptr8* DictionaryDecompressedResourceDataL(
+								TInt aResourceIndex,
+								TUint aFlags,
+								const SDictionaryCompressionData& aDictionaryCompressionData,
+								const Ptr16* aIndex) const;
+
+
+	/** 
+	The method will decomress the dictionary compressed data (aDictionaryCompressionData argument) and append
+	the decompressed data to the end of std::vector<RDictionaryCompressionBitStream> 
+	(aStackOfDictionaryCompressionBitStreams argument).
+	*/
+	void AppendDictionaryCompressionBitStreamL(
+								std::vector<RDictionaryCompressionBitStream>& aStackOfDictionaryCompressionBitStreams,
+								TUint aFlags,
+								const SDictionaryCompressionData& aDictionaryCompressionData,
+								TInt aStartOfBitData,
+								TInt aStartOfIndex,
+								TInt aIndexEntry) const;
+	
+	/**
+	Get the two bytes(in Little Endian format) from the specified buffer
+	@param aBuffer Buffer address from which 2-bytes are to be achieved.
+	@param aIndexOfFirstByte Offset of the first byte to be retrieved from the
+           buffer.
+	@return 2-bytes read from the buffer.
+	*/
+	
+	TInt LittleEndianTwoByteInteger(const TUint8* aBuffer,const TInt& aIndexOfFirstByte,TInt aLength) const;
+
+
+private:
+	std::ifstream* iResourceContents;	
+	TInt iSizeOfLargestResourceWhenCompletelyUncompressed;
+	//basically an array of (unsigned) 16-bit file-positions - 
+	//this is only used for non-dictionary-compressed resource files
+	Ptr16* iIndex; 
+
+	//the position of this member in the class is exposed because RResourceFile::Offset() is 
+	//an inline function accessing "iOffset". RResourceFileImpl is an implementation class for
+	//RResourceFile class. The "iOffset" offset from the beginning of the class must be exactly
+	//12 bytes.
+	TInt iOffset; 
+	TExtra* iExtra;
+	TUint32 iFlagsAndNumberOfResources;
+	};
+
+
+struct SDictionaryCompressionData
+	{
+ 	inline SDictionaryCompressionData() :
+		iStartOfDictionaryData(0),
+		iStartOfDictionaryIndex(0),
+		iNumberOfDictionaryEntries(0),
+		iStartOfResourceData(0),
+		iStartOfResourceIndex(0),
+		iNumberOfBitsUsedForDictionaryTokens(0), 
+		iCachedDictionaryIndex(0),
+		iCachedResourceBuffer(0)// = NULL;
+		{
+		}
+	TInt iStartOfDictionaryData;
+	TInt iStartOfDictionaryIndex;
+	TInt iNumberOfDictionaryEntries;
+	TInt iStartOfResourceData;
+	TInt iStartOfResourceIndex;
+	TInt iNumberOfBitsUsedForDictionaryTokens;
+	TUint16* iCachedDictionaryIndex;
+	TUint8* iCachedResourceBuffer;
+	
+	};
+
+
+/** 
+Stores the RSC filesize, offset and the bit-array 
+representing resources containing compressed unicode.
+*/
+class RResourceFileImpl::TExtra
+	{
+
+public:
+	TExtra();
+	~TExtra();
+	/**
+	Finds whether the specified resource contain compressed unicode
+	@param aRscIdx Resource Index
+	@return Status of whether the resource is actually present or not.
+	*/
+	TInt32 ContainsCompressedUnicode(TInt& aRscIdx, TBool aFirstRscIsGen) const;
+
+private:
+	// Prevent default copy constructor
+	TExtra(const TExtra&);
+	// Prevent default "=" operator
+	TExtra& operator=(const TExtra&);
+
+public:
+	// RSC file UID
+	TUidType iUidType;
+	// An array of bits, one for each resource in the resource file
+	Ptr8* iBitArrayOfResourcesContainingCompressedUnicode;
+	SDictionaryCompressionData iDictionaryCompressionData;
+	// Offset of RSC chunk
+	TInt iFileOffset;	
+	// RSC file size 
+	TUint32 iFileSize;		
+	};
+
+
+#endif//__BARSCIMPL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/barsread2.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,346 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Resource reader
+// 
+/** 
+* @file barsread2.cpp
+*
+* @internalComponent
+* @released
+*/
+#include <iostream>
+#include <cassert>
+#include "barsc2.h"
+#include "barsread2.h"
+#include "barsreadimpl.h"
+
+/** It creates the implementation in place - iImpl array,
+and sets the default.
+*/
+RResourceReader::RResourceReader() :
+	iRscBuffer(NULL)
+	{
+	new (iImpl) TResourceReaderImpl;
+	}
+
+/** The method calls RResourceReader::Close() method to release 
+allocated by the instance resources.
+*/
+RResourceReader::~RResourceReader()
+	{
+	Close();
+	}
+
+/** 
+Sets the buffer containing the resource data.
+
+The current position within the buffer is set to the start of the buffer so 
+that subsequent calls to the interpreting functions, for example ReadInt8L(), 
+start at the beginning of this buffer.
+@param aRscFile A pointer to the CResourceFile object, used as a resource data supplier.
+@param aResourceId Numeric id of the resource to be read.
+*/
+void RResourceReader::OpenL(CResourceFile* aRscFile, TInt aResourceId)
+{
+	if (aRscFile)
+	{
+		Close();
+		iRscBuffer = aRscFile->AllocReadL(aResourceId);
+		Impl()->SetBuffer(iRscBuffer);
+	}
+	else
+	{
+		std::string errMsg="Failed : Invalid Argument : CResourceFile* ";
+		throw CResourceFileException(errMsg);
+	}
+}
+
+/** 
+Destroys the buffer containing the resource data.
+
+Open() method should be called if you want to set
+the buffer and current position again.
+
+If a one or more copies of the same RResourceReader object exist - they share the same 
+resource data buffer. So destroying the RResourceReader object you will destroy the
+shared resource data buffer.
+
+@post Buffer pointer is set to NULL.
+@post Buffer current position pointer is set to NULL. 
+*/
+void RResourceReader::Close()
+	{
+	delete iRscBuffer;
+	iRscBuffer = NULL;
+	Impl()->ResetBuffer();
+	}
+
+/** Interprets the data at the current buffer position as leading byte count data 
+and constructs an 8 bit non modifiable pointer to represent this data.
+
+The data is interpreted as:
+
+a byte value defining the number of text characters or the length of binary 
+data (the resource string/binary data length is limited to 255 characters max)
+
+followed by:
+
+the 8 bit text characters or binary data.
+
+If the value of the leading byte is zero, calling Length() on the returned 
+PtrC8 returns zero.
+
+The current position within the resource buffer is updated.
+
+Use this explicit 8 bit variant when the resource contains binary data. If 
+the resource contains text, then use the build independent variant ReadTPtrCL().
+
+In general, this type of resource data corresponds to one of the following:
+
+a LTEXT type in a resource STRUCT declaration.
+
+a variable length array within a STRUCT declaration which includes the LEN 
+BYTE keywords.
+
+@pre Open() is called to initialize RResourceReader data members.
+@return 8bit non modifiable pointer representing
+the data following the leading byte count at the
+current position within the resource buffer.
+@post Current buffer position is updated.
+@leave KErrEof The new buffer position is beyond the buffer end. */
+PtrC8* RResourceReader::ReadTPtrC8L()
+	{
+	return Impl()->ReadTPtrC8L();
+	}
+
+/** Interprets the data at the current buffer position as leading byte count data 
+and constructs a 16 bit non modifiable pointer to represent this data.
+
+The data is interpreted as:
+
+a byte value defining the number of 16 bit text characters
+(the resource string/binary data length is limited to 255 characters max)
+
+followed by:
+
+the 16 bit text characters.
+
+If the value of the leading byte is zero, calling Length() on the returned 
+PtrC16 returns zero.
+
+The current position within the resource buffer is updated.
+
+Do not use this explicit 16 bit variant when the resource contains binary 
+data; use the explicit 8 bit variant instead. If the resource contains text, 
+use the build independent variant ReadTPtrCL().
+
+@pre Open() is called to initialize RResourceReader data members.
+@return 16 bit non modifiable pointer representing
+the data following the leading byte count at the
+current position within the resource buffer.
+@post Current buffer position is updated.
+@leave KErrCorrupt The new buffer position is beyond the buffer end. */
+
+PtrC16* RResourceReader::ReadTPtrC16L()
+	{
+	return Impl()->ReadTPtrC16L();
+	}
+
+
+/** Interprets the data at the current buffer position as a TInt8 type and returns 
+the value as a TInt.
+
+The current position within the resource buffer is updated.
+
+In general, a TInt8 corresponds to a BYTE type in a resource STRUCT declaration.
+
+Note that in Symbian OS, a TInt is at least as big as a TInt8.
+
+@pre Open() is called to initialize RResourceReader data members.
+@return The TInt8 value taken from the resource buffer.
+@post Current buffer position is updated.
+@leave KErrEof The new buffer position is beyond the buffer end. */
+TInt RResourceReader::ReadInt8L()
+    {
+	return Impl()->ReadInt8L();
+    }
+
+/** Interprets the data at the current buffer position as a TUint8 type and returns 
+the value as a TUint.
+
+The current position within the resource buffer is updated.
+
+In general, a TUint8 corresponds to a BYTE type in a resource STRUCT declaration.
+
+Note that in Symbian OS, a TUint is at least as big as a TUint8.
+
+@pre Open() is called to initialize RResourceReader data members.
+@return The TUint8 value taken from the resource buffer.
+@post Current buffer position is updated.
+@leave KErrEof The new buffer position is beyond the buffer end. */
+TUint32 RResourceReader::ReadUint8L()
+    {
+	return Impl()->ReadUint8L();
+    }
+
+/** Interprets the data at the current buffer position as a TInt16 type and returns 
+the value as a TInt.
+
+The current position within the resource buffer is updated.
+
+In general, a TInt16 corresponds to a WORD type in a resource STRUCT declaration.
+
+Note that in Symbian OS, a TInt is at least as big as a TInt16.
+
+@pre Open() is called to initialize RResourceReader data members.
+@return The TInt16 value taken from the resource buffer.
+@post Current buffer position is updated.
+@leave KErrEof The new buffer position is beyond the buffer end. */
+TInt RResourceReader::ReadInt16L()
+    {
+	return Impl()->ReadInt16L();
+    }
+
+
+/** Interprets the data at the current buffer position as a TInt32 type and returns 
+the value as a TInt.
+
+The current position within the resource buffer is updated.
+
+In general, a TInt32 corresponds to a LONG type in a resource STRUCT declaration.
+
+Note that in Symbian OS, TInt and TInt32 are the same size.
+
+@pre Open() is called to initialize RResourceReader data members.
+@return The TInt32 value taken from the resource buffer.
+@post Current buffer position is updated.
+@leave KErrEof The new buffer position is beyond the buffer end. */
+TInt RResourceReader::ReadInt32L()
+    {
+	return Impl()->ReadInt32L();
+    }
+
+/** Interprets the data at the current buffer position as a TUint32 type and returns 
+the value as a TUint.
+
+The current position within the resource buffer is updated.
+
+In general, a TUint32 corresponds to a LONG type in a resource STRUCT declaration.
+
+Note that in Symbian OS a TUint is the same size as a TUint32.
+
+@pre Open() is called to initialize RResourceReader data members.
+@return The TUint32 value taken from the resource buffer.
+@post Current buffer position is updated.
+@leave KErrEof The new buffer position is beyond the buffer end. */
+TUint32 RResourceReader::ReadUint32L()
+    {
+	return Impl()->ReadUint32L();
+    }
+
+/** Copies a specified length of data from the resource buffer, starting at the 
+current position within the buffer, into the location pointed to by a specified 
+pointer. No assumption is made about the type of data at being read.
+
+The current position within the resource buffer is updated.
+
+@pre Open() is called to initialize RResourceReader data members.
+@param aPtr Pointer to the target location for data copied from the resource buffer.
+@param aLength The length of data to be copied from the resource buffer.
+@post Current buffer position is updated.
+@leave KErrEof The new buffer position is beyond the buffer end. */
+void RResourceReader::ReadL(TAny* aPtr,TInt aLength)
+    {
+	Impl()->ReadL(aPtr,aLength);
+    }
+
+/** Interprets the data at the current buffer position as leading byte count data 
+and constructs a build independent heap buffer containing a copy of this data.
+
+The data is interpreted as:
+
+a byte value defining the number of text characters or the length of binary 
+data (the resource string/binary data length is limited to 255 characters max)
+
+followed by:
+
+the text characters or binary data. This resource data is interpreted as either 
+8 bit or 16 bit, depending on the build.
+
+If the value of the leading byte is zero, the function assumes that no data 
+follows the leading byte and returns a NULL pointer.
+
+The current position within the resource buffer is updated.
+
+Use this build independent variant when the resource contains text. If the 
+resource contains binary data, use the explicit 8 bit variant ReadHBufC8L().
+
+@pre Open() is called to initialize RResourceReader data members.
+@return Pointer to the heap buffer containing a copy of
+the data following the leading byte count at the
+current position within the resource buffer. The
+pointer can be NULL.
+@post Current buffer position is updated.
+@leave KErrCorrupt The resulting position lies beyond the end of the resource buffer. */
+Ptr16* RResourceReader::ReadHBufCL()
+    {
+	return Impl()->ReadHBufCL();
+	}
+
+/** Interprets the data at the current buffer position as leading byte count data 
+and constructs a non modifiable pointer to represent this data.
+
+The data is interpreted as:
+
+a byte value defining the number of text characters or the length of binary 
+data (the resource string/binary data length is limited to 255 characters max)
+
+followed by:
+
+the text characters or binary data. This resource data is interpreted as either 
+8 bit or 16 bit, depending on the build.
+
+If the value of the leading byte is zero, calling Length() on the returned 
+TPtrC returns zero.
+
+The current position within the resource buffer is updated.
+
+Use this build independent variant when the resource contains text. If the 
+resource contains binary data, use the explicit 8 bit variant ReadTPtrC8L().
+
+@pre Open() is called to initialize RResourceReader data members.
+@return Non modifiable pointer representing the
+data following the leading byte count of the element
+at the specified position within the array.
+@post Current buffer position is updated.
+@leave KErrCorrupt The resulting position lies beyond the end of the resource buffer. */
+PtrC16* RResourceReader::ReadTPtrCL()
+    {
+	return ReadTPtrC16L();
+	}
+
+/** @internalComponent
+@return Non-const pointer to the implementation object. */
+TResourceReaderImpl* RResourceReader::Impl()
+	{
+	return reinterpret_cast <TResourceReaderImpl*> (iImpl);
+	}
+
+/** @internalComponent
+@return Const pointer to the implementation object. */
+const TResourceReaderImpl* RResourceReader::Impl() const
+	{
+	return reinterpret_cast <const TResourceReaderImpl*> (iImpl);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/barsread2.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,89 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+/** 
+* @file barsread2.h
+*
+* @internalComponent
+* @released
+*/
+#ifndef __BARSREAD2_H__
+#define __BARSREAD2_H__
+
+#include "commontypes.h"
+
+//Forward declarations
+class TResourceReaderImpl;
+class CResourceFile;
+
+/** Interprets resource data read from a resource file.
+
+To use an instance of this class, pass the CResourceFile object containing the resource 
+data with aResourceId ID to it, by calling OpenL() or OpenLC(). Close the reader
+calling Close() after finishing with the resource.
+
+The current position within the buffer is always maintained and any request 
+for data is always supplied from the current position. The current position 
+is always updated .
+
+Expected behaviour when assignment operator or copy constructor is called:
+The class doesn't have assignment operator and copy constructor, so the compiler generated
+ones will be used. The buffer used by the source class instance will be shared with the 
+destination class instance. However source and destination instances will have their own 
+current position pointers, both pointed initially to the same buffer position.
+
+@publishedAll
+@released
+@see CResourceFile */
+class RResourceReader
+	{
+public:
+	 RResourceReader();
+	 ~RResourceReader();
+	 void	 OpenL(CResourceFile* aRscFile, TInt aResourceId);
+	 void	 Close();
+
+    // Read counted strings into allocated buffer
+     Ptr16*	 ReadHBufCL();
+
+	 // Build pointer from a counted string
+     PtrC16* ReadTPtrCL();
+     PtrC8*  ReadTPtrC8L();
+     PtrC16* ReadTPtrC16L();
+
+     TInt	 ReadInt8L();
+     TUint32 ReadUint8L();
+     TInt	 ReadInt16L();
+	 TInt	 ReadInt32L();
+     TUint32 ReadUint32L();
+
+     void	 ReadL(TAny* aPtr,TInt aLength);
+
+private:
+	TResourceReaderImpl* Impl();
+	const TResourceReaderImpl* Impl() const;
+private:
+	//Size of the RResourceReader implementation.
+	//It should be 12 because of the BC reasons.
+	//That's the size of the implementation class,
+	//which implements TResourceReader functionality too.
+	enum
+		{
+		KRsReaderSize = 8
+		};
+	TUint8 iImpl[KRsReaderSize];
+	Ptr8* iRscBuffer;
+	};
+
+#endif//__BARSREAD2_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/barsreadimpl.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,438 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Resource reader
+// 
+//
+/** 
+* @file BaRsReadImpl.cpp
+*
+* @internalComponent
+* @released
+*/
+#include <iostream>
+#include <cassert>
+#include <string>
+#include "barsreadimpl.h"
+#include "barsc2.h"
+
+#define REINTERPRET_CAST(type,exp) (reinterpret_cast<type>(exp))
+
+/** @internalComponent
+An error will be issued at compile time if the class size is not KRsReaderImplSize. */
+TResourceReaderImpl::TResourceReaderImpl() :
+    iBuffer(NULL),
+    iCurrentPtr(NULL)
+	{
+	//TResourceReaderImpl size. It should be 8 because of the BC reasons.
+	//8 is the size of TResourceReader class.
+	enum
+		{
+			KRsReaderImplSize = 8
+		};
+	assert(sizeof(TResourceReaderImpl) == KRsReaderImplSize);
+	}
+
+/** Sets the buffer containing the resource data.
+
+The current position within the buffer is set to the start of the buffer so 
+that subsequent calls to the interpreting functions, for example ReadInt8(), 
+start at the beginning of this buffer.
+
+@internalComponent
+@param aBuffer Pointer to an 8 bit non-modifiable buffer containing 
+or representing resource data.
+@param aResourceId The numeric id of the resource to be read.
+@post Buffer pointer is initialized.
+@post Buffer current position pointer is initialized. */
+void TResourceReaderImpl::SetBuffer(const Ptr8* aBuffer)
+{
+	iBuffer=aBuffer;
+	iCurrentPtr= (TUint8*)iBuffer->GetPtr();
+}
+
+/** Sets the buffer and current position to NULL.
+@internalComponent
+@post Buffer pointer is set to NULL.
+@post Buffer current position pointer is set to NULL. */
+void TResourceReaderImpl::ResetBuffer()
+	{
+	iBuffer=NULL;
+	iCurrentPtr=NULL;
+	}
+
+/** Returns the current position within the resource buffer. 
+
+The function makes no assumption about the type of data in the buffer at the 
+current position.
+
+@internalComponent
+@return A pointer to the current position within the resource buffer. */
+const TAny* TResourceReaderImpl::Ptr()
+    {
+    return(iCurrentPtr);
+    }
+
+/** Updates iCurrentPtr with a new value.
+
+@internalComponent
+@pre iBuffer is not NULL.
+@pre aPtr is not NULL.
+@param aPtr The new value of iCurrentPtr.
+@post iCurrentPtr is updated.
+@leave KErrOff The new iCurrentPtr points beyond the buffer end. */
+void TResourceReaderImpl::MovePtrL(const TUint8* aPtr)
+    {
+	assert(iBuffer != NULL);
+	assert(aPtr != NULL);
+	if(aPtr > ((TUint8*)(  iBuffer->GetPtr() +  iBuffer->GetLength()  )))
+	{
+		std::string errMsg= "Failed : Trying to access pointer beyond valid range for registrationFile";
+		throw CResourceFileException(errMsg);
+	}
+		
+    iCurrentPtr=aPtr;
+    }
+
+/** Interprets the data at the current buffer position as leading byte count data 
+and constructs a 16 bit heap buffer containing a copy of this data.
+
+The data is interpreted as:
+
+a byte value defining the number of 16 bit text characters
+(the resource string/binary data length is limited to 255 characters max)
+
+followed by:
+
+the 16 bit text characters.
+
+If the value of the leading byte is zero, the function assumes that no data 
+follows the leading byte and returns a NULL pointer.
+
+The current position within the resource buffer is updated.
+
+Do not use this explicit 16 bit variant when the resource contains binary 
+data; use the explicit 8 bit variant instead. If the resource contains text, 
+use the build independent variant ReadHBufCL().
+
+@internalComponent
+@pre The same as for ReadTPtrC16L().
+@return Pointer to the 16bit heap buffer containing a
+copy of the data following the leading byte count at
+the current position within the resource buffer. The
+pointer can be NULL.
+@post iCurrentPtr is updated.
+@leave The same as ReadTPtrC16L(). 
+@see ReadTPtrC16L() */
+
+Ptr16* TResourceReaderImpl::ReadHBufCL()
+	{
+
+		PtrC16* ucode = ReadTPtrC16L();
+		if(NULL==ucode)
+			return NULL;
+		Ptr16* unicode = new Ptr16(ucode->iMaxLength);
+		memcpy(unicode->GetPtr(),ucode->iPtr,ucode->iMaxLength*2);
+		unicode->UpdateLength(ucode->iMaxLength);
+		return unicode;
+	}
+
+
+/** Interprets the data at the current buffer position as leading byte count data 
+and constructs an 8 bit non modifiable pointer to represent this data.
+
+The data is interpreted as:
+
+a byte value defining the number of text characters or the length of binary 
+data (the resource string/binary data length is limited to 255 characters max)
+
+followed by:
+
+the 8 bit text characters or binary data.
+
+If the value of the leading byte is zero, calling Length() on the returned 
+TPtrC8 returns zero.
+
+The current position within the resource buffer is updated.
+
+Use this explicit 8 bit variant when the resource contains binary data. If 
+the resource contains text, then use the build independent variant ReadTPtrC().
+
+In general, this type of resource data corresponds to one of the following:
+
+a LTEXT type in a resource STRUCT declaration.
+
+a variable length array within a STRUCT declaration which includes the LEN 
+BYTE keywords.
+
+@internalComponent
+@pre iCurrentPtr != NULL.
+@pre The same as MovePtrL(const TUint8* aPtr).
+@return 8bit non modifiable pointer representing
+the data following the leading byte count at the
+current position within the resource buffer.
+@post iCurrentPtr is updated.
+@leave The same as MovePtrL(const TUint8* aPtr).
+@see MovePtrL(const TUint8* aPtr) */
+PtrC8* TResourceReaderImpl::ReadTPtrC8L()
+	{
+	assert(iCurrentPtr != NULL);
+	const TUint8* currentPtr=iCurrentPtr;//TUint8 pointer is used, which means that the 
+	//resource string length is limited to 255 characters max.
+	const TInt strLen=*currentPtr;
+	++currentPtr;
+
+	PtrC8* unicode = new PtrC8;
+
+	if(!strLen)
+		unicode = NULL;
+	else
+	{
+		unicode ->iMaxLength = strLen;
+		unicode ->iPtr = currentPtr;
+	}
+	MovePtrL(currentPtr+strLen);
+	return unicode;
+	}
+
+/** Interprets the data at the current buffer position as leading byte count data 
+and constructs a 16 bit non modifiable pointer to represent this data.
+
+The data is interpreted as:
+
+a byte value defining the number of 16 bit text characters 
+(the resource string/binary data length is limited to 255 characters max)
+
+followed by:
+
+the 16 bit text characters.
+
+If the value of the leading byte is zero, calling Length() on the returned 
+TPtrC16 returns zero.
+
+The current position within the resource buffer is updated.
+
+Do not use this explicit 16 bit variant when the resource contains binary 
+data; use the explicit 8 bit variant instead. If the resource contains text, 
+use the build independent variant ReadTPtrC().
+
+@internalComponent
+@pre iCurrentPtr != NULL.
+@pre The same as MovePtrL(const TUint8* aPtr).
+@return Pointer to an 8bit variant flat array.
+@post iCurrentPtr is updated.
+@leave KErrCorrupt The resource is a unicode string and it is not properly aligned.
+@leave The same as MovePtrL(const TUint8* aPtr).
+@see MovePtrL(const TUint8* aPtr) */
+
+PtrC16* TResourceReaderImpl::ReadTPtrC16L()
+	{
+	assert(iCurrentPtr != NULL);
+	const TUint8* currentPtr=iCurrentPtr;//TUint8 pointer is used, which means that the 
+	
+	//resource string length is limited to 255 characters max.
+	const TInt unicodeLength=*currentPtr;
+	++currentPtr;
+	if (unicodeLength!=0)
+		{
+		if (REINTERPRET_CAST(TUint,currentPtr)&0x1)
+			{
+			// The resource compiler puts out a padding byte (arbitrarily 0xab)
+			// to ensure the alignment of Unicode strings within each resource.
+				if(*currentPtr!=0xab)
+				{
+					std::string errMsg= "Failed : Improper alignment of Unicode strings (0xab) within each resource.";
+					throw CResourceFileException(errMsg);
+				}
+			++currentPtr;
+			}
+		}
+
+	if (unicodeLength ==0)
+	{
+		MovePtrL(currentPtr);
+		return NULL;
+	}
+	else
+	{
+		PtrC16* unicode = new PtrC16;
+		unicode ->iMaxLength = unicodeLength;
+		unicode ->iPtr = (TUint16*) currentPtr;
+
+		currentPtr+=unicodeLength*sizeof(TText16);
+		MovePtrL(currentPtr);
+		return unicode;
+	}
+}
+
+
+/** Interprets the data at the current buffer position as a TInt8 type and returns 
+the value as a TInt.
+
+The current position within the resource buffer is updated.
+
+In general, a TInt8 corresponds to a BYTE type in a resource STRUCT declaration.
+
+Note that in Symbian OS, a TInt is at least as big as a TInt8.
+
+@internalComponent
+@pre iCurrentPtr != NULL.
+@pre The same as MovePtrL(const TUint8* aPtr).
+@return The TInt8 value taken from the resource buffer.
+@post The same as MovePtrL(const TUint8* aPtr).
+@leave The same as MovePtrL(const TUint8* aPtr).
+@see MovePtrL(const TUint8* aPtr) */
+TInt TResourceReaderImpl::ReadInt8L()
+    {
+	assert(iCurrentPtr != NULL);
+    const TUint8* currentPtr=iCurrentPtr;
+    MovePtrL(currentPtr+sizeof(TInt8));
+    return(*(TInt8*)currentPtr);
+    }
+
+/** Interprets the data at the current buffer position as a TUint8 type and returns 
+the value as a TUint.
+
+The current position within the resource buffer is updated.
+
+In general, a TUint8 corresponds to a BYTE type in a resource STRUCT declaration.
+
+Note that in Symbian OS, a TUint is at least as big as a TUint8.
+
+@internalComponent
+@pre iCurrentPtr != NULL.
+@pre The same as MovePtrL(const TUint8* aPtr).
+@return The TUint8 value taken from the resource buffer.
+@post The same as MovePtrL(const TUint8* aPtr).
+@leave The same as MovePtrL(const TUint8* aPtr).
+@see MovePtrL(const TUint8* aPtr) */
+TUint32 TResourceReaderImpl::ReadUint8L()
+    {
+	assert(iCurrentPtr != NULL);
+    const TUint8* currentPtr=iCurrentPtr;
+    MovePtrL(currentPtr+sizeof(TUint8));
+    return(*(TUint8*)currentPtr);
+    }
+
+/** Interprets the data at the current buffer position as a TInt16 type and returns 
+the value as a TInt.
+
+The current position within the resource buffer is updated.
+
+In general, a TInt16 corresponds to a WORD type in a resource STRUCT declaration.
+
+Note that in Symbian OS, a TInt is at least as big as a TInt16.
+
+@internalComponent
+@pre iCurrentPtr != NULL.
+@pre The same as MovePtrL(const TUint8* aPtr).
+@return The TInt16 value taken from the resource buffer.
+@post The same as MovePtrL(const TUint8* aPtr).
+@leave The same as MovePtrL(const TUint8* aPtr).
+@see MovePtrL(const TUint8* aPtr) */
+TInt TResourceReaderImpl::ReadInt16L()
+    {
+	assert(iCurrentPtr != NULL);
+    if (((TUint32)iCurrentPtr)%2)
+        {
+        TInt16 ret;
+        ReadL(&ret,sizeof(ret));
+        return(ret);
+        }
+    const TUint8* currentPtr=iCurrentPtr;
+    MovePtrL(currentPtr+sizeof(TInt16));
+    return(*(TInt16*)currentPtr);
+    }
+
+/** Interprets the data at the current buffer position as a TInt32 type and returns 
+the value as a TInt.
+
+The current position within the resource buffer is updated.
+
+In general, a TInt32 corresponds to a LONG type in a resource STRUCT declaration.
+
+Note that in Symbian OS, TInt and TInt32 are the same size.
+
+@internalComponent
+@pre iCurrentPtr != NULL.
+@pre The same as MovePtrL(const TUint8* aPtr).
+@return The TInt32 value taken from the resource buffer.
+@post The same as MovePtrL(const TUint8* aPtr).
+@leave The same as MovePtrL(const TUint8* aPtr).
+@see MovePtrL(const TUint8* aPtr) */
+TInt TResourceReaderImpl::ReadInt32L()
+    {
+	assert(iCurrentPtr != NULL);
+    if (((TUint)iCurrentPtr)%4)
+        {
+        TInt32 ret;
+        ReadL(&ret,sizeof(ret));
+        return(ret);
+        }
+    const TUint8* currentPtr=iCurrentPtr;
+    MovePtrL(currentPtr+sizeof(TInt32));
+	return(*(TInt32*)currentPtr);
+    }
+
+
+/** Interprets the data at the current buffer position as a TUint32 type and returns 
+the value as a TUint.
+
+The current position within the resource buffer is updated.
+
+In general, a TUint32 corresponds to a LONG type in a resource STRUCT declaration.
+
+Note that in Symbian OS a TUint is the same size as a TUint32.
+
+@internalComponent
+@pre iCurrentPtr != NULL.
+@pre The same as MovePtrL(const TUint8* aPtr).
+@return The TUint32 value taken from the resource buffer.
+@post The same as MovePtrL(const TUint8* aPtr).
+@leave The same as MovePtrL(const TUint8* aPtr).
+@see MovePtrL(const TUint8* aPtr) */
+TUint32 TResourceReaderImpl::ReadUint32L()
+    {
+	assert(iCurrentPtr != NULL);
+    if (((TUint32)iCurrentPtr)%4)
+        {
+        TUint32 ret;
+        ReadL(&ret,sizeof(ret));
+        return(ret);
+        }
+    const TUint8* currentPtr=iCurrentPtr;
+    MovePtrL(currentPtr+sizeof(TUint32));
+    return(*(TUint32*)currentPtr);
+    }
+
+/** Copies a specified length of data from the resource buffer, starting at the 
+current position within the buffer, into the location pointed to by a specified 
+pointer. No assumption is made about the type of data at being read.
+
+The current position within the resource buffer is updated.
+
+@internalComponent
+@pre iCurrentPtr != NULL.
+@pre The same as MovePtrL(const TUint8* aPtr).
+@param aPtr Pointer to the target location for data copied from the resource buffer.
+@param  aLength The length of data to be copied from the resource buffer.
+@post The same as MovePtrL(const TUint8* aPtr).
+@leave The same as MovePtrL(const TUint8* aPtr).
+@see MovePtrL(const TUint8* aPtr) */
+void TResourceReaderImpl::ReadL(TAny* aPtr,TInt aLength)
+    {
+	assert(iCurrentPtr != NULL);
+    const TUint8* currentPtr=iCurrentPtr;
+    MovePtrL(currentPtr+aLength);
+    memcpy(aPtr,currentPtr,aLength);
+    }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/barsreadimpl.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,79 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+/** 
+* @file barsreadimpl.h
+*
+* @internalComponent
+* @released
+*/
+#ifndef __BARSREADIMPL_H__
+#define __BARSREADIMPL_H__
+
+#include "commontypes.h"
+
+/** Interprets resource data read from a resource file.
+
+To use an instance of this class, pass the buffer containing the resource 
+data to it by calling SetBuffer().
+
+The buffer containing the resource data is created by RResourceFile::AllocReadL()/CResourceFile::AllocReadL() 
+which reads the specified resource into it.
+
+The current position within the buffer is always maintained and any request 
+for data is always supplied from the current position. The current position 
+is always updated .
+
+Expected behaviour when assignment operator or copy constructor is called:
+The class doesn't have assignment operator and copy constructor, so the compiler generated
+ones will be used. The buffer used by the source class instance will be shared with the 
+destination class instance. However source and destination instances will have their own 
+current position pointers, both pointed initially to the same buffer position.
+
+@internalComponent
+@see TResourceReaderImpl::SetBuffer()
+@see CResourceFile::AllocReadL() */
+class TResourceReaderImpl
+    {
+public:
+	TResourceReaderImpl();
+
+	void	SetBuffer(const Ptr8* aBuffer);
+	void	ResetBuffer();
+    const	TAny* Ptr();
+
+    // Read counted strings into allocated buffer
+	Ptr16*	ReadHBufCL();
+
+    // Build pointer from a counted string
+    PtrC8*  ReadTPtrC8L();
+	PtrC16* ReadTPtrC16L();
+
+    TInt	ReadInt8L();
+    TUint32 ReadUint8L();
+    TInt	ReadInt16L();
+	TInt	ReadInt32L();
+    TUint32 ReadUint32L();
+
+    void	ReadL(TAny* aPtr,TInt aLength);
+
+private:
+    void	MovePtrL(const TUint8* aPtr);
+private:
+		
+	const Ptr8*		iBuffer;
+    const TUint8*	iCurrentPtr;
+    };
+
+#endif//__BARSREADIMPL_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/commontypes.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,212 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+/** 
+* @file commontypes.cpp
+*
+* @internalComponent
+* @released
+*/
+#include "commontypes.h"
+#include "barsc2.h"
+#include <cassert>
+
+/** 
+ Implementation of Class Ptr8
+*/
+
+Ptr8::Ptr8(const TUint32& aSize)
+		:iLength(0), iMaxLength(aSize)		
+{
+	iPtr= new TUint8[aSize];
+}
+
+Ptr8::~Ptr8()
+{
+	delete iPtr;
+	iPtr=0;
+}
+
+
+TUint8 Ptr8::operator[](TInt aIndex) const
+{
+	assert(aIndex>=0);
+	return(iPtr[aIndex]);
+
+}
+
+TUint8* Ptr8::GetPtr() const 
+{
+	return iPtr;
+}
+
+void Ptr8::SetPtr(TUint8* aPtr)
+{
+	iPtr=aPtr;
+}
+
+void Ptr8::ForceLength(const TUint32& aLength)
+{
+		iLength = aLength;
+}
+
+void Ptr8::SetLength(const TUint32& aLength)
+{
+	if ((iLength+aLength) <= iMaxLength)
+	{
+		iLength = aLength;
+		return 0;
+	}
+	else
+	{
+		return 1;	
+	}
+}
+	
+TBool Ptr8::UpdateLength(const TUint32& aLength) 
+{
+	// Current length should not increase the 
+	// Max length.
+	if ((iLength+aLength) <= iMaxLength)
+	{
+		iLength+= aLength;
+		return 0;
+	}
+	else
+	{
+		return 1;	
+	}
+}
+
+TUint32 Ptr8::GetLength() const 
+{
+	return iLength;
+}
+
+TUint32 Ptr8::GetMaxLength() const 
+{
+	return iMaxLength;
+}
+
+void Ptr8::Append(TUint8* aBuffer, TInt aLen)
+{
+	if ((iLength+aLen) <= iMaxLength)
+	{
+		memcpy(iPtr+iLength,aBuffer, aLen);
+		iLength+= aLen;
+	}
+	else
+	{
+		std::string errMsg= "Failed : Cannot Append Beyond Maximum Length";
+		throw CResourceFileException(errMsg);	
+	}
+}
+
+/** 
+ Implementation of Class Ptr16
+*/
+
+Ptr16::Ptr16(const TUint32& aSize)
+		:iLength(0), iMaxLength(aSize)		
+{
+	iPtr= new TUint16[aSize];
+}
+
+Ptr16::~Ptr16()
+{
+	delete iPtr;
+	iPtr=0;
+}
+
+TUint16* Ptr16::GetPtr() const 
+{
+	return iPtr;
+}
+
+void Ptr16::SetPtr(TUint16* aPtr)
+{
+	iPtr=aPtr;
+}
+
+TUint16 Ptr16::operator[](TInt aIndex) const
+{
+	assert(aIndex>=0);
+	return(iPtr[aIndex]);
+}
+
+TBool Ptr16::UpdateLength(const TUint32& aLength) 
+{
+	// Current length should not increase the 
+	// Max length.
+	if ((iLength+aLength) <= iMaxLength)
+	{
+		iLength+= aLength;
+		return 0;
+	}
+	else
+	{
+		return 1;	
+	}
+}
+
+TUint32 Ptr16::GetLength() const 
+{
+	return iLength;
+}
+
+/**
+Implementation of Sructure PtrC8
+*/
+PtrC8::PtrC8():
+	iMaxLength(0)
+{	
+	iPtr = new TUint8;
+}
+
+/**
+Implementation of Sructure PtrC8
+*/
+PtrC8::~PtrC8()
+{	
+	 delete (TUint8*) iPtr;
+	 iPtr = NULL;
+}
+
+/**
+Implementation of Sructure PtrC16
+*/
+PtrC16::PtrC16():
+	iMaxLength(0)
+{	
+	iPtr = new TUint16;
+}
+
+/**
+Implementation of Sructure PtrC16
+*/
+PtrC16::~PtrC16()
+{	
+	delete iPtr;
+	iPtr = NULL;
+}
+
+
+/**
+ Implementation of Sructure TUid
+*/
+	
+sTUid::sTUid():
+	iUid1(0), iUid2(0), iUid3(0)
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/commontypes.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,308 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+/** 
+* @file commontypes.h
+*
+* @internalComponent
+* @released
+*/
+#ifndef	COMMONTYPES_H
+#define	COMMONTYPES_H
+
+#include "symbiantypes.h"
+#include "uidtype.h"
+#include <vector>
+using namespace std;
+using namespace rscparser;
+
+/** 
+Returns the smaller of two values.
+ 
+@param aLeft  The first value to be compared.
+@param aRight The second value to be compared.
+
+@return The smaller value.
+*/
+template <class T>
+inline T Min(T aLeft,T aRight)
+    {return(aLeft<aRight ? aLeft : aRight);}
+
+/**
+Returns the smaller of two objects, where the right hand object is a treated
+as a TInt for the  purpose of comparison.
+
+@param aLeft  The first value to be compared.
+@param aRight The second value to be compared.
+
+@return The smaller value.
+*/
+template <class T>
+inline T Min(T aLeft,TUint aRight)
+    {return(aLeft<(TInt)aRight ? aLeft : (T)aRight);}
+
+/** 
+Returns the larger of two values.
+
+@param aLeft  The first value to be compared.
+@param aRight The second value to be compared.
+
+@return The larger value.
+*/
+template <class T>
+inline T Max(T aLeft,T aRight)
+    {return(aLeft<aRight ? aRight : aLeft);}
+
+/**
+Returns the larger of two objects, where the right hand object is a treated
+as a TInt for the  purpose of comparison.
+
+@param aLeft  The first value to be compared.
+@param aRight The second value to be compared.
+
+@return The larger value.
+ */
+template <class T>
+inline T Max(T aLeft,TUint aRight)
+    {return(aLeft<(TInt)aRight ? (TInt)aRight : aLeft);}
+
+/**
+Class to allocate heap memory and store a pointer to it 
+for unicode data.
+The maximun allocated length and current length would also 
+be maintained.
+*/
+class Ptr8
+{
+
+public:
+	/**
+	Allocate heap of the specified size and 
+	store the pointer to it.
+	@param aSize Size of the heap to be allocated.
+	*/
+	Ptr8(const TUint32& aSize);
+
+	/**
+	Free the allocated heap 
+	*/
+	~Ptr8();
+
+	/**
+	Get the pointer to the allocated heap
+	*/
+	TUint8* GetPtr() const;
+	/**
+	Set the pointer
+	*/
+	void SetPtr(TUint8* aPtr);
+
+	/**
+	Set the length
+	*/
+	void SetLength(const TUint32& aLength);
+	void ForceLength(const TUint32& aLength);
+	
+	/**
+	Update the length of the current pointer
+	with the length provided
+	@param aLength Length to be updated
+	*/
+	TBool UpdateLength(const TUint32& aLength);
+
+	/**
+	To fetch the current length
+	*/
+	TUint32 GetLength() const;
+
+	/**
+	To fetch the Max length
+	*/
+	TUint32 GetMaxLength() const;
+
+ 	TUint8 operator[](TInt anIndex) const;
+
+	void Append(TUint8* aBuffer, TInt aLen);
+
+private:
+	TUint8* iPtr;
+	TUint32 iLength;
+	const TUint32 iMaxLength;
+};
+
+
+/**
+Class to allocate heap memory and store a pointer to it 
+for non-unicode data.
+The maximun allocated length and current length would also 
+be maintained.
+*/
+class Ptr16
+{
+
+public:
+	/**
+	Allocate heap of the specified size and 
+	store the pointer to it.
+	@param aSize Size of the heap to be allocated.
+	*/
+	Ptr16(const TUint32& aSize);
+
+	/**
+	Free the allocated heap 
+	*/
+	~Ptr16();
+
+	/**
+	Get the pointer to the allocated heap
+	*/
+	TUint16* GetPtr() const;
+
+	/**
+	Set the pointer
+	*/
+	void SetPtr(TUint16* aPtr);
+
+	/**
+	Update the length of the current pointer
+	with the length provided
+	@param aLength Length to be updated
+	*/
+	TBool UpdateLength(const TUint32& aLength);
+	
+	/**
+	To fetch the current length
+	*/
+	TUint32 GetLength() const;
+
+ 	TUint16 operator[](TInt anIndex) const;
+
+private:
+	TUint16* iPtr;
+	TUint32 iLength;
+	const TUint32 iMaxLength;
+};
+
+
+/**
+Structure to represent TPtrC8 from symbian data type
+*/
+struct PtrC8
+{	
+	PtrC8();
+	~PtrC8();
+	const TUint8* iPtr;
+	TUint32 iMaxLength;
+};
+
+
+/**
+Structure to represent TPtrC16 from symbian data type
+*/
+struct PtrC16
+{	
+	PtrC16();
+	~PtrC16();
+	TUint16* iPtr;
+	TUint32 iMaxLength;
+};
+
+
+/**
+Structure to hold the UIDs of the RSC file
+*/
+
+struct sTUid
+{	
+	sTUid();
+	TUint32 iUid1;
+	TUint32 iUid2;
+	TUint32 iUid3;
+};
+
+/**
+System wide error code -1 : item not found.
+
+A system wide error code indicates an error in the environment, or in
+user input from which a program may recover.
+*/
+const TInt KErrNotFound=(-1); // Must remain set to -1
+
+/**
+System wide error code 0 : this represents the no-error condition.
+
+A system wide error code indicates an error in the environment, or in
+user input from which a program may recover.
+*/
+const TInt KErrNone=0; 
+
+/**
+System wide error code -25 : indicates that end of file has been reached.
+
+A system wide error code indicates an error in the environment, or in
+user input from which a program may recover.
+
+Note that RFile::Read() is a higher-level interface. When the end of
+the file is reached, it returns zero bytes in the destination descriptor, and
+a KErrNone return value. KErrEof is not used for this purpose; other error
+conditions are returned only if some other error condition was indicated on
+the file.
+*/
+const TInt KErrEof=(-25);
+
+
+const TInt KExecutableImageUidValue=0x1000007a;
+
+const TUid KExecutableImageUidVal={KExecutableImageUidValue};
+
+/** The hexadecimal value of the 2nd UID that defines a DLL as being a Unicode 
+UI application. In .mmp files, the hexadecimal number is explicitly inserted 
+as the first value following the UID keyword.
+
+@publishedAll 
+@released
+@see KAppUidValue */
+const TInt KAppUidValue16 = 0x100039CE;
+
+/** The 2nd UID that defines a DLL as being a Unicode UI application.
+
+@publishedAll 
+@released
+@see KUidApp */
+const TUid KUidApp16={KAppUidValue16};
+
+/** The type-independent 2nd UID that identifies a DLL as being a UI application.
+
+@publishedAll 
+@released
+@see KUidApp16 */
+#define KUidApp KUidApp16
+
+/** 
+The uid for the Open service.
+
+@publishedPartner
+@released
+*/
+const TUid KOpenServiceUid = { 0x10208DCA };
+
+/** An application group name.
+
+This is a name that allows applications to be categorized, for instance "Games" 
+or "Utilities". 
+
+@publishedAll 
+@released */
+typedef Ptr16* TAppGroupName;
+#endif	/* COMMONTYPES_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/dictionarycompression.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,170 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// dictionarycompression.cpp
+//
+/** 
+* @file dictionarycompression.cpp
+*
+* @internalComponent
+* @released
+*/
+
+#include "dictionarycompression.h"
+
+RDictionaryCompressionBitStream::RDictionaryCompressionBitStream() :
+	iNumberOfBitsUsedForDictionaryTokens(0),
+	iOffsetToFirstBit(-1),
+	iOffsetToCurrentBit(-1),
+	iOffsetOnePastLastBit(-1),
+	iOwnsBitBuffer(false),
+	iBuffer(NULL)
+	{
+	}
+
+void RDictionaryCompressionBitStream::OpenL(
+				TInt aNumberOfBitsUsedForDictionaryTokens,
+				TInt aOffsetToFirstBit,
+				TInt aOffsetOnePastLastBit,
+				TBool aTransferringOwnershipOfBuffer,
+				TUint8* aBuffer)
+	{
+	iNumberOfBitsUsedForDictionaryTokens = aNumberOfBitsUsedForDictionaryTokens;
+	iOffsetToFirstBit = aOffsetToFirstBit;
+	iOffsetToCurrentBit = aOffsetToFirstBit;
+	iOffsetOnePastLastBit = aOffsetOnePastLastBit;
+	iOwnsBitBuffer = aTransferringOwnershipOfBuffer;
+	iBuffer = aBuffer;
+
+	assert(aBuffer!=NULL);
+	assert(aOffsetToFirstBit >= 0);
+	assert(aOffsetToFirstBit<=aOffsetOnePastLastBit);
+	}
+
+void RDictionaryCompressionBitStream::Close()
+	{
+	if (iOwnsBitBuffer)
+		{
+		iOwnsBitBuffer=EFalse;
+		delete [] iBuffer;
+		}
+	iBuffer=NULL;
+	}
+
+TBool RDictionaryCompressionBitStream::EndOfStreamL() const
+	{
+	assert(iBuffer!=NULL);
+	assert(iOffsetToFirstBit >= 0);
+	assert(iOffsetToCurrentBit>=iOffsetToFirstBit);
+	assert(iOffsetToCurrentBit<=iOffsetOnePastLastBit);
+	return iOffsetToCurrentBit>=iOffsetOnePastLastBit;
+	}
+
+TInt RDictionaryCompressionBitStream::IndexOfDictionaryEntryL()
+	{
+	// increments the current bit-position if it returns a value >=0; returns KErrNotFound if the next thing in the stream is plain data rather than the index of a dictionary entry
+	assert(iBuffer!=NULL);
+	assert(!EndOfStreamL());
+	if (!CurrentBitIsOn())
+		{
+		++iOffsetToCurrentBit;
+		return ReadIntegerL(iNumberOfBitsUsedForDictionaryTokens);
+		}
+	return KErrNotFound;
+	}
+
+void RDictionaryCompressionBitStream::ReadL(Ptr8 aBufferToAppendTo,TBool aCalypsoFileFormat)
+	{
+	// can only be called if IndexOfDictionaryEntry returned a negative value
+	assert(iBuffer!=NULL);
+	assert(!EndOfStreamL());
+	TInt numberOfConsecutivePrefixBits=0;
+	TInt i;
+	for (i=0; i<4; ++i)
+		{
+		const TBool currentBitIsOn=CurrentBitIsOn();
+		++iOffsetToCurrentBit; // increment this regardless whether the current bit is on
+		if (!currentBitIsOn)
+			{
+			break;
+			}
+		++numberOfConsecutivePrefixBits;
+		}
+	assert(numberOfConsecutivePrefixBits>0);
+	assert(numberOfConsecutivePrefixBits<=4);
+	TInt numberOfBytesToRead = numberOfConsecutivePrefixBits;
+	if (numberOfConsecutivePrefixBits==3)
+		{
+		numberOfBytesToRead=3+ReadIntegerL(3);
+		}
+	else if (numberOfConsecutivePrefixBits==4)
+		{
+		numberOfBytesToRead=ReadIntegerL(8);
+		if (!aCalypsoFileFormat)
+			{
+			numberOfBytesToRead+=3+(1<<3);
+			}
+		}
+
+	const TInt numberOfBitsOffByteBoundary=iOffsetToCurrentBit%8;
+	const TUint8* currentByte=iBuffer+(iOffsetToCurrentBit/8);
+	assert((numberOfBytesToRead + aBufferToAppendTo.GetLength()) <= aBufferToAppendTo.GetMaxLength());
+	for (i=0; i<numberOfBytesToRead; ++i, ++currentByte)
+		{
+		TUint byte=*currentByte;
+		assert(numberOfBitsOffByteBoundary>=0);
+		if (numberOfBitsOffByteBoundary>0)
+			{
+			byte>>=numberOfBitsOffByteBoundary;
+			byte|=(*(currentByte+1)<<(8-numberOfBitsOffByteBoundary));
+			byte&=0xff;
+			}
+		aBufferToAppendTo.Append(byte,1);
+		}
+	iOffsetToCurrentBit+=numberOfBytesToRead*8;
+	assert(numberOfBitsOffByteBoundary==iOffsetToCurrentBit%8);
+	}
+
+TBool RDictionaryCompressionBitStream::CurrentBitIsOn() const
+	{
+	// does not increment the current bit-position
+	assert(iBuffer!=NULL);
+	return iBuffer[iOffsetToCurrentBit/8]&(1<<(iOffsetToCurrentBit%8));
+	}
+
+TUint RDictionaryCompressionBitStream::ReadIntegerL(TInt aNumberOfBits)
+	{
+	// increments the current bit-position
+	assert(iBuffer!=NULL);
+	TInt integer=0;
+	TInt numberOfBitsLeftToRead=aNumberOfBits;
+//	FOREVER
+	while(1)
+		{
+		const TInt offsetToFirstBitToReadInCurrentByte=iOffsetToCurrentBit%8;
+		const TInt offsetOnePastLastBitToReadInCurrentByte=Min(8,offsetToFirstBitToReadInCurrentByte+numberOfBitsLeftToRead);
+		const TInt numberOfBitsReadFromCurrentByte=offsetOnePastLastBitToReadInCurrentByte-offsetToFirstBitToReadInCurrentByte;
+		assert(numberOfBitsReadFromCurrentByte>0);
+		const TUint bitsReadFromCurrentByte=((iBuffer[iOffsetToCurrentBit/8]>>offsetToFirstBitToReadInCurrentByte)&((1<<numberOfBitsReadFromCurrentByte)-1));
+		integer|=(bitsReadFromCurrentByte<<(aNumberOfBits-numberOfBitsLeftToRead));
+		iOffsetToCurrentBit+=numberOfBitsReadFromCurrentByte;
+		numberOfBitsLeftToRead-=numberOfBitsReadFromCurrentByte;
+		assert(numberOfBitsLeftToRead>=0);
+		if (numberOfBitsLeftToRead<=0)
+			{
+			break;
+			}
+		}
+	return integer;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/dictionarycompression.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,60 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// dictionarycompression.h
+//
+/** 
+* @file dictionarycompression.h
+*
+* @internalComponent
+* @released
+*/
+#if !defined(__DICTIONARYCOMPRESSION_H__)
+#define __DICTIONARYCOMPRESSION_H__
+
+#include <string>
+#include "commontypes.h"
+#include <cassert>
+
+/**
+This class implements a stream of bits (least significant bit first) as used by the code reading dictionary-compressed resource-files
+@internalComponent
+*/
+class RDictionaryCompressionBitStream
+	{
+public:
+	RDictionaryCompressionBitStream();
+	void OpenL(
+		TInt aNumberOfBitsUsedForDictionaryTokens,
+		TInt aOffsetToFirstBit,
+		TInt aOffsetOnePastLastBit,
+		TBool aTransferringOwnershipOfBuffer,
+		TUint8* aBuffer);
+	void Close();
+	TBool EndOfStreamL() const;
+	TInt IndexOfDictionaryEntryL(); // increments the current bit-position if it returns a value >=0; returns a negative value if the next thing in the stream is plain data rather than the index of a dictionary entry
+ 	void ReadL(Ptr8 aBufferToAppendTo,TBool aCalypsoFileFormat); // can only be called if IndexOfDictionaryEntry returned a negative value
+private:
+	TBool CurrentBitIsOn() const; // does not increment the current bit-position
+	TUint ReadIntegerL(TInt aNumberOfBits); // increments the current bit-position
+private:
+	TInt iNumberOfBitsUsedForDictionaryTokens;
+	TInt iOffsetToFirstBit;
+	TInt iOffsetToCurrentBit;
+	TInt iOffsetOnePastLastBit;
+	TBool iOwnsBitBuffer;
+	TUint8* iBuffer;
+	};
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/dirparse.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,832 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: File to Parse Resource File for Class AppRegistrationInfo and Create Input for
+//			 XML Generator.
+//
+
+
+#include "parameterlist.h"
+#include "stringutils.h"
+#include "is_utils.h"
+#include "dirparse.h"
+#include "barsc2.h"
+#include "commontypes.h"
+#include "sisregistry.h"
+#include "errors.h"
+#include "dbconstants.h"
+#include "parse.h"
+#include "utility_interface.h"
+
+using namespace std;
+
+/**
+@internalTechnology
+*/
+std::wstring AppResourceFileExtension = L".rsc";
+
+/**
+ * Identify if input file is a Registration Resource File.
+ @ Param : aRegistrationFileName - File name to be scanned.
+ */
+TInt FindRegistrationResourceFileL(std::string& aRegistrationFileName)
+{
+	CResourceFile* registrationFile = NULL;
+	try {
+			registrationFile = new CResourceFile(aRegistrationFileName, 0, 0);
+			if(NULL==registrationFile)
+			{
+				std::cout<<"Failed : Error in Reading File. Memory Allocation Failed"<<std::endl;
+				return 1;
+			}
+			else
+			{
+				TUid iAppUid = registrationFile->ReadFileUidL();
+				if(KUidAppRegistrationResourceFile == iAppUid.GetUid())
+				{
+					delete registrationFile;
+					return 0;
+				}
+			}
+		}
+		catch(const CResourceFileException& aObject)
+		{
+			if(registrationFile)
+				delete registrationFile;
+			return 1;
+		}
+	
+	delete registrationFile;
+	return 1;
+}
+
+
+/**
+ * Creates Class TAppDataType for XML Parsing
+ */
+
+std::wstring Ptr8_2_Wstring(const Ptr8* aBuf)
+{
+	std::wstring str2(aBuf->GetLength(), L'\0'); // Make room for characters
+
+	TUint8* temp = aBuf->GetPtr();
+	std::copy(temp,temp+aBuf->GetLength(),str2.begin());
+
+	return str2;
+}
+
+
+void CreateAppDataType(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo& aAppDataType, 
+								const TDataTypeWithPriority* aTemp)
+{
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TDataType componentDataType;
+
+	componentDataType.iPriority = aTemp->iPriority;
+	componentDataType.iType = Ptr8_2_Wstring(aTemp->iDataType.GetDataType());
+
+	aAppDataType.iDataType.push_back(componentDataType);
+}
+
+/**
+ * Creates Class TViewData for XML Parsing
+ */
+void CreateViewDataL(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo& aLocalizableAttribute, 
+							const CAppLocalizableInfo* aAppInfoReader)
+{
+	std::wstring sStr1;
+	std::wstring sStr;
+
+	std::vector<CAppViewData*>* viewDataArray = aAppInfoReader->GetViewDataArray();
+
+	if(viewDataArray)
+	{
+		for(TInt i = 0; i<viewDataArray->size(); i++)
+		{
+
+			XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData ViewData;
+			CAppViewData *temp = viewDataArray->at(i);
+	
+			sStr = DbConstants::CompUID;
+			TUid ID = temp->Uid();
+			sStr1 = Utils::IntegerToWideString(ID.GetUid());
+			CreateViewDataAttributes(ViewData,sStr,sStr1,true,false);
+	
+			sStr = DbConstants::CompScreenMode;
+			TInt SMode = temp->GetScreenMode();
+	
+			sStr1 = Utils::IntegerToWideString(SMode);
+			CreateViewDataAttributes(ViewData,sStr,sStr1,true,false);
+			
+			sStr = DbConstants::CompCaption;
+			Ptr16* caption = temp->GetCaption();
+			if(caption)
+				sStr1 = Ptr16ToWstring(caption);
+			else
+				sStr1=L'\0';		
+			CreateViewDataAttributes(ViewData,sStr,sStr1,false,false);
+			
+			sStr = DbConstants::CompNumberOfIcons;
+			TInt IconNum = temp->GetNumOfViewIcons();
+			sStr1 = Utils::IntegerToWideString(IconNum);
+			CreateViewDataAttributes(ViewData,sStr,sStr1,true,false);
+	
+			sStr = DbConstants::CompIconFile;
+			Ptr16* IconName = temp->GetIconFileName();
+			if(IconName)
+				sStr1 = Ptr16ToWstring(IconName);
+			else
+				sStr1=L'\0';
+			CreateViewDataAttributes(ViewData,sStr,sStr1,false,false);
+
+			aLocalizableAttribute.iViewData.push_back(ViewData);
+		}
+	}
+}
+
+void CreateViewDataAttributes(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData& aViewData, 
+							const std::wstring& aName,const std::wstring& aValue, 
+							const bool aIsIntValue, const int aIsStr8Bit)
+{
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData::TViewDataAttributes ViewDataAttributes;
+
+	ViewDataAttributes.iName = aName;
+	ViewDataAttributes.iValue = aValue;
+	ViewDataAttributes.iIsIntValue = aIsIntValue;
+	ViewDataAttributes.iIsStr8Bit = aIsStr8Bit;
+
+	aViewData.iViewDataAttributes.push_back(ViewDataAttributes);
+}
+
+/**
+ * Creates Class TLocalizableAttribute for XML Parsing
+ */
+
+void CreateLocalizableAttribute(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo& aLocalizableAttribute, 
+										const std::wstring& aName, const std::wstring& aValue, 
+										const bool aIsIntValue, const int aIsStr8Bit)
+{
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TLocalizableAttribute LocalizableAttribute;
+
+	LocalizableAttribute.iName = aName;
+	LocalizableAttribute.iValue = aValue;
+	LocalizableAttribute.iIsIntValue = aIsIntValue;
+	LocalizableAttribute.iIsStr8Bit = aIsStr8Bit;
+
+	aLocalizableAttribute.iLocalizableAttribute.push_back(LocalizableAttribute);
+}
+
+/**
+ * Creates Class TAppLocalizableInfo for XML Parsing
+ */
+void CreateLocalizableInfoL(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppLocalizableInfo, 
+									const CAppLocalizableInfo* aInfoReader)
+{
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo componentLocalizableInfo;
+
+		Ptr16* shortCaption = aInfoReader->GetShortCaption();
+		std::wstring sStr = DbConstants::CompShortCaption;
+		std::wstring sStr1;
+		
+		if(shortCaption)
+			sStr1 = Ptr16ToWstring(shortCaption);
+		else
+			sStr1=L'\0';
+		CreateLocalizableAttribute(componentLocalizableInfo,sStr,sStr1,false,false);	
+
+		Ptr16* caption = aInfoReader->GetCaption();
+		sStr = DbConstants::CompCaption;
+		if(caption)
+			sStr1 = Ptr16ToWstring(caption);
+		else
+			sStr1=L'\0';
+		CreateLocalizableAttribute(componentLocalizableInfo,sStr,sStr1,false,false);
+		
+		TInt  iNumOfAppIcons = aInfoReader->GetNumOfAppIcons();
+		sStr = DbConstants::CompNumberOfIcons;
+		sStr1 = Utils::IntegerToWideString(iNumOfAppIcons);
+		CreateLocalizableAttribute(componentLocalizableInfo,sStr,sStr1,true,false);
+
+		TInt  iLocale = aInfoReader->GetLocale();
+		sStr = DbConstants::CompLocale;
+		sStr1 = Utils::IntegerToWideString(iLocale);
+		CreateLocalizableAttribute(componentLocalizableInfo,sStr,sStr1,true,false);
+
+		Ptr16* iIconFileName = aInfoReader->GetIconFileName();
+		sStr = DbConstants::CompIconFile;
+		if(iIconFileName)
+			sStr1 = Ptr16ToWstring(iIconFileName);
+		else
+			sStr1=L'\0';
+		CreateLocalizableAttribute(componentLocalizableInfo,sStr,sStr1,false,false);
+
+		Ptr16* iGroupName = aInfoReader->GetGroupName();
+		sStr = DbConstants::CompGroupName;
+		if(iGroupName)
+			sStr1 = Ptr16ToWstring(iGroupName);
+		else
+			sStr1=L'\0';
+		CreateLocalizableAttribute(componentLocalizableInfo,sStr,sStr1,false,false);
+
+		CreateViewDataL(componentLocalizableInfo,aInfoReader);
+
+		aAppLocalizableInfo.iApplicationLocalizableInfo.push_back(componentLocalizableInfo);
+}
+
+
+/**
+ * Creates Class TAppServiceInfo for XML Parsing
+ */
+
+void CreateAppServiceInfo(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppServiceInfo, 
+									const TUid& aUid, const std::vector<TDataTypeWithPriority*>& aDataType) 
+{
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo componentServiceInfo;
+
+		componentServiceInfo.iUid = aUid.GetUid();
+		for(TInt ii = 0; ii<aDataType.size(); ii++)
+		{
+			TDataTypeWithPriority *temp = aDataType.at(ii);
+			CreateAppDataType(componentServiceInfo,temp);
+		}
+	
+		aAppServiceInfo.iApplicationServiceInfo.push_back(componentServiceInfo);
+}
+
+/**
+ * Creates Class TAppAttribute for XML Parsing
+ */
+
+void CreateAppAttribute(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppAttribute, 
+								const std::wstring& aName,const std::wstring& aValue, 
+								const bool aIsIntValue, const int aIsStr8Bit )
+{
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppAttribute componentAttribute;
+
+	componentAttribute.iName = aName;
+	componentAttribute.iValue = aValue;
+	componentAttribute.iIsIntValue = aIsIntValue;
+	componentAttribute.iIsStr8Bit = aIsStr8Bit;
+
+	aAppAttribute.iApplicationAttribute.push_back(componentAttribute);
+}
+
+/**
+ * Creates Class TAppAttribute for XML Parsing
+ */
+
+void CreateAppProperty(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppProperty, 
+								const std::wstring& aStrValue, const int aLocale,
+								const int aServiceUid, const bool aIsStr8Bit )
+{
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty componentproperty;
+
+	componentproperty.iName = DbConstants::CompOpaqueData;
+	componentproperty.iLocale = aLocale;
+	componentproperty.iServiceUid = aServiceUid;
+	componentproperty.iIntValue = 0;
+	componentproperty.iStrValue = aStrValue;
+	componentproperty.iIsStr8Bit = aIsStr8Bit;
+
+	aAppProperty.iApplicationProperty.push_back(componentproperty);
+}
+
+/**
+ * Creates Class TOpaqueDataType for XML Parsing
+ */
+
+void CreateOpaqueDataType(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppOpaqueData, 
+								const std::wstring& aStrValue, const int aLocale, const int aServUid)
+{
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TOpaqueDataType componentData;
+
+	componentData.iLocale = aLocale;
+	componentData.iServiceUid = aServUid;
+
+	/* 
+	 * Under LINUX : The OpaqueData which is read from the resource file will be in UTF-16 format contained
+	 *               in a std::wstring. So, we need to convert it back to UTF-32 format which is the format
+	 *               of LINUX specific std::wstring.
+     * 
+	 * Under WINDOWS : Nothing needs to be done and this is taken care of by XercesStringToWString()
+	 *				   which is platform specific.	
+	 */
+	 componentData.iOpaqueData = XercesStringToWString(reinterpret_cast<const XMLCh*>(aStrValue.c_str()));
+	 aAppOpaqueData.iOpaqueDataType.push_back(componentData);
+}
+
+/**
+ * Get the path of Database "scr.db"
+ */
+
+std::string GetDbPath(const CParameterList* aParamList)
+{
+	if	( 
+		(aParamList->RomLogFileNames().size() != 0 && aParamList->RomDrivePath().size() == 0 ) ||
+		aParamList->IsFlagSet(CParameterList::EFlagsDisableZDriveChecksSet) 
+		)
+		{
+			#ifdef __LINUX__
+			return wstring2string(aParamList->SystemDrivePath()) + "/sys/install/scr/scr.db";
+			#else
+			return wstring2string(aParamList->SystemDrivePath()) + "\\sys\\install\\scr\\scr.db";
+			#endif
+		}
+
+	#ifdef __LINUX__
+	return wstring2string(aParamList->RomDrivePath()) + "/sys/install/scr/provisioned/scr.db";
+	#else
+	return wstring2string(aParamList->RomDrivePath()) + "\\sys\\install\\scr\\provisioned\\scr.db";
+	#endif
+}
+
+/**
+ * Update Installation Information in Database using SRCTOOL
+ */
+
+void UpdateInstallationInformation_xml(const CParameterList* aParamList,
+												XmlDetails::TScrPreProvisionDetail aScrPreProvisionDetail)
+{
+	CXmlGenerator xmlGenerator;
+
+	#ifndef __TOOLS2_LINUX__
+		char* tmpFileName = tmpnam(NULL);	
+	#else
+		char tmpFileName[] = "/tmp/interpretsis_preprovision_XXXXXX";	
+		int temp_fd;
+		temp_fd=mkstemp(tmpFileName); 
+		fclose(fdopen(temp_fd,"w"));
+	#endif
+
+	std::wstring filename(string2wstring(tmpFileName));
+
+	int isRomApplication = 1;
+	xmlGenerator.WritePreProvisionDetails(filename , aScrPreProvisionDetail, isRomApplication);						
+
+	#ifdef __LINUX__
+	std::string executable = "scrtool";
+	#else 
+	std::string executable = "scrtool.exe";
+	#endif
+
+	std::string command;
+
+	command = executable + " -d " + GetDbPath(aParamList) + " -p " + tmpFileName;
+
+	cout << "Updating DB : " << command << endl;
+
+	int error = system(command.c_str());
+	
+	if(error != 0)
+	{
+		LERROR(L"Scrtool failed to upload the database registry entry.");
+	}
+		
+	error = remove(tmpFileName);
+
+	if(error != 0)
+	{
+		LERROR(L"Temporary file removal failed.");
+	}	
+}
+
+/**
+ * Creates Class TApplicationRegistrationInfo for XML Parsing
+ */
+
+
+void CreateApplicationRegistrationInfoL(XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, 
+												const CAppInfoReader* aAppInfoReader)
+{
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo atemp;
+
+	Ptr16* iAppBinaryFullName = aAppInfoReader->AppBinaryFullName();
+	std::wstring sStr = DbConstants::CompAppFile;
+	std::wstring sStr1 = Ptr16ToWstring(iAppBinaryFullName);
+	CreateAppAttribute(atemp,sStr,sStr1,false,false);
+
+	TUidType iAppBinaryUidType = aAppInfoReader->AppBinaryUidType();;
+	sStr = DbConstants::CompAppUid;
+	TUid Uid = iAppBinaryUidType[2];
+	sStr1 = Utils::IntegerToWideString(Uid.GetUid());
+	CreateAppAttribute(atemp,sStr,sStr1,true,false);
+
+	sStr = DbConstants::CompTypeId;
+	TInt TypeId = -1367772926;
+	sStr1 = Utils::IntegerToWideString(TypeId);
+	CreateAppAttribute(atemp,sStr,sStr1,true,false);
+
+	TAppCapability iCapability;
+	aAppInfoReader->Capability(iCapability);
+
+ 	sStr = DbConstants::CompAttributes;
+	sStr1 = Utils::IntegerToWideString(iCapability.iAttributes);
+	CreateAppAttribute(atemp,sStr,sStr1,true,false);
+
+	sStr = DbConstants::CompHidden;
+	sStr1 = Utils::IntegerToWideString(iCapability.iAppIsHidden);
+	CreateAppAttribute(atemp,sStr,sStr1,true,false);
+
+	sStr = DbConstants::CompEmbeddable;
+	sStr1 = Utils::IntegerToWideString(iCapability.iEmbeddability);
+	CreateAppAttribute(atemp,sStr,sStr1,true,false);
+
+	sStr = DbConstants::CompNewfile;
+	sStr1 = Utils::IntegerToWideString(iCapability.iSupportsNewFile);
+	CreateAppAttribute(atemp,sStr,sStr1,true,false);
+
+	sStr = DbConstants::CompLaunch;
+	sStr1 = Utils::IntegerToWideString(iCapability.iLaunchInBackground);
+	CreateAppAttribute(atemp,sStr,sStr1,true,false);
+
+	sStr = DbConstants::CompGroupName;
+	if(iCapability.iGroupName)
+		sStr1 = Ptr16ToWstring(iCapability.iGroupName);
+	else
+		sStr1=L'\0';
+	CreateAppAttribute(atemp,sStr,sStr1,false,false);
+
+	TUint iDefaultScreenNumber = aAppInfoReader->DefaultScreenNumber();
+	sStr = DbConstants::CompDefaultScreenNumber;
+	sStr1 = Utils::IntegerToWideString(iDefaultScreenNumber);
+	CreateAppAttribute(atemp,sStr,sStr1,true,false);
+
+	std::vector<Ptr16*>* ownedFileArray = aAppInfoReader->OwnedFiles();
+	if(ownedFileArray)
+	{
+		for(TInt ii = 0; ii<ownedFileArray->size(); ii++)
+		{
+			Ptr16 *temp = ownedFileArray->at(ii);
+			if(temp)
+				sStr = Ptr16ToWstring(temp);
+			else
+				sStr=L'\0';
+			atemp.iFileOwnershipInfo.push_back(sStr);
+		}
+	}
+
+	TInt iIndexOfFirstOpenService;
+	std::vector<TAppServiceInfo*>* iServiceArray = aAppInfoReader->ServiceArray(iIndexOfFirstOpenService);
+	if(iServiceArray)
+	{
+		for(TInt i = 0; i<iServiceArray->size(); i++)
+		{
+			TAppServiceInfo* temp = iServiceArray->at(i);
+			TUid iUid = temp->GetUid();
+			std::vector<TDataTypeWithPriority*> iData = temp->GetDataType();
+			CreateAppServiceInfo(atemp,iUid,iData);
+
+			int servUid = iUid.GetUid();
+			std::vector<CAppLocalOpaqueDataInfo*> opaqueDataArray = aAppInfoReader->GetOpaqueDataArray();
+			for(TInt i = 0; i<opaqueDataArray.size(); i++)
+			{
+				CAppLocalOpaqueDataInfo* tp = opaqueDataArray.at(i);
+			
+				TUint32 serviceUid = tp->GetServiceUid();
+				if(servUid == serviceUid)
+				{
+					Ptr8*	opaqueData = tp->GetOpaqueData();
+					if(opaqueData)
+						sStr1 = Ptr8ToWstring(opaqueData);
+					else
+						sStr1=L'\0';
+				
+					TInt locale = tp->GetLocale();
+					CreateOpaqueDataType(atemp,sStr1,locale,serviceUid);
+				}
+			}
+		}
+	}
+
+	std::vector<CAppLocalizableInfo*> aAppLocalizable = aAppInfoReader->LocalizableInfo();
+
+	for(TInt i = 0; i<aAppLocalizable.size(); i++)
+	{
+		CAppLocalizableInfo* tp = aAppLocalizable.at(i);
+		CreateLocalizableInfoL(atemp,tp);
+	}
+
+	std::vector<CAppLocalOpaqueDataInfo*> opaqueDataArray = aAppInfoReader->GetOpaqueDataArray();
+	for(TInt i = 0; i<opaqueDataArray.size(); i++)
+	{
+		CAppLocalOpaqueDataInfo* tp = opaqueDataArray.at(i);
+
+		TUint32 serviceUid = tp->GetServiceUid();
+		if(0 == serviceUid)
+		{
+			Ptr8* 	opaqueData = tp->GetOpaqueData();
+			if(opaqueData)
+				sStr1 = Ptr8ToWstring(opaqueData);
+			else
+				sStr1=L'\0';
+		
+			TInt locale = tp->GetLocale();
+			CreateOpaqueDataType(atemp,sStr1,locale,serviceUid);
+		}
+	}
+
+	aComponent.iApplicationRegistrationInfo.push_back(atemp);
+}
+
+
+/**
+ * Get the path of Localizefile.
+ */
+
+std::string GetLocalizeFilePath(const std::string& aFileName, const CParameterList* aParamList)
+{
+	if(aParamList->IsFlagSet(CParameterList::EFlagsResourceFilePathSet))
+	{
+		size_t found;
+		std::string folder;
+		#ifdef __LINUX__
+		found=aFileName.find("private/10003a3f/");
+		#else
+		found=aFileName.find("private\\10003a3f\\");
+		#endif
+
+		if( found != string::npos )
+			folder = aFileName.substr(0,found);
+		else
+		{
+				#ifdef __LINUX__
+				std::string errMsg= "Failed : Resource File Path should contain /private/10003a3f/";
+				#else
+				std::string errMsg= "Failed : Resource File Path should contain \\private\\10003a3f\\";
+				#endif
+				throw CResourceFileException(errMsg);
+		}
+
+		return folder;
+	}
+	else
+		return wstring2string(aParamList->RomDrivePath());
+}
+
+
+/**
+ * Generate XML for Class AppInfoReader and call the function to Update Installation Information in Database using SRCTOOL
+ */
+void ReadApplicationInformationFromResourceFilesL(XmlDetails::TScrPreProvisionDetail& aScrPreProvisionDetail, 
+															const std::string& aFileName,const CParameterList* aParamList, 
+															const CInterpretSIS& aInterpretSis, int& aNewFileFlag)
+{
+
+	std::string LocalizePath = GetLocalizeFilePath(aFileName, aParamList);
+	
+	CAppInfoReader* appInfoReader = NULL;
+	appInfoReader = CAppInfoReader::NewL(aFileName, NullUid, LocalizePath);	
+	if (!appInfoReader)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+	else
+	{
+		TBool readSuccessful=EFalse;
+
+		readSuccessful= appInfoReader->ReadL();
+
+		if (readSuccessful)
+		{
+			const SisRegistry* SisReg( aInterpretSis.GetSisRegistry());
+			const DbHelper* dbHelper( SisReg->GetDbHelper());
+				
+			TUid aAppUid = appInfoReader->AppUid();
+			int val = dbHelper->IsAppUidInstalled(aAppUid.GetUid());
+			if(!val)
+			{
+				aNewFileFlag = 1;
+				// for sis file entries the software type would always be Native.
+				aScrPreProvisionDetail.iSoftwareTypeName = L"native";;
+						
+				XmlDetails::TScrPreProvisionDetail::TComponent component;
+				CreateApplicationRegistrationInfoL(component,appInfoReader);
+				aScrPreProvisionDetail.iComponents.push_back(component);
+			}
+			else
+			{
+				std::cout<<",Ignoring : AppUid "<<hex<<aAppUid.iUid<<" already present in SCR.";
+			}
+		}
+		else
+		{
+			delete appInfoReader;
+			std::string errMsg= "Reading Resource File failed.";
+			throw CResourceFileException(errMsg);
+		}
+		delete appInfoReader;
+	}
+
+}
+
+/**
+ * Parse the Directory for resource file.
+ */
+
+void ParseResourceDir(const CParameterList* aParamList, const CInterpretSIS& aInterpretSis)
+{
+	std::wstring aFilePath;
+	int iNewFileFlag = 0;
+
+	if ( aParamList->IsFlagSet(CParameterList::EFlagsResourceFilePathSet)) 
+	{
+	 	aFilePath = aParamList->ResourceFilePath();
+	}
+	else
+	{
+		 aFilePath = aParamList->RomDrivePath();
+		 #ifdef __LINUX__
+		 aFilePath.append(L"/private/10003a3f/apps");
+		 #else
+		 aFilePath.append(L"\\private\\10003a3f\\apps");
+		 #endif
+	}
+
+	int iCount = 0;
+	std::list<std::wstring> regDirs;
+	GetDirContents( aFilePath, regDirs );
+
+	// store the object in registry database
+	XmlDetails::TScrPreProvisionDetail scrPreProvisionDetail;
+
+	std::list<std::wstring>::iterator curr = regDirs.begin();
+	for( curr = regDirs.begin(); curr != regDirs.end(); ++curr )
+	{
+		try
+		{
+			if (curr->find(AppResourceFileExtension,0) != std::wstring::npos)
+			{
+				iCount++;
+			    std::string fName;
+		        fName = wstring2string( *curr );
+				std::string FilePath = wstring2string(aFilePath);
+				#ifdef __LINUX__				
+				FilePath.append("/");
+				#else
+				FilePath.append("\\");
+				#endif
+
+				FilePath.append(fName);
+				std::cout<<"Parsing - "<<fName<<" ";
+				ReadApplicationInformationFromResourceFilesL(scrPreProvisionDetail,FilePath,aParamList,aInterpretSis,iNewFileFlag);
+				std::cout<<" "<<std::endl;
+			}
+		}
+		catch(const CResourceFileException& aObject)
+		{
+			//LERROR(L"Resource File Parsing Error - ");
+			//aObject.Display();
+		}
+	}
+
+	if(iNewFileFlag)
+		UpdateInstallationInformation_xml(aParamList,scrPreProvisionDetail);
+	
+	if(!iCount)
+		LINFO(L"No Resource File in the Directory Specified - ");
+}
+
+/**
+ * Backup hash files for re-installation (SA over SA or PU over PU)
+ */
+void BackupHashForFile(const std::wstring& aFile, const int aDriveLetter, const std::wstring& aPath)
+{
+	#ifdef __LINUX__
+	std::wstring hashdir = L"$:/sys/hash/";
+	#else
+	std::wstring hashdir = L"$:\\sys\\hash\\";
+	#endif
+
+	std::wstring basename = aFile.substr( aFile.rfind( KDirectorySeparator ) + 1) ;
+	if (basename.size() == 0)
+	{
+		#ifdef __LINUX__
+		basename = aFile.substr(aFile.rfind(L"/"));
+		#else
+		basename = aFile.substr(aFile.rfind(L"\\"));
+		#endif
+	}
+
+	hashdir[0] = aDriveLetter;
+	#ifdef __LINUX__
+	std::wstring hashFile = aPath + L"/sys/hash/" + basename;
+	#else
+	std::wstring hashFile = aPath + L"\\sys\\hash\\" + basename;
+	#endif
+
+	if (FileExists(hashFile))
+	{
+		std::string iLocalFile = wstring2string(hashFile);
+		std::string iBackupFile = wstring2string(hashFile);
+		iBackupFile.append("_backup");
+
+		int err=FileCopyA(iLocalFile.c_str(),iBackupFile.c_str(),0);
+		if (err != 0)
+			LERROR(L"Failed to Backup hash file ");
+	}
+}
+
+/**
+ * Restore hash files for re-installation (SA over SA or PU over PU)
+ */
+void RestoreHashForFile(const std::wstring& aFile, const int aDriveLetter, const std::wstring& aPath)
+{
+	#ifdef __LINUX__
+	std::wstring hashdir = L"$:/sys/hash/";
+	#else
+	std::wstring hashdir = L"$:\\sys\\hash\\";
+	#endif
+	std::wstring basename = aFile.substr( aFile.rfind( KDirectorySeparator ) + 1) ;
+	if (basename.size() == 0)
+	{
+		#ifdef __LINUX__
+		basename = aFile.substr(aFile.rfind(L"/"));
+		#else
+		basename = aFile.substr(aFile.rfind(L"\\"));
+		#endif
+	}
+
+	hashdir[0] = aDriveLetter;
+	#ifdef __LINUX__
+	std::wstring hashFile = aPath + L"/sys/hash/" + basename;
+	#else
+	std::wstring hashFile = aPath + L"\\sys\\hash\\" + basename;
+	#endif	
+	std::wstring LocalFile(hashFile);
+	hashFile.append(L"_backup");
+
+	if (FileExists(hashFile))
+	{
+		std::string iLocalFile = wstring2string(LocalFile);
+		std::string iBackupFile = wstring2string(hashFile);
+
+		int err = FileMoveA(iBackupFile.c_str(),iLocalFile.c_str());
+		if (err != 0)
+		    LERROR(L"Failed to Restore hash file ");
+	}
+}
+
+/**
+ * Returns the size of the first occurance of an invalid directory separator.
+ * @param aPath Path to be validated.
+ * @param aIndex index from which the search begin. On function return this 
+ * 				index will point to the illegal directory separator. 
+ * @return 0 if path is valid. Else the number of character to be replaced.
+ * e.g. /sys/bin/ should be replaced with \sys\bin\
+ * and //sys//bin// should be replaced with \sys\bin\
+ */ 
+
+// Constants
+#ifdef __LINUX__
+const std::wstring KSisDirectorySeparatortap( L"/" );
+#else
+const std::wstring KSisDirectorySeparatortap( L"\\" );
+#endif
+
+
+int FirstInvalidDirSeparatorSizetap(std::wstring& aPath, std::wstring::size_type& aIndex)
+	{
+	// If path semantics is correct (as needed by sisx library)
+	// then the function will return 0
+	int ret = 0; 
+	int pos = 0;
+	#ifdef __LINUX__
+	if((pos = aPath.find(L"\\\\", aIndex)) != std::wstring::npos)
+	#else
+	if((pos = aPath.find(L"//", aIndex)) != std::wstring::npos)
+	#endif
+		{
+		ret = 2;
+		}
+	#ifdef __LINUX__
+	else if((pos = aPath.find(L"\\", aIndex)) != std::wstring::npos)
+	#else
+	else if((pos = aPath.find(L"/", aIndex)) != std::wstring::npos)
+	#endif
+		{
+		ret = 1;
+		}
+	aIndex = pos;
+	return ret;
+	}
+
+std::wstring FixPathDelimiterstap( const std::wstring& aString )
+    {
+    std::wstring ret = aString;
+	std::wstring::size_type idx = 0;
+    int len = 0;
+	while(len = FirstInvalidDirSeparatorSizetap(ret, idx))
+        {
+		ret.replace( idx, len, KSisDirectorySeparatortap );
+        }
+    return ret;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/dirparse.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,141 @@
+// dirparse.h
+
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file 
+ @internalComponent
+ @released
+*/
+
+#ifndef	__DIRPARSE_H__
+#define	__DIRPARSE_H__
+
+#pragma warning (disable: 4786)
+
+// System includes
+#include <iostream>
+#include <string>
+#include "xmlgenerator.h"
+#include "xmlparser.h"
+#include "aplappinforeader.h"
+#include "aplapplistitem.h"
+#include "interpretsis.h"
+#include "dbhelper.h"
+
+/**
+ * Identify if input file is a Registration Resource File.
+ @ Param : aRegistrationFileName - File name to be scanned.
+ */
+TInt FindRegistrationResourceFileL(std::string& aRegistrationFileName);
+/**
+ * Get the path of Database "scr.db"
+ */
+std::string GetDbPath(const CParameterList* aParamList);
+/**
+ * Creates Class TAppDataType for XML Parsing
+ */
+void CreateAppDataType(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo& aAppDataType, 
+								const TDataTypeWithPriority* aTemp);
+/**
+ * Creates Class TViewData for XML Parsing
+ */
+void CreateViewDataL(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo& aLocalizableAttribute, 
+								const CAppLocalizableInfo* aAppInfoReader);
+
+/**
+ * Creates Class TViewDataAttributes for XML Parsing
+ */
+void CreateViewDataAttributes(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData& aViewData, 
+							const std::wstring& aName,const std::wstring& aValue, 
+							const bool aIsIntValue, const int aIsStr8Bit);
+
+/**
+ * Creates Class TLocalizableAttribute for XML Parsing
+ */
+void CreateLocalizableAttribute(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo& aLocalizableAttribute, 
+								const std::wstring& aName,const std::wstring& aValue, const bool aIsIntValue, const int aIsStr8Bit);
+/**
+ * Creates Class TAppAttribute for XML Parsing
+ */
+void CreateAppAttribute(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppAttribute, 
+								const std::wstring& aName,const std::wstring& aValue, const bool aIsIntValue, const int aIsStr8Bit );
+/**
+ * Creates Class TAppAttribute for XML Parsing
+ */
+void CreateAppProperty(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppProperty, 
+								const std::wstring& aStrValue, const int aLocale, const int aServiceUid, const bool aIsStr8Bit );
+
+/**
+ * Creates Class TOpaqueDataType for XML Parsing
+ */
+void CreateOpaqueDataType(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppOpaqueData, 
+								const std::wstring& aStrValue, const int aLocale, const int aServUid);
+
+/**
+ * Creates Class TAppLocalizableInfo for XML Parsing
+ */
+void CreateLocalizableInfoL(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppLocalizableInfo, 
+								const CAppLocalizableInfo* tp);
+/**
+ * Creates Class TAppServiceInfo for XML Parsing
+ */
+void CreateAppServiceInfo(XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppServiceInfo, 
+								const TUid& aUid, const std::vector<TDataTypeWithPriority*>& aDataType);
+
+/**
+ * Creates Class TApplicationRegistrationInfo for XML Parsing
+ */
+ 
+void CreateApplicationRegistrationInfoL(XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, 
+								const CAppInfoReader* aAppInfoReader);
+
+/**
+ * Update Installation Information in Database using SRCTOOL
+ */
+void UpdateInstallationInformation_xml(const CParameterList* aParamList,XmlDetails::TScrPreProvisionDetail aScrPreProvisionDetail);
+/**
+ * Generate XML for Class AppInfoReader and call the function to Update Installation Information in Database using SRCTOOL
+ */
+void ReadApplicationInformationFromResourceFilesL(XmlDetails::TScrPreProvisionDetail& aScrPreProvisionDetail, 
+															const std::string& aFileName,const CParameterList* aParamList, 
+															const CInterpretSIS& aInterpretSis, int& aNewFileFlag);
+
+/**
+ * Parse the Directory for resource file.
+ */
+void ParseResourceDir(const CParameterList* aParamList, const CInterpretSIS& aInterpretSis);
+
+/**
+ * Backup hash files for re-installation (SA over SA or PU over PU)
+ */
+void BackupHashForFile(const std::wstring& aFile, const int aDriveLetter, const std::wstring& aPath);
+
+/**
+ * Restore hash files for re-installation (SA over SA or PU over PU)
+ */
+void RestoreHashForFile(const std::wstring& aFile, const int aDriveLetter, const std::wstring& aPath);
+
+/**
+ * Utility function to Replace "/" to "\"
+ */
+int FirstInvalidDirSeparatorSizetap(std::wstring& aPath, std::wstring::size_type& aIndex);
+
+/**
+ * Utility function to Replace "/" to "\"
+ */
+std::wstring FixPathDelimiterstap( const std::wstring& aString );
+#endif //__DIRPARSE_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/parse.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,373 @@
+// Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+//
+/** 
+* @file parse.cpp
+*
+* @internalComponent
+* @released
+*/
+#include "parse.h"
+#include "barsc2.h"
+
+std::string FullNameWithoutDrive(std::string& Buf )
+	{
+	  std::string iName;
+	   std::string::size_type index = Buf.find( ':' );
+	   if( index != std::string::npos )
+			iName.assign(Buf, index+1, Buf.size());
+	
+	   return iName;
+	}
+
+/**
+ * Converts from Ptr8* datatype to wstring
+ */
+std::wstring Ptr8ToWstring(const Ptr8* aBuf)
+{
+	std::wstring str2(aBuf->GetLength(), L'\0'); // Make room for characters
+
+	TUint8* temp = aBuf->GetPtr();
+	memcpy(str2.begin(),temp,aBuf->GetLength());
+	
+	return str2;
+}
+
+/**
+ * Converts from Ptr16* datatype to wstring
+ */
+std::wstring Ptr16ToWstring(const Ptr16* aBuf)
+{
+	std::wstring str2(aBuf->GetLength(), L'\0'); // Make room for characters
+
+	TUint16* temp = aBuf->GetPtr();
+	std::copy(temp,temp+aBuf->GetLength(),str2.begin());
+
+	return str2;
+}
+
+/**
+ * Converts from Ptr16* datatype to string
+ */
+std::string Ptr16ToString(Ptr16* aBuf)
+{
+		std::string str2(aBuf->GetLength(), '\0'); // Make room for characters
+
+		TUint16* temp = aBuf->GetPtr();
+		for(int i =0; i<aBuf->GetLength(); i++)
+		{
+			str2[i] = *temp++;
+		}
+		str2[aBuf->GetLength()] = '\0';
+		return str2;
+}
+
+//Local function to Copy TUint16
+void BufCpy(TUint16* aTemp1,TUint16* aTemp2, TInt aLength)
+{
+	for(TInt i =0 ; i< aLength; i++)
+	{
+		*aTemp1++ = *aTemp2++;
+	}
+}
+
+//Local function to Copy TUint8
+void BufCpy8(TUint8* aTemp1, const TUint8* aTemp2, TInt aLength)
+{
+	for(TInt i =0 ; i< aLength; i++)
+	{
+		*aTemp1++ = *aTemp2++;
+	}
+}
+
+//Search for either wild character in the input string.
+//return 1 if found else return 0
+TInt FindWild(PtrC16 *aPtr)
+{
+	TUint32 i = 0;
+	const TUint16* Pt = aPtr->iPtr;
+	for( i=0; i < aPtr->iMaxLength; i++)
+	{
+		if((*Pt=='*') || (*Pt=='?'))
+			return 1;
+		else
+			Pt++;
+	}
+	return 0;
+}
+
+//Find if wild character present in the input string
+//return 1 if found else return 0
+TInt FindWild(std::string& aRegistrationFileDrive, std::string& aAppFilePath, std::string& aAppFileNameAndExt)
+{
+
+	string::size_type index1 = aRegistrationFileDrive.find_last_of("*?");
+	if( index1 != string::npos )
+		return 1;
+
+	string::size_type index2 = aAppFilePath.find_last_of("*?");
+	if( index2 != string::npos )
+		return 1;
+
+	string::size_type index3 = aAppFileNameAndExt.find_last_of("*?");
+	if( index3 != string::npos )
+		return 1;
+	return 0;
+}
+
+//Default Constructor for class ParsePtrC
+ParsePtrC::ParsePtrC() 
+		: iNamePresent(0),iPathPresent(0),iExtPresent(0),iDrivePresent(0)
+{
+}
+
+//Destructor for class ParsePtrC
+ParsePtrC::~ParsePtrC() 
+{
+	delete iNameBuf;
+	delete Buf;
+	iNameBuf = NULL;
+	Buf = NULL;
+}
+
+//To Avoid double Delete in destructor.
+void ParsePtrC::SetToNull()
+{
+	iNameBuf = NULL;
+}
+
+//Constructor for class ParsePtrC
+ParsePtrC::ParsePtrC(const PtrC16* aName)
+	: iNamePresent(0),iPathPresent(0),iExtPresent(0),iDrivePresent(0)
+	{
+	iNameBuf = new PtrC16;
+	TUint16* temp = (TUint16*)aName->iPtr;
+	if(NULL==iNameBuf)
+	{
+		std::string errMsg= "Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+	iNameBuf->iPtr = aName->iPtr;
+	iNameBuf->iMaxLength = aName->iMaxLength;
+
+	Buf = new string(aName->iMaxLength,'\0');
+
+	if(NULL==Buf)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+
+	for(TInt i = 0; i<aName->iMaxLength; i++ )
+	{
+		(*Buf)[i] = *temp;
+		temp++;
+	}
+}
+
+PtrC16* ParsePtrC::FullName()
+{
+	return iNameBuf;
+}
+
+std::string ParsePtrC::StrName()
+{
+	return *Buf;
+}
+
+//Constructor for class ParsePtrC
+ParsePtrC::ParsePtrC(std::string aStr)
+	: iNamePresent(0),iPathPresent(0),iExtPresent(0),iDrivePresent(0)
+{
+	Buf = new string;
+	if(NULL==Buf)
+	{
+		std::string errMsg= "Failed : Error in Reading File. Memory Allocation Failed";
+		throw CResourceFileException(errMsg);
+	}
+	*Buf = aStr;
+}
+
+std::string ParsePtrC::Name()
+{
+  string iName;
+
+  #ifdef __LINUX__
+  TInt i = Buf->rfind("/");
+  #else
+  TInt i = Buf->rfind("\\");
+  #endif
+
+  if(i!=string::npos)
+     iName.assign(*Buf, i, Buf->size()-4);
+  else
+  {
+	  if(ExtPresent())
+		iName.assign(*Buf, i, Buf->size()-4);
+	  else
+		iName.assign(*Buf, 0, Buf->size());
+  }
+	  
+   return iName;
+}
+
+std::string ParsePtrC::NameAndExt()
+{
+  string iName;
+
+  #ifdef __LINUX__
+  TInt i = Buf->rfind("/");
+  #else
+  TInt i = Buf->rfind("\\");
+  #endif
+  
+  if(i!=string::npos)
+     iName.assign(*Buf, i, Buf->size());
+
+   return iName;
+}
+
+std::string ParsePtrC::FullPath()
+{
+  string iName;
+
+  #ifdef __LINUX__
+  TInt i = Buf->rfind("/");
+  #else
+  TInt i = Buf->rfind("\\");
+  #endif
+  
+  if(i!=string::npos)
+     iName.assign(*Buf, 0, i);
+
+   return iName;
+}
+
+std::string ParsePtrC::Path()
+{
+  string iName;
+
+  #ifdef __LINUX__
+  TInt j = Buf->rfind("/");
+  TInt i = Buf->find("/");
+  #else
+  TInt j = Buf->rfind("\\");
+  TInt i = Buf->find("\\");
+  #endif
+
+  if(i!=string::npos)
+     iName.assign(*Buf, i, Buf->size()-j);
+
+   return iName;
+}
+
+std::string ParsePtrC::Drive()
+{
+  string iName;
+
+   string::size_type index = Buf->find( ':' );
+   if( index != string::npos )
+		iName.assign(*Buf, index-1, 2);
+
+   return iName;
+}
+
+std::string ParsePtrC::FullNameWithoutDrive()
+{
+  string iName;
+
+   string::size_type index = Buf->find( ':' );
+   if( index != string::npos )
+		iName.assign(*Buf, index+1, Buf->size());
+
+   return iName;
+}
+
+TInt ParsePtrC::NamePresent()
+{
+	#ifdef __LINUX__
+	TInt i = Buf->rfind("/");
+    #else
+	TInt i = Buf->rfind("\\");
+    #endif
+
+	if(i!=string::npos)
+		iNamePresent = 1;
+	else
+	{
+		if(Buf!= NULL)
+			iNamePresent = 1;
+		else
+			iNamePresent = 0;
+	}
+	return iNamePresent;
+}
+
+TInt ParsePtrC::PathPresent()
+{
+	#ifdef __LINUX__
+	TInt i = Buf->find("/");
+	#else
+	TInt i = Buf->find("\\");
+	#endif
+
+	if(i!=string::npos)
+		iPathPresent = 1;
+	else
+		iPathPresent = 0;
+	return iPathPresent;
+}
+
+TInt ParsePtrC::ExtPresent()
+{
+	TInt i = Buf->find(".");
+	if(i!=string::npos)
+		iExtPresent = 1;
+	else
+		iExtPresent = 0;
+	return iExtPresent;
+}
+
+TInt ParsePtrC::DrivePresent()
+{
+	TInt i = Buf->find(":");
+	if(i!=string::npos)
+		iDrivePresent = 1;
+	else
+		iDrivePresent = 0;
+	return iDrivePresent;
+}
+
+TInt ParsePtrC::IsWild()
+{
+	string::size_type index = Buf->find_last_of("*?");
+	if( index != string::npos )
+		return 1;
+	return 0;
+}
+
+TInt ParsePtrC::IsValidName()
+{
+	#ifdef __LINUX__
+	    string::size_type index = Buf->find_last_of("*?< > : \" \\ |");
+	#else
+	    string::size_type index = Buf->find_last_of("*?< > : \" |");
+	#endif
+
+	if( index != string::npos )
+		return 1;
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/parse.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,90 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// parse.h
+//
+/** 
+* @file parse.h
+*
+* @internalComponent
+* @released
+*/
+#ifndef __PARSE_H__
+#define __PARSE_H__
+
+#include <iostream>
+#include <string>
+#include "commontypes.h"
+using namespace std;
+
+#define KUidAppRegistrationResourceFile 0x101f8021
+
+//Local function to Copy TUint16
+void BufCpy(TUint16* aTemp1,TUint16* aTemp2, TInt aLength);
+//Local function to Copy TUint8
+void BufCpy8(TUint8* aTemp1, const TUint8* aTemp2, TInt aLength);
+//Find if wild character present in the input string
+TInt FindWild(PtrC16 *aPtr);
+//Find if wild character present in the input string
+TInt FindWild(std::string& aRegistrationFileDrive, std::string& aAppFilePath, std::string& aAppFileNameAndExt);
+
+std::string FullNameWithoutDrive(std::string& Buf );
+
+/**
+ * Converts from Ptr8* datatype to wstring
+ */
+std::wstring Ptr8ToWstring(const Ptr8* aBuf);
+/**
+ * Converts from Ptr16* datatype to wstring
+ */
+std::wstring Ptr16ToWstring(const Ptr16* aBuf);
+/**
+ * Converts from Ptr16* datatype to string
+ */
+std::string Ptr16ToString(Ptr16* aBuf);
+
+
+class ParsePtrC 
+	{
+public:
+	ParsePtrC();
+	~ParsePtrC();
+	ParsePtrC(std::string aStr);
+	ParsePtrC(const PtrC16* aName);
+	
+	PtrC16* FullName();
+	std::string StrName();
+	std::string Name();
+	std::string NameAndExt();
+	std::string FullPath();
+	std::string Path();
+	std::string Drive();
+	std::string FullNameWithoutDrive();
+	TInt NamePresent();
+	TInt PathPresent();
+	TInt ExtPresent();
+	TInt DrivePresent();
+	TInt IsWild();
+	TInt IsValidName();
+	void SetToNull();
+
+private:
+	PtrC16* iNameBuf;
+	TInt iNamePresent;
+	TInt iPathPresent;
+	TInt iExtPresent;
+	TInt iDrivePresent;
+	std::string* Buf;
+	};
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/uidtype.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,168 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+/** 
+* @file uidtype.cpp
+*
+* @internalComponent
+* @released
+*/
+#include <cassert>
+#include "uidtype.h"
+using namespace rscparser;
+// Class TUid
+
+TBool TUid::operator==(const TUid& aUid) const
+/**
+Compares two UIDs for equality.
+
+@param aUid The UID to be compared with this UID.
+
+@return True, if the two UIDs are equal; false otherwise. 
+*/
+	{
+
+	return(iUid==aUid.iUid);
+	}
+
+TBool TUid::operator!=(const TUid& aUid) const
+/**
+Compares two UIDs for inequality.
+
+@param aUid The UID to be compared with this UID.
+
+@return True, if the two UIDs are unequal; false otherwise. 
+*/
+	{
+
+	return(iUid!=aUid.iUid);
+	}
+
+/**
+Get  UID.
+
+@param Void
+
+@return UID. 
+*/
+TUint32 TUid::GetUid()
+{
+	return iUid;
+}
+
+TUidType::TUidType()
+/**
+Default constructor.
+
+Creates a UID type, and sets all three component UIDs to NullUid.
+*/
+    {
+
+	memset(this,0,sizeof(TUidType));
+    }
+
+TUidType::TUidType(TUid aUid1,TUid aUid2,TUid aUid3)
+/**
+Constructor that creates a UID type and sets all three UID components
+to the specified values.
+
+@param aUid1 Value for UID1.
+@param aUid2 Value for UID2.
+@param aUid3 Value for UID3.
+*/
+    {
+
+
+    iUid[0]=aUid1;
+    iUid[1]=aUid2;
+    iUid[2]=aUid3;
+    }
+
+
+const TUid& TUidType::operator[](TInt aIndex) const
+/**
+Gets the UID component as identified by the specified index.
+
+@param aIndex Index value indicating which UID component to return.
+               0 specifies UID1,
+               1 specifies UID2,
+               2 specifies UID3.
+
+@return A reference to the required UID component.
+
+@panic USER 37 if aIndex is not in the range 0 to 2, inclusive.
+*/
+    {
+
+	assert(aIndex>=0 && aIndex<KMaxCheckedUid);
+	return(iUid[aIndex]);
+    }
+
+TBool TUidType::operator==(const TUidType& aUidType) const
+/**
+Compares this UID type for equality with the specified UID type.
+
+@param aUidType The UID type to be compared. 
+
+@return True, if each component UID is equal to the corresponding component 
+        UID in the specified UID type; false, otherwise.
+*/
+    {
+
+    return(iUid[0]==aUidType.iUid[0] &&
+           iUid[1]==aUidType.iUid[1] &&
+           iUid[2]==aUidType.iUid[2]);
+    }
+
+TCheckedUid::TCheckedUid()
+//
+// Constructor
+//
+	{
+
+	memset(this,0,sizeof(TCheckedUid));
+	}
+
+TCheckedUid::TCheckedUid(const TUidType& aUidType)
+//
+// Constructor
+//
+	{
+
+	Set(aUidType);
+	}
+
+void TCheckedUid::Set(const TUidType& aUidType)
+//
+// Set from a aUidType
+//
+	{
+	iType=aUidType;
+	}
+
+const TUidType&  TCheckedUid::UidType() const
+{
+	return (iType);
+}
+
+void TCheckedUid::Set(const TUint8* aDes, TInt aLen)
+    {
+   	assert(aLen == sizeof(TCheckedUid));
+    memcpy(this,aDes,aLen);
+    }
+
+TCheckedUid::TCheckedUid(const TUint8* aDes, TInt aLen)
+    {
+    memset(this,0,sizeof(TCheckedUid));
+    Set(aDes, aLen);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/rscparser/uidtype.h	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,123 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// uidtype.h
+//
+
+/** 
+* @file uidtype.h
+*
+* @internalComponent
+* @released
+*/
+
+#ifndef __UIDTYPE_H__
+#define __UIDTYPE_H__
+
+#include <iostream>
+#include "symbiantypes.h"
+
+namespace rscparser
+{
+/**
+Defines a Null UID value.
+*/
+const TInt KNullUidValue=0;
+
+/**
+Defines the number of TUids that form a TUidType.
+*/
+const TInt KMaxCheckedUid=3;
+
+/**
+A globally unique 32-bit number.
+*/
+class TUid
+	{
+public:
+	TBool operator==(const TUid& aUid) const;
+	TBool operator!=(const TUid& aUid) const;
+	static inline TUid Uid(TInt aUid);
+	static inline TUid Null();
+	TUint32 GetUid();
+	
+public:
+	/**
+	The 32-bit integer UID value.
+	*/
+	TUint32 iUid;
+	};
+
+
+/**
+Defines a null UID
+*/
+#define NullUid TUid::Null()
+
+/**
+Constructs a Null-valued TUid object.
+
+@return The constructed Null-valued TUid object.
+*/
+inline TUid TUid::Null()
+	{TUid uid={KNullUidValue};return uid;}
+
+/**
+Constructs the TUid object from a 32-bit integer.
+
+@param aUid The 32-bit integer value from which the TUid object is to be
+            constructed.
+
+@return The constructed TUid object.
+*/
+inline TUid TUid::Uid(TInt aUid)
+	{TUid uid={aUid};return uid;}
+	
+/**
+Encapsulates a set of three unique identifiers (UIDs) which, in combination, 
+identify a system object such as a GUI application or a DLL. The three
+component UIDs are referred to as UID1, UID2 and UID3.
+
+An object of this type is referred to as a compound identifier or a UID type.
+*/
+class TUidType
+	{
+public:
+
+	 TUidType();
+	 TUidType(TUid aUid1,TUid aUid2,TUid aUid3);
+	 TBool operator==(const TUidType& aUidType) const;
+	 const TUid& operator[](TInt anIndex) const;
+	
+private:
+	TUid iUid[KMaxCheckedUid];
+	};
+
+/**
+Packages a Uid type together with a checksum.
+*/
+class TCheckedUid
+     {
+ public:
+     TCheckedUid();
+     TCheckedUid(const TUidType& aUidType);
+	 TCheckedUid(const TUint8* aDes, TInt aLen);
+     void Set(const TUidType& aUidType);
+	 void Set(const TUint8* aDes, TInt aLen);
+     const TUidType&  UidType() const;
+private:
+    TUidType iType;
+	TUint32 iCheck;
+    };
+}
+#endif
\ No newline at end of file
--- a/secureswitools/swisistools/source/scrtool/data/create_db.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/scrtool/data/create_db.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -9,7 +9,8 @@
 	<SQLQuery>CREATE TABLE SoftwareTypeNames(NameId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeId INTEGER NOT NULL,Locale INTEGER DEFAULT 0,Name TEXT NOT NULL);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_SoftwareTypeNames_SoftwareTypeId ON SoftwareTypeNames(SoftwareTypeId);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_SoftwareTypeNames_Name ON SoftwareTypeNames(Name);</SQLQuery>
-	<SQLQuery>CREATE TABLE SoftwareTypes(SoftwareTypeId INTEGER PRIMARY KEY NOT NULL,SifPluginUid INTEGER,InstallerSecureId INTEGER,ExecutionLayerSecureId INTEGER);</SQLQuery>
+	<SQLQuery>CREATE TABLE SoftwareTypes(SoftwareTypeId INTEGER PRIMARY KEY NOT NULL,SifPluginUid INTEGER,LauncherExecutable TEXT DEFAULT '');</SQLQuery>
+	<SQLQuery>CREATE TABLE CustomAccessList(AccessId INTEGER PRIMARY KEY AUTOINCREMENT,SoftwareTypeId INTEGER NOT NULL,SecureId INTEGER NOT NULL,AccessMode INTEGER DEFAULT 0);</SQLQuery>
 	<SQLQuery>CREATE TABLE MimeTypes(MimeTypeId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeId INTEGER NOT NULL,MimeType TEXT NOT NULL UNIQUE COLLATE NOCASE);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_MimeTypes_SoftwareTypeId ON MimeTypes(SoftwareTypeId);</SQLQuery>
 	<SQLQuery>CREATE TABLE Components(ComponentId INTEGER PRIMARY KEY AUTOINCREMENT,SoftwareTypeId INTEGER NOT NULL,SoftwareTypeName TEXT NOT NULL,Size INTEGER DEFAULT 0,Removable BOOLEAN DEFAULT 1,ScomoState INTEGER DEFAULT 0,DRMProtected INTEGER DEFAULT 0,Hidden INTEGER DEFAULT 0,KnownRevoked INTEGER DEFAULT 0,OriginVerified INTEGER DEFAULT 0,InstalledDrives INTEGER DEFAULT 0,GlobalIdHash INTEGER DEFAULT 0,GlobalId TEXT UNIQUE,Version TEXT,InstallTime TEXT NOT NULL,CompPresence BOOLEAN DEFAULT 1);</SQLQuery>
@@ -32,5 +33,21 @@
 	<SQLQuery>CREATE INDEX idx_FileProperties_CmpFileId ON FileProperties(CmpFileId);</SQLQuery>
 	<SQLQuery>CREATE TABLE ScrVersion(MajorVersion INTEGER NOT NULL, MinorVersion INTEGER NOT NULL, BuildNumber INTEGER NOT NULL);</SQLQuery>
 	<SQLQuery>INSERT INTO ScrVersion(MajorVersion, MinorVersion, BuildNumber) VALUES(1, 1, 1);</SQLQuery>
+	<SQLQuery>CREATE TABLE AppRegistrationInfo(AppUid INTEGER PRIMARY KEY NOT NULL,ComponentId INTEGER DEFAULT 0,AppFile TEXT COLLATE NOCASE UNIQUE NOT NULL,TypeId INTEGER NOT NULL,Attributes INTEGER DEFAULT 0,Hidden INTEGER DEFAULT 0,Embeddable INTEGER DEFAULT 0,NewFile INTEGER DEFAULT 0,Launch INTEGER DEFAULT 0,GroupName TEXT COLLATE NOCASE,DefaultScreenNumber INTEGER DEFAULT 0);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_AppRegistrationInfo_AppFile ON AppRegistrationInfo(AppFile);</SQLQuery>
+	<SQLQuery>CREATE TABLE FileOwnershipInfo(FileOwnerInfoId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,FileName TEXT NOT NULL COLLATE NOCASE);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_FileOwnershipInfo_AppUid ON FileOwnershipInfo(AppUid);</SQLQuery>
+	<SQLQuery>CREATE TABLE ServiceInfo(ServiceId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,Uid INTEGER DEFAULT 0);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ServiceInfo_AppUid ON ServiceInfo(AppUid);</SQLQuery>
+	<SQLQuery>CREATE TABLE DataType(DataTypeId INTEGER PRIMARY KEY AUTOINCREMENT,ServiceId INTEGER NOT NULL,Priority INTEGER NOT NULL,Type TEXT NOT NULL COLLATE NOCASE);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_DataType_ServiceId ON DataType(ServiceId);</SQLQuery>
+	<SQLQuery>CREATE TABLE LocalizableAppInfo(LocalAppInfoId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,ShortCaption TEXT COLLATE NOCASE,GroupName TEXT COLLATE NOCASE,Locale INTEGER DEFAULT 0,CaptionAndIconId INTEGER,CONSTRAINT U_AppUid_Locale UNIQUE (AppUid,Locale));</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_LocalizableAppInfo ON LocalizableAppInfo(AppUid,Locale);</SQLQuery>
+	<SQLQuery>CREATE TABLE ViewData(ViewId INTEGER PRIMARY KEY AUTOINCREMENT,LocalAppInfoId INTEGER NOT NULL,Uid INTEGER NOT NULL,ScreenMode INTEGER DEFAULT 0,CaptionAndIconId INTEGER);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ViewData_LocalAppInfoId ON ViewData(LocalAppInfoId);</SQLQuery>
+	<SQLQuery>CREATE TABLE CaptionAndIconInfo(CaptionAndIconId INTEGER PRIMARY KEY AUTOINCREMENT,Caption TEXT COLLATE NOCASE,NumberOfIcons INTEGER DEFAULT 0,IconFile TEXT COLLATE NOCASE);</SQLQuery>
+	<SQLQuery>CREATE TABLE AppProperties(PropertyId INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT NOT NULL COLLATE NOCASE,Locale INTEGER DEFAULT 0,AppUid INTEGER NOT NULL,ServiceUid INTEGER DEFAULT 0,IntValue INTEGER,StrValue TEXT,IsStr8Bit BOOLEAN DEFAULT 0,CONSTRAINT U_AppUid_Locale_Name UNIQUE (AppUid,ServiceUid,Locale,Name));</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_AppProperties_AppUid ON AppProperties(AppUid);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_AppProperties_Name ON AppProperties(Name);</SQLQuery>
 </CreateDatabase>
 
Binary file secureswitools/swisistools/source/scrtool/data/preprovision.dtd has changed
--- a/secureswitools/swisistools/source/scrtool/main.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/scrtool/main.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -37,7 +37,7 @@
 
 	try
 		{
-		const char* epocRoot = getenv("EPOCROOT");
+		const char* epocRoot = getenv("EPOCROOT");		
 		if(NULL == epocRoot)
 			{
 			throw CException("EPOCROOT environment variable not specified.", ExceptionCodes::EEnvNotSpecified);
@@ -49,13 +49,23 @@
 		std::string logFileName(options.GetLogFileName());
 		std::auto_ptr<CLogger> logger(new CLogger(logFileName, options.GetLogLevel()));
 		
-		std::string dllPath = "sqlite3.dll";
+   #ifdef __LINUX__
+  	  	 std::string dllPath = "sqlite-3.6.1.so";
+   #else
+ 	       std::string dllPath = "sqlite3.dll";
+   #endif
+  	  	 	 
 		std::auto_ptr<CDbLayer> db( new CDbLayer(dllPath, options.GetDbFileName()));
 		std::auto_ptr<CScrXmlParser> xmlParser( new CScrXmlParser());
 
 		if(options.IsDbAbsent())
 			{
+		  #ifdef __LINUX__ 		  
+			std::string dbFileName = epocRootStr + "epoc32/tools/create_db.xml";
+			#else
 			std::string dbFileName = epocRootStr + "epoc32\\tools\\create_db.xml";
+			#endif
+			
 			std::auto_ptr<SchemaDetails> schema(xmlParser->ParseDbSchema(dbFileName));
 			db->CreateScrDatabase(*schema);
 			}
--- a/secureswitools/swisistools/source/scrtool/options.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/scrtool/options.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -24,12 +24,12 @@
 #include <string>
 #include <algorithm>
 
-std::string COptions::iCurrentVersion = "Registry Database Generator Version 1, 0, 1";
+std::string COptions::iCurrentVersion = "Registry Database Generator Version 1, 0, 2";
 
 std::string COptions::iDescription =	"A utility for generating and updating the Software Component Registry database which stores "
 							"information for all installed software components.";
 
-std::string COptions::iCopyright = "Copyright (c) 2008 Symbian Software Ltd. All rights reserved.";
+std::string COptions::iCopyright = "Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.";
 
 std::string COptions::iUsage	=	
 						"Usage : scrtool [-h|-?] [-v] [-l] [-w] -c or -d [DB name] -f [Environment XML file] -p [Pre-provision XML file]"
@@ -294,4 +294,4 @@
 bool COptions::IsPreProvisionInfoAvailable()
 	{
 	return iPreProvisionUpdate;
-	}
\ No newline at end of file
+	}
--- a/secureswitools/swisistools/source/sisxlibrary/siscapabilities.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/sisxlibrary/siscapabilities.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -83,6 +83,7 @@
 	nulStderr = fopen("NUL:", "w");
 	#endif
 
+
 	CSISException::ThrowIf(nulStderr == NULL, CSISException::EFileProblem, "Failed in redirection operation");
 
 	CSISException::ThrowIf(_dup2(_fileno(nulStderr), 2) == -1, CSISException::EFileProblem, "Failed in redirection operation");
--- a/secureswitools/swisistools/source/sisxlibrary/siscontents.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/sisxlibrary/siscontents.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
--- a/secureswitools/swisistools/source/sisxlibrary/sisstring.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/sisxlibrary/sisstring.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -29,7 +29,7 @@
 #include "utility.h"
 #include "exception.h"
 #include "utils.h"
-#include "utf8.h"
+#include "utf8_wrapper.h"
 
 // we cannot write or read a string directly from a file, because we don't know what format the
 // MS implementation of STL will use for the std::string. So we need to go via an intemediate buffer.
--- a/secureswitools/swisistools/source/sisxlibrary/utility.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/sisxlibrary/utility.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -374,8 +374,8 @@
 
 std::wstring FixPathDelimiters( const std::wstring& aString )
     {
-
     std::wstring ret = aString;
+	
     std::wstring::size_type idx = 0;
     int len = 0;
 	while(len = FirstInvalidDirSeparatorSize(ret, idx))
--- a/secureswitools/swisistools/source/sisxlibrary/utility_interface.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/sisxlibrary/utility_interface.h	Tue Aug 31 15:21:33 2010 +0300
@@ -38,6 +38,8 @@
 
 // common interface for Windows and Linux
 
+const int commandLength = 512;
+
 wchar_t** CommandLineArgs(int &argc , char *argv[]);
 
 void cleanup(int argc, wchar_t **argv);
@@ -100,28 +102,33 @@
 int ConvertMultiByteToWideChar(const char* aSource, int aSourceLen, wchar_t* aTarget, int aTargetLen, TUint32 aCodePage = 0);
 
 /*
-Copies an existing file to a new file.
-@Parameters aSrc : The name of an existing file. 
-@Parameters aDest : The name of the new file. 
-@Parameters aFlag : (only for windows) If this parameter is TRUE and the new file specified by aDest already exists, the function fails. If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds.
+ * Copies an existing file to a new file. 
+ *
+ * @Parameters aSrc					The name of an existing file.  
+ * @Parameters aDest				The name of the new file. 
+ * @Parameters aFailIfExistsFlag    If this parameter is TRUE and the new file specified by aDest already exists, 
+ *									the function fails. If this parameter is FALSE and the new file already exists, 
+ *									the function overwrites the existing file and succeeds.
+ * @return 
+ *									If the function succeeds, the return value is zero.
+ *									If the function fails, the return value is non-zero.
+ */
 
-Return Value
-If the function succeeds, the return value is zero.
-If the function fails, the return value is nonzero.
-*/
-
-int FileCopyA(const char* aSrc, const char* aDest, size_t aFlag);
+int FileCopyA(const char* aSrc, const char* aDest, bool aFailIfExistsFlag);
 
 
 /*
-Moves an existing file or a directory, including its children
-@Parameters aSrc : The current name of the file or directory on the local computer. 
-@Parameters aDest : The new name for the file or directory. The new name must not already exist. A new file may be on a different file system or drive. A new directory must be on the same drive. 
-
-Return Value
-If the function succeeds, the return value is zero.
-If the function fails, the return value is nonzero.
-*/
+ * Moves an existing file or a directory, including its children.
+ *
+ * @Parameters aSrc					The current name of the file or directory on the local computer. 
+ * @Parameters aDest				The new name for the file or directory. The new name must not already exist. 
+ *									A new file may be on a different file system or drive. A new directory must be 
+ *									on the same drive. 
+ *
+ * @return
+ *									If the function succeeds, the return value is zero.
+ *									If the function fails, the return value is non-zero.
+ */
 
 int FileMoveA(const char* aSrc, const char* aDest);
 
--- a/secureswitools/swisistools/source/sisxlibrary/utility_linux.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/sisxlibrary/utility_linux.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -627,12 +627,19 @@
 	}
 
 
-int FileCopyA(const char* aSrc, const char* aDest, size_t aFlag)
+int FileCopyA(const char* aSrc, const char* aDest, bool aFailIfExistsFlag)
 	{
 		int err= 0;
-		const int len = 512;
-		// Overwrites the orphaned file(if any).
-		char cmd[ len ] = "cp -f ";
+
+		char cmd[ commandLength ] = "";
+		if( aFailIfExistsFlag )
+		{
+			strcpy(cmd, "cp ");
+		}
+		else
+		{
+			strcpy(cmd, "cp -f ");
+		}
 		strcat(cmd, aSrc);
 		strcat(cmd, " ");
 		strcat(cmd, aDest);
@@ -642,13 +649,12 @@
 
 		return err;
 	}
-	
 int FileMoveA(const char* aSrc, const char* aDest)
 	{
 		int err= 0;
 
 		// Overwrites the orphaned file(if any).
-		char cmd[ 512 ] = "mv -f ";
+		char cmd[ commandLength ] = "mv -f ";
 		strcat(cmd, aSrc);
 		strcat(cmd, " ");
 		strcat(cmd, aDest);
--- a/secureswitools/swisistools/source/sisxlibrary/utility_windows.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/sisxlibrary/utility_windows.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -185,15 +185,21 @@
 	return ::GetLastError();
 	}
 
-int FileCopyA(const char* aSrc, const char* aDest, size_t aFlag)
+int FileCopyA(const char* aSrc, const char* aDest, bool aFailIfExistsFlag)
 {
-	int err=CopyFileA(aSrc,aDest,aFlag);
-	return err;
+	// CopyFileA() returns zero on failure and non-zero otherwise.
+	int err=CopyFileA(aSrc,aDest,aFailIfExistsFlag);
+	// To maintain consistency with the LINUX wrapper API FileCopyA() which uses cp 
+	// command with system(), we return 0 on success and 1 on failure.
+	return !err;
 }
 
 int FileMoveA(const char* aSrc, const char* aDest)
 {
+	// MoveFileA() returns zero on failure and non-zero otherwise.
 	int err=MoveFileA(aSrc,aDest);
-	return err;
+	// To maintain consistency with the LINUX wrapper API FileMoveA() which uses mv
+	// command with system(), we return 0 on success and 1 on failure.
+	return !err;
 }
 
--- a/secureswitools/swisistools/source/sisxlibrary/utils.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/sisxlibrary/utils.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -28,7 +28,7 @@
 
 #include "utils.h"
 #include <wchar.h>
-#include "utf8.h"
+#include "utf8_wrapper.h"
 #include "utility_interface.h"
 
 #define TMP_FILE_STUB	L"~si"
Binary file secureswitools/swisistools/source/xmlparser/xerces/lib/libxerces_linux.a has changed
--- a/secureswitools/swisistools/source/xmlparser/xmlparser.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/xmlparser/xmlparser.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -27,7 +27,9 @@
 #include "xmlparser.h"
 #include "logs.h"
 #include "exception.h"
+#include "utf8_wrapper.h"
 #include "util.h"
+#include "utility.h"
 
 #include <xercesc/sax2/XMLReaderFactory.hpp>
 #include <xercesc/sax2/DefaultHandler.hpp>
@@ -42,13 +44,65 @@
 #include <memory>
 #include <cstdio>
 
+#ifndef _WIN32
+#include <ctype.h>
+
+//__ctype_b was removed from glibc. This is a workaround to fix the linking problem
+extern "C"
+    {
+    const unsigned short int** __ctype_b()
+        {
+        return __ctype_b_loc();
+        }
+    }
+
+#endif // _WIN32
+
 XERCES_CPP_NAMESPACE_USE
 
+
+//------------------------------------------------------------------------------------------------------------------------------
+//											UTILITY FUNCTIONS
+//------------------------------------------------------------------------------------------------------------------------------
+int XercesStringToInteger(const XercesString& aWideStr)
+	{
+	int strLen = aWideStr.length();
+	const XMLCh* source = aWideStr.c_str();	
+  char* buffer = new char[strLen << 2];
+  
+	// Using a temp variable in place of buffer as ConvertUTF16toUTF8 modifies the source pointer passed.
+	char* temp = buffer;	
+	
+	ConvertUTF16toUTF8(&source, aWideStr.c_str() + strLen, &temp,  temp + (strLen << 2));
+	
+	// Appending NUL to the converted buffer.
+	*temp = 0;
+
+	int value = 0;
+	sscanf(buffer, "%d", &value);
+
+	delete[] buffer;
+	return value;
+	}
+
+
 // these function pointers are used to call appropriate release methods of XMLString
 // present in the xerces library. 
 typedef void (*releaseXmlChPtr) (XMLCh** buf);
 typedef void (*releaseChPtr) (char** buf);
 
+#ifdef _WIN32
+
+// We need not do anything for WINDOWS, since XMLCh string(XercesString)
+// and WString both are same and will be in UTF-16 encoding format.
+#define XMLChToWString(aParameter) (aParameter)
+
+#else
+inline std::wstring XMLChToWString(const XercesString& aXercesString)
+	{
+	return XercesStringToWString (aXercesString);
+	}
+#endif // _WIN32
 
 
 DllExport CScrXmlParser::CScrXmlParser()
@@ -248,8 +302,8 @@
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagUniqueSoftwareTypeName( &XMLString::release, XMLString::transcode("UniqueSoftwareTypeName") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagLocalizableSwTypeName( &XMLString::release, XMLString::transcode("LocalizableSoftwareTypeName") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagSifPluginUid( &XMLString::release, XMLString::transcode("SifPluginUid") );
-	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagInstallerSid( &XMLString::release, XMLString::transcode("InstallerSid") );
-	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagExecutionLayerSid( &XMLString::release, XMLString::transcode("ExecutionLayerSid") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagLauncherExecutable( &XMLString::release, XMLString::transcode("LauncherExecutable") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagCustomAcess( &XMLString::release, XMLString::transcode("CustomAcess") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagMIMEDetails( &XMLString::release, XMLString::transcode("MIMEDetails") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagMIMEType( &XMLString::release, XMLString::transcode("MIMEType") );
 	
@@ -259,7 +313,7 @@
 	
 	DOMNodeList* uniqueSwTypeName = swTypeNamesNode->getElementsByTagName(tagUniqueSoftwareTypeName.get());
 	const XMLCh* textContent = uniqueSwTypeName->item(0)->getTextContent();
-	scrEnvDetails.iUniqueSoftwareTypeName = std::wstring(textContent);
+	scrEnvDetails.iUniqueSoftwareTypeName = XMLChToWString(textContent);
 	
 	DOMNodeList* localizableSwTypeNames = swTypeNamesNode->getElementsByTagName(tagLocalizableSwTypeName.get());
 	const  XMLSize_t localizableSwTypeNamesCount = localizableSwTypeNames->getLength();
@@ -278,19 +332,23 @@
 	sscanf(sifPluginUidText.get(),"%x",&sifPluginUidValue);
 	scrEnvDetails.iSifPluginUid = sifPluginUidValue;
 	
-	DOMNodeList* installerSid = aEnvironment->getElementsByTagName(tagInstallerSid.get());
-	textContent = installerSid->item(0)->getTextContent();
-	fn_auto_ptr<releaseChPtr,char> installerSidText(&XMLString::release, XMLString::transcode(textContent));
-	int installerSidValue = 0;
-	sscanf(installerSidText.get(),"%x",&installerSidValue);
-	scrEnvDetails.iInstallerSid = installerSidValue;
-	
-	DOMNodeList* executionLayerSid = aEnvironment->getElementsByTagName(tagExecutionLayerSid.get());
-	textContent = executionLayerSid->item(0)->getTextContent();
-	fn_auto_ptr<releaseChPtr,char> executionLayerSidText(&XMLString::release, XMLString::transcode(textContent));
-	int executionLayerSidValue = 0;
-	sscanf(executionLayerSidText.get(),"%x",&executionLayerSidValue);
-	scrEnvDetails.iExecutionLayerSid = executionLayerSidValue;
+    DOMNodeList* launcherExecutable = aEnvironment->getElementsByTagName(tagLauncherExecutable.get());
+    if(0 != launcherExecutable->getLength())
+        {
+		textContent = launcherExecutable->item(0)->getTextContent();
+		fn_auto_ptr<releaseXmlChPtr, XMLCh> launcherExecutableText( &XMLString::release,textContent );
+		const XMLCh* launcherExecutableValue = launcherExecutableText.get();
+		scrEnvDetails.iLauncherExecutable = XMLChToWString(launcherExecutableValue);
+		}
+    DOMNodeList* customAcessList = aEnvironment->getElementsByTagName(tagCustomAcess.get());
+	const  XMLSize_t customAcessDataCount = customAcessList->getLength();
+	for( XMLSize_t count=0 ; count<customAcessDataCount ; ++count )
+		{
+		DOMNode* customAcessRoot = customAcessList->item(count);
+		DOMElement* customAcessNode = static_cast< xercesc::DOMElement* >( customAcessRoot );
+		XmlDetails::TScrEnvironmentDetails::TCustomAcessList customAcessData = GetCustomAcessList(customAcessNode);
+		scrEnvDetails.iCustomAcessList.push_back(customAcessData);
+		}
 	
 	DOMNodeList* mimeDetails = aEnvironment->getElementsByTagName(tagMIMEDetails.get());
 	DOMNode* mimeDetailRoot	= mimeDetails->item(0);
@@ -300,7 +358,8 @@
 	for( XMLSize_t count=0 ; count<mimeCount ; ++count )
 		{
 		const XMLCh* textContent = mimes->item(count)->getTextContent();
-		scrEnvDetails.iMIMEDetails.push_back(textContent);
+		std::wstring textString = XMLChToWString(textContent);
+		scrEnvDetails.iMIMEDetails.push_back(textString);
 		}
 			
 	LOGEXIT("CScrXmlParser::GetEnvironmentData()");
@@ -345,7 +404,7 @@
 	
 		DOMNodeList* softwaretype = elementRoot->getElementsByTagName(tagSoftwareTypeName.get());
 		const XMLCh* textContent = softwaretype->item(0)->getTextContent();
-		preProvisionDetail.iSoftwareTypeName = std::wstring(textContent);
+		preProvisionDetail.iSoftwareTypeName = XMLChToWString(textContent);
 	
 		// Retrieve the nodes for Component.
 		DOMNodeList* componentNodes = elementRoot->getElementsByTagName(tagComponent.get());
@@ -381,6 +440,7 @@
 
 XmlDetails::TScrPreProvisionDetail::TComponent CScrXmlParser::GetPreProvisionData( const DOMElement* aDOMElement)
 	{
+	LOGENTER("CScrXmlParser::GetPreProvisionData()");
 	XmlDetails::TScrPreProvisionDetail::TComponent component;
 	
 	DOMNodeList* childNodes = aDOMElement->getChildNodes();
@@ -392,6 +452,7 @@
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagComponentFile( &XMLString::release, XMLString::transcode("ComponentFile") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagComponentDetails( &XMLString::release, XMLString::transcode("ComponentDetails") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagComponentDependency( &XMLString::release, XMLString::transcode("ComponentDependency") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagApplicationRegistrationInfo( &XMLString::release, XMLString::transcode("ApplicationRegistrationInfo") );
 
 	XmlDetails::TScrPreProvisionDetail::TComponentDetails componentDetails = GetComponentDetails(aDOMElement);
 	component.iComponentDetails = componentDetails;
@@ -422,13 +483,19 @@
 			XmlDetails::TScrPreProvisionDetail::TComponentDependency componentDependency = GetComponentDependency(currentElement);
 			component.iComponentDependency = componentDependency;
 			}
+		else if( XMLString::equals(currentElement->getTagName(), tagApplicationRegistrationInfo.get()))
+			{
+			XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo appRegistrationInfo = GetApplicationRegistrationInfo(currentElement);
+			component.iApplicationRegistrationInfo.push_back(appRegistrationInfo);
+			}
 		}
-
+	LOGEXIT("CScrXmlParser::GetPreProvisionData()");
 	return component;
 	}
 
 XmlDetails::TScrPreProvisionDetail::TComponentLocalizable CScrXmlParser::GetComponentLocalizable(const DOMElement* aDOMElement)
 	{
+	LOGENTER("CScrXmlParser::GetComponentLocalizable()");
 	// tags in ComponentLocalizable
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagComponentLocalizableLocale( &XMLString::release, XMLString::transcode("ComponentLocalizable_Locale") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagComponentLocalizableName( &XMLString::release, XMLString::transcode("ComponentLocalizable_Name") );
@@ -443,24 +510,25 @@
 	if(locale->getLength() != 0)
 		{
 		const XMLCh* textLocale = locale->item(0)->getTextContent();
-		componentLocalizable.iLocale = Util::WideCharToInteger(textLocale);
+		componentLocalizable.iLocale = XercesStringToInteger(textLocale);
 		}
 	
 	const XMLCh* textName = name->item(0)->getTextContent();
-	componentLocalizable.iName = textName;
+	componentLocalizable.iName = XMLChToWString(textName);
 
 	if(vendor->getLength() != 0)
 		{
 		const XMLCh* textVendor = vendor->item(0)->getTextContent();
-		componentLocalizable.iVendor = textVendor;
+		componentLocalizable.iVendor = XMLChToWString(textVendor);
 		}
-
+	LOGEXIT("CScrXmlParser::GetComponentLocalizable()");
 	return componentLocalizable;
 	
 	}
 
 XmlDetails::TScrPreProvisionDetail::TComponentProperty CScrXmlParser::GetComponentProperty(const DOMElement* aEnvironment)
 	{
+	LOGENTER("CScrXmlParser::GetComponentProperty()");
 	// tags in ComponentProperty
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagComponentPropertyName( &XMLString::release, XMLString::transcode("Name") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagComponentPropertyLocale( &XMLString::release, XMLString::transcode("ComponentProperty_Locale") );
@@ -482,12 +550,12 @@
 	XmlDetails::TScrPreProvisionDetail::TComponentProperty componentProperty;
 	
 	const XMLCh* textName = name->getTextContent();
-	componentProperty.iName	= textName;
+	componentProperty.iName	= XMLChToWString(textName);
 	
 	if(locale->getLength() != 0)
 		{
 		const XMLCh* textLocale = locale->item(0)->getTextContent();
-		componentProperty.iLocale = Util::WideCharToInteger(textLocale);
+		componentProperty.iLocale = XercesStringToInteger(textLocale);
 		}
 
 	DOMNodeList* childNodes = value->item(0)->getChildNodes();
@@ -499,13 +567,13 @@
 		if( XMLString::equals(currentElement->getTagName(), tagComponentPropertyIntValue.get()))
 			{
 			componentProperty.iIsIntValue = true;
-			componentProperty.iValue = currentElement->getTextContent();
+			componentProperty.iValue = XMLChToWString(currentElement->getTextContent());
 			break;
 			}
 		else if( XMLString::equals(currentElement->getTagName(), tagComponentPropertyStrValue.get()))
 			{
 			componentProperty.iIsIntValue = false;
-			componentProperty.iValue = currentElement->getTextContent();
+			componentProperty.iValue = XMLChToWString(currentElement->getTextContent());
 			break;
 			}
 		}
@@ -513,15 +581,16 @@
 	if(isBinary->getLength() != 0)
 		{
 		const XMLCh* textIsBinary = isBinary->item(0)->getTextContent();
-		componentProperty.iIsStr8Bit = Util::WideCharToInteger(textIsBinary);		
+		componentProperty.iIsStr8Bit = XercesStringToInteger(textIsBinary);		
 		}
-
+	LOGEXIT("CScrXmlParser::GetComponentProperty()");
 	return componentProperty;
 	
 	}
 
 XmlDetails::TScrPreProvisionDetail::TComponentFile CScrXmlParser::GetComponentFile( const DOMElement* aDOMElement)
 	{
+	LOGENTER("CScrXmlParser::GetComponentFile()");
 	XmlDetails::TScrPreProvisionDetail::TComponentFile componentFile;
 	
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagFileProperty( &XMLString::release, XMLString::transcode("FileProperty") );
@@ -542,13 +611,14 @@
 	// attribute - location
 	DOMNamedNodeMap* attributes = aDOMElement->getAttributes();
 	DOMNode* location = attributes->getNamedItem(tagLocation.get());
-	componentFile.iLocation = location->getTextContent();
-	
+	componentFile.iLocation = XMLChToWString(location->getTextContent());
+	LOGEXIT("CScrXmlParser::GetComponentFile()");
 	return componentFile;
 	}
 
 XmlDetails::TScrPreProvisionDetail::TComponentDependency CScrXmlParser::GetComponentDependency( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement)
 	{
+	LOGENTER("CScrXmlParser::GetComponentDependency()");
 	XmlDetails::TScrPreProvisionDetail::TComponentDependency componentDependency;
 	
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagDepList( &XMLString::release, XMLString::transcode("DependencyList") );
@@ -568,15 +638,15 @@
 		
 		DOMNodeList* supplierId = currentDepDetail->getElementsByTagName(tagSupplierId.get());
 		const XMLCh* textSupplierId = supplierId->item(0)->getTextContent();
-		componentDependencyDetail.iSupplierId = std::wstring(textSupplierId);
+		componentDependencyDetail.iSupplierId = XMLChToWString(textSupplierId);
 		
 		DOMNodeList* fromVersion = currentDepDetail->getElementsByTagName(tagFromVersion.get());
 		const XMLCh* textFromVersion = fromVersion->item(0)->getTextContent();
-		componentDependencyDetail.iFromVersion = std::wstring(textFromVersion);
+		componentDependencyDetail.iFromVersion = XMLChToWString(textFromVersion);
 
 		DOMNodeList* toVersion = currentDepDetail->getElementsByTagName(tagToVersion.get());
 		const XMLCh* textToVersion = toVersion->item(0)->getTextContent();
-		componentDependencyDetail.iToVersion = std::wstring(textToVersion);
+		componentDependencyDetail.iToVersion = XMLChToWString(textToVersion);
 
 		componentDependency.iComponentDependencyList.push_back(componentDependencyDetail);
 		
@@ -585,14 +655,15 @@
 	// attribute - location
 	DOMNamedNodeMap* attributes = aDOMElement->getAttributes();
 	DOMNode* dependentId = attributes->getNamedItem(tagDependentId.get());
-	componentDependency.iDependentId = dependentId->getTextContent();
-	
+	componentDependency.iDependentId = XMLChToWString(dependentId->getTextContent());
+	LOGEXIT("CScrXmlParser::GetComponentDependency()");
 	return componentDependency;
 	}
 
 XmlDetails::TScrPreProvisionDetail::TComponentFile::TFileProperty 
 	CScrXmlParser::GetFileProperty( const DOMElement* aDOMElement)
 	{
+	LOGENTER("CScrXmlParser::GetFileProperty()");
 	// tag for FileProperty
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagFilePropertyName( &XMLString::release, XMLString::transcode("Name") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagFilePropertyValue( &XMLString::release, XMLString::transcode("FileProperty_Value") );
@@ -612,7 +683,7 @@
 	DOMNodeList* isBinary = aDOMElement->getElementsByTagName(tagFilePropertyIsBinary.get());
 	
 	const XMLCh* textName = name->getTextContent();
-	fileProperty.iName	= textName;
+	fileProperty.iName	= XMLChToWString(textName);
 		
 	int valueLength = value->getLength();
 	if(valueLength != 0)
@@ -628,23 +699,26 @@
 				if( XMLString::equals(valueElement->getTagName(), tagFilePropertyIntValue.get()))
 					{
 					fileProperty.iIsIntValue = true;
-					fileProperty.iValue = currentElement->getTextContent();
+					fileProperty.iValue = XMLChToWString(currentElement->getTextContent());
 					}
 				else if( XMLString::equals(valueElement->getTagName(), tagFilePropertyStrValue.get()))
 					{
 					fileProperty.iIsIntValue = false;
-					fileProperty.iValue = currentElement->getTextContent();
+					fileProperty.iValue = XMLChToWString(currentElement->getTextContent());
 					}
 				}
 			}
 		}
+	LOGEXIT("CScrXmlParser::GetFileProperty()");
 	return fileProperty;
 	}
 		
 XmlDetails::TScrPreProvisionDetail::TComponentDetails 
 	CScrXmlParser::GetComponentDetails( const DOMElement* aDOMElement)
 	{
+	LOGENTER("CScrXmlParser::GetComponentDetails()");
 	// tags for ComponentDetails
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagRomApplication( &XMLString::release, XMLString::transcode("RomApplication") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagRemovable( &XMLString::release, XMLString::transcode("Removable") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagSize( &XMLString::release, XMLString::transcode("Size") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagScomoState( &XMLString::release, XMLString::transcode("ScomoState") );
@@ -655,6 +729,7 @@
 	
 	XmlDetails::TScrPreProvisionDetail::TComponentDetails componentDetails;
 	
+	DOMNodeList* romApplication	= aDOMElement->getElementsByTagName(tagRomApplication.get());
 	DOMNodeList* removable	= aDOMElement->getElementsByTagName(tagRemovable.get());
 	DOMNodeList* size		= aDOMElement->getElementsByTagName(tagSize.get());
 	DOMNodeList* scomoState = aDOMElement->getElementsByTagName(tagScomoState.get());
@@ -663,28 +738,35 @@
 	DOMNodeList* originVerified	= aDOMElement->getElementsByTagName(tagOriginVerified.get());
 	DOMNodeList* hidden	= aDOMElement->getElementsByTagName(tagHidden.get());
 	
+	if( romApplication->getLength() != 0)
+		{
+		LOGINFO("CScrXmlParser::GetComponentDetails()- rom app");
+		const XMLCh* textRomApplication = romApplication->item(0)->getTextContent();
+		componentDetails.iIsRomApplication = XercesStringToInteger(textRomApplication);
+		}
+
 	if( removable->getLength() != 0)
 		{
 		const XMLCh* textRemovable = removable->item(0)->getTextContent();
-		componentDetails.iIsRemovable = Util::WideCharToInteger(textRemovable);
+		componentDetails.iIsRemovable = XercesStringToInteger(textRemovable);
 		}
 	
 	if( size->getLength() != 0)
 		{
 		const XMLCh* textSize = size->item(0)->getTextContent();
-		componentDetails.iSize = Util::WideCharToInteger(textSize);
+		componentDetails.iSize = XercesStringToInteger(textSize);
 		}
 	
 	if( scomoState->getLength() != 0)
 		{
 		const XMLCh* textScomoState = scomoState->item(0)->getTextContent();
-		componentDetails.iScomoState = Util::WideCharToInteger(textScomoState);
+		componentDetails.iScomoState = XercesStringToInteger(textScomoState);
 		}
 	
 	if( globalId->getLength() != 0)
 		{
 		const XMLCh* textGlobalId = globalId->item(0)->getTextContent();
-		componentDetails.iGlobalId = textGlobalId;
+		componentDetails.iGlobalId = XMLChToWString(textGlobalId);
 		}
 
 	if( versionDetail->getLength() != 0)
@@ -700,29 +782,30 @@
 		DOMNode* minor = attributes->getNamedItem(tagMinor.get());
 		DOMNode* build = attributes->getNamedItem(tagBuild.get());
 
-		componentDetails.iVersion.iMajor = major->getTextContent();
-		componentDetails.iVersion.iMinor = minor->getTextContent();
-		componentDetails.iVersion.iBuild = build->getTextContent();
+		componentDetails.iVersion.iMajor = XMLChToWString(major->getTextContent());
+		componentDetails.iVersion.iMinor = XMLChToWString(minor->getTextContent());
+		componentDetails.iVersion.iBuild = XMLChToWString(build->getTextContent());
 		}
 	
 	if( originVerified->getLength() != 0)
 		{
 		const XMLCh* textOriginVerified = originVerified->item(0)->getTextContent();
-		componentDetails.iOriginVerified = Util::WideCharToInteger(textOriginVerified);
+		componentDetails.iOriginVerified = XercesStringToInteger(textOriginVerified);
 		}
 	
 	if( hidden->getLength() != 0)
 		{
 		const XMLCh* textHidden = hidden->item(0)->getTextContent();
-		componentDetails.iIsHidden = Util::WideCharToInteger(textHidden);
+		componentDetails.iIsHidden = XercesStringToInteger(textHidden);
 		}
-	
+	LOGEXIT("CScrXmlParser::GetComponentDetails()");
 	return componentDetails;
 	}
 
 XmlDetails::TScrEnvironmentDetails::TLocalizedSoftwareTypeName 
 	CScrXmlParser::GetLocalizedSoftwareTypeName(const DOMElement* aDOMElement)
 	{
+	LOGENTER("CScrXmlParser::GetLocalizedSoftwareTypeName()");
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagSwTypeNameLocale( &XMLString::release, XMLString::transcode("Locale") );
 	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagSwTypeNameValue( &XMLString::release, XMLString::transcode("Value") );
 	
@@ -733,12 +816,601 @@
 	XmlDetails::TScrEnvironmentDetails::TLocalizedSoftwareTypeName localizedSwTypeName;
 
 	const XMLCh* textLocale = locale->getTextContent();
-	localizedSwTypeName.iLocale = Util::WideCharToInteger(textLocale);
+	localizedSwTypeName.iLocale = XercesStringToInteger(textLocale);
+	
+	const XMLCh* textName = name->getTextContent();
+	localizedSwTypeName.iName =  XMLChToWString(textName);
+	LOGEXIT("CScrXmlParser::GetLocalizedSoftwareTypeName()");
+	return localizedSwTypeName;
+	}
+
+XmlDetails::TScrEnvironmentDetails::TCustomAcessList 
+	CScrXmlParser::GetCustomAcessList(const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetCustomAcessList()");
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagSecureId( &XMLString::release, XMLString::transcode("SecureId") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAccessMode( &XMLString::release, XMLString::transcode("AccessMode") );
+	
+	DOMNamedNodeMap* attributes = aDOMElement->getAttributes();
+	DOMNode* secureId = attributes->getNamedItem(tagSecureId.get());
+	DOMNode* accessMode = attributes->getNamedItem(tagAccessMode.get());
+	
+	XmlDetails::TScrEnvironmentDetails::TCustomAcessList customAcessList;
+
+	fn_auto_ptr<releaseChPtr,char> textSecureId(&XMLString::release, XMLString::transcode(secureId->getTextContent()));
+	int secureIdVal=0;	
+	sscanf(textSecureId.get(),"%x",&secureIdVal);
+	customAcessList.iSecureId = secureIdVal;
+	
+	const XMLCh* textAccessMode = accessMode->getTextContent();
+	customAcessList.iAccessMode = XercesStringToInteger(textAccessMode);
+	LOGEXIT("CScrXmlParser::GetCustomAcessList()");
+	return customAcessList;
+	}
+
+XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo CScrXmlParser::GetApplicationRegistrationInfo(const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetApplicationRegistrationInfo()");
+	// tags in ApplicationRegistrationInfo
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagApplicationRegistrationInfoAppAttribute( &XMLString::release, XMLString::transcode("ApplicationAttribute") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagApplicationRegistrationInfoOpaqueData ( &XMLString::release, XMLString::transcode("OpaqueData") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagApplicationRegistrationInfoFileOwnershipInfo( &XMLString::release, XMLString::transcode("FileOwnershipinfo") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagApplicationRegistrationInfoAppDataType( &XMLString::release, XMLString::transcode("ApplicationDataType") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagApplicationRegistrationInfoAppServiceInfo( &XMLString::release, XMLString::transcode("ApplicationServiceInfo") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagApplicationRegistrationInfoAppLocalizableInfo( &XMLString::release, XMLString::transcode("ApplicationLocalizableInfo") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagApplicationRegistrationInfoAppProperty( &XMLString::release, XMLString::transcode("ApplicationProperty") );
+
+	DOMNodeList* appAttributes = aDOMElement->getElementsByTagName(tagApplicationRegistrationInfoAppAttribute.get());
+	const XMLSize_t appAttributeCount = appAttributes->getLength();
+	DOMNodeList* OpaqueData	= aDOMElement->getElementsByTagName(tagApplicationRegistrationInfoOpaqueData.get());
+	const XMLSize_t OpaqueDataCount = OpaqueData->getLength();
+	DOMNodeList* fileOwnershipInfos	= aDOMElement->getElementsByTagName(tagApplicationRegistrationInfoFileOwnershipInfo.get());
+	const XMLSize_t fileOwnershipInfoCount = fileOwnershipInfos->getLength();
+	DOMNodeList* appServiceInfos = aDOMElement->getElementsByTagName(tagApplicationRegistrationInfoAppServiceInfo.get());
+	const XMLSize_t appServiceInfoCount = appServiceInfos->getLength();
+	DOMNodeList* appLocalizableInfos	= aDOMElement->getElementsByTagName(tagApplicationRegistrationInfoAppLocalizableInfo.get());
+	const XMLSize_t appLocalizableInfoCount = appLocalizableInfos->getLength();
+	DOMNodeList* appProperties = aDOMElement->getElementsByTagName(tagApplicationRegistrationInfoAppProperty.get());
+	const XMLSize_t appPropertyCount = appProperties->getLength();
+
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo appRegistrationInfo;
+
+	// for each AppAttribute retrieve all tags
+	for( XMLSize_t index = 0; index < appAttributeCount; ++index )
+		{
+		DOMElement* currentappAttribute = static_cast< xercesc::DOMElement* >( appAttributes->item(index) );
+		
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppAttribute appAttribute = GetAppAttribute(currentappAttribute);
+		appRegistrationInfo.iApplicationAttribute.push_back(appAttribute);
+		}
+
+	// for each OpaqueData retrieve all tags
+	for( XMLSize_t index = 0; index < OpaqueDataCount; ++index )
+		{
+		DOMElement* currentOpaqueData = static_cast< xercesc::DOMElement* >( OpaqueData->item(index) );
+		
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty appProperty;
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TOpaqueDataType opaqueDataType = GetOpaqueDataType(currentOpaqueData);
+
+		appProperty.iLocale = opaqueDataType.iLocale;
+		appProperty.iName = L"OpaqueData";
+		appProperty.iIntValue = 0;
+		appProperty.iIsStr8Bit = true;
+		appProperty.iServiceUid = 0;
+
+		if(opaqueDataType.iIsBinary == 1)
+		{
+			std::string str = wstring2string(opaqueDataType.iOpaqueData);
+			std::string decodedString = Util::Base64Decode(str);
+			int len = decodedString.length();
+			appProperty.iStrValue.assign(decodedString.c_str(),decodedString.c_str()+len);
+		}
+		else
+		{
+			appProperty.iStrValue = opaqueDataType.iOpaqueData;
+		}
+		
+		appRegistrationInfo.iApplicationProperty.push_back(appProperty);
+		}
+
+	// for each FileOwnershipInfo retrieve all tags
+	for( XMLSize_t index = 0; index < fileOwnershipInfoCount; ++index )
+		{
+		DOMElement* currentFileOwnershipInfo = static_cast< xercesc::DOMElement* >( fileOwnershipInfos->item(index) );
+
+		std::wstring file = GetFileOwnershipInfo(currentFileOwnershipInfo);
+
+		appRegistrationInfo.iFileOwnershipInfo.push_back(file);
+		}
+
+	// for each appServiceInfo retrieve all tags
+	for( XMLSize_t index = 0; index < appServiceInfoCount; ++index )
+		{
+		DOMElement* currentappServiceInfo = static_cast< xercesc::DOMElement* >( appServiceInfos->item(index) );
+		
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo appServiceInfo = GetAppServiceInfo(currentappServiceInfo, appRegistrationInfo);
+		appRegistrationInfo.iApplicationServiceInfo.push_back(appServiceInfo);
+		}
+
+	// for each appLocalizableInfo retrieve all tags
+	for( XMLSize_t index = 0; index < appLocalizableInfoCount; ++index )
+		{
+		DOMElement* currentAppLocalizableInfo = static_cast< xercesc::DOMElement* >( appLocalizableInfos->item(index) );
+		
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo appLocalizableInfo = GetAppLocalizableInfo(currentAppLocalizableInfo);
+		appRegistrationInfo.iApplicationLocalizableInfo.push_back(appLocalizableInfo);
+		}
+
+	// for each AppProperty retrieve all tags
+	for( XMLSize_t index = 0; index < appPropertyCount; ++index )
+		{
+		DOMElement* currentAppProperty = static_cast< xercesc::DOMElement* >( appProperties->item(index) );
+		
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty appProperty = GetAppProperty(currentAppProperty);
+		appRegistrationInfo.iApplicationProperty.push_back(appProperty);
+		}
+	LOGEXIT("CScrXmlParser::GetApplicationRegistrationInfo()");
+	return appRegistrationInfo;
+	}
+
+XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppAttribute 
+	CScrXmlParser::GetAppAttribute( const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetAppAttribute()");
+	// tags in AppAttribute
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppAttributeName( &XMLString::release, XMLString::transcode("Name") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppAttributeValue( &XMLString::release, XMLString::transcode("ApplicationAttribute_Value") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppAttributeIsBinary( &XMLString::release, XMLString::transcode("ApplicationAttribute_IsBinary") );
+		
+	// tags of ComponentProperty_Value
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagApplicationAttributeIntValue( &XMLString::release, XMLString::transcode("ApplicationAttribute_IntValue") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagApplicationAttributeStrValue( &XMLString::release, XMLString::transcode("ApplicationAttribute_StrValue") );
+	
+	// attribute - name
+	DOMNamedNodeMap* attributes = aDOMElement->getAttributes();
+	DOMNode* name = attributes->getNamedItem(tagAppAttributeName.get());
+		
+	DOMNodeList* value = aDOMElement->getElementsByTagName(tagAppAttributeValue.get());
+	DOMNodeList* isBinary = aDOMElement->getElementsByTagName(tagAppAttributeIsBinary.get());
+	
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppAttribute appAttribute;
 	
 	const XMLCh* textName = name->getTextContent();
-	localizedSwTypeName.iName = textName;
+	appAttribute.iName	= XMLChToWString(textName);
+	
+	DOMNodeList* childNodes = value->item(0)->getChildNodes();
+	const XMLSize_t nodeCount = childNodes->getLength();
+
+	for(int index = 0; index< nodeCount; ++index)
+		{
+		DOMElement* currentElement = static_cast< xercesc::DOMElement* >( childNodes->item(index) );
+		if( XMLString::equals(currentElement->getTagName(), tagApplicationAttributeIntValue.get()))
+			{
+			appAttribute.iIsIntValue = true;
+			appAttribute.iValue = XMLChToWString(currentElement->getTextContent());
+			break;
+			}
+		else if( XMLString::equals(currentElement->getTagName(), tagApplicationAttributeStrValue.get()))
+			{
+			appAttribute.iIsIntValue = false;
+			appAttribute.iValue = XMLChToWString(currentElement->getTextContent());
+			break;
+			}
+		}
+		
+	if(isBinary->getLength() != 0)
+		{
+		const XMLCh* textIsBinary = isBinary->item(0)->getTextContent();
+		appAttribute.iIsStr8Bit = XercesStringToInteger(textIsBinary);
+		}
+	LOGEXIT("CScrXmlParser::GetAppAttribute()");
+	return appAttribute;
+	}
+
+std::wstring CScrXmlParser::GetFileOwnershipInfo( const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetFileOwnershipInfo()");
+	// tags in FileOwnershipInfo 
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagFileName( &XMLString::release, XMLString::transcode("FileName") );
+
+	DOMNodeList* fileName = aDOMElement->getElementsByTagName(tagFileName.get());
+	
+	std::wstring file;
+
+	if( fileName->getLength() != 0)
+		{
+		const XMLCh* fil = fileName->item(0)->getTextContent();
+		file = XMLChToWString(fil);
+		}
+
+	LOGEXIT("CScrXmlParser::GetFileOwnershipInfo()");
+	return file;
+	}
+
+XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TDataType 
+	CScrXmlParser::GetDataType( const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetDataType()");
+	// tags in DataType 
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagDataTypePriority( &XMLString::release, XMLString::transcode("Priority") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagDataType( &XMLString::release, XMLString::transcode("Type") );
+
+	DOMNodeList* priority = aDOMElement->getElementsByTagName(tagDataTypePriority.get());
+	DOMNodeList* type = aDOMElement->getElementsByTagName(tagDataType.get());
+	
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TDataType dataType;
+
+	if( priority->getLength() != 0)
+		{
+		const XMLCh* pri = priority->item(0)->getTextContent();
+		dataType.iPriority = XercesStringToInteger(pri);
+		}
+
+	if( type->getLength() != 0)
+		{
+		const XMLCh* typ = type->item(0)->getTextContent();
+		dataType.iType = XMLChToWString(typ);
+		}
+	LOGEXIT("CScrXmlParser::GetDataType()");
+	return dataType;
+	}
+
+XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TOpaqueDataType 
+	CScrXmlParser::GetOpaqueDataType( const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetOpaqueDataType()");
+	// tags in OpaqueDataType 
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagData( &XMLString::release, XMLString::transcode("Data") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagOpaqueLocale( &XMLString::release, XMLString::transcode("OpaqueLocale") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagIsBinary( &XMLString::release, XMLString::transcode("IsBinary") );
+
+	DOMNodeList* Data = aDOMElement->getElementsByTagName(tagData.get());
+	DOMNodeList* OpaqueLocale = aDOMElement->getElementsByTagName(tagOpaqueLocale.get());
+	DOMNodeList* isBinary = aDOMElement->getElementsByTagName(tagIsBinary.get());
+	
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TOpaqueDataType opaqueDataType;
+
+	if( OpaqueLocale->getLength() != 0)
+		{
+		const XMLCh* pri = OpaqueLocale->item(0)->getTextContent();
+		opaqueDataType.iLocale = XercesStringToInteger(pri);
+		}
+
+	if( Data->getLength() != 0)
+		{
+		const XMLCh* typ = Data->item(0)->getTextContent();
+		opaqueDataType.iOpaqueData = XMLChToWString(typ);
+		}
+	
+	if(isBinary->getLength() != 0)
+		{
+		const XMLCh* textIsBinary = isBinary->item(0)->getTextContent();
+		opaqueDataType.iIsBinary = XercesStringToInteger(textIsBinary);		
+		}
+
+	LOGEXIT("CScrXmlParser::GetOpaqueDataType()");
+	return opaqueDataType;
+	}
+
+XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TOpaqueDataType 
+	CScrXmlParser::GetServiceOpaqueDataType( const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetServiceOpaqueDataType()");
+	// tags in OpaqueDataType 
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagServiceData( &XMLString::release, XMLString::transcode("ServiceData") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagServiceOpaqueLocale( &XMLString::release, XMLString::transcode("ServiceOpaqueLocale") );
+
+	DOMNodeList* ServiceData = aDOMElement->getElementsByTagName(tagServiceData.get());
+	DOMNodeList* ServiceOpaqueLocale = aDOMElement->getElementsByTagName(tagServiceOpaqueLocale.get());
+	
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TOpaqueDataType opaqueDataType;
+
+	if( ServiceOpaqueLocale->getLength() != 0)
+		{
+		const XMLCh* pri = ServiceOpaqueLocale->item(0)->getTextContent();
+		opaqueDataType.iLocale = XercesStringToInteger(pri);
+		}
+
+	if( ServiceData->getLength() != 0)
+		{
+		const XMLCh* typ = ServiceData->item(0)->getTextContent();
+		opaqueDataType.iOpaqueData = XMLChToWString(typ);
+		}
+	LOGEXIT("CScrXmlParser::GetServiceOpaqueDataType()");
+	return opaqueDataType;
+	}
+
+XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo 
+	CScrXmlParser::GetAppServiceInfo( const DOMElement* aDOMElement, XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppRegistrationInfo )
+	{
+	LOGENTER("CScrXmlParser::GetAppServiceInfo()");
+	// tags in AppServiceInfo
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppServiceInfoUid( &XMLString::release, XMLString::transcode("Uid") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppServiceAppProperty( &XMLString::release, XMLString::transcode("ServiceOpaqueData") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppServiceInfoDataType( &XMLString::release, XMLString::transcode("ApplicationDataType") );
+
+	DOMNodeList* uid = aDOMElement->getElementsByTagName(tagAppServiceInfoUid.get());
+
+	DOMNodeList* ServiceOpaqueData = aDOMElement->getElementsByTagName(tagAppServiceAppProperty.get());
+	const XMLSize_t ServiceOpaqueDataCount = ServiceOpaqueData->getLength();
+	
+	DOMNodeList* dataTypes = aDOMElement->getElementsByTagName(tagAppServiceInfoDataType.get());
+	const XMLSize_t dataTypeCount = dataTypes->getLength();
+
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo appServiceInfo;
+
+	if( uid->getLength() != 0)
+		{
+		const XMLCh* priority = uid->item(0)->getTextContent();
+		appServiceInfo.iUid = XercesStringToInteger(priority);
+		}
+
+	// for each OpaqueData retrieve all tags
+	for( XMLSize_t index = 0; index < ServiceOpaqueDataCount; ++index )
+		{
+		DOMElement* currentOpaqueData = static_cast< xercesc::DOMElement* >( ServiceOpaqueData->item(index) );
+		
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty appProperty;
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TOpaqueDataType opaqueDataType = GetServiceOpaqueDataType(currentOpaqueData);
+
+		appProperty.iLocale = opaqueDataType.iLocale;
+		appProperty.iName = L"OpaqueData";
+		appProperty.iIntValue = 0;
+		appProperty.iIsStr8Bit = true;
+		appProperty.iServiceUid = appServiceInfo.iUid;
+		if(opaqueDataType.iIsBinary == 1)
+		{
+			std::string str = wstring2string(opaqueDataType.iOpaqueData);
+			std::string decodedString = Util::Base64Decode(str);
+			appProperty.iStrValue = string2wstring(decodedString);
+		}
+		else
+		{
+			appProperty.iStrValue = opaqueDataType.iOpaqueData;
+		}
+		aAppRegistrationInfo.iApplicationProperty.push_back(appProperty);
+		}
+
+	// for each DataType retrieve all tags
+	for( XMLSize_t index = 0; index < dataTypeCount; ++index )
+		{
+		DOMElement* currentDataType = static_cast< xercesc::DOMElement* >( dataTypes->item(index) );
+		
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TDataType dataType = GetDataType(currentDataType);
+		appServiceInfo.iDataType.push_back(dataType);
+		}
+	LOGEXIT("CScrXmlParser::GetAppServiceInfo()");
+	return appServiceInfo;
+
+	}
 
-	return localizedSwTypeName;
+XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo 
+	CScrXmlParser::GetAppLocalizableInfo( const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetAppLocalizableInfo()");
+	// tags in AppLocalizableInfo  
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableInfoAttribute( &XMLString::release, XMLString::transcode("LocalizableAttribute") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableInfoViewData ( &XMLString::release, XMLString::transcode("ViewData") );
+	
+	DOMNodeList* localizableAttributes = aDOMElement->getElementsByTagName(tagAppLocalizableInfoAttribute.get());
+	const XMLSize_t attributeCount = localizableAttributes->getLength();
+	DOMNodeList* viewData = aDOMElement->getElementsByTagName(tagAppLocalizableInfoViewData.get());
+	const XMLSize_t viewDataCount = viewData->getLength();
+
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo appLocalizableInfo;
+
+	LOGINFO("for each AppLocalizableInfoAttribute retrieve all tags");
+	// for each AppLocalizableInfoAttribute retrieve all tags
+	for( XMLSize_t index = 0; index < attributeCount; ++index )
+		{
+		DOMElement* currentLocalizableAttribute = static_cast< xercesc::DOMElement* >( localizableAttributes->item(index) );
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TLocalizableAttribute appLocalizableAttribute = GetAppLocalizableAttribute(currentLocalizableAttribute);
+		appLocalizableInfo.iLocalizableAttribute.push_back(appLocalizableAttribute);
+		}
+
+	LOGINFO("for each AppLocalizableViewData retrieve all tags");
+	// for each AppLocalizableViewData retrieve all tags
+	
+	for( XMLSize_t index = 0; index < viewDataCount; ++index )
+		{
+		DOMElement* currentLocalizableViewData = static_cast< xercesc::DOMElement* >( viewData->item(index) );
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData appLocalizableViewData = GetAppLocalizableViewData(currentLocalizableViewData);
+		LOGINFO("push_back viewdata");
+		appLocalizableInfo.iViewData.push_back(appLocalizableViewData);
+		}
+
+	LOGEXIT("CScrXmlParser::GetAppLocalizableInfo()");
+	return appLocalizableInfo;
+	}
+
+XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TLocalizableAttribute 
+	CScrXmlParser::GetAppLocalizableAttribute( const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetAppLocalizableAttribute()");
+	// tags in AppLocalizableInfo  
+	// tags in AppLocalizableInfoAttribute
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableInfoAttributeName( &XMLString::release, XMLString::transcode("Name") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableInfoAttributeValue( &XMLString::release, XMLString::transcode("LocalizableAttribute_Value") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableInfoAttributeIsBinary( &XMLString::release, XMLString::transcode("LocalizableAttribute_IsBinary") );
+		
+	// tags of AppLocalizableInfoAttribute_Value
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableInfoAttributeIntValue( &XMLString::release, XMLString::transcode("LocalizableAttribute_IntValue") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableInfoAttributeStrValue( &XMLString::release, XMLString::transcode("LocalizableAttribute_StrValue") );
+	
+	LOGINFO("attribute - name");
+	// attribute - name
+	DOMNamedNodeMap* attributes = aDOMElement->getAttributes();
+	DOMNode* name = attributes->getNamedItem(tagAppLocalizableInfoAttributeName.get());
+		
+	DOMNodeList* value = aDOMElement->getElementsByTagName(tagAppLocalizableInfoAttributeValue.get());
+	DOMNodeList* isBinary = aDOMElement->getElementsByTagName(tagAppLocalizableInfoAttributeIsBinary.get());
+	
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TLocalizableAttribute appLocalizableAttribute;
+	
+	LOGINFO("name->getTextContent");
+	const XMLCh* textName = name->getTextContent();
+	appLocalizableAttribute.iName = XMLChToWString(textName);
+	
+	DOMNodeList* childNodes = value->item(0)->getChildNodes();
+	const XMLSize_t nodeCount = childNodes->getLength();
+
+	for(int index = 0; index< nodeCount; ++index)
+		{
+		DOMElement* currentElement = static_cast< xercesc::DOMElement* >( childNodes->item(index) );
+		if( XMLString::equals(currentElement->getTagName(), tagAppLocalizableInfoAttributeIntValue.get()))
+			{
+			appLocalizableAttribute.iIsIntValue = true;
+			appLocalizableAttribute.iValue = XMLChToWString(currentElement->getTextContent());
+			break;
+			}
+		else if( XMLString::equals(currentElement->getTagName(), tagAppLocalizableInfoAttributeStrValue.get()))
+			{
+			appLocalizableAttribute.iIsIntValue = false;
+			appLocalizableAttribute.iValue = XMLChToWString(currentElement->getTextContent());
+			break;
+			}
+		}
+		
+	if(isBinary->getLength() != 0)
+		{
+		const XMLCh* textIsBinary = isBinary->item(0)->getTextContent();
+		appLocalizableAttribute.iIsStr8Bit = XercesStringToInteger(textIsBinary);
+		}
+
+	LOGEXIT("CScrXmlParser::GetAppLocalizableAttribute()");
+	return appLocalizableAttribute;
+	}
+
+
+XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData 
+	CScrXmlParser::GetAppLocalizableViewData( const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetAppLocalizableViewData()");
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableInfoViewDataAttribute ( &XMLString::release, XMLString::transcode("ViewDataAttribute") );
+
+	DOMNodeList* viewDataAttr = aDOMElement->getElementsByTagName(tagAppLocalizableInfoViewDataAttribute.get());
+	const XMLSize_t viewDataAttrCount = viewDataAttr->getLength();
+	
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData appViewData;
+
+	for( XMLSize_t index = 0; index < viewDataAttrCount; ++index )
+	{
+		DOMElement* currentLocalizableViewData = static_cast< xercesc::DOMElement* >( viewDataAttr->item(index) );
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData::TViewDataAttributes appLocalizableViewData = GetAppLocalizableViewDataAttributes(currentLocalizableViewData);
+		LOGINFO("push_back viewdata");
+		appViewData.iViewDataAttributes.push_back(appLocalizableViewData);
+	}
+	LOGEXIT("CScrXmlParser::GetAppLocalizableViewData()");
+	return appViewData;
+	}
+
+XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData::TViewDataAttributes 
+	CScrXmlParser::GetAppLocalizableViewDataAttributes( const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetAppLocalizableViewDataAttributes()");
+	// tags in AppLocalizableViewData
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableViewDataName( &XMLString::release, XMLString::transcode("Name") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableViewDataValue( &XMLString::release, XMLString::transcode("ViewData_Value") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableViewDataIsBinary( &XMLString::release, XMLString::transcode("ViewData_IsBinary") );
+		
+	// tags of AppLocalizableViewData_Value
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableViewDataIntValue( &XMLString::release, XMLString::transcode("ViewData_IntValue") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppLocalizableViewDataStrValue( &XMLString::release, XMLString::transcode("ViewData_StrValue") );
+		
+	LOGINFO("attribute - name");
+	// attribute - name
+	DOMNamedNodeMap* attributes = aDOMElement->getAttributes();
+	DOMNode* name = attributes->getNamedItem(tagAppLocalizableViewDataName.get());
+		
+	DOMNodeList* value = aDOMElement->getElementsByTagName(tagAppLocalizableViewDataValue.get());
+	DOMNodeList* isBinary = aDOMElement->getElementsByTagName(tagAppLocalizableViewDataIsBinary.get());
+	
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData::TViewDataAttributes appLocalizableViewDataAttribute;
+	
+	LOGINFO("name->getTextContent");
+	const XMLCh* textName = name->getTextContent();
+	LOGINFO("assign name");
+	appLocalizableViewDataAttribute.iName = XMLChToWString(textName);
+
+	LOGINFO("getChildNodes()");
+	DOMNodeList* childNodes = value->item(0)->getChildNodes();
+	LOGINFO("childNodes->getLength()");
+	const XMLSize_t nodeCount = childNodes->getLength();
+
+	for(int index = 0; index< nodeCount; ++index)
+		{
+		DOMElement* currentElement = static_cast< xercesc::DOMElement* >( childNodes->item(index) );
+		if( XMLString::equals(currentElement->getTagName(), tagAppLocalizableViewDataIntValue.get()))
+			{
+			LOGINFO("int value");
+			appLocalizableViewDataAttribute.iIsIntValue = true;
+			appLocalizableViewDataAttribute.iValue = XMLChToWString(currentElement->getTextContent());
+			break;
+			}
+		else if( XMLString::equals(currentElement->getTagName(), tagAppLocalizableViewDataStrValue.get()))
+			{
+			LOGINFO("str value");
+			appLocalizableViewDataAttribute.iIsIntValue = false;
+			appLocalizableViewDataAttribute.iValue = XMLChToWString(currentElement->getTextContent());
+			break;
+			}
+		}
+		
+	if(isBinary->getLength() != 0)
+		{
+		LOGINFO("bin value");
+		const XMLCh* textIsBinary = isBinary->item(0)->getTextContent();
+		appLocalizableViewDataAttribute.iIsStr8Bit = XercesStringToInteger(textIsBinary);
+		}
+	LOGEXIT("CScrXmlParser::GetAppLocalizableViewDataAttributes()");
+	return appLocalizableViewDataAttribute;
+	}
+
+
+XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty 
+	CScrXmlParser::GetAppProperty( const DOMElement* aDOMElement)
+	{
+	LOGENTER("CScrXmlParser::GetAppProperty()");
+	// tags in AppProperty
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppPropertyLocale( &XMLString::release, XMLString::transcode("Locale") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppPropertyName( &XMLString::release, XMLString::transcode("Name") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppPropertyIntValue( &XMLString::release, XMLString::transcode("IntValue") );
+	fn_auto_ptr<releaseXmlChPtr, XMLCh> tagAppPropertyStrValue( &XMLString::release, XMLString::transcode("StrValue") );
+
+	DOMNodeList* locale = aDOMElement->getElementsByTagName(tagAppPropertyLocale.get());
+	DOMNodeList* name = aDOMElement->getElementsByTagName(tagAppPropertyName.get());
+	DOMNodeList* intvalue = aDOMElement->getElementsByTagName(tagAppPropertyIntValue.get());
+	DOMNodeList* strvalue = aDOMElement->getElementsByTagName(tagAppPropertyStrValue.get());
+	
+	XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty appProperty;
+
+	if( locale->getLength() != 0)
+		{
+		const XMLCh* loc = locale->item(0)->getTextContent();
+		appProperty.iLocale = XercesStringToInteger(loc);
+		}
+
+	if( name->getLength() != 0)
+		{
+		const XMLCh* nam = name->item(0)->getTextContent();
+		appProperty.iName = XMLChToWString(nam);
+		}
+
+	if( intvalue->getLength() != 0)
+		{
+		const XMLCh* intval = intvalue->item(0)->getTextContent();
+		appProperty.iIntValue = XercesStringToInteger(intval);
+		}
+	else if( strvalue->getLength() != 0)
+		{
+		const XMLCh* strval = strvalue->item(0)->getTextContent();
+		appProperty.iStrValue = XMLChToWString(strval);
+		}
+
+	appProperty.iIsStr8Bit = false;
+	
+	LOGEXIT("CScrXmlParser::GetAppProperty()");
+	return appProperty;
 	}
 
 void CScrXmlParser::ConfigDomParser(xercesc::XercesDOMParser& aDomParser)
@@ -787,3 +1459,5 @@
 	std::string msg( "Resetting error handler object" );
 	LOGINFO(msg);
 	}
+
+
--- a/secureswitools/swisistools/source/xmlparser/xmlparser.h	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/source/xmlparser/xmlparser.h	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -37,6 +37,14 @@
 #include <xercesc/dom/DOM.hpp>
 
 #include "toolsconf.h"
+#include "symbiantypes.h"
+#include "utf8_wrapper.h"
+
+// Xerces library uses XMLCh (UTF16 format) as its default character type.
+// We can store the UTF16 returned form the xerces library in the following
+// template class.
+typedef std::basic_string<XMLCh> XercesString;
+
 
 /**
 * This template is used to cleanup memory by calling a function as pointed 
@@ -113,9 +121,7 @@
 			{
 		public:
 			TScrEnvironmentDetails()
-			:iSifPluginUid(0),
-			iInstallerSid(0),
-			iExecutionLayerSid(0)
+			:iSifPluginUid(0)
 			{}
 			
 			class TLocalizedSoftwareTypeName
@@ -128,14 +134,25 @@
 				int iLocale;
 				std::wstring iName;
 				};
+
+            class TCustomAcessList
+				{
+			public:
+				TCustomAcessList()
+				:iAccessMode(1)
+				{}
+								
+				int iSecureId;
+				int iAccessMode;;
+				};
 			
 			std::wstring iUniqueSoftwareTypeName;
 			std::vector<TLocalizedSoftwareTypeName> iLocalizedSoftwareTypeNames;
 			int iSifPluginUid;
-			int iInstallerSid;
-			int iExecutionLayerSid;
+            std::wstring iLauncherExecutable;
+			std::vector<TCustomAcessList> iCustomAcessList;
 			std::vector<std::wstring> iMIMEDetails;
-			};
+			}; // struct TScrEnvironmentDetails
 
 		
 	class TScrPreProvisionDetail
@@ -151,11 +168,16 @@
 			TComponentLocalizable()
 			:iLocale(0)
 			{}
-			
+
+		public: // public Functions
+			inline XercesString Name();
+			inline XercesString Vendor();
+		
+		public: // Member variables	
 			int iLocale;
 			std::wstring iName;
 			std::wstring iVendor;
-			};
+			}; // class TComponentLocalizable
 		
 		class TComponentProperty
 			{
@@ -167,29 +189,41 @@
 			iIsStr8Bit(false)
 			{}
 
-		public:
+		public: // Member Functions
+			inline XercesString Name();
+			inline XercesString Value();
+
+		public: // Member variables
 			std::wstring iName;
 			int iLocale;
 			std::wstring iValue;
 			bool iIsIntValue;
 			int iIsStr8Bit;
-			};
+			}; // class TComponentProperty
 
 		class TComponentDependency
 			{
 		public:
 			class TComponentDependencyDetail
 				{
-				public:
+				public: // Member Functions
+					inline XercesString SupplierId();
+					inline XercesString FromVersion();
+					inline XercesString ToVersion();
+
+				public: // Member Variables
 					std::wstring iSupplierId;
 					std::wstring iFromVersion;
 					std::wstring iToVersion;
-				};
+				}; // class TComponentDependencyDetail
 
-			public:
+			public: // Member Functions
+				inline XercesString DependentId();
+
+			public: // Member Variables
 				std::wstring iDependentId;
 				std::vector<TComponentDependencyDetail>	iComponentDependencyList;
-			};
+			}; // class TComponentDependency
 
 		class TComponentFile
 			{
@@ -203,22 +237,32 @@
 				TFileProperty()
 				:iIsIntValue(false)
 				{}
+			public: // Member Functions
+				inline XercesString Name();
+				inline XercesString Value();
+	
+			public: // Member Variables
 				std::wstring iName;
 				std::wstring iValue;
 				bool iIsIntValue;
-				};
+				}; // struct TFileProperty
 
+			public: // Member Functions
+			inline XercesString Location();
+			
+			public: // Member Variables
 			std::wstring iLocation;
 			std::vector<TFileProperty> iFileProperties;
 			
-			};
+			}; // class TComponentFile
 		
 		class TComponentDetails
 			{
 			public:
 			TComponentDetails()
 
-			:iIsRemovable(1),
+			:iIsRomApplication(0),
+			iIsRemovable(1),
 			iSize(0),
 			iScomoState(1),
 			iOriginVerified(1),
@@ -231,22 +275,148 @@
 
 				TVersion()
 				{}
+			public:
+				inline XercesString MajorVersion();
+				inline XercesString MinorVersion();
+				inline XercesString BuildVersion();
 
 			public:
 				std::wstring iMajor;
 				std::wstring iMinor;
 				std::wstring iBuild;
-				};
+				}; // class TVersion
 
+			public: // Member Functions
+			inline XercesString GlobalId();
+
+			int iIsRomApplication;
 			int iIsRemovable;
-			__int64 iSize;
+			TInt64 iSize;
 			int iScomoState;
 			std::wstring iGlobalId;
 			TVersion iVersion;
 			int iOriginVerified;
 			int iIsHidden;
 			};
+		
+		class TApplicationRegistrationInfo
+			{
+			public:
+				TApplicationRegistrationInfo()
+				{}
 
+				class TAppAttribute
+					{
+					public:
+					TAppAttribute()
+					:iIsIntValue(false),
+					iIsStr8Bit(false)
+					{}
+					std::wstring iName;
+					std::wstring iValue;
+					bool iIsIntValue;
+					int iIsStr8Bit;
+					};
+
+				class TDataType
+					{
+					public:
+					TDataType()
+					{}
+					int iPriority;
+					std::wstring iType;
+					};
+
+				class TOpaqueDataType
+					{
+					public:
+					TOpaqueDataType()
+					:iLocale(0),
+					iIsBinary(false)
+					{}
+					int iLocale;
+					int iServiceUid;
+					bool iIsBinary; 
+					std::wstring iOpaqueData;
+					};
+
+				class TAppServiceInfo
+					{
+					public:
+					TAppServiceInfo()
+					{}
+					int iUid;
+					std::vector<TDataType> iDataType;
+					};
+
+				class TAppLocalizableInfo
+					{
+					public:
+					TAppLocalizableInfo()
+					{}
+
+					class TLocalizableAttribute
+						{
+						public:
+						TLocalizableAttribute()
+						:iIsIntValue(false),
+						iIsStr8Bit(false)
+						{}
+						std::wstring iName;
+						std::wstring iValue;
+						bool iIsIntValue;
+						int iIsStr8Bit;
+						};
+
+					class TViewData
+						{
+						public:
+						TViewData()
+						{}
+
+						class TViewDataAttributes
+						{
+						public:
+						TViewDataAttributes()
+						:iIsIntValue(false),
+						iIsStr8Bit(false)
+						{}
+						std::wstring iName;
+						std::wstring iValue;
+						bool iIsIntValue;
+						int iIsStr8Bit;
+						};
+						
+						std::vector<TViewDataAttributes> iViewDataAttributes;
+						};
+
+					std::vector<TLocalizableAttribute> iLocalizableAttribute;
+					std::vector<TViewData> iViewData;
+					};
+
+				class TAppProperty
+					{
+					public:
+					TAppProperty()
+					:iLocale(0),
+					iIntValue(0)
+					{}
+					int iLocale;
+					std::wstring iName;
+					int iServiceUid;
+					int iIntValue;
+					std::wstring iStrValue;
+					bool iIsStr8Bit;
+					};
+
+			std::vector<TAppAttribute> iApplicationAttribute;
+			std::vector<std::wstring> iFileOwnershipInfo;
+			std::vector<TAppServiceInfo> iApplicationServiceInfo;
+			std::vector<TAppLocalizableInfo> iApplicationLocalizableInfo;
+			std::vector<TAppProperty> iApplicationProperty;
+			std::vector<TOpaqueDataType> iOpaqueDataType;
+			};
+		
 		class TComponent
 			{
 			public:
@@ -258,13 +428,16 @@
 			std::vector<TComponentProperty>		iComponentProperties;
 			std::vector<TComponentFile>			iComponentFiles;
 			TComponentDependency iComponentDependency;
+			std::vector<TApplicationRegistrationInfo> iApplicationRegistrationInfo;
 			TComponentDetails iComponentDetails;
-			};
+			}; // class TComponent
+
+		inline XercesString SoftwareTypeName();
 
 		std::wstring iSoftwareTypeName;
 		std::vector<TComponent> iComponents;
 		
-		};
+		}; // class TScrPreProvisionDetail
 }
 
 class CScrXmlParser
@@ -316,8 +489,34 @@
 		
 		XmlDetails::TScrPreProvisionDetail::TComponentDetails GetComponentDetails( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
 		
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo GetApplicationRegistrationInfo(const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppAttribute GetAppAttribute( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
+		std::wstring GetFileOwnershipInfo( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TDataType GetDataType( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TOpaqueDataType GetOpaqueDataType( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TOpaqueDataType GetServiceOpaqueDataType( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppServiceInfo GetAppServiceInfo( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement, XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo& aAppRegistrationInfo);
+
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo GetAppLocalizableInfo( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TLocalizableAttribute GetAppLocalizableAttribute( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData GetAppLocalizableViewData( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppLocalizableInfo::TViewData::TViewDataAttributes GetAppLocalizableViewDataAttributes( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
+		XmlDetails::TScrPreProvisionDetail::TApplicationRegistrationInfo::TAppProperty GetAppProperty( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
 		XmlDetails::TScrEnvironmentDetails::TLocalizedSoftwareTypeName GetLocalizedSoftwareTypeName( const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
 		
+        XmlDetails::TScrEnvironmentDetails::TCustomAcessList GetCustomAcessList(const XERCES_CPP_NAMESPACE::DOMElement* aDOMElement);
+
 		void ConfigDomParser(xercesc::XercesDOMParser& aDomParser);
 	};
 
@@ -358,4 +557,228 @@
 
 XERCES_CPP_NAMESPACE_END
 
+// inline function definitions
+
+#ifndef _WIN32
+inline XercesString WStringToXercesString(const std::wstring& aString)
+	{
+	XMLCh* buffer = new XMLCh[ (aString.length() + 1) * 2 ];
+	XMLCh* temp = buffer;
+	const wchar_t* source = aString.c_str();
+
+	ConvertUCS4toUTF16(&source, source + aString.length(), &temp, buffer + aString.length());
+
+	// Appending NUL to the converted buffer.
+	*temp = 0;
+
+	XercesString result(buffer);
+	delete[] buffer;
+
+	return result; 
+	}
+
+#else
+
+// We need not do anything for WINDOWS, since XercesString
+// and WString both are same and will be in UTF-16 encoding format.
+#define WStringToXercesString(aWString) (aWString)
+
+#endif // _WIN32
+
+
+//------------------------------------------------------------------------------------------------------------------------------
+//											UTILITY FUNCTIONS
+//------------------------------------------------------------------------------------------------------------------------------
+#ifndef _WIN32
+
+inline std::wstring XercesStringToWString(const XercesString& aString)
+	{
+	wchar_t* buffer = new wchar_t[aString.length() + 1];
+	const XMLCh* source = aString.c_str();
+
+	// Using a temp variable in place of buffer as ConvertUTF16toUTF8 modifies the source pointer passed.
+	wchar_t* temp = buffer;
+
+	ConvertUTF16toUCS4(&source, source + aString.length(), &temp, temp + aString.length());
+
+	// Appending NUL to the converted buffer.
+	*temp = 0;
+
+	std::wstring result(buffer);
+	delete[] buffer;
+	return result;
+	}
+#else
+
+// We need not do anything for WINDOWS, since XercesString
+// and WString both are same and will be in UTF-16 encoding format.
+#define XercesStringToWString(aXercesString) (aXercesString)
+
+#endif // _WIN32
+
+
+//------------------------------------------------------------------------------------------------------------------------------
+
+
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentDetails::TVersion::MajorVersion()
+{
+#ifdef _WIN32
+	return iMajor;
+#else
+	return WStringToXercesString(iMajor);
+#endif // _WIN32
+}
+
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentDetails::TVersion::MinorVersion()
+{
+#ifdef _WIN32
+	return iMinor;
+#else
+	return WStringToXercesString(iMinor);
+#endif // _WIN32
+}
+
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentDetails::TVersion::BuildVersion()
+{
+#ifdef _WIN32
+	return iBuild;
+#else
+	return WStringToXercesString(iBuild);
+#endif // _WIN32
+}
+
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentDetails::GlobalId()
+{
+#ifdef _WIN32
+	return iGlobalId;
+#else  
+	return WStringToXercesString(iGlobalId);
+#endif // _WIN32
+}
+
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::SoftwareTypeName()
+	{
+#ifdef _WIN32
+	return iSoftwareTypeName;
+#else
+	return WStringToXercesString(iSoftwareTypeName);
+#endif // _WIN32
+	}
+
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentLocalizable::Name()
+	{
+#ifdef _WIN32
+	return iName;
+#else
+	return WStringToXercesString(iName);
+#endif // _WIN32
+	}
+
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentLocalizable::Vendor()
+	{
+#ifdef _WIN32
+	return iVendor;
+#else
+	return WStringToXercesString(iVendor);
+#endif // _WIN32
+	}
+
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentProperty::Name()
+	{
+#ifdef _WIN32
+	return iName;
+#else
+	return WStringToXercesString(iName);
+#endif // _WIN32
+	}
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentProperty::Value()
+	{
+#ifdef _WIN32
+	return iValue;
+#else
+	return WStringToXercesString(iValue);
+#endif // _WIN32
+	}
+
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentFile::Location()
+	{
+#ifdef _WIN32
+	return iLocation;
+#else
+	return WStringToXercesString(iLocation);
+#endif // _WIN32
+	}
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentFile::TFileProperty::Name()
+	{
+#ifdef _WIN32
+	return iName;
+#else
+	return WStringToXercesString(iName);
+#endif // _WIN32
+	}
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentFile::TFileProperty::Value()
+	{
+#ifdef _WIN32
+	return iValue;
+#else
+	return WStringToXercesString(iValue);
+#endif // _WIN32
+	}
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentDependency::DependentId()
+	{
+#ifdef _WIN32
+	return iDependentId;
+#else
+	return WStringToXercesString(iDependentId);
+#endif // _WIN32
+	}
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentDependency::TComponentDependencyDetail::SupplierId()
+	{
+#ifdef _WIN32
+	return iSupplierId;
+#else
+	return WStringToXercesString(iSupplierId);
+#endif // _WIN32
+	}
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentDependency::TComponentDependencyDetail::FromVersion()
+	{
+#ifdef _WIN32
+	return iFromVersion;
+#else
+	return WStringToXercesString(iFromVersion);
+#endif // _WIN32
+	}
+
+inline XercesString XmlDetails::TScrPreProvisionDetail::TComponentDependency::TComponentDependencyDetail::ToVersion()
+	{
+#ifdef _WIN32
+	return iToVersion;
+#else
+	return WStringToXercesString(iToVersion);
+#endif // _WIN32
+	}
+
+
+
+
+
+
+
+
+
 #endif // _XMLPARSER_H
--- a/secureswitools/swisistools/test/tdumpsis/testdumpsis.pl	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/test/tdumpsis/testdumpsis.pl	Tue Aug 31 15:21:33 2010 +0300
@@ -1519,7 +1519,6 @@
 	use Cwd;
 	$dir = cwd;
 	chdir $dir.$DumpsisGenPkgPath;
-	
 	open($pkgcontent,$TestNRflagpkg);
 	foreach (<$pkgcontent>) 
 	{
@@ -1530,7 +1529,7 @@
 		}
 	}
 	close($pkgcontent);
-	
+
 	chdir $dir;
 	$NumberOfTests++;
 	if ($result == 0 && $result1 == 0 && $result2 == 1) 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/testmakesis/largelanguagecodes.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,218 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+
+;Languages
+;#define LANGUAGE_IDS LANG sc 37 14346 14387 14412 14419 102 42 44 45 25 07 18 01 10 129 158 160 159 157 161 49 50 09 02 51 103 03 54 57 58 30 17 15 59 327 05 32 65 67 68 70 326 08 27 13 76 31 78 16 79 26 28 04 83 06 39 29 33 14 93 94 96
+&01,02,03,04,05,06,07,08,09,10,13,14,15,16,17,18,25,26,27,28,29,30,31,32,33,37,39,42,44,45,49,50,51,54,57,58,59,65,67,68,70,76,78,79,83,93,94,96,102,103,129,157,158,159,160,161,326,327,14346,14387,14412,14419,456789
+
+;Header
+#{"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice "},(0x200002B3),1,1,1,TYPE=SA
+
+;Localised Vendor name
+%{"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice "}
+
+;Unique Vendor name
+:"Quickoffice Inc"
+
+;Supports Series 60 v 5.0
+[0x1028315F], 0, 0, 0, 
+{"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID"}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/api-inst-preq1835-interpretsis-08_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,67 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@ECHO OFF
+REM preq1835-interpretsis-08
+REM PREQ1835 preq1835-interpretsis-08 - Verify if ROM SIS STUB and Pre-Provisioned registration files are processed. This is a positive testcase 
+
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+if not exist .\romdrive\private mkdir .\romdrive\private > NUL
+if not exist .\romdrive\private\10003a3f mkdir .\romdrive\private\10003a3f > NUL
+if not exist .\romdrive\private\10003a3f\import mkdir .\romdrive\private\10003a3f\import > NUL
+if not exist .\romdrive\private\10003a3f\import\apps mkdir .\romdrive\private\10003a3f\import\apps > NUL
+if not exist .\romdrive\private\10003a3f\apps mkdir .\romdrive\private\10003a3f\apps > NUL
+if not exist .\romdrive\resource mkdir .\romdrive\resource > NUL
+if not exist .\romdrive\resource\apps mkdir .\romdrive\resource\apps > NUL
+
+del .\backup\romdrive\sys\install\scr\provisioned\scr.db
+
+xcopy /E /Y backup\cdrive cdrive > NUL
+xcopy /E /Y backup\romdrive romdrive > NUL
+
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq1835_stub.sis .\romdrive\system\install\interpretsis_preq1835_stub.sis /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq1835_01_reg.rsc .\romdrive\private\10003a3f\import\apps\interpretsis_preq1835_01_reg.rsc /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq1835_02_reg.rsc .\romdrive\private\10003a3f\apps\interpretsis_preq1835_02_reg.rsc /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq1835_01.r01 .\romdrive\resource\apps\interpretsis_preq1835_01.r01 /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq1835_01.r03 .\romdrive\resource\apps\interpretsis_preq1835_01.r03 /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq1835_01.r04 .\romdrive\resource\apps\interpretsis_preq1835_01.r04 /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq1835_01.r24 .\romdrive\resource\apps\interpretsis_preq1835_01.r24 /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq1835_02.r03 .\romdrive\resource\apps\interpretsis_preq1835_02.r03 /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq183501.mbm .\romdrive\resource\apps\interpretsis_preq183501.mbm /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq183503.mbm .\romdrive\resource\apps\interpretsis_preq183503.mbm /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq183504.mbm .\romdrive\resource\apps\interpretsis_preq183504.mbm /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_preq183524.mbm .\romdrive\resource\apps\interpretsis_preq183524.mbm /Y > NUL
+
+REM Remove installation files from any previous tests
+if exist  .\cdrive\Documents\InstTest\devlangsup*.txt  del .\cdrive\Documents\InstTest\devlangsup*.txt  > NUL
+
+copy \epoc32\release\winscw\udeb\z\sys\install\scr\provisioned\scr.db .\romdrive\sys\install\scr\provisioned\scr.db /Y > NUL
+
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_preq1835_08.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/preq1835-interpretsis-01/argumentfile_05.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+
+copy .\romdrive\sys\install\scr\provisioned\scr.db \epoc32\winscw\c\sys\install\scr\scr.db /Y > NUL
+
+IF NOT EXIST .\backup\cdrive mkdir .\backup\cdrive > NUL
+IF NOT EXIST .\backup\romdrive mkdir .\backup\romdrive > NUL
+xcopy /E /Y cdrive backup\cdrive > NUL
+xcopy /E /Y romdrive backup\romdrive > NUL
+
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-01_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@ECHO OFF
+REM testcase-interpretsis-01
+REM testcase testcase-interpretsis-01 - Install sis. This is a positive testcase 
+
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+
+xcopy /E /Y backup\cdrive cdrive > NUL
+xcopy /E /Y backup\romdrive romdrive > NUL
+
+
+REM Remove installation files from any previous tests
+if exist  .\cdrive\Documents\InstTest\devlangsup*.txt  del .\cdrive\Documents\InstTest\devlangsup*.txt  > NUL
+
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_testcase.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+
+copy .\romdrive\sys\install\scr\provisioned\scr.db \epoc32\winscw\c\sys\install\scr\scr.db /Y > NUL
+
+IF NOT EXIST .\backup\cdrive mkdir .\backup\cdrive > NUL
+IF NOT EXIST .\backup\romdrive mkdir .\backup\romdrive > NUL
+xcopy /E /Y cdrive backup\cdrive > NUL
+xcopy /E /Y romdrive backup\romdrive > NUL
+
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-02_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@ECHO OFF
+REM testcase-interpretsis-02
+REM testcase testcase-interpretsis-02 - Install sis. Add an applications registration info with same app file name. This is a negative testcase 
+
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+
+xcopy /E /Y backup\cdrive cdrive > NUL
+xcopy /E /Y backup\romdrive romdrive > NUL
+
+
+REM Remove installation files from any previous tests
+if exist  .\cdrive\Documents\InstTest\devlangsup*.txt  del .\cdrive\Documents\InstTest\devlangsup*.txt  > NUL
+
+
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_testcase.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_testcase_05.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_05.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+
+copy .\romdrive\sys\install\scr\provisioned\scr.db \epoc32\winscw\c\sys\install\scr\scr.db /Y > NUL
+
+IF NOT EXIST .\backup\cdrive mkdir .\backup\cdrive > NUL
+IF NOT EXIST .\backup\romdrive mkdir .\backup\romdrive > NUL
+xcopy /E /Y cdrive backup\cdrive > NUL
+xcopy /E /Y romdrive backup\romdrive > NUL
+
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-03_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@ECHO OFF
+REM testcase-interpretsis-03
+REM testcase testcase-interpretsis-03 - Install sis. Add an applications registration info with same appuid. This is a negative testcase 
+
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+
+xcopy /E /Y backup\cdrive cdrive > NUL
+xcopy /E /Y backup\romdrive romdrive > NUL
+
+
+REM Remove installation files from any previous tests
+if exist  .\cdrive\Documents\InstTest\devlangsup*.txt  del .\cdrive\Documents\InstTest\devlangsup*.txt  > NUL
+
+
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_testcase.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_testcase_06.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_05.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+
+copy .\romdrive\sys\install\scr\provisioned\scr.db \epoc32\winscw\c\sys\install\scr\scr.db /Y > NUL
+
+IF NOT EXIST .\backup\cdrive mkdir .\backup\cdrive > NUL
+IF NOT EXIST .\backup\romdrive mkdir .\backup\romdrive > NUL
+xcopy /E /Y cdrive backup\cdrive > NUL
+xcopy /E /Y romdrive backup\romdrive > NUL
+
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-04_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@ECHO OFF
+REM testcase-interpretsis-04
+REM testcase testcase-interpretsis-04 - Install an applications registration info with null app file name. This is a negative testcase 
+
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+
+xcopy /E /Y backup\cdrive cdrive > NUL
+xcopy /E /Y backup\romdrive romdrive > NUL
+
+
+REM Remove installation files from any previous tests
+if exist  .\cdrive\Documents\InstTest\devlangsup*.txt  del .\cdrive\Documents\InstTest\devlangsup*.txt  > NUL
+
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_testcase_07.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+
+copy .\romdrive\sys\install\scr\provisioned\scr.db \epoc32\winscw\c\sys\install\scr\scr.db /Y > NUL
+
+IF NOT EXIST .\backup\cdrive mkdir .\backup\cdrive > NUL
+IF NOT EXIST .\backup\romdrive mkdir .\backup\romdrive > NUL
+xcopy /E /Y cdrive backup\cdrive > NUL
+xcopy /E /Y romdrive backup\romdrive > NUL
+
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-05_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@ECHO OFF
+REM testcase-interpretsis-05
+REM testcase testcase-interpretsis-05 - Install sis. This is a positive testcase 
+
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+
+xcopy /E /Y backup\cdrive cdrive > NUL
+xcopy /E /Y backup\romdrive romdrive > NUL
+
+
+REM Remove installation files from any previous tests
+if exist  .\cdrive\Documents\InstTest\devlangsup*.txt  del .\cdrive\Documents\InstTest\devlangsup*.txt  > NUL
+
+call interpretsis -z .\romdrive -c .\cdrive  -a /epoc32/release/winscw/udeb/z/private/10003a3f/test -w info -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+
+copy .\romdrive\sys\install\scr\provisioned\scr.db \epoc32\winscw\c\sys\install\scr\scr.db /Y > NUL
+
+IF NOT EXIST .\backup\cdrive mkdir .\backup\cdrive > NUL
+IF NOT EXIST .\backup\romdrive mkdir .\backup\romdrive > NUL
+xcopy /E /Y cdrive backup\cdrive > NUL
+xcopy /E /Y romdrive backup\romdrive > NUL
+
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-06_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,48 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@ECHO OFF
+REM testcase-interpretsis-06
+REM testcase testcase-interpretsis-06 - Install an applications registration info with SA and PU. This is a positive testcase 
+
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+
+del .\backup\romdrive\sys\install\scr\provisioned\scr.db
+
+xcopy /E /Y backup\cdrive cdrive > NUL
+xcopy /E /Y backup\romdrive romdrive > NUL
+
+REM Remove installation files from any previous tests
+if exist  .\cdrive\Documents\InstTest\devlangsup*.txt  del .\cdrive\Documents\InstTest\devlangsup*.txt  > NUL
+
+copy \epoc32\release\winscw\udeb\z\sys\install\scr\provisioned\scr.db .\romdrive\sys\install\scr\provisioned\scr.db /Y > NUL
+
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_testcase_08.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_05.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_testcase_10.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_05.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+
+copy .\romdrive\sys\install\scr\provisioned\scr.db \epoc32\winscw\c\sys\install\scr\scr.db /Y > NUL
+
+IF NOT EXIST .\backup\cdrive mkdir .\backup\cdrive > NUL
+IF NOT EXIST .\backup\romdrive mkdir .\backup\romdrive > NUL
+xcopy /E /Y cdrive backup\cdrive > NUL
+xcopy /E /Y romdrive backup\romdrive > NUL
+
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-07_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,41 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@ECHO OFF
+REM testcase-interpretsis-07
+REM testcase testcase-interpretsis-07 - Test for Uninstall when installation fails. This is a negative testcase 
+
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+
+xcopy /E /Y backup\cdrive cdrive > NUL
+xcopy /E /Y backup\romdrive romdrive > NUL
+
+REM Remove installation files from any previous tests
+if exist  .\cdrive\Documents\InstTest\devlangsup*.txt  del .\cdrive\Documents\InstTest\devlangsup*.txt  > NUL
+
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_testcase_09.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_05.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+
+IF NOT EXIST .\backup\cdrive mkdir .\backup\cdrive > NUL
+IF NOT EXIST .\backup\romdrive mkdir .\backup\romdrive > NUL
+xcopy /E /Y cdrive backup\cdrive > NUL
+xcopy /E /Y romdrive backup\romdrive > NUL
+
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/api-inst-testcase-interpretsis-08_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,80 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@ECHO OFF
+REM testcase-interpretsis-08
+REM testcase testcase-interpretsis-08 - Verify if ROM SIS STUB and Pre-Provisioned registration files are processed. This is a positive testcase 
+
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\cdrive\resource mkdir .\cdrive\resource > NUL
+if not exist .\cdrive\resource\apps mkdir .\cdrive\resource\apps > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+if not exist .\romdrive\system mkdir .\romdrive\system > NUL
+if not exist .\romdrive\system\install mkdir .\romdrive\system\install > NUL
+if not exist .\romdrive\private mkdir .\romdrive\private > NUL
+if not exist .\romdrive\private\10003a3f mkdir .\romdrive\private\10003a3f > NUL
+if not exist .\romdrive\private\10003a3f\import mkdir .\romdrive\private\10003a3f\import > NUL
+if not exist .\romdrive\private\10003a3f\import\apps mkdir .\romdrive\private\10003a3f\import\apps > NUL
+if not exist .\romdrive\private\10003a3f\apps mkdir .\romdrive\private\10003a3f\apps > NUL
+if not exist .\romdrive\resource mkdir .\romdrive\resource > NUL
+if not exist .\romdrive\resource\apps mkdir .\romdrive\resource\apps > NUL
+
+del .\backup\romdrive\sys\install\scr\provisioned\scr.db
+
+xcopy /E /Y backup\cdrive cdrive > NUL
+xcopy /E /Y backup\romdrive romdrive > NUL
+
+copy \epoc32\release\winscw\udeb\z\sys\install\scr\provisioned\scr.db .\romdrive\sys\install\scr\provisioned\scr.db /Y > NUL
+
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase_stub.sis .\romdrive\system\install\interpretsis_testcase_stub.sis /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase_01_reg.rsc .\romdrive\private\10003a3f\import\apps\interpretsis_testcase_01_reg.rsc /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase_02_reg.rsc .\romdrive\private\10003a3f\apps\interpretsis_testcase_02_reg.rsc /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase_01.r01 .\romdrive\resource\apps\interpretsis_testcase_01.r01 /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase_01.r03 .\romdrive\resource\apps\interpretsis_testcase_01.r03 /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase_01.r04 .\romdrive\resource\apps\interpretsis_testcase_01.r04 /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase_01.r24 .\romdrive\resource\apps\interpretsis_testcase_01.r24 /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase_02.r03 .\romdrive\resource\apps\interpretsis_testcase_02.r03 /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase01.mbm .\romdrive\resource\apps\interpretsis_testcase01.mbm /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase03.mbm .\romdrive\resource\apps\interpretsis_testcase03.mbm /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase04.mbm .\romdrive\resource\apps\interpretsis_testcase04.mbm /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase24.mbm .\romdrive\resource\apps\interpretsis_testcase24.mbm /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase01.mbm .\cdrive\resource\apps\interpretsis_testcase01.mbm /Y > NUL
+copy \epoc32\winscw\c\tswi\tinterpretsisinteg\data\interpretsis_testcase03.mbm .\cdrive\resource\apps\interpretsis_testcase03.mbm /Y > NUL
+
+REM Remove installation files from any previous tests
+if exist  .\cdrive\Documents\InstTest\devlangsup*.txt  del .\cdrive\Documents\InstTest\devlangsup*.txt  > NUL
+
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_testcase_08.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_05.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+
+copy .\romdrive\sys\install\scr\provisioned\scr.db \epoc32\winscw\c\sys\install\scr\scr.db /Y > NUL
+
+if exist  .\romdrive\system\install\interpretsis_testcase_stub.sis  del .\romdrive\system\install\interpretsis_testcase_stub.sis  > NUL
+if exist  .\romdrive\private\10003a3f\import\apps\interpretsis_testcase_01_reg.rsc  del .\romdrive\private\10003a3f\import\apps\interpretsis_testcase_01_reg.rsc  > NUL
+if exist  .\romdrive\private\10003a3f\apps\interpretsis_testcase_02_reg.rsc  del .\romdrive\private\10003a3f\apps\interpretsis_testcase_02_reg.rsc  > NUL
+if exist  .\romdrive\resource\apps\interpretsis_testcase_01.r* del .\romdrive\resource\apps\interpretsis_testcase_01.r*  > NUL
+if exist  .\romdrive\resource\apps\interpretsis_testcase_02.r* del .\romdrive\resource\apps\interpretsis_testcase_02.r*  > NUL
+if exist  .\romdrive\resource\apps\interpretsis_testcase*.mbm  del .\romdrive\resource\apps\interpretsis_testcase*.mbm > NUL
+
+IF NOT EXIST .\backup\cdrive mkdir .\backup\cdrive > NUL
+IF NOT EXIST .\backup\romdrive mkdir .\backup\romdrive > NUL
+xcopy /E /Y cdrive backup\cdrive > NUL
+xcopy /E /Y romdrive backup\romdrive > NUL
+
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/Hello_sis.sis has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq183501.mbm has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq183503.mbm has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq183504.mbm has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq183524.mbm has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_01.r01 has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_01.r03 has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_01.r04 has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_01.r24 has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_01_reg.rsc has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_02.r03 has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_02_reg.rsc has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_preq1835_stub.sis has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase01.mbm has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase03.mbm has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase04.mbm has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase24.mbm has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_01.r01 has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_01.r03 has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_01.r04 has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_01.r24 has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_01_reg.rsc has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_02.r03 has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_02_reg.rsc has changed
Binary file secureswitools/swisistools/test/tinterpretsisinteg/data/interpretsis_testcase_stub.sis has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp.CPP	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,25 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <e32std.h>
+
+GLDEF_C TInt E32Main()
+/**
+   EXE Entry Point
+   @return - Standard Epoc error code on exit
+ */
+	{
+	return KErrNone;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp.mmp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+//
+// TstApp.MMP for test component TstApp
+//
+
+target		tstapp.exe
+TARGETTYPE 	exe
+
+UID             0x100039CE 0xA000E525
+//targetpath      /sys/bin
+CAPABILITY 	All -Tcb
+VENDORID 	0x70000001
+
+systeminclude   /epoc32/include
+systeminclude   /epoc32/include/techview
+
+SOURCEPATH .
+SOURCE tstapp.cpp
+
+//Application localisable resource file
+resource  	tstapp_loc.RSS
+start resource 	tstapp_loc.RSS
+targetpath 	/resource/apps
+lang		sc 01 02 03
+end
+
+// Application exe registration resource file
+resource  	tstapp_reg.rss
+start resource 	tstapp_reg.rss
+targetpath 	/private/10003a3f/test
+lang		sc
+end
+
+// START resource files for tstapp2
+
+start resource	tstapp2_loc.RSS
+HEADER
+targetpath	/resource/apps
+lang		SC
+end
+
+start resource	tstapp2_reg.RSS
+targetpath	/private/10003a3f/test
+lang		SC 
+end
+
+// START resource files for tstappnouid3
+start resource	tstappnouid3_reg.RSS
+targetpath	/private/10003a3f/test
+lang		SC 
+end
+
+// START resource files for tstappnouid2
+start resource	tstappnouid2_reg.RSS
+targetpath	/private/10003a3f/test
+lang		SC 
+end
+
+// START resource files for tstappnoappfile
+start resource	tstappnoappfile_reg.RSS
+targetpath	/private/10003a3f/test
+lang		SC 
+end
+
+LIBRARY    	euser.lib
+LIBRARY 	ecom.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp01.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code 
+*/
+
+
+rls_string STRING_r_tstapp_caption_string "TstCapUK"
+rls_string STRING_r_tstapp_short_caption_string "TCUK"
+
+rls_string STRING_r_tstapp_view1_caption "V1UK"
+rls_string STRING_r_tstapp_view2_caption "V2UK"
+
+rls_string STRING_r_tstapp_icon_file ""
+rls_string STRING_r_tstapp_view1_icon_file ""
+rls_string STRING_r_tstapp_view2_icon_file ""
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp02.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code 
+*/
+
+
+rls_string STRING_r_tstapp_caption_string "TstCap_FR"
+rls_string STRING_r_tstapp_short_caption_string "TC_FR"
+
+rls_string STRING_r_tstapp_view1_caption "V1_FR"
+rls_string STRING_r_tstapp_view2_caption "V2_FR"
+
+rls_string STRING_r_tstapp_icon_file ""
+rls_string STRING_r_tstapp_view1_icon_file ""
+rls_string STRING_r_tstapp_view2_icon_file ""
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp03.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,34 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code 
+*/
+
+
+rls_string STRING_r_tstapp_caption_string "TstCap_GE"
+rls_string STRING_r_tstapp_short_caption_string "TC_GE"
+
+rls_string STRING_r_tstapp_view1_caption "V1_GE"
+rls_string STRING_r_tstapp_view2_caption "V2_GE"
+
+rls_string STRING_r_tstapp_icon_file ""
+rls_string STRING_r_tstapp_view1_icon_file ""
+rls_string STRING_r_tstapp_view2_icon_file ""
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp2_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,39 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file TstApp2_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+NAME SER1
+
+#include <uikon.rh>
+#include <appinfo.rh>
+ 
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE LOCALISABLE_APP_INFO R_LAI
+	{
+	short_caption = "TstApp2";
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = "TstApp2Caption";
+			number_of_icons = 0;
+			}
+		};			
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp2_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,35 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file CustomiseDefaultIconApp_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <tstapp2_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x124 // UID of the application this registration file represents
+
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file="TstApp2";
+	
+	localisable_resource_file="\\resource\\apps\\tstapp2_loc";
+	localisable_resource_id=R_LAI;
+		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp_loc.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,94 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file TstApp_loc.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+NAME SER1
+
+#include <uikon.rh>
+#include <appinfo.rh>
+
+#if defined(LANGUAGE_01)
+#include "tstapp01.rls"
+#elif(LANGUAGE_02)
+#include "tstapp02.rls"
+#elif(LANGUAGE_03)
+#include "tstapp03.rls"
+#else
+#include "tstappsc.rls"
+#endif
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE LOCALISABLE_APP_INFO R_LAI
+	{
+	short_caption = STRING_r_tstapp_short_caption_string;
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = STRING_r_tstapp_caption_string;
+			number_of_icons = 1;
+			icon_file="";
+			}
+		};
+
+	view_list =
+		{
+		VIEW_DATA
+			{
+			uid = 270565258;
+			screen_mode = 0x00;
+			caption_and_icon =
+				{
+				CAPTION_AND_ICON_INFO
+					{
+					caption = STRING_r_tstapp_view1_caption;
+					number_of_icons = 1;
+					icon_file = STRING_r_tstapp_view1_icon_file ;
+					}
+				};
+			},
+		VIEW_DATA
+			{
+			uid = 270565259;
+			screen_mode = 0x00;
+			caption_and_icon =
+				{
+				CAPTION_AND_ICON_INFO
+					{
+					caption = STRING_r_tstapp_view2_caption;
+					number_of_icons = 1;
+					icon_file = STRING_r_tstapp_view2_icon_file;
+					}
+				};
+			}
+ 			
+		};
+		
+	}
+
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_service_specific_data_loc
+	{
+	name = "Localised_text_for_service_UID_0x01020305";
+	}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstapp_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,80 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file TstApp_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+
+#include <appinfo.rh>
+#include <tstapp_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x123
+RESOURCE APP_REGISTRATION_INFO
+	{	
+	app_file = TstApp;
+	localisable_resource_file="\\Resource\\Apps\\tstapp_loc";
+	localisable_resource_id = R_LAI;
+	attributes = KAppIsControlPanelItem;
+	hidden = KAppNotHidden;
+	embeddability = KAppNotEmbeddable;
+	newfile = KAppDoesNotSupportNewFile;
+	launch = KAppLaunchInForeground;
+	group_name = "Games";
+	file_ownership_list = 
+		{
+		FILE_OWNERSHIP_INFO { file_name="C:\\System\\file2"; }
+		};
+
+	datatype_list = 
+		{
+		DATATYPE { priority=EDataTypePriorityNormal; type="text/plain"; }
+		};
+
+	service_list =
+		{
+		SERVICE_INFO { uid = 0x10101010;},
+		SERVICE_INFO 
+			{
+			uid = 0x01020304; 
+			datatype_list = 
+				{
+				DATATYPE { priority=EDataTypePriorityNormal; type="text/custom1"; }
+				};
+			opaque_data = r_first_service_specific_data;
+			},
+		SERVICE_INFO { uid = 0x02345000; opaque_data = r_second_service_specific_data;},
+		SERVICE_INFO { uid = 0x05678000; opaque_data = r_first_service_specific_data;},
+		SERVICE_INFO { uid = 0x01020305; opaque_data = R_SERVICE_SPECIFIC_DATA_LOC; }
+		};
+
+	}
+
+STRUCT SERVICE_NAME
+	{
+	LTEXT name = "";
+	}
+
+RESOURCE SERVICE_NAME r_first_service_specific_data
+	{
+	name = "Non-localised_text_for_service_uid_0x01020304";
+	}
+
+RESOURCE SERVICE_NAME r_second_service_specific_data
+	{
+	name = "Non-localised_text_for_service_uid_0x02345000";
+	}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstappnoappfile_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,33 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file CustomiseDefaultIconApp_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <tstapp2_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x10208181 // UID of the application this registration file represents
+
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	localisable_resource_file="\\resource\\apps\\tstapp2_loc";
+	localisable_resource_id=R_LAI;
+		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstappnouid2_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file CustomiseDefaultIconApp_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <tstapp2_loc.rsg>
+
+UID2 1
+UID3 0x10208181 // UID of the application this registration file represents
+
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file="TstApp3";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstappnouid3_reg.rss	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,29 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file CustomiseDefaultIconApp_reg.rss
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <appinfo.rh>
+#include <tstapp2_loc.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file="TstApp4";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/data/regfiles/tstappsc.rls	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code 
+*/
+
+
+rls_string STRING_r_tstapp_caption_string "TstCap_UK"
+rls_string STRING_r_tstapp_short_caption_string "TC_UK"
+
+rls_string STRING_r_tstapp_view1_caption "V1_SC"
+rls_string STRING_r_tstapp_view2_caption "V2_SC"
+
+rls_string STRING_r_tstapp_icon_file ""
+rls_string STRING_r_tstapp_view_icon_file ""
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_defaultvaluetest_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@ECHO OFF
+REM INT_DefaultValueTest
+REM testcase INT_DefaultValueTest - Install sis and update a corrupt DB. This is a positive testcase 
+
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+
+REM xcopy /E /Y backup\cdrive cdrive > NUL
+REM xcopy /E /Y backup\romdrive romdrive > NUL
+
+
+REM Remove installation files from any previous tests
+if exist  .\cdrive\Documents\InstTest\devlangsup*.txt  del .\cdrive\Documents\InstTest\devlangsup*.txt  > NUL
+
+if exist  .\romdrive\sys\install\scr\provisioned\scr.db  del .\romdrive\sys\install\scr\provisioned\scr.db  > NUL
+if not exist .\romdrive\sys\install\scr\provisioned mkdir .\romdrive\sys\install\scr\provisioned > NUL
+copy \epoc32\release\winscw\udeb\z\tusif\tscr\data\scr-nodefaultvalues.db .\romdrive\sys\install\scr\provisioned\scr.db /Y > NUL
+
+if exist  .\cdrive\sys\install\scr\scr.db  del .\cdrive\sys\install\scr\scr.db  > NUL
+if not exist .\cdrive\sys\install\scr mkdir .\cdrive\sys\install\scr > NUL
+copy \epoc32\release\winscw\udeb\z\tusif\tscr\data\scr-nodefaultvalues.db .\cdrive\sys\install\scr\scr.db /Y > NUL
+
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tsis/data/interpretsis_testcase.sis -w info -I /epoc32/winscw/c/tswi/tinterpretsisinteg/testcase-interpretsis-01/argumentfile.ini  -l /epoc32/winscw/c/interpretsis_test_harness_db.txt > NUL
+
+copy .\romdrive\sys\install\scr\provisioned\scr.db \epoc32\winscw\c\sys\install\scr\scr.db /Y > NUL
+
+IF NOT EXIST .\backup\cdrive mkdir .\backup\cdrive > NUL
+IF NOT EXIST .\backup\romdrive mkdir .\backup\romdrive > NUL
+xcopy /E /Y cdrive backup\cdrive > NUL
+xcopy /E /Y romdrive backup\romdrive > NUL
+
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-01_db.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-01_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -24,6 +24,7 @@
 if not exist .\cdrive\Documents mkdir .\cdrive\Documents > NUL
 if not exist .\romdrive\system\ mkdir .\romdrive\system\ > NUL
 if not exist .\romdrive\system\install\ mkdir .\romdrive\system\install\ > NUL
+if exist .\backup\romdrive\sys\install\scr\provisioned\scr.db del .\backup\romdrive\sys\install\scr\provisioned\scr.db > NUL
 REM Remove installation files from any previous tests
 if exist  .\cdrive\Documents\InstTest\Equivalent*.txt  del .\cdrive\Documents\InstTest\Equivalent*.txt  > NUL
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/interpretsism001a_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+
+:: This batch file test if SCR DB is created when SCR DB is not present in System Drive. Error is thrown in case DB creation fails.
+@ECHO OFF
+REM testcaseM001a
+call interpretsis -s \epoc32\winscw\c\tswi\tinterpretsisinteg\sisfiles\interpretsism001.sis -t .\romdrive\system\install\ -c .\cdrive -r \epoc32\winscw\c\tswi\tinterpretsisinteg\testdatam001\rombld.log -w info -l /epoc32/winscw/c/interpretsis_test_harness_db.txt
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/makesism001a_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,26 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+
+:: This batch file creates sis file/files
+@ECHO OFF
+REM testcaseM001a
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+IF NOT EXIST .\romdrive\system\install\ mkdir .\romdrive\system\install\ > NUL
+IF NOT EXIST .\cdrive\sys\install\scr\ mkdir .\cdrive\sys\install\scr\ > NUL
+call makesis \epoc32\winscw\c\tswi\tinterpretsisinteg\testdatam001\interpretsism001.pkg \epoc32\winscw\c\tswi\tinterpretsisinteg\sisfiles\interpretsism001.sis > NUL
+call /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism001a_db.bat > NUL
+:END
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/parameters_file/preq1835-interpretsis-07.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,5 @@
+interpretsis_preq1835_09_reg.rsc
+interpretsis_preq1835_09.r01
+interpretsis_preq1835_09.r03
+interpretsis_preq183501_09.mbm
+interpretsis_preq183503_09.mbm
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/parameters_file/testcase-interpretsis-07.txt	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,5 @@
+interpretsis_testcase_09_reg.rsc
+interpretsis_testcase_09.r01
+interpretsis_testcase_09.r03
+interpretsis_testcase01_09.mbm
+interpretsis_testcase03_09.mbm
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-01.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,65 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Device supported language tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//! @SYMTestCaseID 		API-INST-testcase-InterpretSIS-01
+//! @SYMTestCaseDesc 		Verify SCR for All positive scenario.
+//! @SYMPREQ  			PREQ1835
+//! @SYMTestStatus		Released
+//! @SYMTestPriority 		High
+//! @SYMTestActions 		Check SCR for All positive scenario.
+//! @SYMTestExpectedResults 	ViewData should be shown in current running language.
+//! @SYMTestType		CIT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+START_TESTCASE API-INST-testcase-InterpretSIS-01
+
+// Delete the SCR Database file
+//RUN_TEST_STEP 100 tscr SCRDeleteDbFile c:\tswi\tinterpretsisinteg\scripts\ini.ini db_file 
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_english
+//Test for ViewInfo, Locale = Eng
+RUN_TEST_STEP 100 tscr ScrGetAppViewInfo c:\tswi\tinterpretsisinteg\scripts\ini.ini get_app_view_info_partial_eng
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_german
+//Test for ViewInfo, Locale = German
+RUN_TEST_STEP 100 tscr ScrGetAppViewInfo c:\tswi\tinterpretsisinteg\scripts\ini.ini get_app_view_info_partial_ger
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_spanish
+//Test for AppOwnedFiles, Locale = Spanish
+RUN_TEST_STEP 100 tscr SCRGetAppOwnedFilesEntry c:\tswi\tinterpretsisinteg\scripts\ini.ini appownedfiles_spn
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView c:\tswi\tinterpretsisinteg\scripts\ini.ini ApplicationRegistrationData_MultipleApp_Locale_Eng
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView c:\tswi\tinterpretsisinteg\scripts\ini.ini ApplicationRegistrationData_MultipleApp_Locale_Ger
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_spanish
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView c:\tswi\tinterpretsisinteg\scripts\ini.ini ApplicationRegistrationData_MultipleApp_Locale_Spn
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_french
+//Test for nearest language locale
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView c:\tswi\tinterpretsisinteg\scripts\ini.ini ApplicationRegistrationData_MultipleApp_Locale_Frn
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_english
+
+END_TESTCASE API-INST-testcase-InterpretSIS-01
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-02.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Device supported language tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//! @SYMTestCaseID 		API-INST-testcase-InterpretSIS-02
+//! @SYMTestCaseDesc 		Add an applications registration info with same app file name.
+//! @SYMPREQ  			PREQ1835
+//! @SYMTestStatus		Released
+//! @SYMTestPriority 		High
+//! @SYMTestActions 		Check Adding an applications registration info with same app file name.
+//! @SYMTestExpectedResults 	Negative TestCases
+//! @SYMTestType		CIT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+START_TESTCASE API-INST-testcase-InterpretSIS-02
+
+// Delete the SCR Database file
+//RUN_TEST_STEP 100 tscr SCRDeleteDbFile c:\tswi\tinterpretsisinteg\scripts\ini.ini db_file
+
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry c:\tswi\tinterpretsisinteg\scripts\ini.ini add_app_reg_info_sameappfile
+
+END_TESTCASE API-INST-testcase-InterpretSIS-02
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-03.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,47 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Device supported language tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//! @SYMTestCaseID 		API-INST-testcase-InterpretSIS-03
+//! @SYMTestCaseDesc 		Add an applications registration info with same appuid.
+//! @SYMPREQ  			PREQ1835
+//! @SYMTestStatus		Released
+//! @SYMTestPriority 		High
+//! @SYMTestActions 		Check Adding an applications registration info with same appuid.
+//! @SYMTestExpectedResults 	Negative Test Case.
+//! @SYMTestType		CIT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+START_TESTCASE API-INST-testcase-InterpretSIS-03
+
+
+// Delete the SCR Database file
+//RUN_TEST_STEP 100 tscr SCRDeleteDbFile c:\tswi\tinterpretsisinteg\scripts\ini.ini db_file
+
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry c:\tswi\tinterpretsisinteg\scripts\ini.ini add_app_reg_info_sameappuid
+
+END_TESTCASE API-INST-testcase-InterpretSIS-03
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-04.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,44 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Device supported language tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//! @SYMTestCaseID 		API-INST-testcase-InterpretSIS-04
+//! @SYMTestCaseDesc 		Add an applications registration info with same appuid.
+//! @SYMPREQ  			PREQ1835
+//! @SYMTestStatus		Released
+//! @SYMTestPriority 		High
+//! @SYMTestActions 		Check Adding an applications registration info with same appuid.
+//! @SYMTestExpectedResults 	Negative Test Case.
+//! @SYMTestType		CIT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+START_TESTCASE API-INST-testcase-InterpretSIS-04
+
+
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry c:\tswi\tinterpretsisinteg\scripts\ini.ini add_app_reg_info_nullappuid
+
+END_TESTCASE API-INST-testcase-InterpretSIS-04
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-05.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,46 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Device supported language tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//! @SYMTestCaseID 		API-INST-testcase-InterpretSIS-05
+//! @SYMTestCaseDesc 		Verify SCR for All positive scenario.
+//! @SYMPREQ  			PREQ1835
+//! @SYMTestStatus		Released
+//! @SYMTestPriority 		High
+//! @SYMTestActions 		Check SCR for All positive scenario.
+//! @SYMTestExpectedResults 	App info should be as expected in the database.
+//! @SYMTestType		CIT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+START_TESTCASE API-INST-testcase-InterpretSIS-05
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView c:\tswi\tinterpretsisinteg\scripts\ini.ini ApplicationRegistrationData_MultipleApp_Locale
+
+// Delete the SCR Database file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile c:\tswi\tinterpretsisinteg\scripts\ini.ini db_file 
+
+END_TESTCASE API-INST-testcase-InterpretSIS-05
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-06.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Device supported language tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//! @SYMTestCaseID 		API-INST-testcase-InterpretSIS-06
+//! @SYMTestCaseDesc 		Verify SCR for PU type package.
+//! @SYMPREQ  			testcase
+//! @SYMTestStatus		Released
+//! @SYMTestPriority 		High
+//! @SYMTestActions 		Check SCR for All application registration data.
+//! @SYMTestExpectedResults 	Appreginfo with PU data should be shown in current running language.
+//! @SYMTestType		CIT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+START_TESTCASE API-INST-testcase-InterpretSIS-06
+
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_english
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView c:\tswi\tinterpretsisinteg\scripts\ini.ini ApplicationRegistrationData_MultipleApp_Locale_Eng_PU
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView c:\tswi\tinterpretsisinteg\scripts\ini.ini ApplicationRegistrationData_MultipleApp_Locale_Ger_PU
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_english
+
+// Delete the SCR Database file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile c:\tswi\tinterpretsisinteg\scripts\ini.ini db_file 
+
+END_TESTCASE API-INST-testcase-InterpretSIS-06
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/api-inst-testcase-interpretsis-08.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,52 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Device supported language tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//! @SYMTestCaseID 		API-INST-testcase-InterpretSIS-08
+//! @SYMTestCaseDesc 		Verify if ROM SIS STUB and Pre-Provisioned registration files are processed.
+//! @SYMPREQ  			testcase
+//! @SYMTestStatus		Released
+//! @SYMTestPriority 		High
+//! @SYMTestActions 		Check SCR for All application registration data.
+//! @SYMTestExpectedResults 	ROM SIS STUB and Pre-Provisioned registration files should be shown in current running language.
+//! @SYMTestType		CIT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+START_TESTCASE API-INST-testcase-InterpretSIS-08
+
+// Delete the SCR Database file
+//RUN_TEST_STEP 100 tscr SCRDeleteDbFile c:\tswi\tinterpretsisinteg\scripts\ini.ini db_file 
+
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_german
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView c:\tswi\tinterpretsisinteg\scripts\ini.ini ApplicationRegistrationData_MultipleApp_Locale_Ger_08
+RUN_TEST_STEP 100 tSisRegistryTest ChangeLocale c:\tswi\tinterpretsisinteg\scripts\ini.ini langauge_to_english
+
+// Delete the SCR Database file
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile c:\tswi\tinterpretsisinteg\scripts\ini.ini db_file 
+
+END_TESTCASE API-INST-testcase-InterpretSIS-08
+
+
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/ini.ini	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/ini.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -568,6 +568,9 @@
 [langauge_to_english]
 language=01
 
+[langauge_to_spanish]
+language=04
+
 [equ_package_info_swiss_belgian_french]
 uid-01=88000108
 package-01=Equivalent_BF
@@ -618,3 +621,1693 @@
 uid=88000108
 script=c:\tswi\tuiscriptadaptors\scripts\uninstall.xml
 
+[get_app_view_info_partial_eng]
+AppUid=ABC
+
+ViewDataCount=2
+VwUid0=268123121
+VwScreenMode0=0
+VwCaption0=view_268123121_caption_eng
+VwIconFileName0=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons0=1
+VwUid1=268123122
+VwScreenMode1=1
+VwCaption1=view_268123122_caption_eng
+VwIconFileName1=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons1=2
+
+
+[get_app_view_info_partial_ger]
+AppUid=ABC
+
+ViewDataCount=2
+VwUid0=268123123
+VwScreenMode0=3
+VwCaption0=view_268123123_caption_ger
+VwIconFileName0=z:\resource\apps\interpretsis_testcase03.mbm
+VwNumberOfAppIcons0=3
+VwUid1=268123124
+VwScreenMode1=4
+VwCaption1=view_268123124_caption_ger
+VwIconFileName1=z:\resource\apps\interpretsis_testcase03.mbm
+VwNumberOfAppIcons1=4
+
+[appownedfiles_eng]
+AppUid=ABC
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+
+[appownedfiles_spn]
+AppUid=ABE
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+
+[add_app_reg_info_sameappuid]
+ComponentName=interpretsis_eng_testcase
+VendorName=Symbian Software Ltd
+SoftwareType=plain
+GlobalIdName=native
+AppUid=AC1
+AppFile=interpretsis_testcase_06
+
+[add_app_reg_info_nullappuid]
+ComponentName=interpretsis_eng_testcase
+VendorName=Symbian Software Ltd
+SoftwareType=plain
+GlobalIdName=native
+AppUid=ABCD
+AppFile=interpretsis_testcase_07
+
+[add_app_reg_info_sameappfile]
+ComponentName=interpretsis_eng_testcase
+VendorName=Symbian Software Ltd
+SoftwareType=plain
+GlobalIdName=native
+AppUid=AC1
+AppFile=interpretsis_testcase_try
+
+
+[add_app_reg_info_sameappfile_1]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global1221
+AppUid=A0001221
+AppFile=appname
+
+[add_app_reg_info_sameappfile_2]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global1221
+AppUid=A0001221
+AppFile=ApPnAmE
+
+[add_app_reg_info]
+ComponentName=Component
+VendorName=SecurityTeam
+SoftwareType=plain
+GlobalIdName=Component_Global
+AppUid=A0001234
+AppFile=appname
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+DefaultScreenNumber=0
+OpaqueData=somedata
+OwnedFileCount=2
+FileName0=file0
+FileName1=file2
+ServiceInfoCount=1
+ServiceUid0=987654321
+ServiceOpaqueData0=servicedata
+ServiceDataTypeCount0=1
+ServiceDataTypePriority0=1
+ServiceDataType0=text/plain
+LocalizableAppInfoCount=2
+LocShortCaption0=sc0
+LocAppLanguage0=0
+LocGroupName0=Games
+LocCaption0=c0
+LocIconFileName0=iconfile
+LocNumberOfAppIcons0=2
+ViewDataCount0=1
+VwUid0=45689123
+VwScreenMode0=0
+VwCaption0=vc
+VwIconFileName0=viewiconfile
+VwNumberOfAppIcons0=0
+LocShortCaption1=sc0
+LocAppLanguage1=1
+LocGroupName1=Games
+LocCaption1=c0
+LocIconFileName1=iconfile
+LocNumberOfAppIcons1=2
+ViewDataCount1=1
+VwUid1=45689123
+VwScreenMode1=0
+VwCaption1=vc
+VwIconFileName1=viewiconfile
+VwNumberOfAppIcons1=0
+AppPropertyCount=1
+PropertyLocale0=0
+PropertyName0=p1
+PropertyIntValue0=2
+PropertyStrValue0=asd
+
+[appownedfiles]
+AppUid=A0001234
+OwnedFileCount=2
+FileName0=file0
+FileName1=file2
+
+[noappownedfiles]
+AppUid=A0001234
+OwnedFileCount=0
+
+[appcapability]
+AppUid=A0001234
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+
+[appcapability_nogroupname]
+AppUid=A0001234
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=
+
+[appicon]
+AppUid=A0001234
+LocIconFileName=iconfile
+
+[noappicon]
+AppUid=A0001234
+LocIconFileName
+
+[appicon_nolocalizedinfoforenglish]
+AppUid=A0001234
+LocIconFileName=iconfile_IntFr
+
+[appviewicon]
+AppUid=A0001234
+VwUid=45689123
+VwIconFileName=viewiconfile
+
+[noappviewicon]
+AppUid=A0001234
+VwUid=0
+VwIconFileName
+
+[appviewicon_nolocalizedinfoforenglish]
+AppUid=A0001234
+VwUid=45689123
+VwIconFileName=viewiconfile_IntFr0
+
+[noviewdatafornearestlanguage]
+AppUid=A0001234
+VwUid=45689123
+VwIconFileName
+
+[get_app_view_info_partial_2]
+AppUid=A0000222
+
+
+[ApplicationRegistrationData_MultipleApp_Locale_Eng_PU]
+NoOfEntries=1
+AppRegEntriesConfigCount=1
+configsection0 = get_app_reg_info_ab0_01
+
+
+[ApplicationRegistrationData_MultipleApp_Locale_Ger_PU]
+NoOfEntries=1
+AppRegEntriesConfigCount=1
+configsection0 = get_app_reg_info_ab0_03
+
+
+[ApplicationRegistrationData_MultipleApp_Locale_Eng]
+NoOfEntries=1
+AppRegEntriesConfigCount=1
+configsection0 = get_app_reg_info_abc_01
+configsection1 = get_app_reg_info_abd_01
+configsection2 = get_app_reg_info_abe_01
+configsection3 = get_app_reg_info_abf_01
+configsection4 = get_app_reg_info_ac0_01
+
+[ApplicationRegistrationData_MultipleApp_Locale_Ger]
+NoOfEntries=1
+AppRegEntriesConfigCount=1
+configsection0 = get_app_reg_info_abc_03
+configsection1 = get_app_reg_info_abd_03
+configsection2 = get_app_reg_info_abe_03
+configsection3 = get_app_reg_info_abf_03
+configsection4 = get_app_reg_info_ac0_03
+
+[ApplicationRegistrationData_MultipleApp_Locale_Spn]
+NoOfEntries=1
+AppRegEntriesConfigCount=1
+configsection0 = get_app_reg_info_abc_04
+configsection1 = get_app_reg_info_abd_04
+configsection2 = get_app_reg_info_abe_04
+configsection3 = get_app_reg_info_abf_04
+configsection4 = get_app_reg_info_ac0_04
+
+[ApplicationRegistrationData_MultipleApp_Locale_Frn]
+NoOfEntries=1
+AppRegEntriesConfigCount=1
+configsection0 = get_app_reg_info_abc_24
+configsection1 = get_app_reg_info_abd_24
+configsection2 = get_app_reg_info_abe_24
+configsection3 = get_app_reg_info_abf_24
+configsection4 = get_app_reg_info_ac0_24
+
+
+[get_app_reg_info_abc_dup]
+AppUid=ABC
+AppFile=interpretsis_testcase
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_01020305
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=4
+
+LocShortCaption0=HW
+LocAppLanguage0=1
+LocGroupName0=Tapash_Group
+LocCaption0=helloworld
+LocIconFileName0=\resource\apps\interpretsis_testcase01.mbm
+LocNumberOfAppIcons0=2
+ViewDataCount0=2
+VwUid0=268123121
+VwScreenMode0=0
+VwCaption0=view_268123121_caption_eng
+VwIconFileName0=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons0=1
+VwUid1=268123122
+VwScreenMode1=1
+VwCaption1=view_268123122_caption_eng
+VwIconFileName1=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons1=2
+
+LocShortCaption1=Hallo
+LocAppLanguage1=3
+LocGroupName1=Tapash_Group
+LocCaption1=interpretsis_testcase
+LocNumberOfAppIcons1=0
+ViewDataCount1=2
+VwUid2=268123123
+VwScreenMode2=3
+VwCaption2=view_268123123_caption_ger
+VwIconFileName2=z:\resource\apps\interpretsis_testcase03.mbm
+VwNumberOfAppIcons2=3
+VwUid3=268123124
+VwScreenMode3=4
+VwCaption3=view_268123124_caption_ger
+VwIconFileName3=z:\resource\apps\interpretsis_testcase03.mbm
+VwNumberOfAppIcons3=4
+
+LocShortCaption2=HW_Spain
+LocAppLanguage2=4
+LocGroupName2=Tapash_Group
+LocCaption2=interpretsis_testcase
+LocNumberOfAppIcons2=2
+ViewDataCount2=2
+VwUid3=268123125
+VwScreenMode3=5
+VwCaption3=view_268123125_caption_spn
+VwIconFileName3=z:\resource\apps\interpretsis_testcase04.mbm
+VwNumberOfAppIcons3=5
+VwUid4=268123126
+VwScreenMode4=6
+VwCaption4=view_268123126_caption_spn
+VwIconFileName4=z:\resource\apps\interpretsis_testcase04.mbm
+VwNumberOfAppIcons4=6
+
+LocShortCaption3=HW_FR
+LocAppLanguage3=24
+LocGroupName3=Tapash_Group
+LocCaption3=hello_French
+LocIconFileName3=\resource\apps\interpretsis_testcase24.mbm
+LocNumberOfAppIcons3=2
+ViewDataCount3=2
+VwUid5=268123127
+VwScreenMode5=7
+VwCaption5=view_268123127_caption_fr
+VwIconFileName5=z:\resource\apps\interpretsis_testcase24.mbm
+VwNumberOfAppIcons5=7
+VwUid6=268123128
+VwScreenMode6=8
+VwCaption6=view_268123128_caption_fr
+VwIconFileName6=z:\resource\apps\interpretsis_testcase24.mbm
+VwNumberOfAppIcons6=8
+
+
+[get_app_reg_info_abc_01]
+AppUid=ABC
+AppFile=interpretsis_testcase
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+PropertiesCount=0
+ServiceInfoCount=3
+ServiceUid0=10208dca
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=0ffb3bf3
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=0ffb3bf4
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=HW
+LocAppLanguage0=1
+LocGroupName0=Tapash_Group
+LocCaption0=helloworld
+LocIconFileName0=\resource\apps\interpretsis_testcase01.mbm
+LocNumberOfAppIcons0=2
+ViewDataCount0=2
+VwUid0=268123121
+VwScreenMode0=0
+VwCaption0=view_268123121_caption_eng
+VwIconFileName0=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons0=1
+VwUid1=268123122
+VwScreenMode1=1
+VwCaption1=view_268123122_caption_eng
+VwIconFileName1=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons1=2
+
+[get_app_reg_info_abd_01]
+AppUid=ABD
+AppFile=interpretsis_testcase_dup
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+PropertiesCount=0
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=268123123
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_abe_01]
+AppUid=ABE
+AppFile=interpretsis_testcase_02
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+PropertiesCount=0
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_abf_01]
+AppUid=ABF
+AppFile=interpretsis_testcase_03
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+PropertiesCount=0
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_ac0_01]
+AppUid=AC0
+AppFile=interpretsis_testcase_04
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_abc_03]
+AppUid=ABC
+AppFile=interpretsis_testcase
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+PropertiesCount=0
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=10208dca
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=0ffb3bf3
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=0ffb3bf4
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=Hallo
+LocAppLanguage0=3
+LocGroupName0=Tapash_Group
+LocCaption0=interpretsis_testcase
+LocNumberOfAppIcons0=0
+ViewDataCount0=2
+VwUid0=268123123
+VwScreenMode0=3
+VwCaption0=view_268123123_caption_ger
+VwIconFileName0=z:\resource\apps\interpretsis_testcase03.mbm
+VwNumberOfAppIcons0=3
+VwUid1=268123124
+VwScreenMode1=4
+VwCaption1=view_268123124_caption_ger
+VwIconFileName1=z:\resource\apps\interpretsis_testcase03.mbm
+VwNumberOfAppIcons1=4
+
+[get_app_reg_info_abd_03]
+AppUid=ABD
+AppFile=interpretsis_testcase_dup
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_abe_03]
+AppUid=ABE
+AppFile=interpretsis_testcase_02
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=Hallo
+LocAppLanguage0=3
+LocGroupName0=Tapash_Group
+LocCaption0=interpretsis_testcase_02
+LocNumberOfAppIcons0=0
+ViewDataCount0=2
+VwUid0=268123123
+VwScreenMode0=3
+VwCaption0=view_268123123_caption_ger
+VwIconFileName0=z:\resource\apps\interpretsis_testcase03.mbm
+VwNumberOfAppIcons0=3
+VwUid1=268123124
+VwScreenMode1=4
+VwCaption1=view_268123124_caption_ger
+VwIconFileName1=z:\resource\apps\interpretsis_testcase03.mbm
+VwNumberOfAppIcons1=4
+
+[get_app_reg_info_abf_03]
+AppUid=ABF
+AppFile=interpretsis_testcase_03
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_ac0_03]
+AppUid=AC0
+AppFile=interpretsis_testcase_04
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_abc_04]
+AppUid=ABC
+AppFile=interpretsis_testcase
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+PropertiesCount=0
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=10208dca
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=0ffb3bf3
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=0ffb3bf4
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=HW_Spain
+LocAppLanguage0=4
+LocGroupName0=Tapash_Group
+LocCaption0=interpretsis_testcase
+LocNumberOfAppIcons0=2
+ViewDataCount0=2
+VwUid0=268123125
+VwScreenMode0=5
+VwCaption0=view_268123125_caption_spn
+VwIconFileName0=z:\resource\apps\interpretsis_testcase04.mbm
+VwNumberOfAppIcons0=5
+VwUid1=268123126
+VwScreenMode1=6
+VwCaption1=view_268123126_caption_spn
+VwIconFileName1=z:\resource\apps\interpretsis_testcase04.mbm
+VwNumberOfAppIcons1=6
+
+[get_app_reg_info_abd_04]
+AppUid=ABD
+AppFile=interpretsis_testcase_dup
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_abe_04]
+AppUid=ABE
+AppFile=interpretsis_testcase_02
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_abf_04]
+AppUid=ABF
+AppFile=interpretsis_testcase_03
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=HW_Spain
+LocAppLanguage0=4
+LocGroupName0=Tapash_Group
+LocCaption0=interpretsis_testcase_03
+LocNumberOfAppIcons0=2
+ViewDataCount0=0
+
+[get_app_reg_info_ac0_04]
+AppUid=AC0
+AppFile=interpretsis_testcase_04
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_abc_24]
+AppUid=ABC
+AppFile=interpretsis_testcase
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+PropertiesCount=0
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=10208dca
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=0ffb3bf3
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=0ffb3bf4
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=HW_FR
+LocAppLanguage0=24
+LocGroupName0=Tapash_Group
+LocCaption0=hello_French
+LocIconFileName0=\resource\apps\interpretsis_testcase24.mbm
+LocNumberOfAppIcons0=2
+ViewDataCount0=2
+VwUid0=268123127
+VwScreenMode0=7
+VwCaption0=view_268123127_caption_fr
+VwIconFileName0=z:\resource\apps\interpretsis_testcase24.mbm
+VwNumberOfAppIcons0=7
+VwUid1=268123128
+VwScreenMode1=8
+VwCaption1=view_268123128_caption_fr
+VwIconFileName1=z:\resource\apps\interpretsis_testcase24.mbm
+VwNumberOfAppIcons1=8
+
+[get_app_reg_info_abd_24]
+AppUid=ABD
+AppFile=interpretsis_testcase_dup
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_abe_24]
+AppUid=ABE
+AppFile=interpretsis_testcase_02
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_abf_24]
+AppUid=ABF
+AppFile=interpretsis_testcase_03
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=0
+
+[get_app_reg_info_ac0_24]
+AppUid=AC0
+AppFile=interpretsis_testcase_04
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+OpaqueData=Non-localised_resource
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid0=270568906
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg2
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif2
+
+ServiceUid1=268123123
+ServiceOpaqueData1=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=268123124
+ServiceOpaqueData2=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg2
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif2
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=HW_FR
+LocAppLanguage0=24
+LocGroupName0=Tapash_Group
+LocCaption0=hello_French
+LocIconFileName0=\resource\apps\interpretsis_testcase24.mbm
+LocNumberOfAppIcons0=2
+ViewDataCount0=0
+
+[get_app_reg_info_ab0_01]
+AppUid=E8000AB0
+AppFile=interpretsis_testcase_08
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+PropertiesCount=0
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=10208dca
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=0ffb3bf3
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=0ffb3bf4
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=HW
+LocAppLanguage0=1
+LocGroupName0=Tapash_Group
+LocCaption0=helloworld
+LocIconFileName0=\resource\apps\interpretsis_testcase01.mbm
+LocNumberOfAppIcons0=2
+ViewDataCount0=2
+VwUid0=268123123
+VwScreenMode0=0
+VwCaption0=view_268123123_caption_eng
+VwIconFileName0=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons0=5
+VwUid1=268123124
+VwScreenMode1=1
+VwCaption1=view_268123124_caption_eng
+VwIconFileName1=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons1=6
+
+[get_app_reg_info_ab0_03]
+AppUid=E8000AB0
+AppFile=interpretsis_testcase_08
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+PropertiesCount=0
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=10208dca
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=0ffb3bf3
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=0ffb3bf4
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=Hallo_PU
+LocAppLanguage0=3
+LocGroupName0=Tapash_Group
+LocCaption0=Hallo_Welt_PU
+LocIconFileName0=\resource\apps\interpretsis_testcase03.mbm
+LocNumberOfAppIcons0=2
+ViewDataCount0=2
+VwUid0=268123123
+VwScreenMode0=0
+VwCaption0=view_268123123_caption_ger_PU
+VwIconFileName0=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons0=5
+VwUid1=268123124
+VwScreenMode1=1
+VwCaption1=view_268123124_caption_ger_PU
+VwIconFileName1=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons1=6
+
+[db_file]
+DbFilePath=c:\sys\install\scr\scr.db
+JournalFilePath=c:\sys\install\scr\scr.db-journal
+
+[ApplicationRegistrationData_MultipleApp_Locale]
+NoOfEntries=1
+AppRegEntriesConfigCount=1
+configsection0 = get_app_reg_info_01
+configsection1 = get_app_reg_info_02
+
+[get_app_reg_info_01]
+AppUid=123
+AppFile=TstApp
+Attributes=2
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+PropertiesCount=0
+OwnedFileCount=1
+FileName0=C:\System\file2
+ServiceInfoCount=5
+ServiceUid0=10101010
+ServiceDataTypeCount0=0
+
+ServiceUid1=01020304
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_text_for_service_uid_0x01020304
+ServiceDataTypeCount1=1
+ServiceDataTypePriority0=0
+ServiceDataType0=text/custom1
+
+ServiceUid2=02345000
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_text_for_service_uid_0x02345000
+ServiceDataTypeCount2=0
+
+ServiceUid3=05678000
+ServiceOpaqueDataInfoCount3=1
+ServiceOpaqueLocale2=0
+ServiceOpaqueData2=Non-localised_text_for_service_uid_0x01020304
+ServiceDataTypeCount3=0
+
+ServiceUid4=01020305
+ServiceOpaqueDataInfoCount4=1
+ServiceOpaqueLocale3=1
+ServiceOpaqueData3=Localised_text_for_service_UID_0x01020305
+ServiceDataTypeCount4=0
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=TCUK
+LocAppLanguage0=1
+LocCaption0=TstCapUK
+LocNumberOfAppIcons0=1
+ViewDataCount0=2
+VwUid0=270565258
+VwScreenMode0=0
+VwCaption0=V1UK
+VwNumberOfAppIcons0=1
+VwUid1=270565259
+VwScreenMode1=0
+VwCaption1=V2UK
+VwNumberOfAppIcons1=1
+
+[get_app_reg_info_02]
+AppUid=124
+AppFile=TstApp2
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=Games
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=TstApp2
+LocCaption0=TstApp2Caption
+LocNumberOfAppIcons0=0
+ViewDataCount0=0
+
+[ApplicationRegistrationData_MultipleApp_Locale_Ger_08]
+NoOfEntries=1
+AppRegEntriesConfigCount=1
+configsection0 = get_app_reg_info_ab0_08
+configsection1 = get_app_reg_info_abc_03
+configsection2 = get_app_reg_info_abd_03
+
+[get_app_reg_info_ab0_08]
+AppUid=E8000AB0
+AppFile=interpretsis_testcase_08
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=AppNameGroup
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount= 1
+AppOpaqueLocale0=0
+AppOpaqueData0=Non-localised_resource
+PropertiesCount=0
+OwnedFileCount=2
+FileName0=z:\temp\AppNameTempFile.txt
+FileName1=z:\temp\AppName.txt
+ServiceInfoCount=3
+ServiceUid0=10208dca
+ServiceDataTypeCount0=2
+ServiceDataTypePriority0=0
+ServiceDataType0=image/jpeg1
+ServiceDataTypePriority1=0
+ServiceDataType1=image/gif1
+
+ServiceUid1=0ffb3bf3
+ServiceOpaqueDataInfoCount1=1
+ServiceOpaqueLocale0=0
+ServiceOpaqueData0=Non-localised_service_uid_01020304
+ServiceDataTypeCount1=2
+ServiceDataTypePriority2=0
+ServiceDataType2=image/jpeg2
+ServiceDataTypePriority3=0
+ServiceDataType3=image/gif2
+
+ServiceUid2=0ffb3bf4
+ServiceOpaqueDataInfoCount2=1
+ServiceOpaqueLocale1=0
+ServiceOpaqueData1=Non-localised_service_uid_02030405
+ServiceDataTypeCount2=2
+ServiceDataTypePriority4=0
+ServiceDataType4=image/jpeg3
+ServiceDataTypePriority5=0
+ServiceDataType5=image/gif3
+
+LocalizableAppInfoCount=1
+
+LocShortCaption0=Hallo
+LocAppLanguage0=3
+LocGroupName0=Tapash_Group
+LocCaption0=Hallo_Welt
+LocIconFileName0=\resource\apps\interpretsis_testcase03.mbm
+LocNumberOfAppIcons0=2
+ViewDataCount0=2
+VwUid0=268123123
+VwScreenMode0=0
+VwCaption0=view_268123123_caption_ger
+VwIconFileName0=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons0=5
+VwUid1=268123124
+VwScreenMode1=1
+VwCaption1=view_268123124_caption_ger
+VwIconFileName1=z:\resource\apps\interpretsis_testcase01.mbm
+VwNumberOfAppIcons1=6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_defaultvaluetest.script	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,43 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+//
+PRINT Device supported language tests
+
+// Load Suite
+LOAD_SUITE tscr -SharedData
+SHARED_DATA z:\tusif\tscr\tscr.ini shared_data
+LOAD_SUITE tSisRegistryTest
+LOAD_SUITE tscrapparc
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//! @SYMTestCaseID 		INT_DefaultValueTest
+//! @SYMTestCaseDesc 	Add an applications registration info to a corrupt DB
+//! @SYMPREQ  			PREQ1835
+//! @SYMTestStatus		Released
+//! @SYMTestPriority 	High
+//! @SYMTestActions 	Check Adding an applications registration info to a corrupt DB.
+//! @SYMTestExpectedResults 	Positive TestCases
+//! @SYMTestType		CIT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+START_TESTCASE INT_DefaultValueTest
+
+RUN_TEST_STEP 100 tscr SCRAddApplicationEntry c:\tswi\tinterpretsisinteg\scripts\ini.ini add_app_reg_info_sameappfile
+
+END_TESTCASE INT_DefaultValueTest
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/testcase-interpretsis-01/argumentfile.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,19 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+DEVICE_SUPPORTED_LANGUAGE = 01
+DEVICE_SUPPORTED_LANGUAGE = 03
+DEVICE_SUPPORTED_LANGUAGE = 04
+DEVICE_SUPPORTED_LANGUAGE = 24
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_05.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,17 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+DEVICE_SUPPORTED_LANGUAGE = 01
+DEVICE_SUPPORTED_LANGUAGE = 03
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/testcase-interpretsis-01/argumentfile_10.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,16 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+DEVICE_SUPPORTED_LANGUAGE = 03
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/testelseifdata/file0	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1 @@
+Some data
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/testelseifdata/testelseif.pkg	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,22 @@
+&EN
+
+#{"TestElseIf"}, (0x2002cccf), 1, 0, 0, TYPE=SA
+%{"SJ"}
+:"SJ"
+
+IF (0)
+	"\epoc32\winscw\c\tswi\tinterpretsisinteg\TestElseIfData\file0"-"c:\data\First_first.txt"
+
+ELSEIF (0) 
+	"\epoc32\winscw\c\tswi\tinterpretsisinteg\TestElseIfData\file0"-"c:\data\First_second.txt"
+
+ELSEIF (0) 
+	"\epoc32\winscw\c\tswi\tinterpretsisinteg\TestElseIfData\file0"-"c:\data\First_third.txt"
+
+ELSEIF (1)
+	"\epoc32\winscw\c\tswi\tinterpretsisinteg\TestElseIfData\file0"-"c:\data\First_fourth.txt"
+
+ELSE
+	"\epoc32\winscw\c\tswi\tinterpretsisinteg\TestElseIfData\file0"-"c:\data\First_fifth.txt"
+
+ENDIF
\ No newline at end of file
--- a/secureswitools/swisistools/test/tinterpretsisinteg/testinterpretsis.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/testinterpretsis.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
--- a/secureswitools/swisistools/test/tinterpretsisinteg/testinterpretsis_db.bat	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/testinterpretsis_db.bat	Tue Aug 31 15:21:33 2010 +0300
@@ -2745,6 +2745,28 @@
 if not %errorlevel%==0 GOTO LAST
 GOTO PASS_CLEAN
 
+:TestElseIF
+call makesis \epoc32\winscw\c\tswi\tinterpretsisinteg\testelseifdata\testelseif.pkg \epoc32\winscw\c\tswi\tinterpretsisinteg\sisfiles\testelseif.sis > NUL
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tinterpretsisinteg/sisfiles/testelseif.sis -w info -l /epoc32/winscw/c/interpretsis_test_harness_db.txt 
+if not %errorlevel%==0 GOTO LAST
+
+set exist_file=.\cdrive\data\First_first.txt
+if exist %exist_file% GOTO FAIL_FOUND
+
+set exist_file=.\cdrive\data\First_second.txt
+if exist %exist_file% GOTO FAIL_FOUND
+
+set exist_file=.\cdrive\data\First_third.txt
+if exist %exist_file% GOTO FAIL_FOUND
+
+set exist_file=.\cdrive\data\First_fifth.txt
+if exist %exist_file% GOTO FAIL_FOUND
+
+set exist_file=.\cdrive\data\First_fourth.txt
+if not exist %exist_file% GOTO FAIL_NOT_FOUND
+GOTO PASS_CLEAN
+
+
 REM Tests for native registry > NUL
 
 :PASS_CLEAN
--- a/secureswitools/swisistools/test/tinterpretsisinteg/testlistdb.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/testlistdb.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -489,6 +489,11 @@
 	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\makesisf006_db.bat B testdataF006Def</command>
 	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\check.pl">testdataf006Def testcasef006Deffile.txt 1 "positive" "both" 0</check>
 	</test>	
+<test id="testdataM001a">
+	<title>testdataM001a</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\makesism001a_db.bat testdataM001a </command>
+	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\check.pl">testdataM001a testcasem001file.txt 1 "positive" "both"</check>
+	</test>
 <test id="testdataM001">
 	<title>testdataM001</title>
 	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\makesism001_db.bat testdataM001 </command>
@@ -1654,6 +1659,54 @@
 	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\api-inst-preq2525-interpretsis-19_db.bat API-INST-PREQ2525-InterpretSIS-19</command>
 	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\check.pl">API-INST-PREQ2525-InterpretSIS-19 preq2525-interpretsis-19.txt 1 "positive" "none"</check>
 	</test>
+	
+	<test id="API-INST-testcase-InterpretSIS-01">
+	<title>API-INST-testcase-InterpretSIS-01</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\api-inst-testcase-interpretsis-01_db.bat  API-INST-testcase-InterpretSIS-01</command>
+	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\swicheck.pl">API-INST-testcase-InterpretSIS-01  API-INST-testcase-InterpretSIS-01 3  "positive"  "both" "nouid" "nobatchfile" "API-INST-testcase-InterpretSIS-01.script" "API-INST-testcase-InterpretSIS-01.htm" "FAIL = 0" "FAIL = 0" </check>
+	</test>
+	
+	<test id="API-INST-testcase-InterpretSIS-02">
+	<title>API-INST-testcase-InterpretSIS-02</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\api-inst-testcase-interpretsis-02_db.bat  API-INST-testcase-InterpretSIS-02</command>
+	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\swicheck.pl">API-INST-testcase-InterpretSIS-02  API-INST-testcase-InterpretSIS-02 3  "positive"  "both" "nouid" "nobatchfile" "API-INST-testcase-InterpretSIS-02.script" "API-INST-testcase-InterpretSIS-02.htm" "FAIL = 0" "FAIL = 0" </check>
+	</test>
+	
+	<test id="API-INST-testcase-InterpretSIS-03">
+	<title>API-INST-testcase-InterpretSIS-03</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\api-inst-testcase-interpretsis-03_db.bat  API-INST-testcase-InterpretSIS-03</command>
+	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\swicheck.pl">API-INST-testcase-InterpretSIS-03  API-INST-testcase-InterpretSIS-03 3  "positive"  "both" "nouid" "nobatchfile" "API-INST-testcase-InterpretSIS-03.script" "API-INST-testcase-InterpretSIS-03.htm" "FAIL = 0" "FAIL = 0" </check>
+	</test>
+	
+	<test id="API-INST-testcase-InterpretSIS-04">
+	<title>API-INST-testcase-InterpretSIS-04</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\api-inst-testcase-interpretsis-04_db.bat  API-INST-testcase-InterpretSIS-04</command>
+	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\swicheck.pl">API-INST-testcase-InterpretSIS-04  API-INST-testcase-InterpretSIS-04 3  "positive"  "both" "nouid" "nobatchfile" "API-INST-testcase-InterpretSIS-04.script" "API-INST-testcase-InterpretSIS-04.htm" "FAIL = 0" "FAIL = 0" </check>
+	</test>
+	
+	<test id="API-INST-testcase-InterpretSIS-05">
+	<title>API-INST-testcase-InterpretSIS-05</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\api-inst-testcase-interpretsis-05_db.bat  API-INST-testcase-InterpretSIS-05</command>
+	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\swicheck.pl">API-INST-testcase-InterpretSIS-05  API-INST-testcase-InterpretSIS-05 3  "positive"  "both" "nouid" "nobatchfile" "API-INST-testcase-InterpretSIS-05.script" "API-INST-testcase-InterpretSIS-05.htm" "FAIL = 0" "FAIL = 0" </check>
+	</test>
+
+	<test id="API-INST-testcase-InterpretSIS-06">
+	<title>API-INST-testcase-InterpretSIS-06</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\api-inst-testcase-interpretsis-06_db.bat  API-INST-testcase-InterpretSIS-06</command>
+	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\swicheck.pl">API-INST-testcase-InterpretSIS-06  API-INST-testcase-InterpretSIS-06 3  "positive"  "both" "nouid" "nobatchfile" "API-INST-testcase-InterpretSIS-06.script" "API-INST-testcase-InterpretSIS-06.htm" "FAIL = 0" "FAIL = 0" </check>
+	</test>
+	
+	<test id="API-INST-testcase-InterpretSIS-07">
+	<title>API-INST-testcase-InterpretSIS-07 Install sis</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\api-inst-testcase-interpretsis-07_db.bat API-INST-testcase-InterpretSIS-07</command>
+	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\check.pl">API-INST-testcase-InterpretSIS-07 testcase-interpretsis-07.txt 1 "negative" "none"</check>
+	</test>
+	
+	<test id="API-INST-testcase-InterpretSIS-08">
+	<title>API-INST-testcase-InterpretSIS-08</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\api-inst-testcase-interpretsis-08_db.bat  API-INST-testcase-InterpretSIS-08</command>
+	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\swicheck.pl">API-INST-testcase-InterpretSIS-08  API-INST-testcase-InterpretSIS-08 3  "positive"  "both" "nouid" "nobatchfile" "API-INST-testcase-InterpretSIS-08.script" "API-INST-testcase-InterpretSIS-08.htm" "FAIL = 0" "FAIL = 0" </check>
+	</test>
 
 <test id="INT_NR_Option-01">
 	<title>INT_NR_Option-01</title>
@@ -1888,5 +1941,17 @@
 	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\int_nr_option-39_db.bat  INT_NR_Option-39</command>
 	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\swicheck.pl">INT_NR_Option-39  INT_NR_Option-39 3  "positive"  "both" "nouid" "nobatchfile" "int_nr_option-39.script" "int_nr_option-39.htm" "FAIL = 0" "FAIL = 0" </check>
 	</test>
-	
+
+<test id="Test_ELSEIF_Block">
+	<title>Test_ELSEIF_Block</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\testinterpretsis_db.bat TestElseIF</command>
+	<check type="result"/>
+	</test>
+
+<test id="INT_DefaultValueTest">
+	<title>INT_DefaultValueTest</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\int_defaultvaluetest_db.bat  INT_DefaultValueTest</command>
+	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\swicheck.pl">INT_DefaultValueTest  INT_DefaultValueTest 3  "positive"  "both" "nouid" "nobatchfile" "int_defaultvaluetest.script" "int_defaultvaluetest.htm" "FAIL = 0" "FAIL = 0" </check>
+</test>
+
 </testlist>
--- a/secureswitools/swisistools/test/tscrtool/data/create_db.xml	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/test/tscrtool/data/create_db.xml	Tue Aug 31 15:21:33 2010 +0300
@@ -9,25 +9,45 @@
 	<SQLQuery>CREATE TABLE SoftwareTypeNames(NameId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeId INTEGER NOT NULL,Locale INTEGER DEFAULT 0,Name TEXT NOT NULL);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_SoftwareTypeNames_SoftwareTypeId ON SoftwareTypeNames(SoftwareTypeId);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_SoftwareTypeNames_Name ON SoftwareTypeNames(Name);</SQLQuery>
-	<SQLQuery>CREATE TABLE SoftwareTypes(SoftwareTypeId INTEGER PRIMARY KEY NOT NULL,SifPluginUid INTEGER,InstallerSecureId INTEGER,ExecutionLayerSecureId INTEGER);</SQLQuery>
+	<SQLQuery>CREATE TABLE SoftwareTypes(SoftwareTypeId INTEGER PRIMARY KEY NOT NULL,SifPluginUid INTEGER,LauncherExecutable TEXT);</SQLQuery>
+	<SQLQuery>CREATE TABLE CustomAccessList(AccessId INTEGER PRIMARY KEY AUTOINCREMENT,SoftwareTypeId INTEGER NOT NULL,SecureId INTEGER NOT NULL,AccessMode INTEGER DEFAULT 0);</SQLQuery>
 	<SQLQuery>CREATE TABLE MimeTypes(MimeTypeId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeId INTEGER NOT NULL,MimeType TEXT NOT NULL UNIQUE COLLATE NOCASE);</SQLQuery>
-	<SQLQuery>CREATE INDEX idx_MimeTypes_SoftwareType ON MimeTypes(SoftwareTypeId);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_MimeTypes_SoftwareTypeId ON MimeTypes(SoftwareTypeId);</SQLQuery>
 	<SQLQuery>CREATE TABLE Components(ComponentId INTEGER PRIMARY KEY AUTOINCREMENT,SoftwareTypeId INTEGER NOT NULL,SoftwareTypeName TEXT NOT NULL,Size INTEGER DEFAULT 0,Removable BOOLEAN DEFAULT 1,ScomoState INTEGER DEFAULT 0,DRMProtected INTEGER DEFAULT 0,Hidden INTEGER DEFAULT 0,KnownRevoked INTEGER DEFAULT 0,OriginVerified INTEGER DEFAULT 0,InstalledDrives INTEGER DEFAULT 0,GlobalIdHash INTEGER DEFAULT 0,GlobalId TEXT UNIQUE,Version TEXT,InstallTime TEXT NOT NULL,CompPresence BOOLEAN DEFAULT 1);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_Components_SoftwareTypeId ON Components(SoftwareTypeId);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_Components_GlobalIdIdHash ON Components(GlobalIdHash);</SQLQuery>
-	<SQLQuery>CREATE TABLE ComponentLocalizables(CompLocalId INTEGER PRIMARY KEY AUTOINCREMENT, ComponentId INTEGER DEFAULT 0,ApplicationId INTEGER DEFAULT 0,Locale INTEGER DEFAULT 0,Name TEXT NOT NULL,Vendor TEXT);</SQLQuery>
+	<SQLQuery>CREATE TABLE ComponentLocalizables(CompLocalId INTEGER PRIMARY KEY AUTOINCREMENT, ComponentId INTEGER DEFAULT 0,Locale INTEGER DEFAULT 0,Name TEXT NOT NULL,Vendor TEXT);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_ComponentLocalizables_ComponentId ON ComponentLocalizables(ComponentId);</SQLQuery>
-	<SQLQuery>CREATE TABLE ComponentDependencies(GlobalIdHash INTEGER PRIMARY KEY NOT NULL,DependantGlobalId TEXT NOT NULL,SupplierGlobalId TEXT NOT NULL);</SQLQuery>
+	<SQLQuery>CREATE TABLE ComponentDependencies(GlobalIdHash INTEGER PRIMARY KEY NOT NULL,DependantGlobalIdHash INTEGER NOT NULL, SupplierGlobalIdHash INTEGER NOT NULL, DependantGlobalId TEXT NOT NULL,SupplierGlobalId TEXT NOT NULL,VersionFrom TEXT, VersionTo TEXT);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ComponentDependencies_DependantGlobalId ON ComponentDependencies(DependantGlobalIdHash);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ComponentDependencies_SupplierGlobalId ON ComponentDependencies(SupplierGlobalIdHash);</SQLQuery>
 	<SQLQuery>CREATE TABLE ComponentsFiles(CmpFileId INTEGER PRIMARY KEY NOT NULL,ComponentId INTEGER NOT NULL,LocationHash INTEGER DEFAULT 0,Location TEXT NOT NULL COLLATE NOCASE);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_ComponentsFiles_ComponentId ON ComponentsFiles(ComponentId);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_ComponentsFiles_LocationHash ON ComponentsFiles(LocationHash);</SQLQuery>
 	<SQLQuery>CREATE TABLE ComponentProperties(PropertyId INTEGER PRIMARY KEY NOT NULL,Name TEXT NOT NULL COLLATE NOCASE,Locale INTEGER DEFAULT 0,ComponentId INTEGER NOT NULL,IntValue INTEGER,StrValue TEXT,IsStr8Bit BOOLEAN DEFAULT 0);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_ComponentProperties_Name ON ComponentProperties(Name);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_ComponentProperties_ComponentId ON ComponentProperties(ComponentId);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ComponentProperties_IntValue ON ComponentProperties(IntValue);</SQLQuery>
 	<SQLQuery>CREATE TABLE FileProperties(PropertyId INTEGER PRIMARY KEY NOT NULL,Name TEXT NOT NULL COLLATE NOCASE,CmpFileId INTEGER NOT NULL,IntValue INTEGER,StrValue TEXT, Locale INTEGER DEFAULT 0,IsStr8Bit BOOLEAN DEFAULT 0);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_FileProperties_Name ON FileProperties(Name);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_FileProperties_CmpFileId ON FileProperties(CmpFileId);</SQLQuery>
 	<SQLQuery>CREATE TABLE ScrVersion(MajorVersion INTEGER NOT NULL, MinorVersion INTEGER NOT NULL, BuildNumber INTEGER NOT NULL);</SQLQuery>
 	<SQLQuery>INSERT INTO ScrVersion(MajorVersion, MinorVersion, BuildNumber) VALUES(1, 1, 1);</SQLQuery>
+	<SQLQuery>CREATE TABLE AppRegistrationInfo(AppUid INTEGER PRIMARY KEY NOT NULL,ComponentId INTEGER DEFAULT 0,AppFile TEXT COLLATE NOCASE UNIQUE NOT NULL,TypeId INTEGER NOT NULL,Attributes INTEGER DEFAULT 0,Hidden INTEGER DEFAULT 0,Embeddable INTEGER DEFAULT 0,NewFile INTEGER DEFAULT 0,Launch INTEGER DEFAULT 0,GroupName TEXT COLLATE NOCASE,DefaultScreenNumber INTEGER DEFAULT 0);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_AppRegistrationInfo_AppFile ON AppRegistrationInfo(AppFile);</SQLQuery>
+	<SQLQuery>CREATE TABLE FileOwnershipInfo(FileOwnerInfoId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,FileName TEXT NOT NULL COLLATE NOCASE);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_FileOwnershipInfo_AppUid ON FileOwnershipInfo(AppUid);</SQLQuery>
+	<SQLQuery>CREATE TABLE ServiceInfo(ServiceId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,Uid INTEGER DEFAULT 0);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ServiceInfo_AppUid ON ServiceInfo(AppUid);</SQLQuery>
+	<SQLQuery>CREATE TABLE DataType(DataTypeId INTEGER PRIMARY KEY AUTOINCREMENT,ServiceId INTEGER NOT NULL,Priority INTEGER NOT NULL,Type TEXT NOT NULL COLLATE NOCASE);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_DataType_ServiceId ON DataType(ServiceId);</SQLQuery>
+	<SQLQuery>CREATE TABLE LocalizableAppInfo(LocalAppInfoId INTEGER PRIMARY KEY AUTOINCREMENT,AppUid INTEGER NOT NULL,ShortCaption TEXT COLLATE NOCASE,GroupName TEXT COLLATE NOCASE,Locale INTEGER DEFAULT 0,CaptionAndIconId INTEGER,CONSTRAINT U_AppUid_Locale UNIQUE (AppUid,Locale));</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_LocalizableAppInfo ON LocalizableAppInfo(AppUid,Locale);</SQLQuery>
+	<SQLQuery>CREATE TABLE ViewData(ViewId INTEGER PRIMARY KEY AUTOINCREMENT,LocalAppInfoId INTEGER NOT NULL,Uid INTEGER NOT NULL,ScreenMode INTEGER DEFAULT 0,CaptionAndIconId INTEGER);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_ViewData_LocalAppInfoId ON ViewData(LocalAppInfoId);</SQLQuery>
+	<SQLQuery>CREATE TABLE CaptionAndIconInfo(CaptionAndIconId INTEGER PRIMARY KEY AUTOINCREMENT,Caption TEXT COLLATE NOCASE,NumberOfIcons INTEGER DEFAULT 0,IconFile TEXT COLLATE NOCASE);</SQLQuery>
+	<SQLQuery>CREATE TABLE AppProperties(PropertyId INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT NOT NULL COLLATE NOCASE,Locale INTEGER DEFAULT 0,AppUid INTEGER NOT NULL,ServiceUid INTEGER DEFAULT 0,IntValue INTEGER,StrValue TEXT,IsStr8Bit BOOLEAN DEFAULT 0,CONSTRAINT U_AppUid_Locale_Name UNIQUE (AppUid,ServiceUid,Locale,Name));</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_AppProperties_AppUid ON AppProperties(AppUid);</SQLQuery>
+	<SQLQuery>CREATE INDEX idx_AppProperties_Name ON AppProperties(Name);</SQLQuery>
 </CreateDatabase>
 
Binary file secureswitools/swisistools/test/tscrtool/data/preprovision.dtd has changed
Binary file secureswitools/swisistools/test/tscrtool/data/preprovision_appregattribmissing.xml has changed
Binary file secureswitools/swisistools/test/tscrtool/data/preprovision_appreginfo.xml has changed
Binary file secureswitools/swisistools/test/tscrtool/data/preprovision_invalid_appproperty.xml has changed
Binary file secureswitools/swisistools/test/tscrtool/data/preprovision_noappattrib.xml has changed
Binary file secureswitools/swisistools/test/tscrtool/data/preprovision_nocaptioniconinfo.xml has changed
Binary file secureswitools/swisistools/test/tscrtool/data/preprovision_nullappfile.xml has changed
Binary file secureswitools/swisistools/test/tscrtool/data/preprovision_nullappuid.xml has changed
Binary file secureswitools/swisistools/test/tscrtool/data/update_db.dtd has changed
Binary file secureswitools/swisistools/test/tscrtool/data/update_db_end_tag_missing.xml has changed
Binary file secureswitools/swisistools/test/tscrtool/data/update_db_test.xml has changed
Binary file secureswitools/swisistools/test/tscrtool/data/update_db_unicode.xml has changed
--- a/secureswitools/swisistools/test/tscrtool/tscrtool.ini	Thu Aug 19 10:02:49 2010 +0300
+++ b/secureswitools/swisistools/test/tscrtool/tscrtool.ini	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -139,14 +139,14 @@
 checkdbexists = %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\unicodescr.db
 result=ENone
 
-# preprovision application xml file does not have an attribute specified.
+# preprovision application xml file does not have an attribute specified for ComponentProperty.
 [sec/swi/scrtool/0023]
-option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_attribute_missing.xml
+option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\update_db_test.xml -p %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_attribute_missing.xml
 result=EParseError
 
 # preprovision for handling conditions.
 [sec/swi/scrtool/0024]
-option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_coverage.xml
+option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\update_db_test.xml -p %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_coverage.xml
 result=ENone
 
 # Usage of -f and -p together: positive test
@@ -159,7 +159,42 @@
 option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\update_db_test.xml -p %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_doesnotexist.xml
 result=EFileNotPresent
 
-# Usage of -f and -p together: negative test - use nonexisting update_db XML XML
+# Usage of -f and -p together: negative test - use nonexisting update_db XML
 [sec/swi/scrtool/0027]
 option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\update_db_nonexisting.xml -p %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_symbian.xml
 result=EFileNotPresent
+
+# Usage of -f and -p together: preprovision xml having registration information
+[sec/swi/scrtool/0028]
+option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\update_db_test.xml -p %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_appreginfo.xml
+result=ENone
+
+# Usage of -f and -p together: preprovision xml having null app uid
+[sec/swi/scrtool/0029]
+option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\update_db_test.xml -p %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_nullappuid.xml
+result=ESqlCorrupt
+
+# Usage of -f and -p together: preprovision xml with attribute missing for LocalizableInfo
+[sec/swi/scrtool/0030]
+option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\update_db_test.xml -p %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_appregattribmissing.xml
+result=EParseError
+
+# Usage of -f and -p together: preprovision xml with no application attributes
+[sec/swi/scrtool/0031]
+option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\update_db_test.xml -p %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_noappattrib.xml
+result=EParseError
+
+# Usage of -f and -p together: preprovision xml having null app file field
+[sec/swi/scrtool/0032]
+option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\update_db_test.xml -p %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_nullappfile.xml
+result=ESqlCorrupt
+
+# Usage of -f and -p together: preprovision xml having no caption and icon info
+[sec/swi/scrtool/0033]
+option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\update_db_test.xml -p %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_nocaptioniconinfo.xml
+result=ENone
+
+# Negative case Usage of preprovision xml having both Strvalue and Intvalue in AppProperty Table
+[sec/swi/scrtool/0034]
+option = -c create.db -f %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\update_db_test.xml -p %EPOCROOT%epoc32\winscw\c\tswi\tscrtool\data\preprovision_invalid_appproperty.xml
+result=EParseError
\ No newline at end of file
--- a/sysdef_1_4_0.dtd	Thu Aug 19 10:02:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
- <!ELEMENT SystemDefinition (systemModel?, build?)>
- <!ATTLIST SystemDefinition
-  name CDATA #REQUIRED
-  schema CDATA #REQUIRED>
- <!ELEMENT systemModel (layer+)>
- <!ELEMENT layer (logicalset* | module*)*>
- <!ATTLIST layer
-  name CDATA #REQUIRED
-  levels CDATA #IMPLIED
-  span CDATA #IMPLIED>
- <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
- <!ATTLIST logicalset name CDATA #REQUIRED>
- <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
- <!ATTLIST logicalsubset name CDATA #REQUIRED>
- <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
- <!ATTLIST module
-  name CDATA #REQUIRED
-  level CDATA #IMPLIED>
- <!ELEMENT component (unit* | package* | prebuilt*)*>
- <!ATTLIST component name CDATA #REQUIRED>
- <!ELEMENT unit EMPTY>
- <!ATTLIST unit
-  unitID ID #REQUIRED
-  name CDATA #REQUIRED
-  mrp CDATA #REQUIRED
-  filter CDATA #IMPLIED
-  bldFile CDATA #REQUIRED
-  priority CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT package EMPTY>
- <!ATTLIST package
-  name CDATA #REQUIRED
-  mrp CDATA #REQUIRED
-  filter CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT prebuilt EMPTY>
- <!ATTLIST prebuilt
-  name CDATA #REQUIRED
-  version CDATA #REQUIRED
-  late (Y|N) #IMPLIED
-  filter CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
- <!ELEMENT unitList (unitRef+)>
- <!ATTLIST unitList
-  name ID #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT unitRef EMPTY>
- <!ATTLIST unitRef unit IDREF #REQUIRED>
- <!ELEMENT targetList EMPTY>
- <!ATTLIST targetList
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  target IDREFS #REQUIRED>
- <!ELEMENT target EMPTY>
- <!ATTLIST target
-  name ID #REQUIRED
-  abldTarget CDATA #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT option EMPTY>
- <!ATTLIST option
-  name ID #REQUIRED
-  abldOption CDATA #REQUIRED
-  description CDATA #REQUIRED
-  enable (Y | N | y | n) #REQUIRED>
- <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
- <!ATTLIST configuration
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  filter CDATA #REQUIRED>
- <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
- <!ELEMENT unitListRef EMPTY>
- <!ATTLIST unitListRef unitList IDREF #REQUIRED>
- <!ELEMENT layerRef EMPTY>
- <!ATTLIST layerRef layerName CDATA #REQUIRED>
- <!ELEMENT buildLayer EMPTY>
- <!ATTLIST buildLayer
-  command CDATA #REQUIRED
-  targetList IDREFS #IMPLIED
-  unitParallel (Y | N | y | n) #REQUIRED
-  targetParallel (Y | N | y | n) #IMPLIED>
- <!ELEMENT specialInstructions EMPTY>
- <!ATTLIST specialInstructions
-  name CDATA #REQUIRED
-  cwd CDATA #REQUIRED
-  command CDATA #REQUIRED>  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_5_1.dtd	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,88 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+  name CDATA #REQUIRED
+  levels CDATA #IMPLIED
+  span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+  name CDATA #REQUIRED
+  level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+  unitID ID #REQUIRED
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  bldFile CDATA #REQUIRED
+  priority CDATA #IMPLIED
+  contract CDATA #IMPLIED
+  proFile CDATA #IMPLIED
+  qmakeArgs CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+  name CDATA #REQUIRED
+  version CDATA #REQUIRED
+  late (Y|N) #IMPLIED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N | y | n) #REQUIRED
+  targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  command CDATA #REQUIRED>  
--- a/tsrc/group/bld.inf	Thu Aug 19 10:02:49 2010 +0300
+++ b/tsrc/group/bld.inf	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -21,7 +21,5 @@
 
 PRJ_TESTEXPORTS
 
+PRJ_TESTMMPFILES
 
-PRJ_TESTMMPFILES
-#include "../../appinstall_plat/appmngr2runtimeapi/tsrc/group/bld.inf"
-